GNU bug report logs - #22873
25.1.50; Feature Request -- Multiple Cursors (built-in support)

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Severity: wishlist; Reported by: Keith David Bershatsky <esq@HIDDEN>; dated Tue, 1 Mar 2016 18:46:01 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 22873 <at> debbugs.gnu.org:


Received: (at 22873) by debbugs.gnu.org; 1 Oct 2020 03:00:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 30 23:00:24 2020
Received: from localhost ([127.0.0.1]:33661 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kNopU-0003oh-7g
	for submit <at> debbugs.gnu.org; Wed, 30 Sep 2020 23:00:24 -0400
Received: from quimby.gnus.org ([95.216.78.240]:53570)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <larsi@HIDDEN>)
 id 1kNopS-0003oK-0N; Wed, 30 Sep 2020 23:00:22 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org;
 s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:
 References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:
 Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:
 Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:
 List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=ClK//VLNEXeQdQ9u0DTTDzPnAMp6l/2lS81fFOX5Y4g=; b=pmuTKxgWbqofuQoxizizmUL8Zj
 2mJkHWvcik2iqUbz0QqENSW+KGHPrU+GkBlLvRzW7UCsOULuveI1a3kDSNcgs8VsoCrbkCX07cRTI
 I80keTbGamUeq72r2BJIFOTi7t1LKPGsnZtYn03olyyv5I9vkF0VnHjoX7MEX9TNPhCk=;
Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=xo)
 by quimby with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <larsi@HIDDEN>)
 id 1kNopB-0001Dk-CK; Thu, 01 Oct 2020 05:00:08 +0200
From: Lars Ingebrigtsen <larsi@HIDDEN>
To: Keith David Bershatsky <esq@HIDDEN>
Subject: Re: bug#22873: #22873 (multiple fake cursors); and, #17684
 (crosshairs / fill-column).
References: <m2oaayavh1.wl%esq@HIDDEN> <m2wo5uoyd1.wl%esq@HIDDEN>
X-Now-Playing: Barbara Morgenstern's _Beide_: "Gleich is gleicher als gleich"
Date: Thu, 01 Oct 2020 05:00:02 +0200
In-Reply-To: <m2wo5uoyd1.wl%esq@HIDDEN> (Keith David Bershatsky's message
 of "Sat, 02 May 2020 13:50:18 -0700")
Message-ID: <87h7retzv1.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 @@CONTACT_ADDRESS@@ for details.
 Content preview: Keith David Bershatsky <esq@HIDDEN> writes: > VERSION:
 022.008 [05/02/2020] > > CHANGELOG: > > +(defgroup +-mode nil > + "Faces
 for the vertical ruler." > + :group 'convenience) This is a huge patch set,
 and I have not tried it. It seems like the general consensus is that, yes,
 we would like to have multiple cursors, but I'm not sure what this has to
 do with crosshairs? I've [...] 
 Content analysis details:   (-2.9 points, 5.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -1.0 ALL_TRUSTED            Passed through trusted hosts only via SMTP
 -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%
 [score: 0.0000]
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 22873
Cc: mbork@HIDDEN, 22873 <at> debbugs.gnu.org, johnw@HIDDEN, akioburns@HIDDEN,
 17684 <at> debbugs.gnu.org, eliz@HIDDEN, drew.adams@HIDDEN, rms@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Keith David Bershatsky <esq@HIDDEN> writes:

> VERSION:  022.008 [05/02/2020]
>
> CHANGELOG:
>
> +(defgroup +-mode nil
> +  "Faces for the vertical ruler."
> +  :group 'convenience)

This is a huge patch set, and I have not tried it.  It seems like the
general consensus is that, yes, we would like to have multiple cursors,
but I'm not sure what this has to do with crosshairs?  I've just lightly
skimmed this thread, though...

Anyway, I'm not sure what the status is here.  The naming standard
doesn't seem to follow Emacs convention -- there's a mode called
`+-mode', for instance, which would have to be renamed...

Keith, is this still a work in progress, or is it something you think is
ready to go, and would like a code review on?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#22873; Package emacs. Full text available.

Message received at 22873 <at> debbugs.gnu.org:


Received: (at 22873) by debbugs.gnu.org; 2 May 2020 20:50:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat May 02 16:50:27 2020
Received: from localhost ([127.0.0.1]:54039 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jUz5f-0006E7-KO
	for submit <at> debbugs.gnu.org; Sat, 02 May 2020 16:50:27 -0400
Received: from gateway23.websitewelcome.com ([192.185.49.180]:22606)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <esq@HIDDEN>) id 1jUz5d-0006Dt-4z
 for 22873 <at> debbugs.gnu.org; Sat, 02 May 2020 16:50:25 -0400
Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20])
 by gateway23.websitewelcome.com (Postfix) with ESMTP id 723CC4693
 for <22873 <at> debbugs.gnu.org>; Sat,  2 May 2020 15:50:24 -0500 (CDT)
Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP
 id Uz5bjKJ8ZAGTXUz5bjc1eg; Sat, 02 May 2020 15:50:24 -0500
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-Transfer-Encoding:Content-Type:MIME-Version:Subject:Cc
 :To:From:Message-ID:Date:Sender:Reply-To: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=HLFRezrTpY4JbBgS2M+WUQJZ2G1e2V5RsdDdOTePI3k=; b=mLktv8Qt0Zhga0YUSFVyY8nrhi
 b4xH1++VTKurNKVHcMuxEbaU88VXiXQUK/2QeBPQc/6COcFYWcdqS9kbqNyvNF++FyMJA22Y58BRt
 kkB4T5z4vqeSCpV33GPSg5wigQWXmDKN2TmPribSvAqk/rWcUzPdfmvFO159KMCe1aGgExoSaynAa
 7T9hNS8D5LWGfMTXjcr4Nnr/SIHxgSONcwsUrbQgPzAhHDGQ++O2nHhbbnxenaRgXReJPewZdZ+JJ
 S/GST6wX/pIpBcqqQeEUvpeAd4EYhdMLIxtDYFYY9EVyt6nIGmkw2etr+l3YKZChtpKwsmQ5A3Wis
 qkapojPQ==;
Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:53077
 helo=server.private) by gator3053.hostgator.com with esmtpsa
 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92)
 (envelope-from <esq@HIDDEN>)
 id 1jUz5X-003qAY-OE; Sat, 02 May 2020 15:50:22 -0500
Date: Sat, 02 May 2020 13:50:18 -0700
Message-ID: <m2wo5uoyd1.wl%esq@HIDDEN>
From: Keith David Bershatsky <esq@HIDDEN>
To: 22873 <at> debbugs.gnu.org,17684 <at> debbugs.gnu.org
Subject: #22873 (multiple fake cursors);
 and, #17684 (crosshairs / fill-column).
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Multipart_Sat_May__2_13:50:18_2020-1"
Content-Transfer-Encoding: 8bit
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: 1jUz5X-003qAY-OE
X-Source: 
X-Source-Args: 
X-Source-Dir: 
X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.private)
 [45.48.239.195]:53077
X-Source-Auth: lawlist
X-Email-Count: 8
X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t
X-Local-Domain: yes
X-Debbugs-Envelope-To: 22873
Cc: mbork@HIDDEN, rms@HIDDEN, johnw@HIDDEN, akioburns@HIDDEN,
 eliz@HIDDEN, drew.adams@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--Multipart_Sat_May__2_13:50:18_2020-1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

VERSION:  022.008 [05/02/2020]


CHANGELOG:

- Calculate and set it->lnum when both NILP (Vdisplay_line_numbers) and features
  22873 / 17684 are active.  Line numbers are now recorded in the struct of each
  glyph:  glyph->lnum = it->lnum.  The cache of multiple fake cursors has been
  revised to also record the lnum of each fake cursor.  The recorded lnum is used
  to test for a `same_p` fake cursor situation; i.e., whether fake cursors should
  be erased and/or redrawn.

. The lnum is needed for an apparently uncommon, but nevertheless reproducible
  situation wherein a screen line is added/deleted and there are two or more
  subsequent consecutive lines having the same content; and, the character(s)
  added/deleted is/are the same size/shape of the subsequent consecutive screen
  lines.  `mc_update_window_erase' will erase a fake cursor on one of those
  subsequent consecutive lines depending upon whether the a screen line above is
  added/deleted.  With the unique exception of the recorded lnum, all other data
  in the cache of fake cursors will be identical as to one of those subsequent
  consecutive screen lines.

. EXAMPLE (word-wrap is non-nil) -- modification of the first paragraph by adding/
  deleting the word "boy" causes the screen line containing only the word group
  "fudge." to be added/deleted.  The fake cursor for the first _or_ second line
  containing "~//" will be erased, but the fake cursor for said line will not be
  redrawn by `mc_helper' unless the lnum data was previously used by
  `mc_update_window_erase' to make a the `same_p` determination.  In other words,
  the fake cursor at isue would be `same_p` _without_ using the lnum data, but
  is `!same_p` when we use the lnum data.

  Every good boy | deserves fudge.  Every good boy deserves fudge.  Every good ↩
  boy deserves fudge.| Every good boy deserves fudge.  Every good boy deserves ↩
  fudge.         |
                 |
  ~//            |   <=== This fake cursor IF adding the whole word "boy" with redo;
  ~//            |   <=== or, this fake cursor IF deleting the whole word "boy".

. The performance hit is zero when built-in line numbers are active, but perhaps
  mildly detectable when built-in line numbers are turned off.  Although line
  numbers are not being generated on the glass in the latter situation, Emacs will
  nevertheless be calling `display_count_lines_visually/logically' at the same
  locations as if the built-in line numbers were turned on.

. When `mc_update_text_area' processes the line containing the fake cursor that
  needs to be redrawn, the line is deemed to be UNCHANGED.  `clear_end_of_line'
  is not triggered and no floating fake cursors are redrawn based thereon.  This
  analysis was helpful in narrowing down the issue to the need for the lnum data
  as described hereinabove.


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:  Due to lack of free time available to dedicate to the development of
         features 22873 / 17684, applicability of the patch to the master branch
         is frozen at 07/14/2019:  ac57c5093829ee09084c562bbbc1c412179be13d

         In the new emacs repository folder, execute a hard reset to 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_Sat_May__2_13:50:18_2020-1
Content-Type: application/diff; type=patch
Content-Disposition: attachment; filename="2020_05_02__13_04_51_850.diff"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2xpc3AvKy1tb2RlLmVsIGIvbGlzcC8rLW1vZGUuZWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiN2M4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpc3Av
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
NGU5NDdkYS4uMWE3OTcxMSAxMDA2NDQKLS0tIGEvc3JjL2Rpc3BleHRlcm4uaAorKysgYi9zcmMv
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
ZXMuICAqLwogCiBlbnVtIHRleHRfY3Vyc29yX2tpbmRzCkBAIC00MDQsNiArNTI5LDIxIEBAIHN0
cnVjdCBnbHlwaF9zbGljZQogCiBzdHJ1Y3QgZ2x5cGgKIHsKKworCisvKiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBpbnQgcmVsYXRpdmVfeCwgaHBv
czsKKworICBwdHJkaWZmX3QgYnl0ZXBvczsKKworICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyLCB6
ZXJvLWJhc2VkLiAqLworICBwdHJkaWZmX3QgbG51bTsKKworLyogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ICovCisKKwogICAvKiBQb3NpdGlvbiBmcm9tIHdoaWNoIHRoaXMgZ2x5cGggd2FzIGRyYXduLiAg
SWYgYG9iamVjdCcgYmVsb3cgaXMgYQogICAgICBMaXNwIHN0cmluZywgdGhpcyBpcyBhbiBpbmRl
eCBpbnRvIHRoYXQgc3RyaW5nLiAgSWYgaXQgaXMgYQogICAgICBidWZmZXIsIHRoaXMgaXMgYSBw
b3NpdGlvbiBpbiB0aGF0IGJ1ZmZlci4gIEluIGFkZGl0aW9uLCBzb21lCkBAIC0xMjcwLDYgKzE0
MTAsMjggQEAgZW51bSBkcmF3X2dseXBoc19mYWNlCiAKIHN0cnVjdCBnbHlwaF9zdHJpbmcKIHsK
KworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwor
ICAgIGJvb2xfYmYgbGVmdF9vdmVyd3JpdHRlbl9wIDogMTsKKworICAgIGJvb2xfYmYgcmlnaHRf
b3ZlcndyaXR0ZW5fcCA6IDE7CisKKyAgICBib29sX2JmIHJlY3RhbmdsZV9udWtlZF9wIDogMTsK
KworICAgIGJvb2xfYmYgYmFja2dyb3VuZF9udWtlZF9wIDogMTsKKworICAgIGVudW0gZHJhd19n
bHlwaF9hY3Rpb24KKyAgICB7CisgICAgICBNQ19EUkFXX0dMWVBIX1NUUklORywKKyAgICAgIE1D
X0VSQVNFX0dMWVBIX1NUUklORworICAgIH0gYWN0aW9uX3R5cGU7CisKKy8qICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiAqLworCisKICAgLyogWC1vcmlnaW4gb2YgdGhlIHN0cmluZy4gICovCiAgIGludCB4
OwogCkBAIC0yODM0LDYgKzI5OTYsMjkgQEAgdHlwZWRlZiB2b2lkICgqZnJhbWVfcGFybV9oYW5k
bGVyKSAoc3RydWN0IGZyYW1lICosIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiAKIHN0cnVj
dCByZWRpc3BsYXlfaW50ZXJmYWNlCiB7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv
KiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy8qIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgbnN0
ZXJtLm1gIHwgYHczMnRlcm0uY2AgfCBgeHRlcm0uY2AgbXVzdCBiZSBpbiB0aGUKK2V4YWN0IHNh
bWUgb3JkZXIgYXMgdGhlIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgZGlzcGV4dGVybi5oYCEg
Ki8KKworICAvKiBgbWNfbnNfZHJhd193aW5kb3dfY3Vyc29yJyB8IGBtY193MzJfZHJhd193aW5k
b3dfY3Vyc29yJyB8IGBtY194X2RyYXdfd2luZG93X2N1cnNvcicgKi8KKyAgdm9pZCAoKm1jX3Nj
cmliZV9jdXJzb3IpIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRy
aXgsCisgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdywgaW50IHgsIGludCBmeCwg
aW50IHksIGludCBmeSwgaW50IGhwb3MsCisgICAgICAgIGludCB2cG9zLCBpbnQgd2QsIGludCBo
LCBzdHJ1Y3QgbWNfUkdCIGxzbCwgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwKKyAg
ICAgICAgaW50IGN1cnNvcl93aWR0aCwgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yLCBib29s
IG9uX3AsIGJvb2wgYWN0aXZlX3ApOworCisgIC8qIGBtY19uc19kcmF3X2dseXBoX3N0cmluZycg
fCBgbWNfdzMyX2RyYXdfZ2x5cGhfc3RyaW5nJyB8IGBtY194X2RyYXdfZ2x5cGhfc3RyaW5nJyAq
LworICB2b2lkICgqbWNfc2NyaWJlX3N0cmluZykgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0
cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93
LCBzdHJ1Y3QgbWNfbWF0cml4IG1jX21hdHJpeCwgc3RydWN0IG1jX1JHQiBsc2wsCisgICAgICAg
IGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3Jf
dHlwZSwgaW50IHdkLAorICAgICAgICBib29sIGFjdGl2ZV9wLCBib29sIGN1cnNvcl9nY19wKTsK
KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBIYW5kbGVycyBmb3Igc2V0dGlu
ZyBmcmFtZSBwYXJhbWV0ZXJzLiAgKi8KICAgZnJhbWVfcGFybV9oYW5kbGVyICpmcmFtZV9wYXJt
X2hhbmRsZXJzOwogCmRpZmYgLS1naXQgYS9zcmMvZGlzcG5ldy5jIGIvc3JjL2Rpc3BuZXcuYwpp
bmRleCAwMTMxYjYzLi5iNzUzMmE5IDEwMDY0NAotLS0gYS9zcmMvZGlzcG5ldy5jCisrKyBiL3Ny
Yy9kaXNwbmV3LmMKQEAgLTU2LDYgKzU2LDE3ODggQEAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJ
ZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KICNpbmNsdWRl
ICJ3MzIuaCIKICNlbmRpZgogDAorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVn
aW4gTVVMVElQTEUtQ1VSU09SUyAqLworCitzdHJ1Y3QgZ2x5cGhzX3NraXBwZWQKK3sKKyAgcHRy
ZGlmZl90IGFsbG9jYXRlZDsKKyAgcHRyZGlmZl90IHVzZWQ7CisgIHN0cnVjdCBza2lwcGVkX2l0
ZW1zCisgICAgeworICAgICAgaW50IHg7CisgICAgICBpbnQgaHBvczsKKyAgICAgIGJvb2wgZW5h
YmxlZF9wOworICAgIH0gKnNraXBwZWQ7Cit9IGFycmF5X2dseXBoc19za2lwcGVkOworCitzdHJ1
Y3QgbWNfcm93X2VudHJ5Cit7CisgIGludCBvbGRfdXNlcywgbmV3X3VzZXM7CisgIGludCBuZXdf
bGluZV9udW1iZXI7CisgIHB0cmRpZmZfdCBidWNrZXQ7CisgIHN0cnVjdCBnbHlwaF9yb3cgKnJv
dzsKKyAgc3RydWN0IG1jX3Jvd19lbnRyeSAqbmV4dDsKK307CitzdGF0aWMgc3RydWN0IG1jX3Jv
d19lbnRyeSAqbWNfcm93X2VudHJ5X3Bvb2w7CitzdGF0aWMgcHRyZGlmZl90IG1jX3Jvd19lbnRy
eV9wb29sX3NpemU7CitzdGF0aWMgcHRyZGlmZl90IG1jX3Jvd19lbnRyeV9pZHg7CitzdGF0aWMg
c3RydWN0IG1jX3Jvd19lbnRyeSAqKm1jX3Jvd190YWJsZTsKK3N0YXRpYyBwdHJkaWZmX3QgbWNf
cm93X3RhYmxlX3NpemU7CitzdGF0aWMgc3RydWN0IG1jX3Jvd19lbnRyeSAqKm1jX29sZF9saW5l
cywgKiptY19uZXdfbGluZXM7CitzdGF0aWMgcHRyZGlmZl90IG1jX29sZF9saW5lc19zaXplLCBt
Y19uZXdfbGluZXNfc2l6ZTsKK3N0YXRpYyBzdHJ1Y3QgcnVuICptY19ydW5fcG9vbDsKK3N0YXRp
YyBwdHJkaWZmX3QgbWNfcnVuc19zaXplOworc3RhdGljIHN0cnVjdCBydW4gKiptY19ydW5zOwor
CitzdGF0aWMgYm9vbCB1cGRhdGVfd2luZG93X2xpbmUgKHN0cnVjdCB3aW5kb3cgKiwgaW50LCBi
b29sICopOworCitzdGF0aWMgdm9pZCB1cGRhdGVfbWFyZ2luYWxfYXJlYSAoc3RydWN0IHdpbmRv
dyAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW51bSBnbHlwaF9yb3dfYXJlYSwgaW50KTsKKworc3RhdGljIHZvaWQgbWFrZV9jdXJyZW50
IChzdHJ1Y3QgZ2x5cGhfbWF0cml4ICosIHN0cnVjdCBnbHlwaF9tYXRyaXggKiwgaW50KTsKKwor
c3RhdGljIGJvb2wgcm93X2VxdWFsX3AgKHN0cnVjdCBnbHlwaF9yb3cgKiwgc3RydWN0IGdseXBo
X3JvdyAqLCBib29sKTsKKworc3RhdGljIHZvaWQgYXNzaWduX3JvdyAoc3RydWN0IGdseXBoX3Jv
dyAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICopOworCitzdGF0aWMgYm9vbAorbWNfdmVyaWZ5X3Jvd19o
YXNoIChzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cpCit7CisgIHJldHVybiByb3ctPmhhc2ggPT0gcm93
X2hhc2ggKHJvdyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWNfcm93X2VudHJ5ICoKK21jX2FkZF9y
b3dfZW50cnkgKHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKK3sKKyAgc3RydWN0IG1jX3Jvd19lbnRy
eSAqZW50cnk7CisgIHB0cmRpZmZfdCBpID0gcm93LT5oYXNoICUgbWNfcm93X3RhYmxlX3NpemU7
CisgIGVudHJ5ID0gbWNfcm93X3RhYmxlW2ldOworICBlYXNzZXJ0IChlbnRyeSB8fCBtY192ZXJp
Znlfcm93X2hhc2ggKHJvdykpOworICB3aGlsZSAoZW50cnkgJiYgIXJvd19lcXVhbF9wIChlbnRy
eS0+cm93LCByb3csIDEpKQorICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgIGlmIChlbnRyeSA9
PSBOVUxMKQorICAgIHsKKyAgICAgIGVudHJ5ID0gbWNfcm93X2VudHJ5X3Bvb2wgKyBtY19yb3df
ZW50cnlfaWR4Kys7CisgICAgICBlbnRyeS0+cm93ID0gcm93OworICAgICAgZW50cnktPm9sZF91
c2VzID0gZW50cnktPm5ld191c2VzID0gMDsKKyAgICAgIGVudHJ5LT5uZXdfbGluZV9udW1iZXIg
PSAwOworICAgICAgZW50cnktPmJ1Y2tldCA9IGk7CisgICAgICBlbnRyeS0+bmV4dCA9IG1jX3Jv
d190YWJsZVtpXTsKKyAgICAgIG1jX3Jvd190YWJsZVtpXSA9IGVudHJ5OworICAgIH0KKyAgcmV0
dXJuIGVudHJ5OworfQorCitzdHJ1Y3QgbWNfbWF0cml4CittY19zYXZlX2NhY2hlX21hdHJpeCAo
c3RydWN0IG1jX21hdHJpeCBtYXRyaXgpCit7CisgIHN0cnVjdCBtY19tYXRyaXggc2F2ZWQ7Cisg
IHNhdmVkLnZwb3NfYWxsb2NhdGVkID0gbWF0cml4LnZwb3NfYWxsb2NhdGVkOworICBzYXZlZC52
cG9zX3VzZWQgPSBtYXRyaXgudnBvc191c2VkOworICBzYXZlZC52cG9zID0geHphbGxvYyAoc2F2
ZWQudnBvc19hbGxvY2F0ZWQgKiBzaXplb2YgKnNhdmVkLnZwb3MpOworICBmb3IgKGVudW0gbWNf
Y2FjaGVfdHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgY2FjaGVfdHlwZSA8IE5P
X0NBQ0hFOworICAgICAgICsrY2FjaGVfdHlwZSkKKyAgICBzYXZlZC5jdXJzb3JzX3VzZWRbY2Fj
aGVfdHlwZV0gPSBtYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOworICBmb3IgKGludCB2
bnRoID0gMDsgdm50aCA8IG1hdHJpeC52cG9zX2FsbG9jYXRlZDsgKyt2bnRoKQorICAgIHsKKyAg
ICAgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsKKyAgICAg
ICAgICAgY2FjaGVfdHlwZSA8IE5PX0NBQ0hFOworICAgICAgICAgICArK2NhY2hlX3R5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICBzYXZlZC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNo
ZV90eXBlXSA9IG1hdHJpeC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBlXTsK
KyAgICAgICAgICBzYXZlZC52cG9zW3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0gPSBtYXRy
aXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgIGlmIChtYXRy
aXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBwdHJkaWZmX3QgbmJ5dGVzID0gbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfdXNl
ZFtjYWNoZV90eXBlXSAqIHNpemVvZiAoc3RydWN0IG1jX2NvbnRlbnRzKTsKKyAgICAgICAgICAg
ICAgc2F2ZWQudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSA9IHhtYWxsb2MgKG5ieXRlcyk7
CisgICAgICAgICAgICAgIG1lbWNweSAoc2F2ZWQudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XSwgbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV0sIG5ieXRlcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBzYXZlZDsKK30KKwordm9pZAorbWNf
eGZyZWVfY2FjaGVfbWF0cml4IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgbWNfbWF0cml4ICpt
YXRyaXgpCit7CisgIGlmIChtYXRyaXgtPnZwb3MgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIGZv
ciAoaW50IHZudGggPSAwOyB2bnRoIDwgbWF0cml4LT52cG9zX2FsbG9jYXRlZDsgKyt2bnRoKQor
ICAgIHsKKyAgICAgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNI
RTsKKyAgICAgICAgICAgY2FjaGVfdHlwZSA8IE5PX0NBQ0hFOworICAgICAgICAgICArK2NhY2hl
X3R5cGUpCisgICAgICAgIGlmIChtYXRyaXgtPnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVkW2Nh
Y2hlX3R5cGVdID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB4ZnJlZSAobWF0cml4LT52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdKTsKKyAgICAgICAgICAgIG1hdHJpeC0+dnBvc1t2
bnRoXS5jYWNoZVtjYWNoZV90eXBlXSA9IE5VTEw7CisgICAgICAgICAgICBtYXRyaXgtPnZwb3Nb
dm50aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdID0gMDsKKyAgICAgICAgICAgIG1hdHJp
eC0+dnBvc1t2bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdID0gMDsKKyAgICAgICAgICB9Cisg
ICAgfQorICB4ZnJlZSAobWF0cml4LT52cG9zKTsKKyAgbWF0cml4LT52cG9zID0gTlVMTDsKKyAg
bWF0cml4LT52cG9zX2FsbG9jYXRlZCA9IDA7CisgIG1hdHJpeC0+dnBvc191c2VkID0gMDsKKyAg
Zm9yIChlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNh
Y2hlX3R5cGUgPCBOT19DQUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgbWF0cml4LT5j
dXJzb3JzX3VzZWRbY2FjaGVfdHlwZV0gPSAwOworfQorCitzdHJ1Y3QgZ2x5cGhfbWF0cml4ICoK
K21jX3NhdmVfZ2x5cGhfbWF0cml4IChzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgpCit7Cisg
IHN0cnVjdCBnbHlwaF9tYXRyaXggKnNhdmVkID0geHphbGxvYyAoc2l6ZW9mICpzYXZlZCk7Cisg
IC8vIE5PVF9DT1BJRUQ6ICBzdHJ1Y3QgZ2x5cGhfcG9vbCAqcG9vbDsKKyAgc2F2ZWQtPnJvd3Nf
YWxsb2NhdGVkID0gbWF0cml4LT5yb3dzX2FsbG9jYXRlZDsKKyAgc2F2ZWQtPm5yb3dzID0gbWF0
cml4LT5ucm93czsKKyAgc2F2ZWQtPnJvd3MgPSB4emFsbG9jIChzYXZlZC0+bnJvd3MgKiBzaXpl
b2YgKnNhdmVkLT5yb3dzKTsKKyAgc2F2ZWQtPm1hdHJpeF94ID0gbWF0cml4LT5tYXRyaXhfeDsK
KyAgc2F2ZWQtPm1hdHJpeF95ID0gbWF0cml4LT5tYXRyaXhfeTsKKyAgc2F2ZWQtPm1hdHJpeF93
ID0gbWF0cml4LT5tYXRyaXhfdzsKKyAgc2F2ZWQtPm1hdHJpeF9oID0gbWF0cml4LT5tYXRyaXhf
aDsKKyAgc2F2ZWQtPndpbmRvd19waXhlbF9sZWZ0ID0gbWF0cml4LT53aW5kb3dfcGl4ZWxfbGVm
dDsKKyAgc2F2ZWQtPndpbmRvd19waXhlbF90b3AgPSBtYXRyaXgtPndpbmRvd19waXhlbF90b3A7
CisgIHNhdmVkLT53aW5kb3dfaGVpZ2h0ID0gbWF0cml4LT53aW5kb3dfaGVpZ2h0OworICBzYXZl
ZC0+d2luZG93X3dpZHRoID0gbWF0cml4LT53aW5kb3dfd2lkdGg7CisgIHNhdmVkLT53aW5kb3df
dnNjcm9sbCA9IG1hdHJpeC0+d2luZG93X3ZzY3JvbGw7CisgIHNhdmVkLT5sZWZ0X21hcmdpbl9n
bHlwaHMgPSBtYXRyaXgtPmxlZnRfbWFyZ2luX2dseXBoczsKKyAgc2F2ZWQtPnJpZ2h0X21hcmdp
bl9nbHlwaHMgPSBtYXRyaXgtPnJpZ2h0X21hcmdpbl9nbHlwaHM7CisgIHNhdmVkLT5ub19zY3Jv
bGxpbmdfcCA9IG1hdHJpeC0+bm9fc2Nyb2xsaW5nX3A7CisgIHNhdmVkLT5oZWFkZXJfbGluZV9w
ID0gbWF0cml4LT5oZWFkZXJfbGluZV9wOworI2lmZGVmIEdMWVBIX0RFQlVHCisgIC8vIHNhdmVk
LT5tZXRob2QgPSBtYXRyaXgtPm1ldGhvZDsKKyNlbmRpZgorICAvLyBOT1QgQ09QSUVEOiAgc3Ry
dWN0IGJ1ZmZlciAqYnVmZmVyOworICBzYXZlZC0+YmVndiA9IG1hdHJpeC0+YmVndjsKKyAgc2F2
ZWQtPnp2ID0gbWF0cml4LT56djsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYXZlZC0+bnJvd3M7
ICsraSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpmcm9tID0gbWF0cml4LT5yb3dz
ICsgaTsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnRvID0gc2F2ZWQtPnJvd3MgKyBpOworICAg
ICAgcHRyZGlmZl90IG5ieXRlcyA9IGZyb20tPnVzZWRbVEVYVF9BUkVBXSAqIHNpemVvZiAoc3Ry
dWN0IGdseXBoKTsKKyAgICAgIHRvLT5nbHlwaHNbVEVYVF9BUkVBXSA9IHhtYWxsb2MgKG5ieXRl
cyk7CisgICAgICBtZW1jcHkgKHRvLT5nbHlwaHNbVEVYVF9BUkVBXSwgZnJvbS0+Z2x5cGhzW1RF
WFRfQVJFQV0sIG5ieXRlcyk7CisgICAgICB0by0+dXNlZFtURVhUX0FSRUFdID0gZnJvbS0+dXNl
ZFtURVhUX0FSRUFdOworICAgICAgdG8tPmhhc2ggPSBmcm9tLT5oYXNoOworICAgICAgdG8tPngg
PSBmcm9tLT54OworICAgICAgdG8tPnkgPSBmcm9tLT55OworICAgICAgdG8tPnBpeGVsX3dpZHRo
ID0gZnJvbS0+cGl4ZWxfd2lkdGg7CisgICAgICB0by0+YXNjZW50ID0gZnJvbS0+YXNjZW50Owor
ICAgICAgdG8tPmhlaWdodCA9IGZyb20tPmhlaWdodDsKKyAgICAgIHRvLT5waHlzX2FzY2VudCA9
IGZyb20tPnBoeXNfYXNjZW50OworICAgICAgdG8tPnBoeXNfaGVpZ2h0ID0gZnJvbS0+cGh5c19o
ZWlnaHQ7CisgICAgICB0by0+dmlzaWJsZV9oZWlnaHQgPSBmcm9tLT52aXNpYmxlX2hlaWdodDsK
KyAgICAgIHRvLT5leHRyYV9saW5lX3NwYWNpbmcgPSBmcm9tLT5leHRyYV9saW5lX3NwYWNpbmc7
CisgICAgICB0by0+c3RhcnQgPSBmcm9tLT5zdGFydDsKKyAgICAgIHRvLT5lbmQgPSBmcm9tLT5l
bmQ7CisgICAgICB0by0+bWlucG9zID0gZnJvbS0+bWlucG9zOworICAgICAgdG8tPm1heHBvcyA9
IGZyb20tPm1heHBvczsKKyAgICAgIHRvLT5vdmVybGF5X2Fycm93X2JpdG1hcCA9IGZyb20tPm92
ZXJsYXlfYXJyb3dfYml0bWFwOworICAgICAgdG8tPmxlZnRfdXNlcl9mcmluZ2VfYml0bWFwID0g
ZnJvbS0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXA7CisgICAgICB0by0+cmlnaHRfdXNlcl9mcmlu
Z2VfYml0bWFwID0gZnJvbS0+cmlnaHRfdXNlcl9mcmluZ2VfYml0bWFwOworICAgICAgdG8tPmxl
ZnRfZnJpbmdlX2JpdG1hcCA9IGZyb20tPmxlZnRfZnJpbmdlX2JpdG1hcDsKKyAgICAgIHRvLT5y
aWdodF9mcmluZ2VfYml0bWFwID0gZnJvbS0+cmlnaHRfZnJpbmdlX2JpdG1hcDsKKyAgICAgIHRv
LT5sZWZ0X3VzZXJfZnJpbmdlX2ZhY2VfaWQgPSBmcm9tLT5sZWZ0X3VzZXJfZnJpbmdlX2ZhY2Vf
aWQ7CisgICAgICB0by0+cmlnaHRfdXNlcl9mcmluZ2VfZmFjZV9pZCA9IGZyb20tPnJpZ2h0X3Vz
ZXJfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICB0by0+bGVmdF9mcmluZ2VfZmFjZV9pZCA9IGZyb20t
PmxlZnRfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQgPSBm
cm9tLT5yaWdodF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgIHRvLT5sZWZ0X2ZyaW5nZV9vZmZzZXQg
PSBmcm9tLT5sZWZ0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX29mZnNl
dCA9IGZyb20tPnJpZ2h0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICB0by0+ZnJpbmdlX2JpdG1hcF9w
ZXJpb2RpY19wID0gZnJvbS0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wOworICAgICAgdG8tPnJl
ZHJhd19mcmluZ2VfYml0bWFwc19wID0gZnJvbS0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3A7Cisg
ICAgICB0by0+ZW5hYmxlZF9wID0gZnJvbS0+ZW5hYmxlZF9wOworICAgICAgdG8tPnRydW5jYXRl
ZF9vbl9sZWZ0X3AgPSBmcm9tLT50cnVuY2F0ZWRfb25fbGVmdF9wOworICAgICAgdG8tPnRydW5j
YXRlZF9vbl9yaWdodF9wID0gZnJvbS0+dHJ1bmNhdGVkX29uX3JpZ2h0X3A7CisgICAgICB0by0+
Y29udGludWVkX3AgPSBmcm9tLT5jb250aW51ZWRfcDsKKyAgICAgIHRvLT5kaXNwbGF5c190ZXh0
X3AgPSBmcm9tLT5kaXNwbGF5c190ZXh0X3A7CisgICAgICB0by0+ZW5kc19hdF96dl9wID0gZnJv
bS0+ZW5kc19hdF96dl9wOworICAgICAgdG8tPmZpbGxfbGluZV9wID0gZnJvbS0+ZmlsbF9saW5l
X3A7CisgICAgICB0by0+aW5kaWNhdGVfZW1wdHlfbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfZW1w
dHlfbGluZV9wOworICAgICAgdG8tPmNvbnRhaW5zX292ZXJsYXBwaW5nX2dseXBoc19wID0gZnJv
bS0+Y29udGFpbnNfb3ZlcmxhcHBpbmdfZ2x5cGhzX3A7CisgICAgICB0by0+ZnVsbF93aWR0aF9w
ID0gZnJvbS0+ZnVsbF93aWR0aF9wOworICAgICAgdG8tPm1vZGVfbGluZV9wID0gZnJvbS0+bW9k
ZV9saW5lX3A7CisgICAgICB0by0+b3ZlcmxhcHBlZF9wID0gZnJvbS0+b3ZlcmxhcHBlZF9wOwor
ICAgICAgdG8tPmVuZHNfaW5fbWlkZGxlX29mX2NoYXJfcCA9IGZyb20tPmVuZHNfaW5fbWlkZGxl
X29mX2NoYXJfcDsKKyAgICAgIHRvLT5zdGFydHNfaW5fbWlkZGxlX29mX2NoYXJfcCA9IGZyb20t
PnN0YXJ0c19pbl9taWRkbGVfb2ZfY2hhcl9wOworICAgICAgdG8tPm92ZXJsYXBwaW5nX3AgPSBm
cm9tLT5vdmVybGFwcGluZ19wOworICAgICAgdG8tPm1vdXNlX2ZhY2VfcCA9IGZyb20tPm1vdXNl
X2ZhY2VfcDsKKyAgICAgIHRvLT5lbmRzX2luX25ld2xpbmVfZnJvbV9zdHJpbmdfcCA9IGZyb20t
PmVuZHNfaW5fbmV3bGluZV9mcm9tX3N0cmluZ19wOworICAgICAgdG8tPmV4YWN0X3dpbmRvd193
aWR0aF9saW5lX3AgPSBmcm9tLT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wOworICAgICAgdG8t
PmN1cnNvcl9pbl9mcmluZ2VfcCA9IGZyb20tPmN1cnNvcl9pbl9mcmluZ2VfcDsKKyAgICAgIHRv
LT5lbmRzX2luX2VsbGlwc2lzX3AgPSBmcm9tLT5lbmRzX2luX2VsbGlwc2lzX3A7CisgICAgICB0
by0+aW5kaWNhdGVfYm9iX3AgPSBmcm9tLT5pbmRpY2F0ZV9ib2JfcDsKKyAgICAgIHRvLT5pbmRp
Y2F0ZV90b3BfbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfdG9wX2xpbmVfcDsKKyAgICAgIHRvLT5p
bmRpY2F0ZV9lb2JfcCA9IGZyb20tPmluZGljYXRlX2VvYl9wOworICAgICAgdG8tPmluZGljYXRl
X2JvdHRvbV9saW5lX3AgPSBmcm9tLT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wOworICAgICAgdG8t
PnJldmVyc2VkX3AgPSBmcm9tLT5yZXZlcnNlZF9wOworICAgICAgdG8tPmNvbnRpbnVhdGlvbl9s
aW5lc193aWR0aCA9IGZyb20tPmNvbnRpbnVhdGlvbl9saW5lc193aWR0aDsKKyAgICAgIHRvLT5j
bGlwID0gZnJvbS0+Y2xpcDsKKyAgICAgIGlmIChmcm9tLT51c2VkW0xFRlRfTUFSR0lOX0FSRUFd
KQorICAgICAgICB7CisgICAgICAgICAgbmJ5dGVzID0gZnJvbS0+dXNlZFtMRUZUX01BUkdJTl9B
UkVBXSAqIHNpemVvZiAoc3RydWN0IGdseXBoKTsKKyAgICAgICAgICB0by0+Z2x5cGhzW0xFRlRf
TUFSR0lOX0FSRUFdID0geG1hbGxvYyAobmJ5dGVzKTsKKyAgICAgICAgICBtZW1jcHkgKHRvLT5n
bHlwaHNbTEVGVF9NQVJHSU5fQVJFQV0sIGZyb20tPmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSwg
bmJ5dGVzKTsKKyAgICAgICAgICB0by0+dXNlZFtMRUZUX01BUkdJTl9BUkVBXSA9IGZyb20tPnVz
ZWRbTEVGVF9NQVJHSU5fQVJFQV07CisgICAgICAgIH0KKyAgICAgIGlmIChmcm9tLT51c2VkW1JJ
R0hUX01BUkdJTl9BUkVBXSkKKyAgICAgICAgeworICAgICAgICAgIG5ieXRlcyA9IGZyb20tPnVz
ZWRbUklHSFRfTUFSR0lOX0FSRUFdICogc2l6ZW9mIChzdHJ1Y3QgZ2x5cGgpOworICAgICAgICAg
IHRvLT5nbHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdID0geG1hbGxvYyAobmJ5dGVzKTsKKyAgICAg
ICAgICBtZW1jcHkgKHRvLT5nbHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdLCBmcm9tLT5nbHlwaHNb
UklHSFRfTUFSR0lOX0FSRUFdLCBuYnl0ZXMpOworICAgICAgICAgIHRvLT51c2VkW1JJR0hUX01B
UkdJTl9BUkVBXSA9IGZyb20tPnVzZWRbUklHSFRfTUFSR0lOX0FSRUFdOworICAgICAgICB9Cisg
ICAgfQorICByZXR1cm4gc2F2ZWQ7Cit9CisKK3ZvaWQKK21jX3Jlc3RvcmVfZ2x5cGhfbWF0cml4
IChzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpzYXZlZCwgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4
KQoreworICAvKiBOT1RFOiAgQXNzdW1lcyB0aGUgbWF0cml4IGJlaW5nIHJlc3RvcmVkIGFscmVh
ZHkgZXhpc3RzLiAqLworICAvLyBOT1QgUkVTVE9SRUQ6ICBzdHJ1Y3QgZ2x5cGhfcG9vbCAqcG9v
bDsKKyAgbWF0cml4LT5yb3dzX2FsbG9jYXRlZCA9IHNhdmVkLT5yb3dzX2FsbG9jYXRlZDsKKyAg
bWF0cml4LT5ucm93cyA9IHNhdmVkLT5ucm93czsKKyAgbWF0cml4LT5tYXRyaXhfeCA9IHNhdmVk
LT5tYXRyaXhfeDsKKyAgbWF0cml4LT5tYXRyaXhfeSA9IHNhdmVkLT5tYXRyaXhfeTsKKyAgbWF0
cml4LT5tYXRyaXhfdyA9IHNhdmVkLT5tYXRyaXhfdzsKKyAgbWF0cml4LT5tYXRyaXhfaCA9IHNh
dmVkLT5tYXRyaXhfaDsKKyAgbWF0cml4LT53aW5kb3dfcGl4ZWxfbGVmdCA9IHNhdmVkLT53aW5k
b3dfcGl4ZWxfbGVmdDsKKyAgbWF0cml4LT53aW5kb3dfcGl4ZWxfdG9wID0gc2F2ZWQtPndpbmRv
d19waXhlbF90b3A7CisgIG1hdHJpeC0+d2luZG93X2hlaWdodCA9IHNhdmVkLT53aW5kb3dfaGVp
Z2h0OworICBtYXRyaXgtPndpbmRvd193aWR0aCA9IHNhdmVkLT53aW5kb3dfd2lkdGg7CisgIG1h
dHJpeC0+d2luZG93X3ZzY3JvbGwgPSBzYXZlZC0+d2luZG93X3ZzY3JvbGw7CisgIG1hdHJpeC0+
bGVmdF9tYXJnaW5fZ2x5cGhzID0gc2F2ZWQtPmxlZnRfbWFyZ2luX2dseXBoczsKKyAgbWF0cml4
LT5yaWdodF9tYXJnaW5fZ2x5cGhzID0gc2F2ZWQtPnJpZ2h0X21hcmdpbl9nbHlwaHM7CisgIG1h
dHJpeC0+bm9fc2Nyb2xsaW5nX3AgPSBzYXZlZC0+bm9fc2Nyb2xsaW5nX3A7CisgIG1hdHJpeC0+
aGVhZGVyX2xpbmVfcCA9IHNhdmVkLT5oZWFkZXJfbGluZV9wOworI2lmZGVmIEdMWVBIX0RFQlVH
CisgIC8vIG1hdHJpeC0+bWV0aG9kID0gc2F2ZWQtPm1ldGhvZDsKKyNlbmRpZgorICAvLyBOT1Qg
UkVTVE9SRUQ6ICBzdHJ1Y3QgYnVmZmVyICpidWZmZXI7CisgIG1hdHJpeC0+YmVndiA9IHNhdmVk
LT5iZWd2OworICBtYXRyaXgtPnp2ID0gc2F2ZWQtPnp2OworICBmb3IgKGludCBpID0gMDsgaSA8
IHNhdmVkLT5ucm93czsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmZyb20g
PSBzYXZlZC0+cm93cyArIGk7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICp0byA9IG1hdHJpeC0+
cm93cyArIGk7CisgICAgICBwdHJkaWZmX3QgbmJ5dGVzID0gZnJvbS0+dXNlZFtURVhUX0FSRUFd
ICogc2l6ZW9mIChzdHJ1Y3QgZ2x5cGgpOworICAgICAgbWVtY3B5ICh0by0+Z2x5cGhzW1RFWFRf
QVJFQV0sIGZyb20tPmdseXBoc1tURVhUX0FSRUFdLCBuYnl0ZXMpOworICAgICAgdG8tPnVzZWRb
VEVYVF9BUkVBXSA9IGZyb20tPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAgIHRvLT5oYXNoID0gZnJv
bS0+aGFzaDsKKyAgICAgIHRvLT54ID0gZnJvbS0+eDsKKyAgICAgIHRvLT55ID0gZnJvbS0+eTsK
KyAgICAgIHRvLT5waXhlbF93aWR0aCA9IGZyb20tPnBpeGVsX3dpZHRoOworICAgICAgdG8tPmFz
Y2VudCA9IGZyb20tPmFzY2VudDsKKyAgICAgIHRvLT5oZWlnaHQgPSBmcm9tLT5oZWlnaHQ7Cisg
ICAgICB0by0+cGh5c19hc2NlbnQgPSBmcm9tLT5waHlzX2FzY2VudDsKKyAgICAgIHRvLT5waHlz
X2hlaWdodCA9IGZyb20tPnBoeXNfaGVpZ2h0OworICAgICAgdG8tPnZpc2libGVfaGVpZ2h0ID0g
ZnJvbS0+dmlzaWJsZV9oZWlnaHQ7CisgICAgICB0by0+ZXh0cmFfbGluZV9zcGFjaW5nID0gZnJv
bS0+ZXh0cmFfbGluZV9zcGFjaW5nOworICAgICAgdG8tPnN0YXJ0ID0gZnJvbS0+c3RhcnQ7Cisg
ICAgICB0by0+ZW5kID0gZnJvbS0+ZW5kOworICAgICAgdG8tPm1pbnBvcyA9IGZyb20tPm1pbnBv
czsKKyAgICAgIHRvLT5tYXhwb3MgPSBmcm9tLT5tYXhwb3M7CisgICAgICB0by0+b3ZlcmxheV9h
cnJvd19iaXRtYXAgPSBmcm9tLT5vdmVybGF5X2Fycm93X2JpdG1hcDsKKyAgICAgIHRvLT5sZWZ0
X3VzZXJfZnJpbmdlX2JpdG1hcCA9IGZyb20tPmxlZnRfdXNlcl9mcmluZ2VfYml0bWFwOworICAg
ICAgdG8tPnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1hcCA9IGZyb20tPnJpZ2h0X3VzZXJfZnJpbmdl
X2JpdG1hcDsKKyAgICAgIHRvLT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBmcm9tLT5sZWZ0X2ZyaW5n
ZV9iaXRtYXA7CisgICAgICB0by0+cmlnaHRfZnJpbmdlX2JpdG1hcCA9IGZyb20tPnJpZ2h0X2Zy
aW5nZV9iaXRtYXA7CisgICAgICB0by0+bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkID0gZnJvbS0+
bGVmdF91c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPnJpZ2h0X3VzZXJfZnJpbmdlX2Zh
Y2VfaWQgPSBmcm9tLT5yaWdodF91c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPmxlZnRf
ZnJpbmdlX2ZhY2VfaWQgPSBmcm9tLT5sZWZ0X2ZyaW5nZV9mYWNlX2lkOworICAgICAgdG8tPnJp
Z2h0X2ZyaW5nZV9mYWNlX2lkID0gZnJvbS0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICB0
by0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gZnJvbS0+bGVmdF9mcmluZ2Vfb2Zmc2V0OworICAgICAg
dG8tPnJpZ2h0X2ZyaW5nZV9vZmZzZXQgPSBmcm9tLT5yaWdodF9mcmluZ2Vfb2Zmc2V0OworICAg
ICAgdG8tPmZyaW5nZV9iaXRtYXBfcGVyaW9kaWNfcCA9IGZyb20tPmZyaW5nZV9iaXRtYXBfcGVy
aW9kaWNfcDsKKyAgICAgIHRvLT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IGZyb20tPnJlZHJh
d19mcmluZ2VfYml0bWFwc19wOworICAgICAgdG8tPmVuYWJsZWRfcCA9IGZyb20tPmVuYWJsZWRf
cDsKKyAgICAgIHRvLT50cnVuY2F0ZWRfb25fbGVmdF9wID0gZnJvbS0+dHJ1bmNhdGVkX29uX2xl
ZnRfcDsKKyAgICAgIHRvLT50cnVuY2F0ZWRfb25fcmlnaHRfcCA9IGZyb20tPnRydW5jYXRlZF9v
bl9yaWdodF9wOworICAgICAgdG8tPmNvbnRpbnVlZF9wID0gZnJvbS0+Y29udGludWVkX3A7Cisg
ICAgICB0by0+ZGlzcGxheXNfdGV4dF9wID0gZnJvbS0+ZGlzcGxheXNfdGV4dF9wOworICAgICAg
dG8tPmVuZHNfYXRfenZfcCA9IGZyb20tPmVuZHNfYXRfenZfcDsKKyAgICAgIHRvLT5maWxsX2xp
bmVfcCA9IGZyb20tPmZpbGxfbGluZV9wOworICAgICAgdG8tPmluZGljYXRlX2VtcHR5X2xpbmVf
cCA9IGZyb20tPmluZGljYXRlX2VtcHR5X2xpbmVfcDsKKyAgICAgIHRvLT5jb250YWluc19vdmVy
bGFwcGluZ19nbHlwaHNfcCA9IGZyb20tPmNvbnRhaW5zX292ZXJsYXBwaW5nX2dseXBoc19wOwor
ICAgICAgdG8tPmZ1bGxfd2lkdGhfcCA9IGZyb20tPmZ1bGxfd2lkdGhfcDsKKyAgICAgIHRvLT5t
b2RlX2xpbmVfcCA9IGZyb20tPm1vZGVfbGluZV9wOworICAgICAgdG8tPm92ZXJsYXBwZWRfcCA9
IGZyb20tPm92ZXJsYXBwZWRfcDsKKyAgICAgIHRvLT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3Ag
PSBmcm9tLT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3A7CisgICAgICB0by0+c3RhcnRzX2luX21p
ZGRsZV9vZl9jaGFyX3AgPSBmcm9tLT5zdGFydHNfaW5fbWlkZGxlX29mX2NoYXJfcDsKKyAgICAg
IHRvLT5vdmVybGFwcGluZ19wID0gZnJvbS0+b3ZlcmxhcHBpbmdfcDsKKyAgICAgIHRvLT5tb3Vz
ZV9mYWNlX3AgPSBmcm9tLT5tb3VzZV9mYWNlX3A7CisgICAgICB0by0+ZW5kc19pbl9uZXdsaW5l
X2Zyb21fc3RyaW5nX3AgPSBmcm9tLT5lbmRzX2luX25ld2xpbmVfZnJvbV9zdHJpbmdfcDsKKyAg
ICAgIHRvLT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wID0gZnJvbS0+ZXhhY3Rfd2luZG93X3dp
ZHRoX2xpbmVfcDsKKyAgICAgIHRvLT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBmcm9tLT5jdXJzb3Jf
aW5fZnJpbmdlX3A7CisgICAgICB0by0+ZW5kc19pbl9lbGxpcHNpc19wID0gZnJvbS0+ZW5kc19p
bl9lbGxpcHNpc19wOworICAgICAgdG8tPmluZGljYXRlX2JvYl9wID0gZnJvbS0+aW5kaWNhdGVf
Ym9iX3A7CisgICAgICB0by0+aW5kaWNhdGVfdG9wX2xpbmVfcCA9IGZyb20tPmluZGljYXRlX3Rv
cF9saW5lX3A7CisgICAgICB0by0+aW5kaWNhdGVfZW9iX3AgPSBmcm9tLT5pbmRpY2F0ZV9lb2Jf
cDsKKyAgICAgIHRvLT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wID0gZnJvbS0+aW5kaWNhdGVfYm90
dG9tX2xpbmVfcDsKKyAgICAgIHRvLT5yZXZlcnNlZF9wID0gZnJvbS0+cmV2ZXJzZWRfcDsKKyAg
ICAgIHRvLT5jb250aW51YXRpb25fbGluZXNfd2lkdGggPSBmcm9tLT5jb250aW51YXRpb25fbGlu
ZXNfd2lkdGg7CisgICAgICB0by0+Y2xpcCA9IGZyb20tPmNsaXA7CisgICAgICB4ZnJlZSAoZnJv
bS0+Z2x5cGhzW1RFWFRfQVJFQV0pOworICAgICAgbmJ5dGVzID0gZnJvbS0+dXNlZFtMRUZUX01B
UkdJTl9BUkVBXSAqIHNpemVvZiAoc3RydWN0IGdseXBoKTsKKyAgICAgIGlmIChuYnl0ZXMpCisg
ICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkgKHRvLT5nbHlwaHNbTEVGVF9NQVJHSU5fQVJFQV0s
IGZyb20tPmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSwgbmJ5dGVzKTsKKyAgICAgICAgICB0by0+
dXNlZFtMRUZUX01BUkdJTl9BUkVBXSA9IGZyb20tPnVzZWRbTEVGVF9NQVJHSU5fQVJFQV07Cisg
ICAgICAgICAgeGZyZWUgKGZyb20tPmdseXBoc1tMRUZUX01BUkdJTl9BUkVBXSk7CisgICAgICAg
IH0KKyAgICAgIGVsc2UKKyAgICAgICAgdG8tPnVzZWRbTEVGVF9NQVJHSU5fQVJFQV0gPSAwOwor
ICAgICAgbmJ5dGVzID0gZnJvbS0+dXNlZFtSSUdIVF9NQVJHSU5fQVJFQV0gKiBzaXplb2YgKHN0
cnVjdCBnbHlwaCk7CisgICAgICBpZiAobmJ5dGVzKQorICAgICAgICB7CisgICAgICAgICAgbWVt
Y3B5ICh0by0+Z2x5cGhzW1JJR0hUX01BUkdJTl9BUkVBXSwgZnJvbS0+Z2x5cGhzW1JJR0hUX01B
UkdJTl9BUkVBXSwgbmJ5dGVzKTsKKyAgICAgICAgICB0by0+dXNlZFtSSUdIVF9NQVJHSU5fQVJF
QV0gPSBmcm9tLT51c2VkW1JJR0hUX01BUkdJTl9BUkVBXTsKKyAgICAgICAgICB4ZnJlZSAoZnJv
bS0+Z2x5cGhzW1JJR0hUX01BUkdJTl9BUkVBXSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAg
ICAgICAgdG8tPnVzZWRbUklHSFRfTUFSR0lOX0FSRUFdID0gMDsKKyAgICB9CisgIHhmcmVlIChz
YXZlZC0+cm93cyk7CisgIHhmcmVlIChzYXZlZCk7Cit9CisKK3ZvaWQKK21jX3hmcmVlX2dseXBo
X21hdHJpeCAoc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4KQoreworICBmb3IgKGludCBpID0g
MDsgaSA8IG1hdHJpeC0+bnJvd3M7ICsraSkKKyAgICB7CisgICAgICBwdHJkaWZmX3QgbmJ5dGVz
OworICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gbWF0cml4LT5yb3dzICsgaTsKKyAgICAg
IG5ieXRlcyA9IHJvdy0+dXNlZFtURVhUX0FSRUFdICogc2l6ZW9mIChzdHJ1Y3QgZ2x5cGgpOwor
ICAgICAgaWYgKG5ieXRlcykKKyAgICAgICAgeGZyZWUgKHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0p
OworICAgICAgbmJ5dGVzID0gcm93LT51c2VkW0xFRlRfTUFSR0lOX0FSRUFdICogc2l6ZW9mIChz
dHJ1Y3QgZ2x5cGgpOworICAgICAgaWYgKG5ieXRlcykKKyAgICAgICAgeGZyZWUgKHJvdy0+Z2x5
cGhzW0xFRlRfTUFSR0lOX0FSRUFdKTsKKyAgICAgIG5ieXRlcyA9IHJvdy0+dXNlZFtSSUdIVF9N
QVJHSU5fQVJFQV0gKiBzaXplb2YgKHN0cnVjdCBnbHlwaCk7CisgICAgICBpZiAobmJ5dGVzKQor
ICAgICAgICB4ZnJlZSAocm93LT5nbHlwaHNbUklHSFRfTUFSR0lOX0FSRUFdKTsKKyAgICB9Cisg
IHhmcmVlIChtYXRyaXgtPnJvd3MpOworICB4ZnJlZSAobWF0cml4KTsKK30KKworLyogVHJ5IHRv
IHJldXNlIHBhcnQgb2YgdGhlIGN1cnJlbnQgZGlzcGxheSBvZiBXIGJ5IHNjcm9sbGluZyBsaW5l
cy4KKyAgIEhFQURFUl9MSU5FX1AgbWVhbnMgVyBoYXMgYSBoZWFkZXIgbGluZS4KKyAgIC4gVGhl
IGFsZ29yaXRobSBpcyB0YWtlbiBmcm9tIENvbW11bmljYXRpb25zIG9mIHRoZSBBQ00sIEFwcjc4
ICJBIFRlY2huaXF1ZQorICAgICBmb3IgSXNvbGF0aW5nIERpZmZlcmVuY2VzIEJldHdlZW4gRmls
ZXMuIiAgSXQgc2hvdWxkIHRha2UgTyhOKSB0aW1lLgorICAgQSBzaG9ydCBvdXRsaW5lIG9mIHRo
ZSBzdGVwcyBvZiB0aGUgYWxnb3JpdGhtOgorICAgICAxLiBTa2lwIGxpbmVzIGVxdWFsIGF0IHRo
ZSBzdGFydCBhbmQgZW5kIG9mIGJvdGggbWF0cmljZXMuCisgICAgIDIuIEVudGVyIHJvd3MgaW4g
dGhlIGN1cnJlbnQgYW5kIGRlc2lyZWQgbWF0cml4IGludG8gYSBzeW1ib2wgdGFibGUsCisgICAg
ICAgIGNvdW50aW5nIGhvdyBvZnRlbiB0aGV5IGFwcGVhciBpbiBib3RoIG1hdHJpY2VzLgorICAg
ICAzLiBSb3dzIHRoYXQgYXBwZWFyIGV4YWN0bHkgb25jZSBpbiBib3RoIG1hdHJpY2VzIHNlcnZl
IGFzIGFuY2hvcnMsIGkuZS4gd2UKKyAgICAgICAgYXNzdW1lIHRoYXQgc3VjaCBsaW5lcyBhcmUg
bGlrZWx5IHRvIGhhdmUgYmVlbiBtb3ZlZC4KKyAgICAgNC4gU3RhcnRpbmcgZnJvbSBhbmNob3Ig
bGluZXMsIGV4dGVuZCByZWdpb25zIHRvIGJlIHNjcm9sbGVkIGJvdGggZm9yd2FyZAorICAgICAg
ICBhbmQgYmFja3dhcmQuCisgICBWYWx1ZSBpcworICAgICAtMSBpZiBhbGwgcm93cyB3ZXJlIGZv
dW5kIHRvIGJlIGVxdWFsLgorICAgICAwIHRvIGluZGljYXRlIHRoYXQgd2UgZGlkIG5vdCBzY3Jv
bGwgdGhlIGRpc3BsYXksIG9yCisgICAgIDEgaWYgd2UgZGlkIHNjcm9sbC4gKi8KK3N0YXRpYyBp
bnQKK21jX3Njcm9sbGluZ193aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgaGVhZGVyX2xp
bmVfcCkKK3sKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqZGVzaXJlZF9tYXRyaXggPSB3LT5kZXNp
cmVkX21hdHJpeDsKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqY3VycmVudF9tYXRyaXggPSB3LT5j
dXJyZW50X21hdHJpeDsKKyAgaW50IHliID0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpOworICBw
dHJkaWZmX3QgaTsKKyAgaW50IGosIGZpcnN0X29sZCwgZmlyc3RfbmV3LCBsYXN0X29sZCwgbGFz
dF9uZXc7CisgIGludCBucnVucywgcnVuX2lkeDsKKyAgcHRyZGlmZl90IG47CisgIHN0cnVjdCBt
Y19yb3dfZW50cnkgKmVudHJ5OworICAvLyBzdHJ1Y3QgcmVkaXNwbGF5X2ludGVyZmFjZSAqcmlm
ID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpKTsKKyAgLyogU2tpcCBvdmVy
IHJvd3MgZXF1YWwgYXQgdGhlIHN0YXJ0LiAqLworICBmb3IgKGkgPSBoZWFkZXJfbGluZV9wOyBp
IDwgY3VycmVudF9tYXRyaXgtPm5yb3dzIC0gMTsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBn
bHlwaF9yb3cgKmQgPSBNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSk7CisgICAgICBzdHJ1
Y3QgZ2x5cGhfcm93ICpjID0gTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgsIGkpOworICAgICAg
aWYgKGMtPmVuYWJsZWRfcAorICAgICAgICAgICYmIGQtPmVuYWJsZWRfcAorICAgICAgICAgICYm
ICFkLT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcAorICAgICAgICAgICYmIGMtPnkgPT0gZC0+eQor
ICAgICAgICAgICYmIE1BVFJJWF9ST1dfQk9UVE9NX1kgKGMpIDw9IHliCisgICAgICAgICAgJiYg
TUFUUklYX1JPV19CT1RUT01fWSAoZCkgPD0geWIKKyAgICAgICAgICAmJiByb3dfZXF1YWxfcCAo
YywgZCwgMSkpCisgICAgICAgIHsKKyAgICAgICAgICBhc3NpZ25fcm93IChjLCBkKTsKKyAgICAg
ICAgICBkLT5lbmFibGVkX3AgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgICAgYnJlYWs7CisgICAgfQorI2lmZGVmIEhBVkVfWFdJREdFVFMKKyAgLyogQ3VycmVudGx5
IHRoaXMgc2VlbXMgbmVlZGVkIHRvIGRldGVjdCB4d2lkZ2V0IG1vdmVtZW50IHJlbGlhYmx5LiAq
LworICAgIHJldHVybiAwOworI2VuZGlmCisgIC8qIEdpdmUgdXAgaWYgc29tZSByb3dzIGluIHRo
ZSBkZXNpcmVkIG1hdHJpeCBhcmUgbm90IGVuYWJsZWQuICovCisgIGlmICghIE1BVFJJWF9ST1df
RU5BQkxFRF9QIChkZXNpcmVkX21hdHJpeCwgaSkpCisgICAgcmV0dXJuIC0xOworICBmaXJzdF9v
bGQgPSBmaXJzdF9uZXcgPSBpOworICAvKiBTZXQgbGFzdF9uZXcgdG8gdGhlIGluZGV4ICsgMSBv
ZiB0aGUgcm93IHRoYXQgcmVhY2hlcyB0aGUKKyAgICAgYm90dG9tIGJvdW5kYXJ5IGluIHRoZSBk
ZXNpcmVkIG1hdHJpeC4gIEdpdmUgdXAgaWYgd2UgZmluZCBhCisgICAgIGRpc2FibGVkIHJvdyBi
ZWZvcmUgd2UgcmVhY2ggdGhlIGJvdHRvbSBib3VuZGFyeS4gKi8KKyAgaSA9IGZpcnN0X25ldyAr
IDE7CisgIHdoaWxlIChpIDwgZGVzaXJlZF9tYXRyaXgtPm5yb3dzIC0gMSkKKyAgICB7CisgICAg
ICBpbnQgYm90dG9tOworICAgICAgaWYgKCEgTUFUUklYX1JPV19FTkFCTEVEX1AgKGRlc2lyZWRf
bWF0cml4LCBpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBib3R0b20gPSBNQVRSSVhfUk9X
X0JPVFRPTV9ZIChNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSkpOworICAgICAgaWYgKGJv
dHRvbSA8PSB5YikKKyAgICAgICAgKytpOworICAgICAgaWYgKGJvdHRvbSA+PSB5YikKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICBsYXN0X25ldyA9IGk7CisgIC8qIFNldCBsYXN0X29sZCB0byB0
aGUgaW5kZXggKyAxIG9mIHRoZSByb3cgdGhhdCByZWFjaGVzIHRoZSBib3R0b20KKyAgICAgYm91
bmRhcnkgaW4gdGhlIGN1cnJlbnQgbWF0cml4LiAgV2UgZG9uJ3QgbG9vayBhdCB0aGUgZW5hYmxl
ZAorICAgICBmbGFnIGhlcmUgYmVjYXVzZSB3ZSBwbGFuIHRvIHJldXNlIHBhcnQgb2YgdGhlIGRp
c3BsYXkgZXZlbiBpZgorICAgICBvdGhlciBwYXJ0cyBhcmUgZGlzYWJsZWQuICovCisgIGkgPSBm
aXJzdF9vbGQgKyAxOworICB3aGlsZSAoaSA8IGN1cnJlbnRfbWF0cml4LT5ucm93cyAtIDEpCisg
ICAgeworICAgICAgaW50IGJvdHRvbSA9IE1BVFJJWF9ST1dfQk9UVE9NX1kgKE1BVFJJWF9ST1cg
KGN1cnJlbnRfbWF0cml4LCBpKSk7CisgICAgICBpZiAoYm90dG9tIDw9IHliKQorICAgICAgICAr
K2k7CisgICAgICBpZiAoYm90dG9tID49IHliKQorICAgICAgICBicmVhazsKKyAgICB9CisgIGxh
c3Rfb2xkID0gaTsKKyAgLyogU2tpcCBvdmVyIHJvd3MgZXF1YWwgYXQgdGhlIGJvdHRvbS4gKi8K
KyAgaSA9IGxhc3RfbmV3OworICBqID0gbGFzdF9vbGQ7CisgIHdoaWxlIChpIC0gMSA+IGZpcnN0
X25ldworICAgICAgICAgJiYgaiAtIDEgPiBmaXJzdF9vbGQKKyAgICAgICAgICYmIE1BVFJJWF9S
T1dfRU5BQkxFRF9QIChjdXJyZW50X21hdHJpeCwgaiAtIDEpCisgICAgICAgICAmJiAoTUFUUklY
X1JPVyAoY3VycmVudF9tYXRyaXgsIGogLSAxKS0+eQorICAgICAgICAgICAgID09IE1BVFJJWF9S
T1cgKGRlc2lyZWRfbWF0cml4LCBpIC0gMSktPnkpCisgICAgICAgICAmJiAhTUFUUklYX1JPVyAo
ZGVzaXJlZF9tYXRyaXgsIGkgLSAxKS0+cmVkcmF3X2ZyaW5nZV9iaXRtYXBzX3AKKyAgICAgICAg
ICYmIHJvd19lcXVhbF9wIChNQVRSSVhfUk9XIChkZXNpcmVkX21hdHJpeCwgaSAtIDEpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCBqIC0gMSks
IDEpKQorICAgIC0taSwgLS1qOworICBsYXN0X25ldyA9IGk7CisgIGxhc3Rfb2xkID0gajsKKyAg
LyogTm90aGluZyB0byBkbyBpZiBhbGwgcm93cyBhcmUgZXF1YWwuICovCisgIGlmIChsYXN0X25l
dyA9PSBmaXJzdF9uZXcpCisgICAgcmV0dXJuIDA7CisgIC8qIENoZWNrIGZvciBpbnRlZ2VyIG92
ZXJmbG93IGluIHNpemUgY2FsY3VsYXRpb24uCisgICAgIElmIG5leHRfYWxtb3N0X3ByaW1lIGNo
ZWNrcyAoTikgZm9yIGRpdmlzaWJpbGl0eSBieSAyLi4xMCwgdGhlbgorICAgICBpdCBjYW4gcmV0
dXJuIGF0IG1vc3QgTiArIDEwLCBlLmcuLCBuZXh0X2FsbW9zdF9wcmltZSAoMSkgPT0gMTEuCisg
ICAgIFNvLCBzZXQgbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVtZW50X21heCB0byAxMC4KKyAgICAg
SXQncyBqdXN0IGEgY29pbmNpZGVuY2UgdGhhdCBuZXh0X2FsbW9zdF9wcmltZV9pbmNyZW1lbnRf
bWF4ID09CisgICAgIE5FWFRfQUxNT1NUX1BSSU1FX0xJTUlUIC0gMS4gIElmIE5FWFRfQUxNT1NU
X1BSSU1FX0xJTUlUIHdlcmUKKyAgICAgMTMsIHRoZW4gbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVt
ZW50X21heCB3b3VsZCBiZSAxNCwgZS5nLiwKKyAgICAgYmVjYXVzZSBuZXh0X2FsbW9zdF9wcmlt
ZSAoMTEzKSB3b3VsZCBiZSAxMjcuICovCisgIHsKKyAgICB2ZXJpZnkgKE5FWFRfQUxNT1NUX1BS
SU1FX0xJTUlUID09IDExKTsKKyAgICBlbnVtIHsgbmV4dF9hbG1vc3RfcHJpbWVfaW5jcmVtZW50
X21heCA9IDEwIH07CisgICAgcHRyZGlmZl90IHJvd190YWJsZV9tYXggPQorICAgICAgKG1pbiAo
UFRSRElGRl9NQVgsIFNJWkVfTUFYKSAvICgzICogc2l6ZW9mICptY19yb3dfdGFibGUpCisgICAg
ICAgLSBuZXh0X2FsbW9zdF9wcmltZV9pbmNyZW1lbnRfbWF4KTsKKyAgICBwdHJkaWZmX3QgY3Vy
cmVudF9ucm93c19tYXggPSByb3dfdGFibGVfbWF4IC0gZGVzaXJlZF9tYXRyaXgtPm5yb3dzOwor
ICAgIGlmIChjdXJyZW50X25yb3dzX21heCA8IGN1cnJlbnRfbWF0cml4LT5ucm93cykKKyAgICAg
IG1lbW9yeV9mdWxsIChTSVpFX01BWCk7CisgIH0KKyAgLyogUmVhbGxvY2F0ZSB2ZWN0b3JzLCB0
YWJsZXMgZXRjLiBpZiBuZWNlc3NhcnkuICovCisgIGlmIChjdXJyZW50X21hdHJpeC0+bnJvd3Mg
PiBtY19vbGRfbGluZXNfc2l6ZSkKKyAgICBtY19vbGRfbGluZXMgPSB4cGFsbG9jIChtY19vbGRf
bGluZXMsICZtY19vbGRfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50X21hdHJpeC0+bnJvd3MgLSBtY19vbGRfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBJTlRfTUFYLCBzaXplb2YgKm1jX29sZF9saW5lcyk7CisgIGlmIChkZXNpcmVkX21h
dHJpeC0+bnJvd3MgPiBtY19uZXdfbGluZXNfc2l6ZSkKKyAgICBtY19uZXdfbGluZXMgPSB4cGFs
bG9jIChtY19uZXdfbGluZXMsICZtY19uZXdfbGluZXNfc2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXNpcmVkX21hdHJpeC0+bnJvd3MgLSBtY19uZXdfbGluZXNfc2l6ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBJTlRfTUFYLCBzaXplb2YgKm1jX25ld19saW5lcyk7CisgIG4g
PSBkZXNpcmVkX21hdHJpeC0+bnJvd3M7CisgIG4gKz0gY3VycmVudF9tYXRyaXgtPm5yb3dzOwor
ICBpZiAobWNfcm93X3RhYmxlX3NpemUgPCAzICogbikKKyAgICB7CisgICAgICBwdHJkaWZmX3Qg
c2l6ZSA9IG5leHRfYWxtb3N0X3ByaW1lICgzICogbik7CisgICAgICBtY19yb3dfdGFibGUgPSB4
bnJlYWxsb2MgKG1jX3Jvd190YWJsZSwgc2l6ZSwgc2l6ZW9mICptY19yb3dfdGFibGUpOworICAg
ICAgbWNfcm93X3RhYmxlX3NpemUgPSBzaXplOworICAgICAgbWVtc2V0IChtY19yb3dfdGFibGUs
IDAsIHNpemUgKiBzaXplb2YgKm1jX3Jvd190YWJsZSk7CisgICAgfQorICBpZiAobiA+IG1jX3Jv
d19lbnRyeV9wb29sX3NpemUpCisgICAgbWNfcm93X2VudHJ5X3Bvb2wgPSB4cGFsbG9jIChtY19y
b3dfZW50cnlfcG9vbCwgJm1jX3Jvd19lbnRyeV9wb29sX3NpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuIC0gbWNfcm93X2VudHJ5X3Bvb2xfc2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLCBzaXplb2YgKm1jX3Jvd19lbnRyeV9wb29sKTsKKyAgaWYgKGRl
c2lyZWRfbWF0cml4LT5ucm93cyA+IG1jX3J1bnNfc2l6ZSkKKyAgICB7CisgICAgICBtY19ydW5z
ID0geG5yZWFsbG9jIChtY19ydW5zLCBkZXNpcmVkX21hdHJpeC0+bnJvd3MsIHNpemVvZiAqbWNf
cnVucyk7CisgICAgICBtY19ydW5fcG9vbCA9IHhucmVhbGxvYyAobWNfcnVuX3Bvb2wsIGRlc2ly
ZWRfbWF0cml4LT5ucm93cywgc2l6ZW9mICptY19ydW5fcG9vbCk7CisgICAgICBtY19ydW5zX3Np
emUgPSBkZXNpcmVkX21hdHJpeC0+bnJvd3M7CisgICAgfQorICBucnVucyA9IHJ1bl9pZHggPSAw
OworICBtY19yb3dfZW50cnlfaWR4ID0gMDsKKyAgLyogQWRkIHJvd3MgZnJvbSB0aGUgY3VycmVu
dCBhbmQgZGVzaXJlZCBtYXRyaXggdG8gdGhlIGhhc2ggdGFibGUKKyAgICAgcm93X2hhc2hfdGFi
bGUgdG8gYmUgYWJsZSB0byBmaW5kIGVxdWFsIG9uZXMgcXVpY2tseS4gKi8KKyAgZm9yIChpID0g
Zmlyc3Rfb2xkOyBpIDwgbGFzdF9vbGQ7ICsraSkKKyAgICB7CisgICAgICBpZiAoTUFUUklYX1JP
V19FTkFCTEVEX1AgKGN1cnJlbnRfbWF0cml4LCBpKSkKKyAgICAgICAgeworICAgICAgICAgIGVu
dHJ5ID0gbWNfYWRkX3Jvd19lbnRyeSAoTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgsIGkpKTsK
KyAgICAgICAgICBtY19vbGRfbGluZXNbaV0gPSBlbnRyeTsKKyAgICAgICAgICArK2VudHJ5LT5v
bGRfdXNlczsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBtY19vbGRfbGluZXNbaV0g
PSBOVUxMOworICAgIH0KKyAgZm9yIChpID0gZmlyc3RfbmV3OyBpIDwgbGFzdF9uZXc7ICsraSkK
KyAgICB7CisgICAgICBlYXNzZXJ0IChNQVRSSVhfUk9XX0VOQUJMRURfUCAoZGVzaXJlZF9tYXRy
aXgsIGkpKTsKKyAgICAgIGVudHJ5ID0gbWNfYWRkX3Jvd19lbnRyeSAoTUFUUklYX1JPVyAoZGVz
aXJlZF9tYXRyaXgsIGkpKTsKKyAgICAgICsrZW50cnktPm5ld191c2VzOworICAgICAgZW50cnkt
Pm5ld19saW5lX251bWJlciA9IGk7CisgICAgICBtY19uZXdfbGluZXNbaV0gPSBlbnRyeTsKKyAg
ICB9CisgIC8qIElkZW50aWZ5IG1vdmVzIGJhc2VkIG9uIGxpbmVzIHRoYXQgYXJlIHVuaXF1ZSBh
bmQgZXF1YWwKKyAgICAgaW4gYm90aCBtYXRyaWNlcy4gKi8KKyAgZm9yIChpID0gZmlyc3Rfb2xk
OyBpIDwgbGFzdF9vbGQ7KQorICAgIGlmIChtY19vbGRfbGluZXNbaV0KKyAgICAgICAgJiYgbWNf
b2xkX2xpbmVzW2ldLT5vbGRfdXNlcyA9PSAxCisgICAgICAgICYmIG1jX29sZF9saW5lc1tpXS0+
bmV3X3VzZXMgPT0gMSkKKyAgICAgIHsKKyAgICAgICAgaW50IHAsIHE7CisgICAgICAgIGludCBu
ZXdfbGluZSA9IG1jX29sZF9saW5lc1tpXS0+bmV3X2xpbmVfbnVtYmVyOworICAgICAgICBzdHJ1
Y3QgcnVuICpydW4gPSBtY19ydW5fcG9vbCArIHJ1bl9pZHgrKzsKKyAgICAgICAgLyogUmVjb3Jk
IG1vdmUuICovCisgICAgICAgIHJ1bi0+Y3VycmVudF92cG9zID0gaTsKKyAgICAgICAgcnVuLT5j
dXJyZW50X3kgPSBNQVRSSVhfUk9XIChjdXJyZW50X21hdHJpeCwgaSktPnk7CisgICAgICAgIHJ1
bi0+ZGVzaXJlZF92cG9zID0gbmV3X2xpbmU7CisgICAgICAgIHJ1bi0+ZGVzaXJlZF95ID0gTUFU
UklYX1JPVyAoZGVzaXJlZF9tYXRyaXgsIG5ld19saW5lKS0+eTsKKyAgICAgICAgcnVuLT5ucm93
cyA9IDE7CisgICAgICAgIHJ1bi0+aGVpZ2h0ID0gTUFUUklYX1JPVyAoY3VycmVudF9tYXRyaXgs
IGkpLT5oZWlnaHQ7CisgICAgICAgIC8qIEV4dGVuZCBiYWNrd2FyZC4gKi8KKyAgICAgICAgcCA9
IGkgLSAxOworICAgICAgICBxID0gbmV3X2xpbmUgLSAxOworICAgICAgICB3aGlsZSAocCA+IGZp
cnN0X29sZAorICAgICAgICAgICAgICAgJiYgcSA+IGZpcnN0X25ldworICAgICAgICAgICAgICAg
JiYgbWNfb2xkX2xpbmVzW3BdID09IG1jX25ld19saW5lc1txXSkKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgaCA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCBwKS0+aGVpZ2h0Owor
ICAgICAgICAgICAgLS1ydW4tPmN1cnJlbnRfdnBvczsKKyAgICAgICAgICAgIC0tcnVuLT5kZXNp
cmVkX3Zwb3M7CisgICAgICAgICAgICArK3J1bi0+bnJvd3M7CisgICAgICAgICAgICBydW4tPmhl
aWdodCArPSBoOworICAgICAgICAgICAgcnVuLT5kZXNpcmVkX3kgLT0gaDsKKyAgICAgICAgICAg
IHJ1bi0+Y3VycmVudF95IC09IGg7CisgICAgICAgICAgICAtLXAsIC0tcTsKKyAgICAgICAgICB9
CisgICAgICAgIC8qIEV4dGVuZCBmb3J3YXJkLiAqLworICAgICAgICBwID0gaSArIDE7CisgICAg
ICAgIHEgPSBuZXdfbGluZSArIDE7CisgICAgICAgIHdoaWxlIChwIDwgbGFzdF9vbGQKKyAgICAg
ICAgICAgICAgICYmIHEgPCBsYXN0X25ldworICAgICAgICAgICAgICAgJiYgbWNfb2xkX2xpbmVz
W3BdID09IG1jX25ld19saW5lc1txXSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgaCA9
IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCBwKS0+aGVpZ2h0OworICAgICAgICAgICAgKyty
dW4tPm5yb3dzOworICAgICAgICAgICAgcnVuLT5oZWlnaHQgKz0gaDsKKyAgICAgICAgICAgICsr
cCwgKytxOworICAgICAgICAgIH0KKyAgICAgICAgLyogSW5zZXJ0IHJ1biBpbnRvIGxpc3Qgb2Yg
YWxsIHJ1bnMuICBPcmRlciBydW5zIGJ5IGNvcGllZAorICAgICAgICAgICBwaXhlbCBsaW5lcy4g
IE5vdGUgdGhhdCB3ZSByZWNvcmQgcnVucyB0aGF0IGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAg
YmUgY29waWVkIGJlY2F1c2UgdGhleSBhcmUgYWxyZWFkeSBpbiBwbGFjZS4gIFRoaXMgaXMgZG9u
ZQorICAgICAgICAgICBiZWNhdXNlIHdlIGNhbiBhdm9pZCBjYWxsaW5nIHVwZGF0ZV93aW5kb3df
bGluZSBpbiB0aGlzCisgICAgICAgICAgIGNhc2UuICovCisgICAgICAgIGZvciAocCA9IDA7IHAg
PCBucnVucyAmJiBtY19ydW5zW3BdLT5oZWlnaHQgPiBydW4tPmhlaWdodDsgKytwKQorICAgICAg
ICAgIDsKKyAgICAgICAgZm9yIChxID0gbnJ1bnM7IHEgPiBwOyAtLXEpCisgICAgICAgICAgbWNf
cnVuc1txXSA9IG1jX3J1bnNbcSAtIDFdOworICAgICAgICBtY19ydW5zW3BdID0gcnVuOworICAg
ICAgICArK25ydW5zOworICAgICAgICBpICs9IHJ1bi0+bnJvd3M7CisgICAgICB9CisgICAgICBl
bHNlCisgICAgICAgICsraTsKKyAgLyogRG8gdGhlIG1vdmVzLiAgRG8gaXQgaW4gYSB3YXkgdGhh
dCB3ZSBkb24ndCBvdmVyd3JpdGUgc29tZXRoaW5nCisgICAgIHdlIHdhbnQgdG8gY29weSBsYXRl
ciBvbi4gIFRoaXMgaXMgbm90IHNvbHZhYmxlIGluIGdlbmVyYWwKKyAgICAgYmVjYXVzZSB0aGVy
ZSBpcyBvbmx5IG9uZSBkaXNwbGF5IGFuZCB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvCisgICAgIGV4
Y2hhbmdlIGFyZWFzIG9uIHRoaXMgZGlzcGxheS4gIEV4YW1wbGU6CisgICAgICAgICAgKy0tLS0t
LS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgQSAgICAgfCAgICAg
ICB8ICAgICBCICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgLS0+ICArLS0tLS0tLS0t
LS0rCisgICAgICAgICAgfCAgICAgQiAgICAgfCAgICAgICB8ICAgICBBICAgICB8CisgICAgICAg
ICAgKy0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0rCisgICAgIEluc3RlYWQsIHByZWZl
ciBiaWdnZXIgbW92ZXMsIGFuZCBpbnZhbGlkYXRlIG1vdmVzIHRoYXQgd291bGQKKyAgICAgY29w
eSBmcm9tIHdoZXJlIHdlIGNvcGllZCB0by4gKi8KKyAgZm9yIChpID0gMDsgaSA8IG5ydW5zOyAr
K2kpCisgICAgaWYgKG1jX3J1bnNbaV0tPm5yb3dzID4gMCkKKyAgICAgIHsKKyAgICAgICAgc3Ry
dWN0IHJ1biAqciA9IG1jX3J1bnNbaV07CisgICAgICAgIGlmIChyLT5jdXJyZW50X3kgIT0gci0+
ZGVzaXJlZF95KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vICBmcHJpbnRmIChzdGRlcnIs
ICIlczogIHItPmN1cnJlbnQvZGVzaXJlZF92cG9zICglZC8lZCkgfCByLT5jdXJyZW50L2Rlc2ly
ZWRfeSAoJWQvJWQpXG4iLAorICAgICAgICAgICAgLy8gICAgICAgICAgIHItPmN1cnJlbnRfeSA8
IHItPmRlc2lyZWRfeSA/ICLihpMiIDogIuKGkSIsCisgICAgICAgICAgICAvLyAgICAgICAgICAg
ci0+Y3VycmVudF92cG9zLCByLT5kZXNpcmVkX3Zwb3MsIHItPmN1cnJlbnRfeSwgci0+ZGVzaXJl
ZF95KTsKKyAgICAgICAgICAgIC8vICByaWYtPmNsZWFyX3dpbmRvd19tb3VzZV9mYWNlICh3KTsK
KyAgICAgICAgICAgIC8vICByaWYtPnNjcm9sbF9ydW5faG9vayAodywgcik7CisgICAgICAgICAg
fQorICAgICAgICAvKiBUcnVuY2F0ZSBydW5zIHRoYXQgY29weSB0byB3aGVyZSB3ZSBjb3BpZWQg
dG8sIGFuZAorICAgICAgICAgICBpbnZhbGlkYXRlIHJ1bnMgdGhhdCBjb3B5IGZyb20gd2hlcmUg
d2UgY29waWVkIHRvLiAqLworICAgICAgICBmb3IgKGogPSBucnVucyAtIDE7IGogPiBpOyAtLWop
CisgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHJ1biAqcCA9IG1jX3J1bnNbal07Cisg
ICAgICAgICAgICBib29sIHRydW5jYXRlZF9wID0gMDsKKyAgICAgICAgICAgIGlmIChwLT5ucm93
cyA+IDAKKyAgICAgICAgICAgICAgICAmJiBwLT5kZXNpcmVkX3kgPCByLT5kZXNpcmVkX3kgKyBy
LT5oZWlnaHQKKyAgICAgICAgICAgICAgICAmJiBwLT5kZXNpcmVkX3kgKyBwLT5oZWlnaHQgPiBy
LT5kZXNpcmVkX3kpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocC0+ZGVz
aXJlZF95IDwgci0+ZGVzaXJlZF95KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBwLT5ucm93cyA9IHItPmRlc2lyZWRfdnBvcyAtIHAtPmRlc2lyZWRfdnBvczsKKyAg
ICAgICAgICAgICAgICAgICAgcC0+aGVpZ2h0ID0gci0+ZGVzaXJlZF95IC0gcC0+ZGVzaXJlZF95
OworICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZWRfcCA9IDE7CisgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpbnQgbnJvd3NfY29waWVkID0gKHItPmRlc2lyZWRfdnBvcyArIHItPm5yb3dz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwLT5kZXNpcmVkX3Zw
b3MpOworICAgICAgICAgICAgICAgICAgICBpZiAocC0+bnJvd3MgPD0gbnJvd3NfY29waWVkKQor
ICAgICAgICAgICAgICAgICAgICAgIHAtPm5yb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBoZWlnaHRfY29waWVkID0gKHItPmRlc2lyZWRfeSArIHItPmhlaWdodAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHAtPmRlc2lyZWRfeSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmN1cnJlbnRfdnBvcyArPSBucm93c19jb3Bp
ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmRlc2lyZWRfdnBvcyArPSBucm93c19j
b3BpZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPm5yb3dzIC09IG5yb3dzX2NvcGll
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+Y3VycmVudF95ICs9IGhlaWdodF9jb3Bp
ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPmRlc2lyZWRfeSArPSBoZWlnaHRfY29w
aWVkOworICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5oZWlnaHQgLT0gaGVpZ2h0X2NvcGll
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVkX3AgPSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoci0+Y3VycmVudF95ICE9IHItPmRlc2lyZWRfeQorICAgICAgICAgICAg
ICAgIC8qIFRoZSBjb25kaXRpb24gYmVsb3cgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAgICAg
ICAgICAgICgocC0+Y3VycmVudF95ID49IHItPmRlc2lyZWRfeQorICAgICAgICAgICAgICAgICAg
ICAgJiYgcC0+Y3VycmVudF95IDwgci0+ZGVzaXJlZF95ICsgci0+aGVpZ2h0KQorICAgICAgICAg
ICAgICAgICAgICB8fCAocC0+Y3VycmVudF95ICsgcC0+aGVpZ2h0ID4gci0+ZGVzaXJlZF95Cisg
ICAgICAgICAgICAgICAgICAgICAgICAmJiAocC0+Y3VycmVudF95ICsgcC0+aGVpZ2h0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPD0gci0+ZGVzaXJlZF95ICsgci0+aGVpZ2h0KSkpCisg
ICAgICAgICAgICAgICAgICAgYmVjYXVzZSB3ZSBoYXZlIDAgPCBwLT5oZWlnaHQgPD0gci0+aGVp
Z2h0LiAqLworICAgICAgICAgICAgICAgICYmIHAtPmN1cnJlbnRfeSA8IHItPmRlc2lyZWRfeSAr
IHItPmhlaWdodAorICAgICAgICAgICAgICAgICYmIHAtPmN1cnJlbnRfeSArIHAtPmhlaWdodCA+
IHItPmRlc2lyZWRfeSkKKyAgICAgICAgICAgICAgcC0+bnJvd3MgPSAwOworICAgICAgICAgICAg
LyogUmVvcmRlciBydW5zIGJ5IGNvcGllZCBwaXhlbCBsaW5lcyBpZiB0cnVuY2F0ZWQuICovCisg
ICAgICAgICAgICBpZiAodHJ1bmNhdGVkX3AgJiYgcC0+bnJvd3MgPiAwKQorICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaW50IGsgPSBucnVucyAtIDE7CisgICAgICAgICAgICAgICAg
d2hpbGUgKG1jX3J1bnNba10tPm5yb3dzID09IDAgfHwgbWNfcnVuc1trXS0+aGVpZ2h0IDwgcC0+
aGVpZ2h0KQorICAgICAgICAgICAgICAgICAgay0tOworICAgICAgICAgICAgICAgIG1lbW1vdmUg
KG1jX3J1bnMgKyBqLCBtY19ydW5zICsgaiArIDEsIChrIC0gaikgKiBzaXplb2YgKCptY19ydW5z
KSk7CisgICAgICAgICAgICAgICAgbWNfcnVuc1trXSA9IHA7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgIC8qIEFzc2lnbiBtYXRyaXggcm93cy4gKi8KKyAgICAgICAgZm9y
IChqID0gMDsgaiA8IHItPm5yb3dzOyArK2opCisgICAgICAgICAgeworICAgICAgICAgICAgc3Ry
dWN0IGdseXBoX3JvdyAqZnJvbSwgKnRvOworICAgICAgICAgICAgYm9vbCB0b19vdmVybGFwcGVk
X3A7CisgICAgICAgICAgICB0byA9IE1BVFJJWF9ST1cgKGN1cnJlbnRfbWF0cml4LCByLT5kZXNp
cmVkX3Zwb3MgKyBqKTsKKyAgICAgICAgICAgIGZyb20gPSBNQVRSSVhfUk9XIChkZXNpcmVkX21h
dHJpeCwgci0+ZGVzaXJlZF92cG9zICsgaik7CisgICAgICAgICAgICB0b19vdmVybGFwcGVkX3Ag
PSB0by0+b3ZlcmxhcHBlZF9wOworICAgICAgICAgICAgZnJvbS0+cmVkcmF3X2ZyaW5nZV9iaXRt
YXBzX3AgPSBmcm9tLT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3A7CisgICAgICAgICAgICBhc3Np
Z25fcm93ICh0bywgZnJvbSk7CisgICAgICAgICAgICAvKiBUaGUgYWJvdmUgYGFzc2lnbl9yb3cn
IGFjdHVhbGx5IGRvZXMgc3dhcCwgc28gaWYgd2UgaGFkCisgICAgICAgICAgICAgICBhbiBvdmVy
bGFwIGluIHRoZSBjb3B5IGRlc3RpbmF0aW9uIG9mIHR3byBydW5zLCB0aGVuCisgICAgICAgICAg
ICAgICB0aGUgc2Vjb25kIHJ1biB3b3VsZCBhc3NpZ24gYSBwcmV2aW91c2x5IGRpc2FibGVkIGJv
Z3VzCisgICAgICAgICAgICAgICByb3cuICBCdXQgdGhhbmtzIHRvIHRoZSB0cnVuY2F0aW9uIGNv
ZGUgaW4gdGhlCisgICAgICAgICAgICAgICBwcmVjZWRpbmcgZm9yLWxvb3AsIHdlIG5vIGxvbmdl
ciBoYXZlIHN1Y2ggYW4gb3ZlcmxhcCwKKyAgICAgICAgICAgICAgIGFuZCB0aHVzIHRoZSBhc3Np
Z25lZCByb3cgc2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLiAqLworICAgICAgICAgICAgZWFzc2Vy
dCAodG8tPmVuYWJsZWRfcCk7CisgICAgICAgICAgICBmcm9tLT5lbmFibGVkX3AgPSBmYWxzZTsK
KyAgICAgICAgICAgIHRvLT5vdmVybGFwcGVkX3AgPSB0b19vdmVybGFwcGVkX3A7CisgICAgICAg
ICAgfQorICAgICAgfQorICAvKiBDbGVhciB0aGUgaGFzaCB0YWJsZSwgZm9yIHRoZSBuZXh0IHRp
bWUuICovCisgIGZvciAoaSA9IDA7IGkgPCBtY19yb3dfZW50cnlfaWR4OyArK2kpCisgICAgbWNf
cm93X3RhYmxlW21jX3Jvd19lbnRyeV9wb29sW2ldLmJ1Y2tldF0gPSBOVUxMOworICAvKiBWYWx1
ZSBpcyAxIHRvIGluZGljYXRlIHRoYXQgd2Ugc2Nyb2xsZWQgdGhlIGRpc3BsYXkuICovCisgIHJl
dHVybiBucnVucyA+IDA7Cit9CisKKy8qIGBtY191cGRhdGVfdGV4dF9hcmVhJyAoY3Vyc29yIHJv
dyk6ICBgZGVzaXJlZF9yb3dgIC8gYGRlc2lyZWRfcm93YCAvIGB2cG9zYAorICAgYG1jX3VwZGF0
ZV90ZXh0X2FyZWEnIChub3QgY3Vyc29yIHJvdyk6ICBgY3VycmVudF9yb3dgIC8gYGRlc2lyZWRf
cm93YCAvIGB2cG9zYAorICAgYG1jX3VwZGF0ZV93aW5kb3dfZHJ5cnVuJzogIGBjdXJyZW50X3Jv
d2AgLyBgY3VycmVudF9yb3dgIC8gYHZwb3NgCisgICBgdXBkYXRlX3dpbmRvdyc6ICBgY3VycmVu
dF9yb3dgIC8gYGN1cnJlbnRfcm93YCAvIGB2cG9zYAorICAgYG1jX3VwZGF0ZV93aW5kb3dfZnJp
bmdlcyc6ICBgY3VycmVudF9yb3dgIC8gYGN1cnJlbnRfcm93YCAvIGB2cG9zYCovCitlbnVtIG1j
X3Jvd19wb3NpdGlvbgorbWNfcm93X3Bvc2l0aW9uIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3Qg
Z2x5cGhfcm93ICpjdXJyZW50X3Jvdywgc3RydWN0IGdseXBoX3JvdyAqZGVzaXJlZF9yb3csIGlu
dCB2cG9zKQoreworICBpbnQgaGVhZGVyX2xpbmVfZm9ybWF0ID0gV0lORE9XX0hFQURFUl9MSU5F
X0hFSUdIVCAodyk7CisgIHB0cmRpZmZfdCBib2JfZGlzcmVnYXJkX25hcnJvdyA9IEJVRl9CRUcg
KFhCVUZGRVIgKHctPmNvbnRlbnRzKSk7CisgIHB0cmRpZmZfdCBlb2JfZGlzcmVnYXJkX25hcnJv
dyA9IEJVRl9aIChYQlVGRkVSICh3LT5jb250ZW50cykpOworICBwdHJkaWZmX3QgYm9iX3Jlc3Bl
Y3RfbmFycm93ID0gQlVGX0JFR1YgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSk7CisgIHB0cmRpZmZf
dCBlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSk7Cisg
IHB0cmRpZmZfdCBidWZmZXJfc2l6ZSA9IGVvYl9kaXNyZWdhcmRfbmFycm93IC0gYm9iX2Rpc3Jl
Z2FyZF9uYXJyb3c7CisgIGJvb2wgYnVmZmVyX25hcnJvd2VkX3AgPSAoZW9iX3Jlc3BlY3RfbmFy
cm93IC0gYm9iX3Jlc3BlY3RfbmFycm93ICE9IGJ1ZmZlcl9zaXplKTsKKyAgLyogRXhjZXB0IGFz
IHRvIHRoZSBjdXJzb3Igcm93ICh3aGljaCBpcyBwcm9jZXNzZWQgYmVmb3JlIGFsbCBvdGhlciBy
b3dzKSwgd2UKKyAgcmVseSB1cG9uIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGN1cnJlbnQgbWF0
cml4LiAgQXMgdG8gdGhlIGN1cnNvciByb3csIHdlCisgIHJlcGx5IHVwb24gdGhlIHByZXZpb3Vz
IHJvdyBpbiB0aGUgZGVzaXJlZCBtYXRyaXggLS0gdGhpcyBpcyBhY2NlcHRhYmxlIGJlY2F1c2UK
KyAgdGhlIHBvaW50ZXJzIGJldHdlZW4gZGVzaXJlZC9jdXJyZW50IHJvdyBtYXRyaWNlcyBoYXZl
IG5vdCB5ZXQgYmVlbiBzd2FwcGVkIGJ5CisgIGBtYWtlX2N1cnJlbnQnIGluIGB1cGRhdGVfd2lu
ZG93X2xpbmUnLCBvciBiZWNhdXNlIHRoZSBwcmV2aW91cyByb3cgd291bGQgYmUKKyAgdGhlIHNh
bWUgaW4gYm90aCBtYXRyaWNlcyBpZiB3ZSBqdW1wZWQgdG8gYHNldF9jdXJzb3I6YCB3aXRoaW4g
YHVwZGF0ZV93aW5kb3cnCisgIGFuZCBgbWNfdXBkYXRlX3dpbmRvd19kcnlydW4nLiAqLworICBp
bnQgcHJldl9tYXRyaXhfcm93X3N0YXJ0X2J5dGVwb3MgPSAodnBvcyAhPSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1BVFJJWF9ST1dfU1RBUlRfQllURVBPUyAo
Y3VycmVudF9yb3cgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IC0xOworICBpbnQgcHJldl9tYXRyaXhfcm93X2VuZF9ieXRlcG9zID0gKHZwb3MgIT0gMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUFUUklYX1JPV19FTkRfQllURVBP
UyAoY3VycmVudF9yb3cgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAtMTsKKyAgaW50IG1hdHJpeF9yb3dfc3RhcnRfYnl0ZXBvcyA9IE1BVFJJWF9ST1dfU1RBUlRf
QllURVBPUyAoZGVzaXJlZF9yb3cpOworICBpbnQgbWF0cml4X3Jvd19lbmRfYnl0ZXBvcyA9IE1B
VFJJWF9ST1dfRU5EX0JZVEVQT1MgKGRlc2lyZWRfcm93KTsKKyAgLyogVGhlIGZpcnN0IGNvbmRp
dGlvbiB0ZXN0cyBmb3IgYSBzb2xpdGFyeSByb3cgY29udGFpbmluZyBaViwgcHJlY2VkZWQgYnkg
YQorICByb3cgY29udGFpbmluZyBhIHBlbnVsdGltYXRlIGdseXBoIHdpdGggYSBjaGFycG9zIG9m
IFpWIC0gMSBmb2xsb3dlZCBieSBhbiBlbmQKKyAgb2Ygcm93IHNwYWNlIGdseXBoIHdpdGggYSBj
aGFycG9zIG9mIDAuICBUaGUgb3RoZXIgY29uZGl0aW9ucyB0ZXN0IGZvciBhbiBlbXB0eQorICBi
dWZmZXIgKG5vdCBuYXJyb3dlZCksIG9yIGFuIGVtcHR5IG5hcnJvd2VkIGJ1ZmZlci4gKi8KKyAg
Ym9vbCByb3dfYXRfenZfcCA9ICgodnBvcyAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICYm
IChjdXJyZW50X3JvdyAtIDEpLT51c2VkW1RFWFRfQVJFQV0gPiAwCisgICAgICAgICAgICAgICAg
ICAgICAgICYmIHByZXZfbWF0cml4X3Jvd19zdGFydF9ieXRlcG9zICE9IHByZXZfbWF0cml4X3Jv
d19lbmRfYnl0ZXBvcworICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGN1cnJlbnRfcm93IC0g
MSktPmVuZHNfYXRfenZfcAorICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXRyaXhfcm93X3N0
YXJ0X2J5dGVwb3MgPT0gbWF0cml4X3Jvd19lbmRfYnl0ZXBvcworICAgICAgICAgICAgICAgICAg
ICAgICAmJiBkZXNpcmVkX3Jvdy0+ZW5kc19hdF96dl9wKQorICAgICAgICAgICAgICAgICAgICAg
IHx8ICgoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgdnBvcyA9PSAxKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgKGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwICYmIHZwb3MgPT0gMCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJ1ZmZlcl9uYXJyb3dlZF9wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGJvYl9yZXNwZWN0X25hcnJvdyA9PSBlb2JfcmVzcGVjdF9u
YXJyb3cpCisgICAgICAgICAgICAgICAgICAgICAgfHwgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4g
MCAmJiB2cG9zID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaGVhZGVyX2xp
bmVfZm9ybWF0ID09IDAgJiYgdnBvcyA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgYm9iX2Rpc3JlZ2FyZF9uYXJyb3cgPT0gZW9iX2Rpc3JlZ2FyZF9uYXJyb3cpKTsKKyAgLyog
SWYgbGluZS1udW1iZXJzIGFyZSBhY3RpdmUsIHRoZW4gc3BhY2UgZ2x5cGggcGFkZGluZyBlcXVh
bCB0byBpdHMgd2lkdGgKKyAgY291bnRlZCBpbiBIUE9TIGFyZSBmb2xsb3dlZCBieSBhIHNpbmds
ZSByb3cgZW5kIHNwYWNlIGdseXBoLiAgTGluZSBudW1iZXIKKyAgcGFkZGluZyBzcGFjZSBnbHlw
aHMgaGF2ZSBhIGNoYXJwb3Mgb2YgLTEsIHdoZXJlYXMgdGhlIGVuZCBvZiByb3cgc3BhY2UgZ2x5
cGgKKyAgaGFzIGEgY2hhcnBvcyBvZiAwLiAgSWYgbGluZSBudW1iZXJzIGFyZSBpbmFjdGl2ZSwg
dGhlbiB0aGUgcm93IHdpbGwgY29udGFpbgorICBhIHNvbGl0YXJ5IHNwYWNlIGdseXBoIHdpdGgg
YSBjaGFycG9zIG9mIC0xLiAqLworICBib29sIHJvd19iZXlvbmRfenZfcCA9IChtYXRyaXhfcm93
X3N0YXJ0X2J5dGVwb3MgPT0gbWF0cml4X3Jvd19lbmRfYnl0ZXBvcworICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhcm93X2F0X3p2X3ApOworICByZXR1cm4gKHJvd19hdF96dl9wKQorICAg
ICAgICAgICA/IEFUX1pWCisgICAgICAgICA6IChyb3dfYmV5b25kX3p2X3ApCisgICAgICAgICAg
ID8gUE9TVF9aVgorICAgICAgICAgOiBQUkVfWlY7Cit9CisKKy8qIFVwZGF0ZSB0aGUgZGlzcGxh
eSBvZiB0aGUgdGV4dCBhcmVhIG9mIHJvdyBWUE9TIGluIHdpbmRvdyBXLgorICAgVmFsdWUgaXMg
dHJ1ZSBpZiBkaXNwbGF5IGhhcyBjaGFuZ2VkLiAqLworc3RhdGljIGJvb2wKK21jX3VwZGF0ZV90
ZXh0X2FyZWEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnVwZGF0ZWRfcm93
LCBpbnQgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1
cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfZXNzZW50aWFscyBl
c3NlbnRpYWxzLCBib29sIGRyYXdfcCkKK3sKKyAgYm9vbCBkZWJ1Z19wID0gZmFsc2U7CisgIHN0
cnVjdCBnbHlwaF9yb3cgKmN1cnJlbnRfcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRy
aXgsIHZwb3MpOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpkZXNpcmVkX3JvdyA9IE1BVFJJWF9ST1cg
KHctPmRlc2lyZWRfbWF0cml4LCB2cG9zKTsKKyAgc3RydWN0IHJlZGlzcGxheV9pbnRlcmZhY2Ug
KnJpZiA9IEZSQU1FX1JJRiAoWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKSk7CisgIGJvb2wgY2hh
bmdlZF9wID0gMDsKKyAgc3RydWN0IG1jX1JHQiBsc2wgPSB7LnJlZCA9IC0xLjAsIC5ncmVlbiA9
IC0xLjAsIC5ibHVlID0gLTEuMH07CisgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE5P
X0ZMQVZPUjsKKyAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSA9IE5PX0NVUlNPUjsK
KyAgaW50IHdkID0gLTE7CisgIGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgc3RydWN0IGds
eXBoX21hdHJpeCAqZGVzaXJlZF9tYXRyaXggPSB3LT5kZXNpcmVkX21hdHJpeDsKKyAgaWYgKGRl
YnVnX3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfdXBkYXRlX3RleHRfYXJlYSAoJXMpOiAg
dnBvcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIG1jX3dpbmRvdyAodyksIHZwb3Mp
OworICAvKiBJbmFzbXVjaCBhcyB3ZSBwcm9jZXNzIHRoZSBjdXJzb3Igcm93IGJlZm9yZSBhbGwg
b3RoZXIgcm93cywgd2UgY2FuIHJlbHkKKyAgdXBvbiB0aGUgcHJldmlvdXMgYGRlc2lyZWRfcm93
YCB0byBiZSBhY2N1cmF0ZS4gKi8KKyAgZW51bSBtY19yb3dfcG9zaXRpb24gcm93X3Bvc2l0aW9u
ID0gIG1jX3Jvd19wb3NpdGlvbiAodywgdnBvcyA9PSB3LT5jdXJzb3IudnBvcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlc2ly
ZWRfcm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogY3VycmVudF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRfcm93LCB2cG9zKTsKKyAgLyogSWYgcm93
cyBhcmUgYXQgZGlmZmVyZW50IFggb3IgWSwgb3Igcm93cyBoYXZlIGRpZmZlcmVudCBoZWlnaHQs
CisgICAgIG9yIHRoZSBjdXJyZW50IHJvdyBpcyBtYXJrZWQgaW52YWxpZCwgd3JpdGUgdGhlIGVu
dGlyZSBsaW5lLiAqLworICBpZiAoIWN1cnJlbnRfcm93LT5lbmFibGVkX3AKKyAgICAgIHx8IGRl
c2lyZWRfcm93LT55ICE9IGN1cnJlbnRfcm93LT55CisgICAgICB8fCBkZXNpcmVkX3Jvdy0+YXNj
ZW50ICE9IGN1cnJlbnRfcm93LT5hc2NlbnQKKyAgICAgIHx8IGRlc2lyZWRfcm93LT5waHlzX2Fz
Y2VudCAhPSBjdXJyZW50X3Jvdy0+cGh5c19hc2NlbnQKKyAgICAgIHx8IGRlc2lyZWRfcm93LT5w
aHlzX2hlaWdodCAhPSBjdXJyZW50X3Jvdy0+cGh5c19oZWlnaHQKKyAgICAgIHx8IGRlc2lyZWRf
cm93LT52aXNpYmxlX2hlaWdodCAhPSBjdXJyZW50X3Jvdy0+dmlzaWJsZV9oZWlnaHQKKyAgICAg
IHx8IGN1cnJlbnRfcm93LT5vdmVybGFwcGVkX3AKKyAgICAgIC8qIFRoaXMgbmV4dCBsaW5lIGlz
IG5lY2Vzc2FyeSBmb3IgY29ycmVjdGx5IHJlZHJhd2luZworICAgICAgICAgbW91c2UtZmFjZSBh
cmVhcyBhZnRlciBzY3JvbGxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAgICBIb3dl
dmVyLCBpdCBjYXVzZXMgZXhjZXNzaXZlIGZsaWNrZXJpbmcgd2hlbiBtb3VzZSBpcyBtb3ZlZAor
ICAgICAgICAgYWNyb3NzIHRoZSBtb2RlIGxpbmUuICBMdWNraWx5LCB0dXJuaW5nIGl0IG9mZiBm
b3IgdGhlIG1vZGUKKyAgICAgICAgIGxpbmUgZG9lc24ndCBzZWVtIHRvIGh1cnQgYW55dGhpbmcu
IC0tIGN5ZC4KKyAgICAgICAgIEJ1dCBpdCBpcyBzdGlsbCBuZWVkZWQgZm9yIHRoZSBoZWFkZXIg
bGluZS4gLS0ga2ZzLiAqLworICAgICAgfHwgKGN1cnJlbnRfcm93LT5tb3VzZV9mYWNlX3AKKyAg
ICAgICAgICAmJiAhKGN1cnJlbnRfcm93LT5tb2RlX2xpbmVfcCAmJiB2cG9zID4gMCkpCisgICAg
ICB8fCBjdXJyZW50X3Jvdy0+eCAhPSBkZXNpcmVkX3Jvdy0+eCkKKyAgICB7CisgICAgICBvdXRw
dXRfY3Vyc29yX3RvICh3LCB2cG9zLCAwLCBkZXNpcmVkX3Jvdy0+eSwgZGVzaXJlZF9yb3ctPngp
OworICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIldSSVRFIEVO
VElSRSBST1c6XG5cCisgICAgICAgICAgdnBvcyAoJWQpIHwgY2hhciAoJWQvJXMpIHwgc3RhcnRf
eDogKCVkKSB8IHN0YXJ0X2hwb3MgKCVkLyVkKVxuIiwKKyAgICAgICAgICB2cG9zLCBkZXNpcmVk
X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0tPnUuY2gsCisgICAgICAgICAgbWNfY2hhcl90b19zdHJp
bmcgKGRlc2lyZWRfcm93LT5nbHlwaHNbVEVYVF9BUkVBXS0+dS5jaCksCisgICAgICAgICAgZGVz
aXJlZF9yb3ctPngsIDAsIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAg
IGlmIChkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICB7CisgICAgICAgICAg
YmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgaW50IGxlbiA9IGRlc2lyZWRfcm93LT51c2VkW1RF
WFRfQVJFQV07CisgICAgICAgICAgaW50IGhwb3MgPSBkZXNpcmVkX3Jvdy0+Z2x5cGhzW1RFWFRf
QVJFQV0gLSB1cGRhdGVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV07CisgICAgICAgICAgdy0+b3V0
cHV0X2N1cnNvci54ID0KKyAgICAgICAgICAgIG1jX2RyYXdfZ2x5cGhzICh3LCBkZXNpcmVkX21h
dHJpeCwgdXBkYXRlZF9yb3csIHctPm1jX21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3LT5vdXRwdXRfY3Vyc29yLngsIFRFWFRfQVJFQSwgaHBvcywgaHBvcyArIGxlbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEUkFXX05PUk1BTF9URVhULCAwLCB2cG9zLCBsc2ws
IGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSwg
d2QsIGVzc2VudGlhbHMuYWN0aXZlX3AsIGN1cnNvcl9nY19wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1DX0RSQVdfR0xZUEhfU1RSSU5HLCBkcmF3X3ApOworICAgICAgICAgIHctPm91
dHB1dF9jdXJzb3IuaHBvcyArPSBsZW47CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAg
ICAgICAgfQorICAgICAgLyogQ2xlYXIgdG8gZW5kIG9mIHdpbmRvdy4gKi8KKyAgICAgIGlmIChk
cmF3X3ApCisgICAgICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHVwZGF0ZWRfcm93LCBU
RVhUX0FSRUEsIC0xKTsKKyAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAvKiBUaGlzIGVyYXNl
cyB0aGUgY3Vyc29yLiAgV2UgZG8gdGhpcyBoZXJlIGJlY2F1c2UKKyAgICAgICAgIG5vdGljZW92
ZXJ3cml0dGVuX3RleHRfY3Vyc29yIGNhbm5vdCBlYXNpbHkgY2hlY2sgdGhpcywgd2hpY2gKKyAg
ICAgICAgIG1pZ2h0IGluZGljYXRlIHRoYXQgdGhlIHdob2xlIGZ1bmN0aW9uYWxpdHkgb2YKKyAg
ICAgICAgIG5vdGljZW92ZXJ3cml0dGVuX3RleHRfY3Vyc29yIHdvdWxkIGJldHRlciBiZSBpbXBs
ZW1lbnRlZCBoZXJlLgorICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdlIG5lZWQgbm90aWNl
b3ZlcndyaXR0ZW5fdGV4dF9jdXJzb3IgYXMgbG9uZworICAgICAgICAgYXMgbW91c2UgaGlnaGxp
Z2h0aW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgb3V0c2lkZSBvZgorICAgICAgICAgcmVkaXNw
bGF5LiAqLworICAgICAgaWYgKHZwb3MgPT0gdy0+cGh5c19jdXJzb3IudnBvcykKKyAgICAgICAg
dy0+cGh5c19jdXJzb3Jfb25fcCA9IDA7CisgICAgICAvKiBUaGUgZW50aXJlIHJvdyB3YXMgcmVk
cmF3biBhYm92ZSwgc28gYWxsIGZha2UgY3Vyc29ycyBtdXN0IGJlIHJlZHJhd24uICovCisgICAg
ICBtY19kcmF3X3JvdyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBkZXNpcmVkX3Jv
dy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgZGVzaXJlZF9yb3ctPngs
IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0sIHZwb3MsCisgICAgICAgICAgICAgICAgICAg
Y3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3AsIFNDUklCRV9P
TkUpOworICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBzdG9wLCBpLCB4Owor
ICAgICAgICBzdHJ1Y3QgZ2x5cGggKmN1cnJlbnRfZ2x5cGggPSBjdXJyZW50X3Jvdy0+Z2x5cGhz
W1RFWFRfQVJFQV07CisgICAgICAgIHN0cnVjdCBnbHlwaCAqZGVzaXJlZF9nbHlwaCA9IGRlc2ly
ZWRfcm93LT5nbHlwaHNbVEVYVF9BUkVBXTsKKyAgICAgICAgYm9vbCBvdmVybGFwcGluZ19nbHlw
aHNfcCA9IGN1cnJlbnRfcm93LT5jb250YWluc19vdmVybGFwcGluZ19nbHlwaHNfcDsKKyAgICAg
ICAgaW50IGRlc2lyZWRfc3RvcF9wb3MgPSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdOwor
ICAgICAgICBib29sIGFib3J0X3NraXBwaW5nID0gMDsKKyAgICAgICAgLyogSWYgdGhlIGRlc2ly
ZWQgcm93IGV4dGVuZHMgaXRzIGZhY2UgdG8gdGhlIHRleHQgYXJlYSBlbmQsIGFuZCB1bmxlc3Mg
dGhlCisgICAgICAgIGN1cnJlbnQgcm93IGFsc28gZG9lcyBzbyBhdCB0aGUgc2FtZSBwb3NpdGlv
biwgbWFrZSBzdXJlIHdlIHdyaXRlIGF0IGxlYXN0IG9uZQorICAgICAgICBnbHlwaCwgc28gdGhh
dCB0aGUgZmFjZSBleHRlbnNpb24gYWN0dWFsbHkgdGFrZXMgcGxhY2UuICovCisgICAgICAgIGlm
IChNQVRSSVhfUk9XX0VYVEVORFNfRkFDRV9QIChkZXNpcmVkX3JvdykKKyAgICAgICAgICAgICYm
IChkZXNpcmVkX3N0b3BfcG9zIDwgY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAg
ICAgICAgICAgIHx8IChkZXNpcmVkX3N0b3BfcG9zID09IGN1cnJlbnRfcm93LT51c2VkW1RFWFRf
QVJFQV0KKyAgICAgICAgICAgICAgICAgICAgJiYgIU1BVFJJWF9ST1dfRVhURU5EU19GQUNFX1Ag
KGN1cnJlbnRfcm93KSkpKQorICAgICAgICAgIC0tZGVzaXJlZF9zdG9wX3BvczsKKyAgICAgICAg
c3RvcCA9IG1pbiAoY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgZGVzaXJlZF9zdG9wX3Bv
cyk7CisgICAgICAgIGkgPSAwOworICAgICAgICB4ID0gZGVzaXJlZF9yb3ctPng7CisgICAgICAg
IGludCBjbGVhcl90b194ID0gMDsKKworICAgICAgICAvKiBMb29wIG92ZXIgZ2x5cGhzIHRoYXQg
Y3VycmVudCBhbmQgZGVzaXJlZCByb3cgbWF5IGhhdmUgaW4gY29tbW9uLiAqLworICAgICAgICB3
aGlsZSAoaSA8IHN0b3ApCisgICAgICAgICAgeworICAgICAgICAgICAgYXJyYXlfZ2x5cGhzX3Nr
aXBwZWQudXNlZCA9IDA7CisgICAgICAgICAgICBib29sIGNhbl9za2lwX3AgPSAhYWJvcnRfc2tp
cHBpbmc7CisgICAgICAgICAgICAvKiBTa2lwIG92ZXIgZ2x5cGhzIHRoYXQgYm90aCByb3dzIGhh
dmUgaW4gY29tbW9uLiAgVGhlc2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgdG8gYmUgd3JpdHRl
bi4gIFdlIGNhbid0IHNraXAgaWYgdGhlIGxhc3QgY3VycmVudCBnbHlwaCBvdmVybGFwcyB0aGUK
KyAgICAgICAgICAgIGdseXBoIHRvIGl0cyByaWdodC4gIEZvciBleGFtcGxlLCBjb25zaWRlciBh
IGN1cnJlbnQgcm93IG9mIGBpZicgd2l0aAorICAgICAgICAgICAgdGhlIGBmJyBpbiBDb3VyaWVy
IGJvbGQgc28gdGhhdCBpdCBvdmVybGFwcyB0aGUgYCAnIHRvIGl0cyByaWdodC4KKyAgICAgICAg
ICAgIElmIHRoZSBkZXNpcmVkIHJvdyBpcyBgICcsIHdlIHdvdWxkIHNraXAgb3ZlciB0aGUgc3Bh
Y2UgYWZ0ZXIgdGhlCisgICAgICAgICAgICBgaWYnIGFuZCB0aGVyZSB3b3VsZCByZW1haW4gYSBw
aXhlbCBmcm9tIHRoZSBgZicgb24gdGhlIHNjcmVlbi4gKi8KKyAgICAgICAgICAgIGlmIChvdmVy
bGFwcGluZ19nbHlwaHNfcCAmJiBpID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSAmY3VycmVudF9yb3ctPmdseXBoc1tURVhUX0FSRUFd
W2kgLSAxXTsKKyAgICAgICAgICAgICAgICBpbnQgbGVmdCwgcmlnaHQ7CisgICAgICAgICAgICAg
ICAgcmlmLT5nZXRfZ2x5cGhfb3ZlcmhhbmdzIChnbHlwaCwgWEZSQU1FICh3LT5mcmFtZSksICZs
ZWZ0LCAmcmlnaHQpOworICAgICAgICAgICAgICAgIGNhbl9za2lwX3AgPSAocmlnaHQgPT0gMCAm
JiAhYWJvcnRfc2tpcHBpbmcpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2Fu
X3NraXBfcCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBzdGFydF9ocG9z
ID0gaTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHN0b3AKKyAgICAgICAgICAgICAgICAg
ICAgICAgJiYgR0xZUEhfRVFVQUxfUCAoZGVzaXJlZF9nbHlwaCwgY3VycmVudF9nbHlwaCkpCisg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICsrYXJyYXlfZ2x5cGhzX3Nr
aXBwZWQudXNlZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5X2dseXBoc19za2lwcGVk
LmFsbG9jYXRlZCA8IGFycmF5X2dseXBoc19za2lwcGVkLnVzZWQpCisgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZF9hbGxvYyA9IGFycmF5X2ds
eXBoc19za2lwcGVkLmFsbG9jYXRlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdf
ZWx0cyA9IGFycmF5X2dseXBoc19za2lwcGVkLnVzZWQgLSBhcnJheV9nbHlwaHNfc2tpcHBlZC5h
bGxvY2F0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9nbHlwaHNfc2tpcHBlZC5z
a2lwcGVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeHBhbGxvYyAoYXJyYXlfZ2x5cGhz
X3NraXBwZWQuc2tpcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFy
cmF5X2dseXBoc19za2lwcGVkLmFsbG9jYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3X2VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElO
VF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAqYXJyYXlf
Z2x5cGhzX3NraXBwZWQuc2tpcHBlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQg
KGFycmF5X2dseXBoc19za2lwcGVkLnNraXBwZWQgKyBvbGRfYWxsb2MsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYXJyYXlfZ2x5cGhzX3NraXBwZWQuYWxsb2NhdGVkIC0g
b2xkX2FsbG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZiAq
YXJyYXlfZ2x5cGhzX3NraXBwZWQuc2tpcHBlZCk7CisgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpbnQgbnRoID0gYXJyYXlfZ2x5cGhzX3NraXBwZWQudXNlZCAt
IDE7CisgICAgICAgICAgICAgICAgICAgIGFycmF5X2dseXBoc19za2lwcGVkLnNraXBwZWRbbnRo
XS54ID0geDsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlfZ2x5cGhzX3NraXBwZWQuc2tpcHBl
ZFtudGhdLmhwb3MgPSBpOworICAgICAgICAgICAgICAgICAgICBhcnJheV9nbHlwaHNfc2tpcHBl
ZC5za2lwcGVkW250aF0uZW5hYmxlZF9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgeCAr
PSBkZXNpcmVkX2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgKytkZXNp
cmVkX2dseXBoLCArK2N1cnJlbnRfZ2x5cGgsICsraTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvKiBDb25zaWRlciB0aGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IHJvdyBj
b250YWlucyAieHh4IHBwcCBnZ2ciIGluCisgICAgICAgICAgICAgICAgaXRhbGljIENvdXJpZXIg
Zm9udCwgYW5kIHRoZSBkZXNpcmVkIHJvdyBpcyAieHh4IGdnZyIuICBUaGUgY2hhcmFjdGVyIGBw
JworICAgICAgICAgICAgICAgIGhhcyBsYmVhcmluZywgYGcnIGhhcyBub3QuICBUaGUgbG9vcCBh
Ym92ZSB3aWxsIHN0b3AgaW4gZnJvbnQgb2YgdGhlCisgICAgICAgICAgICAgICAgZmlyc3QgYHAn
IGluIHRoZSBjdXJyZW50IHJvdy4gIElmIHdlIHdvdWxkIHN0YXJ0IHdyaXRpbmcgZ2x5cGhzIHRo
ZXJlLCB3ZQorICAgICAgICAgICAgICAgIHdvdWxkbid0IGVyYXNlIHRoZSBsYmVhcmluZyBvZiB0
aGUgYHAnLiAgVGhlIHJlc3Qgb2YgdGhlIGxiZWFyaW5nIHByb2JsZW0KKyAgICAgICAgICAgICAg
ICBpcyB0aGVuIHRha2VuIGNhcmUgb2YgYnkgZHJhd19nbHlwaHMuICovCisgICAgICAgICAgICAg
ICAgaWYgKG92ZXJsYXBwaW5nX2dseXBoc19wCisgICAgICAgICAgICAgICAgICAgICYmIGkgPiAw
CisgICAgICAgICAgICAgICAgICAgICYmIGkgPCBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFd
CisgICAgICAgICAgICAgICAgICAgICYmIChjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9
IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0pKQorICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpbnQgbGVmdCwgcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIHJp
Zi0+Z2V0X2dseXBoX292ZXJoYW5ncyAoY3VycmVudF9nbHlwaCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRlJBTUUgKHctPmZyYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbGVmdCwgJnJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlZnQgPiAwICYm
IGkgPiAwKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC0taSwgLS1kZXNpcmVkX2dseXBoLCAtLWN1cnJlbnRfZ2x5cGg7CisgICAgICAgICAgICAgICAg
ICAgICAgICB4IC09IGRlc2lyZWRfZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCAtPSBkZXNpcmVkX2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIEFib3J0IHRoZSBza2lwcGluZyBh
bGdvcml0aG0gaWYgd2UgZW5kIHVwIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICBvdXIg
c3RhcnRpbmcgcG9pbnQsIHRvIGF2b2lkIGxvb3BpbmcgKGJ1ZyMxMDcwKS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIGxiZWFyaW5nIGlzIGxhcmdlciB0
aGFuCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwaXhlbCB3aWR0aC4gKi8KKyAgICAgICAg
ICAgICAgICAgICAgYWJvcnRfc2tpcHBpbmcgPSAoaSA8IHN0YXJ0X2hwb3MpOworICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUcnkgdG8gYXZvaWQg
d3JpdGluZyB0aGUgZW50aXJlIHJlc3Qgb2YgdGhlIGRlc2lyZWQgcm93CisgICAgICAgICAgICAg
ICBieSBsb29raW5nIGZvciBhIHJlc3luYyBwb2ludC4gIFRoaXMgbWFpbmx5IHByZXZlbnRzCisg
ICAgICAgICAgICAgICBtb2RlIGxpbmUgZmxpY2tlcmluZyBpbiB0aGUgY2FzZSB0aGUgbW9kZSBs
aW5lIGlzIGluCisgICAgICAgICAgICAgICBmaXhlZC1waXRjaCBmb250LCB3aGljaCBpdCB1c3Vh
bGx5IHdpbGwgYmUuICovCisgICAgICAgICAgICBpZiAoaSA8IGRlc2lyZWRfcm93LT51c2VkW1RF
WFRfQVJFQV0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnRfeCA9
IHgsIHN0YXJ0X2hwb3MgPSBpOworICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqc3RhcnQg
PSBkZXNpcmVkX2dseXBoOworICAgICAgICAgICAgICAgIGludCBjdXJyZW50X3ggPSB4OworICAg
ICAgICAgICAgICAgIGJvb2wgc2tpcF9maXJzdF9wID0gIWNhbl9za2lwX3A7CisgICAgICAgICAg
ICAgICAgLyogRmluZCB0aGUgbmV4dCBnbHlwaCB0aGF0J3MgZXF1YWwgYWdhaW4uICovCisgICAg
ICAgICAgICAgICAgd2hpbGUgKGkgPCBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICYmIChz
a2lwX2ZpcnN0X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFHTFlQSF9FUVVBTF9Q
IChkZXNpcmVkX2dseXBoLCBjdXJyZW50X2dseXBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
JiYgeCA9PSBjdXJyZW50X3gpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHggKz0gZGVzaXJlZF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRfeCArPSBjdXJyZW50X2dseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAg
ICAgICAgKytkZXNpcmVkX2dseXBoLCArK2N1cnJlbnRfZ2x5cGgsICsraTsKKyAgICAgICAgICAg
ICAgICAgICAgc2tpcF9maXJzdF9wID0gMDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBlbHQgPSAwOworICAgICAgICAgICAgICAgICAgICAgZWx0IDwgYXJy
YXlfZ2x5cGhzX3NraXBwZWQudXNlZDsKKyAgICAgICAgICAgICAgICAgICAgICsrZWx0KQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IGFycmF5X2dseXBo
c19za2lwcGVkLnNraXBwZWRbZWx0XS54OworICAgICAgICAgICAgICAgICAgICBpbnQgaHBvcyA9
IGFycmF5X2dseXBoc19za2lwcGVkLnNraXBwZWRbZWx0XS5ocG9zOworICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZ2x5cGggKnRhcmdldF9nbHlwaCA9CisgICAgICAgICAgICAgICAgICAgICAg
bWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBocG9z
LCB2cG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0tJUFBFRDogIHZwb3MgKCVkKSB8IGNoYXIgKCVk
LyVzKSB8IHg6ICglZCkgfCBocG9zICglZC8lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2cG9zLCB0YXJnZXRfZ2x5cGgtPnUuY2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtY19jaGFyX3RvX3N0cmluZyAodGFyZ2V0X2dseXBo
LT51LmNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIGhwb3Ms
IHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
bWNfZHJhd19yb3cgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBo
LCB4LCAxLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21h
dHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3AsIFNLSVBQRUQpOworICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpID09IHN0YXJ0X2hwb3MgfHwgeCAh
PSBjdXJyZW50X3gpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGkg
PSBzdGFydF9ocG9zOworICAgICAgICAgICAgICAgICAgICB4ID0gc3RhcnRfeDsKKyAgICAgICAg
ICAgICAgICAgICAgZGVzaXJlZF9nbHlwaCA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwdXRfY3Vyc29y
X3RvICh3LCB2cG9zLCBzdGFydF9ocG9zLCBkZXNpcmVkX3Jvdy0+eSwgc3RhcnRfeCk7CisgICAg
ICAgICAgICAgICAgLyogUmUtZHJhdyBhIHBvcnRpb24gb2YgdGhlIHJvdy4gKi8KKyAgICAgICAg
ICAgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwg
IlJFRFJBVyBTRUdNRU5UOlxuXAorICAgICAgICAgICAgICAgICAgICB2cG9zICglZCkgfCBjaGFy
ICglZC8lcykgfCB4OiAoJWQpIHwgaHBvcyAoJWQvJWQpIHwgbGVuZ3RoICglZClcbiIsCisgICAg
ICAgICAgICAgICAgICAgIHZwb3MsIHN0YXJ0LT51LmNoLCBtY19jaGFyX3RvX3N0cmluZyAoc3Rh
cnQtPnUuY2gpLAorICAgICAgICAgICAgICAgICAgICBzdGFydF94LCBzdGFydF9ocG9zLCB1cGRh
dGVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdIC0gMSwgaSAtIHN0YXJ0X2hwb3MpOworICAgICAgICAg
ICAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBpIC0gc3Rh
cnRfaHBvczsKKyAgICAgICAgICAgICAgICBpbnQgaHBvcyA9IHN0YXJ0IC0gdXBkYXRlZF9yb3ct
PmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgICAgICAgIHctPm91dHB1dF9jdXJzb3IueCA9
CisgICAgICAgICAgICAgICAgICBtY19kcmF3X2dseXBocyAodywgZGVzaXJlZF9tYXRyaXgsIHVw
ZGF0ZWRfcm93LCB3LT5tY19tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdy0+b3V0cHV0X2N1cnNvci54LCBURVhUX0FSRUEsIGhwb3MsIGhwb3MgKyBsZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJBV19OT1JNQUxfVEVYVCwgMCwgdnBvcywg
bHNsLCBnbHlwaF9mbGF2b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
c29yX3R5cGUsIHdkLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnNvcl9nY19wLCBNQ19EUkFXX0dMWVBIX1NUUklORywgZHJhd19wKTsK
KyAgICAgICAgICAgICAgICB3LT5vdXRwdXRfY3Vyc29yLmhwb3MgKz0gbGVuOworICAgICAgICAg
ICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgICAgbWNfZHJhd19yb3cgKHcs
IGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3Jvdywgc3RhcnQsIHN0YXJ0X3gsIGkgLSBzdGFydF9o
cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cG9zLCBjdXJzb3JfbWF0cml4LCBl
c3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGRyYXdfcCwgU0NSSUJFX1RXTyk7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZF9wID0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAg
ICAgICAvKiBXcml0ZSB0aGUgcmVzdC4gKi8KKyAgICAgICAgaWYgKGkgPCBkZXNpcmVkX3Jvdy0+
dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG91dHB1dF9jdXJzb3Jf
dG8gKHcsIHZwb3MsIGksIGRlc2lyZWRfcm93LT55LCB4KTsKKyAgICAgICAgICAgIGlmIChkZWJ1
Z19wKQorICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJEUkFXIFJFTUFJTkRFUiBPRiBU
SEUgUk9XOlxuXAorICAgICAgICAgICAgICAgIHZwb3MgKCVkKSB8IGNoYXIgKCVkLyVzKSB8IHg6
ICglZCkgfCBocG9zICglZC8lZCkgfCBsZW5ndGggKCVkKVxuIiwKKyAgICAgICAgICAgICAgICB2
cG9zLCBkZXNpcmVkX2dseXBoLT51LmNoLCBtY19jaGFyX3RvX3N0cmluZyAoZGVzaXJlZF9nbHlw
aC0+dS5jaCksCisgICAgICAgICAgICAgICAgeCwgaSwgZGVzaXJlZF9yb3ctPnVzZWRbVEVYVF9B
UkVBXSAtIDEsIGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSBpKTsKKyAgICAgICAgICAg
IGJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgaW50IGxlbiA9IGRlc2lyZWRfcm93LT51c2Vk
W1RFWFRfQVJFQV0gLSBpOworICAgICAgICAgICAgaW50IGhwb3MgPSBkZXNpcmVkX2dseXBoIC0g
dXBkYXRlZF9yb3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgICAgdy0+b3V0cHV0X2N1
cnNvci54ID0KKyAgICAgICAgICAgICAgbWNfZHJhd19nbHlwaHMgKHcsIGRlc2lyZWRfbWF0cml4
LCB1cGRhdGVkX3Jvdywgdy0+bWNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdy0+b3V0cHV0X2N1cnNvci54LCBURVhUX0FSRUEsIGhwb3MsIGhwb3MgKyBsZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEUkFXX05PUk1BTF9URVhULCAwLCB2cG9zLCBsc2ws
IGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBl
LCB3ZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgY3Vyc29yX2djX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNQ19EUkFXX0dMWVBIX1NUUklORywgZHJhd19wKTsKKyAgICAgICAgICAg
IHctPm91dHB1dF9jdXJzb3IuaHBvcyArPSBsZW47CisgICAgICAgICAgICB1bmJsb2NrX2lucHV0
ICgpOworICAgICAgICAgICAgLyogRklYTUU6ICBBbHRob3VnaCB3ZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgY2FjaGUgYmV0d2VlbiB0aGUgZW5kIG9mCisgICAgICAgICAgICB1cGRhdGVkX3JvdyBhbmQg
dGhlIHJpZ2h0IHdpbmRvdyBlZGdlLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRyYXcKKyAgICAg
ICAgICAgIHRob3NlIGZha2UgY3Vyc29ycy4gQWx0aG91Z2ggd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IHNlZSBpdCB3aXRoIHRoZQorICAgICAgICAgICAgbmFrZWQgZXllLCB0aG9zZSBmYWtlIGN1cnNv
cnMgYXJlIGJlaW5nIHN1cGVyaW1wb3NlZCBvbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgIGZh
a2UgY3Vyc29ycyB0aGF0IGRvIG5vdCBnZXQgZXJhc2VkIGJ5IHRoZSBjb2RlIGluIHRoZSBzZWN0
aW9uIGJlbG93LgorICAgICAgICAgICAgSXQgd291bGQgYmUgYmV0dGVyIHRvIG9ubHkgdXBkYXRl
IHRoZSBjYWNoZSBhbmQgc3VwcHJlc3MgZG91YmxlLWRyYXdpbmcKKyAgICAgICAgICAgIHRoZSBm
YWtlIGN1cnNvcnMgZm9yIHRoZSBhZm9yZW1lbnRpb25lZCBhcmVhIGF0IGlzc3VlLiAqLworICAg
ICAgICAgICAgbWNfZHJhd19yb3cgKHcsIGRlc2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgZGVz
aXJlZF9nbHlwaCwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkX3Jvdy0+dXNl
ZFtURVhUX0FSRUFdIC0gaSwgdnBvcywgY3Vyc29yX21hdHJpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGRyYXdfcCwgU0NSSUJFX1RIUkVFKTsK
KyAgICAgICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIEV2
ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHByZXZpb3VzIGNoYW5nZSByZW1haW5lZCB0aGUgc2FtZS4gIGBp
YCBhbmQgYHhgIHdlcmUKKyAgICAgICAgICBpbmNyZW1lbnRlZCB0byB0aGUgZW5kIG9mIHRoZSBn
bHlwaCByb3cuICBpID09IGRlc2lyZWRfcm93LT51c2VkW1RFWFRfQVJFQV0KKyAgICAgICAgICBU
aGUgYHctPm91dHB1dF9jdXJzb3IueC95L2hwb3MvdnBvc2AgaXMgYXQgdGhlIGVuZCBvZiB0aGUg
cHJldmlvdXMgY2hhbmdlLgorICAgICAgICAgIFdoZW4gdGhpcyBzaXR1YXRpb24gZXhpc3RzLCB0
aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cgYW5kCisgICAgICAg
ICAgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdyB3aWxsIF9ub3RfIGJlIGNsZWFyZWQuICBU
aGVyZWZvcmUsIGl0IGlzIG9rYXkgdG8KKyAgICAgICAgICBkcmF3IHRoZSBmbG9hdGluZyBnbHlw
aHMgZm9yIHRoZSBob3Jpem9udGFsL3ZlcnRpY2FsIHJ1bGVycyBoZXJlLiAqLworICAgICAgICAg
IGVsc2UgaWYgKGNoYW5nZWRfcAorICAgICAgICAgICAgICAgICAgICYmIHctPm91dHB1dF9jdXJz
b3IuaHBvcyAhPSB1cGRhdGVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBpbnQgeCA9IHctPm91dHB1dF9jdXJzb3IueDsKKyAgICAgICAgICAgICAg
aW50IGhwb3MgPSB3LT5vdXRwdXRfY3Vyc29yLmhwb3M7CisgICAgICAgICAgICAgIHN0cnVjdCBn
bHlwaCAqc3RhcnQgPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBkZXNpcmVkX21hdHJpeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZWRfcm93LCBocG9zLCB2cG9zKTsKKyAgICAgICAgICAgICAgaWYgKHctPm91dHB1dF9jdXJz
b3IueCA9PSB1cGRhdGVkX3Jvdy0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAgICAgICAgeCAtPSBz
dGFydC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAg
ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlBPU1QtQ0hBTkdFRDogIHZwb3MgKCVkKSB8IHggKCVk
KSB8IGhwb3MgKCVkLyVkKSB8IGNoYXIgKCVkLyVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZwb3MsIHgsIGhwb3MsIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0g
LSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtPnUuY2gsIG1jX2No
YXJfdG9fc3RyaW5nIChzdGFydC0+dS5jaCkpOworICAgICAgICAgICAgICBtY19kcmF3X3JvdyAo
dywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBzdGFydCwgeCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSBocG9zLCB2cG9zLCBj
dXJzb3JfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNzZW50aWFscywgcm93
X3Bvc2l0aW9uLCBkcmF3X3AsIFBPU1RfQ0hBTkdFRCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvKiBUaGVyZSB3ZXJlIG5vIGNoYW5nZXMgYW5kIGkgPT0gZGVzaXJlZF9yb3ctPnVzZWRb
VEVYVF9BUkVBXSAqLworICAgICAgICAgICAgZWxzZSBpZiAoIWNoYW5nZWRfcCkKKyAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChkZWJ1Z19wKQorICAgICAgICAgICAgICAgICAg
ZnByaW50ZiAoc3RkZXJyLCAiVU5DSEFOR0VEIC0tIFdSSVRFIEVOVElSRSBMSU5FOiAgdnBvcyAo
JWQpIHwgcm93LT51c2VkICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZwb3MsIHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxKTsKKyAgICAgICAgICAg
ICAgICBtY19kcmF3X3JvdyAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCBkZXNpcmVk
X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2lyZWRfcm93LT54LCBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdLCB2cG9zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3NlbnRpYWxzLCByb3dfcG9z
aXRpb24sIGRyYXdfcCwgVU5DSEFOR0VEKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgIC8q
IE1heWJlIGNsZWFyIHRvIGVuZCBvZiBsaW5lLiAqLworICAgICAgICBpZiAoTUFUUklYX1JPV19F
WFRFTkRTX0ZBQ0VfUCAoZGVzaXJlZF9yb3cpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8q
IElmIG5ldyByb3cgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFyZWEsIG5vdGhpbmcK
KyAgICAgICAgICAgICAgIGhhcyB0byBiZSBjbGVhcmVkLCBpZiBhbmQgb25seSBpZiB3ZSBkaWQg
YSB3cml0ZV9nbHlwaHMKKyAgICAgICAgICAgICAgIGFib3ZlLiAgVGhpcyBpcyBtYWRlIHN1cmUg
Ynkgc2V0dGluZyBkZXNpcmVkX3N0b3BfcG9zCisgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5
IGFib3ZlLiAqLworICAgICAgICAgICAgZWFzc2VydCAoaSA8IGRlc2lyZWRfcm93LT51c2VkW1RF
WFRfQVJFQV0KKyAgICAgICAgICAgICAgICAgICAgIHx8ICgoZGVzaXJlZF9yb3ctPnVzZWRbVEVY
VF9BUkVBXSA9PSBjdXJyZW50X3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIE1BVFJJWF9ST1dfRVhURU5EU19GQUNFX1AgKGN1cnJlbnRfcm93KSkpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChNQVRSSVhfUk9XX0VYVEVORFNfRkFDRV9Q
IChjdXJyZW50X3JvdykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIElmIG9sZCBy
b3cgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSB0ZXh0IGFyZWEsIGNsZWFyLiAqLworICAgICAg
ICAgICAgICBpZiAoaSA+PSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAg
ICAgICAgIG91dHB1dF9jdXJzb3JfdG8gKHcsIHZwb3MsIGksIGRlc2lyZWRfcm93LT55LCBkZXNp
cmVkX3Jvdy0+cGl4ZWxfd2lkdGgpOworICAgICAgICAgICAgICBpZiAoZHJhd19wKQorICAgICAg
ICAgICAgICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHVwZGF0ZWRfcm93LCBURVhUX0FS
RUEsIC0xKTsKKyAgICAgICAgICAgICAgY2xlYXJfdG9feCA9IC0xOworICAgICAgICAgICAgICBj
aGFuZ2VkX3AgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZGVzaXJl
ZF9yb3ctPnBpeGVsX3dpZHRoIDwgY3VycmVudF9yb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGNsZWFyIHRvIHRoZSBlbmQgb2Yg
dGhlIG9sZCByb3cuICBFdmVyeXRoaW5nCisgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCBw
b3NpdGlvbiBzaG91bGQgYmUgY2xlYXIgYWxyZWFkeS4gKi8KKyAgICAgICAgICAgICAgICBpbnQg
eGxpbTsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSBkZXNpcmVkX3Jvdy0+dXNlZFtURVhUX0FS
RUFdKQorICAgICAgICAgICAgICAgICAgb3V0cHV0X2N1cnNvcl90byAodywgdnBvcywgaSwgZGVz
aXJlZF9yb3ctPnksIGRlc2lyZWRfcm93LT5waXhlbF93aWR0aCk7CisgICAgICAgICAgICAgICAg
LyogSWYgY3Vyc29yIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBtYWtlIHN1
cmUKKyAgICAgICAgICAgICAgICAgICBpdCdzIGNsZWFyZWQuICBOb3dhZGF5cyB3ZSBkb24ndCBo
YXZlIGEgcGh5c19jdXJzb3JfZ2x5cGgKKyAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHRv
IGVyYXNlIHRoZSBjdXJzb3IgKGJlY2F1c2UgdGhpcyBtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICBkb2Vzbid0IHdvcmsgd2l0aCBsYmVhcmluZy9yYmVhcmluZyksIHNvIHdlIG11c3QgZG8gaXQg
dGhpcyB3YXkuICovCisgICAgICAgICAgICAgICAgaWYgKHZwb3MgPT0gdy0+cGh5c19jdXJzb3Iu
dnBvcworICAgICAgICAgICAgICAgICAgICAmJiAoZGVzaXJlZF9yb3ctPnJldmVyc2VkX3AKKyAg
ICAgICAgICAgICAgICAgICAgICAgID8gKHctPnBoeXNfY3Vyc29yLmhwb3MgPCAwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgOiAody0+cGh5c19jdXJzb3IuaHBvcyA+PSBkZXNpcmVkX3Jvdy0+
dXNlZFtURVhUX0FSRUFdKSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHctPnBoeXNfY3Vyc29yX29uX3AgPSAwOworICAgICAgICAgICAgICAgICAgICB4bGltID0g
LTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHhsaW0gPSBjdXJyZW50X3Jvdy0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAg
ICAgICAgaWYgKGRyYXdfcCkKKyAgICAgICAgICAgICAgICAgIHJpZi0+Y2xlYXJfZW5kX29mX2xp
bmUgKHcsIHVwZGF0ZWRfcm93LCBURVhUX0FSRUEsIHhsaW0pOworICAgICAgICAgICAgICAgIGNs
ZWFyX3RvX3ggPSB4bGltOworICAgICAgICAgICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAg
ICAgICAgIH0KKworICAgICAgICBpZiAoY2hhbmdlZF9wCisgICAgICAgICAgICAmJiBjbGVhcl90
b194ICE9IDApCisgICAgICAgICAgeworICAgICAgICAgICAgaW50IHRleHRfYXJlYV93aWR0aCA9
IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgICAgICAgICAgICBzdHJ1Y3QgbWNf
UkdCIGRlYnVnX2ZnID0gey5yZWQgPSAwLjg2NywgLmdyZWVuID0gMC44NjcsIC5ibHVlID0gMC44
Njd9OworICAgICAgICAgICAgc3RydWN0IGdseXBoICp0YXJnZXRfZ2x5cGggPQorICAgICAgICAg
ICAgICB1cGRhdGVkX3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyB1cGRhdGVkX3Jvdy0+dXNlZFtU
RVhUX0FSRUFdIC0gMTsKKyAgICAgICAgICAgIC8qIGBtY19lbmdpbmUnIG9ubHkgZHJhd3MgYW4g
TUNfR0xZUEggd2hlbiB4IDwgdXBkYXRlZF9yb3ctPnBpeGVsX3dpZHRoLgorICAgICAgICAgICAg
VGhlIGN1cnJlbnQgZGVzaWduIGluaGliaXRzIGRyYXdpbmcgb3ZlciBhbiBleGlzdGluZyBnbHlw
aCBhdCB0aGUgZW5kIG9mIGEKKyAgICAgICAgICAgIHdvcmQtd3JhcHBlZCBsaW5lLiAgU2FpZCBn
bHlwaCByZWNlaXZlcyBhIGZha2UgY3Vyc29yIGluIGVpdGhlciBvbmUgb2YgdGhlCisgICAgICAg
ICAgICBwcmV2aW91cyBzZWN0aW9ucyBhYm92ZSwgYW5kIHNob3VsZCBub3QgYmUgb3ZlcndyaXR0
ZW4gd2l0aCBhbm90aGVyIG9uZS4KKyAgICAgICAgICAgIFRoaXMgZGVzaWduIGlzIG5lZWRlZCBi
ZWNhdXNlIGEgd29yZC13cmFwcGVkIGxpbmUgZG9lcyBub3QgcmVjZWl2ZSBhbiBleHRyYQorICAg
ICAgICAgICAgc3BhY2UgbGlrZSBub24td29yZC13cmFwcGVkIGxpbmVzIGRvLiAqLworICAgICAg
ICAgICAgaW50IHggPSB1cGRhdGVkX3Jvdy0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICBpbnQg
aHBvcyA9IHVwZGF0ZWRfcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxOworICAgICAgICAgICAgaW50
IHhfbGltaXQgPSAoY2xlYXJfdG9feCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
PyB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGVhcl90b194
OworICAgICAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsK
KyAgICAgICAgICAgIGJvb2wgZmlsbF9jb2x1bW5fdHJ1bXBzX3AgPSAoIU5JTFAgKEJWQVIgKGIs
IGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBlc3NlbnRpYWxzLmZjX3gp
OworICAgICAgICAgICAgaWYgKG1jX3N0ZGVycl9wKQorICAgICAgICAgICAgICBmcHJpbnRmIChz
dGRlcnIsICJtY191cGRhdGVfdGV4dF9hcmVhIChmbG9hdGluZyk6ICB2cG9zICglZCkgfCB4X2xp
bWl0ICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBvcywgeF9saW1p
dCk7CisgICAgICAgICAgICBpZiAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAg
ICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKQorICAgICAgICAgICAgICAgICYmIChl
c3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgIHx8ICghZXNzZW50aWFscy5h
Y3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX2lu
YWN0aXZlX3dpbmRvd3MpKSkpCisgICAgICAgICAgICAgICAgJiYgeCA8IHRleHRfYXJlYV93aWR0
aAorICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNfeCA+PSB4CisgICAgICAgICAgICAg
ICAgJiYgdGFyZ2V0X2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAmJiBkcmF3X3ApCisg
ICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgZGVzaXJlZF9tYXRyaXgsIHVwZGF0ZWRfcm93LCB0
YXJnZXRfZ2x5cGgsIFRFWFRfQVJFQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4LCB4X2xp
bWl0LCB1cGRhdGVkX3Jvdy0+eSwgaHBvcywgdnBvcywgTUNfQkFSLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnNvcl9tYXRyaXgsIGVzc2VudGlhbHMsIHJvd19wb3NpdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19wID8gZGVidWdfZmcgOiBlc3NlbnRpYWxzLmZj
X2ZnW3Jvd19wb3NpdGlvbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgRklMTF9DT0xVTU4s
IGRyYXdfcCwgTk9XSEVSRSwgTk9fQ0FDSEUpOworICAgICAgICAgICAgaWYgKEJVRkZFUlAgKHct
PmNvbnRlbnRzKQorICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJz
KSkKKyAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxl
cikpCisgICAgICAgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAg
ICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAg
ICAgICAmJiB4IDwgdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgJiYgdnBvcyA9PSB3
LT5jdXJzb3IudnBvcworICAgICAgICAgICAgICAgICYmIHRhcmdldF9nbHlwaCAhPSBOVUxMCisg
ICAgICAgICAgICAgICAgJiYgZHJhd19wKQorICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIGRl
c2lyZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBoLCBURVhUX0FSRUEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgeCwgeF9saW1pdCwgdXBkYXRlZF9yb3ctPnksIGhwb3MsIHZw
b3MsIE1DX0hCQVIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwg
ZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn
X3AgPyBkZWJ1Z19mZyA6IGVzc2VudGlhbHMuY2hfZmdbcm93X3Bvc2l0aW9uXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSLCBkcmF3X3AsIE5PV0hFUkUsIE5PX0NB
Q0hFKTsKKyAgICAgICAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAg
ICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgJiYg
IU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAmJiAo
ZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICB8fCAoIWVzc2VudGlhbHMu
YWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF9p
bmFjdGl2ZV93aW5kb3dzKSkpKQorICAgICAgICAgICAgICAgICYmICFmaWxsX2NvbHVtbl90cnVt
cHNfcAorICAgICAgICAgICAgICAgICYmIHggPCB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAgICAg
ICAgICAmJiB2cG9zICE9IHctPmN1cnNvci52cG9zCisgICAgICAgICAgICAgICAgJiYgdy0+Y3Vy
c29yLnggPj0geAorICAgICAgICAgICAgICAgICYmIHRhcmdldF9nbHlwaCAhPSBOVUxMCisgICAg
ICAgICAgICAgICAgJiYgZHJhd19wKQorICAgICAgICAgICAgICBtY19lbmdpbmUgKHcsIGRlc2ly
ZWRfbWF0cml4LCB1cGRhdGVkX3JvdywgdGFyZ2V0X2dseXBoLCBURVhUX0FSRUEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgeCwgeF9saW1pdCwgdXBkYXRlZF9yb3ctPnksIGhwb3MsIHZwb3Ms
IE1DX0JBUiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4LCBlc3Nl
bnRpYWxzLCByb3dfcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfcCA/
IGRlYnVnX2ZnIDogZXNzZW50aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25dLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIFZFUlRJQ0FMX1JVTEVSLCBkcmF3X3AsIE5PV0hFUkUsIE5PX0NBQ0hFKTsK
KyAgICAgICAgICB9CisKKyAgICAgIH0KKyAgcmV0dXJuIGNoYW5nZWRfcDsKK30KKworLyogVXBk
YXRlIHJvdyBWUE9TIGluIHdpbmRvdyBXLiAgVmFsdWUgaXMgdHJ1ZSBpZiBkaXNwbGF5IGhhcyBi
ZWVuIGNoYW5nZWQuICovCitzdGF0aWMgYm9vbAorbWNfdXBkYXRlX3dpbmRvd19saW5lIChzdHJ1
Y3Qgd2luZG93ICp3LCBpbnQgdnBvcywgYm9vbCAqbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wLAor
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpjdXJzb3JfbWF0cml4
LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3NlbnRpYWxz
LCBib29sIGRyYXdfcCkKK3sKKyAgc3RydWN0IGdseXBoX3JvdyAqY3VycmVudF9yb3cgPSBNQVRS
SVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgdnBvcyk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmRl
c2lyZWRfcm93ID0gTUFUUklYX1JPVyAody0+ZGVzaXJlZF9tYXRyaXgsIHZwb3MpOworICBzdHJ1
Y3QgcmVkaXNwbGF5X2ludGVyZmFjZSAqcmlmID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19G
UkFNRSAodykpKTsKKyAgYm9vbCBjaGFuZ2VkX3AgPSAwOworICAvKiBBIHJvdyBjYW4gYmUgY29t
cGxldGVseSBpbnZpc2libGUgaW4gY2FzZSBhIGRlc2lyZWQgbWF0cml4IHdhcworICAgICBidWls
dCB3aXRoIGEgdnNjcm9sbCBhbmQgdGhlbiBtYWtlX2N1cnNvcl9saW5lX2Z1bGx5X3Zpc2libGUg
c2hpZnRzCisgICAgIHRoZSBtYXRyaXguICBNYWtlIHN1cmUgdG8gbWFrZSBzdWNoIHJvd3MgY3Vy
cmVudCBhbnl3YXksIHNpbmNlCisgICAgIHdlIG5lZWQgdGhlIGNvcnJlY3QgeS1wb3NpdGlvbiwg
Zm9yIGV4YW1wbGUsIGluIHRoZSBjdXJyZW50IG1hdHJpeC4gKi8KKyAgaWYgKGRlc2lyZWRfcm93
LT5tb2RlX2xpbmVfcAorICAgICAgfHwgZGVzaXJlZF9yb3ctPnZpc2libGVfaGVpZ2h0ID4gMCkK
KyAgICB7CisgICAgICBlYXNzZXJ0IChkZXNpcmVkX3Jvdy0+ZW5hYmxlZF9wKTsKKyAgICAgIC8q
IFVwZGF0ZSBkaXNwbGF5IG9mIHRoZSBsZWZ0IG1hcmdpbiBhcmVhLCBpZiB0aGVyZSBpcyBvbmUu
ICovCisgICAgICBpZiAoIWRlc2lyZWRfcm93LT5mdWxsX3dpZHRoX3AgJiYgdy0+bGVmdF9tYXJn
aW5fY29scyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFuZ2VkX3AgPSAxOworICAgICAg
ICAgIHVwZGF0ZV9tYXJnaW5hbF9hcmVhICh3LCBkZXNpcmVkX3JvdywgTEVGVF9NQVJHSU5fQVJF
QSwgdnBvcyk7CisgICAgICAgICAgLyogU2V0dGluZyB0aGlzIGZsYWcgd2lsbCBlbnN1cmUgdGhl
IHZlcnRpY2FsIGJvcmRlciwgaWYKKyAgICAgICAgICAgICBhbnksIGJldHdlZW4gdGhpcyB3aW5k
b3cgYW5kIHRoZSBvbmUgb24gaXRzIGxlZnQgd2lsbCBiZQorICAgICAgICAgICAgIHJlZHJhd24u
ICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVwZGF0aW5nIHRoZSBsZWZ0CisgICAgICAgICAg
ICAgbWFyZ2luIGFyZWEgY2FuIHBvdGVudGlhbGx5IGRyYXcgb3ZlciB0aGUgYm9yZGVyLiAqLwor
ICAgICAgICAgIGN1cnJlbnRfcm93LT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IDE7CisgICAg
ICAgIH0KKyAgICAgIGJvb2wgdXBkYXRlZF9wID0gbWNfdXBkYXRlX3RleHRfYXJlYSAodywgZGVz
aXJlZF9yb3csIHZwb3MsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMsIGRyYXdfcCk7CisgICAgICAvKiBVcGRhdGUg
dGhlIGRpc3BsYXkgb2YgdGhlIHRleHQgYXJlYS4gKi8KKyAgICAgIGlmICh1cGRhdGVkX3ApCisg
ICAgICAgIHsKKyAgICAgICAgICBjaGFuZ2VkX3AgPSAxOworICAgICAgICAgIGlmIChjdXJyZW50
X3Jvdy0+bW91c2VfZmFjZV9wKQorICAgICAgICAgICAgKm1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5f
cCA9IDE7CisgICAgICAgIH0KKyAgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IG9mIHRoZSByaWdodCBt
YXJnaW4gYXJlYSwgaWYgdGhlcmUgaXMgb25lLiAqLworICAgICAgaWYgKCFkZXNpcmVkX3Jvdy0+
ZnVsbF93aWR0aF9wICYmIHctPnJpZ2h0X21hcmdpbl9jb2xzID4gMCkKKyAgICAgICAgeworICAg
ICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgdXBkYXRlX21hcmdpbmFsX2FyZWEgKHcs
IGRlc2lyZWRfcm93LCBSSUdIVF9NQVJHSU5fQVJFQSwgdnBvcyk7CisgICAgICAgIH0KKyAgICAg
IC8qIERyYXcgdHJ1bmNhdGlvbiBtYXJrcyBldGMuICovCisgICAgICBpZiAoIWN1cnJlbnRfcm93
LT5lbmFibGVkX3AKKyAgICAgICAgICB8fCBkZXNpcmVkX3Jvdy0+eSAhPSBjdXJyZW50X3Jvdy0+
eQorICAgICAgICAgIHx8IGRlc2lyZWRfcm93LT52aXNpYmxlX2hlaWdodCAhPSBjdXJyZW50X3Jv
dy0+dmlzaWJsZV9oZWlnaHQKKyAgICAgICAgICB8fCBkZXNpcmVkX3Jvdy0+Y3Vyc29yX2luX2Zy
aW5nZV9wICE9IGN1cnJlbnRfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICB8fCBk
ZXNpcmVkX3Jvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgIT0gY3VycmVudF9yb3ctPm92ZXJsYXlf
YXJyb3dfYml0bWFwCisgICAgICAgICAgfHwgY3VycmVudF9yb3ctPnJlZHJhd19mcmluZ2VfYml0
bWFwc19wCisgICAgICAgICAgfHwgZGVzaXJlZF9yb3ctPm1vZGVfbGluZV9wICE9IGN1cnJlbnRf
cm93LT5tb2RlX2xpbmVfcAorICAgICAgICAgIHx8IGRlc2lyZWRfcm93LT5leGFjdF93aW5kb3df
d2lkdGhfbGluZV9wICE9IGN1cnJlbnRfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisg
ICAgICAgICAgfHwgKE1BVFJJWF9ST1dfQ09OVElOVUFUSU9OX0xJTkVfUCAoZGVzaXJlZF9yb3cp
CisgICAgICAgICAgICAgICE9IE1BVFJJWF9ST1dfQ09OVElOVUFUSU9OX0xJTkVfUCAoY3VycmVu
dF9yb3cpKSkKKyAgICAgICAgcmlmLT5hZnRlcl91cGRhdGVfd2luZG93X2xpbmVfaG9vayAodywg
ZGVzaXJlZF9yb3cpOworICAgIH0KKyAgLyogVXBkYXRlIGN1cnJlbnRfcm93IGZyb20gZGVzaXJl
ZF9yb3cuICovCisgIG1ha2VfY3VycmVudCAody0+ZGVzaXJlZF9tYXRyaXgsIHctPmN1cnJlbnRf
bWF0cml4LCB2cG9zKTsKKyAgcmV0dXJuIGNoYW5nZWRfcDsKK30KKwordm9pZAorbWNfdXBkYXRl
X3dpbmRvd19lcmFzZSAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IG1jX21hdHJpeCBvbGRfbWF0
cml4KQoreworICBib29sIGRlYnVnX3AgPSBmYWxzZTsKKyAgYm9vbCBnb19vbmVfcCA9IChvbGRf
bWF0cml4LmN1cnNvcnNfdXNlZFtNQ19DQUNIRV0gPiAwCisgICAgICAgICAgICAgICAgICAgfHwg
b2xkX21hdHJpeC5jdXJzb3JzX3VzZWRbQ0hfQ0FDSEVdID4gMAorICAgICAgICAgICAgICAgICAg
IHx8IG9sZF9tYXRyaXguY3Vyc29yc191c2VkW0ZDX0NBQ0hFXSA+IDApOworICBib29sIGdvX3R3
b19wID0gKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICAgICAgICAgICYmICghTklM
UCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlz
aWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3
LT5jb250ZW50cyksIG1jX2NvbmYpKSkpOworICBib29sIHVwZGF0aW5nX2ZyYW1lX3AgPSBmYWxz
ZTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGlmIChYRlJBTUUg
KHctPmZyYW1lKSAhPSBmLT5tY191cGRhdGluZ19mcmFtZQorICAgICAgJiYgKGdvX29uZV9wIHx8
IGdvX3R3b19wKSkKKyAgICB7CisgICAgICB1cGRhdGluZ19mcmFtZV9wID0gdHJ1ZTsKKyAgICAg
IHVwZGF0ZV9iZWdpbiAoZik7CisgICAgfQorICBpZiAody0+cGh5c19jdXJzb3Jfb25fcAorICAg
ICAgJiYgZ29fdHdvX3ApCisgICAgZXJhc2VfcGh5c19jdXJzb3IgKHcpOworICBmb3IgKGludCB2
bnRoID0gMDsKKyAgICAgICBnb19vbmVfcAorICAgICAgICYmIHZudGggPCB3LT5tY19tYXRyaXgu
dnBvc191c2VkOworICAgICAgICsrdm50aCkKKyAgICB7CisgICAgICBmb3IgKGVudW0gbWNfY2Fj
aGVfdHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7CisgICAgICAgICAgIGNhY2hlX3R5cGUgPCBO
T19DQUNIRTsKKyAgICAgICAgICAgKytjYWNoZV90eXBlKQorICAgICAgICBmb3IgKGludCBudGhf
MCA9IDA7CisgICAgICAgICAgICAgbWNfdHJhdmVyc2VfY2FjaGVfcCAob2xkX21hdHJpeCwgY2Fj
aGVfdHlwZSwgdm50aCwgbnRoXzApOworICAgICAgICAgICAgICsrbnRoXzApCisgICAgICAgICAg
eworICAgICAgICAgICAgYm9vbCBzYW1lX3AgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoaW50
IHdfbnRoID0gMDsgd19udGggPCB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2VkW2Nh
Y2hlX3R5cGVdOyArK3dfbnRoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2Ft
ZV9wIHw9IChvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmds
eXBoLnR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZw
b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmICgob2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF8wXS5nbHlwaC5ieXRlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlw
aC5ieXRlcG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLnJvd19wb3NpdGlvbiA9PSBBVF9a
VgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0ucm93X3Bvc2l0aW9uID09IEFUX1pWKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLnJvd19wb3NpdGlvbiA9PSBQT1NUX1pWCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5yb3dfcG9zaXRpb24gPT0gUE9TVF9aVikpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAoKG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMF0uZ2x5cGguY2hhcnBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0u
Z2x5cGguY2hhcnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAob2xkX21h
dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5yb3dfcG9zaXRpb24gPT0g
QVRfWlYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLnJvd19wb3NpdGlvbiA9PSBBVF9a
VikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAob2xkX21hdHJpeC52cG9zW3Zu
dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5yb3dfcG9zaXRpb24gPT0gUE9TVF9aVgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRo
XS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0ucm93X3Bvc2l0aW9uID09IFBPU1RfWlYpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb
Y2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoLmxudW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhd
LmdseXBoLmxudW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG9sZF9tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0ucm93X3Bvc2l0aW9uID09IEFU
X1pWCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5yb3dfcG9zaXRpb24gPT0gQVRfWlYp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG9sZF9tYXRyaXgudnBvc1t2bnRo
XS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0ucm93X3Bvc2l0aW9uID09IFBPU1RfWlYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLnJvd19wb3NpdGlvbiA9PSBQT1NUX1pWKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMF0uZ2x5cGgudS52YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBo
LnUudmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoLmZhY2VfaWQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bd19udGhdLmdseXBoLmZhY2VfaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9s
ZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGgucGFkZGlu
Z19wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3Zu
dGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5wYWRkaW5nX3AKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhfMF0uZ2x5cGgubGVmdF9ib3hfbGluZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5n
bHlwaC5sZWZ0X2JveF9saW5lX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGgucmlnaHRfYm94
X2xpbmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGgucmlnaHRfYm94X2xpbmVfcAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdW250aF8wXS5nbHlwaC52b2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRo
XS5nbHlwaC52b2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoLnBpeGVsX3dpZHRoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC5waXhlbF93aWR0aAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF8wXS5nbHlwaC5zbGljZS5pbWcueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGguc2xp
Y2UuaW1nLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2
bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZ2x5cGguc2xpY2UuaW1nLnkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj
aGVfdHlwZV1bd19udGhdLmdseXBoLnNsaWNlLmltZy55CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmds
eXBoLnNsaWNlLmltZy53aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGguc2xpY2Uu
aW1nLndpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nb
dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoLnNsaWNlLmltZy5oZWlnaHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnNsaWNlLmltZy5oZWlnaHQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhfMF0uZ2x5cGguc2xpY2UuY21wLmZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmds
eXBoLnNsaWNlLmNtcC5mcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLngKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bd19udGhdLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZngKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19u
dGhdLmZ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLnkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNo
ZVtjYWNoZV90eXBlXVtudGhfMF0uZnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0g
dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmZ5CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj
aGVfdHlwZV1bbnRoXzBdLmhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmhwb3MKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMF0udnBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0udnBvcworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl
X3R5cGVdW250aF8wXS53ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0ud2QKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhfMF0uaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRyaXgu
dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uaAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8w
XS5jdXJzb3JfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uY3Vyc29yX3R5cGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMF0uY3Vyc29yX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5jdXJz
b3Jfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2
bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZmcucmVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3df
bnRoXS5mZy5yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZmcuZ3JlZW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bd19udGhdLmZnLmdyZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmZnLmJsdWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj
aGVfdHlwZV1bd19udGhdLmZnLmJsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9s
ZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uYmcucmVkCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID09IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdW3dfbnRoXS5iZy5yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uYmcuZ3JlZW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmJnLmdyZWVuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmJn
LmJsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4LnZwb3Nb
dm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmJnLmJsdWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhf
MF0uYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bd19udGhdLmFjdGl2ZV9wCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bbnRoXzBdLmdseXBoX2ZsYXZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0uZ2x5cGhfZmxh
dm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvbGRfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmVuYWJsZWRfcAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250
aF0uZW5hYmxlZF9wKTsKKyAgICAgICAgICAgICAgICBpZiAoc2FtZV9wKQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgICAgICAg
ICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJISVQgKCVzKTogIHZwb3MgKCVkKSB8IGhwb3MgKCVk
KSB8IGNoYXIgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjYWNoZV90eXBlID09IE1DX0NBQ0hFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/ICJNQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogKGNhY2hlX3R5cGUgPT0gQ0hfQ0FDSEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID8gIkNIIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAoY2FjaGVfdHlwZSA9PSBGQ19DQUNIRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyAiRkMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICJOTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0udnBvcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWNfY2hhcl90b19zdHJpbmcgKHctPm1jX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5nbHlwaC51LmNoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW3dfbnRoXS5zYW1l
X3AgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlYnVnX3ApCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkX2NhY2hlX3VzZWQgPSBvbGRfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVfdXNlZFtjYWNoZV90eXBlXTsKKyAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbmV3X2NhY2hlX3VzZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91
c2VkW2NhY2hlX3R5cGVdOworICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwg
Ik1JU1MgKCVzKTogIHZwb3MgKCVkKSB8IGhwb3MgKCVkIHYuICVkKSB8IGNoYXIgKCVzIHYuICVz
KSB8IGNhY2hlX3VzZWQgKCVkIHYuICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjYWNoZV90eXBlID09IE1DX0NBQ0hFKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/ICJNQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogKGNhY2hlX3R5cGUgPT0gQ0hfQ0FDSEUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gIkNIIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAoY2FjaGVfdHlwZSA9PSBGQ19DQUNIRSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiRkMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICJOTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVt3X250aF0u
dnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXRyaXgu
dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uaHBvcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh
Y2hlX3R5cGVdW3dfbnRoXS5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWNfY2hhcl90b19zdHJpbmcgKG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMF0uZ2x5cGgudS5jaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtY19jaGFyX3RvX3N0cmluZyAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bd19udGhdLmdseXBoLnUuY2gpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2xkX2NhY2hlX3VzZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdfY2FjaGVfdXNlZCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzYW1lX3ApCisgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcuY2AgY29udGFp
bnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgICAgICAgICAgICAgICBlYXNzZXJ0IChtYXRyaXgg
JiYgbWF0cml4LT5yb3dzKTsKKyAgICAgICAgICAgICAgICBlYXNzZXJ0IChyb3cgPj0gMCAmJiBy
b3cgPCBtYXRyaXgtPm5yb3dzKTsgKi8KKyAgICAgICAgICAgICAgICBib29sIGJhcmZfY3Jhc2hf
b25lID0gKHctPmN1cnJlbnRfbWF0cml4ICYmIHctPmN1cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZh
bHNlIDogdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBib29sIGJhcmZfY3Jhc2hfdHdv
ID0gKHZudGggPj0gMCAmJiB2bnRoIDwgdy0+Y3VycmVudF9tYXRyaXgtPm5yb3dzKSA/IGZhbHNl
IDogdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICp2bnRo
X3JvdyA9IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2bnRoKTsKKyAgICAgICAgICAg
ICAgICBpbnQgeF8wID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF8wXS54OworICAgICAgICAgICAgICAgIGludCBmeF8wID0gb2xkX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5meDsKKyAgICAgICAgICAgICAgICBpbnQgeV8wID0g
b2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS55OworICAgICAg
ICAgICAgICAgIGludCBmeV8wID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF8wXS5meTsKKyAgICAgICAgICAgICAgICBpbnQgaHBvc18wID0gb2xkX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5ocG9zOworICAgICAgICAgICAgICAg
IGludCB2cG9zXzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XzBdLnZwb3M7CisgICAgICAgICAgICAgICAgaW50IHdkXzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLndkOworICAgICAgICAgICAgICAgIGludCBoXzAg
PSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmg7CisgICAg
ICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZV8wID0gb2xkX21hdHJp
eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8wXS5jdXJzb3JfdHlwZTsKKyAgICAg
ICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoXzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bbnRoXzBdLmN1cnNvcl93aWR0aDsKKyAgICAgICAgICAgICAgICAvLyAg
c3RydWN0IG1jX1JHQiBsc2xfZmdfMCA9IHsucmVkID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW250aF8wXS5mZy5yZWQsCisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdW250aF8wXS5mZy5ncmVlbiwKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj
YWNoZV90eXBlXVtudGhfMF0uZmcuYmx1ZX07CisgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JH
QiBsc2xfYmdfMCA9IHsucmVkID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF8wXS5iZy5yZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuZ3JlZW4gPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XzBdLmJnLmdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmJsdWUgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmJn
LmJsdWV9OworICAgICAgICAgICAgICAgIGJvb2wgYWN0aXZlX3BfMCA9IG9sZF9tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uYWN0aXZlX3A7CisgICAgICAgICAgICAg
ICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yXzAgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzBdLmdseXBoX2ZsYXZvcjsKKyAgICAgICAgICAgICAgICBi
b29sIGVuYWJsZWRfcF8wID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF8wXS5lbmFibGVkX3A7CisgICAgICAgICAgICAgICAgaWYgKHZwb3NfMCA9PSB2bnRoCisg
ICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvcl8wID09IE1DX0dMWVBICisgICAgICAg
ICAgICAgICAgICAgICYmIGVuYWJsZWRfcF8wCisgICAgICAgICAgICAgICAgICAgICYmIHZudGhf
cm93LT5lbmFibGVkX3ApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG1jX2VyYXNlX2N1cnNvciAodywgdy0+Y3VycmVudF9tYXRyaXgsIHZudGhfcm93LCBvbGRfbWF0
cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfMCwgeV8wLCBocG9z
XzAsIHZwb3NfMCwgZ2x5cGhfZmxhdm9yXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3Vyc29yX3R5cGVfMCwgd2RfMCk7CisgICAgICAgICAgICAgICAgICAgIG9sZF9t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMF0uZW5hYmxlZF9wID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIC0tb2xkX21hdHJpeC5jdXJzb3JzX3VzZWRbY2FjaGVf
dHlwZV07CisgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGluYWR2ZXJ0ZW50bHkgZXJhc2Vk
IGFub3RoZXIgZmFrZSBjdXJzb3IgYXQgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgSFBP
UyB0aGF0IGlzIHN0aWxsIGVuYWJsZWRfcCBpbiB0aGUgYG9sZF9tYXRyaXhgLCB0aGVuIHJlZHJh
dyBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yIChlbnVtIG1jX2NhY2hlX3R5cGUgY2Fj
aGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUg
PCBOT19DQUNIRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICArK2NhY2hlX3R5cGUpCisgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbnRo
XzEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY190cmF2ZXJzZV9jYWNoZV9w
IChvbGRfbWF0cml4LCBjYWNoZV90eXBlLCB2bnRoLCBudGhfMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrbnRoXzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeF8xID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW250aF8xXS54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmeF8xID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS5m
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV8xID0gb2xkX21hdHJpeC52cG9z
W3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS55OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmeV8xID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF8xXS5meTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaHBvc18xID0gb2xk
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS5ocG9zOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB2cG9zXzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLnZwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHdkXzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XzFdLndkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoXzEgPSBvbGRfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZV8xID0gb2xkX21hdHJp
eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8xXS5jdXJzb3JfdHlwZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoXzEgPSBvbGRfbWF0cml4LnZw
b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmN1cnNvcl93aWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZ18xID0gey5yZWQgPSBvbGRf
bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmZnLnJlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9
IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0uZmcuZ3JlZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Ymx1ZSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMV0uZmcu
Ymx1ZX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHN0cnVjdCBtY19SR0IgbHNs
X2JnXzEgPSB7LnJlZCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtu
dGhfMV0uYmcucmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5ncmVlbiA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMV0uYmcuZ3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXzFdLmJnLmJsdWV9OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYWN0aXZlX3BfMSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMV0uYWN0aXZlX3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51
bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yXzEgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb
Y2FjaGVfdHlwZV1bbnRoXzFdLmdseXBoX2ZsYXZvcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGVuYWJsZWRfcF8xID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl
X3R5cGVdW250aF8xXS5lbmFibGVkX3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBnb19wXzEgPSAoaHBvc18wID09IGhwb3NfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGVuYWJsZWRfcF8xKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWdvX3BfMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVtb3ZlX3BfMSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB3LT5j
dXJyZW50X21hdHJpeCwgdm50aF9yb3csIHhfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnhfMSwgeV8xLCBmeV8xLCBocG9zXzEsIHZwb3NfMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2RfMSwg
aF8xLCBjdXJzb3JfdHlwZV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGhfMSwgbHNsX2ZnXzEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9wXzEsIGdseXBoX2ZsYXZv
cl8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVfcF8xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHZwb3NfMCA9PSB2bnRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbmFibGVkX3Bf
MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdm50aF9yb3ctPmVuYWJsZWRfcCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVtb3ZlX3Bf
MCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcs
IHctPmN1cnJlbnRfbWF0cml4LCB2bnRoX3JvdywgeF8wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmeF8wLCB5XzAsIGZ5XzAsIGhwb3NfMCwgdnBvc18wLCB3
ZF8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoXzAsIGN1
cnNvcl90eXBlXzAsIGN1cnNvcl93aWR0aF8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsc2xfYmdfMCwgYWN0aXZlX3BfMCwgZ2x5cGhfZmxhdm9yXzAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9wXzApOwor
ICAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90
eXBlXVtudGhfMF0uZW5hYmxlZF9wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgLS1v
bGRfbWF0cml4LmN1cnNvcnNfdXNlZFtjYWNoZV90eXBlXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAvKiBJZiB3ZSBpbmFkdmVydGVudGx5IGVyYXNlZCBhbm90aGVyIGZha2UgY3Vyc29yIGF0IHRo
ZSBzYW1lCisgICAgICAgICAgICAgICAgICAgICAgSFBPUyB0aGF0IGlzIHN0aWxsIGVuYWJsZWRf
cCBpbiB0aGUgYG9sZF9tYXRyaXhgLCB0aGVuIHJlZHJhdyBpdC4gKi8KKyAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGVudW0gbWNfY2FjaGVfdHlwZSBjYWNoZV90eXBlID0gTUNfQ0FDSEU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICArK2NhY2hlX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG50aF8yID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtY190cmF2ZXJzZV9jYWNoZV9wIChvbGRfbWF0cml4
LCBjYWNoZV90eXBlLCB2bnRoLCBudGhfMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKytudGhfMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgeF8yID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh
Y2hlX3R5cGVdW250aF8yXS54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ4
XzIgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmZ4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlfMiA9IG9sZF9tYXRyaXgudnBvc1t2
bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0ueTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmeV8yID0gb2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF8yXS5meTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBocG9zXzIgPSBv
bGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmhwb3M7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdnBvc18yID0gb2xkX21hdHJpeC52cG9zW3Zu
dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS52cG9zOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHdkXzIgPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bbnRoXzJdLndkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhfMiA9IG9s
ZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uaDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGVfMiA9
IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0uY3Vyc29yX3R5
cGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoXzIgPSBv
bGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmN1cnNvcl93aWR0
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2ZnXzIg
PSB7LnJlZCA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhfMl0u
ZmcucmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZ3JlZW4gPSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b
bnRoXzJdLmZnLmdyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuYmx1ZSA9IG9sZF9tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhfMl0uZmcuYmx1ZX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAgc3RydWN0IG1jX1JHQiBsc2xfYmdfMiA9IHsucmVkID0gb2xkX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5iZy5yZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSBvbGRfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmJnLmdyZWVuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUg
PSBvbGRfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXzJdLmJnLmJsdWV9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3RpdmVfcF8yID0gb2xkX21h
dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5hY3RpdmVfcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvcl8yID0g
b2xkX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5nbHlwaF9mbGF2
b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGVuYWJsZWRfcF8yID0gb2xk
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF8yXS5lbmFibGVkX3A7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGdvX3BfMiA9IChocG9zXzAgPT0gaHBv
c18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmeF8w
IDw9IGZ4XzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IGZ4XzAgKyB3ZF8wID4gZnhfMiArIHdkXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGVuYWJsZWRfcF8yKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghZ29fcF8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVtb3ZlX3BfMiA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQg
KHcsIHctPmN1cnJlbnRfbWF0cml4LCB2bnRoX3JvdywgeF8yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ4XzIsIHlfMiwgZnlfMiwgaHBvc18y
LCB2cG9zXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2RfMiwgaF8yLCBjdXJzb3JfdHlwZV8yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aF8yLCBsc2xfZmdfMiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVf
cF8yLCBnbHlwaF9mbGF2b3JfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZW1vdmVfcF8yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIH0KKyAgaWYgKHVwZGF0aW5nX2ZyYW1l
X3ApCisgICAgdXBkYXRlX2VuZCAoZik7Cit9CisKK3ZvaWQKK21jX3VwZGF0ZV93aW5kb3dfZHJ5
cnVuIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3AsIHN0cnVjdCBtY19lc3NlbnRpYWxz
IGVzc2VudGlhbHMpCit7CisgIGlmICghQlVGRkVSUCAody0+Y29udGVudHMpKQorICAgIHJldHVy
bjsKKworICBpZiAody0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtNQ19DQUNIRV0gPT0gMAorICAg
ICAgJiYgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtDSF9DQUNIRV0gPT0gMAorICAgICAgJiYg
dy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtGQ19DQUNIRV0gPT0gMAorICAgICAgJiYgTklMUCAo
QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19jb25mKSkKKyAgICAgICYmIE5JTFAgKEJW
QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAmJiBOSUxQIChC
VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2libGUpKSkKKyAgICByZXR1cm47CisK
KyAgLy8gY2xvY2tfdCBjbG9ja19zdGFydCA9IGNsb2NrKCk7CisKKyAgYm9vbCBkcmF3X3AgPSBm
YWxzZTsKKworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpzYXZlZF9kZXNpcmVkID0gbWNfc2F2ZV9n
bHlwaF9tYXRyaXggKHctPmRlc2lyZWRfbWF0cml4KTsKKyAgc3RydWN0IGdseXBoX21hdHJpeCAq
c2F2ZWRfY3VycmVudCA9IG1jX3NhdmVfZ2x5cGhfbWF0cml4ICh3LT5jdXJyZW50X21hdHJpeCk7
CisKKyAgc3RydWN0IG1jX21hdHJpeCBvbGRfbWF0cml4ID0gbWNfc2F2ZV9jYWNoZV9tYXRyaXgg
KHctPm1jX21hdHJpeCk7CisKKyAgbWNfcmVzZXRfY2FjaGUgKHcpOworCisgIHN0cnVjdCBnbHlw
aF9tYXRyaXggKmN1cnNvcl9tYXRyaXggPSBOVUxMOworCisgIHN0cnVjdCBnbHlwaF9tYXRyaXgg
KmRlc2lyZWRfbWF0cml4ID0gdy0+ZGVzaXJlZF9tYXRyaXg7CisgIGJvb2wgcGF1c2VkX3A7Cisg
IGludCBwcmVlbXB0X2NvdW50ID0gYmF1ZF9yYXRlIC8gMjQwMCArIDE7CisKKyNpZmRlZiBHTFlQ
SF9ERUJVRworICAvKiBDaGVjayB0aGF0IFcncyBmcmFtZSBkb2Vzbid0IGhhdmUgZ2x5cGggbWF0
cmljZXMuICovCisgIGVhc3NlcnQgKEZSQU1FX1dJTkRPV19QIChYRlJBTUUgKFdJTkRPV19GUkFN
RSAodykpKSk7CisjZW5kaWYKKworICAvKiBDaGVjayBwZW5kaW5nIGlucHV0IHRoZSBmaXJzdCB0
aW1lIHNvIHRoYXQgd2UgY2FuIHF1aWNrbHkgcmV0dXJuLiAqLworICBpZiAoIWZvcmNlX3ApCisg
ICAgZGV0ZWN0X2lucHV0X3BlbmRpbmdfaWdub3JlX3NxdWVlemFibGVzICgpOworCisgIC8qIElm
IGZvcmNlZCB0byBjb21wbGV0ZSB0aGUgdXBkYXRlLCBvciBpZiBubyBpbnB1dCBpcyBwZW5kaW5n
LCBkbyB0aGUgdXBkYXRlLiAqLworICBpZiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVuZGluZyB8fCAh
TklMUCAoZG9fbW91c2VfdHJhY2tpbmcpKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cg
KmhlYWRlcl9saW5lX3JvdzsKKyAgICAgIGJvb2wgY2hhbmdlZF9wID0gMDsKKyAgICAgIGJvb2wg
bW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wID0gMDsKKyAgICAgIGludCBuX3VwZGF0ZWQgPSAwOwor
ICAgICAgLy8gIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlICpyaWYgPSBGUkFNRV9SSUYgKFhG
UkFNRSAoV0lORE9XX0ZSQU1FICh3KSkpOworICAgICAgLy8gIHJpZi0+dXBkYXRlX3dpbmRvd19i
ZWdpbl9ob29rICh3KTsKKyAgICAgIGludCB5YiA9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KTsK
KyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKGRlc2lyZWRfbWF0cml4
LCAwKTsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKmVuZCA9IE1BVFJJWF9NT0RFX0xJTkVfUk9X
IChkZXNpcmVkX21hdHJpeCk7CisKKyAgICAgIC8qIFRha2Ugbm90ZSBvZiB0aGUgaGVhZGVyIGxp
bmUsIGlmIHRoZXJlIGlzIG9uZS4gIFdlIHdpbGwKKyAgICAgICAgIHVwZGF0ZSBpdCBiZWxvdywg
YWZ0ZXIgdXBkYXRpbmcgYWxsIG9mIHRoZSB3aW5kb3cncyBsaW5lcy4gKi8KKyAgICAgIGlmIChy
b3ctPm1vZGVfbGluZV9wKQorICAgICAgICB7CisgICAgICAgICAgaGVhZGVyX2xpbmVfcm93ID0g
cm93OworICAgICAgICAgICsrcm93OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICBoZWFkZXJfbGluZV9yb3cgPSBOVUxMOworCisgICAgICAvKiBVcGRhdGUgdGhlIG1vZGUgbGlu
ZSwgaWYgbmVjZXNzYXJ5LiAqLworICAgICAgc3RydWN0IGdseXBoX3JvdyAqbW9kZV9saW5lX3Jv
dyA9IE1BVFJJWF9NT0RFX0xJTkVfUk9XIChkZXNpcmVkX21hdHJpeCk7CisgICAgICBpZiAobW9k
ZV9saW5lX3Jvdy0+bW9kZV9saW5lX3AgJiYgbW9kZV9saW5lX3Jvdy0+ZW5hYmxlZF9wKQorICAg
ICAgICB7CisgICAgICAgICAgbW9kZV9saW5lX3Jvdy0+eSA9IHliICsgV0lORE9XX1NDUk9MTF9C
QVJfQVJFQV9IRUlHSFQgKHcpOworICAgICAgICAgIHVwZGF0ZV93aW5kb3dfbGluZSAodywgTUFU
UklYX1JPV19WUE9TIChtb2RlX2xpbmVfcm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkX21hdHJpeCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wKTsKKyAgICAgICAgfQorCisg
ICAgICAvKiBGaW5kIGZpcnN0IGVuYWJsZWQgcm93LiAgT3B0aW1pemF0aW9ucyBpbiByZWRpc3Bs
YXlfaW50ZXJuYWwKKyAgICAgICAgIG1heSBsZWFkIHRvIGFuIHVwZGF0ZSB3aXRoIG9ubHkgb25l
IHJvdyBlbmFibGVkLiAgVGhlcmUgbWF5CisgICAgICAgICBiZSBhbHNvIGNvbXBsZXRlbHkgZW1w
dHkgbWF0cmljZXMuICovCisgICAgICB3aGlsZSAocm93IDwgZW5kICYmICFyb3ctPmVuYWJsZWRf
cCkKKyAgICAgICAgKytyb3c7CisKKyAgICAgIC8qIFRyeSByZXVzaW5nIHBhcnQgb2YgdGhlIGRp
c3BsYXkgYnkgY29weWluZy4gKi8KKyAgICAgIGlmIChyb3cgPCBlbmQgJiYgIXctPmRlc2lyZWRf
bWF0cml4LT5ub19zY3JvbGxpbmdfcCkKKyAgICAgICAgeworICAgICAgICAgIGludCByYyA9IG1j
X3Njcm9sbGluZ193aW5kb3cgKHcsIGhlYWRlcl9saW5lX3JvdyAhPSBOVUxMKTsKKyAgICAgICAg
ICBpZiAocmMgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBBbGwgcm93cyB3
ZXJlIGZvdW5kIHRvIGJlIGVxdWFsLiAqLworICAgICAgICAgICAgICBwYXVzZWRfcCA9IDA7Cisg
ICAgICAgICAgICAgIGdvdG8gc2V0X2N1cnNvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKHJjID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdl
J3ZlIHNjcm9sbGVkIHRoZSBkaXNwbGF5LiAqLworICAgICAgICAgICAgICAgIGZvcmNlX3AgPSAx
OworICAgICAgICAgICAgICAgIGNoYW5nZWRfcCA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgLyogUHJvY2VzcyB0aGUgY3Vyc29yIHJvdyBhdCB0aGUgb3V0c2V0IGlmIGl0
IGlzIHdpdGhpbiBgZGVzaXJlZF9tYXRyaXhgLgorICAgICAgV2hlbiBwcm9jZXNzaW5nIGFsbCBv
dGhlciByb3dzLCB3ZSB3aWxsIHF1ZXJ5IHRoZSBgdy0+Y3VycmVudF9tYXRyaXhgIGZvciBkYXRh
CisgICAgICByZWxhdGluZyB0byB0aGUgY3Vyc29yIHJvdy4gIGBtYWtlX2N1cnJlbnRgICh3aXRo
aW4gYHVwZGF0ZV93aW5kb3dfbGluZScpCisgICAgICB1cGRhdGVzIHRoZSBgdy0+Y3VycmVudF9t
YXRyaXhgIGZvciB0aGUgYXBwbGljYWJsZSByb3cuICBJbiBkb2luZyBzbywgaG93ZXZlciwKKyAg
ICAgIHRoZSBhcHBsaWNhYmxlIHJvdyBpbiB0aGUgZGVzaXJlZCBtYXRyaXggaXMgYWx0ZXJlZCBz
dWNoIHRoYXQgd2UgY2FuIG5vIGxvbmdlcgorICAgICAgcmVseSB1cG9uIHRoZSBhY2N1cmFjeSBv
ZiBgUk9XLT51c2VkW1RFWFRfQVJFQV1gLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IG5vdyByZWx5Cisg
ICAgICBleGNsdXNpdmVseSB1cG9uIGB3LT5jdXJyZW50X21hdHJpeCcgZm9yIGN1cnNvciByb3cg
YmFzZWQgZGVjaXNpb25zLiAqLworICAgICAgZm9yIChzdHJ1Y3QgZ2x5cGhfcm93ICptY19yb3cg
PSByb3c7CisgICAgICAgICAgIG1jX3JvdyA8IGVuZCAmJiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVu
ZGluZyk7CisgICAgICAgICAgICsrbWNfcm93KQorICAgICAgICB7CisgICAgICAgICAgaW50IHZw
b3MgPSBNQVRSSVhfUk9XX1ZQT1MgKG1jX3Jvdywgdy0+ZGVzaXJlZF9tYXRyaXgpOworICAgICAg
ICAgIGlmIChtY19yb3ctPmVuYWJsZWRfcAorICAgICAgICAgICAgICAmJiB2cG9zID09IHctPmN1
cnNvci52cG9zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjdXJzb3JfbWF0cml4ID0g
dy0+ZGVzaXJlZF9tYXRyaXg7CisgICAgICAgICAgICAgIGlmICghZm9yY2VfcCAmJiArK25fdXBk
YXRlZCAlIHByZWVtcHRfY291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICBkZXRlY3RfaW5wdXRf
cGVuZGluZ19pZ25vcmVfc3F1ZWV6YWJsZXMgKCk7CisgICAgICAgICAgICAgIGNoYW5nZWRfcCB8
PSBtY191cGRhdGVfd2luZG93X2xpbmUgKHcsIHZwb3MsICZtb3VzZV9mYWNlX292ZXJ3cml0dGVu
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnNvcl9tYXRyaXgsIGVzc2VudGlhbHMsIGRyYXdfcCk7CisgICAgICAgICAgICAgIGlmIChNQVRS
SVhfUk9XX0JPVFRPTV9ZIChyb3cpID49IHliKQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSB2cG9zICsgMTsgaSA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cyAtIDE7ICsraSkKKyAgICAg
ICAgICAgICAgICAgIFNFVF9NQVRSSVhfUk9XX0VOQUJMRURfUCAody0+Y3VycmVudF9tYXRyaXgs
IGksIGZhbHNlKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIGN1cnNvcl9tYXRyaXggPSB3LT5jdXJyZW50X21hdHJpeDsKKyAgICAgIC8qIFVw
ZGF0ZSB0aGUgcmVzdCBvZiB0aGUgbGluZXMuICovCisgICAgICBmb3IgKDsgcm93IDwgZW5kICYm
IChmb3JjZV9wIHx8ICFpbnB1dF9wZW5kaW5nKTsgKytyb3cpCisgICAgICAgIC8qIHNjcm9sbGlu
Z193aW5kb3cgcmVzZXRzIHRoZSBlbmFibGVkX3AgZmxhZyBvZiB0aGUgcm93cyBpdCByZXVzZXMg
ZnJvbQorICAgICAgICBjdXJyZW50X21hdHJpeC4gKi8KKyAgICAgICAgaWYgKHJvdy0+ZW5hYmxl
ZF9wKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9T
IChyb3csIHctPmRlc2lyZWRfbWF0cml4KTsKKyAgICAgICAgICAgIC8qIElmIHRoZSBgY3Vyc29y
X3Jvd2AgaXMgd2l0aGluIHRoZSBgZGVzaXJlZF9tYXRyaXhgLCB0aGVuIGl0IHdhcworICAgICAg
ICAgICAgcHJvY2Vzc2VkIGhlcmVpbmFib3ZlIGFuZCBzaG91bGQgYmUgc2tpcHBlZCBhdCB0aGlz
IHRpbWUuICovCisgICAgICAgICAgICBpZiAodnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAvKiBXZSds
bCBoYXZlIHRvIHBsYXkgYSBsaXR0bGUgYml0IHdpdGggd2hlbiB0bworICAgICAgICAgICAgICAg
ZGV0ZWN0X2lucHV0X3BlbmRpbmcuICBJZiBpdCdzIGRvbmUgdG9vIG9mdGVuLAorICAgICAgICAg
ICAgICAgc2Nyb2xsaW5nIGxhcmdlIHdpbmRvd3Mgd2l0aCByZXBlYXRlZCBzY3JvbGwtdXAKKyAg
ICAgICAgICAgICAgIGNvbW1hbmRzIHdpbGwgdG9vIHF1aWNrbHkgcGF1c2UgcmVkaXNwbGF5LiAq
LworICAgICAgICAgICAgaWYgKCFmb3JjZV9wICYmICsrbl91cGRhdGVkICUgcHJlZW1wdF9jb3Vu
dCA9PSAwKQorICAgICAgICAgICAgICBkZXRlY3RfaW5wdXRfcGVuZGluZ19pZ25vcmVfc3F1ZWV6
YWJsZXMgKCk7CisgICAgICAgICAgICBjaGFuZ2VkX3AgfD0gbWNfdXBkYXRlX3dpbmRvd19saW5l
ICh3LCB2cG9zLCAmbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywg
ZHJhd19wKTsKKyAgICAgICAgICAgIC8qIE1hcmsgYWxsIHJvd3MgYmVsb3cgdGhlIGxhc3Qgdmlz
aWJsZSBvbmUgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgIG1hdHJpeCBhcyBpbnZhbGlk
LiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZgorICAgICAgICAgICAgICAgdmFyaWFibGUg
bGluZSBoZWlnaHRzLiAgQ29uc2lkZXIgdGhlIGNhc2Ugb2YgdGhyZWUKKyAgICAgICAgICAgICAg
IHN1Y2Nlc3NpdmUgcmVkaXNwbGF5cywgd2hlcmUgdGhlIGZpcnN0IGRpc3BsYXlzIDUKKyAgICAg
ICAgICAgICAgIGxpbmVzLCB0aGUgc2Vjb25kIDMgbGluZXMsIGFuZCB0aGUgdGhpcmQgNSBsaW5l
cyBhZ2Fpbi4KKyAgICAgICAgICAgICAgIElmIHRoZSBzZWNvbmQgcmVkaXNwbGF5IHdvdWxkbid0
IG1hcmsgcm93cyBpbiB0aGUKKyAgICAgICAgICAgICAgIGN1cnJlbnQgbWF0cml4IGludmFsaWQs
IHRoZSB0aGlyZCByZWRpc3BsYXkgbWlnaHQgYmUKKyAgICAgICAgICAgICAgIHRlbXB0ZWQgdG8g
b3B0aW1pemUgcmVkaXNwbGF5IGJhc2VkIG9uIGxpbmVzIGRpc3BsYXllZAorICAgICAgICAgICAg
ICAgaW4gdGhlIGZpcnN0IHJlZGlzcGxheS4gKi8KKyAgICAgICAgICAgIGlmIChNQVRSSVhfUk9X
X0JPVFRPTV9ZIChyb3cpID49IHliKQorICAgICAgICAgICAgICBmb3IgKGkgPSB2cG9zICsgMTsg
aSA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cyAtIDE7ICsraSkKKyAgICAgICAgICAgICAgICBT
RVRfTUFUUklYX1JPV19FTkFCTEVEX1AgKHctPmN1cnJlbnRfbWF0cml4LCBpLCBmYWxzZSk7Cisg
ICAgICAgICAgfQorICAgICAgLyogV2FzIGRpc3BsYXkgcHJlZW1wdGVkPyAqLworICAgICAgcGF1
c2VkX3AgPSByb3cgPCBlbmQ7CisgICAgICBzZXRfY3Vyc29yOgorICAgICAgLyogSWYgd2UganVt
cGVkIGhlcmUgZnJvbSBgc2V0X2N1cnNvcmAsIHRoZW4gc2V0IHRoZSBgY3Vyc29yX21hdHJpeGAu
ICovCisgICAgICBpZiAoY3Vyc29yX21hdHJpeCA9PSBOVUxMKQorICAgICAgICBjdXJzb3JfbWF0
cml4ID0gdy0+Y3VycmVudF9tYXRyaXg7CisgICAgICAvKiBSZXNldCBgcm93YCB0byAwIHNvIHRo
YXQgZmFrZSBjdXJzb3JzIGNhbiBiZSBkcmF3biBvbiByb3dzIHByZWNlZGluZyB0aGUKKyAgICAg
IGZpcnN0IGByb3ctPmVuYWJsZWRfcGAuICBKdXN0IHByaW9yIHRvIHRoZSBjYWxsIHRvIGBzY3Jv
bGxpbmdfd2luZG93JyBhYm92ZSwKKyAgICAgIGByb3dgIHdhcyBhZHZhbmNlZCB0byB0aGUgZmly
c3QgYHJvdy0+ZW5hYmxlZF9wYC4gKi8KKyAgICAgIGZvciAoc3RydWN0IGdseXBoX3JvdyAqZGVz
aXJlZF9yb3cgPSBNQVRSSVhfUk9XICh3LT5kZXNpcmVkX21hdHJpeCwgMCk7CisgICAgICAgICAg
IGRlc2lyZWRfcm93IDwgZW5kCisgICAgICAgICAgICYmIChmb3JjZV9wIHx8ICFpbnB1dF9wZW5k
aW5nKQorICAgICAgICAgICAvKiBXMzIgRW1hY3MgY3Jhc2hlcyBvbiBzdGFydHVwIHdpdGhvdXQg
YSBCVUZGRVJQIGNoZWNrLiAqLworICAgICAgICAgICAmJiBCVUZGRVJQICh3LT5jb250ZW50cykK
KyAgICAgICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2Nv
bmYpKQorICAgICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz
KSwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAo
dy0+Y29udGVudHMpLCBmY192aXNpYmxlKSkpOworICAgICAgICAgICArK2Rlc2lyZWRfcm93KQor
ICAgICAgICB7CisgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGRlc2lyZWRf
cm93LCB3LT5kZXNpcmVkX21hdHJpeCk7CisgICAgICAgICAgaWYgKGRlc2lyZWRfcm93LT5lbmFi
bGVkX3ApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93
ICpjdXJyZW50X3JvdyA9IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAg
ICAgICAgICBlbnVtIG1jX3Jvd19wb3NpdGlvbiByb3dfcG9zaXRpb24gPSBtY19yb3dfcG9zaXRp
b24gKHcsIGN1cnJlbnRfcm93LCBjdXJyZW50X3JvdywgdnBvcyk7CisgICAgICAgICAgaWYgKGN1
cnJlbnRfcm93LT5lbmFibGVkX3ApCisgICAgICAgICAgICBtY19kcmF3X3JvdyAodywgdy0+Y3Vy
cmVudF9tYXRyaXgsIGN1cnJlbnRfcm93LCBjdXJyZW50X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9yb3ctPngsIGN1cnJlbnRfcm93LT51
c2VkW1RFWFRfQVJFQV0sIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21h
dHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBkcmF3X3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgU0VUX0NVUlNPUl9PTkUpOworICAgICAgICB9CisKKyAgICAgIG1jX3Jlc3RvcmVf
Z2x5cGhfbWF0cml4IChzYXZlZF9kZXNpcmVkLCB3LT5kZXNpcmVkX21hdHJpeCk7CisgICAgICBt
Y19yZXN0b3JlX2dseXBoX21hdHJpeCAoc2F2ZWRfY3VycmVudCwgdy0+Y3VycmVudF9tYXRyaXgp
OworCisgICAgICBtY191cGRhdGVfd2luZG93X2VyYXNlICh3LCBvbGRfbWF0cml4KTsKKworICAg
ICAgbWNfeGZyZWVfY2FjaGVfbWF0cml4ICh3LCAmb2xkX21hdHJpeCk7CisKKyAgICB9CisgIC8v
IGNsb2NrX3QgY2xvY2tfZW5kID0gY2xvY2soKTsKKyAgLy8gZG91YmxlIGNwdV90aW1lX3VzZWQg
PSAoKGRvdWJsZSkgKGNsb2NrX2VuZCAtIGNsb2NrX3N0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsK
KyAgLy8gZnByaW50ZiAoc3RkZXJyLCAibWNfc2Nyb2xsaW5nX3dpbmRvdyAoJXMpOiAgVElNRSAo
JWYpXG4iLCBtY193aW5kb3cgKHcpLCBjcHVfdGltZV91c2VkKTsKK30KKworLyogZW5kIE1VTFRJ
UExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIC8qIFN0cnVjdHVy
ZSB0byBwYXNzIGRpbWVuc2lvbnMgYXJvdW5kLiAgVXNlZCBmb3IgY2hhcmFjdGVyIGJvdW5kaW5n
CiAgICBib3hlcywgZ2x5cGggbWF0cml4IGRpbWVuc2lvbnMgYW5kIGFsaWtlLiAgKi8KIApAQCAt
MjI0MSw2ICs0MDIzLDE2IEBAIGZyZWVfd2luZG93X21hdHJpY2VzIChzdHJ1Y3Qgd2luZG93ICp3
KQogCSAgZnJlZV9nbHlwaF9tYXRyaXggKHctPmN1cnJlbnRfbWF0cml4KTsKIAkgIGZyZWVfZ2x5
cGhfbWF0cml4ICh3LT5kZXNpcmVkX21hdHJpeCk7CiAJICB3LT5jdXJyZW50X21hdHJpeCA9IHct
PmRlc2lyZWRfbWF0cml4ID0gTlVMTDsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q
IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBtY194ZnJlZV9jYWNoZV9tYXRyaXggKHcsICZ3LT5t
Y19tYXRyaXgpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJfQogCiAgICAgICAv
KiBOZXh0IHdpbmRvdyBvbiBzYW1lIGxldmVsLiAgKi8KQEAgLTMzODcsNiArNTE3OSwyNiBAQCBj
aGVja19jdXJyZW50X21hdHJpeF9mbGFncyAoc3RydWN0IHdpbmRvdyAqdykKIHN0YXRpYyBib29s
CiB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3ApCiB7CisKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgaWYg
KG1jX3N0ZGVycl9wKQorICAgIGZwcmludGYgKHN0ZGVyciwgInVwZGF0ZV93aW5kb3cgKCVzKVxu
IiwgbWNfd2luZG93ICh3KSk7CisKKyAgc3RydWN0IG1jX2Vzc2VudGlhbHMgZXNzZW50aWFsczsK
KyAgbWNfc2V0X2Vzc2VudGlhbHMgKHcsICZlc3NlbnRpYWxzKTsKKworICBtY191cGRhdGVfd2lu
ZG93X2RyeXJ1biAodywgZm9yY2VfcCwgZXNzZW50aWFscyk7CisKKyAgc3RydWN0IGdseXBoX21h
dHJpeCAqY3Vyc29yX21hdHJpeCA9IE5VTEw7CisKKyAgYm9vbCBkcmF3X3AgPSB0cnVlOworCisv
KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmRlc2ly
ZWRfbWF0cml4ID0gdy0+ZGVzaXJlZF9tYXRyaXg7CiAgIGJvb2wgcGF1c2VkX3A7CiAgIGludCBw
cmVlbXB0X2NvdW50ID0gY2xpcF90b19ib3VuZHMgKDEsIGJhdWRfcmF0ZSAvIDI0MDAgKyAxLCBJ
TlRfTUFYKTsKQEAgLTM0NjQsNiArNTI3Niw0NyBAQCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2lu
ZG93ICp3LCBib29sIGZvcmNlX3ApCiAJICAgIH0KIAl9CiAKKworLyogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogUHJvY2VzcyB0aGUgY3Vyc29y
IHJvdyBhdCB0aGUgb3V0c2V0IGlmIGl0IGlzIHdpdGhpbiBgZGVzaXJlZF9tYXRyaXhgLgorICBX
aGVuIHByb2Nlc3NpbmcgYWxsIG90aGVyIHJvd3MsIHdlIHdpbGwgcXVlcnkgdGhlIGB3LT5jdXJy
ZW50X21hdHJpeGAgZm9yIGRhdGEKKyAgcmVsYXRpbmcgdG8gdGhlIGN1cnNvciByb3cuICBgbWFr
ZV9jdXJyZW50YCAod2l0aGluIGB1cGRhdGVfd2luZG93X2xpbmUnKQorICB1cGRhdGVzIHRoZSBg
dy0+Y3VycmVudF9tYXRyaXhgIGZvciB0aGUgYXBwbGljYWJsZSByb3cuICBJbiBkb2luZyBzbywg
aG93ZXZlciwKKyAgdGhlIGFwcGxpY2FibGUgcm93IGluIHRoZSBkZXNpcmVkIG1hdHJpeCBpcyBh
bHRlcmVkIHN1Y2ggdGhhdCB3ZSBjYW4gbm8gbG9uZ2VyCisgIHJlbHkgdXBvbiB0aGUgYWNjdXJh
Y3kgb2YgYFJPVy0+dXNlZFtURVhUX0FSRUFdYC4gIFRoZXJlZm9yZSwgd2UgbXVzdCBub3cgcmVs
eQorICBleGNsdXNpdmVseSB1cG9uIGB3LT5jdXJyZW50X21hdHJpeCcgZm9yIGN1cnNvciByb3cg
YmFzZWQgZGVjaXNpb25zLiAqLworICBmb3IgKHN0cnVjdCBnbHlwaF9yb3cgKm1jX3JvdyA9IHJv
dzsKKyAgICAgICBtY19yb3cgPCBlbmQgJiYgKGZvcmNlX3AgfHwgIWlucHV0X3BlbmRpbmcpOwor
ICAgICAgICsrbWNfcm93KQorICAgIHsKKyAgICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9T
IChtY19yb3csIGRlc2lyZWRfbWF0cml4KTsKKyAgICAgIGlmIChtY19yb3ctPmVuYWJsZWRfcAor
ICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MpCisgICAgICAgIHsKKyAgICAgICAg
ICBjdXJzb3JfbWF0cml4ID0gZGVzaXJlZF9tYXRyaXg7CisgICAgICAgICAgaWYgKCFmb3JjZV9w
ICYmICsrbl91cGRhdGVkICUgcHJlZW1wdF9jb3VudCA9PSAwKQorICAgICAgICAgICAgZGV0ZWN0
X2lucHV0X3BlbmRpbmdfaWdub3JlX3NxdWVlemFibGVzICgpOworICAgICAgICAgIGNoYW5nZWRf
cCB8PSAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAo
IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg
Y3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgISBOSUxQIChCVkFS
IChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2libGUpKSkpCisgICAgICAgICAgICAgICAg
ICAgICAgID8gbWNfdXBkYXRlX3dpbmRvd19saW5lICh3LCB2cG9zLCAmbW91c2VfZmFjZV9vdmVy
d3JpdHRlbl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3Vyc29yX21hdHJpeCwgZXNzZW50aWFscywgZHJhd19wKQorICAgICAgICAgICAgICAgICAg
ICAgICA6IHVwZGF0ZV93aW5kb3dfbGluZSAodywgdnBvcywgJm1vdXNlX2ZhY2Vfb3ZlcndyaXR0
ZW5fcCk7CisgICAgICAgICAgaWYgKE1BVFJJWF9ST1dfQk9UVE9NX1kgKHJvdykgPj0geWIpCisg
ICAgICAgICAgICBmb3IgKGludCBpID0gdnBvcyArIDE7IGkgPCB3LT5jdXJyZW50X21hdHJpeC0+
bnJvd3MgLSAxOyArK2kpCisgICAgICAgICAgICAgIFNFVF9NQVRSSVhfUk9XX0VOQUJMRURfUCAo
dy0+Y3VycmVudF9tYXRyaXgsIGksIGZhbHNlKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICBjdXJzb3JfbWF0cml4ID0gdy0+Y3VycmVudF9tYXRyaXg7CisKKy8qICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIC8qIFVwZGF0ZSB0aGUgcmVzdCBvZiB0aGUg
bGluZXMuICAqLwogICAgICAgZm9yICg7IHJvdyA8IGVuZCAmJiAoZm9yY2VfcCB8fCAhaW5wdXRf
cGVuZGluZyk7ICsrcm93KQogCS8qIHNjcm9sbGluZ193aW5kb3cgcmVzZXRzIHRoZSBlbmFibGVk
X3AgZmxhZyBvZiB0aGUgcm93cyBpdApAQCAtMzQ3MSw2ICs1MzI0LDE5IEBAIHVwZGF0ZV93aW5k
b3cgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZm9yY2VfcCkKIAlpZiAocm93LT5lbmFibGVkX3Ap
CiAJICB7CiAJICAgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIGRlc2lyZWRfbWF0
cml4KTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg
Ki8KKworICAgICAgICAgIC8qIElmIHRoZSBgY3Vyc29yX3Jvd2AgaXMgd2l0aGluIHRoZSBgZGVz
aXJlZF9tYXRyaXhgLCB0aGVuIGl0IHdhcworICAgICAgICAgIHByb2Nlc3NlZCBoZXJlaW5hYm92
ZSBhbmQgc2hvdWxkIGJlIHNraXBwZWQgYXQgdGhpcyB0aW1lLiAqLworICAgICAgICAgIGlmICh2
cG9zID09IHctPmN1cnNvci52cG9zKQorICAgICAgICAgIGNvbnRpbnVlOworCisvKiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KKworCiAJICAgIGludCBpOwogCiAJICAgIC8qIFdlJ2xsIGhhdmUgdG8g
cGxheSBhIGxpdHRsZSBiaXQgd2l0aCB3aGVuIHRvCkBAIC0zNDc5LDggKzUzNDUsMjEgQEAgdXBk
YXRlX3dpbmRvdyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBmb3JjZV9wKQogCSAgICAgICBjb21t
YW5kcyB3aWxsIHRvbyBxdWlja2x5IHBhdXNlIHJlZGlzcGxheS4gICovCiAJICAgIGlmICghZm9y
Y2VfcCAmJiArK25fdXBkYXRlZCAlIHByZWVtcHRfY291bnQgPT0gMCkKIAkgICAgICBkZXRlY3Rf
aW5wdXRfcGVuZGluZ19pZ25vcmVfc3F1ZWV6YWJsZXMgKCk7Ci0JICAgIGNoYW5nZWRfcCB8PSB1
cGRhdGVfd2luZG93X2xpbmUgKHcsIHZwb3MsCi0JCQkJCSAgICAgJm1vdXNlX2ZhY2Vfb3Zlcndy
aXR0ZW5fcCk7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJT
T1JTICovCisKKyAgICAgICAgICBjaGFuZ2VkX3AgfD0gKEJVRkZFUlAgKHctPmNvbnRlbnRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250
ZW50cyksIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFOSUxQIChC
VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8ICEgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192
aXNpYmxlKSkpKQorICAgICAgICAgICAgICAgICAgICAgICA/IG1jX3VwZGF0ZV93aW5kb3dfbGlu
ZSAodywgdnBvcywgJm1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl9tYXRyaXgsIGVzc2VudGlhbHMs
IGRyYXdfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgOiB1cGRhdGVfd2luZG93X2xpbmUgKHcs
IHZwb3MsICZtb3VzZV9mYWNlX292ZXJ3cml0dGVuX3ApOworCisvKiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogKi8KKwogCiAJICAgIC8qIE1hcmsgYWxsIHJvd3MgYmVsb3cgdGhlIGxhc3QgdmlzaWJsZSBv
bmUgaW4gdGhlIGN1cnJlbnQKIAkgICAgICAgbWF0cml4IGFzIGludmFsaWQuICBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIG9mCkBAIC0zNTAxLDYgKzUzODAsNDEgQEAgdXBkYXRlX3dpbmRvdyAo
c3RydWN0IHdpbmRvdyAqdywgYm9vbCBmb3JjZV9wKQogCiAgICAgc2V0X2N1cnNvcjoKIAorCisv
KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAvKiBJ
ZiB3ZSBqdW1wZWQgaGVyZSBmcm9tIGBzZXRfY3Vyc29yYCwgdGhlbiBzZXQgdGhlIGBjdXJzb3Jf
bWF0cml4YC4gKi8KKyAgaWYgKGN1cnNvcl9tYXRyaXggPT0gTlVMTCkKKyAgICBjdXJzb3JfbWF0
cml4ID0gdy0+Y3VycmVudF9tYXRyaXg7CisKKyAgLyogUmVzZXQgYHJvd2AgdG8gMCBzbyB0aGF0
IGZha2UgY3Vyc29ycyBjYW4gYmUgZHJhd24gb24gcm93cyBwcmVjZWRpbmcgdGhlCisgIGZpcnN0
IGByb3ctPmVuYWJsZWRfcGAuICBKdXN0IHByaW9yIHRvIHRoZSBjYWxsIHRvIGBzY3JvbGxpbmdf
d2luZG93JyBhYm92ZSwKKyAgYHJvd2Agd2FzIGFkdmFuY2VkIHRvIHRoZSBmaXJzdCBgcm93LT5l
bmFibGVkX3BgLiAqLworICBmb3IgKHN0cnVjdCBnbHlwaF9yb3cgKmRlc2lyZWRfcm93ID0gTUFU
UklYX1JPVyAoZGVzaXJlZF9tYXRyaXgsIDApOworICAgICAgIGRlc2lyZWRfcm93IDwgZW5kCisg
ICAgICAgJiYgKGZvcmNlX3AgfHwgIWlucHV0X3BlbmRpbmcpCisgICAgICAgLyogVzMyIEVtYWNz
IGNyYXNoZXMgb24gc3RhcnR1cCB3aXRob3V0IGEgQlVGRkVSUCBjaGVjay4gKi8KKyAgICAgICAm
JiBCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIg
KHctPmNvbnRlbnRzKSwgbWNfY29uZikpCisgICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVG
RkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICAgICB8fCAhTklMUCAoQlZB
UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkpOworICAgICAgICsrZGVzaXJl
ZF9yb3cpCisgICAgeworICAgICAgaW50IHZwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGRlc2lyZWRf
cm93LCBkZXNpcmVkX21hdHJpeCk7CisgICAgICBpZiAoZGVzaXJlZF9yb3ctPmVuYWJsZWRfcCkK
KyAgICAgICAgY29udGludWU7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJyZW50X3JvdyA9
IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgICAgIGVudW0gbWNfcm93
X3Bvc2l0aW9uIHJvd19wb3NpdGlvbiA9IG1jX3Jvd19wb3NpdGlvbiAodywgY3VycmVudF9yb3cs
IGN1cnJlbnRfcm93LCB2cG9zKTsKKyAgICAgIGlmIChjdXJyZW50X3Jvdy0+ZW5hYmxlZF9wKQor
ICAgICAgICBtY19kcmF3X3JvdyAodywgdy0+Y3VycmVudF9tYXRyaXgsIGN1cnJlbnRfcm93LCBj
dXJyZW50X3Jvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50X3Jvdy0+eCwgY3VycmVudF9yb3ctPnVzZWRbVEVYVF9BUkVBXSwgdnBvcywKKyAgICAgICAg
ICAgICAgICAgICAgIGN1cnNvcl9tYXRyaXgsIGVzc2VudGlhbHMsIHJvd19wb3NpdGlvbiwgZHJh
d19wLCBTRVRfQ1VSU09SX1RXTyk7CisgICAgfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
KworCiAgICAgICAvKiBVcGRhdGUgdGhlIGhlYWRlciBsaW5lIGFmdGVyIHNjcm9sbGluZyBiZWNh
dXNlIGEgbmV3IGhlYWRlcgogCSBsaW5lIHdvdWxkIG90aGVyd2lzZSBvdmVyd3JpdGUgbGluZXMg
YXQgdGhlIHRvcCBvZiB0aGUgd2luZG93CiAJIHRoYXQgY2FuIGJlIHNjcm9sbGVkLiAgKi8KQEAg
LTM1MTYsNyArNTQzMCw0OSBAQCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29s
IGZvcmNlX3ApCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAJICBpZiAoY2hhbmdlZF9wICYm
IHJpZi0+Zml4X292ZXJsYXBwaW5nX2FyZWEpCiAJICAgIHsKLQkgICAgICByZWRyYXdfb3Zlcmxh
cHBlZF9yb3dzICh3LCB5Yik7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU
SVBMRS1DVVJTT1JTICovCisKKy8qIGByZWRyYXdfb3ZlcmxhcHBlZF9yb3dzJzogIFJlZHJhdyBs
aW5lcyBmcm9tIHRoZSBjdXJyZW50IG1hdHJpeCBvZiB3aW5kb3cgVwordGhhdCBhcmUgb3Zlcmxh
cHBlZCBieSBvdGhlciByb3dzLiAgWUIgaXMgYm90dG9tLW1vc3QgeS1wb3NpdGlvbiBpbiBXLiAg
SWYgcm93cworb3ZlcmxhcHBpbmcgb3RoZXJzIGhhdmUgYmVlbiBjaGFuZ2VkLCB0aGUgcm93cyBi
ZWluZyBvdmVybGFwcGVkIGhhdmUgdG8gYmUKK3JlZHJhd24uICBUaGlzIHdvbid0IGRyYXcgbGlu
ZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkcmF3biBpbiB1cGRhdGVfd2luZG93CitsaW5lIGJl
Y2F1c2Ugb3ZlcmxhcHBlZF9wIGluIGRlc2lyZWQgcm93cyBpcyAwLCBzbyBhZnRlciByb3cgYXNz
aWdubWVudAorb3ZlcmxhcHBlZF9wIGluIGN1cnJlbnQgcm93cyBpcyAwLiAqLworICBzdHJ1Y3Qg
ZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICBmb3IgKGludCBpID0gMDsg
aSA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93czsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBn
bHlwaF9yb3cgKnJvdyA9IHctPmN1cnJlbnRfbWF0cml4LT5yb3dzICsgaTsKKyAgICAgIGlmICgh
cm93LT5lbmFibGVkX3ApCisgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmIChyb3ctPm1v
ZGVfbGluZV9wKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKHJvdy0+b3ZlcmxhcHBl
ZF9wKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEg
PSBMRUZUX01BUkdJTl9BUkVBOyBhcmVhIDwgTEFTVF9BUkVBOyArK2FyZWEpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIG91dHB1dF9jdXJzb3JfdG8gKHcsIGksIDAsIHJvdy0+eSwgYXJl
YSA9PSBURVhUX0FSRUEgPyByb3ctPnggOiAwKTsKKyAgICAgICAgICAgICAgaWYgKCFtY19yZWRy
YXdfcm93ICh3LCB3LT5jdXJyZW50X21hdHJpeCwgcm93LCBhcmVhLCByb3ctPngsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT51c2VkW2FyZWFdLCB0cnVlLCBEUkFX
X05PUk1BTF9URVhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURV9X
SU5ET1dfX1JFRFJBV19PVkVSTEFQUEVEX1JPV1MpCisgICAgICAgICAgICAgICAgICAmJiByb3ct
PnVzZWRbYXJlYV0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgRlJBTUVf
UklGIChmKS0+d3JpdGVfZ2x5cGhzICh3LCByb3csIHJvdy0+Z2x5cGhzW2FyZWFdLCBhcmVhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnVzZWRb
YXJlYV0pOworICAgICAgICAgICAgICAgICAgRlJBTUVfUklGIChmKS0+Y2xlYXJfZW5kX29mX2xp
bmUgKHcsIHJvdywgYXJlYSwgLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICByb3ctPm92ZXJsYXBwZWRfcCA9IDA7CisgICAgICAgIH0KKyAgICAgIGlmIChN
QVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpID49IHliKQorICAgICAgICBicmVhazsKKyAgICB9CisK
Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICByZWRyYXdfb3ZlcmxhcHBpbmdf
cm93cyAodywgeWIpOwogCSAgICB9CiAjZW5kaWYKQEAgLTM1MzYsOCArNTQ5MiwyMCBAQCB1cGRh
dGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGZvcmNlX3ApCiAjZW5kaWYKIAogI2lm
ZGVmIEhBVkVfV0lORE9XX1NZU1RFTQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog
TVVMVElQTEUtQ1VSU09SUyAqLworCisgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAg
ICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkKKyAg
ICBtY191cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIDApOworICAgIGVsc2UKICAgICAgIHVwZGF0
ZV93aW5kb3dfZnJpbmdlcyAodywgMCk7CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisK
ICAgICAgIC8qIEVuZCB0aGUgdXBkYXRlIG9mIHdpbmRvdyBXLiAgRG9uJ3Qgc2V0IHRoZSBjdXJz
b3IgaWYgd2UKICAgICAgICAgIHBhdXNlZCB1cGRhdGluZyB0aGUgZGlzcGxheSBiZWNhdXNlIGlu
IHRoaXMgY2FzZSwKICAgICAgICAgIHNldF93aW5kb3dfY3Vyc29yX2FmdGVyX3VwZGF0ZSBoYXNu
J3QgYmVlbiBjYWxsZWQsIGFuZApkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1lLmggYi9zcmMvZnJhbWUu
aAppbmRleCBmYTQ1YTMyLi41M2FkMTMxIDEwMDY0NAotLS0gYS9zcmMvZnJhbWUuaAorKysgYi9z
cmMvZnJhbWUuaApAQCAtMjA1LDYgKzIwNSwxNiBAQCBzdHJ1Y3QgZnJhbWUKICAgTGlzcF9PYmpl
Y3QgdG9vbF9iYXJfaXRlbXM7CiAgIC8qIHRvb2xfYmFyX2l0ZW1zIHNob3VsZCBiZSB0aGUgbGFz
dCBMaXNwX09iamVjdCBtZW1iZXIuICAqLwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor
LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIC8qIE5vbi1uaWwgd2hlbiB0aGUgZnJhbWUgaXMg
aW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdXBkYXRlZC4gKi8KKyAgc3RydWN0IGZyYW1lICptY191
cGRhdGluZ19mcmFtZTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBDYWNo
ZSBvZiByZWFsaXplZCBmYWNlcy4gICovCiAgIHN0cnVjdCBmYWNlX2NhY2hlICpmYWNlX2NhY2hl
OwogCmRpZmYgLS1naXQgYS9zcmMvZnJpbmdlLmMgYi9zcmMvZnJpbmdlLmMKaW5kZXggZDBkNTk5
Mi4uNjYzODVmZiAxMDA2NDQKLS0tIGEvc3JjL2ZyaW5nZS5jCisrKyBiL3NyYy9mcmluZ2UuYwpA
QCAtNDM3LDggKzQzNyw0NjIgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVtcHR5X2xpbmVfYml0
c1tdID0gewogI2RlZmluZSBTVEFOREFSRF9CSVRNQVBfSEVJR0hUKGJpdHMpIChzaXplb2YgKGJp
dHMpL0JZVEVTX1BFUl9CSVRNQVBfUk9XKQogI2RlZmluZSBGUkJJVFMoYml0cykgIGJpdHMsIFNU
QU5EQVJEX0JJVE1BUF9IRUlHSFQgKGJpdHMpCiAKKworLyogKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov
CisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy8qIGArLWZyaW5nZS1oZWxwZXItZGVj
aW1hbCcgZGVmaW5lZCBpbiBgKy1tb2RlLmVsYCAqLworCisvKiBUT0RPOiAgQ29uc2lkZXIgYWRk
aW5nIHRoZSBmb2xsb3dpbmcgZnJpbmdlIGJpdG1hcHM6CisgIChkZWZpbmUtZnJpbmdlLWJpdG1h
cCAnYnJlYWtwb2ludCAiXHgzY1x4N2VceGZmXHhmZlx4ZmZceGZmXHg3ZVx4M2MiKQorICAoZGVm
aW5lLWZyaW5nZS1iaXRtYXAgJ2hvbGxvdy1yaWdodC10cmlhbmdsZSAiXHhlMFx4OTBceDg4XHg4
NFx4ODRceDg4XHg5MFx4ZTAiKSAqLworCisvKiAyNAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4
YWRlY2ltYWwKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4u
Li4uLiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li4uLnh4
LiIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Li4uLnh4LiIK
KyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAg
ICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNo
b3J0IG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvd19iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwg
MHg4MCwgMHg5OCwgMHg4YywgMHg4NiwgMHhiZiwKKyAgMHhiZiwgMHg4NiwgMHg4YywgMHg5OCwg
MHg4MCwgMHg4MCwgMHg4MH07CisKKy8qIDI1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj
aW1hbAorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4
IgorICAgICAgIi54eC4uLnh4IgorICAgICAgIi4ueHguLnh4IgorICAgICAgIi4uLnh4Lnh4Igor
ICAgICAgInh4eHh4eHh4IgorICAgICAgInh4eHh4eHh4IgorICAgICAgIi4uLnh4Lnh4IgorICAg
ICAgIi4ueHguLnh4IgorICAgICAgIi54eC4uLnh4IgorICAgICAgIi4uLi4uLnh4IgorICAgICAg
Ii4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93X2JpdHNbXSA9eworICAweDMsIDB4
MywgMHgzLCAweDYzLCAweDMzLCAweDFiLCAweGZmLCAweGZmLCAweDFiLCAweDMzLCAweDYzLCAw
eDMsIDB4MywgMHgzfTsKKworLyogMjYKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFs
CisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisg
ICAgICAieC4ueHguLngiCisgICAgICAieC4uLnh4LngiCisgICAgICAieC4uLi54eHgiCisgICAg
ICAieC54eHh4eHgiCisgICAgICAieC54eHh4eHgiCisgICAgICAieC4uLi54eHgiCisgICAgICAi
eC4uLnh4LngiCisgICAgICAieC4ueHguLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4u
Li4uLngiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19o
b2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93X2JpdHNbXSA9eworICAweGZmLCAweDgxLCAweDgx
LCAweDk5LCAweDhkLCAweDg3LCAweGJmLAorICAweGJmLCAweDg3LCAweDhkLCAweDk5LCAweDgx
LCAweDgxLCAweGZmfTsKKworLyogMjcKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFs
CisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4ueHgiCisgICAgICAieC4uLi4ueHgiCisg
ICAgICAieC54eC4ueHgiCisgICAgICAieC4ueHgueHgiCisgICAgICAieC4uLnh4eHgiCisgICAg
ICAieHh4eHh4eHgiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLnh4eHgiCisgICAgICAi
eC4ueHgueHgiCisgICAgICAieC54eC4ueHgiCisgICAgICAieC4uLi4ueHgiCisgICAgICAieC4u
Li4ueHgiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19y
ZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93X2JpdHNbXSA9eworICAweGZmLCAw
eDgxLCAweDgxLCAweGIxLCAweDk5LCAweDhkLCAweGZmLAorICAweGZmLCAweDhkLCAweDk5LCAw
eGIxLCAweDgxLCAweDgxLCAweGZmfTsKKworLyogMjgKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhl
eGFkZWNpbWFsCisgICAgICAieHh4eHh4eHgiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4u
Li4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4u
LngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngi
CisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisgICAgICAieC4uLi4uLngiCisg
ICAgICAieC4uLi4uLngiCisgICAgICAieHh4eHh4eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBz
aG9ydCBtY19ob2xsb3dfcmVjdGFuZ2xlX2JpdHNbXSA9eworICAweGZmLCAweDgxLCAweDgxLCAw
eDgxLCAweDgxLCAweDgxLCAweDgxLAorICAweDgxLCAweDgxLCAweDgxLCAweDgxLCAweDgxLCAw
eDgxLCAweGZmfTsKKworLyogMjkKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisg
ICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAg
ICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAi
eC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4u
Li4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4u
Li4iCisgICAgICAieC4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY192ZXJ0
aWNhbF9iYXJfYml0c1tdID17CisgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4ODAsCisgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODB9OworCisv
KiAzMAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi4uLi54eCIK
KyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAg
ICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAg
ICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIu
Li4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4u
Li54eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3JldmVyc2VkX3ZlcnRpY2FsX2Jh
cl9iaXRzW10gPXsKKyAgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDMsIDB4
MywgMHgzLCAweDMsIDB4MywgMHgzLCAweDN9OworCisvKiAzMQorICAgICgrLWZyaW5nZS1oZWxw
ZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIKKyAgICAgICJ4eC4uLi4uLiIKKyAgICAg
ICIgeHguLi4uLiIKKyAgICAgICIueHguLi4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAgICIu
Lnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAgICIuLi4u
eHguLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4uLnh4
LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4uLi54eCIpCisqLworc3RhdGljIHVuc2ln
bmVkIHNob3J0IG1jX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwgMHhlMCwgMHg2
MCwgMHgzMCwgMHgzMCwgMHgxOCwgMHgxOCwgMHhjLCAweGMsIDB4NiwgMHg2LCAweDMsIDB4M307
CisKKy8qIDMyCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4Li4u
Li4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4eC4uLi4uIgorICAgICAgInh4eC4uLi4u
IgorICAgICAgIngueHguLi4uIgorICAgICAgIngueHguLi4uIgorICAgICAgInguLnh4Li4uIgor
ICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi54eC4uIgorICAg
ICAgInguLi4ueHguIgorICAgICAgInguLi4ueHguIgorICAgICAgInguLi4uLnh4IgorICAgICAg
InguLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdmVydGljYWxfYmFyX2Jh
Y2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwgMHhlMCwgMHhlMCwgMHhiMCwgMHhiMCwg
MHg5OCwKKyAgMHg5OCwgMHg4YywgMHg4YywgMHg4NiwgMHg4NiwgMHg4MywgMHg4M307CisKKy8q
IDMzCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi54eHh4eHguIgor
ICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4uIgorICAg
ICAgIi54eHgueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAg
Ii4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4u
LngueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfcGlsY3Jvd19iaXRzW10gPXsK
KyAgMHg3ZSwgMHhmNCwgMHhmNCwgMHhmNCwgMHg3NCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwg
MHgxNCwgMHgxNH07CisKKy8qIDM0CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAor
ICAgICAgIi4ueHh4eC4uIgorICAgICAgIi54eHh4eHguIgorICAgICAgInguLnh4Li54IgorICAg
ICAgInguLnh4Li54IgorICAgICAgInh4eHh4eHh4IgorICAgICAgInh4Li4uLnh4IgorICAgICAg
Inh4eC4ueHh4IgorICAgICAgIi54eHh4eHguIgorICAgICAgIi4ueHh4eC4uIikKKyovCitzdGF0
aWMgdW5zaWduZWQgc2hvcnQgbWNfc21pbGV5X2ZhY2VfYml0c1tdID17CisgIDB4M2MsIDB4N2Us
IDB4OTksIDB4OTksIDB4ZmYsIDB4YzMsIDB4ZTcsIDB4N2UsIDB4M2N9OworCisvKiAzNQorICAg
ICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLnguLi4uLiIKKyAgICAgICIu
Li54Li4uLiIKKyAgICAgICIuLi4ueC4uLiIKKyAgICAgICIuLi4uLnguLiIKKyAgICAgICIuLi4u
eC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLnguLi4uLiIpCisqLworc3RhdGljIHVu
c2lnbmVkIHNob3J0IG1jX3NpbmdsZV9hbmdsZV9yaWdodF9iaXRzW10gPXsKKyAgMHgyMCwgMHgx
MCwgMHg4LCAweDQsIDB4OCwgMHgxMCwgMHgyMH07CisKKy8qIDM2CisgICAgKCstZnJpbmdlLWhl
bHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4ueC4uIgorICAgICAgIi4uLi54Li4uIgorICAg
ICAgIi4uLnguLi4uIgorICAgICAgIi4ueC4uLi4uIgorICAgICAgIi4uLnguLi4uIgorICAgICAg
Ii4uLi54Li4uIgorICAgICAgIi4uLi4ueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWNfc2luZ2xlX2FuZ2xlX2xlZnRfYml0c1tdID17CisgIDB4NCwgMHg4LCAweDEwLCAweDIwLCAw
eDEwLCAweDgsIDB4NH07CisKKy8qIDM3CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h
bAorICAgICAgInh4Lnh4Li4uIgorICAgICAgIi54eC54eC4uIgorICAgICAgIi4ueHgueHguIgor
ICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHgueHguIgorICAgICAgIi54eC54eC4uIgorICAg
ICAgInh4Lnh4Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfZG91YmxlX2FuZ2xl
X3JpZ2h0X2JpdHNbXSA9eworICAweGQ4LCAweDZjLCAweDM2LCAweDFiLCAweDM2LCAweDZjLCAw
eGQ4fTsKKworLyogMzgKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAi
Li4ueHgueHgiCisgICAgICAiLi54eC54eC4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAieHgu
eHguLi4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAiLi54eC54eC4iCisgICAgICAiLi4ueHgu
eHgiKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfbGVmdF9iaXRz
W10gPXsKKyAgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHg2YywgMHgzNiwgMHgxYn07CisKKy8q
IDM5CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIngueC54Li4uIgor
ICAgICAgIi54LngueC4uIgorICAgICAgIi4ueC54LnguIgorICAgICAgIi4uLngueC54IgorICAg
ICAgIi4ueC54LnguIgorICAgICAgIi54LngueC4uIgorICAgICAgIngueC54Li4uIikKKyovCitz
dGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0X2JpdHNbXSA9eworICAw
eGE4LCAweDU0LCAweDJhLCAweDE1LCAweDJhLCAweDU0LCAweGE4fTsKKworLyogNDAKKyAgICAo
Ky1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4ueC54LngiCisgICAgICAiLi54
LngueC4iCisgICAgICAiLngueC54Li4iCisgICAgICAieC54LnguLi4iCisgICAgICAiLngueC54
Li4iCisgICAgICAiLi54LngueC4iCisgICAgICAiLi4ueC54LngiKQorKi8KK3N0YXRpYyB1bnNp
Z25lZCBzaG9ydCBtY190cmlwbGVfYW5nbGVfbGVmdF9iaXRzW10gPXsKKyAgMHgxNSwgMHgyYSwg
MHg1NCwgMHhhOCwgMHg1NCwgMHgyYSwgMHgxNX07CisKKy8qIDQxCisgICAgKCstZnJpbmdlLWhl
bHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAg
ICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLnguLi4uIgorICAgICAg
Ii4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLi4uLnguIgorICAgICAgIi4u
Li4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4u
Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfc2luZ2xlX2FuZ2xlX3VwX2JpdHNb
XSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDQ0LCAweDgyLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwfTsKKworLyogNDIKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhl
eGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4u
Li4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLnguLi54
Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi4uLi4uLi4i
CisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iKQor
Ki8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zaW5nbGVfYW5nbGVfZG93bl9iaXRzW10gPXsK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg0NCwgMHgyOCwgMHgxMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMH07CisKKy8qIDQzCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj
aW1hbAorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4u
IgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgor
ICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAg
ICAgInguLi4uLnguIgorICAgICAgIi4uLi4uLi4uIgorICAgICAgIi4uLi4uLi4uIgorICAgICAg
Ii4uLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfZG91YmxlX2FuZ2xlX3Vw
X2JpdHNbXSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDQ0LCAweDkyLCAw
eDI4LCAweDQ0LCAweDgyLCAweDAwLCAweDAwLCAweDAwfTsKKworLyogNDQKKyAgICAoKy1mcmlu
Z2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4i
CisgICAgICAiLi4uLi4uLi4iCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLnguLi54Li4iCisg
ICAgICAiLi54LnguLi4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAg
ICAiLi54LnguLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAi
Li4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBt
Y19kb3VibGVfYW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4Miwg
MHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMH07CisK
Ky8qIDQ1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLi4uLi4u
IgorICAgICAgIi4uLnguLi4uIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgor
ICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAg
ICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAg
InguLi4uLnguIgorICAgICAgIi4uLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWNfdHJpcGxlX2FuZ2xlX3VwX2JpdHNbXSA9eworICAweDAwLCAweDEwLCAweDI4LCAweDQ0LCAw
eDkyLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDgyLCAweDAwfTsKKworLyogNDYK
KyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAg
ICAieC4uLi4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAi
eC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAieC4u
eC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLi4ueC4u
Li4iCisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19xdWFk
cnVwbGVfYW5nbGVfZG93bl9iaXRzW10gPXsKKyAgMHgwMCwgMHg4MiwgMHg0NCwgMHgyOCwgMHg5
MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgxMCwgMHgwMH07CisKKy8qIDQ3Cisg
ICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4uLnguLi4uIgorICAgICAg
Ii4ueC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4u
eC54Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54
Li4uIgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLnguLnguIgorICAgICAgIi4ueC54Li4u
IgorICAgICAgIi54Li4ueC4uIgorICAgICAgInguLi4uLnguIikKKyovCitzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwX2JpdHNbXSA9eworICAweDEwLCAweDI4LCAw
eDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0LCAweDkyLCAweDI4LCAweDQ0
LCAweDgyfTsKKworLyogNDgKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAg
ICAieC4uLi4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAi
eC4ueC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAieC4u
eC4ueC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAieC4ueC4u
eC4iCisgICAgICAiLnguLi54Li4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLi4ueC4uLi4i
KQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY190cmlwbGVfYW5nbGVfZG93bl9iaXRzW10g
PXsKKyAgMHg4MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgyOCwgMHg5MiwgMHg0NCwgMHgy
OCwgMHg5MiwgMHg0NCwgMHgyOCwgMHgxMH07CisKIC8qIE5PVEU6ICBUaGUgb3JkZXIgb2YgdGhl
c2UgYml0bWFwcyBtdXN0IG1hdGNoIHRoZSBzZXF1ZW5jZQotICAgdXNlZCBpbiBmcmluZ2UuZWwg
dG8gZGVmaW5lIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbHMuICAqLworICAgdXNlZCBpbiBmcmlu
Z2UuZWwgdG8gZGVmaW5lIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbHMuICovCiAKIHN0YXRpYyBz
dHJ1Y3QgZnJpbmdlX2JpdG1hcCBzdGFuZGFyZF9iaXRtYXBzW10gPQogewpAQCAtNDY2LDggKzky
MCwxMDcyIEBAIHN0YXRpYyBzdHJ1Y3QgZnJpbmdlX2JpdG1hcCBzdGFuZGFyZF9iaXRtYXBzW10g
PQogICB7IEZSQklUUyAodmVydGljYWxfYmFyX2JpdHMpLCAgICAgICA4LCAwLCBBTElHTl9CSVRN
QVBfQ0VOVEVSLCAwIH0sCiAgIHsgRlJCSVRTIChob3Jpem9udGFsX2Jhcl9iaXRzKSwgICAgIDgs
IDAsIEFMSUdOX0JJVE1BUF9CT1RUT00sIDAgfSwKICAgeyBGUkJJVFMgKGVtcHR5X2xpbmVfYml0
cyksICAgICAgICAgOCwgMywgQUxJR05fQklUTUFQX1RPUCwgICAgMCB9LAorCisgIC8qIDI0ICov
CisgIHtGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvd19iaXRzKSwgOCwgMCwgQUxJ
R05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDI1ICovCisgIHtGUkJJVFMgKG1jX3JldmVyc2Vk
X3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvd19iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRF
UiwgMH0sCisgIC8qIDI2ICovCisgIHtGUkJJVFMgKG1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRf
YXJyb3dfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAyNyAqLwor
ICB7RlJCSVRTIChtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93X2JpdHMp
LCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogMjggKi8KKyAge0ZSQklUUyAo
bWNfaG9sbG93X3JlY3RhbmdsZV9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0s
CisgIC8qIDI5ICovCisgIHtGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iaXRzKSwgOCwgMCwgQUxJ
R05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDMwICovCisgIHtGUkJJVFMgKG1jX3JldmVyc2Vk
X3ZlcnRpY2FsX2Jhcl9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8q
IDMxICovCisgIHtGUkJJVFMgKG1jX2JhY2tzbGFzaF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQ
X0NFTlRFUiwgMH0sCisgIC8qIDMyICovCisgIHtGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iYWNr
c2xhc2hfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAzMyAqLwor
ICB7RlJCSVRTIChtY19waWxjcm93X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAw
fSwKKyAgLyogMzQgKi8KKyAge0ZSQklUUyAobWNfc21pbGV5X2ZhY2VfYml0cyksIDgsIDAsIEFM
SUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAzNSAqLworICB7RlJCSVRTIChtY19zaW5nbGVf
YW5nbGVfcmlnaHRfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiAz
NiAqLworICB7RlJCSVRTIChtY19zaW5nbGVfYW5nbGVfbGVmdF9iaXRzKSwgOCwgMCwgQUxJR05f
QklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDM3ICovCisgIHtGUkJJVFMgKG1jX2RvdWJsZV9hbmds
ZV9yaWdodF9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDM4ICov
CisgIHtGUkJJVFMgKG1jX2RvdWJsZV9hbmdsZV9sZWZ0X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRN
QVBfQ0VOVEVSLCAwfSwKKyAgLyogMzkgKi8KKyAge0ZSQklUUyAobWNfdHJpcGxlX2FuZ2xlX3Jp
Z2h0X2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogNDAgKi8KKyAg
e0ZSQklUUyAobWNfdHJpcGxlX2FuZ2xlX2xlZnRfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9D
RU5URVIsIDB9LAorICAvKiA0MSAqLworICB7RlJCSVRTIChtY19zaW5nbGVfYW5nbGVfdXBfYml0
cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiA0MiAqLworICB7RlJCSVRT
IChtY19zaW5nbGVfYW5nbGVfZG93bl9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwg
MH0sCisgIC8qIDQzICovCisgIHtGUkJJVFMgKG1jX2RvdWJsZV9hbmdsZV91cF9iaXRzKSwgOCwg
MCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCisgIC8qIDQ0ICovCisgIHtGUkJJVFMgKG1jX2Rv
dWJsZV9hbmdsZV9kb3duX2JpdHMpLCA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAg
LyogNDUgKi8KKyAge0ZSQklUUyAobWNfdHJpcGxlX2FuZ2xlX3VwX2JpdHMpLCA4LCAwLCBBTElH
Tl9CSVRNQVBfQ0VOVEVSLCAwfSwKKyAgLyogNDYgKi8KKyAge0ZSQklUUyAobWNfdHJpcGxlX2Fu
Z2xlX2Rvd25fYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDB9LAorICAvKiA0NyAq
LworICB7RlJCSVRTIChtY19xdWFkcnVwbGVfYW5nbGVfdXBfYml0cyksIDgsIDAsIEFMSUdOX0JJ
VE1BUF9DRU5URVIsIDB9LAorICAvKiA0OCAqLworICB7RlJCSVRTIChtY19xdWFkcnVwbGVfYW5n
bGVfZG93bl9iaXRzKSwgOCwgMCwgQUxJR05fQklUTUFQX0NFTlRFUiwgMH0sCiB9OwogCisvKiBV
c2UgdGhpcyB0byBzdXBwcmVzcyBnY2MncyBgLi4ubWF5IGJlIHVzZWQgYmVmb3JlIGluaXRpYWxp
emVkJyB3YXJuaW5ncy4gKi8KKyNpZmRlZiBsaW50CisjIGRlZmluZSBNQ19JRl9MSU5UKENvZGUp
IENvZGUKKyNlbHNlCisjIGRlZmluZSBNQ19JRl9MSU5UKENvZGUpIC8qIGVtcHR5ICovCisjZW5k
aWYKKworc3RhdGljIHN0cnVjdCBmcmluZ2VfYml0bWFwICogZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0
YSAoaW50KTsKKworLyogbnRoIDAgPT4gZmFsc2UsIGZhbHNlCisgICBudGggMSA9PiB0cnVlLCBm
YWxzZQorICAgbnRoIDIgPT4gZmFsc2UsIHRydWUKKyAgIG50aCAzID0+IHRydWUsIHRydWUKKyAg
TG9va3VwIGluIGJ1ZmZlci1sb2NhbCBmcmluZ2UtaW5kaWNhdG9yLWFsaXN0IGJlZm9yZSBnbG9i
YWwgYWxpc3QuCisgICAgIEVsZW1lbnRzIGFyZToKKyAgQklUTUFQICAgIC0tIHVzZSBmb3IgYWxs
CisgIChMIFIpICAgIC0tIHVzZSBmb3IgbGVmdCByaWdodCAod2hldGhlciBwYXJ0aWFsIG9yIG5v
dCkKKyAgKEwgUiBQTCBQUikgIC0tIHVzZSBmb3IgbGVmdCByaWdodCBwYXJ0aWFsLWxlZnQgcGFy
dGlhbC1yaWdodAorICBJZiBhbnkgdmFsdWUgaW4gbG9jYWwgYmluZGluZyBpcyBub3QgcHJlc2Vu
dCBvciB0LCB1c2UgZ2xvYmFsIHZhbHVlLgorICAgICBJZiBwYXJ0aWFsLCBsb29rdXAgcGFydGlh
bCBiaXRtYXAgaW4gZGVmYXVsdCB2YWx1ZSBpZiBub3QgZm91bmQgaGVyZS4KKyAgICAgSWYgbm90
IHBhcnRpYWwsIG9yIG5vIHBhcnRpYWwgc3BlYyBpcyBwcmVzZW50LCB1c2Ugbm9uLXBhcnRpYWwg
Yml0bWFwLiAqLworaW50CittY19nZXRfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRvdyAqdywg
TGlzcF9PYmplY3QgYml0bWFwLCBpbnQgcmlnaHRfcCwgaW50IHBhcnRpYWxfcCkKK3sKKyAgTGlz
cF9PYmplY3QgY21hcCwgYm0xID0gUW5pbCwgYm0yID0gUW5pbCwgYm07CisgIEVNQUNTX0lOVCBs
bjEgPSAwLCBsbjIgPSAwOworICBpbnQgaXgxID0gcmlnaHRfcDsKKyAgaW50IGl4MiA9IGl4MSAr
IChwYXJ0aWFsX3AgPyAyIDogMCk7CisgIGlmICgoY21hcCA9IEJWQVIgKFhCVUZGRVIgKHctPmNv
bnRlbnRzKSwgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpLCAhTklMUCAoY21hcCkpCisgICAgewor
ICAgICAgYm0xID0gbWNfYXNzcSAoYml0bWFwLCBjbWFwKTsKKyAgICAgIGlmIChDT05TUCAoYm0x
KSkKKyAgeworICAgIGlmICgoYm0xID0gWENEUiAoYm0xKSksIE5JTFAgKGJtMSkpCisgICAgICBy
ZXR1cm4gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgICBpZiAoQ09OU1AgKGJtMSkpCisgICAgICB7
CisgICAgICAgIGxuMSA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMSkpOworICAgICAgICBpZiAocGFy
dGlhbF9wKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsbjEgPiBpeDIpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBibSA9IG1jX250aCAoaXgyLCBibTEpOworICAgICAg
ICAgICAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5k
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgaWYgKGxuMSA+IGl4MSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBibSA9IG1jX250aCAoaXgxLCBibTEpOworICAgICAgICAgICAgICAg
ICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBpZiAoKGJt
ID0gYm0xLCAhRVEgKGJtLCBRdCkpKQorICAgICAgZ290byBmb3VuZDsKKyAgfQorICAgIH0KKyAg
aWYgKCFFUSAoY21hcCwgQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9h
bGlzdCkpCisgICAgICAmJiAhTklMUCAoQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2lu
ZGljYXRvcl9hbGlzdCkpKQorICAgIHsKKyAgICAgIGJtMiA9IG1jX2Fzc3EgKGJpdG1hcCwgQlZB
UiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpOworICAgICAgaWYg
KENPTlNQIChibTIpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChibTIgPSBYQ0RSIChibTIp
KSwgIU5JTFAgKGJtMikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChDT05TUCAo
Ym0yKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBsbjIgPSBYRklYTlVN
IChGbGVuZ3RoIChibTIpKTsKKyAgICAgICAgICAgICAgICAgIGlmIChwYXJ0aWFsX3ApCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAobG4yID4gaXgyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBibSA9
IG1jX250aCAoaXgyLCBibTIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVRIChi
bSwgUXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGlmIChsbjEgPiBpeDEpCisg
ICAgeworICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0xKTsKKyAgICAgIGlmICghRVEgKGJtLCBR
dCkpCisgICAgICAgIGdvdG8gZm91bmQ7CisgICAgfQorICBpZiAobG4yID4gaXgxKQorICAgIHsK
KyAgICAgIGJtID0gbWNfbnRoIChpeDEsIGJtMik7CisgICAgICBpZiAoIUVRIChibSwgUXQpKQor
ICAgICAgICBnb3RvIGZvdW5kOworICAgICAgcmV0dXJuIE1DX05PX0ZSSU5HRV9CSVRNQVA7Cisg
ICAgfQorICAgIGVsc2UgaWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkKKyAgICAgIHJldHVybiBN
Q19OT19GUklOR0VfQklUTUFQOworICBmb3VuZDoKKyAgcmV0dXJuIGxvb2t1cF9mcmluZ2VfYml0
bWFwIChibSk7Cit9CisKK3N0YXRpYyBpbnQKK21jX2dldF9sb2dpY2FsX2N1cnNvcl9iaXRtYXAg
KHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IGN1cnNvcikKK3sKKyAgTGlzcF9PYmplY3Qg
Y21hcCwgYm0gPSBRbmlsOworICBpZiAoKGNtYXAgPSBCVkFSIChYQlVGRkVSICh3LT5jb250ZW50
cyksIGZyaW5nZV9jdXJzb3JfYWxpc3QpKSwgIU5JTFAgKGNtYXApKQorICAgIHsKKyAgICAgIGJt
ID0gbWNfYXNzcSAoY3Vyc29yLCBjbWFwKTsKKyAgICAgIGlmIChDT05TUCAoYm0pKQorICAgICAg
ICB7CisgICAgICAgICAgaWYgKChibSA9IFhDRFIgKGJtKSksIE5JTFAgKGJtKSkKKyAgICAgICAg
ICAgIHJldHVybiBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAgIHJldHVybiBsb29rdXBf
ZnJpbmdlX2JpdG1hcCAoYm0pOworICAgICAgICB9CisgICAgfQorICBpZiAoRVEgKGNtYXAsIEJW
QVIgKCZidWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9jdXJzb3JfYWxpc3QpKSkKKyAgICByZXR1cm4g
TUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgYm0gPSBtY19hc3NxIChjdXJzb3IsIEJWQVIgKCZidWZm
ZXJfZGVmYXVsdHMsIGZyaW5nZV9jdXJzb3JfYWxpc3QpKTsKKyAgaWYgKCFDT05TUCAoYm0pIHx8
ICgoYm0gPSBYQ0RSIChibSkpLCBOSUxQIChibSkpKQorICAgIHJldHVybiBNQ19OT19GUklOR0Vf
QklUTUFQOworICByZXR1cm4gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKGJtKTsKK30KKworc3RhdGlj
IGludAorbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRvdyAqdywgTGlz
cF9PYmplY3QgYml0bWFwLCBpbnQgcmlnaHRfcCwgaW50IHBhcnRpYWxfcCkKK3sKKyAgTGlzcF9P
YmplY3QgY21hcCwgYm0xID0gUW5pbCwgYm0yID0gUW5pbCwgYm07CisgIEVNQUNTX0lOVCBsbjEg
PSAwLCBsbjIgPSAwOworICBpbnQgaXgxID0gcmlnaHRfcDsKKyAgaW50IGl4MiA9IGl4MSArIChw
YXJ0aWFsX3AgPyAyIDogMCk7CisgIC8qIExvb2t1cCBpbiBidWZmZXItbG9jYWwgZnJpbmdlLWlu
ZGljYXRvci1hbGlzdCBiZWZvcmUgZ2xvYmFsIGFsaXN0LgorICAgICBFbGVtZW50cyBhcmU6Cisg
IEJJVE1BUCAgICAtLSB1c2UgZm9yIGFsbAorICAoTCBSKSAgICAtLSB1c2UgZm9yIGxlZnQgcmln
aHQgKHdoZXRoZXIgcGFydGlhbCBvciBub3QpCisgIChMIFIgUEwgUFIpICAtLSB1c2UgZm9yIGxl
ZnQgcmlnaHQgcGFydGlhbC1sZWZ0IHBhcnRpYWwtcmlnaHQKKyAgSWYgYW55IHZhbHVlIGluIGxv
Y2FsIGJpbmRpbmcgaXMgbm90IHByZXNlbnQgb3IgdCwgdXNlIGdsb2JhbCB2YWx1ZS4KKyAgICAg
SWYgcGFydGlhbCwgbG9va3VwIHBhcnRpYWwgYml0bWFwIGluIGRlZmF1bHQgdmFsdWUgaWYgbm90
IGZvdW5kIGhlcmUuCisgICAgIElmIG5vdCBwYXJ0aWFsLCBvciBubyBwYXJ0aWFsIHNwZWMgaXMg
cHJlc2VudCwgdXNlIG5vbi1wYXJ0aWFsIGJpdG1hcC4gKi8KKyAgaWYgKChjbWFwID0gQlZBUiAo
WEJVRkZFUiAody0+Y29udGVudHMpLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSksICFOSUxQIChj
bWFwKSkKKyAgICB7CisgICAgICBibTEgPSBtY19hc3NxIChiaXRtYXAsIGNtYXApOworICAgICAg
aWYgKENPTlNQIChibTEpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChibTEgPSBYQ0RSIChi
bTEpKSwgTklMUCAoYm0xKSkKKyAgICAgICAgICAgIHJldHVybiBNQ19OT19GUklOR0VfQklUTUFQ
OworICAgICAgICAgIGlmIChDT05TUCAoYm0xKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgbG4xID0gWEZJWE5VTSAoRmxlbmd0aCAoYm0xKSk7CisgICAgICAgICAgICAgIGlmIChwYXJ0
aWFsX3ApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKGxuMSA+IGl4
MikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGJtID0gbWNf
bnRoIChpeDIsIGJtMSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFFUSAoYm0sIFF0KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobG4xID4gaXgxKQorICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJtID0gbWNfbnRoIChpeDEsIGJt
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVRIChibSwgUXQpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChi
bSA9IGJtMSwgIUVRIChibSwgUXQpKSkKKyAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAg
ICAgfQorICAgIH0KKyAgaWYgKCFFUSAoY21hcCwgQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJp
bmdlX2luZGljYXRvcl9hbGlzdCkpCisgICAgICAmJiAhTklMUCAoQlZBUiAoJmJ1ZmZlcl9kZWZh
dWx0cywgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpKQorICAgIHsKKyAgICAgIGJtMiA9IG1jX2Fz
c3EgKGJpdG1hcCwgQlZBUiAoJmJ1ZmZlcl9kZWZhdWx0cywgZnJpbmdlX2luZGljYXRvcl9hbGlz
dCkpOworICAgICAgaWYgKENPTlNQIChibTIpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKChi
bTIgPSBYQ0RSIChibTIpKSwgIU5JTFAgKGJtMikpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGlmIChDT05TUCAoYm0yKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBsbjIgPSBYRklYTlVNIChGbGVuZ3RoIChibTIpKTsKKyAgICAgICAgICAgICAgICAgIGlmIChw
YXJ0aWFsX3ApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG4yID4gaXgyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICBibSA9IG1jX250aCAoaXgyLCBibTIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIUVRIChibSwgUXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
Zm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGlm
IChsbjEgPiBpeDEpCisgICAgeworICAgICAgYm0gPSBtY19udGggKGl4MSwgYm0xKTsKKyAgICAg
IGlmICghRVEgKGJtLCBRdCkpCisgICAgICAgIGdvdG8gZm91bmQ7CisgICAgfQorICBpZiAobG4y
ID4gaXgxKQorICAgIHsKKyAgICAgIGJtID0gbWNfbnRoIChpeDEsIGJtMik7CisgICAgICBpZiAo
IUVRIChibSwgUXQpKQorICAgICAgICBnb3RvIGZvdW5kOworICAgICAgcmV0dXJuIE1DX05PX0ZS
SU5HRV9CSVRNQVA7CisgICAgfQorICAgIGVsc2UgaWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkK
KyAgICAgIHJldHVybiBNQ19OT19GUklOR0VfQklUTUFQOworICBmb3VuZDoKKyAgcmV0dXJuIGxv
b2t1cF9mcmluZ2VfYml0bWFwIChibSk7Cit9CisKKy8qIFJlY2FsY3VsYXRlIHRoZSBiaXRtYXBz
IHRvIHNob3cgaW4gdGhlIGZyaW5nZXMgb2Ygd2luZG93IFcuCisgICBPbmx5IG1hcmsgcm93cyB3
aXRoIG1vZGlmaWVkIGJpdG1hcHMgZm9yIHVwZGF0ZSBpbiByZWRyYXdfZnJpbmdlX2JpdG1hcHNf
cC4KKyAgIElmIEtFRVBfQ1VSUkVOVF9QIGlzIDAsIHVwZGF0ZSBjdXJyZW50X21hdHJpeCB0b28u
ICovCitib29sCittY191cGRhdGVfd2luZG93X2ZyaW5nZXMgKHN0cnVjdCB3aW5kb3cgKncsIGJv
b2wga2VlcF9jdXJyZW50X3ApCit7CisgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgKmN1ciA9IDA7
CisgIGludCB5YiA9IHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KTsKKyAgaW50IHJuLCBucm93cyA9
IHctPmN1cnJlbnRfbWF0cml4LT5ucm93czsKKyAgaW50IHk7CisgIGJvb2wgcmVkcmF3X3AgPSAw
OworICBMaXNwX09iamVjdCBib3VuZGFyeV90b3AgPSBRbmlsLCBib3VuZGFyeV9ib3QgPSBRbmls
OworICBMaXNwX09iamVjdCBhcnJvd190b3AgPSBRbmlsLCBhcnJvd19ib3QgPSBRbmlsOworICBM
aXNwX09iamVjdCBlbXB0eV9wb3M7CisgIExpc3BfT2JqZWN0IGluZCA9IFFuaWw7CisjZGVmaW5l
IE1BWF9CSVRNQVBfQ0FDSEUgKDgqNCkKKyAgaW50IGJpdG1hcF9jYWNoZVtNQVhfQklUTUFQX0NB
Q0hFXTsKKyAgaW50IHRvcF9pbmRfcm4sIGJvdF9pbmRfcm47CisgIGludCB0b3BfaW5kX21pbl95
LCBib3RfaW5kX21heF95OworICAvKiB0b3BfaW5kX3JuIGlzIHNldCB0byBhIG5vbm5lZ2F0aXZl
IHZhbHVlIHdoZW5ldmVyCisgICAgIHJvdy0+aW5kaWNhdGVfYm9iX3AgaXMgc2V0LCBzbyBpdCdz
IE9LIHRoYXQgdG9wX3Jvd19lbmRzX2F0X3p2X3AKKyAgICAgaXMgbm90IGluaXRpYWxpemVkIGhl
cmUuICBTaW1pbGFybHkgZm9yIGJvdF9pbmRfcm4sCisgICAgIHJvdy0+aW5kaWNhdGVfZW9iX3Ag
YW5kIGJvdF9yb3dfZW5kc19hdF96dl9wLiAqLworICBpbnQgdG9wX3Jvd19lbmRzX2F0X3p2X3Ag
TUNfSUZfTElOVCAoPSAwKSwgYm90X3Jvd19lbmRzX2F0X3p2X3AgTUNfSUZfTElOVCAoPSAwKTsK
KyAgaWYgKHctPnBzZXVkb193aW5kb3dfcCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFNSU5JX1dJ
TkRPV19QICh3KQorICAgICAgJiYgKGluZCA9IEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg
aW5kaWNhdGVfYnVmZmVyX2JvdW5kYXJpZXMpLCAhTklMUCAoaW5kKSkpCisgICAgeworICAgICAg
aWYgKEVRIChpbmQsIFFsZWZ0KSB8fCBFUSAoaW5kLCBRcmlnaHQpKQorICAgICAgICBib3VuZGFy
eV90b3AgPSBib3VuZGFyeV9ib3QgPSBhcnJvd190b3AgPSBhcnJvd19ib3QgPSBpbmQ7CisgICAg
ICAgIGVsc2UgaWYgKENPTlNQIChpbmQpCisgICAgICAgICAgICAgICAgICYmIENPTlNQIChYQ0FS
IChpbmQpKSkKKyAgICAgICAgeworICAgICAgICAgIExpc3BfT2JqZWN0IHBvczsKKyAgICAgICAg
ICBpZiAocG9zID0gbWNfYXNzcSAoUXQsIGluZCksICFOSUxQIChwb3MpKQorICAgICAgICAgICAg
Ym91bmRhcnlfdG9wID0gYm91bmRhcnlfYm90ID0gYXJyb3dfdG9wID0gYXJyb3dfYm90ID0gWENE
UiAocG9zKTsKKyAgICAgICAgICBpZiAocG9zID0gbWNfYXNzcSAoUXRvcCwgaW5kKSwgIU5JTFAg
KHBvcykpCisgICAgICAgICAgICBib3VuZGFyeV90b3AgPSBYQ0RSIChwb3MpOworICAgICAgICAg
IGlmIChwb3MgPSBtY19hc3NxIChRYm90dG9tLCBpbmQpLCAhTklMUCAocG9zKSkKKyAgICAgICAg
ICAgIGJvdW5kYXJ5X2JvdCA9IFhDRFIgKHBvcyk7CisgICAgICAgICAgaWYgKHBvcyA9IG1jX2Fz
c3EgKFF1cCwgaW5kKSwgIU5JTFAgKHBvcykpCisgICAgICAgICAgICBhcnJvd190b3AgPSBYQ0RS
IChwb3MpOworICAgICAgICAgIGlmIChwb3MgPSBtY19hc3NxIChRZG93biwgaW5kKSwgIU5JTFAg
KHBvcykpCisgICAgICAgICAgICBhcnJvd19ib3QgPSBYQ0RSIChwb3MpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlIG1lYW5zIGJvdW5kYXJ5IG9u
IGxlZnQgYW5kIG5vIGFycm93cy4gKi8KKyAgICAgICAgICBib3VuZGFyeV90b3AgPSBib3VuZGFy
eV9ib3QgPSBRbGVmdDsKKyAgICB9CisgIHRvcF9pbmRfcm4gPSBib3RfaW5kX3JuID0gLTE7Cisg
IGlmICghTklMUCAoaW5kKSkKKyAgICB7CisgICAgICBmb3IgKHkgPSB3LT52c2Nyb2xsLCBybiA9
IDA7CisgICAgICAgICAgIHkgPCB5YiAmJiBybiA8IG5yb3dzOworICAgICAgICAgICB5ICs9IHJv
dy0+aGVpZ2h0LCArK3JuKQorICAgICAgICB7CisgICAgICAgICAgcm93ID0gdy0+ZGVzaXJlZF9t
YXRyaXgtPnJvd3MgKyBybjsKKyAgICAgICAgICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgICAg
ICAgICAgcm93ID0gdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MgKyBybjsKKyAgICAgICAgICByb3ct
PmluZGljYXRlX2JvYl9wID0gcm93LT5pbmRpY2F0ZV90b3BfbGluZV9wID0gMDsKKyAgICAgICAg
ICByb3ctPmluZGljYXRlX2VvYl9wID0gcm93LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wID0gMDsK
KyAgICAgICAgICBpZiAoIXJvdy0+bW9kZV9saW5lX3ApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGlmICh0b3BfaW5kX3JuIDwgMCAmJiByb3ctPnZpc2libGVfaGVpZ2h0ID4gMCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAoTUFUUklYX1JPV19TVEFSVF9D
SEFSUE9TIChyb3cpIDw9IEJVRl9CRUdWIChYQlVGRkVSICh3LT5jb250ZW50cykpCisgICAgICAg
ICAgICAgICAgICAgICAgJiYgIU1BVFJJWF9ST1dfUEFSVElBTExZX1ZJU0lCTEVfQVRfVE9QX1Ag
KHcsIHJvdykpCisgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kaWNhdGVfYm9iX3AgPSAhTklM
UCAoYm91bmRhcnlfdG9wKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgIHJvdy0+aW5kaWNhdGVfdG9wX2xpbmVfcCA9ICFOSUxQIChhcnJvd190b3ApOwor
ICAgICAgICAgICAgICAgICAgdG9wX2luZF9ybiA9IHJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgaWYgKGJvdF9pbmRfcm4gPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGlmIChNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpID49IEJVRl9aViAo
WEJVRkZFUiAody0+Y29udGVudHMpKQorICAgICAgICAgICAgICAgICAgICAgICYmICFNQVRSSVhf
Uk9XX1BBUlRJQUxMWV9WSVNJQkxFX0FUX0JPVFRPTV9QICh3LCByb3cpKQorICAgICAgICAgICAg
ICAgICAgICByb3ctPmluZGljYXRlX2VvYl9wID0gIU5JTFAgKGJvdW5kYXJ5X2JvdCksIGJvdF9p
bmRfcm4gPSBybjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeSArIHJvdy0+aGVpZ2h0
ID49IHliKQorICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kaWNhdGVfYm90dG9tX2xpbmVf
cCA9ICFOSUxQIChhcnJvd19ib3QpLCBib3RfaW5kX3JuID0gcm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBlbXB0eV9wb3MgPSBCVkFSIChY
QlVGRkVSICh3LT5jb250ZW50cyksIGluZGljYXRlX2VtcHR5X2xpbmVzKTsKKyAgaWYgKCFOSUxQ
IChlbXB0eV9wb3MpICYmICFFUSAoZW1wdHlfcG9zLCBRcmlnaHQpKQorICAgIGVtcHR5X3BvcyA9
IFdJTkRPV19MRUZUX0ZSSU5HRV9XSURUSCAodykgPT0gMCA/IFFyaWdodCA6IFFsZWZ0OworICBm
b3IgKHkgPSAwOyB5IDwgTUFYX0JJVE1BUF9DQUNIRTsgeSsrKQorICAgIGJpdG1hcF9jYWNoZVt5
XSA9IC0xOworI2RlZmluZSBNQ19MRUZUX0ZSSU5HRShjYWNoZSwgd2hpY2gsIHBhcnRpYWxfcCkJ
CQlcCisgIChiaXRtYXBfY2FjaGVbY2FjaGUqNCtwYXJ0aWFsX3BdID49IDAJCQkJXAorICAgPyBi
aXRtYXBfY2FjaGVbY2FjaGUqNCtwYXJ0aWFsX3BdCQkJCVwKKyAgIDogKGJpdG1hcF9jYWNoZVtj
YWNoZSo0K3BhcnRpYWxfcF0gPQkJCQlcCisgICAgICBtY19nZXRfbG9naWNhbF9mcmluZ2VfYml0
bWFwICh3LCB3aGljaCwgMCwgcGFydGlhbF9wKSkpCisjZGVmaW5lIE1DX1JJR0hUX0ZSSU5HRShj
YWNoZSwgd2hpY2gsIHBhcnRpYWxfcCkJCQlcCisgIChiaXRtYXBfY2FjaGVbY2FjaGUqNCsyK3Bh
cnRpYWxfcF0gPj0gMAkJCVwKKyAgID8gYml0bWFwX2NhY2hlW2NhY2hlKjQrMitwYXJ0aWFsX3Bd
CQkJCVwKKyAgIDogKGJpdG1hcF9jYWNoZVtjYWNoZSo0KzIrcGFydGlhbF9wXSA9CQkJXAorICAg
ICAgbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAodywgd2hpY2gsIDEsIHBhcnRpYWxfcCkp
KQorICAvKiBFeHRlbmQgdG9wLWFsaWduZWQgdG9wIGluZGljYXRvciAob3IgYm90dG9tLWFsaWdu
ZWQgYm90dG9tCisgICAgIGluZGljYXRvcikgdG8gYWRqYWNlbnQgcm93cyBpZiBpdCBkb2Vzbid0
IGZpdCBpbiBvbmUgcm93LiAqLworICB0b3BfaW5kX21pbl95ID0gYm90X2luZF9tYXhfeSA9IC0x
OworICBpZiAodG9wX2luZF9ybiA+PSAwKQorICAgIHsKKyAgICAgIGludCBibiA9IE1DX05PX0ZS
SU5HRV9CSVRNQVA7CisgICAgICByb3cgPSB3LT5kZXNpcmVkX21hdHJpeC0+cm93cyArIHRvcF9p
bmRfcm47CisgICAgICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgICAgICByb3cgPSB3LT5jdXJy
ZW50X21hdHJpeC0+cm93cyArIHRvcF9pbmRfcm47CisgICAgICB0b3Bfcm93X2VuZHNfYXRfenZf
cCA9IHJvdy0+ZW5kc19hdF96dl9wOworICAgICAgaWYgKHJvdy0+aW5kaWNhdGVfYm9iX3ApCisg
ICAgICAgIHsKKyAgICAgICAgICBpZiAoRVEgKGJvdW5kYXJ5X3RvcCwgUWxlZnQpKQorICAgICAg
ICAgICAgYm4gPSAoKHJvdy0+aW5kaWNhdGVfZW9iX3AgJiYgRVEgKGJvdW5kYXJ5X2JvdCwgUWxl
ZnQpKQorICAgICAgICAgICAgICAgICAgPyBNQ19MRUZUX0ZSSU5HRSAoMSwgUXRvcF9ib3R0b20s
IHJvdy0+ZW5kc19hdF96dl9wKQorICAgICAgICAgICAgICAgICAgOiBNQ19MRUZUX0ZSSU5HRSAo
MiwgUXRvcCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBibiA9ICgocm93
LT5pbmRpY2F0ZV9lb2JfcCAmJiBFUSAoYm91bmRhcnlfYm90LCBRcmlnaHQpKQorICAgICAgICAg
ICAgICAgICAgICA/IE1DX1JJR0hUX0ZSSU5HRSAoMSwgUXRvcF9ib3R0b20sIHJvdy0+ZW5kc19h
dF96dl9wKQorICAgICAgICAgICAgICAgICAgICA6IE1DX1JJR0hUX0ZSSU5HRSAoMiwgUXRvcCwg
MCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfdG9wX2xpbmVf
cCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoRVEgKGFycm93X3RvcCwgUWxlZnQpKQor
ICAgICAgICAgICAgICBibiA9IE1DX0xFRlRfRlJJTkdFICg2LCBRdXAsIDApOworICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm4gPSBNQ19SSUdIVF9GUklOR0UgKDYsIFF1cCwg
MCk7CisgICAgICAgICAgfQorICAgICAgaWYgKGJuICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisg
ICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJpbmdlX2JpdG1hcCAqZmIgPSBnZXRfZnJpbmdl
X2JpdG1hcF9kYXRhIChibik7CisgICAgICAgICAgaWYgKGZiLT5hbGlnbiA9PSBBTElHTl9CSVRN
QVBfVE9QICYmIGZiLT5wZXJpb2QgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
c3RydWN0IGdseXBoX3JvdyAqcm93MTsKKyAgICAgICAgICAgICAgaW50IHRvcF9pbmRfbWF4X3k7
CisgICAgICAgICAgICAgIHRvcF9pbmRfbWluX3kgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hU
ICh3KTsKKyAgICAgICAgICAgICAgdG9wX2luZF9tYXhfeSA9IHRvcF9pbmRfbWluX3kgKyBmYi0+
aGVpZ2h0OworICAgICAgICAgICAgICBpZiAodG9wX2luZF9tYXhfeSA+IHliKQorICAgICAgICAg
ICAgICAgIHRvcF9pbmRfbWF4X3kgPSB5YjsKKyAgICAgICAgICAgICAgZm9yICh5ID0gcm93LT55
ICsgcm93LT5oZWlnaHQsIHJuID0gdG9wX2luZF9ybiArIDE7CisgICAgICAgICAgICAgICAgICAg
eSA8IHRvcF9pbmRfbWF4X3kgJiYgcm4gPCBucm93czsKKyAgICAgICAgICAgICAgICAgICB5ICs9
IHJvdzEtPmhlaWdodCwgcm4rKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBpZiAoYm90X2luZF9ybiA+PSAwICYmIHJuID49IGJvdF9pbmRfcm4pCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgcm93MSA9IHctPmRlc2lyZWRfbWF0cml4
LT5yb3dzICsgcm47CisgICAgICAgICAgICAgICAgICBpZiAoIXJvdzEtPmVuYWJsZWRfcCkKKyAg
ICAgICAgICAgICAgICAgICAgcm93MSA9IHctPmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm47Cisg
ICAgICAgICAgICAgICAgICByb3cxLT5pbmRpY2F0ZV9ib2JfcCA9IHJvdy0+aW5kaWNhdGVfYm9i
X3A7CisgICAgICAgICAgICAgICAgICByb3cxLT5pbmRpY2F0ZV90b3BfbGluZV9wID0gcm93LT5p
bmRpY2F0ZV90b3BfbGluZV9wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgaWYgKGJvdF9pbmRfcm4gPj0gMCkKKyAgICB7CisgICAgICBpbnQg
Ym4gPSBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgcm93ID0gdy0+ZGVzaXJlZF9tYXRyaXgt
PnJvd3MgKyBib3RfaW5kX3JuOworICAgICAgaWYgKCFyb3ctPmVuYWJsZWRfcCkKKyAgICAgICAg
cm93ID0gdy0+Y3VycmVudF9tYXRyaXgtPnJvd3MgKyBib3RfaW5kX3JuOworICAgICAgYm90X3Jv
d19lbmRzX2F0X3p2X3AgPSByb3ctPmVuZHNfYXRfenZfcDsKKyAgICAgIGlmIChyb3ctPmluZGlj
YXRlX2VvYl9wKQorICAgICAgICB7CisgICAgICAgICAgaWYgKEVRIChib3VuZGFyeV9ib3QsIFFs
ZWZ0KSkKKyAgICAgICAgICAgIGJuID0gTUNfTEVGVF9GUklOR0UgKDMsIFFib3R0b20sIHJvdy0+
ZW5kc19hdF96dl9wKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgYm4gPSBNQ19S
SUdIVF9GUklOR0UgKDMsIFFib3R0b20sIHJvdy0+ZW5kc19hdF96dl9wKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChyb3ctPmluZGljYXRlX2JvdHRvbV9saW5lX3ApCisgICAgICAgICAg
eworICAgICAgICAgICAgaWYgKEVRIChhcnJvd19ib3QsIFFsZWZ0KSkKKyAgICAgICAgICAgICAg
Ym4gPSBNQ19MRUZUX0ZSSU5HRSAoNywgUWRvd24sIDApOworICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYm4gPSBNQ19SSUdIVF9GUklOR0UgKDcsIFFkb3duLCAwKTsKKyAgICAg
ICAgICB9CisgICAgICBpZiAoYm4gIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgewor
ICAgICAgICAgIHN0cnVjdCBmcmluZ2VfYml0bWFwICpmYiA9IGdldF9mcmluZ2VfYml0bWFwX2Rh
dGEgKGJuKTsKKyAgICAgICAgICBpZiAoZmItPmFsaWduID09IEFMSUdOX0JJVE1BUF9CT1RUT00g
JiYgZmItPnBlcmlvZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1Y3Qg
Z2x5cGhfcm93ICpyb3cxOworICAgICAgICAgICAgICBpbnQgYm90X2luZF9taW5feTsKKyAgICAg
ICAgICAgICAgYm90X2luZF9tYXhfeSA9IHJvdy0+eSArIHJvdy0+dmlzaWJsZV9oZWlnaHQ7Cisg
ICAgICAgICAgICAgIGJvdF9pbmRfbWluX3kgPSBib3RfaW5kX21heF95IC0gZmItPmhlaWdodDsK
KyAgICAgICAgICAgICAgaWYgKGJvdF9pbmRfbWluX3kgPCBXSU5ET1dfSEVBREVSX0xJTkVfSEVJ
R0hUICh3KSkKKyAgICAgICAgICAgICAgICBib3RfaW5kX21pbl95ID0gV0lORE9XX0hFQURFUl9M
SU5FX0hFSUdIVCAodyk7CisgICAgICAgICAgICAgIGZvciAoeSA9IHJvdy0+eSwgcm4gPSBib3Rf
aW5kX3JuIC0gMTsKKyAgICAgICAgICAgICAgICAgICB5ID49IGJvdF9pbmRfbWluX3kgJiYgcm4g
Pj0gMDsKKyAgICAgICAgICAgICAgICAgICB5IC09IHJvdzEtPmhlaWdodCwgcm4tLSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAodG9wX2luZF9ybiA+PSAwICYmIHJu
IDw9IHRvcF9pbmRfcm4pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgcm93MSA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgcm47CisgICAgICAgICAgICAg
ICAgICBpZiAoIXJvdzEtPmVuYWJsZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgcm93MSA9IHct
PmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm47CisgICAgICAgICAgICAgICAgICByb3cxLT5pbmRp
Y2F0ZV9lb2JfcCA9IHJvdy0+aW5kaWNhdGVfZW9iX3A7CisgICAgICAgICAgICAgICAgICByb3cx
LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wID0gcm93LT5pbmRpY2F0ZV9ib3R0b21fbGluZV9wOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgYm9v
bCBhdXRvX2hzY3JvbGxfbW9kZV9wID0gRVEgKEZidWZmZXJfbG9jYWxfdmFsdWUgKFFhdXRvX2hz
Y3JvbGxfbW9kZSwgdy0+Y29udGVudHMpLCBRY3VycmVudF9saW5lKTsKKyAgLyogRVhBTVBMRTog
IChzY3JvbGwtbGVmdCA1KSAqLworICBib29sIGhzY2xfYWxsX3RlbXBfcCA9ICh3LT5zdXNwZW5k
X2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxf
bW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IDApOworICAvKiBFWEFN
UExFOiAgQy11IEMteCA8IGFuZCBkbyBub3RoaW5nLiAqLworICBib29sIGhzY2xfYWxsX3Blcm1f
MF9wID0gKHctPnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hz
Y3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwg
PT0gdy0+aHNjcm9sbCk7CisgIC8qIEVYQU1QTEU6ICBDLXUgQy14IDwgYW5kIGRvIHNvbWV0aGlu
ZyBlbHNlIGJlc2lkZXMgaG9yaXpvbnRhbGx5IHNjcm9sbGluZyB0aGUKKyAgICAgICAgICAgICAg
IGN1cnJlbnQgbGluZSBkaWZmZXJlbnRseS4KKyAgICAgICAgICAgICAgIEN1cnJlbnQgbGluZSBp
cyBfbm90XyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVyZW50bHkuICovCisgIGJvb2wgaHNj
bF9hbGxfcGVybV8xX3AgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgYXV0b19oc2Nyb2xsX21vZGVfcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHctPmhzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgdy0+bWluX2hzY3JvbGwgPiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+
bWluX2hzY3JvbGwgPT0gdy0+aHNjcm9sbCk7CisgIC8qIEVYQU1QTEU6ICBDLXUgQy14IDwgYW5k
IC4uLgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIGlzIF9ub3RfIGhvcml6b250YWxseSBz
Y3JvbGxlZCBkaWZmZXJlbnRseS4gKi8KKyAgYm9vbCBoc2NsX2FsbF9wZXJtXzJfcCA9ICghdy0+
c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRv
X2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9s
bCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPiAw
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgIT0gdy0+aHNj
cm9sbCk7CisgIC8qIEVYQU1QTEU6ICAoc2Nyb2xsLWxlZnQgNSk7IGFuZCwgdGhlbiBwcmVzcyB0
aGUgbGVmdCBhcnJvdyBrZXkgb25lIHRpbWUuCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUg
X2lzXyBob3Jpem9udGFsbHkgc2Nyb2xsZWQgZGlmZmVyZW50bHkuKi8KKyAgYm9vbCBoc2NsX3Rl
bXBfcCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAgICAm
JiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9s
bCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA9PSAwKTsKKyAg
LyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQgZG8gc29tZXRoaW5nIHRoYXQgY2F1c2VzIHRoZSBj
dXJyZW50IGxpbmUgdG8gYmUKKyAgICAgICAgICAgICAgIGhvcml6b250YWxseSBzY3JvbGxlZCBk
aWZmZXJlbnRseS4KKyAgICAgICAgICAgICAgIEN1cnJlbnQgbGluZSBfaXNfIGhvcml6b250YWxs
eSBzY3JvbGxlZCBkaWZmZXJlbnRseS4gKi8KKyAgYm9vbCBoc2NsX3Blcm1fcCA9ICghdy0+c3Vz
cGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxf
bW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAg
ICAmJiB3LT5taW5faHNjcm9sbCAhPSB3LT5oc2Nyb2xsKTsKKyAgc3RydWN0IGZyYW1lICpmID0g
WEZSQU1FICh3LT5mcmFtZSk7CisgIGZvciAoeSA9IHctPnZzY3JvbGwsIHJuID0gMDsKKyAgICAg
ICB5IDwgeWIgJiYgcm4gPCBucm93czsKKyAgICAgICB5ICs9IHJvdy0+aGVpZ2h0LCBybisrKQor
ICAgIHsKKyAgaW50IGxlZnQsIHJpZ2h0OworICB1bnNpZ25lZCBsZWZ0X2ZhY2VfaWQsIHJpZ2h0
X2ZhY2VfaWQ7CisgIGludCBsZWZ0X29mZnNldCwgcmlnaHRfb2Zmc2V0OworICBib29sIHBlcmlv
ZGljX3A7CisgIHJvdyA9IHctPmRlc2lyZWRfbWF0cml4LT5yb3dzICsgcm47CisgIGN1ciA9IHct
PmN1cnJlbnRfbWF0cml4LT5yb3dzICsgcm47CisgIGludCB2bnRoX2RtID0gTUFUUklYX1JPV19W
UE9TICh3LT5kZXNpcmVkX21hdHJpeC0+cm93cyArIHJuLCB3LT5kZXNpcmVkX21hdHJpeCk7Cisg
IGludCB2bnRoX2NtID0gTUFUUklYX1JPV19WUE9TICh3LT5jdXJyZW50X21hdHJpeC0+cm93cyAr
IHJuLCB3LT5jdXJyZW50X21hdHJpeCk7CisgIGVudW0gbWNfcm93X3Bvc2l0aW9uIHJvd19wb3Np
dGlvbiA9IG1jX3Jvd19wb3NpdGlvbiAodywgY3VyLCBjdXIsIHZudGhfY20pOworICBpbnQgbWNf
bGVmdF9mcmluZ2VfYml0bWFwID0gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgaW50IG1jX2xlZnRf
ZnJpbmdlX2ZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGludCBtY19yaWdodF9mcmluZ2Vf
Yml0bWFwID0gTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgaW50IG1jX3JpZ2h0X2ZyaW5nZV9mYWNl
X2lkID0gREVGQVVMVF9GQUNFX0lEOworICBlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9
IENIX0NBQ0hFOworICBmb3IgKGludCBudGggPSAwOworICAgICAgIG1jX3RyYXZlcnNlX2NhY2hl
X3AgKHctPm1jX21hdHJpeCwgY2FjaGVfdHlwZSwgdm50aF9jbSwgbnRoKTsKKyAgICAgICArK250
aCkKKyAgICB7CisgICAgICAvLyAgaW50IHggPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5j
YWNoZVtjYWNoZV90eXBlXVtudGhdLng7CisgICAgICAvLyAgaW50IGZ4ID0gdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5meDsKKyAgICAgIC8vICBpbnQg
eSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0ueTsK
KyAgICAgIC8vICBpbnQgZnkgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhdLmZ5OworICAgICAgLy8gIGludCBocG9zID0gdy0+bWNfbWF0cml4LnZwb3Nb
dm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5ocG9zOworICAgICAgaW50IHZwb3MgPSB3
LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnZwb3M7Cisg
ICAgICAvLyAgaW50IHdkID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVf
dHlwZV1bbnRoXS53ZDsKKyAgICAgIC8vICBpbnQgaCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhf
Y21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uaDsKKyAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUg
Y3Vyc29yX3R5cGUgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhdLmN1cnNvcl90eXBlOworICAgICAgLy8gIGludCBjdXJzb3Jfd2lkdGggPSB3LT5tY19t
YXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl93aWR0aDsK
KyAgICAgIC8vICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZyA9IHsucmVkID0gdy0+bWNfbWF0cml4LnZw
b3Nbdm50aF9jbV0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5yZWQsCisgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ncmVlbiwKKyAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAuYmx1ZSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hl
X3R5cGVdW250aF0uZmcuYmx1ZX07CisgICAgICAvLyAgc3RydWN0IG1jX1JHQiBsc2xfYmcgPSB7
LnJlZCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0u
YmcucmVkLAorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC5ncmVlbiA9IHctPm1j
X21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYmcuZ3JlZW4sCisg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUgPSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmJsdWV9OworICAgICAgYm9vbCBh
Y3RpdmVfcCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhfY21dLmNhY2hlW2NhY2hlX3R5cGVdW250
aF0uYWN0aXZlX3A7CisgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IgPSB3LT5tY19t
YXRyaXgudnBvc1t2bnRoX2NtXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoX2ZsYXZvcjsK
KyAgICAgIGJvb2wgZW5hYmxlZF9wID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF9jbV0uY2FjaGVb
Y2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3A7CisgICAgICBpZiAoKHZwb3MgPT0gdm50aF9kbSB8
fCB2cG9zID09IHZudGhfY20pCisgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yID09IE1DX09WRVJM
QVlfQVJST1dfQklUTUFQCisgICAgICAgICAgJiYgIWhzY2xfYWxsX3RlbXBfcAorICAgICAgICAg
ICYmICFoc2NsX3RlbXBfcAorICAgICAgICAgICYmICFoc2NsX3Blcm1fcAorICAgICAgICAgICYm
ICFoc2NsX2FsbF9wZXJtXzBfcAorICAgICAgICAgICYmICFoc2NsX2FsbF9wZXJtXzFfcAorICAg
ICAgICAgICYmICFoc2NsX2FsbF9wZXJtXzJfcAorICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAg
ICAgICAgeworICAgICAgICAgIGludCBmcmluZ2VfYml0bWFwID0gTUNfTk9fRlJJTkdFX0JJVE1B
UDsKKyAgICAgICAgICBlbnVtIGZhY2VfaWQgb3ZlcmxheV9hcnJvd19mYWNlX2lkID0KKyAgICAg
ICAgICAgICghYWN0aXZlX3AKKyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAo
dy0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgICAgICA/IGxvb2t1
cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1pbmFjdGl2ZS1w
cmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAgICAgICAgICAgIDogKGFjdGl2
ZV9wKQorICAgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAo
Iistb3ZlcmxheS1hcnJvdy1wcmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAg
ICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICAgIG1jX2xlZnRfZnJpbmdlX2Zh
Y2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvdmVybGF5X2Fycm93X2ZhY2VfaWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAg
ICAgIGlmICh3LT5oc2Nyb2xsICE9IDApCisgICAgICAgICAgICBmcmluZ2VfYml0bWFwID0gbWNf
Z2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistb3ZlcmxheS1hcnJvdyIpLCBmYWxzZSwg
dHJ1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBt
Y19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1vdmVybGF5LWFycm93IiksIHRydWUs
IHRydWUpOworICAgICAgICAgIG1jX2xlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9
PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gZnJpbmdlX2JpdG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHZwb3Mg
PT0gdm50aF9kbSB8fCB2cG9zID09IHZudGhfY20pCisgICAgICAgICAgICAgICAgICYmIGdseXBo
X2ZsYXZvciA9PSBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUAorICAgICAgICAgICAgICAgICAmJiAo
aHNjbF9hbGxfdGVtcF9wCisgICAgICAgICAgICAgICAgICAgICB8fCBoc2NsX2FsbF9wZXJtXzBf
cAorICAgICAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVybV8xX3AKKyAgICAgICAgICAg
ICAgICAgICAgIHx8IGhzY2xfYWxsX3Blcm1fMl9wCisgICAgICAgICAgICAgICAgICAgICB8fCBo
c2NsX3RlbXBfcAorICAgICAgICAgICAgICAgICAgICAgfHwgaHNjbF9wZXJtX3ApCisgICAgICAg
ICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgZnJp
bmdlX2JpdG1hcCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAgICAgICBlbnVtIGZhY2Vf
aWQgb3ZlcmxheV9hcnJvd19mYWNlX2lkID0KKyAgICAgICAgICAgICAgKCFhY3RpdmVfcAorICAg
ICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5h
Y3RpdmVfd2luZG93cykpKQorICAgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcs
IGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1oc2NsLWluYWN0aXZlLXByZS16di1mYWNlIiks
IEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICAgICAgICA6IChhY3RpdmVfcCkKKyAgICAg
ICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3Zlcmxh
eS1hcnJvdy1oc2NsLXByZS16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAg
ICAgICAgICA6IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICAgIG1jX2xlZnRfZnJpbmdlX2Zh
Y2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG92ZXJsYXlfYXJyb3dfZmFjZV9pZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IERFRkFVTFRfRkFDRV9JRDsKKyAg
ICAgICAgICAgIGlmIChoc2NsX2FsbF9wZXJtXzBfcCkKKyAgICAgICAgICAgICAgZnJpbmdlX2Jp
dG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCBm
YWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICBlbHNlIGlmIChoc2NsX2FsbF9wZXJtXzFfcCkK
KyAgICAgICAgICAgICAgICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcs
IGludGVybiAoIistaHNjbC1wZXJtIiksIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChoc2NsX2FsbF9wZXJtXzJfcCkKKyAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRt
YXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgZmFs
c2UsIHRydWUpOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHNjbF9wZXJtX3ApCisgICAg
ICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywg
aW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGhzY2xfYWxsX3RlbXBfcCkKKyAgICAgICAgICAgICAgICAgICAgICBmcmluZ2Vf
Yml0bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNjbC10ZW1wIiks
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHNjbF90ZW1w
X3ApCisgICAgICAgICAgICAgICAgICAgICAgICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2ZyaW5n
ZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNjbC10ZW1wIiksIHRydWUsIGZhbHNlKTsKKyAgICAg
ICAgICAgIG1jX2xlZnRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZS
SU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmcmlu
Z2VfYml0bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNQ19OT19G
UklOR0VfQklUTUFQOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICgodnBvcyA9PSB2
bnRoX2RtIHx8IHZwb3MgPT0gdm50aF9jbSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKGdseXBo
X2ZsYXZvciA9PSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdM
RV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09
IE1DX0hPTExPV19SRUNUQU5HTEUKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2Zs
YXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJS
T1cKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNB
TF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZF
UlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZv
ciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIKQorICAgICAgICAgICAgICAgICAgICAmJiBl
bmFibGVkX3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGJpdG1h
cF9mbGF2b3IgPSAoZ2x5cGhfZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJS
T1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY19ob2xs
b3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdM
RV9SSUdIVF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBRbWNfcmV2ZXJzZWRfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hcnJvdworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX0hP
TExPV19SRUNUQU5HTEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gUW1jX2hvbGxvd19yZWN0YW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJS
T1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3Zl
cnRpY2FsX2Jhcl9yaWdodF9hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdI
VF9BUlJPVykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBR
bWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFS
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFtY192ZXJ0
aWNhbF9iYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGds
eXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3JldmVyc2VkX3ZlcnRpY2FsX2Jhcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9y
ID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUW5pbDsKKyAgICAgICAgICAgICAg
bWNfcmlnaHRfZnJpbmdlX2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0Vf
QklUTUFQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbG9va3Vw
X2ZyaW5nZV9iaXRtYXAgKGJpdG1hcF9mbGF2b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAgICAgICBtY19y
aWdodF9mcmluZ2VfZmFjZV9pZCA9CisgICAgICAgICAgICAgICAgKGN1cnNvcl90eXBlID09IE1D
X1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAgICAgICAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09
IFBSRV9aVgorICAgICAgICAgICAgICAgICAmJiAoZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VE
X0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgIHx8IGds
eXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAg
ICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9C
QVIpKQorICAgICAgICAgICAgICAgICAgPyBsb29rdXBfZGVyaXZlZF9mYWNlICh3LCBmLCBpbnRl
cm4gKCIrLXJldmVyc2VkLWJhci1wcmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkK
KyAgICAgICAgICAgICAgICA6IChjdXJzb3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQ
CisgICAgICAgICAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IEFUX1pWCisgICAgICAgICAg
ICAgICAgICAgJiYgKGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xF
X1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBN
Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikpCisgICAgICAg
ICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmV2ZXJz
ZWQtYmFyLWF0LXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAgICAg
ICAgOiAoY3Vyc29yX3R5cGUgPT0gTUNfUklHSFRfRlJJTkdFX0JJVE1BUAorICAgICAgICAgICAg
ICAgICAgICYmIHJvd19wb3NpdGlvbiA9PSBQT1NUX1pWCisgICAgICAgICAgICAgICAgICAgJiYg
KGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9X
CisgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9W
RVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhf
Zmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikpCisgICAgICAgICAgICAgICAgICA/
IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmV2ZXJzZWQtYmFyLXBvc3Qt
enYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAgICAgICAgICAgICAgICA6IChjdXJz
b3JfdHlwZSA9PSBNQ19SSUdIVF9GUklOR0VfQklUTUFQCisgICAgICAgICAgICAgICAgICAgJiYg
cm93X3Bvc2l0aW9uID09IFBSRV9aVgorICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZv
ciAhPSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICAgICAg
ICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdI
VF9BUlJPVworICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19SRVZFUlNF
RF9WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2Ug
KHcsIGYsIGludGVybiAoIistYmFyLXByZS16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVl
KQorICAgICAgICAgICAgICAgIDogKGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRN
QVAKKyAgICAgICAgICAgICAgICAgICAmJiByb3dfcG9zaXRpb24gPT0gQVRfWlYKKyAgICAgICAg
ICAgICAgICAgICAmJiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdM
RV9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19S
RVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAmJiBn
bHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKQorICAgICAgICAgICAgICAg
ICAgPyBsb29rdXBfZGVyaXZlZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWJhci1hdC16di1mYWNl
IiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICAgICAgICAgIDogKGN1cnNvcl90eXBl
ID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAgICAgICAgICAgICAgICAgICAmJiByb3dfcG9z
aXRpb24gPT0gUE9TVF9aVgorICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBN
Q19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAg
ICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP
VworICAgICAgICAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAhPSBNQ19SRVZFUlNFRF9WRVJU
SUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYs
IGludGVybiAoIistYmFyLXBvc3QtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAg
ICAgICAgICAgICAgICA6IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgaWYgKCFyb3ctPmVuYWJsZWRfcCkKKyAgICAgICAgcm93ID0gY3VyOworICAgICAg
bGVmdF9mYWNlX2lkID0gcmlnaHRfZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIGxl
ZnRfb2Zmc2V0ID0gcmlnaHRfb2Zmc2V0ID0gMDsKKyAgICAgIHBlcmlvZGljX3AgPSAwOworICAg
ICAgLyogRGVjaWRlIHdoaWNoIGJpdG1hcCB0byBkcmF3IGluIHRoZSBsZWZ0IGZyaW5nZS4gKi8K
KyAgICAgIGlmIChXSU5ET1dfTEVGVF9GUklOR0VfV0lEVEggKHcpID09IDApCisgICAgICAgIGxl
ZnQgPSBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgZWxzZSBpZiAocm93LT5sZWZ0X3VzZXJf
ZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICB7CisgICAgICAg
ICAgbGVmdCA9IHJvdy0+bGVmdF91c2VyX2ZyaW5nZV9iaXRtYXA7CisgICAgICAgICAgbGVmdF9m
YWNlX2lkID0gcm93LT5sZWZ0X3VzZXJfZnJpbmdlX2ZhY2VfaWQ7CisgICAgICAgIH0KKyAgICAg
IGVsc2UgaWYgKCghcm93LT5yZXZlcnNlZF9wICYmIHJvdy0+dHJ1bmNhdGVkX29uX2xlZnRfcCkK
KyAgICAgICAgICAgICAgIHx8IChyb3ctPnJldmVyc2VkX3AgJiYgcm93LT50cnVuY2F0ZWRfb25f
cmlnaHRfcCkpCisgICAgICAgIGxlZnQgPSBNQ19MRUZUX0ZSSU5HRSAoMCwgUXRydW5jYXRpb24s
IDApOworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9ib2JfcCAmJiBFUSAoYm91bmRhcnlf
dG9wLCBRbGVmdCkpCisgICAgICAgIHsKKyAgICAgICAgICBsZWZ0ID0gKChyb3ctPmluZGljYXRl
X2VvYl9wICYmIEVRIChib3VuZGFyeV9ib3QsIFFsZWZ0KSkKKyAgICAgICAgICAgICAgICAgPyBN
Q19MRUZUX0ZSSU5HRSAoMSwgUXRvcF9ib3R0b20sIHRvcF9yb3dfZW5kc19hdF96dl9wKQorICAg
ICAgICAgICAgICAgICA6IE1DX0xFRlRfRlJJTkdFICgyLCBRdG9wLCAwKSk7CisgICAgICAgICAg
aWYgKHRvcF9pbmRfbWluX3kgPj0gMCkKKyAgICAgICAgICAgIGxlZnRfb2Zmc2V0ID0gdG9wX2lu
ZF9taW5feSAtIHJvdy0+eTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0
ZV9lb2JfcCAmJiBFUSAoYm91bmRhcnlfYm90LCBRbGVmdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBsZWZ0ID0gTUNfTEVGVF9GUklOR0UgKDMsIFFib3R0b20sIGJvdF9yb3dfZW5kc19hdF96dl9w
KTsKKyAgICAgICAgICBpZiAoYm90X2luZF9tYXhfeSA+PSAwKQorICAgICAgICAgICAgbGVmdF9v
ZmZzZXQgPSBib3RfaW5kX21heF95IC0gKHJvdy0+eSArIHJvdy0+dmlzaWJsZV9oZWlnaHQpOwor
ICAgICAgICB9CisgICAgICBlbHNlIGlmICgoIXJvdy0+cmV2ZXJzZWRfcCAmJiBNQVRSSVhfUk9X
X0NPTlRJTlVBVElPTl9MSU5FX1AgKHJvdykpCisgICAgICAgICAgICAgICB8fCAocm93LT5yZXZl
cnNlZF9wICYmIHJvdy0+Y29udGludWVkX3ApKQorICAgICAgICBsZWZ0ID0gTUNfTEVGVF9GUklO
R0UgKDQsIFFjb250aW51YXRpb24sIDApOworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9l
bXB0eV9saW5lX3AgJiYgRVEgKGVtcHR5X3BvcywgUWxlZnQpKQorICAgICAgICBsZWZ0ID0gTUNf
TEVGVF9GUklOR0UgKDUsIFFlbXB0eV9saW5lLCAwKTsKKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5k
aWNhdGVfdG9wX2xpbmVfcCAmJiBFUSAoYXJyb3dfdG9wLCBRbGVmdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBsZWZ0ID0gTUNfTEVGVF9GUklOR0UgKDYsIFF1cCwgMCk7CisgICAgICAgICAgaWYg
KHRvcF9pbmRfbWluX3kgPj0gMCkKKyAgICAgICAgICAgIGxlZnRfb2Zmc2V0ID0gdG9wX2luZF9t
aW5feSAtIHJvdy0+eTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9i
b3R0b21fbGluZV9wICYmIEVRIChhcnJvd19ib3QsIFFsZWZ0KSkKKyAgICAgICAgeworICAgICAg
ICAgIGxlZnQgPSBNQ19MRUZUX0ZSSU5HRSAoNywgUWRvd24sIDApOworICAgICAgICAgIGlmIChi
b3RfaW5kX21heF95ID49IDApCisgICAgICAgICAgICBsZWZ0X29mZnNldCA9IGJvdF9pbmRfbWF4
X3kgLSAocm93LT55ICsgcm93LT52aXNpYmxlX2hlaWdodCk7CisgICAgICAgIH0KKyAgICAgIGVs
c2UKKyAgICAgICAgbGVmdCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICAvKiBEZWNpZGUg
d2hpY2ggYml0bWFwIHRvIGRyYXcgaW4gdGhlIHJpZ2h0IGZyaW5nZS4gKi8KKyAgICAgIGlmIChX
SU5ET1dfUklHSFRfRlJJTkdFX1dJRFRIICh3KSA9PSAwKQorICAgICAgICByaWdodCA9IE1DX05P
X0ZSSU5HRV9CSVRNQVA7CisgICAgICBlbHNlIGlmIChyb3ctPnJpZ2h0X3VzZXJfZnJpbmdlX2Jp
dG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICB7CisgICAgICAgICAgcmlnaHQg
PSByb3ctPnJpZ2h0X3VzZXJfZnJpbmdlX2JpdG1hcDsKKyAgICAgICAgICByaWdodF9mYWNlX2lk
ID0gcm93LT5yaWdodF91c2VyX2ZyaW5nZV9mYWNlX2lkOworICAgICAgICB9CisgICAgICBlbHNl
IGlmICgoIXJvdy0+cmV2ZXJzZWRfcCAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAg
ICAgICAgICAgICAgfHwgKHJvdy0+cmV2ZXJzZWRfcCAmJiByb3ctPnRydW5jYXRlZF9vbl9sZWZ0
X3ApKQorICAgICAgICByaWdodCA9IE1DX1JJR0hUX0ZSSU5HRSAoMCwgUXRydW5jYXRpb24sIDAp
OworICAgICAgZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9ib2JfcCAmJiBFUSAoYm91bmRhcnlfdG9w
LCBRcmlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgcmlnaHQgPSAoKHJvdy0+aW5kaWNhdGVf
ZW9iX3AgJiYgRVEgKGJvdW5kYXJ5X2JvdCwgUXJpZ2h0KSkKKyAgICAgICAgICAgICA/IE1DX1JJ
R0hUX0ZSSU5HRSAoMSwgUXRvcF9ib3R0b20sIHRvcF9yb3dfZW5kc19hdF96dl9wKQorICAgICAg
ICAgICAgIDogTUNfUklHSFRfRlJJTkdFICgyLCBRdG9wLCAwKSk7CisgICAgICAgICAgaWYgKHRv
cF9pbmRfbWluX3kgPj0gMCkKKyAgICAgICAgICAgIHJpZ2h0X29mZnNldCA9IHRvcF9pbmRfbWlu
X3kgLSByb3ctPnk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfZW9i
X3AgJiYgRVEgKGJvdW5kYXJ5X2JvdCwgUXJpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgIHJp
Z2h0ID0gTUNfUklHSFRfRlJJTkdFICgzLCBRYm90dG9tLCBib3Rfcm93X2VuZHNfYXRfenZfcCk7
CisgICAgICAgICAgaWYgKGJvdF9pbmRfbWF4X3kgPj0gMCkKKyAgICAgICAgICAgIHJpZ2h0X29m
ZnNldCA9IGJvdF9pbmRfbWF4X3kgLSAocm93LT55ICsgcm93LT52aXNpYmxlX2hlaWdodCk7Cisg
ICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCghcm93LT5yZXZlcnNlZF9wICYmIHJvdy0+Y29udGlu
dWVkX3ApCisgICAgICAgICAgICAgICB8fCAocm93LT5yZXZlcnNlZF9wICYmIE1BVFJJWF9ST1df
Q09OVElOVUFUSU9OX0xJTkVfUCAocm93KSkpCisgICAgICAgIHJpZ2h0ID0gTUNfUklHSFRfRlJJ
TkdFICg0LCBRY29udGludWF0aW9uLCAwKTsKKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVf
dG9wX2xpbmVfcCAmJiBFUSAoYXJyb3dfdG9wLCBRcmlnaHQpKQorICAgICAgICB7CisgICAgICAg
ICAgcmlnaHQgPSBNQ19SSUdIVF9GUklOR0UgKDYsIFF1cCwgMCk7CisgICAgICAgICAgaWYgKHRv
cF9pbmRfbWluX3kgPj0gMCkKKyAgICAgICAgICAgIHJpZ2h0X29mZnNldCA9IHRvcF9pbmRfbWlu
X3kgLSByb3ctPnk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHJvdy0+aW5kaWNhdGVfYm90
dG9tX2xpbmVfcCAmJiBFUSAoYXJyb3dfYm90LCBRcmlnaHQpKQorICAgICAgICB7CisgICAgICAg
ICAgcmlnaHQgPSBNQ19SSUdIVF9GUklOR0UgKDcsIFFkb3duLCAwKTsKKyAgICAgICAgICBpZiAo
Ym90X2luZF9tYXhfeSA+PSAwKQorICAgICAgICAgICAgcmlnaHRfb2Zmc2V0ID0gYm90X2luZF9t
YXhfeSAtIChyb3ctPnkgKyByb3ctPnZpc2libGVfaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAg
ZWxzZSBpZiAocm93LT5pbmRpY2F0ZV9lbXB0eV9saW5lX3AgJiYgRVEgKGVtcHR5X3BvcywgUXJp
Z2h0KSkKKyAgICAgICAgcmlnaHQgPSBNQ19SSUdIVF9GUklOR0UgKDUsIFFlbXB0eV9saW5lLCAw
KTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmlnaHQgPSBNQ19OT19GUklOR0VfQklUTUFQOworICAg
ICAgcGVyaW9kaWNfcCA9IChnZXRfZnJpbmdlX2JpdG1hcF9kYXRhIChsZWZ0KS0+cGVyaW9kICE9
IDAKKyAgICAgICAgICAgICAgICAgICAgfHwgZ2V0X2ZyaW5nZV9iaXRtYXBfZGF0YSAocmlnaHQp
LT5wZXJpb2QgIT0gMCk7CisgICAgICBpZiAocm93LT55ICE9IGN1ci0+eQorICAgICAgICAgIHx8
IHJvdy0+dmlzaWJsZV9oZWlnaHQgIT0gY3VyLT52aXNpYmxlX2hlaWdodAorICAgICAgICAgIHx8
IHJvdy0+ZW5kc19hdF96dl9wICE9IGN1ci0+ZW5kc19hdF96dl9wCisgICAgICAgICAgfHwgbGVm
dCAhPSBjdXItPmxlZnRfZnJpbmdlX2JpdG1hcAorICAgICAgICAgIHx8IHJpZ2h0ICE9IGN1ci0+
cmlnaHRfZnJpbmdlX2JpdG1hcAorICAgICAgICAgIHx8IGxlZnRfZmFjZV9pZCAhPSBjdXItPmxl
ZnRfZnJpbmdlX2ZhY2VfaWQKKyAgICAgICAgICB8fCByaWdodF9mYWNlX2lkICE9IGN1ci0+cmln
aHRfZnJpbmdlX2ZhY2VfaWQKKyAgICAgICAgICB8fCBsZWZ0X29mZnNldCAhPSBjdXItPmxlZnRf
ZnJpbmdlX29mZnNldAorICAgICAgICAgIHx8IHJpZ2h0X29mZnNldCAhPSBjdXItPnJpZ2h0X2Zy
aW5nZV9vZmZzZXQKKyAgICAgICAgICB8fCBwZXJpb2RpY19wICE9IGN1ci0+ZnJpbmdlX2JpdG1h
cF9wZXJpb2RpY19wCisgICAgICAgICAgfHwgY3VyLT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCkK
KyAgICAgICAgeworICAgICAgICAgIHJlZHJhd19wID0gMSwgcm93LT5yZWRyYXdfZnJpbmdlX2Jp
dG1hcHNfcCA9IDE7CisgICAgICAgICAgaWYgKCFrZWVwX2N1cnJlbnRfcCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY3VyLT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IDE7CisgICAg
ICAgICAgICAgIGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1B
UAorICAgICAgICAgICAgICAgICAgfHwgbWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19G
UklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgIGN1ci0+ZnJpbmdlX2JpdG1hcF9wZXJpb2Rp
Y19wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY3Vy
LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBwZXJpb2RpY19wOworICAgICAgICAgICAgICBp
ZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAg
ICAgICAgICAgY3VyLT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBtY19sZWZ0X2ZyaW5nZV9iaXRtYXA7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY3VyLT5sZWZ0X2ZyaW5n
ZV9iaXRtYXAgPSBsZWZ0OworICAgICAgICAgICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFw
ICE9IE1DX05PX0ZSSU5HRV9CSVRNQVApCisgICAgICAgICAgICAgICAgY3VyLT5sZWZ0X2ZyaW5n
ZV9mYWNlX2lkID0gbWNfbGVmdF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBsZWZ0X2ZhY2Vf
aWQ7CisgICAgICAgICAgICAgIGlmIChtY19sZWZ0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJ
TkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICBjdXItPmxlZnRfZnJpbmdlX29mZnNldCA9IDA7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY3VyLT5sZWZ0X2ZyaW5n
ZV9vZmZzZXQgPSBsZWZ0X29mZnNldDsKKyAgICAgICAgICAgICAgaWYgKG1jX3JpZ2h0X2ZyaW5n
ZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICBjdXItPnJp
Z2h0X2ZyaW5nZV9iaXRtYXAgPSBtY19yaWdodF9mcmluZ2VfYml0bWFwOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX2JpdG1hcCA9IHJp
Z2h0OworICAgICAgICAgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19G
UklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQg
PSBtY19yaWdodF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICBjdXItPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gcmlnaHRfZmFjZV9pZDsKKyAg
ICAgICAgICAgICAgaWYgKG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJ
VE1BUCkKKyAgICAgICAgICAgICAgICBjdXItPnJpZ2h0X2ZyaW5nZV9vZmZzZXQgPSAwOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGN1ci0+cmlnaHRfZnJpbmdlX29m
ZnNldCA9IHJpZ2h0X29mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYg
KHJvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgPCAwKQorICAgICAgICByb3ctPm92ZXJsYXlfYXJy
b3dfYml0bWFwID0gbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAodywgUW92ZXJsYXlfYXJy
b3csIDAsIDApOworICAgICAgaWYgKHJvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgIT0gY3VyLT5v
dmVybGF5X2Fycm93X2JpdG1hcCkKKyAgICAgICAgeworICAgICAgICAgIHJlZHJhd19wID0gMSwg
cm93LT5yZWRyYXdfZnJpbmdlX2JpdG1hcHNfcCA9IDE7CisgICAgICAgICAgaWYgKCFrZWVwX2N1
cnJlbnRfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3VyLT5yZWRyYXdfZnJpbmdl
X2JpdG1hcHNfcCA9IDE7CisgICAgICAgICAgICAgIGN1ci0+b3ZlcmxheV9hcnJvd19iaXRtYXAg
PSByb3ctPm92ZXJsYXlfYXJyb3dfYml0bWFwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVAKKyAg
ICAgICAgICB8fCBtY19yaWdodF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRNQVAp
CisgICAgICAgIHJvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0gZmFsc2U7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICByb3ctPmZyaW5nZV9iaXRtYXBfcGVyaW9kaWNfcCA9IHBlcmlvZGlj
X3A7CisgICAgICBpZiAobWNfbGVmdF9mcmluZ2VfYml0bWFwICE9IE1DX05PX0ZSSU5HRV9CSVRN
QVApCisgICAgICAgIHJvdy0+bGVmdF9mcmluZ2VfYml0bWFwID0gbWNfbGVmdF9mcmluZ2VfYml0
bWFwOworICAgICAgICBlbHNlCisgICAgICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSBs
ZWZ0OworICAgICAgaWYgKG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19OT19GUklOR0VfQklU
TUFQKQorICAgICAgICByb3ctPmxlZnRfZnJpbmdlX2ZhY2VfaWQgPSBtY19sZWZ0X2ZyaW5nZV9m
YWNlX2lkOworICAgICAgICBlbHNlCisgICAgICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9mYWNlX2lk
ID0gbGVmdF9mYWNlX2lkOworICAgICAgaWYgKG1jX2xlZnRfZnJpbmdlX2JpdG1hcCAhPSBNQ19O
T19GUklOR0VfQklUTUFQKQorICAgICAgICByb3ctPmxlZnRfZnJpbmdlX29mZnNldCA9IDA7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICByb3ctPmxlZnRfZnJpbmdlX29mZnNldCA9IGxlZnRfb2Zm
c2V0OworICAgICAgaWYgKG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJTkdFX0JJ
VE1BUCkKKyAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0gbWNfcmlnaHRfZnJpbmdl
X2JpdG1hcDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJvdy0+cmlnaHRfZnJpbmdlX2JpdG1h
cCA9IHJpZ2h0OworICAgICAgaWYgKG1jX3JpZ2h0X2ZyaW5nZV9iaXRtYXAgIT0gTUNfTk9fRlJJ
TkdFX0JJVE1BUCkKKyAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfZmFjZV9pZCA9IG1jX3JpZ2h0
X2ZyaW5nZV9mYWNlX2lkOworICAgICAgICBlbHNlCisgICAgICAgICAgcm93LT5yaWdodF9mcmlu
Z2VfZmFjZV9pZCA9IHJpZ2h0X2ZhY2VfaWQ7CisgICAgICBpZiAobWNfcmlnaHRfZnJpbmdlX2Jp
dG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9v
ZmZzZXQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgcm93LT5yaWdodF9mcmluZ2Vfb2Zm
c2V0ID0gcmlnaHRfb2Zmc2V0OworICAgIH0KKyAgcmV0dXJuIHJlZHJhd19wICYmICFrZWVwX2N1
cnJlbnRfcDsKK30KKworc3RhdGljIExpc3BfT2JqZWN0ICpmcmluZ2VfZmFjZXM7CisKKy8qIERy
YXcgdGhlIGJpdG1hcCBXSElDSCBpbiBvbmUgb2YgdGhlIGxlZnQgb3IgcmlnaHQgZnJpbmdlcyBv
ZgorICAgd2luZG93IFcuICBST1cgaXMgdGhlIGdseXBoIHJvdyBmb3Igd2hpY2ggdG8gZGlzcGxh
eSB0aGUgYml0bWFwOyBpdAorICAgZGV0ZXJtaW5lcyB0aGUgdmVydGljYWwgcG9zaXRpb24gYXQg
d2hpY2ggdGhlIGJpdG1hcCBoYXMgdG8gYmUKKyAgIGRyYXduLgorICAgTEVGVF9QIGlzIDEgZm9y
IGxlZnQgZnJpbmdlLCAwIGZvciByaWdodCBmcmluZ2UuCisqLworc3RhdGljIHZvaWQKK21jX2Ry
YXdfZnJpbmdlX2JpdG1hcF8xIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy
b3csIGludCBsZWZ0X3AsIGludCBvdmVybGF5LCBpbnQgd2hpY2gpCit7CisgIHN0cnVjdCBmcmFt
ZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIHN0cnVjdCBkcmF3X2ZyaW5nZV9i
aXRtYXBfcGFyYW1zIHA7CisgIHN0cnVjdCBmcmluZ2VfYml0bWFwICpmYjsKKyAgaW50IHBlcmlv
ZDsKKyAgaW50IGZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgIGludCBvZmZzZXQsIGhlYWRl
cl9saW5lX2hlaWdodDsKKyAgcC5vdmVybGF5X3AgPSAob3ZlcmxheSAmIDEpID09IDE7CisgIHAu
Y3Vyc29yX3AgPSAob3ZlcmxheSAmIDIpID09IDI7CisgIGlmICh3aGljaCAhPSBNQ19OT19GUklO
R0VfQklUTUFQKQorICAgIHsKKyAgICAgIG9mZnNldCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYg
KGxlZnRfcCkKKyAgICAgIHsKKyAgICAgICAgd2hpY2ggPSByb3ctPmxlZnRfZnJpbmdlX2JpdG1h
cDsKKyAgICAgICAgZmFjZV9pZCA9IHJvdy0+bGVmdF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgICAg
b2Zmc2V0ID0gcm93LT5sZWZ0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICB9CisgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICB3aGljaCA9IHJvdy0+cmlnaHRfZnJpbmdlX2JpdG1hcDsKKyAg
ICAgICAgICBmYWNlX2lkID0gcm93LT5yaWdodF9mcmluZ2VfZmFjZV9pZDsKKyAgICAgICAgICBv
ZmZzZXQgPSByb3ctPnJpZ2h0X2ZyaW5nZV9vZmZzZXQ7CisgICAgICAgIH0KKyAgaWYgKGZhY2Vf
aWQgPT0gREVGQVVMVF9GQUNFX0lEKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGZhY2UgPSBm
cmluZ2VfZmFjZXNbd2hpY2hdOworICAgICAgZmFjZV9pZCA9IE5JTFAgKGZhY2UpID8gbG9va3Vw
X25hbWVkX2ZhY2UgKHcsIGYsIFFmcmluZ2UsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgZmFjZSwgRlJJTkdFX0ZBQ0VfSUQs
IDApOworICAgICAgaWYgKGZhY2VfaWQgPCAwKQorICAgICAgICBmYWNlX2lkID0gRlJJTkdFX0ZB
Q0VfSUQ7CisgICAgfQorICBmYiA9IGdldF9mcmluZ2VfYml0bWFwX2RhdGEgKHdoaWNoKTsKKyAg
cGVyaW9kID0gZmItPnBlcmlvZDsKKyAgLyogQ29udmVydCByb3cgdG8gZnJhbWUgY29vcmRpbmF0
ZXMuICovCisgIHAueSA9IFdJTkRPV19UT19GUkFNRV9QSVhFTF9ZICh3LCByb3ctPnkpICsgb2Zm
c2V0OworICBwLndoaWNoID0gd2hpY2g7CisgIHAuYml0cyA9IGZiLT5iaXRzOworICBwLndkID0g
ZmItPndpZHRoOworICBwLmggPSBmYi0+aGVpZ2h0OworICBwLmRoID0gKHBlcmlvZCA+IDAgPyAo
cC55ICUgcGVyaW9kKSA6IDApOworICBwLmggLT0gcC5kaDsKKyAgLyogQWRqdXN0IHkgdG8gdGhl
IG9mZnNldCBpbiB0aGUgcm93IHRvIHN0YXJ0IGRyYXdpbmcgdGhlIGJpdG1hcC4gKi8KKyAgc3dp
dGNoIChmYi0+YWxpZ24pCisgICAgeworICAgIGNhc2UgQUxJR05fQklUTUFQX0NFTlRFUjoKKyAg
ICAgIHAueSArPSAocm93LT5oZWlnaHQgLSBwLmgpIC8gMjsKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgQUxJR05fQklUTUFQX0JPVFRPTToKKyAgICAgIHAueSArPSAocm93LT52aXNpYmxlX2hlaWdo
dCAtIHAuaCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFMSUdOX0JJVE1BUF9UT1A6CisgICAg
ICBicmVhazsKKyAgICB9CisgIHAuZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7Cisg
IGlmIChwLmZhY2UgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBUaGlzIGNvdWxkIGhhcHBlbiBh
ZnRlciBjbGVhcmluZyBmYWNlIGNhY2hlLgorICAgICAgQnV0IGl0IHNob3VsZG4ndCBoYXBwZW4g
YW55bW9yZS4gICsra2ZzICovCisgICAgICByZXR1cm47CisgICAgfQorICBwcmVwYXJlX2ZhY2Vf
Zm9yX2Rpc3BsYXkgKGYsIHAuZmFjZSk7CisgIC8qIENsZWFyIGxlZnQgZnJpbmdlIGlmIG5vIGJp
dG1hcCB0byBkcmF3IG9yIGlmIGJpdG1hcCBkb2Vzbid0IGZpbGwKKyAgICAgdGhlIGZyaW5nZS4g
Ki8KKyAgcC5ieCA9IC0xOworICBoZWFkZXJfbGluZV9oZWlnaHQgPSBXSU5ET1dfSEVBREVSX0xJ
TkVfSEVJR0hUICh3KTsKKyAgcC5ieSA9IFdJTkRPV19UT19GUkFNRV9QSVhFTF9ZICh3LCBtYXgg
KGhlYWRlcl9saW5lX2hlaWdodCwgcm93LT55KSk7CisgIHAubnkgPSByb3ctPnZpc2libGVfaGVp
Z2h0OworICBpZiAobGVmdF9wKQorICAgIHsKKyAgICAgIGludCB3ZCA9IFdJTkRPV19MRUZUX0ZS
SU5HRV9XSURUSCAodyk7CisgICAgICBpbnQgeCA9IHdpbmRvd19ib3hfbGVmdCAodywgKFdJTkRP
V19IQVNfRlJJTkdFU19PVVRTSURFX01BUkdJTlMgKHcpCisgICAgICAgICAgID8gTEVGVF9NQVJH
SU5fQVJFQQorICAgICAgICAgICA6IFRFWFRfQVJFQSkpOworICAgICAgaWYgKHAud2QgPiB3ZCkK
KyAgICAgICAgcC53ZCA9IHdkOworICAgICAgcC54ID0geCAtIHAud2QgLSAod2QgLSBwLndkKSAv
IDI7CisgICAgICBpZiAocC53ZCA8IHdkIHx8IHAueSA+IHAuYnkgfHwgcC55ICsgcC5oIDwgcC5i
eSArIHAubnkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBJZiBXIGhhcyBhIHZlcnRpY2FsIGJv
cmRlciB0byBpdHMgbGVmdCwgZG9uJ3QgZHJhdyBvdmVyIGl0LiAqLworICAgICAgICAgIHdkIC09
ICgoIVdJTkRPV19MRUZUTU9TVF9QICh3KQorICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSB3
cm9uZyB3aGVuIHdlIGFsbG93IHdpbmRvdyBsb2NhbAorICAgICAgICAgICAgICAgcmlnaHQgZGl2
aWRlcnMgLSBidXQgdGhlIHdpbmRvdyBvbiB0aGUgbGVmdCBpcyBoYXJkCisgICAgICAgICAgICAg
ICB0byBnZXQuICovCisgICAgICAgICAgICAmJiAhRlJBTUVfUklHSFRfRElWSURFUl9XSURUSCAo
ZikKKyAgICAgICAgICAgICYmICFXSU5ET1dfSEFTX1ZFUlRJQ0FMX1NDUk9MTF9CQVIgKHcpCisg
ICAgICAgICAgICAvKiBCdXQgZG9uJ3QgcmVkdWNlIHRoZSBmcmluZ2Ugd2lkdGggaWYgdGhlIHdp
bmRvdworICAgICAgICAgICAgICAgaGFzIGEgbGVmdCBtYXJnaW4sIGJlY2F1c2UgdGhhdCBtZWFu
cyB3ZSBhcmUgbm90CisgICAgICAgICAgICAgICBpbiBkYW5nZXIgb2YgZHJhd2luZyBvdmVyIHRo
ZSB2ZXJ0aWNhbCBib3JkZXIsCisgICAgICAgICAgICAgICBhbmQgT1RPSCBsZWF2aW5nIG91dCB0
aGF0IG9uZSBwaXhlbCBsZWF2ZXMgYmVoaW5kCisgICAgICAgICAgICAgICB0cmFjZXMgb2YgdGhl
IGN1cnNvciwgaWYgaXQgd2FzIGluIGNvbHVtbiB6ZXJvCisgICAgICAgICAgICAgICBiZWZvcmUg
ZHJhd2luZyBub24tZW1wdHkgbWFyZ2luIGFyZWEuICovCisgICAgICAgICAgICAmJiB3LT5sZWZ0
X21hcmdpbl9jb2xzID09IDApCisgICAgICAgICAgID8gMSA6IDApOworICAgICAgICAgIHAuYngg
PSB4IC0gd2Q7CisgICAgICAgICAgcC5ueCA9IHdkOworICAgICAgICB9CisgICAgfQorICBlbHNl
CisgICAgeworICAgICAgaW50IHggPSB3aW5kb3dfYm94X3JpZ2h0ICh3LAorICAgICAgICAoV0lO
RE9XX0hBU19GUklOR0VTX09VVFNJREVfTUFSR0lOUyAodykKKyAgICAgICAgID8gUklHSFRfTUFS
R0lOX0FSRUEKKyAgICAgICAgIDogVEVYVF9BUkVBKSk7CisgICAgICBpbnQgd2QgPSBXSU5ET1df
UklHSFRfRlJJTkdFX1dJRFRIICh3KTsKKyAgICAgIGlmIChwLndkID4gd2QpCisgICAgICAgIHAu
d2QgPSB3ZDsKKyAgICAgIHAueCA9IHggKyAod2QgLSBwLndkKSAvIDI7CisgICAgICAvKiBDbGVh
ciByaWdodCBmcmluZ2UgaWYgbm8gYml0bWFwIHRvIGRyYXcgb2YgaWYgYml0bWFwIGRvZXNuJ3Qg
ZmlsbAorICAgdGhlIGZyaW5nZS4gKi8KKyAgICAgIGlmIChwLndkIDwgd2QgfHwgcC55ID4gcC5i
eSB8fCBwLnkgKyBwLmggPCBwLmJ5ICsgcC5ueSkKKyAgICAgICAgeworICAgICAgICAgIHAuYngg
PSB4OworICAgICAgICAgIHAubnggPSB3ZDsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKHAueCA+
PSBXSU5ET1dfQk9YX0xFRlRfRURHRV9YICh3KQorICAgICAgJiYgKHAueCArIHAud2QpIDw9IFdJ
TkRPV19CT1hfTEVGVF9FREdFX1ggKHcpICsgV0lORE9XX1BJWEVMX1dJRFRIICh3KSkKKyAgICBG
UkFNRV9SSUYgKGYpLT5kcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgJnApOworfQorCit2b2lk
CittY19kcmF3X2ZyaW5nZV9iaXRtYXAgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9y
b3cgKnJvdywgaW50IGxlZnRfcCwgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSkKK3sK
KyAgaW50IG92ZXJsYXkgPSAwOworICBpZiAobGVmdF9wID09IHJvdy0+cmV2ZXJzZWRfcCAmJiBy
b3ctPmN1cnNvcl9pbl9mcmluZ2VfcCkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCBjdXJzb3Ig
PSBRbmlsOworICAgICAgc3dpdGNoIChjdXJzb3JfdHlwZSkKKyAgICAgICAgeworICAgICAgICBj
YXNlIE1DX0ZSQU1FRF9CT1g6CisgICAgICAgICAgaWYgKHJvdy0+dmlzaWJsZV9oZWlnaHQgPj0g
U1RBTkRBUkRfQklUTUFQX0hFSUdIVCAoaG9sbG93X3JlY3RhbmdsZV9iaXRzKSkKKyAgICAgICAg
ICAgIGN1cnNvciA9IFFob2xsb3c7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY3Vyc29y
ID0gUWhvbGxvd19zbWFsbDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNQ19IT0xM
T1dfQk9YOgorICAgICAgICAgIGlmIChyb3ctPnZpc2libGVfaGVpZ2h0ID49IFNUQU5EQVJEX0JJ
VE1BUF9IRUlHSFQgKGhvbGxvd19yZWN0YW5nbGVfYml0cykpCisgICAgICAgICAgICBjdXJzb3Ig
PSBRaG9sbG93OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnNvciA9IFFob2xsb3df
c21hbGw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUNfRklMTEVEX0JPWDoKKyAg
ICAgICAgICBjdXJzb3IgPSBRYm94OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1D
X0JBUjoKKyAgICAgICAgICBjdXJzb3IgPSBRYmFyOworICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1DX0hCQVI6CisgICAgICAgICAgY3Vyc29yID0gUWhiYXI7CisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgY2FzZSBNQ19O
T19DVVJTT1I6CisgICAgICAgIGNhc2UgTUNfUklHSFRfRlJJTkdFX0JJVE1BUDoKKyAgICAgICAg
Y2FzZSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVA6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
dy0+cGh5c19jdXJzb3Jfb25fcCA9IDA7CisgICAgICAgICAgcm93LT5jdXJzb3JfaW5fZnJpbmdl
X3AgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAoIU5JTFAgKGN1
cnNvcikpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgYm0gPSBtY19nZXRfbG9naWNhbF9jdXJz
b3JfYml0bWFwICh3LCBjdXJzb3IpOworICAgICAgICAgIGlmIChibSAhPSBNQ19OT19GUklOR0Vf
QklUTUFQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19kcmF3X2ZyaW5nZV9iaXRt
YXBfMSAodywgcm93LCBsZWZ0X3AsIDIsIGJtKTsKKyAgICAgICAgICAgICAgb3ZlcmxheSA9IEVR
IChjdXJzb3IsIFFib3gpID8gMyA6IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcF8xICh3LCByb3csIGxlZnRfcCwgb3ZlcmxheSwgTUNf
Tk9fRlJJTkdFX0JJVE1BUCk7CisgIGlmIChsZWZ0X3AgJiYgcm93LT5vdmVybGF5X2Fycm93X2Jp
dG1hcCAhPSBNQ19OT19GUklOR0VfQklUTUFQKQorICAgIG1jX2RyYXdfZnJpbmdlX2JpdG1hcF8x
ICh3LCByb3csIDEsIDEsIHJvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXApOworfQorCisvKiBlbmQg
TVVMVElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogI2RlZmlu
ZSBOT19GUklOR0VfQklUTUFQIDAKICNkZWZpbmUgVU5ERUZfRlJJTkdFX0JJVE1BUCAxCiAjZGVm
aW5lIE1BWF9TVEFOREFSRF9GUklOR0VfQklUTUFQUyBBUlJBWUVMVFMgKHN0YW5kYXJkX2JpdG1h
cHMpCkBAIC0xNjk5LDYgKzMyMTcsMTY4IEBAIFJldHVybiBuaWwgaWYgUE9TIGlzIG5vdCB2aXNp
YmxlIGluIFdJTkRPVy4gICovKQogdm9pZAogc3ltc19vZl9mcmluZ2UgKHZvaWQpCiB7CisKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisK
KyAgLyogKGdldCAnZW1wdHktbGluZSAnZnJpbmdlKSA9PiAyMyA9PiB0aGUgbGFzdCBzdGFuZGFy
ZC1iaXRtYXAgYmVmb3JlIHRoaXMgb25lLgorICBTZWUgYGZyaW5nZS5lbGAuICovCisKKyAgLyog
MjQgKi8KKyAgREVGU1lNIChRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCAiKy12ZXJ0aWNh
bC1iYXItcmlnaHQtYXJyb3ciKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0
aWNhbF9iYXJfcmlnaHRfYXJyb3csIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0
aWNhbF9iYXJfcmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNCkpOworICAvKiAo
Z2V0ICcrLXZlcnRpY2FsLWJhci1yaWdodC1hcnJvdyAnZnJpbmdlKSA9PiAyNCAqLworCisgIC8q
IDI1ICovCisgIERFRlNZTSAoUW1jX3JldmVyc2VkX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvdywg
IistcmV2ZXJzZWQtdmVydGljYWwtYmFyLXJpZ2h0LWFycm93Iik7CisgIFZmcmluZ2VfYml0bWFw
cyA9IEZjb25zIChRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93LCBWZnJpbmdl
X2JpdG1hcHMpOworICBGcHV0IChRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93
LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMjUpKTsKKyAgLyogKGdldCAnKy1yZXZlcnNlZC12ZXJ0
aWNhbC1iYXItcmlnaHQtYXJyb3cgJ2ZyaW5nZSkgPT4gMjUgKi8KKworICAvKiAyNiAqLworICBE
RUZTWU0gKFFtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93LCAiKy1ob2xsb3ctcmVjdGFu
Z2xlLXJpZ2h0LWFycm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfaG9sbG93
X3JlY3RhbmdsZV9yaWdodF9hcnJvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX2hv
bGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNikpOwor
ICAvKiAoZ2V0ICcrLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYXJyb3cgJ2ZyaW5nZSkgPT4gMjYg
Ki8KKworICAvKiAyNyAqLworICBERUZTWU0gKFFtY19yZXZlcnNlZF9ob2xsb3dfcmVjdGFuZ2xl
X3JpZ2h0X2Fycm93LCAiKy1yZXZlcnNlZC1ob2xsb3ctcmVjdGFuZ2xlLXJpZ2h0LWFycm93Iik7
CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfcmV2ZXJzZWRfaG9sbG93X3JlY3Rhbmds
ZV9yaWdodF9hcnJvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JldmVyc2VkX2hv
bGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyNykpOwor
ICAvKiAoZ2V0ICcrLXJldmVyc2VkLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYXJyb3cgJ2ZyaW5n
ZSkgPT4gMjcgKi8KKworICAvKiAyOCAqLworICBERUZTWU0gKFFtY19ob2xsb3dfcmVjdGFuZ2xl
LCAiKy1ob2xsb3ctcmVjdGFuZ2xlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNf
aG9sbG93X3JlY3RhbmdsZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX2hvbGxvd19y
ZWN0YW5nbGUsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyOCkpOworICAvKiAoZ2V0ICcrLWhvbGxv
dy1yZWN0YW5nbGUgJ2ZyaW5nZSkgPT4gMjggKi8KKworICAvKiAyOSAqLworICBERUZTWU0gKFFt
Y192ZXJ0aWNhbF9iYXIsICIrLXZlcnRpY2FsLWJhciIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBG
Y29ucyAoUW1jX3ZlcnRpY2FsX2JhciwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3Zl
cnRpY2FsX2JhciwgUWZyaW5nZSwgbWFrZV9maXhudW0gKDI5KSk7CisgIC8qIChnZXQgJystdmVy
dGljYWwtYmFyICdmcmluZ2UpID0+IDI5ICovCisKKyAgLyogMzAgKi8KKyAgREVGU1lNIChRbWNf
cmV2ZXJzZWRfdmVydGljYWxfYmFyLCAiKy1yZXZlcnNlZC12ZXJ0aWNhbC1iYXIiKTsKKyAgVmZy
aW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXIsIFZmcmluZ2Vf
Yml0bWFwcyk7CisgIEZwdXQgKFFtY19yZXZlcnNlZF92ZXJ0aWNhbF9iYXIsIFFmcmluZ2UsIG1h
a2VfZml4bnVtICgzMCkpOworICAvKiAoZ2V0ICcrLXJldmVyc2VkLXZlcnRpY2FsLWJhciAnZnJp
bmdlKSA9PiAzMCAqLworCisgIC8qIDMxICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIist
YmFja3NsYXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBW
ZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX2Zp
eG51bSAoMzEpKTsKKyAgLyogKGdldCAnKy1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzEgKi8KKwor
ICAvKiAzMiAqLworICBERUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0
aWNhbC1iYXItYmFja3NsYXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVy
dGljYWxfYmFyX2JhY2tzbGFzaCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRp
Y2FsX2Jhcl9iYWNrc2xhc2gsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzMikpOworICAvKiAoZ2V0
ICcrLXZlcnRpY2FsLWJhci1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzIgKi8KKworICAvKiAzMyAq
LworICBERUZTWU0gKFFtY19waWxjcm93LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFw
cyA9IEZjb25zIChRbWNfcGlsY3JvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3Bp
bGNyb3csIFFmcmluZ2UsIG1ha2VfZml4bnVtICgzMykpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cg
J2ZyaW5nZSkgPT4gMzMgKi8KKworICAvKiAzNCAqLworICBERUZTWU0gKFFtY19zbWlsZXlfZmFj
ZSwgIistc21pbGV5LWZhY2UiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zbWls
ZXlfZmFjZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NtaWxleV9mYWNlLCBRZnJp
bmdlLCBtYWtlX2ZpeG51bSAoMzQpKTsKKyAgLyogKGdldCAnKy1zbWlsZXktZmFjZSAnZnJpbmdl
KSA9PiAzNCAqLworCisgIC8qIDM1ICovCisgIERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV9yaWdo
dCwgIistc2luZ2xlLWFuZ2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChR
bWNfc2luZ2xlX2FuZ2xlX3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc2lu
Z2xlX2FuZ2xlX3JpZ2h0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzUpKTsKKyAgLyogKGdldCAn
Ky1yaWdodC1zaW5nbGUtYW5nbGUgJ2ZyaW5nZSkgPT4gMzUgKi8KKworICAvKiAzNiAqLworICBE
RUZTWU0gKFFtY19zaW5nbGVfYW5nbGVfbGVmdCwgIistc2luZ2xlLWFuZ2xlLWxlZnQiKTsKKyAg
VmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9i
aXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NpbmdsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2Zp
eG51bSAoMzYpKTsKKyAgLyogKGdldCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAz
NiAqLworCisgIC8qIDM3ICovCisgIERFRlNZTSAoUW1jX2RvdWJsZV9hbmdsZV9yaWdodCwgIist
ZG91YmxlLWFuZ2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfZG91
YmxlX2FuZ2xlX3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfZG91YmxlX2Fu
Z2xlX3JpZ2h0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzcpKTsKKyAgLyogKGdldCAnKy1yaWdo
dC1kb3VibGUtYW5nbGUgJ2ZyaW5nZSkgPT4gMzcgKi8KKworICAvKiAzOCAqLworICBERUZTWU0g
KFFtY19kb3VibGVfYW5nbGVfbGVmdCwgIistZG91YmxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5n
ZV9iaXRtYXBzID0gRmNvbnMgKFFtY19kb3VibGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBz
KTsKKyAgRnB1dCAoUW1jX2RvdWJsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAo
MzgpKTsKKyAgLyogKGdldCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzOCAqLwor
CisgIC8qIDM5ICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV9yaWdodCwgIistdHJpcGxl
LWFuZ2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxlX2Fu
Z2xlX3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3Jp
Z2h0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzkpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5n
bGUtcmlnaHQgJ2ZyaW5nZSkgPT4gMzkgKi8KKworICAvKiA0MCAqLworICBERUZTWU0gKFFtY190
cmlwbGVfYW5nbGVfbGVmdCwgIistdHJpcGxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRt
YXBzID0gRmNvbnMgKFFtY190cmlwbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAg
RnB1dCAoUW1jX3RyaXBsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDApKTsK
KyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUtbGVmdCAnZnJpbmdlKSA9PiA0MCAqLworCisgIC8q
IDQxICovCisgIERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV91cCwgIistc2luZ2xlLWFuZ2xlLXVw
Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBWZnJp
bmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtl
X2ZpeG51bSAoNDEpKTsKKyAgLyogKGdldCAnKy1zaW5nbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4g
NDEgKi8KKworICAvKiA0MiAqLworICBERUZTWU0gKFFtY19zaW5nbGVfYW5nbGVfZG93biwgIist
c2luZ2xlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zaW5n
bGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NpbmdsZV9hbmds
ZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDIpKTsKKyAgLyogKGdldCAnKy1zaW5nbGUt
YW5nbGUtZG93biAnZnJpbmdlKSA9PiA0MiAqLworCisgIC8qIDQzICovCisgIERFRlNZTSAoUW1j
X2RvdWJsZV9hbmdsZV91cCwgIistZG91YmxlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2VfYml0bWFw
cyA9IEZjb25zIChRbWNfZG91YmxlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0
IChRbWNfZG91YmxlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDMpKTsKKyAgLyog
KGdldCAnKy1kb3VibGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4gNDMgKi8KKworICAvKiA0NCAqLwor
ICBERUZTWU0gKFFtY19kb3VibGVfYW5nbGVfZG93biwgIistZG91YmxlLWFuZ2xlLWRvd24iKTsK
KyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19kb3VibGVfYW5nbGVfZG93biwgVmZyaW5n
ZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX2RvdWJsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtl
X2ZpeG51bSAoNDQpKTsKKyAgLyogKGdldCAnKy1kb3VibGUtYW5nbGUtZG93biAnZnJpbmdlKSA9
PiA0NCAqLworCisgIC8qIDQ1ICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV91cCwgIist
dHJpcGxlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxl
X2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3Vw
LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDUpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUt
dXAgJ2ZyaW5nZSkgPT4gNDUgKi8KKworICAvKiA0NiAqLworICBERUZTWU0gKFFtY190cmlwbGVf
YW5nbGVfZG93biwgIistdHJpcGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0g
RmNvbnMgKFFtY190cmlwbGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAo
UW1jX3RyaXBsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDYpKTsKKyAgLyog
KGdldCAnKy10cmlwbGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0NiAqLworCisgIC8qIDQ3ICov
CisgIERFRlNZTSAoUW1jX3F1YWRydXBsZV9hbmdsZV91cCwgIistcXVhZHJ1cGxlLWFuZ2xlLXVw
Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBW
ZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBRZnJpbmdl
LCBtYWtlX2ZpeG51bSAoNDcpKTsKKyAgLyogKGdldCAnKy1xdWFkcnVwbGUtYW5nbGUtdXAgJ2Zy
aW5nZSkgPT4gNDcgKi8KKworICAvKiA0OCAqLworICBERUZTWU0gKFFtY19xdWFkcnVwbGVfYW5n
bGVfZG93biwgIistcXVhZHJ1cGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0g
RmNvbnMgKFFtY19xdWFkcnVwbGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1
dCAoUW1jX3F1YWRydXBsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDgpKTsK
KyAgLyogKGdldCAnKy1xdWFkcnVwbGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0OCAqLworCisv
KiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog
ICBERUZTWU0gKFF0cnVuY2F0aW9uLCAidHJ1bmNhdGlvbiIpOwogICBERUZTWU0gKFFjb250aW51
YXRpb24sICJjb250aW51YXRpb24iKTsKICAgREVGU1lNIChRb3ZlcmxheV9hcnJvdywgIm92ZXJs
YXktYXJyb3ciKTsKZGlmZiAtLWdpdCBhL3NyYy9uc3Rlcm0uaCBiL3NyYy9uc3Rlcm0uaAppbmRl
eCA5NzczZWIzLi5lMzRhMTE2IDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLmgKKysrIGIvc3JjL25z
dGVybS5oCkBAIC02NjMsNiArNjYzLDE2IEBAIHR5cGVkZWYgaWQgaW5zdGFuY2V0eXBlOwogCiBA
aW50ZXJmYWNlIEVtYWNzU2Nyb2xsZXIgOiBOU1Njcm9sbGVyCiAgIHsKKworCisvKiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIE5TUmVjdCBtY19y
ZWN0YW5nbGU7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgIHN0cnVjdCB3aW5k
b3cgKndpbmRvdzsKICAgIHN0cnVjdCBmcmFtZSAqZnJhbWU7CiAgICBOU1Jlc3BvbmRlciAqcHJl
dlJlc3BvbmRlcjsKQEAgLTY4Myw2ICs2OTMsMTggQEAgdHlwZWRlZiBpZCBpbnN0YW5jZXR5cGU7
CiAgICBpbnQgZW1fd2hvbGU7CiAgICB9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv
KiBNVUxUSVBMRS1DVVJTT1JTICovCisKKy0gKHZvaWQpbWNfc2V0X3JlY3RhbmdsZTogKE5TUmVj
dClyZWN0OworLSAoTlNSZWN0KW1jX2dldF9yZWN0YW5nbGU7CistIChzdHJ1Y3Qgd2luZG93ICop
bWNfZ2V0X3dpbmRvdzsKKy0gKGJvb2wpbWNfanVkZ2U7CisKKy8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqLworCisKIC0gKGluc3RhbmNldHlwZSkgaW5pdEZyYW1lOiAoTlNSZWN0IClyIHdpbmRvdzog
KExpc3BfT2JqZWN0KXdpbjsKIC0gKHZvaWQpc2V0RnJhbWU6IChOU1JlY3QpcjsKIApkaWZmIC0t
Z2l0IGEvc3JjL25zdGVybS5tIGIvc3JjL25zdGVybS5tCmluZGV4IDAyMzMxODIuLmIwODQ1NDUg
MTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0ubQorKysgYi9zcmMvbnN0ZXJtLm0KQEAgLTc2LDYgKzc2
LDk3OSBAQCBVcGRhdGVkIGJ5IENocmlzdGlhbiBMaW1wYWNoIChjaHJpc0BuaWNlLmNoKQogc3Rh
dGljIEVtYWNzTWVudSAqbWFpbk1lbnU7CiAjZW5kaWYKIAorCisvKiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworc3RhdGljIEJPT0wgbnNfY2xp
cF90b19yZWN0IChzdHJ1Y3QgZnJhbWUgKiwgTlNSZWN0ICosIGludCk7CisKK3N0YXRpYyB2b2lk
IG5zX3Jlc2V0X2NsaXBwaW5nIChzdHJ1Y3QgZnJhbWUgKik7CisKK3N0YXRpYyB2b2lkIG5zX2R1
bXBnbHlwaHNfYm94X29yX3JlbGllZiAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGlj
IHZvaWQgbnNfZHJhd19jb21wb3NpdGVfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHN0cnVjdCBn
bHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyBpbnQgbnNfZ2V0X2dseXBoX3N0cmluZ19jbGlwX3Jl
Y3QgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgTmF0aXZlUmVjdGFuZ2xlICopOworCitzdGF0aWMg
dm9pZCBuc19kcmF3X3JlbGllZiAoTlNSZWN0LCBpbnQsIGNoYXIsIGNoYXIsIGNoYXIsIGNoYXIs
IGNoYXIsIHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIG5zX2RyYXdfYm94
IChOU1JlY3QsIENHRmxvYXQsIE5TQ29sb3IgKiwgY2hhciwgY2hhcik7CisKK3N0YXRpYyB2b2lk
IG5zX2RyYXdfdW5kZXJ3YXZlIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIEVtYWNzQ0dGbG9hdCwg
RW1hY3NDR0Zsb2F0KTsKKworLyogQ3VycmVudCBkZXNpZ24gYXNzdW1lcyB0aGF0IGFscGhhIGlz
IDEuMCAqLwordm9pZAorbWNfeHdfY29sb3JfdmFsdWVzIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNw
X09iamVjdCBjb2xvciwgc3RydWN0IG1jX1JHQiAqbHNsKQoreworICBDSEVDS19TVFJJTkcgKGNv
bG9yKTsKKyAgTlNDb2xvciAqIGNvbDsKKyAgRW1hY3NDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhOworICBjaGVja193aW5kb3dfc3lzdGVtIChOVUxMKTsKKyAgYmxvY2tfaW5wdXQgKCk7
CisgIGlmIChuc19saXNwX3RvX2NvbG9yIChjb2xvciwgJmNvbCkpCisgICAgeworICAgICAgdW5i
bG9ja19pbnB1dCAoKTsKKyAgICAgIGxzbC0+cmVkID0gLTEuMDsKKyAgICAgIGxzbC0+Z3JlZW4g
PSAtMS4wOworICAgICAgbHNsLT5ibHVlID0gLTEuMDsKKyAgICB9CisgIFtbY29sIGNvbG9yVXNp
bmdEZWZhdWx0Q29sb3JTcGFjZV0KKyAgICAgICAgZ2V0UmVkOiAmcmVkIGdyZWVuOiAmZ3JlZW4g
Ymx1ZTogJmJsdWUgYWxwaGE6ICZhbHBoYV07CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIGxzbC0+
cmVkID0gcmVkOworICBsc2wtPmdyZWVuID0gZ3JlZW47CisgIGxzbC0+Ymx1ZSA9IGJsdWU7Cit9
CisKKy8qIFdoZW4gYG1jX3VwZGF0ZV93aW5kb3dfZHJ5cnVuJyBjYWxscyBgbWNfdXBkYXRlX3dp
bmRvd19lcmFzZScsIGl0IGlzIG5lY2Vzc2FyeQorICAgdG8gdXNlIHRoZSBgbWNfbWF0cml4YCBm
cm9tIHRoZSBwcmV2aW91cyBjb21tYW5kIGxvb3AgLS0gdGhlIGB3LT5tYXRyaXhgIGZvcgorICAg
dGhlIGN1cnJlbnQgY29tbWFuZCBsb29wIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBldmVuIHRo
b3VnaCB0aGUgY29udGVudHMgb2YKKyAgIHRoZSB3aW5kb3cgaGF2ZSBub3QgeWV0IGJlZW4gdXBk
YXRlZC4gIEluIG90aGVyIGNhc2VzLCB3ZSB1c2UgYHctPm1jX21hdHJpeGAuICovCitzdGF0aWMg
dm9pZAorbWNfbnNfZHJhd19vdmVyd3JpdHRlbiAoc3RydWN0IGdseXBoX3N0cmluZyAqcywgc3Ry
dWN0IGdseXBoX21hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgbWNfbWF0cml4IG1jX21hdHJpeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoKQoreworICAvLyAgaW50IHZw
b3MgPSBNQVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAgLy8gIGNsb2NrX3QgY2xvY2tf
c3RhcnQgPSBjbG9jaygpOworICAvLyBuc19kcmF3X3VuZGVyd2F2ZSAocywgcy0+d2lkdGgsIHMt
PngpOworICBOU0NvbG9yICpob2xsb3dfY29sb3IgPSBGUkFNRV9CQUNLR1JPVU5EX0NPTE9SIChz
LT5mKTsKKyAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIERFRkFVTFRf
RkFDRV9JRCk7CisgIGludCB2bnRoID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7Cisg
IC8qIFNUUkVUQ0hfR0xZUEggbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmYWtlIGN1cnNvciBh
dCB0aGUgc2FtZSBIUE9TLgorICBOT1RFOiAgQSBmYWtlIGN1cnNvciBmcm9tIG9uZSBjYWNoZSBt
YXkgb3ZlcndyaXRlIGEgZmFrZSBjdXJzb3IgZnJvbSBhbm90aGVyCisgIGNhY2hlIC0tIHRodXMs
IHdlIG11c3QgY2hlY2sgdGhlbSBhbGwgZm9yIG92ZXJ3cml0dGVuIGZha2UgY3Vyc29ycy4gKi8K
KyAgZm9yIChlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAg
IGNhY2hlX3R5cGUgPCBOT19DQUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgeworICAg
ICAgZm9yIChpbnQgbnRoID0gMDsKKyAgICAgICAgICAgcworICAgICAgICAgICAmJiBtY190cmF2
ZXJzZV9jYWNoZV9wIChtY19tYXRyaXgsIGNhY2hlX3R5cGUsIHZudGgsIG50aCk7CisgICAgICAg
ICAgICsrbnRoKQorICAgICAgICB7CisgICAgICAgICAgLy8gIGludCB4ID0gbWNfbWF0cml4LnZw
b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS54OworICAgICAgICAgIGludCBmeCA9IG1j
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZng7CisgICAgICAgICAg
Ly8gIGludCB5ID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS55
OworICAgICAgICAgIGludCBmeSA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF0uZnk7CisgICAgICAgICAgaW50IGhwb3MgPSBtY19tYXRyaXgudnBvc1t2bnRoXS5j
YWNoZVtjYWNoZV90eXBlXVtudGhdLmhwb3M7CisgICAgICAgICAgaW50IHZwb3MgPSBtY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnZwb3M7CisgICAgICAgICAgaW50
IHdkID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS53ZDsKKyAg
ICAgICAgICBpbnQgaCA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF0uaDsKKyAgICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlID0gbWNfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5jdXJzb3JfdHlwZTsKKyAgICAg
ICAgICAvLyAgaW50IGN1cnNvcl93aWR0aCA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh
Y2hlX3R5cGVdW250aF0uY3Vyc29yX3dpZHRoOworICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNs
X2ZnID0gey5yZWQgPSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhd
LmZnLnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSBtY19t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLmdyZWVuLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gbWNfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ibHVlfTsKKyAgICAgICAgICAvLyAgc3RydWN0IG1j
X1JHQiBsc2xfYmcgPSB7LnJlZCA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF0uYmcucmVkLAorICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAu
Z3JlZW4gPSBtY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmdy
ZWVuLAorICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IG1jX21h
dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYmcuYmx1ZX07CisgICAgICAg
ICAgYm9vbCBhY3RpdmVfcCA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF0uYWN0aXZlX3A7CisgICAgICAgICAgLy8gIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZv
ciA9IG1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGhfZmxh
dm9yOworICAgICAgICAgIGJvb2wgZW5hYmxlZF9wID0gbWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3A7CisgICAgICAgICAgYm9vbCBnb19wID0gKHZw
b3MgPT0gdm50aAorICAgICAgICAgICAgICAgICAgICAgICAmJiBocG9zID09IGN1cnNvcl9nbHlw
aC0+aHBvcworICAgICAgICAgICAgICAgICAgICAgICAmJiBlbmFibGVkX3ApOworICAgICAgICAg
IGlmICghZ29fcCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIE5TUmVjdCByOwor
ICAgICAgICAgIHIub3JpZ2luLnggPSBmeDsKKyAgICAgICAgICByLm9yaWdpbi55ID0gZnk7Cisg
ICAgICAgICAgci5zaXplLmhlaWdodCA9IGg7CisgICAgICAgICAgci5zaXplLndpZHRoID0gd2Q7
CisgICAgICAgICAgW1tOU0NvbG9yIGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IGxzbF9mZy5yZWQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVlbjogbHNsX2ZnLmdyZWVu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWU6IGxzbF9mZy5ibHVl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IDEuMF0gc2V0XTsK
KyAgICAgIGlmIChjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURfQk9YKQorICAgICAgICB7CisgICAg
ICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHMtPnctPmNvbnRlbnRzKTsKKyAgICAg
ICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9ICghTklMUCAoVnRyYW5zaWVudF9tYXJrX21vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1h
cmtfYWN0aXZlKSkpOworICAgICAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnID0gKHJlZ2lvbl9h
Y3RpdmVfcCkgPyBtY19yZWdpb25fbGltaXQgKDEpIDogLTE7CisgICAgICAgICAgcHRyZGlmZl90
IHJlZ2lvbl9lbmQgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IG1jX3JlZ2lvbl9saW1pdCAoMCkgOiAt
MTsKKyAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAgICAgICAgICYmIGFjdGl2
ZV9wCisgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA9PSByZWdpb25fYmVn
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2
ZV9yZWdpb25fYmVnX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50
ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsK
KyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNl
ID0gRkFDRV9GUk9NX0lEIChzLT5mLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZV9pZCk7
CisgICAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19jb2xvciA9
IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGhvbGxvd19hY3Rp
dmVfcmVnaW9uX2JlZ19mYWNlKSwgcy0+Zik7CisgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9
IGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgJiYgYWN0
aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA9PSBy
ZWdpb25fZW5kKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lk
IGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHMt
PncsIHMtPmYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1hdC1yZWdpb24tcHJlLXp2LWZh
Y2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf
cmVnaW9uX2VuZF9mYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBob2xsb3dfYWN0aXZlX3JlZ2lv
bl9lbmRfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9y
ZWdpb25fZW5kX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dS
T1VORCAoaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UpLCBzLT5mKTsKKyAgICAgICAgICAg
ICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfY29sb3I7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAg
ICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICYm
IGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA+IHJlZ2lvbl9iZWcKKyAgICAgICAgICAgICAgICAgICAg
ICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zIDwgcmVnaW9uX2VuZCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25f
YmV0d2Vlbl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHMtPncsIHMtPmYsIGludGVybiAo
IistcmVhbC1mYWtlLWN1cnNvci1pbi1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9m
YWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2Zh
Y2VfaWQpOworICAgICAgICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2FjdGl2ZV9yZWdpb25f
YmV0d2Vlbl9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9V
TkQgKGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZSksIHMtPmYpOworICAgICAgICAg
ICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9jb2xv
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aXZlX3Ap
CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBo
b2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50
ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lE
IChzLT5mLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICBOU0Nv
bG9yICpob2xsb3dfYWN0aXZlX2NvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZB
Q0VfQkFDS0dST1VORCAoaG9sbG93X2FjdGl2ZV9mYWNlKSwgcy0+Zik7CisgICAgICAgICAgICAg
ICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfY29sb3I7CisgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYWN0aXZlX3ApCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2lu
YWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+ZiwgaW50ZXJuICgi
Ky1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0Vf
RlJPTV9JRCAocy0+ZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAg
ICAgICAgIE5TQ29sb3IgKmhvbGxvd19pbmFjdGl2ZV9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVk
X2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19pbmFjdGl2ZV9mYWNlKSwgcy0+Zik7
CisgICAgICAgICAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2luYWN0aXZlX2Nv
bG9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
ZmFjZSAmJiBOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpID09IG5zX2luZGV4X2NvbG9yIChGUkFN
RV9DVVJTT1JfQ09MT1IgKHMtPmYpLCBzLT5mKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBb
bnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIHMtPmYp
IHNldF07CisgICAgICAgICAgICBob2xsb3dfY29sb3IgPSBGUkFNRV9DVVJTT1JfQ09MT1IgKHMt
PmYpOworICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRNQVA6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgTUNfTk9fQ1VSU09SOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIE1DX1JJR0hUX0ZSSU5HRV9CSVRN
QVA6CisgICAgICAgICAgICAgIGNhc2UgTUNfTEVGVF9GUklOR0VfQklUTUFQOgorICAgICAgICAg
ICAgICBjYXNlIE1DX0ZJTExFRF9CT1g6CisgICAgICAgICAgICAgICAgTlNSZWN0RmlsbCAocik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgTUNfRlJBTUVEX0JP
WDoKKyAgICAgICAgICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgICAgICAgICAgICBbaG9s
bG93X2NvbG9yIHNldF07CisgICAgICAgICAgICAgICAgTlNSZWN0RmlsbCAoTlNJbnNldFJlY3Qg
KHIsIDEsIDEpKTsKKyAgICAgICAgICAgICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChzLT5mKSBz
ZXRdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIE1DX0hPTExP
V19CT1g6CisgICAgICAgICAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgICAgICAgICAg
W2hvbGxvd19jb2xvciBzZXRdOworICAgICAgICAgICAgICAgIE5TUmVjdEZpbGwgKE5TSW5zZXRS
ZWN0IChyLCAxLCAxKSk7CisgICAgICAgICAgICAgICAgW0ZSQU1FX0NVUlNPUl9DT0xPUiAocy0+
Zikgc2V0XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBNQ19I
QkFSOgorICAgICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIE1DX0JBUjoKKyAgICAgICAgICAgICAgICBOU1JlY3RG
aWxsIChyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAvKiBJZiBhIGdseXBoIGV4aXN0cyAocy0+Y2hhcjJiICE9IE5VTEwpLCB0aGVuIGRyYXcgdGhl
IGdseXBoIG9uIHRvcCBvZiB0aGUKKyAgICAgICAgICBuZXdseSBkcmF3biByZWN0YW5nbGUgdGhh
dCB3YXMgY3JlYXRlZCBoZXJlaW5hYm92ZS4gIFRvIHRoZSBleHRlbnQgdGhhdCB3ZQorICAgICAg
ICAgIHdhbnQgdG8gZG91YmxlLWltcHJpbnQgZ2x5cGhzIHRvIG1ha2UgdGhlbSBhcHBlYXIgdG8g
YmUgc2VtaS1ib2xkLCBpdCBjYW4KKyAgICAgICAgICBiZSBkb25lIGhlcmUgZm9yIGFsbCBjdXJz
b3IgdHlwZXMuICBUaGUgYm94LXN0eWxlIGN1cnNvcnMgYXJlIGltcHJpbnRlZAorICAgICAgICAg
IHdpdGggZ2x5cGhzIG9ubHkgb25lICgxKSB0aW1lLiAgVGhlIHNlbWktYm9sZCBhcHBlYXJhbmNl
IGlzIGhlbHBmdWwgd2hlbgorICAgICAgICAgIGRlYnVnZ2luZyB0byBzZWUgdGhhdCB0aGUgY29v
cmRpbmF0ZXMgYXJlIGNvcnJlY3QuICovCisgICAgICAgICAgaWYgKHMtPmNoYXIyYiAhPSBOVUxM
CisgICAgICAgICAgICAgICYmIChjdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURfQk9YCisgICAgICAg
ICAgICAgICAgICB8fCBjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURfQk9YCisgICAgICAgICAgICAg
ICAgICB8fCBjdXJzb3JfdHlwZSA9PSBNQ19IT0xMT1dfQk9YKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgQk9PTCBpc0NvbXBvc2l0ZSA9IHMtPmZpcnN0X2dseXBoLT50eXBlID09IENP
TVBPU0lURV9HTFlQSDsKKyAgICAgICAgICAgICAgaWYgKGlzQ29tcG9zaXRlKQorICAgICAgICAg
ICAgICAgIG5zX2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBmb250ICpmb250ID0gcy0+ZmFjZS0+Zm9udDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmb250KQorICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBGUkFNRV9GT05UIChz
LT5mKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB3aXRoX2JnX3AgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9udC0+ZHJpdmVyLT5kcmF3IChzLCBzLT5jbXBfZnJvbSwgcy0+bmNo
YXJzLCBzLT54LCBzLT55YmFzZSwgd2l0aF9iZ19wKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgLy8gIGNsb2NrX3QgY2xvY2tfZW5kID0g
Y2xvY2soKTsKKyAgLy8gIGRvdWJsZSBjcHVfdGltZV91c2VkID0gKChkb3VibGUpIChjbG9ja19l
bmQgLSBjbG9ja19zdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIC8vICBmcHJpbnRmIChzdGRl
cnIsICJuc19kcmF3X292ZXJ3cml0dGVuICglZCk6ICBUSU1FICglZilcbiIsIHZwb3MsIGNwdV90
aW1lX3VzZWQpOworfQorCitzdGF0aWMgdm9pZAorbWNfbnNfZHJhd193aW5kb3dfY3Vyc29yIChz
dHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlw
aF9yb3cgKnJvdywKKyAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgZngsIGludCB5LCBpbnQg
ZnksIGludCBocG9zLCBpbnQgdnBvcywgaW50IHdkLCBpbnQgaCwKKyAgICAgICAgICAgICAgICAg
IHN0cnVjdCBtY19SR0IgbHNsLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlLAorICAg
ICAgICAgICAgICAgICAgaW50IGN1cnNvcl93aWR0aCwgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxh
dm9yLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3ApCit7CisgIC8qIFRoZSBwcmlvciBidWcgb2Yg
YSBkb3VibGUgaW1wcmludCBvbiB0aGUgZ2x5cGggd2hlcmUgYW4gTUNfSEJBUiBhbmQKKyAgTUNf
QkFSIGlzIHBsYWNlZCBpcyBxdWl0ZSBoZWxwZnVsIHRvIHZpc3VhbGl6ZSBlcnJvcnMgd2hlbiBk
ZWJ1Z2dpbmcuICovCisgIGJvb2wgZGVidWdfcCA9IGZhbHNlOworLyoKKyAgaWYgKG1jX3N0ZGVy
cl9wKQorICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX25zX2RyYXdfd2luZG93X2N1cnNvciAoJXMp
OlxuXAorICB4ICglZCkgfCBmeCAoJWQpIHwgeSAoJWQpIHwgZnkgKCVkKSB8IGhwb3MgKCVkKSB8
IHZwb3MgKCVkKVxuXAorICB3ZCAoJWQpIHwgaCAoJWQpIHwgUkdCICglZi8lZi8lZilcblwKKyAg
Y3Vyc29yX3R5cGUgKCVzKSB8IGN1cnNvcl93aWR0aCAoJWQpIHwgb25fcCAoJXMpIHwgYWN0aXZl
X3AgKCVzKVxuXAorICBnbHlwaF9mbGF2b3IgKCVzKVxuIiwKKyAgbWNfd2luZG93ICh3KSwgeCwg
ZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCwgbHNsLnJlZCwgbHNsLmJsdWUsIGxzbC5ncmVl
biwKKyAgbWNfY3Vyc29yX3R5cGVfdG9fc3RyaW5nIChjdXJzb3JfdHlwZSksIGN1cnNvcl93aWR0
aCwgb25fcCA/ICJ5IiA6ICJuIiwKKyAgYWN0aXZlX3AgPyAieSIgOiAibiIsIG1jX2ZsYXZvcl90
b19zdHJpbmcgKGdseXBoX2ZsYXZvcikpOworKi8KKyAgTlNSZWN0IHIsIHM7CisgIHN0cnVjdCBm
cmFtZSAqZiA9IFdJTkRPV19YRlJBTUUgKHcpOworICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlw
aCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAg
ZW51bSBmYWNlX2lkIGN1cnNvcl9nbHlwaF9mYWNlX2lkID0gKGN1cnNvcl9nbHlwaCA9PSBOVUxM
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IERFRkFVTFRfRkFDRV9J
RAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcl9nbHlwaC0+
ZmFjZV9pZDsKKyAgc3RydWN0IGZhY2UgKmZhY2U7CisgIE5TQ29sb3IgKmhvbGxvd19jb2xvciA9
IEZSQU1FX0JBQ0tHUk9VTkRfQ09MT1IgKGYpOworICAvKiBJZiBjdXJzb3IgaXMgb3V0IG9mIGJv
dW5kcywgZG9uJ3QgZHJhdyBnYXJiYWdlLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgIGluIG1pbmkt
YnVmZmVyIHdpbmRvd3Mgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlY2hvIGFyZWEgZ2x5cGhzCisg
ICAgIGFuZCBtaW5pLWJ1ZmZlci4gKi8KKyAgaWYgKCFvbl9wKQorICAgIHJldHVybjsKKyAgaWYg
KGN1cnNvcl90eXBlID09IE1DX05PX0NVUlNPUikKKyAgICByZXR1cm47CisgIC8qIFRoZSBmcmlu
Z2UgYml0bWFwcyBhcmUgcHJlc2VudGx5IGhhbmRsZWQgZWxzZXdoZXJlLCBidXQgY291bGQgc29t
ZWRheSBiZQorICBtYW5hZ2VkIChpbiBwYXJ0KSBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gKi8K
KyAgaWYgKHJvdy0+ZXhhY3Rfd2luZG93X3dpZHRoX2xpbmVfcAorICAgICAgJiYgKHJvdy0+cmV2
ZXJzZWRfcAorICAgICAgICAgPyAoaHBvcyA8IDApCisgICAgICAgICA6IChocG9zID49IHJvdy0+
dXNlZFtURVhUX0FSRUFdKSkpCisgICAgeworICAgICAgcm93LT5jdXJzb3JfaW5fZnJpbmdlX3Ag
PSB0cnVlOworICAgICAgbWNfZHJhd19mcmluZ2VfYml0bWFwICh3LCByb3csIHJvdy0+cmV2ZXJz
ZWRfcCwgY3Vyc29yX3R5cGUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgci5vcmlnaW4ueCA9
IGZ4OworICByLm9yaWdpbi55ID0gZnk7CisgIHIuc2l6ZS5oZWlnaHQgPSBoOworICByLnNpemUu
d2lkdGggPSB3ZDsKKyAgLyogYG5zX2NsaXBfdG9fcmVjdCcgbXVzdCBwcmVjZWRlIHRoZSBzZXR0
aW5nIG9mIGZhY2VzIHNvIGFzIHRvIGF2b2lkCisgICAgIHVuc2lnaHRseSBnZGIgZXJyb3IgbWVz
c2FnZXMgdGhhdCBhcmUgbmV4dCB0byBpbXBvc3NpYmxlIHRvIGRlYnVnOgorICAgICAgIFRodSBN
YXIgMjggMTM6NTQ6MzIgc2VydmVyLmxvY2FsIEVtYWNzWzE3MjA3XSA8RXJyb3I+OgorICAgICAg
IENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcjogaW52YWxpZCBjb250ZXh0IDB4MC4gKi8K
KyAgaWYgKCFuc19jbGlwX3RvX3JlY3QgKGYsICZyLCAxKSkKKyAgICByZXR1cm47CisgIGZhY2Ug
PSBGQUNFX0ZST01fSUQgKGYsIGN1cnNvcl9nbHlwaF9mYWNlX2lkKTsKKy8qIEVYQU1QTEUgT0Yg
SE9XIFRPIExPT0stVVAgQSBDT0xPUjoKKyAgICAgZW51bSBmYWNlX2lkIGZhY2VfaWQgPSBsb29r
dXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1iYXItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7
CisgICAgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKKyAg
ICAgTlNDb2xvciAqY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JF
R1JPVU5EIChmYWNlKSwgZik7CisgIC0gIEVYQU1QTEUgT0YgSE9XIFRPIFBSSU5UIEEgQ09MT1Ig
VE8gU1RERVJSOgorICAgICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kID0gZmFjZS0+bGZhY2VbTEZB
Q0VfRk9SRUdST1VORF9JTkRFWF07CisgICAgIExpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBmYWNl
LT5sZmFjZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVYXTsKKyAgICAgZnByaW50ZiAoc3RkZXJyLCAi
XG5mb3JlZ3JvdW5kICglcykgfCBiYWNrZ3JvdW5kICglcylcbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgKCFOSUxQIChmb3JlZ3JvdW5kKSA/IFNTREFUQSAoZm9yZWdyb3VuZCkgOiAiTklMUCIp
LAorICAgICAgICAgICAgICAgICAgICAgICghTklMUCAoYmFja2dyb3VuZCkgPyBTU0RBVEEgKGJh
Y2tncm91bmQpIDogIk5JTFAiKSk7CisgIC0gIEVYQU1QTEUgT0YgSE9XIFRPIENSRUFURSBBIENP
TE9SIFdJVEggUkdCL0xTTCBmbG9hdCB2YWx1ZXM6CisgICAgIE5TQ29sb3IgKm15X2NvbG9yID0g
W05TQ29sb3IgY29sb3JXaXRoQ2FsaWJyYXRlZFJlZDogMS4wCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVlbjogMS4wCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZTogMS4wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogMS4wXTsK
KyAgLSAgQUxURVJOQVRJVkUgRVhBTVBMRToKKyAgICAgZW51bSBmYWNlX2lkIGRlYnVnZ2luZ19m
YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHMtPncsIHMtPmYsIGludGVybiAoIistZGVidWdn
aW5nLWZhY2UiKSwgdHJ1ZSk7CisgICAgIHN0cnVjdCBmYWNlICpkZWJ1Z2dpbmdfZmFjZSA9IEZB
Q0VfRlJPTV9JRCAocy0+ZiwgZGVidWdnaW5nX2ZhY2VfaWQpOworICAgICBOU0NvbG9yICpjb2xv
ciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGRlYnVnZ2lu
Z19mYWNlKSwgcy0+Zik7CisgICAgIFtjb2xvciBzZXRdOyAqLworICBpZiAoZ2x5cGhfZmxhdm9y
ID09IE1DX0dMWVBICisgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEhMRVNTKQorICAg
IFtbTlNDb2xvciBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOiBsc2wucmVkCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JlZW46IGxzbC5ncmVlbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibHVlOiBsc2wuYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFscGhhOiAxLjBdIHNldF07CisgICAgZWxzZQorICAgICAgW0ZSQU1FX0NVUlNPUl9DT0xPUiAo
Zikgc2V0XTsKKyAgaWYgKGN1cnNvcl90eXBlID09IE1DX0ZSQU1FRF9CT1gpCisgICAgeworICAg
ICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKHctPmNvbnRlbnRzKTsKKyAgICAgIGJvb2wg
cmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBtYXJrX2FjdGl2ZSkpKTsK
KyAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBtY19yZWdp
b25fbGltaXQgKDEpIDogLTE7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2VuZCA9IChyZWdpb25f
YWN0aXZlX3ApID8gbWNfcmVnaW9uX2xpbWl0ICgwKSA6IC0xOworICAgICAgaWYgKHJlZ2lvbl9h
Y3RpdmVfcAorICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgJiYgY3Vyc29yX2dseXBo
LT5jaGFycG9zID09IHJlZ2lvbl9iZWcpCisgICAgICAgIHsKKyAgICAgICAgICBlbnVtIGZhY2Vf
aWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAo
dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIp
LCB0cnVlKTsKKyAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVn
X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlX2lk
KTsKKyAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfY29sb3IgPSBu
c19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChob2xsb3dfYWN0aXZl
X3JlZ2lvbl9iZWdfZmFjZSksIGYpOworICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19h
Y3RpdmVfcmVnaW9uX2JlZ19jb2xvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZWdp
b25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAg
ICAgJiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09IHJlZ2lvbl9lbmQpCisgICAgICAgICAgewor
ICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lk
ID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1h
dC1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAq
aG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19h
Y3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lkKTsKKyAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19h
Y3RpdmVfcmVnaW9uX2VuZF9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNF
X0JBQ0tHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlKSwgZik7CisgICAgICAg
ICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfY29sb3I7CisgICAg
ICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAg
ICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2dseXBoLT5j
aGFycG9zID4gcmVnaW9uX2JlZworICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+
Y2hhcnBvcyA8IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVudW0g
ZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2VfaWQgPSBsb29rdXBfbmFt
ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluLXJlZ2lvbi1wcmUt
enYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3Rp
dmVfcmVnaW9uX2JldHdlZW5fZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9y
ZWdpb25fYmV0d2Vlbl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgTlNDb2xvciAqaG9sbG93X2Fj
dGl2ZV9yZWdpb25fYmV0d2Vlbl9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19G
QUNFX0ZPUkVHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZSksIGYpOwor
ICAgICAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVu
X2NvbG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYWN0aXZlX3ApCisg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2
ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtl
LWN1cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj
ZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2Zh
Y2VfaWQpOworICAgICAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19hY3RpdmVfY29sb3IgPSBu
c19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChob2xsb3dfYWN0aXZl
X2ZhY2UpLCBmKTsKKyAgICAgICAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZl
X2NvbG9yOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIFRoZSByZWdpb24gaXMg
X25vdF8gdmlzaWJsZSBpbiB0aGUgaW5hY3RpdmUgd2luZG93IGJlY2F1c2UgdGhlIG92ZXJsYXkg
d2luZG93IHByb3BlcnR5IGlzIHVzZWQuICovCisgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3Rp
dmVfcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQg
aG9sbG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu
ICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpOworICAg
ICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9G
Uk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICBO
U0NvbG9yICpob2xsb3dfaW5hY3RpdmVfY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAo
TlNfRkFDRV9CQUNLR1JPVU5EIChob2xsb3dfaW5hY3RpdmVfZmFjZSksIGYpOworICAgICAgICAg
ICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2luYWN0aXZlX2NvbG9yOworICAgICAgICAg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmFjZSAmJiBOU19GQUNFX0JBQ0tHUk9VTkQg
KGZhY2UpID09IG5zX2luZGV4X2NvbG9yIChGUkFNRV9DVVJTT1JfQ09MT1IgKGYpLCBmKSkKKyAg
ICAgIHsKKyAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9V
TkQgKGZhY2UpLCBmKSBzZXRdOworICAgICAgICBob2xsb3dfY29sb3IgPSBGUkFNRV9DVVJTT1Jf
Q09MT1IgKGYpOworICAgICAgfQorI2lmZGVmIE5TX0lNUExfQ09DT0EKKyAgTlNEaXNhYmxlU2Ny
ZWVuVXBkYXRlcyAoKTsKKyNlbmRpZgorICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgTUNfTk9fRlJJTkdFX0JJVE1BUDoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IE1DX05PX0NVUlNPUjoKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX1JJR0hUX0ZSSU5H
RV9CSVRNQVA6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBNQ19MRUZUX0ZSSU5HRV9CSVRN
QVA6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgICAgICBO
U1JlY3RGaWxsIChyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1DX0ZSQU1FRF9CT1g6
CisgICAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgICBbaG9sbG93X2NvbG9yIHNldF07Cisg
ICAgICAgIE5TUmVjdEZpbGwgKE5TSW5zZXRSZWN0IChyLCAxLCAxKSk7CisgICAgICAgIFtGUkFN
RV9DVVJTT1JfQ09MT1IgKGYpIHNldF07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBNQ19I
T0xMT1dfQk9YOgorICAgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgICAgW2hvbGxvd19jb2xv
ciBzZXRdOworICAgICAgICBOU1JlY3RGaWxsIChOU0luc2V0UmVjdCAociwgMSwgMSkpOworICAg
ICAgICBbRlJBTUVfQ1VSU09SX0NPTE9SIChmKSBzZXRdOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgTUNfSEJBUjoKKyAgICAgICAgTlNSZWN0RmlsbCAocik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBNQ19CQVI6CisgICAgICAgIHMgPSByOworICAgICAgICAvKiBAbGF3bGlzdCBp
cyBmb2N1c2luZyB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBvZiBmZWF0dXJlIHJlcXVlc3RzCisg
ICAgICAgICMxNzY4NCBhbmQgIzIyODczIG9uIEwyUiBsYW5ndWFnZXMuICovCisgICAgICAgIGlm
IChnbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEgKKyAgICAgICAgICAgICYmIGdseXBoX2ZsYXZvciAh
PSBNQ19HTFlQSExFU1MpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSWYgdGhlIGNoYXJh
Y3RlciB1bmRlciBjdXJzb3IgaXMgUjJMLCBkcmF3IHRoZSBiYXIgY3Vyc29yCisgICAgICAgICAg
ICAgICBvbiB0aGUgcmlnaHQgb2YgaXRzIGdseXBoLCByYXRoZXIgdGhhbiBvbiB0aGUgbGVmdC4g
Ki8KKyAgICAgICAgICAgIGlmICgoY3Vyc29yX2dseXBoLT5yZXNvbHZlZF9sZXZlbCAmIDEpICE9
IDApCisgICAgICAgICAgICAgIHMub3JpZ2luLnggKz0gY3Vyc29yX2dseXBoLT5waXhlbF93aWR0
aCAtIHMuc2l6ZS53aWR0aDsKKyAgICAgICAgICB9CisgICAgICAgIE5TUmVjdEZpbGwgKHMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgIG5zX3Jlc2V0X2NsaXBwaW5nIChmKTsKKyAgLyogZHJh
dyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgKi8KKyAgaWYgKGdseXBoX2ZsYXZvciAh
PSBNQ19HTFlQSExFU1MKKyAgICAgICYmIChjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURfQk9YCisg
ICAgICAgICAgfHwgY3Vyc29yX3R5cGUgPT0gTUNfRklMTEVEX0JPWAorICAgICAgICAgIHx8IGN1
cnNvcl90eXBlID09IE1DX0hPTExPV19CT1gKKyAgICAgICAgICB8fCAoZGVidWdfcAorICAgICAg
ICAgICAgICAmJiBjdXJzb3JfdHlwZSA9PSBNQ19IQkFSKQorICAgICAgICAgIHx8IChkZWJ1Z19w
CisgICAgICAgICAgICAgICYmIGN1cnNvcl90eXBlID09IE1DX0JBUikpKQorICAgIHsKKyAgICAg
IC8qIGBjdXJzb3JfZ2NfcGAgaXMgdXNlZCBvbmx5IGJ5IGB3MzJ0ZXJtLmNgIGFuZCBgeHRlcm0u
YycuICovCisgICAgICBib29sIGN1cnNvcl9nY19wID0gZmFsc2U7CisgICAgICBjb25zdCBFbWFj
c19SZWN0YW5nbGUgKnNhdmVkX2NsaXAgPSBOVUxMOworICAgICAgaWYgKHJvdy0+Y2xpcCAhPSBO
VUxMKQorICAgICAgICB7CisgICAgICAgICAgc2F2ZWRfY2xpcCA9IHJvdy0+Y2xpcDsKKyAgICAg
ICAgICByb3ctPmNsaXAgPSBOVUxMOworICAgICAgICB9CisgICAgICBtY19kcmF3X2N1cnNvcl9n
bHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2Qs
IGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisgICAgICBpZiAoc2F2ZWRfY2xpcCAhPSBOVUxMKQor
ICAgICAgICByb3ctPmNsaXAgPSBzYXZlZF9jbGlwOworICAgIH0KKyNpZmRlZiBOU19JTVBMX0NP
Q09BCisgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcyAoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9p
ZAorbWNfbnNfZHJhd190ZXh0X2RlY29yYXRpb24gKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0
cnVjdCBmYWNlICpmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TQ29sb3IgKmRlZmF1
bHRDb2wsIENHRmxvYXQgd2lkdGgsIENHRmxvYXQgeCkKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICBEcmF3IHVuZGVybGluZSwgb3ZlcmxpbmUsIGFuZCBzdHJpa2UtdGhyb3VnaCBvbiBnbHlwaCBz
dHJpbmcgcy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit7CisgIGlmIChzLT5mb3Jfb3Zlcmxh
cHMpCisgICAgcmV0dXJuOworICAvKiBEbyB1bmRlcmxpbmUuICovCisgIGlmIChmYWNlLT51bmRl
cmxpbmVfcCkKKyAgICB7CisgICAgICBpZiAocy0+ZmFjZS0+dW5kZXJsaW5lX3R5cGUgPT0gRkFD
RV9VTkRFUl9XQVZFKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGZhY2UtPnVuZGVybGluZV9k
ZWZhdWx0ZWRfcCkKKyAgICAgICAgICAgIFtkZWZhdWx0Q29sIHNldF07CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoZmFjZS0+dW5kZXJs
aW5lX2NvbG9yLCBzLT5mKSBzZXRdOworICAgICAgICAgIG5zX2RyYXdfdW5kZXJ3YXZlIChzLCB3
aWR0aCwgeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy0+ZmFjZS0+dW5kZXJsaW5l
X3R5cGUgPT0gRkFDRV9VTkRFUl9MSU5FKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIE5TUmVj
dCByOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGlja25lc3MsIHBvc2l0aW9uOworICAg
ICAgICAgICAgLyogSWYgdGhlIHByZXYgd2FzIHVuZGVybGluZWQsIG1hdGNoIGl0cyBhcHBlYXJh
bmNlLiAqLworICAgICAgICAgICAgaWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJs
aW5lX3AKKyAgICAgICAgICAgICAgICAmJiBzLT5wcmV2LT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9
PSBGQUNFX1VOREVSX0xJTkUKKyAgICAgICAgICAgICAgICAmJiBzLT5wcmV2LT51bmRlcmxpbmVf
dGhpY2tuZXNzID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaWNrbmVz
cyA9IHMtPnByZXYtPnVuZGVybGluZV90aGlja25lc3M7CisgICAgICAgICAgICAgICAgcG9zaXRp
b24gPSBzLT5wcmV2LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHN0cnVj
dCBmb250ICpmb250OworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkZXNjZW50Owor
ICAgICAgICAgICAgICAgICAgZm9udD1zLT5mb250OworICAgICAgICAgICAgICAgICAgZGVzY2Vu
dCA9IHMtPnkgKyBzLT5oZWlnaHQgLSBzLT55YmFzZTsKKyAgICAgICAgICAgICAgICAgIC8qIFVz
ZSB1bmRlcmxpbmUgdGhpY2tuZXNzIG9mIGZvbnQsIGRlZmF1bHRpbmcgdG8gMS4gKi8KKyAgICAg
ICAgICAgICAgICAgIHRoaWNrbmVzcyA9IChmb250ICYmIGZvbnQtPnVuZGVybGluZV90aGlja25l
c3MgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb250LT51bmRlcmxpbmVf
dGhpY2tuZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisgICAgICAgICAg
ICAgICAgICAvKiBEZXRlcm1pbmUgdGhlIG9mZnNldCBvZiB1bmRlcmxpbmluZyBmcm9tIHRoZSBi
YXNlbGluZS4gKi8KKyAgICAgICAgICAgICAgICAgIGlmICh4X3VuZGVybGluZV9hdF9kZXNjZW50
X2xpbmUpCisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gZGVzY2VudCAtIHRoaWNrbmVz
czsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeF91c2VfdW5kZXJsaW5lX3Bvc2l0aW9u
X3Byb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZm9udCAmJiBmb250
LT51bmRlcmxpbmVfcG9zaXRpb24gPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlv
biA9IGZvbnQtPnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChmb250KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBscm91bmQgKGZv
bnQtPmRlc2NlbnQgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSB1bmRlcmxpbmVfbWluaW11bV9vZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IG1heCAocG9zaXRpb24sIHVuZGVybGluZV9taW5p
bXVtX29mZnNldCk7CisgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgdW5kZXJsaW5pbmcgaXMg
bm90IGNyb3BwZWQuICovCisgICAgICAgICAgICAgICAgICBpZiAoZGVzY2VudCA8PSBwb3NpdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9u
ID0gZGVzY2VudCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzID0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZXNjZW50
IDwgcG9zaXRpb24gKyB0aGlja25lc3MpCisgICAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNz
ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzLT51bmRlcmxpbmVfdGhpY2tu
ZXNzID0gdGhpY2tuZXNzOworICAgICAgICAgICAgcy0+dW5kZXJsaW5lX3Bvc2l0aW9uID0gcG9z
aXRpb247CisgICAgICAgICAgICByID0gTlNNYWtlUmVjdCAoeCwgcy0+eWJhc2UgKyBwb3NpdGlv
biwgd2lkdGgsIHRoaWNrbmVzcyk7CisgICAgICAgICAgICBpZiAoZmFjZS0+dW5kZXJsaW5lX2Rl
ZmF1bHRlZF9wKQorICAgICAgICAgICAgICBbZGVmYXVsdENvbCBzZXRdOworICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChmYWNlLT51
bmRlcmxpbmVfY29sb3IsIHMtPmYpIHNldF07CisgICAgICAgICAgICBOU1JlY3RGaWxsIChyKTsK
KyAgICAgICAgICB9CisgICAgfQorICAvKiBEbyBvdmVybGluZS4gV2UgZm9sbG93IG90aGVyIHRl
cm1zIGluIHVzaW5nIGEgdGhpY2tuZXNzIG9mIDEKKyAgICAgYW5kIGlnbm9yaW5nIG92ZXJsaW5l
X21hcmdpbi4gKi8KKyAgaWYgKGZhY2UtPm92ZXJsaW5lX3ApCisgICAgeworICAgICAgTlNSZWN0
IHI7CisgICAgICByID0gTlNNYWtlUmVjdCAoeCwgcy0+eSwgd2lkdGgsIDEpOworICAgICAgaWYg
KGZhY2UtPm92ZXJsaW5lX2NvbG9yX2RlZmF1bHRlZF9wKQorICAgICAgICBbZGVmYXVsdENvbCBz
ZXRdOworICAgICAgICBlbHNlCisgICAgICAgICAgW25zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChm
YWNlLT5vdmVybGluZV9jb2xvciwgcy0+Zikgc2V0XTsKKyAgICAgIE5TUmVjdEZpbGwgKHIpOwor
ICAgIH0KKyAgLyogRG8gc3RyaWtlLXRocm91Z2guICBXZSBmb2xsb3cgb3RoZXIgdGVybXMgZm9y
IHRoaWNrbmVzcyBhbmQKKyAgICAgdmVydGljYWwgcG9zaXRpb24uKi8KKyAgaWYgKGZhY2UtPnN0
cmlrZV90aHJvdWdoX3ApCisgICAgeworICAgICAgTlNSZWN0IHI7CisgICAgICB1bnNpZ25lZCBs
b25nIGR5OworICAgICAgZHkgPSBscmludCAoKHMtPmhlaWdodCAtIDEpIC8gMik7CisgICAgICBy
ID0gTlNNYWtlUmVjdCAoeCwgcy0+eSArIGR5LCB3aWR0aCwgMSk7CisgICAgICBpZiAoZmFjZS0+
c3RyaWtlX3Rocm91Z2hfY29sb3JfZGVmYXVsdGVkX3ApCisgICAgICAgIFtkZWZhdWx0Q29sIHNl
dF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKGZh
Y2UtPnN0cmlrZV90aHJvdWdoX2NvbG9yLCBzLT5mKSBzZXRdOworICAgICAgTlNSZWN0RmlsbCAo
cik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbWNfbnNfZHVtcGdseXBoc19zdHJldGNoIChz
dHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgc3RydWN0IG1jX21h
dHJpeCBtY19tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZCkKK3sKKyAg
TlNSZWN0IHJbMl07CisgIGludCBuLCBpOworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTlNDb2xv
ciAqZmdDb2wsICpiZ0NvbDsKKyAgaWYgKCFzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wKQorICAgIHsK
KyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgcik7CisgICAgICBp
ZiAoIW5zX2NsaXBfdG9fcmVjdCAocy0+ZiwgciwgbikpCisgICAgICAgIHJldHVybjsKKyAgICAg
ICpyID0gTlNNYWtlUmVjdCAocy0+eCwgcy0+eSwgcy0+YmFja2dyb3VuZF93aWR0aCwgcy0+aGVp
Z2h0KTsKKyAgICAgIGlmIChzLT5obCA9PSBEUkFXX01PVVNFX0ZBQ0UpCisgICAgICAgIHsKKyAg
ICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9ITF9JTkZPIChzLT5mKS0+
bW91c2VfZmFjZV9mYWNlX2lkKTsKKyAgICAgICAgICBpZiAoIWZhY2UpCisgICAgICAgICAgICBm
YWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9GQUNFX0lEKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBzLT5maXJzdF9n
bHlwaC0+ZmFjZV9pZCk7CisgICAgICBiZ0NvbCA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChO
U19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpLCBzLT5mKTsKKyAgICAgIGZnQ29sID0gbnNfbG9va3Vw
X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIHMtPmYpOworICAgICAg
Zm9yIChpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgeworICAgICAgICAgIGlmICghcy0+cm93
LT5mdWxsX3dpZHRoX3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBvdmVycnVu
LCBsZWZ0b3ZlcnJ1bjsKKyAgICAgICAgICAgICAgLyogdHJ1bmNhdGUgdG8gYXZvaWQgb3Zlcndy
aXRpbmcgZnJpbmdlIGFuZC9vciBzY3JvbGxiYXIgKi8KKyAgICAgICAgICAgICAgb3ZlcnJ1biA9
IG1heCAoMCwgKHMtPnggKyBzLT5iYWNrZ3JvdW5kX3dpZHRoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLSAoV0lORE9XX0JPWF9SSUdIVF9FREdFX1ggKHMtPncpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIFdJTkRPV19SSUdIVF9GUklOR0VfV0lEVEggKHMtPncp
KSk7CisgICAgICAgICAgICAgICAgICAgIHJbaV0uc2l6ZS53aWR0aCAtPSBvdmVycnVuOworICAg
ICAgICAgICAgICAvKiB0cnVuY2F0ZSB0byBhdm9pZCBvdmVyd3JpdGluZyB0byBsZWZ0IG9mIHRo
ZSB3aW5kb3cgYm94ICovCisgICAgICAgICAgICAgIGxlZnRvdmVycnVuID0gKFdJTkRPV19CT1hf
TEVGVF9FREdFX1ggKHMtPncpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0lORE9X
X0xFRlRfRlJJTkdFX1dJRFRIIChzLT53KSkgLSBzLT54OworICAgICAgICAgICAgICBpZiAobGVm
dG92ZXJydW4gPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHJbaV0u
b3JpZ2luLnggKz0gbGVmdG92ZXJydW47CisgICAgICAgICAgICAgICAgICByW2ldLnNpemUud2lk
dGggLT0gbGVmdG92ZXJydW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgIFtiZ0NvbCBzZXRdOworICAgICAgICAgIC8qIE5PVEU6IHVuZGVyIE5TIHRoaXMgaXMg
Tk9UIHVzZWQgdG8gZHJhdyBjdXJzb3JzLCBidXQgd2UgbXVzdCBhdm9pZAorICAgICAgICAgICAg
IG92ZXJ3cml0aW5nIGN1cnNvciAodXN1YWxseSB3aGVuIGN1cnNvciBvbiBhIHRhYikgKi8KKyAg
ICAgICAgICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIC8qIEZJWE1FOiAgRG8gd2Ugc3RpbGwgbmVlZCB0byBwcmV2ZW50IHRoaXMgc2VjdGlv
biBvZiBjb2RlIGZyb20KKyAgICAgICAgICAgICAgZXJhc2luZyB0aGUgZmFrZSBNQ19IQkFSIHRo
YXQgZXh0ZW5kcyB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUKKyAgICAgICAgICAgICAgU1RSRVRD
SF9HTFlQSD8gIFRoaXMgbWF5IGhhdmUgYmVlbiBkb25lIHByaW9yIHRvIHRoZSBmaXggcmVsYXRp
bmcKKyAgICAgICAgICAgICAgdG8gbGVmdC9yaWdodCBvdmVyd3JpdHRlbiBnbHlwaHMuICovCisg
ICAgICAgICAgICAgIHJbaV0uc2l6ZS5oZWlnaHQgLT0gMTsKKyAgICAgICAgICAgICAgLy8gIGVu
dW0gZmFjZV9pZCBkZWJ1Z2dpbmdfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChzLT53LCBz
LT5mLCBpbnRlcm4gKCIrLWRlYnVnZ2luZy1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAv
LyAgc3RydWN0IGZhY2UgKmRlYnVnZ2luZ19mYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBkZWJ1
Z2dpbmdfZmFjZV9pZCk7CisgICAgICAgICAgICAgIC8vICBOU0NvbG9yICpjb2xvciA9IG5zX2xv
b2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGRlYnVnZ2luZ19mYWNlKSwg
cy0+Zik7CisgICAgICAgICAgICAgIC8vICBbY29sb3Igc2V0XTsKKyAgICAgICAgICAgICAgQ0dG
bG9hdCB4ID0gcltpXS5vcmlnaW4ueDsKKyAgICAgICAgICAgICAgQ0dGbG9hdCB3aWR0aCA9IHdk
OworICAgICAgICAgICAgICByW2ldLnNpemUud2lkdGggLT0gd2lkdGg7CisgICAgICAgICAgICAg
IHJbaV0ub3JpZ2luLnggKz0gd2lkdGg7CisgICAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJbaV0p
OworICAgICAgICAgICAgICAvKiBEcmF3IG92ZXJsaW5pbmcsIGV0Yy4gb24gdGhlIGN1cnNvci4g
Ki8KKyAgICAgICAgICAgICAgaWYgKHMtPnctPnBoeXNfY3Vyc29yX3R5cGUgPT0gTUNfRklMTEVE
X0JPWCkKKyAgICAgICAgICAgICAgICBtY19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgZmFj
ZSwgYmdDb2wsIHdpZHRoLCB4KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICBtY19uc19kcmF3X3RleHRfZGVjb3JhdGlvbiAocywgZmFjZSwgZmdDb2wsIHdpZHRoLCB4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgIC8vICBp
bnQgcnggPSByW2ldLm9yaWdpbi54OworICAvLyAgaW50IHJ5ID0gcltpXS5vcmlnaW4ueTsKKyAg
Ly8gIGludCBydyA9IHJbaV0uc2l6ZS53aWR0aDsKKyAgLy8gIGludCByaCA9IHJbaV0uc2l6ZS5o
ZWlnaHQ7CisgIC8vICBmcHJpbnRmIChzdGRlcnIsICJtY19uc19kdW1wZ2x5cGhzX3N0cmV0Y2g6
ICB2cG9zICglZCkgfCByeCAoJWQpIHwgcnkgKCVkKSB8IHJ3ICglZCkgfCByaCAoJWQpXG4iLAor
ICAvLyAgICAgICAgICAgICAgICAgICBzLT5maXJzdF9nbHlwaC0+dnBvcywgcngsIHJ5LCBydywg
cmgpOworICAgICAgICAgICAgICBOU1JlY3RGaWxsIChyW2ldKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAvKiBEcmF3IG92ZXJsaW5pbmcsIGV0Yy4gb24gdGhlIHN0cmV0Y2ggZ2x5cGggKG9y
IHRoZSBwYXJ0CisgICAgICAgICAgICAgb2YgdGhlIHN0cmV0Y2ggZ2x5cGggYWZ0ZXIgdGhlIGN1
cnNvcikuICovCisgICAgICAgICAgbWNfbnNfZHJhd190ZXh0X2RlY29yYXRpb24gKHMsIGZhY2Us
IGZnQ29sLCByW2ldLnNpemUud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJbaV0ub3JpZ2luLngpOworICAgICAgICB9CisgICAgICBpZiAoKHMtPmxlZnRfb3Zl
cndyaXR0ZW5fcCB8fCBzLT5yaWdodF9vdmVyd3JpdHRlbl9wKQorICAgICAgICAgICYmIChzLT5h
Y3Rpb25fdHlwZSA9PSBNQ19EUkFXX0dMWVBIX1NUUklORyB8fCBzLT5hY3Rpb25fdHlwZSA9PSBN
Q19FUkFTRV9HTFlQSF9TVFJJTkcpKQorICAgICAgICBtY19uc19kcmF3X292ZXJ3cml0dGVuIChz
LCBtYXRyaXgsIHJvdywgbWNfbWF0cml4LCBzLT5maXJzdF9nbHlwaCk7CisgICAgICBuc19yZXNl
dF9jbGlwcGluZyAocy0+Zik7CisgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gMTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkCittY19uc19kdW1wZ2x5cGhzX2ltYWdlIChzdHJ1Y3QgZ2x5
cGhfc3RyaW5nICpzLCBOU1JlY3Qgciwgc3RydWN0IG1jX1JHQiBsc2wsCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsIGVudW0gbWNfY3Vyc29yX3R5
cGUgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2ZV9wKQor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIFJlbmRlcnMgYW4gaW1hZ2UgYW5kIGFzc29jaWF0
ZWQgYm9yZGVycy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit7CisgIEVtYWNzSW1hZ2UgKmlt
ZyA9IHMtPmltZy0+cGl4bWFwOworICBpbnQgYm94X2xpbmVfdndpZHRoID0gbWF4IChzLT5mYWNl
LT5ib3hfbGluZV93aWR0aCwgMCk7CisgIGludCB4ID0gcy0+eCwgeSA9IHMtPnliYXNlIC0gaW1h
Z2VfYXNjZW50IChzLT5pbWcsIHMtPmZhY2UsICZzLT5zbGljZSk7CisgIGludCBiZ194LCBiZ195
LCBiZ19oZWlnaHQ7CisgIGludCB0aDsKKyAgY2hhciByYWlzZWRfcDsKKyAgTlNSZWN0IGJyOwor
ICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTlNDb2xvciAqdGRDb2w7CisgIE5TVFJBQ0UgKCJtY19u
c19kdW1wZ2x5cGhzX2ltYWdlIik7CisgIGlmIChzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gK
KyAgICAgICYmIHMtPmZpcnN0X2dseXBoLT5sZWZ0X2JveF9saW5lX3AgJiYgcy0+c2xpY2UueCA9
PSAwKQorICAgIHggKz0gYWJzIChzLT5mYWNlLT5ib3hfbGluZV93aWR0aCk7CisgIGJnX3ggPSB4
OworICBiZ195ID0gIHMtPnNsaWNlLnkgPT0gMCA/IHMtPnkgOiBzLT55ICsgYm94X2xpbmVfdndp
ZHRoOworICBiZ19oZWlnaHQgPSBzLT5oZWlnaHQ7CisgIC8qIG90aGVyIHRlcm1zIGhhdmUgdGhp
cywgYnV0IHdhcyBjYXVzaW5nIHByb2JsZW1zIHcvdGFiYmFyIG1vZGUgKi8KKyAgLyogLSAyICog
Ym94X2xpbmVfdndpZHRoOyAqLworICBpZiAocy0+c2xpY2UueCA9PSAwKSB4ICs9IHMtPmltZy0+
aG1hcmdpbjsKKyAgaWYgKHMtPnNsaWNlLnkgPT0gMCkgeSArPSBzLT5pbWctPnZtYXJnaW47Cisg
IC8qIERyYXcgQkc6IGlmIHdlIG5lZWQgbGFyZ2VyIGFyZWEgdGhhbiBpbWFnZSBpdHNlbGYgY2xl
YXJlZCwgZG8gdGhhdCwKKyAgICAgb3RoZXJ3aXNlLCBzaW5jZSB3ZSBjb21wb3NpdGUgdGhlIGlt
YWdlIHVuZGVyIE5TIChpbnN0ZWFkIG9mIG11Y2tpbmcKKyAgICAgd2l0aCBpdHMgYmFja2dyb3Vu
ZCBjb2xvciksIHdlIG11c3QgY2xlYXIganVzdCB0aGUgaW1hZ2UgYXJlYS4gKi8KKyAgaWYgKHMt
PmhsID09IERSQVdfTU9VU0VfRkFDRSkKKyAgICB7CisgICAgICBmYWNlID0gRkFDRV9GUk9NX0lE
IChzLT5mLCBNT1VTRV9ITF9JTkZPIChzLT5mKS0+bW91c2VfZmFjZV9mYWNlX2lkKTsKKyAgICAg
IGlmICghZmFjZSkKKyAgICAgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+ZiwgTU9VU0VfRkFD
RV9JRCk7CisgICAgfQorICBlbHNlCisgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAocy0+Ziwgcy0+
Zmlyc3RfZ2x5cGgtPmZhY2VfaWQpOworICBbbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZB
Q0VfQkFDS0dST1VORCAoZmFjZSksIHMtPmYpIHNldF07CisgIGlmIChiZ19oZWlnaHQgPiBzLT5z
bGljZS5oZWlnaHQgfHwgcy0+aW1nLT5obWFyZ2luIHx8IHMtPmltZy0+dm1hcmdpbgorICAgICAg
fHwgcy0+aW1nLT5tYXNrIHx8IHMtPmltZy0+cGl4bWFwID09IDAgfHwgcy0+d2lkdGggIT0gcy0+
YmFja2dyb3VuZF93aWR0aCkKKyAgICB7CisgICAgICBiciA9IE5TTWFrZVJlY3QgKGJnX3gsIGJn
X3ksIHMtPmJhY2tncm91bmRfd2lkdGgsIGJnX2hlaWdodCk7CisgICAgICBzLT5iYWNrZ3JvdW5k
X2ZpbGxlZF9wID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgYnIgPSBOU01ha2VSZWN0ICh4
LCB5LCBzLT5zbGljZS53aWR0aCwgcy0+c2xpY2UuaGVpZ2h0KTsKKyAgTlNSZWN0RmlsbCAoYnIp
OworICAvKiBEcmF3IHRoZSBpbWFnZS4uIGRvIHdlIG5lZWQgdG8gZHJhdyBwbGFjZWhvbGRlciBp
ZiBpbWcgPT1uaWw/ICovCisgIGlmIChpbWcgIT0gbmlsKQorICAgIHsKKyNpZmRlZiBOU19JTVBM
X0NPQ09BCisgICAgICBOU1JlY3QgZHIgPSBOU01ha2VSZWN0ICh4LCB5LCBzLT5zbGljZS53aWR0
aCwgcy0+c2xpY2UuaGVpZ2h0KTsKKyAgICAgIE5TUmVjdCBpciA9IE5TTWFrZVJlY3QgKHMtPnNs
aWNlLngsIHMtPnNsaWNlLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zbGlj
ZS53aWR0aCwgcy0+c2xpY2UuaGVpZ2h0KTsKKyAgICAgIFtpbWcgZHJhd0luUmVjdDogZHIKKyAg
ICAgICAgICAgICBmcm9tUmVjdDogaXIKKyAgICAgICAgICAgICBvcGVyYXRpb246IE5TQ29tcG9z
aXRlU291cmNlT3ZlcgorICAgICAgICAgICAgICBmcmFjdGlvbjogMS4wCisgICAgICAgICAgIHJl
c3BlY3RGbGlwcGVkOiBZRVMKKyAgICAgICAgICAgICAgICBoaW50czogbmlsXTsKKyNlbHNlCisg
ICAgICBbaW1nIGNvbXBvc2l0ZVRvUG9pbnQ6IE5TTWFrZVBvaW50ICh4LCB5ICsgcy0+c2xpY2Uu
aGVpZ2h0KQorICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBOU0NvbXBvc2l0ZVNvdXJjZU92
ZXJdOworI2VuZGlmCisgICAgfQorICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgewor
ICAgICAgW0ZSQU1FX0NVUlNPUl9DT0xPUiAocy0+Zikgc2V0XTsKKyAgICAgIGlmIChzLT53LT5w
aHlzX2N1cnNvcl90eXBlID09IE1DX0ZJTExFRF9CT1gpCisgICAgICAgIHRkQ29sID0gbnNfbG9v
a3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSksIHMtPmYpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgLyogQ3VycmVudGx5IG9uIE5TIGltZy0+bWFzayBpcyBhbHdh
eXMgMC4gU2luY2UKKyAgICAgICAgICAgICBnZXRfd2luZG93X2N1cnNvcl90eXBlIHNwZWNpZmll
cyBhIGhvbGxvdyBib3ggY3Vyc29yIHdoZW4gb24KKyAgICAgICAgICAgICBhIG5vbi1tYXNrZWQg
aW1hZ2Ugd2UgbmV2ZXIgcmVhY2ggdGhpcyBjbGF1c2UuIEJ1dCB3ZSBwdXQgaXQKKyAgICAgICAg
ICAgICBpbiBpbiBhbnRpY2lwYXRpb24gb2YgYmV0dGVyIHN1cHBvcnQgZm9yIGltYWdlIG1hc2tz
IG9uIE5TLiAqLworICAgICAgICAgIHRkQ29sID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5T
X0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIHMtPmYpOworICAgIH0KKyAgICBlbHNlCisgICAgICB0
ZENvbCA9IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGZhY2Up
LCBzLT5mKTsKKyAgLyogRHJhdyB1bmRlcmxpbmUsIG92ZXJsaW5lLCBzdHJpa2UtdGhyb3VnaC4g
Ki8KKyAgbWNfbnNfZHJhd190ZXh0X2RlY29yYXRpb24gKHMsIGZhY2UsIHRkQ29sLCBici5zaXpl
LndpZHRoLCBici5vcmlnaW4ueCk7CisgIC8qIERyYXcgcmVsaWVmLCBpZiByZXF1ZXN0ZWQgKi8K
KyAgaWYgKHMtPmltZy0+cmVsaWVmIHx8IHMtPmhsID09RFJBV19JTUFHRV9SQUlTRUQgfHwgcy0+
aGwgPT1EUkFXX0lNQUdFX1NVTktFTikKKyAgICB7CisgICAgICBpZiAocy0+aGwgPT0gRFJBV19J
TUFHRV9TVU5LRU4gfHwgcy0+aGwgPT0gRFJBV19JTUFHRV9SQUlTRUQpCisgICAgICAgIHsKKyAg
ICAgICAgICB0aCA9IHRvb2xfYmFyX2J1dHRvbl9yZWxpZWYgPj0gMCA/CisgICAgICAgICAgICB0
b29sX2Jhcl9idXR0b25fcmVsaWVmIDogREVGQVVMVF9UT09MX0JBUl9CVVRUT05fUkVMSUVGOwor
ICAgICAgICAgIHJhaXNlZF9wID0gKHMtPmhsID09IERSQVdfSU1BR0VfUkFJU0VEKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgdGggPSBhYnMgKHMt
PmltZy0+cmVsaWVmKTsKKyAgICAgICAgICAgIHJhaXNlZF9wID0gKHMtPmltZy0+cmVsaWVmID4g
MCk7CisgICAgICAgICAgfQorICAgICAgci5vcmlnaW4ueCA9IHggLSB0aDsKKyAgICAgIHIub3Jp
Z2luLnkgPSB5IC0gdGg7CisgICAgICByLnNpemUud2lkdGggPSBzLT5zbGljZS53aWR0aCArIDIq
dGgtMTsKKyAgICAgIHIuc2l6ZS5oZWlnaHQgPSBzLT5zbGljZS5oZWlnaHQgKyAyKnRoLTE7Cisg
ICAgICBuc19kcmF3X3JlbGllZiAociwgdGgsIHJhaXNlZF9wLAorICAgICAgICAgICAgICAgICAg
ICAgIHMtPnNsaWNlLnkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICBzLT5zbGljZS55ICsg
cy0+c2xpY2UuaGVpZ2h0ID09IHMtPmltZy0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
IHMtPnNsaWNlLnggPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICBzLT5zbGljZS54ICsgcy0+
c2xpY2Uud2lkdGggPT0gcy0+aW1nLT53aWR0aCwgcyk7CisgICAgfQorICAvKiBJZiB0aGVyZSBp
cyBubyBtYXNrLCB0aGUgYmFja2dyb3VuZCB3b24ndCBiZSBzZWVuLAorICAgICBzbyBkcmF3IGEg
cmVjdGFuZ2xlIG9uIHRoZSBpbWFnZSBmb3IgdGhlIGN1cnNvci4KKyAgICAgRG8gdGhpcyBmb3Ig
YWxsIGltYWdlcywgZ2V0dGluZyB0cmFuc3BhcmVuY3kgcmlnaHQgaXMgbm90IHJlbGlhYmxlLiAq
LworICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgeworICAgICAgaW50IHRoaWNrbmVz
cyA9IGFicyAocy0+aW1nLT5yZWxpZWYpOworICAgICAgaWYgKHRoaWNrbmVzcyA9PSAwKSB0aGlj
a25lc3MgPSAxOworICAgIGlmIChnbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEgKKyAgICAgICAgfHwg
Z2x5cGhfZmxhdm9yID09IE1DX0dMWVBITEVTUykKKyAgICAgIHsKKyAgICAgICAgTlNDb2xvciAq
Ym9yZGVyX2NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoQ2FsaWJyYXRlZFJlZDogbHNsLnJlZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyZWVuOiBsc2wuZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmx1ZTogbHNsLmJsdWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogMS4wXTsKKyAgICAg
ICAgbnNfZHJhd19ib3ggKGJyLCB0aGlja25lc3MsIGJvcmRlcl9jb2xvciwgMSwgMSk7CisgICAg
ICB9CisgICAgICBlbHNlCisgICAgICAgIG5zX2RyYXdfYm94IChiciwgdGhpY2tuZXNzLCBGUkFN
RV9DVVJTT1JfQ09MT1IgKHMtPmYpLCAxLCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitt
Y19uc19tYXliZV9kdW1wZ2x5cGhzX2JhY2tncm91bmQgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMs
IGNoYXIgZm9yY2VfcCkKK3sKKyAgTlNUUkFDRSAoIm1jX25zX21heWJlX2R1bXBnbHlwaHNfYmFj
a2dyb3VuZCIpOworICBpZiAoIXMtPmJhY2tncm91bmRfZmlsbGVkX3AvKiB8fCBzLT5obCA9PSBE
UkFXX01PVVNFX0ZBQ0UqLykKKyAgICB7CisgICAgICBpbnQgYm94X2xpbmVfd2lkdGggPSBtYXgg
KHMtPmZhY2UtPmJveF9saW5lX3dpZHRoLCAwKTsKKyAgICAgIGlmIChGT05UX0hFSUdIVCAocy0+
Zm9udCkgPCBzLT5oZWlnaHQgLSAyICogYm94X2xpbmVfd2lkdGgKKyAgICAgICAgICAvKiBXaGVu
IHhkaXNwLmMgaWdub3JlcyBGT05UX0hFSUdIVCwgd2UgY2Fubm90IHRydXN0IGZvbnQKKyAgICAg
ICAgICAgICBkaW1lbnNpb25zLCBzaW5jZSB0aGUgYWN0dWFsIGdseXBocyBtaWdodCBiZSBtdWNo
CisgICAgICAgICAgICAgc21hbGxlci4gIFNvIGluIHRoYXQgY2FzZSB3ZSBhbHdheXMgY2xlYXIg
dGhlIHJlY3RhbmdsZQorICAgICAgICAgICAgIHdpdGggYmFja2dyb3VuZCBjb2xvci4gKi8KKyAg
ICAgICAgICB8fCBGT05UX1RPT19ISUdIIChzLT5mb250KQorICAgICAgICAgIHx8IHMtPmZvbnRf
bm90X2ZvdW5kX3AgfHwgcy0+ZXh0ZW5kc190b19lbmRfb2ZfbGluZV9wIHx8IGZvcmNlX3ApCisg
ICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgICAgICAgICBpZiAocy0+
aGwgPT0gRFJBV19NT1VTRV9GQUNFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmYWNl
ID0gRkFDRV9GUk9NX0lEIChzLT5mLCBNT1VTRV9ITF9JTkZPIChzLT5mKS0+bW91c2VfZmFjZV9m
YWNlX2lkKTsKKyAgICAgICAgICAgICAgaWYgKCFmYWNlKQorICAgICAgICAgICAgICAgIGZhY2Ug
PSBGQUNFX0ZST01fSUQgKHMtPmYsIE1PVVNFX0ZBQ0VfSUQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChzLT5mLCBz
LT5maXJzdF9nbHlwaC0+ZmFjZV9pZCk7CisgICAgICAgICAgaWYgKCFmYWNlLT5zdGlwcGxlKQor
ICAgICAgICAgICAgWyhOU19GQUNFX0JBQ0tHUk9VTkQgKGZhY2UpICE9IDAKKyAgICAgICAgICAg
ICAgPyBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSwg
cy0+ZikKKyAgICAgICAgICAgICAgOiBGUkFNRV9CQUNLR1JPVU5EX0NPTE9SIChzLT5mKSkgc2V0
XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0
cnVjdCBuc19kaXNwbGF5X2luZm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYp
OworICAgICAgICAgICAgICAgIFtbZHB5aW5mby0+Yml0bWFwc1tmYWNlLT5zdGlwcGxlLTFdLmlt
ZyBzdGlwcGxlTWFza10gc2V0XTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChzLT5o
bCAhPSBEUkFXX0NVUlNPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcy0+cmVjdGFu
Z2xlX251a2VkX3AgPSB0cnVlOworICAgICAgICAgICAgICBOU1JlY3QgciA9IE5TTWFrZVJlY3Qg
KHMtPngsIHMtPnkgKyBib3hfbGluZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHMtPmJhY2tncm91bmRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzLT5oZWlnaHQtMipib3hfbGluZV93aWR0aCk7CisgICAgICAgICAgICAgIE5T
UmVjdEZpbGwgKHIpOworICAgICAgICAgICAgfQorICAgICAgICAgIHMtPmJhY2tncm91bmRfZmls
bGVkX3AgPSAxOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbWNfbnNfZHJh
d19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBnbHlwaF9tYXRy
aXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpy
b3csIHN0cnVjdCBtY19tYXRyaXggbWNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBtY19SR0IgbHNsLCBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwgaW50IHdk
LCBib29sIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Vyc29yX2dj
X3ApCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgRXh0ZXJuYWwgKFJJRik6IE1haW4gZHJh
dy10ZXh0IGNhbGwuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworeworICBOU1JlY3QgclsyXTsK
KyAgaW50IG47CisgIGNoYXIgYm94X2RyYXduX3AgPSAwOworICBzdHJ1Y3QgZm9udCAqZm9udCA9
IHMtPmZhY2UtPmZvbnQ7CisgIGlmICghZm9udCkKKyAgICBmb250ID0gRlJBTUVfRk9OVCAocy0+
Zik7CisgIE5TVFJBQ0VfV0hFTiAoTlNUUkFDRV9HUk9VUF9HTFlQSFMsICJtY19uc19kcmF3X2ds
eXBoX3N0cmluZyIpOworICBpZiAocy0+bmV4dCAmJiBzLT5yaWdodF9vdmVyaGFuZyAmJiAhcy0+
Zm9yX292ZXJsYXBzKQorICAgIHsKKyAgICAgIGludCB3aWR0aDsKKyAgICAgIHN0cnVjdCBnbHlw
aF9zdHJpbmcgKm5leHQ7CisgICAgICBmb3IgKHdpZHRoID0gMCwgbmV4dCA9IHMtPm5leHQ7Cisg
ICAgICAgICAgIG5leHQgJiYgd2lkdGggPCBzLT5yaWdodF9vdmVyaGFuZzsKKyAgICAgICAgICAg
d2lkdGggKz0gbmV4dC0+d2lkdGgsIG5leHQgPSBuZXh0LT5uZXh0KQorICAgICAgICBpZiAobmV4
dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgIT0gSU1BR0VfR0xZUEgpCisgICAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG5leHQtPmZpcnN0X2dseXBoLT50eXBlICE9IFNUUkVUQ0hfR0xZUEgpCisgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuID0gbnNfZ2V0X2dseXBoX3N0cmluZ19jbGlw
X3JlY3QgKHMtPm5leHQsIHIpOworICAgICAgICAgICAgICAgIGlmICghbnNfY2xpcF90b19yZWN0
IChzLT5mLCByLCBuKSkKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBtY19uc19tYXliZV9kdW1wZ2x5cGhzX2JhY2tncm91bmQgKHMtPm5leHQsIDEpOworICAgICAg
ICAgICAgICAgIG5zX3Jlc2V0X2NsaXBwaW5nIChzLT5mKTsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWNfbnNfZHVtcGdseXBoc19zdHJldGNo
IChzLT5uZXh0LCBtYXRyaXgsIHJvdywgbWNfbWF0cml4LCB3ZCk7CisgICAgICAgICAgICBuZXh0
LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgIH0KKyAgICB9CisgIGlmICghcy0+Zm9yX292ZXJs
YXBzICYmIHMtPmZhY2UtPmJveCAhPSBGQUNFX05PX0JPWAorICAgICAgJiYgKHMtPmZpcnN0X2ds
eXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAgICB8fCBzLT5maXJzdF9nbHlwaC0+dHlw
ZSA9PSBDT01QT1NJVEVfR0xZUEgpKQorICAgIHsKKyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3Ry
aW5nX2NsaXBfcmVjdCAocywgcik7CisgICAgICBpZiAoIW5zX2NsaXBfdG9fcmVjdCAocy0+Ziwg
ciwgbikpCisgICAgICAgIHJldHVybjsKKyAgICAgIG1jX25zX21heWJlX2R1bXBnbHlwaHNfYmFj
a2dyb3VuZCAocywgMSk7CisgICAgICBuc19kdW1wZ2x5cGhzX2JveF9vcl9yZWxpZWYgKHMpOwor
ICAgICAgbnNfcmVzZXRfY2xpcHBpbmcgKHMtPmYpOworICAgICAgYm94X2RyYXduX3AgPSAxOwor
ICAgIH0KKyAgc3dpdGNoIChzLT5maXJzdF9nbHlwaC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBJ
TUFHRV9HTFlQSDoKKyAgICAgIG4gPSBuc19nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywg
cik7CisgICAgICBpZiAoIW5zX2NsaXBfdG9fcmVjdCAocy0+ZiwgciwgbikpCisgICAgICAgIHJl
dHVybjsKKyAgICAgIG1jX25zX2R1bXBnbHlwaHNfaW1hZ2UgKHMsIHJbMF0sIGxzbCwgZ2x5cGhf
Zmxhdm9yLCBjdXJzb3JfdHlwZSwgYWN0aXZlX3ApOworICAgICAgbnNfcmVzZXRfY2xpcHBpbmcg
KHMtPmYpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBTVFJFVENIX0dMWVBIOgorICAgICAgbWNf
bnNfZHVtcGdseXBoc19zdHJldGNoIChzLCBtYXRyaXgsIHJvdywgbWNfbWF0cml4LCB3ZCk7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIENIQVJfR0xZUEg6CisgICAgY2FzZSBDT01QT1NJVEVfR0xZ
UEg6CisgICAgICBuID0gbnNfZ2V0X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHMsIHIpOworICAg
ICAgaWYgKCFuc19jbGlwX3RvX3JlY3QgKHMtPmYsIHIsIG4pKQorICAgICAgICByZXR1cm47Cisg
ICAgICBpZiAocy0+Zm9yX292ZXJsYXBzCisgICAgICAgICAgfHwgKHMtPmNtcF9mcm9tID4gMAor
ICAgICAgICAgICAgICAmJiAhIHMtPmZpcnN0X2dseXBoLT51LmNtcC5hdXRvbWF0aWMpKQorICAg
ICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
IG1jX25zX21heWJlX2R1bXBnbHlwaHNfYmFja2dyb3VuZCAocywgcy0+Zmlyc3RfZ2x5cGgtPnR5
cGUgPT0gQ09NUE9TSVRFX0dMWVBIKTsKKyAgICAgIGludCBmbGFncyA9IChzLT5obCA9PSBEUkFX
X0NVUlNPUikKKyAgICAgICAgICAgICAgICAgICAgPyBOU19EVU1QR0xZUEhfQ1VSU09SCisgICAg
ICAgICAgICAgICAgICA6IChzLT5obCA9PSBEUkFXX01PVVNFX0ZBQ0UpCisgICAgICAgICAgICAg
ICAgICAgID8gTlNfRFVNUEdMWVBIX01PVVNFRkFDRQorICAgICAgICAgICAgICAgICAgOiAocy0+
Zm9yX292ZXJsYXBzKQorICAgICAgICAgICAgICAgICAgICA/IE5TX0RVTVBHTFlQSF9GT1JFR1JP
VU5ECisgICAgICAgICAgICAgICAgICA6IE5TX0RVTVBHTFlQSF9OT1JNQUw7CisgICAgICB1bnNp
Z25lZCBsb25nIHNhdmVkX2ZnID0gTlNfRkFDRV9GT1JFR1JPVU5EIChzLT5mYWNlKTsKKyAgICAg
IGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUiAmJiBjdXJzb3JfdHlwZSA9PSBNQ19GSUxMRURfQk9Y
KQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBOU19GQUNFX0JBQ0tH
Uk9VTkQgKHMtPmZhY2UpOworICAgICAgICAgIE5TX0ZBQ0VfQkFDS0dST1VORCAocy0+ZmFjZSkg
PSBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpOworICAgICAgICAgIE5TX0ZBQ0VfRk9SRUdS
T1VORCAocy0+ZmFjZSkgPSB0bXA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocy0+aGwg
PT0gRFJBV19DVVJTT1IKKyAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNfRlJB
TUVEX0JPWAorICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcCkKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0KKyAgICAgICAgICAg
ICAgbG9va3VwX25hbWVkX2ZhY2UgKHMtPncsIHMtPmYsIGludGVybiAoIistcmVhbC1mYWtlLWN1
cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xs
b3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19hY3RpdmVfZmFjZV9p
ZCk7CisgICAgICAgICAgICBOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpID0gTlNfRkFDRV9G
T1JFR1JPVU5EIChob2xsb3dfYWN0aXZlX2ZhY2UpOworICAgICAgICAgIH0KKyAgICAgICAgICBl
bHNlIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUgorICAgICAgICAgICAgICAgICAgICYmIGN1cnNv
cl90eXBlID09IE1DX0ZSQU1FRF9CT1gKKyAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFjdGl2
ZV9mYWNlX2lkID0KKyAgICAgICAgICAgICAgICBsb29rdXBfbmFtZWRfZmFjZSAocy0+dywgcy0+
ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRy
dWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBG
QUNFX0ZST01fSUQgKHMtPmYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAg
ICAgTlNfRkFDRV9GT1JFR1JPVU5EIChzLT5mYWNlKSA9IE5TX0ZBQ0VfRk9SRUdST1VORCAoaG9s
bG93X2luYWN0aXZlX2ZhY2UpOworICAgICAgICAgICAgfQorICAgICAgaWYgKHMtPmZpcnN0X2ds
eXBoLT50eXBlID09IENPTVBPU0lURV9HTFlQSCkKKyAgICAgICAgbnNfZHJhd19jb21wb3NpdGVf
Z2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgewor
ICAgICAgICAgICAgYm9vbCB3aXRoX2JnX3AgPSAoKGZsYWdzID09IE5TX0RVTVBHTFlQSF9OT1JN
QUwgJiYgIXMtPmJhY2tncm91bmRfZmlsbGVkX3ApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBmbGFncyA9PSBOU19EVU1QR0xZUEhfTU9VU0VGQUNFKTsKKyAgICAgICAgICAgIGlm
ICh3aXRoX2JnX3ApCisgICAgICAgICAgICAgIHMtPmJhY2tncm91bmRfbnVrZWRfcCA9IHRydWU7
CisgICAgICAgICAgICBmb250LT5kcml2ZXItPmRyYXcgKHMsIHMtPmNtcF9mcm9tLCBzLT5uY2hh
cnMsIHMtPngsIHMtPnliYXNlLCB3aXRoX2JnX3ApOworICAgICAgICAgIH0KKyAgICAgIE5TQ29s
b3IgKmNvbCA9IChOU19GQUNFX0ZPUkVHUk9VTkQgKHMtPmZhY2UpICE9IDAKKyAgICAgICAgICAg
ICAgICAgICAgID8gbnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAo
cy0+ZmFjZSksIHMtPmYpCisgICAgICAgICAgICAgICAgICAgICA6IEZSQU1FX0ZPUkVHUk9VTkRf
Q09MT1IgKHMtPmYpKTsKKyAgICAgIFtjb2wgc2V0XTsKKyAgICAgIC8qIERyYXcgdW5kZXJsaW5l
LCBvdmVybGluZSwgc3RyaWtlLXRocm91Z2guICovCisgICAgICBtY19uc19kcmF3X3RleHRfZGVj
b3JhdGlvbiAocywgcy0+ZmFjZSwgY29sLCBzLT53aWR0aCwgcy0+eCk7CisgICAgICBpZiAocy0+
Zmlyc3RfZ2x5cGgtPnR5cGUgIT0gQ09NUE9TSVRFX0dMWVBICisgICAgICAgICAgJiYgKHMtPmxl
ZnRfb3ZlcndyaXR0ZW5fcCB8fCBzLT5yaWdodF9vdmVyd3JpdHRlbl9wKQorICAgICAgICAgICYm
IChzLT5iYWNrZ3JvdW5kX251a2VkX3AgfHwgcy0+cmVjdGFuZ2xlX251a2VkX3ApCisgICAgICAg
ICAgJiYgKHMtPmFjdGlvbl90eXBlID09IE1DX0RSQVdfR0xZUEhfU1RSSU5HIHx8IHMtPmFjdGlv
bl90eXBlID09IE1DX0VSQVNFX0dMWVBIX1NUUklORykpCisgICAgICAgIG1jX25zX2RyYXdfb3Zl
cndyaXR0ZW4gKHMsIG1hdHJpeCwgcm93LCBtY19tYXRyaXgsIHMtPmZpcnN0X2dseXBoKTsKKyAg
ICAgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUgorICAgICAgICAgICYmIGN1cnNvcl90eXBlID09
IE1DX0ZJTExFRF9CT1gpCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHRtcCA9
IE5TX0ZBQ0VfQkFDS0dST1VORCAocy0+ZmFjZSk7CisgICAgICAgICAgTlNfRkFDRV9CQUNLR1JP
VU5EIChzLT5mYWNlKSA9IE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+ZmFjZSk7CisgICAgICAgICAg
TlNfRkFDRV9GT1JFR1JPVU5EIChzLT5mYWNlKSA9IHRtcDsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUgorICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jf
dHlwZSA9PSBNQ19GUkFNRURfQk9YKQorICAgICAgICAgIE5TX0ZBQ0VfRk9SRUdST1VORCAocy0+
ZmFjZSkgPSBzYXZlZF9mZzsKKyAgICAgIG5zX3Jlc2V0X2NsaXBwaW5nIChzLT5mKTsKKyAgICAg
IGJyZWFrOworICAgIGNhc2UgR0xZUEhMRVNTX0dMWVBIOgorICAgICAgbiA9IG5zX2dldF9nbHlw
aF9zdHJpbmdfY2xpcF9yZWN0IChzLCByKTsKKyAgICAgIGlmICghbnNfY2xpcF90b19yZWN0IChz
LT5mLCByLCBuKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcwor
ICAgICAgICAgIHx8IChzLT5jbXBfZnJvbSA+IDAKKyAgICAgICAgICAgICAgJiYgISBzLT5maXJz
dF9nbHlwaC0+dS5jbXAuYXV0b21hdGljKSkKKyAgICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRf
cCA9IDE7CisgICAgICBlbHNlCisgICAgICAgIG1jX25zX21heWJlX2R1bXBnbHlwaHNfYmFja2dy
b3VuZCAocywgcy0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ09NUE9TSVRFX0dMWVBIKTsKKyAgICAg
IG5zX3Jlc2V0X2NsaXBwaW5nIChzLT5mKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICBlbWFjc19hYm9ydCAoKTsKKyAgICB9CisgIC8qIERyYXcgYm94IGlmIG5vdCBkb25lIGFs
cmVhZHkuICovCisgIGlmICghcy0+Zm9yX292ZXJsYXBzCisgICAgICAmJiAhYm94X2RyYXduX3AK
KyAgICAgICYmIHMtPmZhY2UtPmJveCAhPSBGQUNFX05PX0JPWCkKKyAgICB7CisgICAgICBuID0g
bnNfZ2V0X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHMsIHIpOworICAgICAgaWYgKCFuc19jbGlw
X3RvX3JlY3QgKHMtPmYsIHIsIG4pKQorICAgICAgICByZXR1cm47CisgICAgICBuc19kdW1wZ2x5
cGhzX2JveF9vcl9yZWxpZWYgKHMpOworICAgICAgbnNfcmVzZXRfY2xpcHBpbmcgKHMtPmYpOwor
ICAgIH0KKyAgcy0+bnVtX2NsaXBzID0gMDsKK30KKworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMg
Ki8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIC8qID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAK
ICAgIE5TVFJBQ0UsIFRyYWNlIHN1cHBvcnQuCkBAIC0xMDc5LDYgKzIwNTIsMTYgQEAgc3RhdGlj
IE5TUmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChOU1JlY3QgZnJhbWVSZWN0LCBib29sIGlzRnVs
bHNjcmVlbikKICAgIGV4dGVybmFsIChSSUYpIGNhbGw7IHdob2xlIGZyYW1lLCBjYWxsZWQgYmVm
b3JlIGd1aV91cGRhdGVfd2luZG93X2JlZ2luCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewor
CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisg
IGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisK
KwogI2lmZGVmIE5TX0lNUExfQ09DT0EKICAgRW1hY3NWaWV3ICp2aWV3ID0gRlJBTUVfTlNfVklF
VyAoZik7CiAKQEAgLTExMDksNiArMjA5MiwxNiBAQCBzdGF0aWMgTlNSZWN0IGNvbnN0cmFpbl9m
cmFtZV9yZWN0KE5TUmVjdCBmcmFtZVJlY3QsIGJvb2wgaXNGdWxsc2NyZWVuKQogCiAvKiAgIGlm
IChmID09IE1PVVNFX0hMX0lORk8gKGYpLT5tb3VzZV9mYWNlX21vdXNlX2ZyYW1lKSAqLwogICBN
T1VTRV9ITF9JTkZPIChmKS0+bW91c2VfZmFjZV9kZWZlciA9IDA7CisKKworLyogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgZi0+bWNfdXBkYXRpbmdf
ZnJhbWUgPSBOVUxMOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9CiAKIApAQCAt
NDc1OSw2ICs1NzUyLDE3IEBAIGluIGNlcnRhaW4gc2l0dWF0aW9ucyAocmFwaWQgaW5jb21pbmcg
ZXZlbnRzKS4KICAgICAgIGJhciA9IFtbRW1hY3NTY3JvbGxlciBhbGxvY10gaW5pdEZyYW1lOiBy
IHdpbmRvdzogd2luXTsKICAgICAgIHdzZXRfdmVydGljYWxfc2Nyb2xsX2JhciAod2luZG93LCBt
YWtlX21pbnRfcHRyIChiYXIpKTsKICAgICAgIHVwZGF0ZV9wID0gWUVTOworCisKKy8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICAvKiBUaGlz
IGlzIG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gKi8KKyAgICAgIFtiYXIgbWNfc2V0X3Jl
Y3RhbmdsZTogcl07CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICB9CiAgIGVs
c2UKICAgICB7CkBAIC00NzY2LDEyICs1NzcwLDMwIEBAIGluIGNlcnRhaW4gc2l0dWF0aW9ucyAo
cmFwaWQgaW5jb21pbmcgZXZlbnRzKS4KICAgICAgIGJhciA9IFhOU19TQ1JPTExfQkFSICh3aW5k
b3ctPnZlcnRpY2FsX3Njcm9sbF9iYXIpOwogICAgICAgb2xkUmVjdCA9IFtiYXIgZnJhbWVdOwog
ICAgICAgci5zaXplLndpZHRoID0gb2xkUmVjdC5zaXplLndpZHRoOworCisKKy8qICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCiAgICAgICBpZiAoRlJBTUVf
TElWRV9QIChmKSAmJiAhTlNFcXVhbFJlY3RzIChvbGRSZWN0LCByKSkKICAgICAgICAgeworICAg
ICAgICAgIC8qIFRoZSBtYWluIHdpbmRvdyBoYXMgcHJvYmFibHkgYmVlbiByZXNpemVkLiAgR3Jh
Y2lvdXNseSBkZWxldGUgdGhlCisgICAgICAgICAgb2xkIHNjcm9sbCBiYXIgd2l0aG91dCByZXBh
aW50aW5nIGl0cyByZWN0YW5nbGU7IGFuZCwgY3JlYXRlIGEgbmV3CisgICAgICAgICAgc2Nyb2xs
IGJhciBlbHNld2hlcmUuKi8KICAgICAgICAgICBpZiAob2xkUmVjdC5vcmlnaW4ueCAhPSByLm9y
aWdpbi54KQorICAgICAgICAgICAgewogICAgICAgICAgICAgICBuc19jbGVhcl9mcmFtZV9hcmVh
IChmLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICBbYmFyIG1jX2p1
ZGdlXTsKKyAgICAgICAgICAgICAgYmFyID0gW1tFbWFjc1Njcm9sbGVyIGFsbG9jXSBpbml0RnJh
bWU6IHIgd2luZG93OiB3aW5dOworICAgICAgICAgICAgICB3c2V0X3ZlcnRpY2FsX3Njcm9sbF9i
YXIgKHdpbmRvdywgbWFrZV9taW50X3B0ciAoYmFyKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgW2JhciBzZXRGcmFtZTogcl07CiAgICAgICAgIH0KKworLyog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqICovCisKKwogICAgIH0KIAogICBpZiAodXBkYXRlX3ApCkBAIC00
OTMxLDkgKzU5NTMsNTcgQEAgaW4gY2VydGFpbiBzaXR1YXRpb25zIChyYXBpZCBpbmNvbWluZyBl
dmVudHMpLgogICAgIHsKICAgICAgIHZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDogaV07
CiAgICAgICBpZiAoIVt2aWV3IGlzS2luZE9mQ2xhc3M6IFtFbWFjc1Njcm9sbGVyIGNsYXNzXV0p
IGNvbnRpbnVlOwotICAgICAgaWYgKFt2aWV3IGp1ZGdlXSkKKworCisvKiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAvKiBgWFNFVFdJTkRPVycgd2ls
bCBzb21ldGltZXMgY2F1c2UgRW1hY3MgdG8gY3Jhc2ggd2hlbiBydW5uaW5nIHVuZGVyIGdkYiBl
dmVuCisgIHRob3VnaCAodyAhPSBOVUxMKS4gIFRoZXJlZm9yZSwgd2UgY2Fubm90IHJlbGlhYmx5
IHVzZSBgV0lORE9XX0xJVkVfUCcuICovCisgIHN0cnVjdCB3aW5kb3cgKncgPSBbdmlldyBtY19n
ZXRfd2luZG93XTsKKyAgaWYgKHcgIT0gTlVMTAorICAgICAgJiYgTklMUCAody0+Y29udGVudHMp
KQorICAgIHsKKyAgICAgIEJPT0wgZGVidWdfcCA9IGZhbHNlOworICAgICAgaWYgKGRlYnVnX3AK
KyAgICAgICAgICAvKiBgd2luZG93X2JveCcgY2FsbHMgYHdpbmRvd19ib3hfaGVpZ2h0Jywgd2hp
Y2ggd2lsbCBjYXVzZSBFbWFjcyB0bworICAgICAgICAgIGNyYXNoIGlmIEZSQU1FUCAody0+ZnJh
bWUpIGlzIG5vdCBzYXRpc2ZpZWQuICovCisgICAgICAgICAgJiYgRlJBTUVQICh3LT5mcmFtZSkp
CisgICAgICAgIHsKKyAgICAgICAgICBOU1JlY3QgcjAgPSBbdmlldyBtY19nZXRfcmVjdGFuZ2xl
XTsKKyAgICAgICAgICBpbnQgeDAgPSBOU01pblggKHIwKTsKKyAgICAgICAgICBpbnQgeTAgPSBO
U01pblkgKHIwKTsKKyAgICAgICAgICBpbnQgd2QwID0gTlNXaWR0aCAocjApOworICAgICAgICAg
IGludCBoMCA9IE5TSGVpZ2h0IChyMCk7CisgICAgICAgICAgaW50IHdpbmRvd195LCB3aW5kb3df
aGVpZ2h0OworICAgICAgICAgIHdpbmRvd19ib3ggKHcsIEFOWV9BUkVBLCAwLCAmd2luZG93X3ks
IDAsICZ3aW5kb3dfaGVpZ2h0KTsKKyAgICAgICAgICBpbnQgdG9wID0gd2luZG93X3k7CisgICAg
ICAgICAgaW50IGhlaWdodCA9IHdpbmRvd19oZWlnaHQ7CisgICAgICAgICAgaW50IHdpZHRoID0g
V0lORE9XX0NPTkZJR19TQ1JPTExfQkFSX0NPTFMgKHcpICogRlJBTUVfQ09MVU1OX1dJRFRIIChm
KTsKKyAgICAgICAgICBpbnQgbGVmdCA9IFdJTkRPV19TQ1JPTExfQkFSX0FSRUFfWCAodyk7Cisg
ICAgICAgICAgTlNSZWN0IHIxID0gTlNNYWtlUmVjdCAobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgICAvKiBUaGUgcGFyZW50IHZpZXcgaXMgZmxpcHBlZCwgc28gd2UgbmVlZCB0
byBmbGlwIHkgdmFsdWUuICovCisgICAgICAgICAgRW1hY3NWaWV3ICpmcmFtZV92aWV3ID0gRlJB
TUVfTlNfVklFVyAoZik7CisgICAgICAgICAgTlNSZWN0IHYgPSBbZnJhbWVfdmlldyBmcmFtZV07
CisgICAgICAgICAgcjEub3JpZ2luLnkgPSAodi5zaXplLmhlaWdodCAtIHIxLnNpemUuaGVpZ2h0
IC0gcjEub3JpZ2luLnkpOworICAgICAgICAgIGludCB4MSA9IE5TTWluWCAocjEpOworICAgICAg
ICAgIGludCB5MSA9IE5TTWluWSAocjEpOworICAgICAgICAgIGludCB3ZDEgPSBOU1dpZHRoIChy
MSk7CisgICAgICAgICAgaW50IGgxID0gTlNIZWlnaHQgKHIxKTsKKyAgICAgICAgICBmcHJpbnRm
IChzdGRlcnIsICIlcyAtLSBERUFEOlxuXAorICAgICAgICAgIHgwL3gxICglZC8lZCkgfCB5MC95
MSAoJWQvJWQpIHwgd2QwL3dkMSAoJWQvJWQpIHwgaDAvaDEgKCVkLyVkKVxuIiwKKyAgICAgICAg
ICBtY193aW5kb3cgKHcpLCB4MCwgeDEsIHkwLCB5MSwgd2QwLCB3ZDEsIGgwLCBoMSk7CisgICAg
ICAgIH0KKyAgICAgIGlmIChbdmlldyBtY19qdWRnZV0pCiAgICAgICAgIHJlbW92ZWQgPSBZRVM7
CiAgICAgfQorICAgIGVsc2UgaWYgKFt2aWV3IGp1ZGdlXSkKKyAgICAgIHJlbW92ZWQgPSBZRVM7
CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyAgICB9CiAKICAgaWYgKHJlbW92ZWQp
CiAgICAgW2V2aWV3IHVwZGF0ZUZyYW1lU2l6ZTogTk9dOwpAQCAtNTA3NCw2ICs2MTQ0LDIwIEBA
IHN0YXRpYyBMaXNwX09iamVjdCBuc19zdHJpbmdfdG9fbGlzcG1vZCAoY29uc3QgY2hhciAqcykK
IGV4dGVybiBmcmFtZV9wYXJtX2hhbmRsZXIgbnNfZnJhbWVfcGFybV9oYW5kbGVyc1tdOwogc3Rh
dGljIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlIG5zX3JlZGlzcGxheV9pbnRlcmZhY2UgPQog
eworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLwor
CisvKiBgcmVkaXNwbGF5X2ludGVyZmFjZScgaW4gYG5zdGVybS5tYCBtdXN0IGJlIGluIHRoZSBl
eGFjdCBzYW1lIG9yZGVyIGFzIHRoZQorYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGBkaXNwZXh0
ZXJuLmhgISAqLworCisgIG1jX25zX2RyYXdfd2luZG93X2N1cnNvciwKKyAgbWNfbnNfZHJhd19n
bHlwaF9zdHJpbmcsCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgbnNfZnJhbWVf
cGFybV9oYW5kbGVycywKICAgZ3VpX3Byb2R1Y2VfZ2x5cGhzLAogICBndWlfd3JpdGVfZ2x5cGhz
LApAQCAtODcxMSw2ICs5Nzk1LDQ5IEBAIC0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdwogCiBA
aW1wbGVtZW50YXRpb24gRW1hY3NTY3JvbGxlcgogCisKKy8qICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq
LworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCistICh2b2lkKW1jX3NldF9yZWN0YW5nbGU6IChO
U1JlY3QpcmVjdAoreworICBtY19yZWN0YW5nbGUgPSByZWN0OworfQorCistIChOU1JlY3QpbWNf
Z2V0X3JlY3RhbmdsZQoreworICByZXR1cm4gbWNfcmVjdGFuZ2xlOworfQorCistIChzdHJ1Y3Qg
d2luZG93ICopbWNfZ2V0X3dpbmRvdworeworICByZXR1cm4gd2luZG93OworfQorCistIChib29s
KW1jX2p1ZGdlCit7CisgIE5TVFJBQ0UgKCJbRW1hY3NTY3JvbGxlciBtY19qdWRnZV0iKTsKKyAg
Ym9vbCByZXQgPSBjb25kZW1uZWQ7CisgIGJsb2NrX2lucHV0ICgpOworICBpZiAoY29uZGVtbmVk
KQorICAgIHsKKyAgICAgIC8qIGVuc3VyZSBvdGhlciBzY3JvbGxiYXIgdXBkYXRlcyBhZnRlciBk
ZWxldGlvbiAqLworICAgICAgRW1hY3NWaWV3ICp2aWV3ID0gKEVtYWNzVmlldyAqKUZSQU1FX05T
X1ZJRVcgKGZyYW1lKTsKKyAgICAgIGlmICh2aWV3ICE9IG5pbCkKKyAgICAgICAgdmlldy0+c2Ny
b2xsYmFyc05lZWRpbmdVcGRhdGUrKzsKKyAgICB9CisgIGlmICh3aW5kb3cpCisgICAgd3NldF92
ZXJ0aWNhbF9zY3JvbGxfYmFyICh3aW5kb3csIFFuaWwpOworICB3aW5kb3cgPSAwOworICBbc2Vs
ZiByZW1vdmVGcm9tU3VwZXJ2aWV3V2l0aG91dE5lZWRpbmdEaXNwbGF5XTsKKyAgW3NlbGYgcmVs
ZWFzZV07CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiByZXQ7Cit9CisKKy8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLworCisKIC8qIGZvciByZXBlYXQgYnV0dG9uIHB1c2ggKi8KICNkZWZp
bmUgU0NST0xMX0JBUl9GSVJTVF9ERUxBWSAwLjUKICNkZWZpbmUgU0NST0xMX0JBUl9DT05USU5V
T1VTX0RFTEFZICgxLjAgLyAxNSkKZGlmZiAtLWdpdCBhL3NyYy93MzJ0ZXJtLmMgYi9zcmMvdzMy
dGVybS5jCmluZGV4IGM2ZTE3NWUuLmZhMTE1YzAgMTAwNjQ0Ci0tLSBhL3NyYy93MzJ0ZXJtLmMK
KysrIGIvc3JjL3czMnRlcm0uYwpAQCAtNjIsNiArNjIsMTE2OCBAQCBhbG9uZyB3aXRoIEdOVSBF
bWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwog
I2luY2x1ZGUgImJpdG1hcHMvZ3JheS54Ym0iCiAjZW5kaWYKIAwKKworCisvKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKwordHlwZWRlZiBzdHJ1
Y3QgeworICB1bnNpZ25lZCBsb25nIHBpeGVsOworICB1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVu
LCBibHVlOworICBjaGFyIGZsYWdzOworICBjaGFyIHBhZDsKK30gbWNfWENvbG9yOworCisjaWZk
ZWYgR0xZUEhfREVCVUcKK3N0YXRpYyB2b2lkIHczMl9jaGVja19mb250IChzdHJ1Y3QgZnJhbWUg
Kiwgc3RydWN0IGZvbnQgKik7CisjZW5kaWYKKworc3RhdGljIHZvaWQgWENoYW5nZUdDICh2b2lk
ICosIEVtYWNzX0dDICosIHVuc2lnbmVkIGxvbmcsIEVtYWNzX0dDICopOworCitzdGF0aWMgdm9p
ZCB3MzJfZHJhd191bmRlcndhdmUgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgQ09MT1JSRUYpOwor
CitzdGF0aWMgdm9pZCB3MzJfc2V0X21vZGVfbGluZV9mYWNlX2djIChzdHJ1Y3QgZ2x5cGhfc3Ry
aW5nICopOworCitzdGF0aWMgdm9pZCB3MzJfc2V0X21vdXNlX2ZhY2VfZ2MgKHN0cnVjdCBnbHlw
aF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHczMl9jbGlwX3RvX3JvdyAoc3RydWN0IHdpbmRv
dyAqLCBzdHJ1Y3QgZ2x5cGhfcm93ICosIGVudW0gZ2x5cGhfcm93X2FyZWEsIEhEQyk7CisKK3N0
YXRpYyB2b2lkIHczMl9zZXRfY2xpcF9yZWN0YW5nbGUgKEhEQywgUkVDVCAqKTsKKworc3RhdGlj
IHZvaWQgdzMyX3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcg
Kik7CisKK3N0YXRpYyB2b2lkIHczMl9kcmF3X2dseXBoX3N0cmluZ19iZ19yZWN0IChzdHJ1Y3Qg
Z2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIHczMl9k
cmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGJvb2wp
OworCitzdGF0aWMgdm9pZCB3MzJfZHJhd19nbHlwaF9zdHJpbmdfYm94IChzdHJ1Y3QgZ2x5cGhf
c3RyaW5nICopOworCitzdGF0aWMgdm9pZCB3MzJfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZ19l
eGFjdGx5IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisK
K3N0YXRpYyB2b2lkIHczMl9kcmF3X2ltYWdlX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0
cmluZyAqKTsKKworc3RhdGljIHZvaWQgdzMyX2RyYXdfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQg
KHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHczMl9kcmF3X2NvbXBvc2l0
ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3Rh
dGljIHZvaWQgdzMyX2RyYXdfZ2x5cGhsZXNzX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzdHJ1
Y3QgZ2x5cGhfc3RyaW5nICopOworCisjZGVmaW5lIE1DX1czMl9DT0xPUihwZSkgIFJHQiAocGUu
cGVSZWQsIHBlLnBlR3JlZW4sIHBlLnBlQmx1ZSkKKworI2RlZmluZSBNQ19XMzJfU0VUX0NPTE9S
KHBlLCBjb2xvcikgXAorICBkbyBcCisgICAgeyBcCisgICAgICBwZS5wZVJlZCA9IEdldFJWYWx1
ZSAoY29sb3IpOyBcCisgICAgICBwZS5wZUdyZWVuID0gR2V0R1ZhbHVlIChjb2xvcik7IFwKKyAg
ICAgIHBlLnBlQmx1ZSA9IEdldEJWYWx1ZSAoY29sb3IpOyBcCisgICAgICBwZS5wZUZsYWdzID0g
MDsgXAorICAgIH0gd2hpbGUgKDApCisKK3ZvaWQKK21jX3Byb2Nlc3NfcXVpdF9mbGFnICh2b2lk
KQoreworICBMaXNwX09iamVjdCBmbGFnID0gVnF1aXRfZmxhZzsKKyAgVnF1aXRfZmxhZyA9IFFu
aWw7CisgIGlmIChFUSAoZmxhZywgUWtpbGxfZW1hY3MpKQorICAgIEZraWxsX2VtYWNzIChRbmls
KTsKKyAgaWYgKEVRIChWdGhyb3dfb25faW5wdXQsIGZsYWcpKQorICAgIEZ0aHJvdyAoVnRocm93
X29uX2lucHV0LCBRdCk7CisgIEZzaWduYWwgKFFxdWl0LCBRbmlsKTsKK30KKworI2RlZmluZSBN
Q19RVUlUCQkJCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBpZiAoIU5JTFAgKFZxdWl0X2ZsYWcp
ICYmIE5JTFAgKFZpbmhpYml0X3F1aXQpKQlcCisgICAgICBtY19wcm9jZXNzX3F1aXRfZmxhZyAo
KTsJCQkJXAorICAgIGVsc2UgaWYgKHBlbmRpbmdfc2lnbmFscykJCQkJXAorICAgICAgcHJvY2Vz
c19wZW5kaW5nX3NpZ25hbHMgKCk7CQkJXAorICB9IHdoaWxlIChmYWxzZSkKKworc3RhdGljIExp
c3BfT2JqZWN0CittY193MzJfY29sb3JfbWFwX2xvb2t1cCAoY29uc3QgY2hhciAqY29sb3JuYW1l
KQoreworICBMaXNwX09iamVjdCB0YWlsLCByZXQgPSBRbmlsOworICBibG9ja19pbnB1dCAoKTsK
KyAgZm9yICh0YWlsID0gVnczMl9jb2xvcl9tYXA7IENPTlNQICh0YWlsKTsgdGFpbCA9IFhDRFIg
KHRhaWwpKQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IGVsdCwgdGVtOworICAg
ICAgZWx0ID0gWENBUiAodGFpbCk7CisgICAgICBpZiAoIUNPTlNQIChlbHQpKSBjb250aW51ZTsK
KyAgICAgIHRlbSA9IFhDQVIgKGVsdCk7CisgICAgICBpZiAobHN0cmNtcGkgKFNTREFUQSAodGVt
KSwgY29sb3JuYW1lKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gRmNkciAoZWx0
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgTUNfUVVJVDsKKyAgICB9Cisg
IHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBMaXNwX09iamVj
dAorbWNfeF90b193MzJfY29sb3IgKGNvbnN0IGNoYXIgKiBjb2xvcm5hbWUpCit7CisgIHJlZ2lz
dGVyIExpc3BfT2JqZWN0IHJldCA9IFFuaWw7CisgIGJsb2NrX2lucHV0ICgpOworICBpZiAoY29s
b3JuYW1lWzBdID09ICcjJykKKyAgICB7CisgICAgICAvKiBDb3VsZCBiZSBhbiBvbGQtc3R5bGUg
UkdCIERldmljZSBzcGVjaWZpY2F0aW9uLiAqLworICAgICAgaW50IHNpemUgPSBzdHJsZW4gKGNv
bG9ybmFtZSArIDEpOworICAgICAgY2hhciAqY29sb3IgPSBhbGxvY2EgKHNpemUgKyAxKTsKKyAg
ICAgIHN0cmNweSAoY29sb3IsIGNvbG9ybmFtZSArIDEpOworICAgICAgaWYgKHNpemUgPT0gMyB8
fCBzaXplID09IDYgfHwgc2l6ZSA9PSA5IHx8IHNpemUgPT0gMTIpCisgICAgICAgIHsKKyAgICAg
ICAgICBVSU5UIGNvbG9ydmFsOworICAgICAgICAgIGludCBpLCBwb3M7CisgICAgICAgICAgcG9z
ID0gMDsKKyAgICAgICAgICBzaXplIC89IDM7CisgICAgICAgICAgY29sb3J2YWwgPSAwOworICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNoYXIgKmVuZDsKKyAgICAgICAgICAgICAgY2hhciB0OworICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIHZhbHVlOworICAgICAgICAgICAgICAvKiBUaGUgY2hlY2sgZm9yICd4JyBpbiB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbmFsIHRha2VzIGludG8KKyAgICAgICAgICAgICAgYWNjb3Vu
dCB0aGUgZmFjdCB0aGF0IHN0cnRvbCBhbGxvd3MgYSAiMHgiIGluIGZyb250IG9mCisgICAgICAg
ICAgICAgIG91ciBudW1iZXJzLCBhbmQgd2UgZG9uJ3QuICovCisgICAgICAgICAgICAgIGlmICgh
aXN4ZGlnaXQgKGNvbG9yWzBdKSB8fCBjb2xvclsxXSA9PSAneCcpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIHQgPSBjb2xvcltzaXplXTsKKyAgICAgICAgICAgICAgY29s
b3Jbc2l6ZV0gPSAnXDAnOworICAgICAgICAgICAgICB2YWx1ZSA9IHN0cnRvdWwgKGNvbG9yLCAm
ZW5kLCAxNik7CisgICAgICAgICAgICAgIGNvbG9yW3NpemVdID0gdDsKKyAgICAgICAgICAgICAg
aWYgKGVycm5vID09IEVSQU5HRSB8fCBlbmQgLSBjb2xvciAhPSBzaXplKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBzd2l0Y2ggKHNpemUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFs
dWUgKiAweDEwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOgor
ICAgICAgICAgICAgICAgICAgdmFsdWUgLz0gMHgxMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgIHZhbHVlIC89IDB4
MTAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICBjb2xvcnZhbCB8PSAodmFsdWUgPDwgcG9zKTsKKyAgICAgICAgICAgICAgcG9zICs9
IDB4ODsKKyAgICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAgICAgWFNFVElO
VCAocmV0LCBjb2xvcnZhbCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgY29sb3IgPSBlbmQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKHN0cm5pY21wIChjb2xvcm5hbWUsICJyZ2I6Iiwg
NCkgPT0gMCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpjb2xvcjsKKyAgICAgIFVJTlQgY29s
b3J2YWw7CisgICAgICBpbnQgaSwgcG9zOworICAgICAgcG9zID0gMDsKKyAgICAgIGNvbG9ydmFs
ID0gMDsKKyAgICAgIGNvbG9yID0gY29sb3JuYW1lICsgNDsKKyAgICAgIGZvciAoaSA9IDA7IGkg
PCAzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICplbmQ7CisgICAgICAgICAgdW5z
aWduZWQgbG9uZyB2YWx1ZTsKKyAgICAgICAgICAvKiBUaGUgY2hlY2sgZm9yICd4JyBpbiB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbmFsIHRha2VzIGludG8KKyAgICAgICAgICAgICBhY2NvdW50IHRo
ZSBmYWN0IHRoYXQgc3RydG9sIGFsbG93cyBhICIweCIgaW4gZnJvbnQgb2YKKyAgICAgICAgICAg
ICBvdXIgbnVtYmVycywgYW5kIHdlIGRvbid0LiAqLworICAgICAgICAgIGlmICghaXN4ZGlnaXQg
KGNvbG9yWzBdKSB8fCBjb2xvclsxXSA9PSAneCcpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICB2YWx1ZSA9IHN0cnRvdWwgKGNvbG9yLCAmZW5kLCAxNik7CisgICAgICAgICAgaWYgKGVy
cm5vID09IEVSQU5HRSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIHN3aXRjaCAoZW5k
IC0gY29sb3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgIHZhbHVlID0gdmFsdWUgKiAweDEwICsgdmFsdWU7CisgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMzoKKyAgICAgICAgICAgICAgdmFsdWUgLz0gMHgxMDsKKyAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgIHZhbHVlIC89IDB4MTAwOworICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHZh
bHVlID0gVUxPTkdfTUFYOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICh2YWx1ZSA9PSBV
TE9OR19NQVgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjb2xvcnZhbCB8PSAodmFs
dWUgPDwgcG9zKTsKKyAgICAgICAgICBwb3MgKz0gMHg4OworICAgICAgICAgIGlmIChpID09IDIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICgqZW5kICE9ICdcMCcpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAg
ICAgICAgIFhTRVRJTlQgKHJldCwgY29sb3J2YWwpOworICAgICAgICAgICAgICByZXR1cm4gcmV0
OworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgqZW5kICE9ICcvJykKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNvbG9yID0gZW5kICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChzdHJuaWNtcCAoY29sb3JuYW1lLCAicmdiaToiLCA1KSA9PSAwKQorICAgICAg
eworICAgICAgICAvKiBUaGlzIGlzIGFuIFJHQiBJbnRlbnNpdHkgc3BlY2lmaWNhdGlvbi4gKi8K
KyAgICAgICAgY29uc3QgY2hhciAqY29sb3I7CisgICAgICAgIFVJTlQgY29sb3J2YWw7CisgICAg
ICAgIGludCBpLCBwb3M7CisgICAgICAgIHBvcyA9IDA7CisgICAgICAgIGNvbG9ydmFsID0gMDsK
KyAgICAgICAgY29sb3IgPSBjb2xvcm5hbWUgKyA1OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
MzsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKmVuZDsKKyAgICAgICAgICAg
IGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgICAgIFVJTlQgdmFsOworICAgICAgICAgICAgdmFsdWUg
PSBzdHJ0b2QgKGNvbG9yLCAmZW5kKTsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0Up
CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMC4wIHx8IHZh
bHVlID4gMS4wKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZhbCA9IChVSU5U
KSgweDEwMCAqIHZhbHVlKTsKKyAgICAgICAgICAgIC8qIFdlIHVzZWQgMHgxMDAgaW5zdGVhZCBv
ZiAweEZGIHRvIGdpdmUgYSBjb250aW51b3VzCisgICAgICAgICAgICAgICByYW5nZSBiZXR3ZWVu
IDAuMCBhbmQgMS4wIGluY2x1c2l2ZS4gIFRoZSBuZXh0IHN0YXRlbWVudAorICAgICAgICAgICAg
ICAgZml4ZXMgdGhlIDEuMCBjYXNlLiAqLworICAgICAgICAgICAgaWYgKHZhbCA9PSAweDEwMCkK
KyAgICAgICAgICAgICAgdmFsID0gMHhGRjsKKyAgICAgICAgICAgIGNvbG9ydmFsIHw9ICh2YWwg
PDwgcG9zKTsKKyAgICAgICAgICAgIHBvcyArPSAweDg7CisgICAgICAgICAgICBpZiAoaSA9PSAy
KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCplbmQgIT0gJ1wwJykKKyAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7
CisgICAgICAgICAgICAgICAgWFNFVElOVCAocmV0LCBjb2xvcnZhbCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmQgIT0g
Jy8nKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbG9yID0gZW5kICsgMTsK
KyAgICAgICAgICB9CisgICAgICB9CisgIC8qIEkgYW0gbm90IGdvaW5nIHRvIGF0dGVtcHQgdG8g
aGFuZGxlIGFueSBvZiB0aGUgQ0lFIGNvbG9yIHNjaGVtZXMKKyAgICAgb3IgVGVrSFZDLCBzaW5j
ZSBJIGRvbid0IGtub3cgdGhlIGFsZ29yaXRobXMgZm9yIGNvbnZlcnNpb24gdG8gUkdCLgorICAg
ICBJZiB3ZSBmYWlsIHRvIGxvb2t1cCB0aGUgY29sb3IgbmFtZSBpbiB3MzJfY29sb3JfbWFwLCB0
aGVuIGNoZWNrIHRoZQorICAgICBjb2xvcm5hbWUgdG8gc2VlIGlmIGl0IGNhbiBiZSBjcnVkZWx5
IGFwcHJveGltYXRlZDogSWYgdGhlIFggY29sb3IKKyAgICAgZW5kcyBpbiBhIG51bWJlciAoZS5n
LiwgImRhcmtzZWFncmVlbjIiKSwgc3RyaXAgdGhlIG51bWJlciBhbmQKKyAgICAgcmV0dXJuIHRo
ZSByZXN1bHQgb2YgbG9va2luZyB1cCB0aGUgYmFzZSBjb2xvciBuYW1lLiAqLworICByZXQgPSBt
Y193MzJfY29sb3JfbWFwX2xvb2t1cCAoY29sb3JuYW1lKTsKKyAgaWYgKE5JTFAgKHJldCkpCisg
ICAgeworICAgICAgaW50IGxlbiA9IHN0cmxlbiAoY29sb3JuYW1lKTsKKyAgICAgIGlmIChpc2Rp
Z2l0IChjb2xvcm5hbWVbbGVuIC0gMV0pKQorICAgICAgICB7CisgICAgICAgICAgY2hhciAqcHRy
LCAqYXBwcm94ID0gYWxsb2NhIChsZW4gKyAxKTsKKyAgICAgICAgICBzdHJjcHkgKGFwcHJveCwg
Y29sb3JuYW1lKTsKKyAgICAgICAgICBwdHIgPSAmYXBwcm94W2xlbiAtIDFdOworICAgICAgICAg
IHdoaWxlIChwdHIgPiBhcHByb3ggJiYgaXNkaWdpdCAoKnB0cikpCisgICAgICAgICAgICAqcHRy
LS0gPSAnXDAnOworICAgICAgICAgIHJldCA9IG1jX3czMl9jb2xvcl9tYXBfbG9va3VwIChhcHBy
b3gpOworICAgICAgICB9CisgICAgfQorICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gcmV0
OworfQorCisvKiBEZWNpZGUgaWYgY29sb3IgbmFtZWQgQ09MT1IgaXMgdmFsaWQgZm9yIHRoZSBk
aXNwbGF5IGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIHNlbGVjdGVkIGZyYW1lOyBpZiBzbywgcmV0
dXJuIHRoZSByZ2IgdmFsdWVzIGluIENPTE9SX0RFRi4KKyAgIElmIEFMTE9DIGlzIG5vbnplcm8s
IGFsbG9jYXRlIGEgbmV3IGNvbG9ybWFwIGNlbGwuICovCitpbnQKK21jX3czMl9kZWZpbmVkX2Nv
bG9yIChzdHJ1Y3QgZnJhbWUgKmYsIGNvbnN0IGNoYXIgKmNvbG9yLCBtY19YQ29sb3IgKmNvbG9y
X2RlZiwgYm9vbCBhbGxvY19wKQoreworICByZWdpc3RlciBMaXNwX09iamVjdCB0ZW07CisgIENP
TE9SUkVGIHczMl9jb2xvcl9yZWY7CisgIHRlbSA9IG1jX3hfdG9fdzMyX2NvbG9yIChjb2xvcik7
CisgIGlmICghTklMUCAodGVtKSkKKyAgICB7CisgICAgICBpZiAoZikKKyAgICAgICAgeworICAg
ICAgICAgIC8qIEFwcGx5IGdhbW1hIGNvcnJlY3Rpb24uICovCisgICAgICAgICAgdzMyX2NvbG9y
X3JlZiA9IFhVRklYTlVNX1JBVyAodGVtKTsKKyAgICAgICAgICBnYW1tYV9jb3JyZWN0IChmLCAm
dzMyX2NvbG9yX3JlZik7CisgICAgICAgICAgWFNFVElOVCAodGVtLCB3MzJfY29sb3JfcmVmKTsK
KyAgICAgICAgfQorICAgICAgLyogTWFwIHRoaXMgY29sb3IgdG8gdGhlIHBhbGV0dGUgaWYgaXQg
aXMgZW5hYmxlZC4gKi8KKyAgICAgIGlmICghTklMUCAoVnczMl9lbmFibGVfcGFsZXR0ZSkpCisg
ICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgdzMyX3BhbGV0dGVfZW50cnkgKiBlbnRyeSA9IG9u
ZV93MzJfZGlzcGxheV9pbmZvLmNvbG9yX2xpc3Q7CisgICAgICAgICAgc3RydWN0IHczMl9wYWxl
dHRlX2VudHJ5ICoqIHByZXYgPSAmb25lX3czMl9kaXNwbGF5X2luZm8uY29sb3JfbGlzdDsKKyAg
ICAgICAgICAvKiBjaGVjayBpZiBjb2xvciBpcyBhbHJlYWR5IG1hcHBlZCAqLworICAgICAgICAg
IHdoaWxlIChlbnRyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKE1DX1czMl9D
T0xPUiAoZW50cnktPmVudHJ5KSA9PSBYVUZJWE5VTV9SQVcgKHRlbSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIHByZXYgPSAmZW50cnktPm5leHQ7CisgICAgICAgICAg
ICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGVu
dHJ5ID09IE5VTEwgJiYgYWxsb2NfcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyog
bm90IGFscmVhZHkgbWFwcGVkLCBzbyBhZGQgdG8gbGlzdCAqLworICAgICAgICAgICAgICBlbnRy
eSA9IHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHczMl9wYWxldHRlX2VudHJ5KSk7CisgICAgICAg
ICAgICAgIE1DX1czMl9TRVRfQ09MT1IgKGVudHJ5LT5lbnRyeSwgWFVGSVhOVU1fUkFXICh0ZW0p
KTsKKyAgICAgICAgICAgICAgZW50cnktPm5leHQgPSBOVUxMOworICAgICAgICAgICAgICAqcHJl
diA9IGVudHJ5OworICAgICAgICAgICAgICBvbmVfdzMyX2Rpc3BsYXlfaW5mby5udW1fY29sb3Jz
Kys7CisgICAgICAgICAgICAgIC8qIHNldCBmbGFnIHRoYXQgcGFsZXR0ZSBtdXN0IGJlIHJlZ2Vu
ZXJhdGVkICovCisgICAgICAgICAgICAgIG9uZV93MzJfZGlzcGxheV9pbmZvLnJlZ2VuX3BhbGV0
dGUgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAvKiBFbnN1cmUgQ09M
T1JSRUYgdmFsdWUgaXMgc25hcHBlZCB0byBuZWFyZXN0IGNvbG9yIGluIChkZWZhdWx0KQorICAg
ICAgICAgcGFsZXR0ZSBieSBzaW11bGF0aW5nIHRoZSBQQUxFVFRFUkdCIG1hY3JvLiAgVGhpcyB3
b3JrcyB3aGV0aGVyCisgICAgICAgICBvciBub3QgdGhlIGRpc3BsYXkgZGV2aWNlIGhhcyBhIHBh
bGV0dGUuICovCisgICAgICB3MzJfY29sb3JfcmVmID0gWFVGSVhOVU1fUkFXICh0ZW0pIHwgMHgy
MDAwMDAwOworICAgICAgY29sb3JfZGVmLT5waXhlbCA9IHczMl9jb2xvcl9yZWY7CisgICAgICBj
b2xvcl9kZWYtPnJlZCA9IEdldFJWYWx1ZSAodzMyX2NvbG9yX3JlZikgKiAyNTY7CisgICAgICBj
b2xvcl9kZWYtPmdyZWVuID0gR2V0R1ZhbHVlICh3MzJfY29sb3JfcmVmKSAqIDI1NjsKKyAgICAg
IGNvbG9yX2RlZi0+Ymx1ZSA9IEdldEJWYWx1ZSAodzMyX2NvbG9yX3JlZikgKiAyNTY7CisgICAg
ICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICAgIH0KK30KKwordm9pZAorbWNfeHdfY29sb3JfdmFsdWVzIChzdHJ1Y3Qgd2luZG93ICp3
LCBMaXNwX09iamVjdCBjb2xvciwgc3RydWN0IG1jX1JHQiAqbHNsKQoreworICBDSEVDS19TVFJJ
TkcgKGNvbG9yKTsKKyAgbWNfWENvbG9yIHRlbXA7CisgIHN0cnVjdCBmcmFtZSAqZiA9IGRlY29k
ZV93aW5kb3dfc3lzdGVtX2ZyYW1lICh3LT5mcmFtZSk7CisgIGlmIChtY193MzJfZGVmaW5lZF9j
b2xvciAoZiwgU1NEQVRBIChjb2xvciksICZ0ZW1wLCBmYWxzZSkpCisgICAgeworICAgICAgbHNs
LT5yZWQgPSAoKEdldFJWYWx1ZSAodGVtcC5waXhlbCkgPDwgOCkgfCBHZXRSVmFsdWUgKHRlbXAu
cGl4ZWwpKSAvIDY1NTM1LjA7CisgICAgICBsc2wtPmdyZWVuID0gKChHZXRHVmFsdWUgKHRlbXAu
cGl4ZWwpIDw8IDgpIHwgR2V0R1ZhbHVlICh0ZW1wLnBpeGVsKSkgLyA2NTUzNS4wOworICAgICAg
bHNsLT5ibHVlID0gKChHZXRCVmFsdWUgKHRlbXAucGl4ZWwpIDw8IDgpIHwgR2V0QlZhbHVlICh0
ZW1wLnBpeGVsKSkgLyA2NTUzNS4wOworICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAg
IGxzbC0+cmVkID0gLTEuMDsKKyAgICAgICAgbHNsLT5ncmVlbiA9IC0xLjA7CisgICAgICAgIGxz
bC0+Ymx1ZSA9IC0xLjA7CisgICAgICB9Cit9CisKKy8qIERyYXcgc3RyZXRjaCBnbHlwaCBzdHJp
bmcgUy4gKi8KK3N0YXRpYyB2b2lkCittY193MzJfZHJhd19zdHJldGNoX2dseXBoX3N0cmluZyAo
c3RydWN0IGdseXBoX3N0cmluZyAqcykKK3sKKyAgZWFzc2VydCAocy0+Zmlyc3RfZ2x5cGgtPnR5
cGUgPT0gU1RSRVRDSF9HTFlQSCk7CisgIGlmIChzLT5obCA9PSBEUkFXX0NVUlNPUgorICAgICAg
JiYgIXhfc3RyZXRjaF9jdXJzb3JfcCkKKyAgICB7CisgICAgICAvKiBJZiBgeC1zdHJldGNoLWN1
cnNvcicgaXMgbmlsLCBkb24ndCBkcmF3IGEgYmxvY2sgY3Vyc29yIGFzIHdpZGUgYXMgdGhlCisg
ICAgICBzdHJldGNoIGdseXBoLiAqLworICAgICAgaW50IHdpZHRoLCBiYWNrZ3JvdW5kX3dpZHRo
ID0gcy0+YmFja2dyb3VuZF93aWR0aDsKKyAgICAgIGludCB4ID0gcy0+eDsKKyAgICAgIGlmICgh
cy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAgICB7CisgICAgICAgICAgaW50IGxlZnRfeCA9IHdp
bmRvd19ib3hfbGVmdF9vZmZzZXQgKHMtPncsIFRFWFRfQVJFQSk7CisgICAgICAgICAgaWYgKHgg
PCBsZWZ0X3gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJhY2tncm91bmRfd2lkdGgg
LT0gbGVmdF94IC0geDsKKyAgICAgICAgICAgICAgeCA9IGxlZnRfeDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIC8qIEluIFIy
TCByb3dzLCBkcmF3IHRoZSBjdXJzb3Igb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCisgICAgICAg
ICAgICAgIHN0cmV0Y2ggZ2x5cGguICovCisgICAgICAgICAgIGludCByaWdodF94ID0gd2luZG93
X2JveF9yaWdodCAocy0+dywgVEVYVF9BUkVBKTsKKyAgICAgICAgICAgaWYgKHggKyBiYWNrZ3Jv
dW5kX3dpZHRoID4gcmlnaHRfeCkKKyAgICAgICAgICAgICBiYWNrZ3JvdW5kX3dpZHRoIC09IHgg
LSByaWdodF94OworICAgICAgICAgICB4ICs9IGJhY2tncm91bmRfd2lkdGg7CisgICAgICAgICB9
CisgICAgICB3aWR0aCA9IG1pbiAoRlJBTUVfQ09MVU1OX1dJRFRIIChzLT5mKSwgYmFja2dyb3Vu
ZF93aWR0aCk7CisgICAgICBpZiAocy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAgICB4IC09IHdp
ZHRoOworICAgICAgLyogRHJhdyBjdXJzb3IuICovCisgICAgICB3MzJfZHJhd19nbHlwaF9zdHJp
bmdfYmdfcmVjdCAocywgeCwgcy0+eSwgd2lkdGgsIHMtPmhlaWdodCk7CisgICAgICAvKiBDbGVh
ciByZXN0IHVzaW5nIHRoZSBHQyBvZiB0aGUgb3JpZ2luYWwgbm9uLWN1cnNvciBmYWNlLiAqLwor
ICAgICAgaWYgKHdpZHRoIDwgYmFja2dyb3VuZF93aWR0aCkKKyAgICAgICAgeworICAgICAgICAg
IEVtYWNzX0dDICpnYyA9IHMtPmZhY2UtPmdjOworICAgICAgICAgIGludCB5ID0gcy0+eTsKKyAg
ICAgICAgICBpbnQgdyA9IGJhY2tncm91bmRfd2lkdGggLSB3aWR0aCwgaCA9IHMtPmhlaWdodDsK
KyAgICAgICAgICBSRUNUIHI7CisgICAgICAgICAgSERDIGhkYyA9IHMtPmhkYzsKKyAgICAgICAg
ICBpZiAoIXMtPnJvdy0+cmV2ZXJzZWRfcCkKKyAgICAgICAgICAgIHggKz0gd2lkdGg7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHggPSBzLT54OworICAgICAgICAgIGlmIChzLT5y
b3ctPm1vdXNlX2ZhY2VfcAorICAgICAgICAgICAgICAmJiBjdXJzb3JfaW5fbW91c2VfZmFjZV9w
IChzLT53KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdzMyX3NldF9tb3VzZV9mYWNl
X2djIChzKTsKKyAgICAgICAgICAgICAgZ2MgPSBzLT5nYzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ2MgPSBzLT5mYWNlLT5nYzsKKyAgICAgICAgICBn
ZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgJnIpOworICAgICAgICAgIHczMl9zZXRfY2xp
cF9yZWN0YW5nbGUgKGhkYywgJnIpOworI2lmIDAgLyogVE9ETzogc3RpcHBsZSAqLworICAgICAg
ICAgIGlmIChzLT5mYWNlLT5zdGlwcGxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAv
KiBGaWxsIGJhY2tncm91bmQgd2l0aCBhIHN0aXBwbGUgcGF0dGVybi4gKi8KKyAgICAgICAgICAg
ICAgWFNldEZpbGxTdHlsZSAocy0+ZGlzcGxheSwgZ2MsIEZpbGxPcGFxdWVTdGlwcGxlZCk7Cisg
ICAgICAgICAgICAgIFhGaWxsUmVjdGFuZ2xlIChzLT5kaXNwbGF5LCBzLT53aW5kb3csIGdjLCB4
LCB5LCB3LCBoKTsKKyAgICAgICAgICAgICAgWFNldEZpbGxTdHlsZSAocy0+ZGlzcGxheSwgZ2Ms
IEZpbGxTb2xpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHczMl9maWxsX2FyZWEgKHMtPmYsIHMtPmhk
YywgZ2MtPmJhY2tncm91bmQsIHgsIHksIHcsIGgpOworICAgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoIXMtPmJhY2tncm91bmRfZmlsbGVkX3ApCisgICAgICB7
CisgICAgICAgIGludCBiYWNrZ3JvdW5kX3dpZHRoID0gcy0+YmFja2dyb3VuZF93aWR0aDsKKyAg
ICAgICAgaW50IHggPSBzLT54LCBsZWZ0X3ggPSB3aW5kb3dfYm94X2xlZnRfb2Zmc2V0IChzLT53
LCBURVhUX0FSRUEpOworICAgICAgICAvKiBEb24ndCBkcmF3IGludG8gbGVmdCBtYXJnaW4sIGZy
aW5nZSBvciBzY3JvbGxiYXIgYXJlYQorICAgICAgICAgICBleGNlcHQgZm9yIGhlYWRlciBsaW5l
IGFuZCBtb2RlIGxpbmUuICovCisgICAgICAgIGlmICh4IDwgbGVmdF94ICYmICFzLT5yb3ctPm1v
ZGVfbGluZV9wKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJhY2tncm91bmRfd2lkdGggLT0g
bGVmdF94IC0geDsKKyAgICAgICAgICAgIHggPSBsZWZ0X3g7CisgICAgICAgICAgfQorICAgICAg
ICBpZiAoYmFja2dyb3VuZF93aWR0aCA+IDApCisgICAgICAgICAgdzMyX2RyYXdfZ2x5cGhfc3Ry
aW5nX2JnX3JlY3QgKHMsIHgsIHMtPnksIGJhY2tncm91bmRfd2lkdGgsIHMtPmhlaWdodCk7Cisg
ICAgICB9CisgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworfQorCisvKiBTZXQgUy0+
Z2MgdG8gYSBzdWl0YWJsZSBHQyBmb3IgZHJhd2luZyBnbHlwaCBzdHJpbmcgUyBpbiBjdXJzb3IK
KyAgIGZhY2UuICovCitzdGF0aWMgdm9pZAorbWNfdzMyX3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBn
bHlwaF9zdHJpbmcgKnMsIGJvb2wgY3Vyc29yX2djX3ApCit7CisgIGlmIChjdXJzb3JfZ2NfcCkK
KyAgICB7CisgICAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOwor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKHMtPmZvbnQgPT0gRlJBTUVfRk9OVCAocy0+ZikK
KyAgICAgICYmIHMtPmZhY2UtPmJhY2tncm91bmQgPT0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAo
cy0+ZikKKyAgICAgICYmIHMtPmZhY2UtPmZvcmVncm91bmQgPT0gRlJBTUVfRk9SRUdST1VORF9Q
SVhFTCAocy0+ZikKKyAgICAgIC8qIFNvbWV0aW1lcyB3ZSBhcmUgbm90IGNhbGxlZCBmb3IgZWFj
aCBjaGFuZ2UgaW4gdGhlIGRlZmF1bHQKKyAgICAgIGZhY2UncyBiYWNrZ3JvdW5kIGNvbG9yIChl
LmcuLCBidWcjMjY4NTEpLCBzbyB0aGUgYWRkaXRpb25hbAorICAgICAgdGVzdCBpbiB0aGUgbmV4
dCBsaW5lIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHJlc3luYy4gKi8KKyAgICAgICYmIHMtPmYtPm91
dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djLT5mb3JlZ3JvdW5kID09IHMtPmZhY2UtPmJhY2tncm91
bmQKKyAgICAgICYmICFzLT5jbXApCisgICAgcy0+Z2MgPSBzLT5mLT5vdXRwdXRfZGF0YS53MzIt
PmN1cnNvcl9nYzsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEN1cnNvciBvbiBub24t
ZGVmYXVsdCBmYWNlOiBtdXN0IG1lcmdlLiAqLworICAgICAgICBFbWFjc19HQyB4Z2N2OworICAg
ICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgICAgIHhnY3YuYmFja2dyb3VuZCA9IHMtPmYt
Pm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsOworICAgICAgICB4Z2N2LmZvcmVncm91bmQg
PSBzLT5mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAvKiBJZiB0aGUgZ2x5cGggd291bGQgYmUg
aW52aXNpYmxlLCB0cnkgYSBkaWZmZXJlbnQgZm9yZWdyb3VuZC4gKi8KKyAgICAgICAgaWYgKHhn
Y3YuZm9yZWdyb3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgICAgeGdjdi5mb3JlZ3Jv
dW5kID0gcy0+ZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgaWYgKHhnY3YuZm9yZWdyb3VuZCA9
PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgICAgeGdjdi5mb3JlZ3JvdW5kID0gcy0+Zi0+b3V0
cHV0X2RhdGEudzMyLT5jdXJzb3JfZm9yZWdyb3VuZF9waXhlbDsKKyAgICAgICAgaWYgKHhnY3Yu
Zm9yZWdyb3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgICAgeGdjdi5mb3JlZ3JvdW5k
ID0gcy0+ZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBjdXJzb3Ig
aXMgZGlzdGluY3QgZnJvbSB0ZXh0IGluIHRoaXMgZmFjZS4gKi8KKyAgICAgICAgaWYgKHhnY3Yu
YmFja2dyb3VuZCA9PSBzLT5mYWNlLT5iYWNrZ3JvdW5kCisgICAgICAgICAgICAmJiB4Z2N2LmZv
cmVncm91bmQgPT0gcy0+ZmFjZS0+Zm9yZWdyb3VuZCkKKyAgICAgICAgICB7CisgICAgICAgICAg
ICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgeGdj
di5mb3JlZ3JvdW5kID0gcy0+ZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICB9CisgICAgICAg
IElGX0RFQlVHICh3MzJfY2hlY2tfZm9udCAocy0+Ziwgcy0+Zm9udCkpOworICAgICAgICBtYXNr
ID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kOworICAgICAgICBpZiAoRlJBTUVfRElTUExB
WV9JTkZPIChzLT5mKS0+c2NyYXRjaF9jdXJzb3JfZ2MpCisgICAgICAgICAgWENoYW5nZUdDIChO
VUxMLCBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNvcl9nYywgbWFzaywg
JnhnY3YpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEZSQU1FX0RJU1BMQVlfSU5GTyAo
cy0+ZiktPnNjcmF0Y2hfY3Vyc29yX2djCisgICAgICAgICAgICAgID0gWENyZWF0ZUdDIChOVUxM
LCBGUkFNRV9XMzJfV0lORE9XIChzLT5mKSwgbWFzaywgJnhnY3YpOworICAgICAgICBzLT5nYyA9
IEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vyc29yX2djOworICAgICAgfQor
fQorCisvKiBTZXQgUy0+Z2Mgb2YgZ2x5cGggc3RyaW5nIFMgZm9yIGRyYXdpbmcgdGhhdCBnbHlw
aCBzdHJpbmcuICBTZXQKKyAgIFMtPnN0aXBwbGVkX3AgdG8gYSBub24temVybyB2YWx1ZSBpZiB0
aGUgZmFjZSBvZiBTIGhhcyBhIHN0aXBwbGUgcGF0dGVybi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9p
ZAorbWNfdzMyX3NldF9nbHlwaF9zdHJpbmdfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIGJv
b2wgY3Vyc29yX2djX3ApCit7CisgIHByZXBhcmVfZmFjZV9mb3JfZGlzcGxheSAocy0+Ziwgcy0+
ZmFjZSk7CisgIGlmIChzLT5obCA9PSBEUkFXX05PUk1BTF9URVhUKQorICAgIHsKKyAgICAgIHMt
PmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgICBzLT5zdGlwcGxlZF9wID0gcy0+ZmFjZS0+c3RpcHBs
ZSAhPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChzLT5obCA9PSBEUkFXX0lOVkVSU0VfVklERU8p
CisgICAgICB7CisgICAgICAgIHczMl9zZXRfbW9kZV9saW5lX2ZhY2VfZ2MgKHMpOworICAgICAg
ICBzLT5zdGlwcGxlZF9wID0gcy0+ZmFjZS0+c3RpcHBsZSAhPSAwOworICAgICAgfQorICAgICAg
ZWxzZSBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IpCisgICAgICAgIHsKKyAgICAgICAgICBtY193
MzJfc2V0X2N1cnNvcl9nYyAocywgY3Vyc29yX2djX3ApOworICAgICAgICAgIHMtPnN0aXBwbGVk
X3AgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLT5obCA9PSBEUkFXX01P
VVNFX0ZBQ0UpCisgICAgICAgICAgeworICAgICAgICAgICAgdzMyX3NldF9tb3VzZV9mYWNlX2dj
IChzKTsKKyAgICAgICAgICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7
CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfSU1BR0VfUkFJ
U0VECisgICAgICAgICAgICAgICAgICAgfHwgcy0+aGwgPT0gRFJBV19JTUFHRV9TVU5LRU4pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHMtPmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgICAg
ICAgICAgIHMtPnN0aXBwbGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVtYWNzX2Fib3J0ICgpOworICAv
KiBHQyBtdXN0IGhhdmUgYmVlbiBzZXQuICovCisgIGVhc3NlcnQgKHMtPmdjICE9IDApOworfQor
CisvKiBEcmF3IGEgaG9sbG93IGJveCBjdXJzb3Igb24gd2luZG93IFcgaW4gZ2x5cGggcm93IFJP
Vy4gKi8KK3N0YXRpYyB2b2lkCittY193MzJfZHJhd19ob2xsb3dfY3Vyc29yIChzdHJ1Y3Qgd2lu
ZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csIGludCB4LCBpbnQgZngsIGludCB5LCBpbnQg
ZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaHBvcywgaW50IHZwb3MsIGludCB3
ZCwgaW50IGgpCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3
KSk7CisgIEhEQyBoZGM7CisgIFJFQ1QgcmVjdDsKKyAgSEJSVVNIIGhiID0gQ3JlYXRlU29saWRC
cnVzaCAoZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwpOworICAvKiBHZXQgdGhlIGds
eXBoIHRoZSBjdXJzb3IgaXMgb24uICBJZiB3ZSBjYW4ndCB0ZWxsIGJlY2F1c2UKKyAgICAgdGhl
IGN1cnJlbnQgbWF0cml4IGlzIGludmFsaWQgb3Igc3VjaCwgZ2l2ZSB1cC4gKi8KKyAgc3RydWN0
IGdseXBoICpjdXJzb3JfZ2x5cGggPSBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJv
dywgaHBvcywgdnBvcyk7CisgIGlmIChjdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICB7CisgICAg
ICBEZWxldGVPYmplY3QgKGhiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGludCBybCA9IGZ4
OworICBpbnQgcnQgPSBmeTsKKyAgaW50IHJyID0gcmwgKyB3ZDsKKyAgaW50IHJiID0gcnQgKyBo
OworICAvLyAgZnByaW50ZiAoc3RkZXJyLCAiTUNfSE9MTE9XX0JPWDogIHJsICglZCkgfCBydCAo
JWQpIHwgcnIgKCVkKSB8IHJiICglZClcbiIsCisgIC8vICAgICAgICAgICAgICAgICAgIHJsLCBy
dCwgcnIsIHJiKTsKKyAgcmVjdC5sZWZ0ID0gcmw7CisgIHJlY3QudG9wID0gcnQ7CisgIHJlY3Qu
cmlnaHQgPSBycjsKKyAgcmVjdC5ib3R0b20gPSByYjsKKyAgaGRjID0gZ2V0X2ZyYW1lX2RjIChm
KTsKKyAgLyogU2V0IGNsaXBwaW5nLCBkcmF3IHRoZSByZWN0YW5nbGUsIGFuZCByZXNldCBjbGlw
cGluZyBhZ2Fpbi4gKi8KKyAgdzMyX2NsaXBfdG9fcm93ICh3LCByb3csIFRFWFRfQVJFQSwgaGRj
KTsKKyAgRnJhbWVSZWN0IChoZGMsICZyZWN0LCBoYik7CisgIERlbGV0ZU9iamVjdCAoaGIpOwor
ICB3MzJfc2V0X2NsaXBfcmVjdGFuZ2xlIChoZGMsIE5VTEwpOworICByZWxlYXNlX2ZyYW1lX2Rj
IChmLCBoZGMpOworfQorCisvKiBEcmF3IGEgYmFyIGN1cnNvciBvbiB3aW5kb3cgVyBpbiBnbHlw
aCByb3cgUk9XLiAqLworc3RhdGljIHZvaWQKK21jX3czMl9kcmF3X2Jhcl9jdXJzb3IgKHN0cnVj
dCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3Jv
dyAqcm93LAorICBpbnQgeCwgaW50IGZ4LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50IHZw
b3MsIGludCB3ZCwgaW50IGgsIGludCB3aWR0aCwKKyAgZW51bSBtY19jdXJzb3JfdHlwZSBraW5k
LCBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKQoreworICBzdHJ1Y3QgZnJhbWUgKmYg
PSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgLyogSWYgY3Vyc29yIGlzIG91dCBvZiBib3VuZHMsIGRv
bid0IGRyYXcgZ2FyYmFnZS4gIFRoaXMgY2FuIGhhcHBlbgorICAgICBpbiBtaW5pLWJ1ZmZlciB3
aW5kb3dzIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWNobyBhcmVhIGdseXBocworICAgICBhbmQg
bWluaS1idWZmZXIuICovCisgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1
cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhwb3MsIHZwb3MpOworICBpZiAoY3Vyc29yX2ds
eXBoID09IE5VTEwpCisgICAgcmV0dXJuOworICAvKiBJZiBvbiBhbiBpbWFnZSwgZHJhdyBsaWtl
IGEgbm9ybWFsIGN1cnNvci4gIFRoYXQncyB1c3VhbGx5IGJldHRlcgorICAgICB2aXNpYmxlIHRo
YW4gZHJhd2luZyBhIGJhciwgZXNwLiBpZiB0aGUgaW1hZ2UgaXMgbGFyZ2Ugc28gdGhhdAorICAg
ICB0aGUgYmFyIG1pZ2h0IG5vdCBiZSBpbiB0aGUgd2luZG93LiAqLworICBpZiAoY3Vyc29yX2ds
eXBoLT50eXBlID09IElNQUdFX0dMWVBIKQorICAgIHsKKyAgICAgIHN0cnVjdCBtY19SR0IgbHNs
ID0gey5yZWQgPSAtMS4wLCAuZ3JlZW4gPSAtMS4wLCAuYmx1ZSA9IC0xLjB9OworICAgICAgZW51
bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gTk9fRkxBVk9SOworICAgICAgZW51bSBtY19jdXJz
b3JfdHlwZSBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBib29sIGFjdGl2ZV9w
ID0gZmFsc2U7CisgICAgICBib29sIGN1cnNvcl9nY19wID0gZmFsc2U7CisgICAgICBtY19kcmF3
X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9z
LCBsc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3Jf
dHlwZSwgd2QsIGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisgICAgfQorICAgIGVsc2UKKyAgICAg
IHsKKyAgICAgICAgQ09MT1JSRUYgY3Vyc29yX2NvbG9yID0gZi0+b3V0cHV0X2RhdGEudzMyLT5j
dXJzb3JfcGl4ZWw7CisgICAgICAgIHN0cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChm
LCBjdXJzb3JfZ2x5cGgtPmZhY2VfaWQpOworICAgICAgICBIREMgaGRjOworICAgICAgICAvKiBJ
ZiB0aGUgZ2x5cGgncyBiYWNrZ3JvdW5kIGVxdWFscyB0aGUgY29sb3Igd2Ugbm9ybWFsbHkgZHJh
dworICAgICAgICB0aGUgYmFyIGN1cnNvciBpbiwgdGhlIGJhciBjdXJzb3IgaW4gaXRzIG5vcm1h
bCBjb2xvciBpcworICAgICAgICBpbnZpc2libGUuICBVc2UgdGhlIGdseXBoJ3MgZm9yZWdyb3Vu
ZCBjb2xvciBpbnN0ZWFkIGluIHRoaXMKKyAgICAgICAgY2FzZSwgb24gdGhlIGFzc3VtcHRpb24g
dGhhdCB0aGUgZ2x5cGgncyBjb2xvcnMgYXJlIGNob3NlbiBzbworICAgICAgICB0aGF0IHRoZSBn
bHlwaCBpcyBsZWdpYmxlLiAqLworICAgICAgICBpZiAoZmFjZS0+YmFja2dyb3VuZCA9PSBjdXJz
b3JfY29sb3IKKyAgICAgICAgICAgICYmICFjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCkKKyAg
ICAgICAgICBjdXJzb3JfY29sb3IgPSBmYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICBpbnQgZGVm
YXVsdF9meCA9IFdJTkRPV19URVhUX1RPX0ZSQU1FX1BJWEVMX1ggKHcsIHgpOworICAgICAgICBo
ZGMgPSBnZXRfZnJhbWVfZGMgKGYpOworICAgICAgICB3MzJfY2xpcF90b19yb3cgKHcsIHJvdywg
VEVYVF9BUkVBLCBoZGMpOworICAgICAgICBpbnQgcnggPSBmeDsKKyAgICAgICAgaW50IHJ5ID0g
Znk7CisgICAgICAgIGludCBydyA9IHdkOworICAgICAgICBpbnQgcmggPSBoOworICAgICAgICAv
LyAgZnByaW50ZiAoc3RkZXJyLCAiTUNfSEJBUjogIGZ4ICglZCkgfCBmeSAoJWQpIHwgd2QgKCVk
KSB8IGggKCVkKVxuIiwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgcngsIHJ5LCBydywg
cmgpOworICAgICAgICB3MzJfZmlsbF9hcmVhIChmLCBoZGMsIGN1cnNvcl9jb2xvciwgcngsIHJ5
LCBydywgcmgpOworICAgICAgICB3MzJfc2V0X2NsaXBfcmVjdGFuZ2xlIChoZGMsIE5VTEwpOwor
ICAgICAgICByZWxlYXNlX2ZyYW1lX2RjIChmLCBoZGMpOworICAgICAgfQorfQorCisvKiBSSUY6
IERyYXcgb3IgY2xlYXIgY3Vyc29yIG9uIHdpbmRvdyBXLiAqLworc3RhdGljIHZvaWQKK21jX3cz
Ml9kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRy
aXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgICAgICAgaW50
IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGlu
dCBoLAorICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfY3Vyc29y
X3R5cGUgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoLCBl
bnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IsIGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKK3sK
KyAgaWYgKG9uX3ApCisgICAgeworICAgICAgLyogSWYgdGhpcyBpcyB0aGUgYWN0aXZlIGN1cnNv
ciwgd2UgbmVlZCB0byB0cmFjayBpdCB3aXRoIHRoZQorICAgICAgc3lzdGVtIGNhcmV0LCBzbyB0
aGlyZCBwYXJ0eSBzb2Z0d2FyZSBsaWtlIHNjcmVlbiBtYWduaWZpZXJzCisgICAgICBhbmQgc3Bl
ZWNoIHN5bnRoZXNpemVycyBjYW4gZm9sbG93IHRoZSBjdXJzb3IuICovCisgICAgICBpZiAoYWN0
aXZlX3ApCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJ
TkRPV19GUkFNRSAodykpOworICAgICAgICAgIEhXTkQgaHduZCA9IEZSQU1FX1czMl9XSU5ET1cg
KGYpOworICAgICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfeAorICAgICAgICAgICAgPSBXSU5ET1df
VEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB4KTsKKyAgICAgICAgICAvKiBGSVhNRTogIFdoYXQg
c2hvdWxkIHdlIHVzZSBpbnN0ZWFkIG9mIGB3LT5waHlzX2N1cnNvcl9hc2NlbnQnPyAqLworICAg
ICAgICAgIHczMl9zeXN0ZW1fY2FyZXRfeQorICAgICAgICAgICAgPSAoV0lORE9XX1RPX0ZSQU1F
X1BJWEVMX1kgKHcsIHkpCisgICAgICAgICAgICAgICArIHJvdy0+YXNjZW50IC0gdy0+cGh5c19j
dXJzb3JfYXNjZW50KTsKKyAgICAgICAgICB3MzJfc3lzdGVtX2NhcmV0X3dpbmRvdyA9IHc7Cisg
ICAgICAgICAgdzMyX3N5c3RlbV9jYXJldF9oZHJfaGVpZ2h0ID0gV0lORE9XX0hFQURFUl9MSU5F
X0hFSUdIVCAodyk7CisgICAgICAgICAgdzMyX3N5c3RlbV9jYXJldF9tb2RlX2hlaWdodCA9IFdJ
TkRPV19NT0RFX0xJTkVfSEVJR0hUICh3KTsKKyAgICAgICAgICBQb3N0TWVzc2FnZSAoaHduZCwg
V01fSU1FX1NUQVJUQ09NUE9TSVRJT04sIDAsIDApOworICAgICAgICAgIC8qIElmIHRoZSBzaXpl
IG9mIHRoZSBhY3RpdmUgY3Vyc29yIGNoYW5nZWQsIGRlc3Ryb3kgdGhlIG9sZAorICAgICAgICAg
ICAgIHN5c3RlbSBjYXJldC4gKi8KKyAgICAgICAgICBpZiAodzMyX3N5c3RlbV9jYXJldF9od25k
CisgICAgICAgICAgICAgICYmICh3MzJfc3lzdGVtX2NhcmV0X2hlaWdodCAhPSBoKSkKKyAgICAg
ICAgICAgIFBvc3RNZXNzYWdlIChod25kLCBXTV9FTUFDU19ERVNUUk9ZX0NBUkVULCAwLCAwKTsK
KyAgICAgICAgICB3MzJfc3lzdGVtX2NhcmV0X2hlaWdodCA9IGg7CisgICAgICAgICAgLyogTW92
ZSB0aGUgc3lzdGVtIGNhcmV0LiAqLworICAgICAgICAgIFBvc3RNZXNzYWdlIChod25kLCBXTV9F
TUFDU19UUkFDS19DQVJFVCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgIC8qIFRoZSBmcmluZ2Ug
Yml0bWFwcyBhcmUgcHJlc2VudGx5IGhhbmRsZWQgZWxzZXdoZXJlLCBidXQgY291bGQgc29tZWRh
eQorICAgICAgYmUgbWFuYWdlZCAoaW4gcGFydCkgYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUuICov
CisgICAgICBpZiAocm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgJiYg
KHJvdy0+cmV2ZXJzZWRfcAorICAgICAgICAgICAgID8gKGhwb3MgPCAwKQorICAgICAgICAgICAg
IDogKGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJFQV0pKSkKKyAgICAgICAgeworICAgICAgICAg
IHJvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0gdHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2ZyaW5n
ZV9iaXRtYXAgKHcsIHJvdywgcm93LT5yZXZlcnNlZF9wLCBjdXJzb3JfdHlwZSk7CisgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9X
X0ZSQU1FICh3KSk7CisgIENPTE9SUkVGIG9yaWdpbmFsX2N1cnNvcl9waXhlbCA9IGYtPm91dHB1
dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsOworICAvKiB4dGVybS5jL3h0ZXJtLmggdXNlIEdDOyB3
aGVyZWFzLCB3MzJ0ZXJtLmMvdzMydGVybS5oIHVzZSBFbWFjc19HQyAqICovCisgIEVtYWNzX0dD
ICpvcmlnaW5hbF9jdXJzb3JfZ2MgPSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYzsKKyAg
LyogT24gV2luZG93cywgUkdCIHZhbHVlcyBhcmUgMC0yNTUsIG5vdCAwLTY1NTM1LiAqLworICBp
bnQgcmVkID0gbWluICgyNTUsIDI1NSAqIGxzbC5yZWQpOworICBpbnQgZ3JlZW4gPSBtaW4gKDI1
NSwgMjU1ICogbHNsLmdyZWVuKTsKKyAgaW50IGJsdWUgPSBtaW4gKDI1NSwgMjU1ICogbHNsLmJs
dWUpOworICBDT0xPUlJFRiBjb2xvcl9waXhlbCA9IFBBTEVUVEVSR0IgKHJlZCwgZ3JlZW4sIGJs
dWUpOworICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICB7CisgICAgY2FzZSBNQ19OT19GUklOR0Vf
QklUTUFQOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19OT19DVVJTT1I6CisgICAgICBicmVh
azsKKyAgICBjYXNlIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA6CisgICAgICBicmVhazsKKyAgICBj
YXNlIE1DX0xFRlRfRlJJTkdFX0JJVE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTUNfRlJB
TUVEX0JPWDoKKyAgICB7CisgICAgICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dl
dF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAgICAgIGlmIChj
dXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgICAgRW1hY3NfR0MgZ2Nf
dmFsdWVzOworICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNr
Z3JvdW5kOworICAgICAgc3RydWN0IGZhY2UgKmRlZmF1bHRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAo
ZiwgREVGQVVMVF9GQUNFX0lEKTsKKyAgICAgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSICh3
LT5jb250ZW50cyk7CisgICAgICBib29sIHJlZ2lvbl9hY3RpdmVfcCA9ICghTklMUCAoVnRyYW5z
aWVudF9tYXJrX21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAo
QlZBUiAoYiwgbWFya19hY3RpdmUpKSk7CisgICAgICBwdHJkaWZmX3QgcmVnaW9uX2JlZyA9IChy
ZWdpb25fYWN0aXZlX3ApID8gbWNfcmVnaW9uX2xpbWl0ICgxKSA6IC0xOworICAgICAgcHRyZGlm
Zl90IHJlZ2lvbl9lbmQgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IG1jX3JlZ2lvbl9saW1pdCAoMCkg
OiAtMTsKKyAgICAgIGlmIChjdXJzb3JfZ2x5cGgtPnR5cGUgIT0gSU1BR0VfR0xZUEggJiYgbHNs
LnJlZCA+PSAwICYmIGxzbC5ncmVlbiA+PSAwICYmIGxzbC5ibHVlID49IDApCisgICAgICAgIHsK
KyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vy
c29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9t
YWtlX2djJyBpbiB3MzJmbnMuYy4gKi8KKyAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisg
ICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+
Y2hhcnBvcyA9PSByZWdpb25fYmVnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVt
IGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRf
ZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYt
ZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf
cmVnaW9uX2JlZ19mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9i
ZWdfZmFjZV9pZCk7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2Zh
Y2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vy
c29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9s
bG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQp
OworICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19hY3RpdmVfZmFj
ZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xs
b3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAg
JiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBv
cyA9PSByZWdpb25fZW5kKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBm
YWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lkID0gbG9va3VwX25hbWVkX2Zh
Y2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1hdC1yZWdpb24tcHJlLXp2LWZh
Y2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf
cmVnaW9uX2VuZF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9l
bmRfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVf
ZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1j
dXJzb3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgc3RydWN0IGZhY2Ug
KmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNl
X2lkKTsKKyAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19hY3Rp
dmVfZmFjZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3Vu
ZCA9IGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAg
ICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJz
b3JfZ2x5cGgtPmNoYXJwb3MgPiByZWdpb25fYmVnCisgICAgICAgICAgICAgICAgICAgICAgICYm
IGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA8IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdl
ZW5fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr
ZS1jdXJzb3ItaW4tcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAg
ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZSA9IEZBQ0Vf
RlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlX2lkKTsKKyAgICAg
ICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBf
bmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNl
IiksIHRydWUpOworICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVf
ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAg
ICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3Jl
Z3JvdW5kOworICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3df
YWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFjdGl2ZV9wKQorICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lk
ID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1w
cmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhv
bGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lk
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfYWN0
aXZlX2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNr
Z3JvdW5kID0gaG9sbG93X2FjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kOworICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFj
dGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m
YWtlLWN1cnNvci1pbmFjdGl2ZS1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQg
KGYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgICBnY192
YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19pbmFjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kOworICAg
ICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9sbG93X2luYWN0aXZl
X2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICBmLT5v
dXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IFhDcmVhdGVHQyAoTlVMTCwgRlJBTUVfVzMyX1dJ
TkRPVyAoZiksIG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAgIGJsb2NrX2lucHV0ICgpOwor
ICAgICAgICAgIC8qIEZvcmNlIGBtY193MzJfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5v
dXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYycuICovCisgICAgICAgICAgYm9vbCBjdXJzb3JfZ2Nf
cCA9IHRydWU7CisgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93
LCBEUkFXX0NVUlNPUiwgeCwgaHBvcywgdnBvcywgbHNsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBlLCB3ZCwgYWN0aXZlX3AsIGN1cnNv
cl9nY19wKTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IG9yaWdp
bmFsX2N1cnNvcl9nYzsKKyAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgIC8q
IFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAq
LworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4
ZWw7CisgICAgICAgICAgbWNfdzMyX2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0cml4LCByb3cs
IHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAgIGYtPm91dHB1dF9k
YXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGN1cnNvcl9nbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCAmJiBs
c2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAg
ICB7CisgICAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLncz
Mi0+Y3Vyc29yX3BpeGVsJy4gKi8KKyAgICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vy
c29yX3BpeGVsID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgICBtY193MzJfZHJhd19ob2xsb3df
Y3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7
CisgICAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFs
X2N1cnNvcl9waXhlbDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLncz
Mi0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAgICAgIGZ1bmN0aW9uYWxp
dHkgb2YgYHhfbWFrZV9nYycgaW4gdzMyZm5zLmMuICovCisgICAgICAgICAgICAgIGlmIChyZWdp
b25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAg
ICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPT0gcmVnaW9uX2JlZykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdp
b25fYmVnX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFs
LWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZSA9IEZBQ0Vf
RlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQpOworICAgICAgICAg
ICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1l
ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2UiKSwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNl
ID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAg
ICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91
bmQ7CisgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuYmFja2dyb3VuZCA9IGhvbGxvd19hY3Rp
dmVfcmVnaW9uX2JlZ19mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBhY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlw
aC0+Y2hhcnBvcyA9PSByZWdpb25fZW5kKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQg
PSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0
LXJlZ2lvbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBo
b2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgIGVu
dW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywg
ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9G
Uk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICBn
Y192YWx1ZXMuZm9yZWdyb3VuZCA9IGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZDsKKyAg
ICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3dfYWN0aXZlX3Jl
Z2lvbl9lbmRfZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9n
bHlwaC0+Y2hhcnBvcyA+IHJlZ2lvbl9iZWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IGN1cnNvcl9nbHlwaC0+Y2hhcnBvcyA8IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdp
b25fYmV0d2Vlbl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist
cmVhbC1mYWtlLWN1cnNvci1pbi1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5f
ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNl
X2lkKTsKKyAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9m
YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1
cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZmFjZSAqaG9sbG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZl
X2ZhY2VfaWQpOworICAgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0g
aG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgICAgICAgIGdj
X3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlLT5m
b3JlZ3JvdW5kOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGFjdGl2ZV9wKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFt
ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNlIiks
IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3Rp
dmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2FjdGl2ZV9m
YWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tn
cm91bmQgPSBob2xsb3dfYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBmYWNl
X2lkIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGlu
dGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1pbmFjdGl2ZS1wcmUtenYtZmFjZSIpLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9m
YWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gaG9sbG93X2luYWN0aXZl
X2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5i
YWNrZ3JvdW5kID0gaG9sbG93X2luYWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29y
X2djID0gWENyZWF0ZUdDIChOVUxMLCBGUkFNRV9XMzJfV0lORE9XIChmKSwgbWFzaywgJmdjX3Zh
bHVlcyk7CisgICAgICAgICAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAvKiBG
b3JjZSBgbWNfdzMyX3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMy
LT5jdXJzb3JfZ2MnLiAqLworICAgICAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgbWNfZHJhd19jdXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBEUkFX
X0NVUlNPUiwgeCwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxzbCwgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBjdXJzb3Jf
Z2NfcCk7CisgICAgICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djID0gb3Jp
Z2luYWxfY3Vyc29yX2djOworICAgICAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAg
ICAgICAgICBtY193MzJfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngs
IHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7CisgICAgICAgICAgICB9CisgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBNQ19IT0xMT1dfQk9YOgorICAgIHsKKyAgICAgIGlmIChsc2wucmVk
ID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAg
ICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3Jf
cGl4ZWwnLiAqLworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0g
Y29sb3JfcGl4ZWw7CisgICAgICAgICAgbWNfdzMyX2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0
cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAgIGYt
Pm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtY193MzJfZHJhd19ob2xsb3dfY3Vy
c29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCk7Cisg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAgIHsKKyAgICAg
IGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEu
dzMyLT5jdXJzb3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5
IG9mIGB4X21ha2VfZ2MnIGluIHczMmZucy5jLiAqLworICAgICAgICAgIGJsb2NrX2lucHV0ICgp
OworICAgICAgICAgIEVtYWNzX0dDIGdjX3ZhbHVlczsKKyAgICAgICAgICB1bnNpZ25lZCBsb25n
IG1hc2sgPSBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQ7CisgICAgICAgICAgZ2NfdmFsdWVz
LmZvcmVncm91bmQgPSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChmKTsKKyAgICAgICAgICBnY192
YWx1ZXMuYmFja2dyb3VuZCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIGYtPm91dHB1dF9kYXRh
LnczMi0+Y3Vyc29yX2djID0gWENyZWF0ZUdDIChOVUxMLCBGUkFNRV9XMzJfV0lORE9XIChmKSwg
bWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAgLyogRm9yY2UgYG1jX3czMl9zZXRfY3Vyc29y
X2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJy4gKi8KKyAgICAg
ICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2N1cnNvcl9n
bHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUs
IHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLncz
Mi0+Y3Vyc29yX2djID0gb3JpZ2luYWxfY3Vyc29yX2djOworICAgICAgICAgIHVuYmxvY2tfaW5w
dXQgKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgICAgICAgICAgIG1jX2RyYXdfY3Vyc29yX2ds
eXBoICh3LCBtYXRyaXgsIHJvdywgRFJBV19DVVJTT1IsIHgsIGhwb3MsIHZwb3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsLCBnbHlwaF9mbGF2b3IsIGN1cnNvcl90eXBl
LCB3ZCwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29y
X2djX3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE1DX0JB
UjoKKyAgICB7CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxzbC5ncmVlbiA+PSAwICYmIGxz
bC5ibHVlID49IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sg
YGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsJy4gKi8KKyAgICAgICAgICBmLT5vdXRw
dXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIGJvb2wg
Y3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3AgPSB0cnVlOworICAgICAgICAgIG1jX3czMl9kcmF3
X2Jhcl9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgsIGN1cnNvcl93aWR0aCwgTUNf
QkFSLCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2Rh
dGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJzb3JfcGl4ZWw7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgY3Vyc29yX2djX2lu
dmlzaWJsZV9va2F5X3AgPSBmYWxzZTsKKyAgICAgICAgICAgIG1jX3czMl9kcmF3X2Jhcl9jdXJz
b3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCwgY3Vyc29yX3dpZHRoLCBNQ19CQVIsIGN1
cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAgICAgICAgICB9CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBNQ19IQkFSOgorICAgIHsKKyAgICAgIGlmIChsc2wucmVkID49IDAgJiYg
bHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8q
IFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAq
LworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4
ZWw7CisgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IHRydWU7Cisg
ICAgICAgICAgbWNfdzMyX2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5
LCBmeSwgaHBvcywgdnBvcywgd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aCwgY3Vyc29yX3dpZHRoLCBNQ19IQkFSLCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCk7Cisg
ICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJz
b3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAg
ICAgIGJvb2wgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5X3AgPSBmYWxzZTsKKyAgICAgICAgICAg
IG1jX3czMl9kcmF3X2Jhcl9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhw
b3MsIHZwb3MsIHdkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCwgY3Vy
c29yX3dpZHRoLCBNQ19IQkFSLCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCk7CisgICAgICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBlbWFjc19hYm9y
dCAoKTsKKyAgfQorICAgIH0KK30KKworLyogRHJhdyBnbHlwaCBzdHJpbmcgUy4gIFRoZSBgbWNf
bWF0cml4YCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aGVuIGVyYXNpbmcKKyAgIGZha2Ug
Y3Vyc29ycyBkdXJpbmcgYG1jX3VwZGF0ZV93aW5kb3dfZXJhc2UnIGFuZCByZWRyYXdpbmcgZmFr
ZSBjdXJzb3JzIG9uCisgICBsZWZ0L3JpZ2h0IG92ZXJ3cml0dGVuIGdseXBocy4gKi8KK3N0YXRp
YyB2b2lkCittY193MzJfZHJhd19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMs
IHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgbWNfbWF0cml4IG1jX21hdHJpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfZmxhdm9yIGds
eXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlw
ZSBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhY3RpdmVfcCwgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgYm9vbCByZWxpZWZfZHJh
d25fcCA9IDA7CisgIC8qIElmIFMgZHJhd3MgaW50byB0aGUgYmFja2dyb3VuZCBvZiBpdHMgc3Vj
Y2Vzc29yLCBkcmF3IHRoZQorICAgICBiYWNrZ3JvdW5kIG9mIHRoZSBzdWNjZXNzb3IgZmlyc3Qg
c28gdGhhdCBTIGNhbiBkcmF3IGludG8gaXQuCisgICAgIFRoaXMgbWFrZXMgUy0+bmV4dCB1c2Ug
WERyYXdTdHJpbmcgaW5zdGVhZCBvZiBYRHJhd0ltYWdlU3RyaW5nLiAqLworICBpZiAocy0+bmV4
dCAmJiBzLT5yaWdodF9vdmVyaGFuZyAmJiAhcy0+Zm9yX292ZXJsYXBzKQorICAgIHsKKyAgICAg
IGludCB3aWR0aDsKKyAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5leHQ7CisgICAgICBmb3Ig
KHdpZHRoID0gMCwgbmV4dCA9IHMtPm5leHQ7CisgICAgICAgICAgIG5leHQgJiYgd2lkdGggPCBz
LT5yaWdodF9vdmVyaGFuZzsKKyAgICAgICAgICAgd2lkdGggKz0gbmV4dC0+d2lkdGgsIG5leHQg
PSBuZXh0LT5uZXh0KQorICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgIT0gSU1B
R0VfR0xZUEgpCisgICAgICAgICAgeworICAgICAgICAgICAgbWNfdzMyX3NldF9nbHlwaF9zdHJp
bmdfZ2MgKG5leHQsIGN1cnNvcl9nY19wKTsKKyAgICAgICAgICAgIHczMl9zZXRfZ2x5cGhfc3Ry
aW5nX2NsaXBwaW5nIChuZXh0KTsKKyAgICAgICAgICAgIGlmIChuZXh0LT5maXJzdF9nbHlwaC0+
dHlwZSA9PSBTVFJFVENIX0dMWVBIKQorICAgICAgICAgICAgICBtY193MzJfZHJhd19zdHJldGNo
X2dseXBoX3N0cmluZyAobmV4dCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB3MzJfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAobmV4dCwgdHJ1ZSk7CisgICAgICAg
ICAgICBuZXh0LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgIH0KKyAgICB9CisgIC8qIFNldCB1
cCBTLT5nYywgc2V0IGNsaXBwaW5nIGFuZCBkcmF3IFMuICovCisgIG1jX3czMl9zZXRfZ2x5cGhf
c3RyaW5nX2djIChzLCBjdXJzb3JfZ2NfcCk7CisgIC8qIERyYXcgcmVsaWVmIChpZiBhbnkpIGlu
IGFkdmFuY2UgZm9yIGNoYXIvY29tcG9zaXRpb24gc28gdGhhdCB0aGUKKyAgICAgZ2x5cGggc3Ry
aW5nIGNhbiBiZSBkcmF3biBvdmVyIGl0LiAqLworICBpZiAoIXMtPmZvcl9vdmVybGFwcworICAg
ICAgJiYgcy0+ZmFjZS0+Ym94ICE9IEZBQ0VfTk9fQk9YCisgICAgICAmJiAocy0+Zmlyc3RfZ2x5
cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgIHx8IHMtPmZpcnN0X2dseXBoLT50eXBl
ID09IENPTVBPU0lURV9HTFlQSCkpCisgICAgeworICAgICAgdzMyX3NldF9nbHlwaF9zdHJpbmdf
Y2xpcHBpbmcgKHMpOworICAgICAgdzMyX2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHMs
IHRydWUpOworICAgICAgdzMyX2RyYXdfZ2x5cGhfc3RyaW5nX2JveCAocyk7CisgICAgICB3MzJf
c2V0X2dseXBoX3N0cmluZ19jbGlwcGluZyAocyk7CisgICAgICByZWxpZWZfZHJhd25fcCA9IDE7
CisgICAgfQorICBlbHNlIGlmICghcy0+Y2xpcF9oZWFkIC8qIGRyYXdfZ2x5cGhzIGRpZG4ndCBz
cGVjaWZ5IGEgY2xpcCBtYXNrLiAqLworICAgICAgICAgICAmJiAhcy0+Y2xpcF90YWlsCisgICAg
ICAgICAgICYmICgocy0+cHJldiAmJiBzLT5wcmV2LT5obCAhPSBzLT5obCAmJiBzLT5sZWZ0X292
ZXJoYW5nKQorICAgICAgICAgICAgICAgfHwgKHMtPm5leHQgJiYgcy0+bmV4dC0+aGwgIT0gcy0+
aGwgJiYgcy0+cmlnaHRfb3ZlcmhhbmcpKSkKKyAgICAvKiBXZSBtdXN0IGNsaXAganVzdCB0aGlz
IGdseXBoLiAgbGVmdF9vdmVyaGFuZyBwYXJ0IGhhcyBhbHJlYWR5CisgICAgICAgZHJhd24gd2hl
biBzLT5wcmV2IHdhcyBkcmF3biwgYW5kIHJpZ2h0X292ZXJoYW5nIHBhcnQgd2lsbCBiZQorICAg
ICAgIGRyYXduIGxhdGVyIHdoZW4gcy0+bmV4dCBpcyBkcmF3bi4gKi8KKyAgICB3MzJfc2V0X2ds
eXBoX3N0cmluZ19jbGlwcGluZ19leGFjdGx5IChzLCBzKTsKKyAgZWxzZQorICAgIHczMl9zZXRf
Z2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgc3dpdGNoIChzLT5maXJzdF9nbHlwaC0+dHlw
ZSkKKyAgICB7CisgICAgY2FzZSBJTUFHRV9HTFlQSDoKKyAgICAgIHczMl9kcmF3X2ltYWdlX2ds
eXBoX3N0cmluZyAocyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNUUkVUQ0hfR0xZUEg6Cisg
ICAgICBtY193MzJfZHJhd19zdHJldGNoX2dseXBoX3N0cmluZyAocyk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIENIQVJfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzKQorICAgICAg
ICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgdzMy
X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQgKHMsIGZhbHNlKTsKKyAgICAgIHczMl9kcmF3
X2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ09N
UE9TSVRFX0dMWVBIOgorICAgICAgaWYgKHMtPmZvcl9vdmVybGFwcyB8fCAocy0+Y21wX2Zyb20g
PiAwCisgICAgICAgICAgJiYgISBzLT5maXJzdF9nbHlwaC0+dS5jbXAuYXV0b21hdGljKSkKKyAg
ICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAgICBlbHNlCisgICAgICAg
IHczMl9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCB0cnVlKTsKKyAgICAgIHczMl9k
cmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocyk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIEdMWVBITEVTU19HTFlQSDoKKyAgICAgIGlmIChzLT5mb3Jfb3ZlcmxhcHMpCisg
ICAgICAgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSB0cnVlOworICAgICAgZWxzZQorICAgICAg
ICB3MzJfZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgZmFsc2UpOworICAgICAgdzMy
X2RyYXdfZ2x5cGhsZXNzX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzKTsKKyAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICBlbWFjc19hYm9ydCAoKTsKKyAgICB9CisgIGlmICghcy0+
Zm9yX292ZXJsYXBzKQorICAgIHsKKyAgICAgIC8qIERyYXcgdW5kZXJsaW5lLiAqLworICAgICAg
aWYgKHMtPmZhY2UtPnVuZGVybGluZV9wKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHMtPmZh
Y2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5ERVJfV0FWRSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgQ09MT1JSRUYgY29sb3I7CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51
bmRlcmxpbmVfZGVmYXVsdGVkX3ApCisgICAgICAgICAgICAgICAgY29sb3IgPSBzLT5nYy0+Zm9y
ZWdyb3VuZDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjb2xvciA9
IHMtPmZhY2UtPnVuZGVybGluZV9jb2xvcjsKKyAgICAgICAgICAgICAgdzMyX2RyYXdfdW5kZXJ3
YXZlIChzLCBjb2xvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocy0+ZmFj
ZS0+dW5kZXJsaW5lX3R5cGUgPT0gRkFDRV9VTkRFUl9MSU5FKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRoaWNrbmVzcywgcG9zaXRpb247CisgICAgICAgICAg
ICAgIGludCB5OworICAgICAgICAgICAgICBpZiAocy0+cHJldiAmJiBzLT5wcmV2LT5mYWNlLT51
bmRlcmxpbmVfcAorICAgICAgICAgICAgICAgICAgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJsaW5l
X3R5cGUgPT0gRkFDRV9VTkRFUl9MSU5FKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgIC8qIFdlIHVzZSB0aGUgc2FtZSB1bmRlcmxpbmUgc3R5bGUgYXMgdGhlIHByZXZpb3Vz
IG9uZS4gKi8KKyAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPnByZXYtPnVuZGVybGlu
ZV90aGlja25lc3M7CisgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHMtPnByZXYtPnVuZGVy
bGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIHVuZGVybGluZSB0
aGlja25lc3MuICBEZWZhdWx0IGlzIDEgcGl4ZWwuICovCisgICAgICAgICAgICAgICAgICBpZiAo
cy0+Zm9udCAmJiBzLT5mb250LT51bmRlcmxpbmVfdGhpY2tuZXNzID4gMCkKKyAgICAgICAgICAg
ICAgICAgICAgdGhpY2tuZXNzID0gcy0+Zm9udC0+dW5kZXJsaW5lX3RoaWNrbmVzczsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7
CisgICAgICAgICAgICAgICAgICBpZiAoeF91bmRlcmxpbmVfYXRfZGVzY2VudF9saW5lKQorICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChzLT5oZWlnaHQgLSB0aGlja25lc3MpIC0gKHMt
PnliYXNlIC0gcy0+eSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIHVuZGVybGluZSBw
b3NpdGlvbi4gIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJ0aWNhbCBvZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0
b3Agb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1bmRlcmxpbmUuICBUaGlzIGlz
IGEgc2lnbmVkIHZhbHVlIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWNzLCBhbmQgaXRzIGRlZmF1bHQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJPVU5EICgobWF4aW11bV9kZXNjZW50KSAvIDIpLCB3aXRoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBST1VORCAoeCkgPSBmbG9vciAoeCArIDAuNSkgICovCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeF91c2VfdW5kZXJsaW5lX3Bvc2l0aW9uX3Byb3BlcnRpZXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBzLT5mb250ICYmIHMtPmZvbnQtPnVuZGVybGluZV9wb3Np
dGlvbiA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHMtPmZvbnQt
PnVuZGVybGluZV9wb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMt
PmZvbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKHMtPmZvbnQtPmRl
c2NlbnQgKyAxKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgcG9zaXRpb24gPSBtYXggKHBvc2l0aW9uLCB1bmRlcmxpbmVfbWluaW11bV9vZmZzZXQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogQ2hlY2sgdGhlIHNhbml0eSBvZiB0
aGlja25lc3MgYW5kIHBvc2l0aW9uLiAgV2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgIGF2b2lk
IGRyYXdpbmcgdW5kZXJsaW5lIG91dCBvZiB0aGUgY3VycmVudCBsaW5lIGFyZWEuICovCisgICAg
ICAgICAgICAgIGlmIChzLT55ICsgcy0+aGVpZ2h0IDw9IHMtPnliYXNlICsgcG9zaXRpb24pCisg
ICAgICAgICAgICAgICAgcG9zaXRpb24gPSAocy0+aGVpZ2h0IC0gMSkgLSAocy0+eWJhc2UgLSBz
LT55KTsKKyAgICAgICAgICAgICAgaWYgKHMtPnkgKyBzLT5oZWlnaHQgPCBzLT55YmFzZSArIHBv
c2l0aW9uICsgdGhpY2tuZXNzKQorICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IChzLT55ICsg
cy0+aGVpZ2h0KSAtIChzLT55YmFzZSArIHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgcy0+dW5k
ZXJsaW5lX3RoaWNrbmVzcyA9IHRoaWNrbmVzczsKKyAgICAgICAgICAgICAgcy0+dW5kZXJsaW5l
X3Bvc2l0aW9uID1wb3NpdGlvbjsKKyAgICAgICAgICAgICAgeSA9IHMtPnliYXNlICsgcG9zaXRp
b247CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfZGVmYXVsdGVkX3ApCisg
ICAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBzLT5nYy0+Zm9yZWdy
b3VuZCwgcy0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LCBzLT53aWR0aCwg
MSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgdzMyX2ZpbGxfYXJl
YSAocy0+Ziwgcy0+aGRjLCBzLT5mYWNlLT51bmRlcmxpbmVfY29sb3IsIHMtPngsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB5LCBzLT53aWR0aCwgMSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIC8qIERyYXcgb3ZlcmxpbmUuICovCisgICAgICBpZiAocy0+ZmFj
ZS0+b3ZlcmxpbmVfcCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHkgPSAw
LCBoID0gMTsKKyAgICAgICAgICBpZiAocy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3JfZGVmYXVsdGVk
X3ApCisgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMsIHMtPmdjLT5mb3Jl
Z3JvdW5kLCBzLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+eSArIGR5LCBzLT53
aWR0aCwgaCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHczMl9maWxsX2FyZWEg
KHMtPmYsIHMtPmhkYywgcy0+ZmFjZS0+b3ZlcmxpbmVfY29sb3IsIHMtPngsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHMtPnkgKyBkeSwgcy0+d2lkdGgsIGgpOworICAgICAgICB9Cisg
ICAgICAvKiBEcmF3IHN0cmlrZS10aHJvdWdoLiAqLworICAgICAgaWYgKHMtPmZhY2UtPnN0cmlr
ZV90aHJvdWdoX3AKKyAgICAgICAgICAmJiAhRk9OVF9URVhUTUVUUklDIChzLT5mb250KS50bVN0
cnVja091dCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaCA9IDE7CisgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBkeSA9IChzLT5oZWlnaHQgLSBoKSAvIDI7CisgICAgICAgICAg
aWYgKHMtPmZhY2UtPnN0cmlrZV90aHJvdWdoX2NvbG9yX2RlZmF1bHRlZF9wKQorICAgICAgICAg
ICAgdzMyX2ZpbGxfYXJlYSAocy0+Ziwgcy0+aGRjLCBzLT5nYy0+Zm9yZWdyb3VuZCwgcy0+eCwg
cy0+eSArIGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+d2lkdGgsIGgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB3MzJfZmlsbF9hcmVhIChzLT5mLCBzLT5oZGMs
IHMtPmZhY2UtPnN0cmlrZV90aHJvdWdoX2NvbG9yLCBzLT54LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzLT55ICsgZHksIHMtPndpZHRoLCBoKTsKKyAgICAgICAgfQorICAgICAgLyog
RHJhdyByZWxpZWYgaWYgbm90IHlldCBkcmF3bi4gKi8KKyAgICAgIGlmICghcmVsaWVmX2RyYXdu
X3AgJiYgcy0+ZmFjZS0+Ym94ICE9IEZBQ0VfTk9fQk9YKQorICAgICAgICB3MzJfZHJhd19nbHlw
aF9zdHJpbmdfYm94IChzKTsKKyAgICAgIGlmIChzLT5wcmV2KQorICAgICAgICB7CisgICAgICAg
ICAgc3RydWN0IGdseXBoX3N0cmluZyAqcHJldjsKKyAgICAgICAgICBmb3IgKHByZXYgPSBzLT5w
cmV2OyBwcmV2OyBwcmV2ID0gcHJldi0+cHJldikKKyAgICAgICAgICAgIGlmIChwcmV2LT5obCAh
PSBzLT5obAorICAgICAgICAgICAgICAgICYmIHByZXYtPnggKyBwcmV2LT53aWR0aCArIHByZXYt
PnJpZ2h0X292ZXJoYW5nID4gcy0+eCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8qIEFzIHByZXYgd2FzIGRyYXduIHdoaWxlIGNsaXBwZWQgdG8gaXRzIG93biBhcmVhLCB3ZQor
ICAgICAgICAgICAgICAgICAgIG11c3QgZHJhdyB0aGUgcmlnaHRfb3ZlcmhhbmcgcGFydCB1c2lu
ZyBzLT5obCBub3cuICovCisgICAgICAgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIHNh
dmUgPSBwcmV2LT5obDsKKyAgICAgICAgICAgICAgICBwcmV2LT5obCA9IHMtPmhsOworICAgICAg
ICAgICAgICAgIG1jX3czMl9zZXRfZ2x5cGhfc3RyaW5nX2djIChwcmV2LCBjdXJzb3JfZ2NfcCk7
CisgICAgICAgICAgICAgICAgdzMyX3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmdfZXhhY3RseSAo
cywgcHJldik7CisgICAgICAgICAgICAgICAgaWYgKHByZXYtPmZpcnN0X2dseXBoLT50eXBlID09
IENIQVJfR0xZUEgpCisgICAgICAgICAgICAgICAgICB3MzJfZHJhd19nbHlwaF9zdHJpbmdfZm9y
ZWdyb3VuZCAocHJldik7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHczMl9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAocHJldik7Cisg
ICAgICAgICAgICAgICAgdzMyX3NldF9jbGlwX3JlY3RhbmdsZSAocHJldi0+aGRjLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICBwcmV2LT5obCA9IHNhdmU7CisgICAgICAgICAgICAgICAgcHJldi0+
bnVtX2NsaXBzID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpZiAocy0+
bmV4dCkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKm5leHQ7Cisg
ICAgICAgICAgZm9yIChuZXh0ID0gcy0+bmV4dDsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpCisg
ICAgICAgICAgICBpZiAobmV4dC0+aGwgIT0gcy0+aGwKKyAgICAgICAgICAgICAgICAmJiBuZXh0
LT54IC0gbmV4dC0+bGVmdF9vdmVyaGFuZyA8IHMtPnggKyBzLT53aWR0aCkKKyAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8qIEFzIG5leHQgd2lsbCBiZSBkcmF3biB3aGlsZSBjbGlw
cGVkIHRvIGl0cyBvd24gYXJlYSwKKyAgICAgICAgICAgICAgICAgICB3ZSBtdXN0IGRyYXcgdGhl
IGxlZnRfb3ZlcmhhbmcgcGFydCB1c2luZyBzLT5obCBub3cuICovCisgICAgICAgICAgICAgICAg
ZW51bSBkcmF3X2dseXBoc19mYWNlIHNhdmUgPSBuZXh0LT5obDsKKyAgICAgICAgICAgICAgICBu
ZXh0LT5obCA9IHMtPmhsOworICAgICAgICAgICAgICAgIG1jX3czMl9zZXRfZ2x5cGhfc3RyaW5n
X2djIChuZXh0LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICAgICAgdzMyX3NldF9nbHlwaF9z
dHJpbmdfY2xpcHBpbmdfZXhhY3RseSAocywgbmV4dCk7CisgICAgICAgICAgICAgICAgaWYgKG5l
eHQtPmZpcnN0X2dseXBoLT50eXBlID09IENIQVJfR0xZUEgpCisgICAgICAgICAgICAgICAgICB3
MzJfZHJhd19nbHlwaF9zdHJpbmdfZm9yZWdyb3VuZCAobmV4dCk7CisgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHczMl9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJp
bmdfZm9yZWdyb3VuZCAobmV4dCk7CisgICAgICAgICAgICAgICAgdzMyX3NldF9jbGlwX3JlY3Rh
bmdsZSAobmV4dC0+aGRjLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBuZXh0LT5obCA9IHNhdmU7
CisgICAgICAgICAgICAgICAgbmV4dC0+bnVtX2NsaXBzID0gMDsKKyAgICAgICAgICAgICAgICBu
ZXh0LT5jbGlwX2hlYWQgPSBzLT5uZXh0OworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgIC8qIFJlc2V0IGNsaXBwaW5nLiAqLworICB3MzJfc2V0X2NsaXBfcmVjdGFuZ2xlIChz
LT5oZGMsIE5VTEwpOworICBzLT5udW1fY2xpcHMgPSAwOworfQorCisvKiBlbmQgTVVMVElQTEUt
Q1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogLyogRnJpbmdlIGJpdG1h
cHMuICAqLwogCiBzdGF0aWMgaW50IG1heF9mcmluZ2VfYm1wID0gMDsKQEAgLTU0Miw2ICsxNzA0
LDE1IEBAIHczMl91cGRhdGVfYmVnaW4gKHN0cnVjdCBmcmFtZSAqZikKICAgaWYgKCEgRlJBTUVf
VzMyX1AgKGYpKQogICAgIHJldHVybjsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q
IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBmLT5tY191cGRhdGluZ19mcmFtZSA9IGY7CisKKy8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogUmVnZW5lcmF0ZSBkaXNwbGF5IHBhbGV0
dGUgYmVmb3JlIGRyYXdpbmcgaWYgbGlzdCBvZiByZXF1ZXN0ZWQKICAgICAgY29sb3JzIGhhcyBj
aGFuZ2VkLiAqLwogICBpZiAoZGlzcGxheV9pbmZvLT5yZWdlbl9wYWxldHRlKQpAQCAtNjc0LDYg
KzE4NDUsMTYgQEAgdzMyX3VwZGF0ZV9lbmQgKHN0cnVjdCBmcmFtZSAqZikKIAogICAvKiBNb3Vz
ZSBoaWdobGlnaHQgbWF5IGJlIGRpc3BsYXllZCBhZ2Fpbi4gICovCiAgIE1PVVNFX0hMX0lORk8g
KGYpLT5tb3VzZV9mYWNlX2RlZmVyID0gZmFsc2U7CisKKworLyogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgZi0+bWNfdXBkYXRpbmdfZnJhbWUgPSBO
VUxMOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiB9CiAKIApAQCAtNDAwMiwxMyAr
NTE4Myw3NCBAQCB3MzJfc2V0X3ZlcnRpY2FsX3Njcm9sbF9iYXIgKHN0cnVjdCB3aW5kb3cgKncs
CiAJICAgICAgcmVsZWFzZV9mcmFtZV9kYyAoZiwgaGRjKTsKIAkgICAgICB3MzJfY2xlYXJfdW5k
ZXJfaW50ZXJuYWxfYm9yZGVyIChmKTsKIAkgICAgfQorCisKKy8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqLworLyogYmVnaW4gTVVMVElQTEUtQ1VSU09SUyAqLworCisvKiBSRVBBSU5USU5HIFdIRU4g
UkVNT1ZJTkcgU0NST0xMIEJBUjoKKworLSBTZXF1ZW5jZSBvZiBFdmVudHM6CisKKyAgLiBgcmVk
aXNwbGF5X2ludGVybmFsJyBjYWxscyB0aGUgYGNvbmRlbW5fc2Nyb2xsX2JhcnNfaG9vaycsIHdo
aWNoIG1hcmtzIGFsbAorICAgIHNjcm9sbCBiYXJzIGFzIGNhbmRpZGF0ZXMgZm9yIGRlbGV0aW9u
LgorCisgIC4gVGhlbiBgcmVkaXNwbGF5X2ludGVybmFsJyBjYWxscyBgcmVkaXNwbGF5X3dpbmRv
d3MnLCB3aGljaCB3YWxrcyB0aGUKKyAgICB3aW5kb3ctdHJlZSBhbmQgZXhhbWluZXMgZWFjaCB3
aW5kb3csIHdoZXJlYnkgZWFjaCB3aW5kb3cgdGhhdCBpcyBzdGlsbCBhbGl2ZQorICAgIGluIHRo
ZSB3aW5kb3ctdHJlZSAicmVkZWVtcyIgaXRzIHNjcm9sbCBiYXJzIGJ5IG1hcmtpbmcgdGhlbSBu
b3QgdG8gYmUKKyAgICBkZWxldGVkLgorCisgIC4gVGhlbiBgcmVkaXNwbGF5X2ludGVybmFsJyBj
YWxscyBganVkZ2Vfc2Nyb2xsX2JhcnNfaG9vaycsIHdoaWNoIHJlbW92ZXMgYWxsCisgICAgdGhl
IHNjcm9sbCBiYXJzIHRoYXQgd2VyZSBub3QgInJlZGVlbWVkIi4KKworICAuIEFuZCBvbmx5IGFm
dGVyIHRoYXQgYHJlZGlzcGxheV9pbnRlcm5hbCcgY2FsbHMgYHVwZGF0ZV9mcmFtZScsIHdoaWNo
IGNhbGxzCisgICAgYHVwZGF0ZV93aW5kb3cnIGZvciBlYWNoIGxpdmUgd2luZG93LCBhbmQgdGhh
dCBlbmRzIHVwIGNhbGxpbmcgYGRyYXdfZ2x5cGhzJworICAgIHRvIGRlbGl2ZXIgdGhlIHVwZGF0
ZWQgY29udGVudHMgdG8gdGhlIGdsYXNzLgorCistIE9ic2VydmF0aW9ucyBieSBAbGF3bGlzdDoK
KworICAuIEFsdGhvdWdoIHRoZSBjYWxsIHRvIHJlbW92ZS9hZGQgc2Nyb2xsIGJhcnMgaGFwcGVu
cyBlYXJsaWVyIGluIHRpbWUsIGl0IGlzCisgICAgbm90IGFjdHVhbGx5IHByb2Nlc3NlZCBieSBF
bWFjcyB1bnRpbCB0aGUgdGFpbCBlbmQgb2YgYHJlYWRfY2hhcicsIGF0CisgICAgYXBwcm94aW1h
dGVseSB3aGVuIHRoZSBjYWxsIHRvIGByZWFkX2RlY29kZWRfZXZlbnRfZnJvbV9tYWluX3F1ZXVl
JyBvY2N1cnMuCisKKyAgLiBBbHRob3VnaCBhIHNjcm9sbCBiYXIgbWF5IG5vIGxvbmdlciBiZSB2
aXNpYmxlIGJlY2F1c2UgaXQgd2FzIG92ZXJ3cml0dGVuCisgICAgZHVyaW5nIGB1cGRhdGVfd2lu
ZG93JywgRW1hY3MgdHJpZXMgdG8gcmVtb3ZlIHRoZSBvdXRkYXRlZCBzY3JvbGwgYmFyCisgICAg
YW55d2F5IGFuZCB0aGF0IGlzIHdoYXQgZXJhc2VzIHRoZSBmYWtlIGN1cnNvcnMgYWxvbmcgdGhl
IHJlY3RhbmdsZSBvZiB0aGUKKyAgICB2ZXJ0aWNhbCBzY3JvbGwgYmFyLgorCisgIC4gQXQgYWJv
dXQgdGhlIGV4YWN0IHNhbWUgdGltZSB0aGF0IHRoZSBzY3JvbGwgYmFyIGluIHRoZSBjZW50ZXIg
b2YgdGhlIHNjcmVlbgorICAgIGdldHMgZXJhc2VkLCB0aGUgcmlnaHQgc2Nyb2xsIGJhciBvbiB0
aGUgZmFyIHJpZ2h0IG9mIHRoZSB3aW5kb3cgaXMgYWRkZWQuCisKKy0gVGhlIGV4dGVybmFsIGZ1
bmN0aW9uIGBNb3ZlV2luZG93JyAoYnkgTWljcm9zb2Z0KSB1cGRhdGVzIGJvdGggdGhlIG9sZCBh
bmQgbmV3CisgIHJlY3RhbmdsZXMvd2luZG93cyBpZiB0aGUgYm9vbGVhbiBhcmd1bWVudCBmb3Ig
YGJSZXBhaW50YCBpcyBUUlVFLgorCistIFRoZSBleHRlcm5hbCBmdW5jdGlvbiBgRGVzdHJveVdp
bmRvdycgKGJ5IE1pY3Jvc29mdCkgdXBkYXRlcy9yZXBhaW50cyB0aGUKKyAgcmVjdGFuZ2xlL3dp
bmRvdyB0aGF0IGlzIHJlbW92ZWQuICBbSW4gZXhwZXJpbWVudGluZyB3aXRoIGBMb2NrV2luZG93
VXBkYXRlJworICAoYnkgTWljcm9zb2Z0KSwgQGxhd2xpc3Qgd2FzIHVuYWJsZSB0byBwcmV2ZW50
IHRoZSB1cGRhdGUvcmVwYWludC5dCisKKy0gVGhlIGV4dGVybmFsIGZ1bmN0aW9uIGBTZXRXaW5k
b3dQb3MnIChieSBNaWNyb3NvZnQpIHVwZGF0ZXMvcmVwYWludHMgdGhlCisgIHJlY3RhbmdsZS93
aW5kb3cgdGhhdCBpcyByZW1vdmVkLiAgQGxhd2xpc3QgaGFzIG5vdCB5ZXQgZXhwZXJpbWVudGVk
IHdpdGgKKyAgYWx0ZXJpbmcgdGhlIGxhc3QgYXJndW1lbnQgdUZsYWdzIHRvIHNlZSBpZiBpdCBp
cyBwb3NzaWJsZSB0byBwcmV2ZW50IHVwZGF0ZSAvCisgIHJlcGFpbnQuCisKK1doZW4gYSB1c2Vy
IGVubGFyZ2VzIHRoZSB3aWR0aCBvZiBhIG1haW4gd2luZG93LCBgdXBkYXRlX3dpbmRvdycgcmVk
cmF3cyB0aGUKK3NjcmVlbiBsaW5lcyBhbmQgdGhlIG9sZCBzY3JvbGwgYmFyIHdpbmRvdyBpcyBl
cmFzZWQgaW4gdGhlIHByb2Nlc3MgYnkgYQorY29tYmluYXRpb24gb2YgYGRyYXdfZ2x5cGhzJyBh
bmQgYHhfY2xlYXJfZW5kX29mX2xpbmUnLiAgSW4gdGhhdCBzaXR1YXRpb24sIHRoZQorb2xkIGBi
YXItPmxlZnRgIHdpbGwgYmUgbGVzcy10aGFuIHRoZSBuZXcgYGxlZnRgIHNjcm9sbCBiYXIgY29v
cmRpbmF0ZS4gIEluIG9yZGVyCit0byBwcmVzZXJ2ZSB0aGUgZmFrZSBjdXJzb3JzIHRoYXQgd2Vy
ZSBsYWlkIGR1cmluZyBgdXBkYXRlX3dpbmRvdycgd2hlbgorKGxlZnQgPiBiYXItPmxlZnQpLCB3
ZSB3YW50IHRvIHN1cHByZXNzIHJlcGFpbnRpbmcgdGhlIG9sZCBzY3JvbGwuICBXaGVuIGEgdXNl
cgorc2hyaW5rcyB0aGUgd2lkdGggb2YgYSB3aW5kb3csIHdlIHdhbnQgdG8gcmVwYWludCBzbyB0
aGF0IHRoZSBuZXcgc2Nyb2xsIGJhcgord2luZG93IGlzIHVwZGF0ZWQuICovCisKICAgICAgICAg
ICAvKiBNYWtlIHN1cmUgc2Nyb2xsIGJhciBpcyAidmlzaWJsZSIgYmVmb3JlIG1vdmluZywgdG8g
ZW5zdXJlIHRoZQogICAgICAgICAgICAgIGFyZWEgb2YgdGhlIHBhcmVudCB3aW5kb3cgbm93IGV4
cG9zZWQgd2lsbCBiZSByZWZyZXNoZWQuICAqLwotICAgICAgICAgIG15X3Nob3dfd2luZG93IChm
LCBod25kLCBTV19ISURFKTsKLS8qKiAgICAgICAgICAgTW92ZVdpbmRvdyAoaHduZCwgbGVmdCwg
dG9wLCB3aWR0aCwgbWF4IChoZWlnaHQsIDEpLCBUUlVFKTsgKiovCi0JICAvKiBUcnkgdG8gbm90
IGRyYXcgb3ZlciBjaGlsZCBmcmFtZXMuICAqLwotCSAgU2V0V2luZG93UG9zIChod25kLCBIV05E
X0JPVFRPTSwgbGVmdCwgdG9wLCB3aWR0aCwgbWF4IChoZWlnaHQsIDEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgU1dQX0ZSQU1FQ0hBTkdFRCk7CisgICAgICAgICAgaWYgKGxlZnQgPD0gYmFy
LT5sZWZ0KQorICAgICAgICAgICAgbXlfc2hvd193aW5kb3cgKGYsIGh3bmQsIFNXX0hJREUpOwor
ICAgICAgICAgIE1vdmVXaW5kb3cgKGh3bmQsIGxlZnQsIHRvcCwgd2lkdGgsIG1heCAoaGVpZ2h0
LCAxKSwgbGVmdCA8PSBiYXItPmxlZnQpOworCisvKiBlbmQgTVVMVElQTEUtQ1VSU09SUyAqLwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisKIAogCSAgc2kuY2JTaXplID0gc2l6ZW9mIChzaSk7
CiAJICBzaS5mTWFzayA9IFNJRl9SQU5HRTsKQEAgLTQyNzcsNiArNTUxOSwyMSBAQCB3MzJfanVk
Z2Vfc2Nyb2xsX2JhcnMgKHN0cnVjdCBmcmFtZSAqZikKICAgICB7CiAgICAgICBzdHJ1Y3Qgc2Ny
b2xsX2JhciAqYiA9IFhTQ1JPTExfQkFSIChiYXIpOwogCisKKy8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICAvKiBgRGVzdHJveVdpbmRvdycg
d2l0aGluIGB4X3Njcm9sbF9iYXJfcmVtb3ZlJyByZXBhaW50cyB0aGUgcmVjdGFuZ2xlLgorICAg
ICAgVGhlcmVmb3JlLCB3ZSBmaXJzdCBzZW5kIGEgbWVzc2FnZSB0byBpbmhpYml0IHJlcGFpbnRp
bmcuICovCisgICAgICBpZiAoIVdJTkRPV19MSVZFX1AgKGItPndpbmRvdykpCisgICAgICAgIHsK
KyAgICAgICAgICBIV05EIGh3bmQgPSBTQ1JPTExfQkFSX1czMl9XSU5ET1cgKGIpOworICAgICAg
ICAgIFNlbmRNZXNzYWdlIChod25kLCBXTV9TRVRSRURSQVcsIGZhbHNlLCAwKTsKKyAgICAgICAg
fQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICB3MzJfc2Nyb2xsX2Jhcl9y
ZW1vdmUgKGIpOwogCiAgICAgICBuZXh0ID0gYi0+bmV4dDsKQEAgLTcwODgsNiArODM0NSwyMCBA
QCBleHRlcm4gZnJhbWVfcGFybV9oYW5kbGVyIHczMl9mcmFtZV9wYXJtX2hhbmRsZXJzW107CiAK
IHN0YXRpYyBzdHJ1Y3QgcmVkaXNwbGF5X2ludGVyZmFjZSB3MzJfcmVkaXNwbGF5X2ludGVyZmFj
ZSA9CiB7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JT
ICovCisKKy8qIGByZWRpc3BsYXlfaW50ZXJmYWNlJyBpbiBgdzMydGVybS5jYCBtdXN0IGJlIGlu
IHRoZSBleGFjdCBzYW1lIG9yZGVyIGFzIHRoZQorYHJlZGlzcGxheV9pbnRlcmZhY2UnIGluIGBk
aXNwZXh0ZXJuLmhgISAqLworCisgIG1jX3czMl9kcmF3X3dpbmRvd19jdXJzb3IsCisgIG1jX3cz
Ml9kcmF3X2dseXBoX3N0cmluZywKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICB3
MzJfZnJhbWVfcGFybV9oYW5kbGVycywKICAgZ3VpX3Byb2R1Y2VfZ2x5cGhzLAogICBndWlfd3Jp
dGVfZ2x5cGhzLApkaWZmIC0tZ2l0IGEvc3JjL3dpbmRvdy5oIGIvc3JjL3dpbmRvdy5oCmluZGV4
IDZiMGYwZTUuLjE0ZGQzOGEgMTAwNjQ0Ci0tLSBhL3NyYy93aW5kb3cuaAorKysgYi9zcmMvd2lu
ZG93LmgKQEAgLTMyNCw2ICszMjQsMTQ3IEBAIHN0cnVjdCB3aW5kb3cKIAogI2lmZGVmIEhBVkVf
V0lORE9XX1NZU1RFTQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVM
VElQTEUtQ1VSU09SUyAqLworCisvKiBTdWZmaXhlcyBmb3IgdGhlIGBtY2Agd2luZG93IHBvaW50
ZXIgcHJlZml4LiAqLworc3RydWN0IG11bHRpcGxlX2N1cnNvcnMKK3sKKyAgLyogVGhlIHJlY29y
ZGVkIHBpeGVsIHdpZHRoIG9mIHRoZSBsYXN0IGxpbmUgbnVtYmVyIGRyYXduIGR1cmluZyByZWRp
c3BsYXkgKi8KKyAgaW50IGxudW1fcGl4ZWxfd2lkdGg7Cit9IG1jOworCitzdHJ1Y3QgbWNfbWF0
cml4Cit7CisgIHB0cmRpZmZfdCB2cG9zX2FsbG9jYXRlZDsKKyAgcHRyZGlmZl90IHZwb3NfdXNl
ZDsKKyAgcHRyZGlmZl90IGN1cnNvcnNfdXNlZFs0XTsKKyAgZW51bSBtY19jYWNoZV90eXBlCisg
IHsKKyAgICBNQ19DQUNIRSwKKyAgICBDSF9DQUNIRSwKKyAgICBGQ19DQUNIRSwKKyAgICBOT19D
QUNIRQorICB9IGNhY2hlX3R5cGU7CisgIHN0cnVjdCBtY192cG9zCisgIHsKKyAgICBwdHJkaWZm
X3QgY2FjaGVfYWxsb2NhdGVkWzRdOworICAgIHB0cmRpZmZfdCBjYWNoZV91c2VkWzRdOworICAg
IHN0cnVjdCBtY19jb250ZW50cworICAgIHsKKyAgICAgIGJvb2xfYmYgc2FtZV9wIDogMTsKKyAg
ICAgIHN0cnVjdCBnbHlwaCBnbHlwaDsKKyAgICAgIGludCB4OworICAgICAgaW50IGZ4OworICAg
ICAgaW50IHk7CisgICAgICBpbnQgZnk7CisgICAgICBpbnQgaHBvczsKKyAgICAgIGludCB2cG9z
OworICAgICAgaW50IHdkOworICAgICAgaW50IGg7CisgICAgICBlbnVtIG1jX2N1cnNvcl90eXBl
CisgICAgICB7CisgICAgICAgIC8qIE5PVEU6ICBUaGUgZnJpbmdlIGJpdG1hcCBmcmFtZXdvcmsg
cmVsaWVzIHVwb24gTUNfTk9fRlJJTkdFX0JJVE1BUAorICAgICAgICBoYXZpbmcgYSB2YWx1ZSBv
ZiB6ZXJvICgwKS4gKi8KKyAgICAgICAgTUNfTk9fRlJJTkdFX0JJVE1BUCwKKyAgICAgICAgTUNf
Tk9fQ1VSU09SLAorICAgICAgICBNQ19SSUdIVF9GUklOR0VfQklUTUFQLAorICAgICAgICBNQ19M
RUZUX0ZSSU5HRV9CSVRNQVAsCisgICAgICAgIE1DX0ZSQU1FRF9CT1gsCisgICAgICAgIE1DX0ZJ
TExFRF9CT1gsCisgICAgICAgIE1DX0hPTExPV19CT1gsCisgICAgICAgIE1DX0JBUiwKKyAgICAg
ICAgTUNfSEJBUgorICAgICAgfSBjdXJzb3JfdHlwZTsKKyAgICAgIGludCBjdXJzb3Jfd2lkdGg7
CisgICAgICBzdHJ1Y3QgbWNfUkdCCisgICAgICB7CisgICAgICAgIGRvdWJsZSByZWQ7CisgICAg
ICAgIGRvdWJsZSBncmVlbjsKKyAgICAgICAgZG91YmxlIGJsdWU7CisgICAgICB9IGZnLCBiZzsK
KyAgICAgIGJvb2xfYmYgYWN0aXZlX3AgOiAxOworICAgICAgZW51bSBtY19mbGF2b3IKKyAgICAg
IHsKKyAgICAgICAgTk9fRkxBVk9SLAorICAgICAgICBNQ19HTFlQSCwKKyAgICAgICAgTUNfR0xZ
UEhMRVNTLAorICAgICAgICBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUCwKKyAgICAgICAgTUNfUElM
Q1JPVywKKyAgICAgICAgTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVywKKyAgICAgICAg
TUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVywKKyAgICAgICAgTUNfSE9M
TE9XX1JFQ1RBTkdMRSwKKyAgICAgICAgTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XLAorICAg
ICAgICBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1csCisgICAgICAgIE1DX1ZF
UlRJQ0FMX0JBUiwKKyAgICAgICAgTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSLAorICAgICAgICBN
Q19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICB9IGdseXBoX2ZsYXZvcjsKKyAgICAgIGVu
dW0gbWNfcm93X3Bvc2l0aW9uCisgICAgICB7CisgICAgICAgIFBSRV9aViwKKyAgICAgICAgQVRf
WlYsCisgICAgICAgIFBPU1RfWlYKKyAgICAgIH0gcm93X3Bvc2l0aW9uOworICAgICAgYm9vbF9i
ZiBlbmFibGVkX3AgOiAxOworICAgIH0gKmNhY2hlWzRdOworICB9ICp2cG9zOworICAvKiBVc2Vk
IGVsc2V3aGVyZS4gKi8KKyAgc3RydWN0IG1jX2Vzc2VudGlhbHMKKyAgeworICAgIGJvb2xfYmYg
YWN0aXZlX3AgOiAxOworICAgIHN0cnVjdCBtY19SR0IgY2hfZmdbM10sIGZjX2ZnWzNdLCBzcF9m
ZzsKKyAgICBpbnQgZmNfeDsKKyAgICBpbnQgenY7CisgICAgaW50IHp2X2J5dGU7CisgIH0gZXNz
ZW50aWFsczsKKyAgLyogVXNlZCBlbHNld2hlcmUuICovCisgIGVudW0gbWNfZW5naW5lX3R5cGUK
KyAgeworICAgIE1VTFRJUExFX0NVUlNPUlMsCisgICAgSE9SSVpPTlRBTF9SVUxFUiwKKyAgICBW
RVJUSUNBTF9SVUxFUiwKKyAgICBGSUxMX0NPTFVNTiwKKyAgICBDVVJTT1JfSU5ESUNBVE9SCisg
IH0gYWN0aW9uX3R5cGU7CisgIC8qIFVzZWQgZWxzZXdoZXJlLiAqLworICBlbnVtIG1jX3ByZV9z
Y3JvbGxfY2xlYW5fdHlwZQorICB7CisgICAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFU
UklYX0RPV04sCisgICAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX1VQLAorICAg
IFRSWV9XSU5ET1dfSUQKKyAgfSBtY19wcmVfc2Nyb2xsX2NsZWFuX3R5cGVfX2Zyb21fd2hlcmU7
CisgIC8qIFVzZWQgZWxzZXdoZXJlLiAqLworICBlbnVtIG1jX2RyYXdfcm93X3R5cGUKKyAgewor
ICAgIE5PV0hFUkUsCisgICAgU0NSSUJFX09ORSwKKyAgICBTQ1JJQkVfVFdPLAorICAgIFNDUklC
RV9USFJFRSwKKyAgICBTS0lQUEVELAorICAgIFBPU1RfQ0hBTkdFRCwKKyAgICBVTkNIQU5HRUQs
CisgICAgU0VUX0NVUlNPUl9PTkUsCisgICAgU0VUX0NVUlNPUl9UV08KKyAgfSBtY19kcmF3X3Jv
d190eXBlX19mcm9tX3doZXJlOworICAvKiBVc2VkIGVsc2V3aGVyZS4gKi8KKyAgZW51bSBtY19y
ZWRyYXdfcm93X3R5cGUKKyAgeworICAgIFVQREFURV9XSU5ET1dfX1JFRFJBV19PVkVSTEFQUEVE
X1JPV1MsCisgICAgR1VJX0lOU0VSVF9HTFlQSFMsCisgICAgR1VJX0ZJWF9PVkVSTEFQUElOR19B
UkVBLAorICAgIERSQVdfUk9XX1dJVEhfTU9VU0VfRkFDRSwKKyAgICBFWFBPU0VfQVJFQV9PTkUs
CisgICAgRVhQT1NFX0FSRUFfVFdPLAorICAgIEVYUE9TRV9MSU5FCisgIH0gbWNfcmVkcmF3X3Jv
d190eXBlX19mcm9tX3doZXJlOworfSBtY19tYXRyaXg7CisKKy8qIGVuZCBNVUxUSVBMRS1DVVJT
T1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgLyogQ3Vyc29yIHR5cGUg
b2YgbGFzdCBjdXJzb3IgZHJhd24gb24gdGhlIHdpbmRvdy4gICovCiAgICAgZW51bSB0ZXh0X2N1
cnNvcl9raW5kcyBwaHlzX2N1cnNvcl90eXBlOwogCmRpZmYgLS1naXQgYS9zcmMveGRpc3AuYyBi
L3NyYy94ZGlzcC5jCmluZGV4IDUwZjY0NDMuLmQxMGM5MjkgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlz
cC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC05NjIsNiArOTYyLDQ5ODcgQEAgc3RhdGljIHZvaWQg
c2hvd19tb3VzZV9mYWNlIChNb3VzZV9ITEluZm8gKiwgZW51bSBkcmF3X2dseXBoc19mYWNlKTsK
IHN0YXRpYyBib29sIGNvb3Jkc19pbl9tb3VzZV9mYWNlX3AgKHN0cnVjdCB3aW5kb3cgKiwgaW50
LCBpbnQpOwogCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogYmVnaW4gTVVMVElQTEUt
Q1VSU09SUyAqLworCisvKiBNVUxUSVBMRS1DVVJTT1JTOiAgRW1hY3MgQnVnICMyMjg3MyAoZmVh
dHVyZSByZXF1ZXN0KQorCisgIENST1NTSEFJUlM6ICBFbWFjcyBCdWcgIzE3Njg0IChmZWF0dXJl
IHJlcXVlc3QpCisKKworVkVSU0lPTjogIDAyMi4wMDggWzA1LzAyLzIwMjBdCisKKworQ0hBTkdF
TE9HOgorCistIENhbGN1bGF0ZSBhbmQgc2V0IGl0LT5sbnVtIHdoZW4gYm90aCBOSUxQIChWZGlz
cGxheV9saW5lX251bWJlcnMpIGFuZCBmZWF0dXJlcworICAyMjg3MyAvIDE3Njg0IGFyZSBhY3Rp
dmUuICBMaW5lIG51bWJlcnMgYXJlIG5vdyByZWNvcmRlZCBpbiB0aGUgc3RydWN0IG9mIGVhY2gK
KyAgZ2x5cGg6ICBnbHlwaC0+bG51bSA9IGl0LT5sbnVtLiAgVGhlIGNhY2hlIG9mIG11bHRpcGxl
IGZha2UgY3Vyc29ycyBoYXMgYmVlbgorICByZXZpc2VkIHRvIGFsc28gcmVjb3JkIHRoZSBsbnVt
IG9mIGVhY2ggZmFrZSBjdXJzb3IuICBUaGUgcmVjb3JkZWQgbG51bSBpcyB1c2VkCisgIHRvIHRl
c3QgZm9yIGEgYHNhbWVfcGAgZmFrZSBjdXJzb3Igc2l0dWF0aW9uOyBpLmUuLCB3aGV0aGVyIGZh
a2UgY3Vyc29ycyBzaG91bGQKKyAgYmUgZXJhc2VkIGFuZC9vciByZWRyYXduLgorCisuIFRoZSBs
bnVtIGlzIG5lZWRlZCBmb3IgYW4gYXBwYXJlbnRseSB1bmNvbW1vbiwgYnV0IG5ldmVydGhlbGVz
cyByZXByb2R1Y2libGUKKyAgc2l0dWF0aW9uIHdoZXJlaW4gYSBzY3JlZW4gbGluZSBpcyBhZGRl
ZC9kZWxldGVkIGFuZCB0aGVyZSBhcmUgdHdvIG9yIG1vcmUKKyAgc3Vic2VxdWVudCBjb25zZWN1
dGl2ZSBsaW5lcyBoYXZpbmcgdGhlIHNhbWUgY29udGVudDsgYW5kLCB0aGUgY2hhcmFjdGVyKHMp
CisgIGFkZGVkL2RlbGV0ZWQgaXMvYXJlIHRoZSBzYW1lIHNpemUvc2hhcGUgb2YgdGhlIHN1YnNl
cXVlbnQgY29uc2VjdXRpdmUgc2NyZWVuCisgIGxpbmVzLiAgYG1jX3VwZGF0ZV93aW5kb3dfZXJh
c2UnIHdpbGwgZXJhc2UgYSBmYWtlIGN1cnNvciBvbiBvbmUgb2YgdGhvc2UKKyAgc3Vic2VxdWVu
dCBjb25zZWN1dGl2ZSBsaW5lcyBkZXBlbmRpbmcgdXBvbiB3aGV0aGVyIHRoZSBhIHNjcmVlbiBs
aW5lIGFib3ZlIGlzCisgIGFkZGVkL2RlbGV0ZWQuICBXaXRoIHRoZSB1bmlxdWUgZXhjZXB0aW9u
IG9mIHRoZSByZWNvcmRlZCBsbnVtLCBhbGwgb3RoZXIgZGF0YQorICBpbiB0aGUgY2FjaGUgb2Yg
ZmFrZSBjdXJzb3JzIHdpbGwgYmUgaWRlbnRpY2FsIGFzIHRvIG9uZSBvZiB0aG9zZSBzdWJzZXF1
ZW50CisgIGNvbnNlY3V0aXZlIHNjcmVlbiBsaW5lcy4KKworLiBFWEFNUExFICh3b3JkLXdyYXAg
aXMgbm9uLW5pbCkgLS0gbW9kaWZpY2F0aW9uIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGggYnkgYWRk
aW5nLworICBkZWxldGluZyB0aGUgd29yZCAiYm95IiBjYXVzZXMgdGhlIHNjcmVlbiBsaW5lIGNv
bnRhaW5pbmcgb25seSB0aGUgd29yZCBncm91cAorICAiZnVkZ2UuIiB0byBiZSBhZGRlZC9kZWxl
dGVkLiAgVGhlIGZha2UgY3Vyc29yIGZvciB0aGUgZmlyc3QgX29yXyBzZWNvbmQgbGluZQorICBj
b250YWluaW5nICJ+Ly8iIHdpbGwgYmUgZXJhc2VkLCBidXQgdGhlIGZha2UgY3Vyc29yIGZvciBz
YWlkIGxpbmUgd2lsbCBub3QgYmUKKyAgcmVkcmF3biBieSBgbWNfaGVscGVyJyB1bmxlc3MgdGhl
IGxudW0gZGF0YSB3YXMgcHJldmlvdXNseSB1c2VkIGJ5CisgIGBtY191cGRhdGVfd2luZG93X2Vy
YXNlJyB0byBtYWtlIGEgdGhlIGBzYW1lX3BgIGRldGVybWluYXRpb24uICBJbiBvdGhlciB3b3Jk
cywKKyAgdGhlIGZha2UgY3Vyc29yIGF0IGlzdWUgd291bGQgYmUgYHNhbWVfcGAgX3dpdGhvdXRf
IHVzaW5nIHRoZSBsbnVtIGRhdGEsIGJ1dAorICBpcyBgIXNhbWVfcGAgd2hlbiB3ZSB1c2UgdGhl
IGxudW0gZGF0YS4KKworICBFdmVyeSBnb29kIGJveSB8IGRlc2VydmVzIGZ1ZGdlLiAgRXZlcnkg
Z29vZCBib3kgZGVzZXJ2ZXMgZnVkZ2UuICBFdmVyeSBnb29kIOKGqQorICBib3kgZGVzZXJ2ZXMg
ZnVkZ2UufCBFdmVyeSBnb29kIGJveSBkZXNlcnZlcyBmdWRnZS4gIEV2ZXJ5IGdvb2QgYm95IGRl
c2VydmVzIOKGqQorICBmdWRnZS4gICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwKKyAgfi8v
ICAgICAgICAgICAgfCAgIDw9PT0gVGhpcyBmYWtlIGN1cnNvciBJRiBhZGRpbmcgdGhlIHdob2xl
IHdvcmQgImJveSIgd2l0aCByZWRvOworICB+Ly8gICAgICAgICAgICB8ICAgPD09PSBvciwgdGhp
cyBmYWtlIGN1cnNvciBJRiBkZWxldGluZyB0aGUgd2hvbGUgd29yZCAiYm95Ii4KKworLiBUaGUg
cGVyZm9ybWFuY2UgaGl0IGlzIHplcm8gd2hlbiBidWlsdC1pbiBsaW5lIG51bWJlcnMgYXJlIGFj
dGl2ZSwgYnV0IHBlcmhhcHMKKyAgbWlsZGx5IGRldGVjdGFibGUgd2hlbiBidWlsdC1pbiBsaW5l
IG51bWJlcnMgYXJlIHR1cm5lZCBvZmYuICBBbHRob3VnaCBsaW5lCisgIG51bWJlcnMgYXJlIG5v
dCBiZWluZyBnZW5lcmF0ZWQgb24gdGhlIGdsYXNzIGluIHRoZSBsYXR0ZXIgc2l0dWF0aW9uLCBF
bWFjcyB3aWxsCisgIG5ldmVydGhlbGVzcyBiZSBjYWxsaW5nIGBkaXNwbGF5X2NvdW50X2xpbmVz
X3Zpc3VhbGx5L2xvZ2ljYWxseScgYXQgdGhlIHNhbWUKKyAgbG9jYXRpb25zIGFzIGlmIHRoZSBi
dWlsdC1pbiBsaW5lIG51bWJlcnMgd2VyZSB0dXJuZWQgb24uCisKKy4gV2hlbiBgbWNfdXBkYXRl
X3RleHRfYXJlYScgcHJvY2Vzc2VzIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGZha2UgY3Vyc29y
IHRoYXQKKyAgbmVlZHMgdG8gYmUgcmVkcmF3biwgdGhlIGxpbmUgaXMgZGVlbWVkIHRvIGJlIFVO
Q0hBTkdFRC4gIGBjbGVhcl9lbmRfb2ZfbGluZScKKyAgaXMgbm90IHRyaWdnZXJlZCBhbmQgbm8g
ZmxvYXRpbmcgZmFrZSBjdXJzb3JzIGFyZSByZWRyYXduIGJhc2VkIHRoZXJlb24uICBUaGlzCisg
IGFuYWx5c2lzIHdhcyBoZWxwZnVsIGluIG5hcnJvd2luZyBkb3duIHRoZSBpc3N1ZSB0byB0aGUg
bmVlZCBmb3IgdGhlIGxudW0gZGF0YQorICBhcyBkZXNjcmliZWQgaGVyZWluYWJvdmUuCisKKwor
VklERU9TOgorCit3MzI6ICBodHRwczovL3lvdXR1LmJlL3IzQmRKVmxzQW5RCisKK25zOiAgaHR0
cHM6Ly95b3V0dS5iZS9iYzFoOGp0YlhtdworCit4MTE6ICBodHRwczovL3lvdXR1LmJlL2FDSUZo
RDJYejVzCisKKworU0NSRUVOU0hPVFM6CisKK2h0dHBzOi8vd3d3Lmxhd2xpc3QuY29tL2ltYWdl
cy8yMjg3M18xNzY4NF9saWdodF9kYXJrX2JhY2tncm91bmRzLnBuZworCisKK1NFVFVQOgorCitT
dGVwIDE6ICBnaXQgY2xvbmUgLWIgbWFzdGVyIGdpdDovL2dpdC5zdi5nbnUub3JnL2VtYWNzLmdp
dAorCitTdGVwIDI6ICBEdWUgdG8gbGFjayBvZiBmcmVlIHRpbWUgYXZhaWxhYmxlIHRvIGRlZGlj
YXRlIHRvIHRoZSBkZXZlbG9wbWVudCBvZgorICAgICAgICAgZmVhdHVyZXMgMjI4NzMgLyAxNzY4
NCwgYXBwbGljYWJpbGl0eSBvZiB0aGUgcGF0Y2ggdG8gdGhlIG1hc3RlciBicmFuY2gKKyAgICAg
ICAgIGlzIGZyb3plbiBhdCAwNy8xNC8yMDE5OiAgYWM1N2M1MDkzODI5ZWUwOTA4NGM1NjJiYmJj
MWM0MTIxNzliZTEzZAorCisgICAgICAgICBJbiB0aGUgbmV3IGVtYWNzIHJlcG9zaXRvcnkgZm9s
ZGVyLCBleGVjdXRlIGEgaGFyZCByZXNldCB0byAwNy8xNC8yMDE5OgorCisgICAgICAgICBnaXQg
cmVzZXQgLS1oYXJkIGFjNTdjNTA5MzgyOWVlMDkwODRjNTYyYmJiYzFjNDEyMTc5YmUxM2QKKwor
U3RlcCAzOiAgRnJvbSB3aXRoaW4gdGhlIG5ldyBlbWFjcyBmb2xkZXIgY3JlYXRlZCBpbiBTdGVw
IDEsIGFwcGx5IHRoZSBwYXRjaDoKKworICAgICAgICAgZ2l0IGFwcGx5IC9wYXRoL3RvL3RoZS9w
YXRjaC5kaWZmCisKK1N0ZXAgNDogIC4vYXV0b2dlbi5zaAorCitTdGVwIDU6ICAuL2NvbmZpZ3Vy
ZSAuLi4gW3lvdXIgY3VzdG9tIG9wdGlvbnNdCisKK1N0ZXAgNjogIG1ha2UKKworU3RlcCA3OiAg
bWFrZSBpbnN0YWxsCisKKworVVNBR0U6CisKKy0gRm9yIGEgbWluaW1hbCB3b3JraW5nIGV4YW1w
bGUgb2YgYnVpbHQtaW4gZmFrZSBjdXJzb3JzLCB0eXBlOiAgTS14IG1jLXRlc3QKKworICA7Ozsg
VFVSTiBPTiBGQUtFIENVUlNPUlMgKGJ1ZmZlciBwb3NpdGlvbiwgY3Vyc29yLXR5cGUsIGN1cnNv
ciBjb2xvcik6CisKKyAgKHNldHEgbWMtY29uZiAnKCgxICJoYmFyIiAibWFnZW50YSIpCisgICAg
ICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKKyAgICAgICAgICAgICAgICAgICgzICJi
b3giICIjMDBGRjAwIikKKyAgICAgICAgICAgICAgICAgICg0ICJob2xsb3ciICIjMDAwMEZGIikK
KyAgICAgICAgICAgICAgICAgICg1ICgiaGJhciIgMykgWzEuMCAwLjAgMS4wXSkKKyAgICAgICAg
ICAgICAgICAgICg2ICgiYmFyIiAzKSBbMC4wIDEuMCAxLjBdKQorICAgICAgICAgICAgICAgICAg
KDcgImZyYW1lZCIgIk9yYW5nZVJlZCIpKSkKKworICA7OzsgVFVSTiBPRkYgRkFLRSBDVVJTT1JT
OgorCisgIChzZXRxIG1jLWNvbmYgbmlsKQorCistIFRvIHRyeSBvdXQgYm90aCB0aGUgY3Jvc3No
YWlycyBmZWF0dXJlIGFuZCB0aGUgdmlzaWJsZSBmaWxsIGNvbHVtbiBpbmRpY2F0b3IKKyAgZmVh
dHVyZSwgdHlwZTogIE0teCArLW1vZGUKKworLSBUbyB0cnkgb3V0IGp1c3QgdGhlIHZpc2libGUg
ZmlsbCBjb2x1bW4gaW5kaWNhdG9yIGZlYXR1cmUsIHR5cGU6ICBNLXggZmMtbW9kZQorCistIFRv
IHRyeSBvdXQgYnVpbHQtaW4gZmFrZSBjdXJzb3JzIHdpdGggTWFnbmFyIFN2ZWVuJ3MgbXVsdGlw
bGUtY3Vyc29ycyBwYWNrYWdlLAorICB0aGF0IHBhY2thZ2UgbXVzdCBiZSBpbnN0YWxsZWQuICBJ
ZiB0aGUgbXVsdGlwbGUtY3Vyc29ycyBwYWNrYWdlIGlzIGFscmVhZHkKKyAgaW5zdGFsbGVkLCB0
aGVuIGp1c3QgKHJlcXVpcmUgJystbW9kZSkgYW5kIGArLW1vZGUuZWxgIHdpbGwgcmVkZWZpbmUg
YQorICBmZXcgb2YgdGhlIG11bHRpcGxlLWN1cnNvcnMgZnVuY3Rpb25zIGFuZCBzZXQgdXAgYSBm
ZXcga2V5Ym9hcmQgc2hvcnRjdXRzLgorICBJZiB0aGUgbXVsdGlwbGUtY3Vyc29ycyBwYWNrYWdl
IGJ5IE1hZ25hciBTdmVlbiBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQsIHRoZW4KKyAgaGVyZSBh
cmUgdHdvIGVhc3kgd2F5cyB0byBpbnN0YWxsIHRoYXQgcGFja2FnZToKKworICBUeXBlOiAgTS14
IG1jLWluc3RhbGwKKworICBPUiwgZXZhbHVhdGUgdGhlIGZvbGxvd2luZyBzbmlwcGV0OgorCisg
IChwcm9nbgorICAgIChyZXF1aXJlICdwYWNrYWdlKQorICAgIChhZGQtdG8tbGlzdCAncGFja2Fn
ZS1hcmNoaXZlcyAnKCJtZWxwYSIgLiAiaHR0cDovL21lbHBhLm1pbGtib3gubmV0L3BhY2thZ2Vz
LyIpIHQpCisgICAgKHBhY2thZ2UtaW5pdGlhbGl6ZSkKKyAgICAocGFja2FnZS1yZWZyZXNoLWNv
bnRlbnRzKQorICAgIChwYWNrYWdlLWluc3RhbGwgJ211bHRpcGxlLWN1cnNvcnMpCisgICAgKG1j
L2J1aWx0LWluLWN1cnNvcnMpKQorCisKK05PVEVTOgorCistIE91ciBqb3VybmV5IGJlZ2lucyBh
dCB0aGUgb3V0c2V0IG9mIGB1cGRhdGVfd2luZG93JyB3aGVuCisgIGBtY191cGRhdGVfd2luZG93
X2RyeXJ1bicgcGVyZm9ybXMgYSBgIWRyYXdfcGAgc2ltdWxhdGlvbiB0byBjcmVhdGUgYSBuZXcK
KyAgY2FjaGUgb2YgZmFrZSBjdXJzb3JzIHRoYXQgYXJlIHN0b3JlZCBpbiB0aGUgYHctPm1jX21h
dHJpeGAuICBUaGUgY2FjaGUgb2YKKyAgZmFrZSBjdXJzb3JzIGZyb20gdGhlIHByZXZpb3VzIHJl
ZGlzcGxheSBpcyBjb3BpZWQgdG8gYSB0ZW1wb3JhcnkgYG1jX21hdHJpeGAKKyAgdW5kZXIgdGhl
IG5hbWUgb2YgYG9sZF9tYXRyaXhgLiAgYG1jX3VwZGF0ZV90ZXh0X2FyZWEnICh1c2VkIGZvciBg
IWRyYXdfcGAgLworICBgZHJhd19wYCBzaXR1YXRpb25zKSBjYWxscyBgbWNfZHJhd19nbHlwaHMn
ICh3cml0ZXMgZ2x5cGhzIHRvIHRoZSBnbGFzcykKKyAgZm9sbG93ZWQgYnkgYG1jX2RyYXdfcm93
JyAod3JpdGVzIGZha2UgY3Vyc29ycyB0byB0aGUgZ2xhc3MgaW1tZWRpYXRlbHkKKyAgdGhlcmVh
ZnRlcikuICBBdCB0aGUgdGFpbCBlbmQgb2YgYG1jX3VwZGF0ZV93aW5kb3dfZHJ5cnVuJywKKyAg
YG1jX3VwZGF0ZV93aW5kb3dfZXJhc2UnIGNvbXBhcmVzIHRoZSBuZXcgYHctPm1jX21hdHJpeGAg
d2l0aCB0aGUgYG9sZF9tYXRyaXhgCisgIHRvIGRldGVybWluZSB3aGljaCBmYWtlIGN1cnNvcnMg
YXJlIHRoZSBzYW1lIC0tIHNldHRpbmcgdGhlIGBzYW1lX3BgIGJvb2xlYW4KKyAgc3RydWN0IG1l
bWJlciBhY2NvcmRpbmdseSBmb3IgZWFjaCBhcHBsaWNhYmxlIGZha2UgY3Vyc29yIHdpdGhpbiB0
aGUKKyAgYHctPm1jX21hdHJpeGAuICBBbGwgZmFrZSBjdXJzb3JzIGluIHRoZSBgb2xkX21hdHJp
eGAgdGhhdCBhcmUgYCFzYW1lX3BgIGdldAorICBlcmFzZWQgYXQgdGhpcyBqdW5jdHVyZS4gIFtG
biAxLl0gIEFmdGVyIHRoZSBkcnlydW4gaXMgY29tcGxldGUsCisgIGB1cGRhdGVfd2luZG93JyBk
b2VzIHRoZSByZWFsIHRoaW5nIC0tIGBkcmF3X3BgLiAgQXMgdG8gdGhlIGBmcm9tX3doZXJlYAor
ICBzaXR1YXRpb25zIG9mIFNLSVBQRUQsIFBPU1RfQ0hBTkdFRCwgVU5DSEFOR0VELCBhbmQgU0VU
X0NVUlNPUl9UV08sCisgIGBtY19oZWxwZXInIGNvbXBhcmVzIHRoZSBpbmNvbWluZyB0ZW50YXRp
dmUgZmFrZSBjdXJzb3Igd2l0aCB0aGUKKyAgYHctPm1jX21hdHJpeGAgdG8gc2VlIGlmIGl0IGhh
cyBwcmV2aW91c2x5IGJlZW4gbWFya2VkIGFzIGBzYW1lX3BgIC0tIGlmIGl0IGlzCisgIGAhc2Ft
ZV9wYCwgdGhlbiB0aGUgZmFrZSBjdXJzb3IgaXMgZHJhd24gYW5kIHdlIGByZXR1cm5gLiAgRmFr
ZSBjdXJzb3JzIHRoYXQKKyAgaGF2ZSBhIGBjdXJzb3JfdHlwZWAgb2YgTUNfTEVGVF9GUklOR0Vf
QklUTUFQIG9yIE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAgYXJlCisgIGFsd2F5cyByZXNldCBldmVu
IGlmIHRoZXkgYXJlIGBzYW1lX3BgLiAgQXMgdG8gdGhlIGBmcm9tX3doZXJlYCBzaXR1YXRpb25z
IG9mCisgIFNDUklCRV9PTkUsIFNDUklCRV9UV08sIFNDUklCRV9USFJFRSwgYW5kIE5PV0hFUkUs
IGBtY19oZWxwZXInIGFsd2F5cyBjYXVzZXMKKyAgZmFrZSBjdXJzb3JzIHRvIGJlIGRyYXduIChi
ZWNhdXNlIG5ldyBnbHlwaHMgd2VyZSB3cml0dGVuIHRvIHRoZSBnbGFzcywgb3IgdGhlCisgIGFy
ZWEgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkaXNwbGF5IGxpbmUgd2FzIGNsZWFyZWQpIGFuZCB3ZSBg
cmV0dXJuYC4KKworLiBGbi4gMTogIEV2ZW4gdGhvdWdoIHdyaXRpbmcgbmV3IGdseXBocyB0byB0
aGUgZ2xhc3MgKFNDUklCRV9PTkUsIFNDUklCRV9UV08sCisgIGFuZCBTQ1JJQkVfVEhSRUUpIHdv
dWxkIGVyYXNlIGZha2UgY3Vyc29ycyB3aXRoaW4gdGhvc2UgYm91bmRhcmllcywgaXQgaXMKKyAg
c3RpbGwgbmVjZXNzYXJ5IHRvIGVyYXNlIGAhc2FtZV9wYCBmYWtlIGN1cnNvcnMgcHJpb3IgdGhl
cmV0by4gIFRoaXMgaXMKKyAgYmVjYXVzZSBgc2Nyb2xsaW5nX3dpbmRvdycgb2NjdXJzIGJlZm9y
ZSBuZXcgZ2x5cGhzIGFyZSB3cml0dGVuIGFuZAorICBgcmlmLT5zY3JvbGxfcnVuX2hvb2snIG1h
eSBjb3B5IG9uZSBvciBtb3JlIHJvd3MgdG8gb3RoZXIgYXJlYXMgb2YgdGhlIGdsYXNzLgorICBJ
dCBpcyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBwcm9ncmFtbWF0aWNhbGx5IHRyYWNrIGJvdGgg
dGhlIF9jb3BpZWRfIGZha2UKKyAgY3Vyc29ycyBhbmQgdGhlIF9vcmlnaW5hbF8gZmFrZSBjdXJz
b3JzIGZyb20gdGhlIHByZXZpb3VzIHJlZGlzcGxheSBjeWNsZSwKKyAgd2hvc2UgZ2x5cGhzIG1h
eSByZW1haW4gd2hlcmUgdGhleSBhcmUgaW4gdGhlIGN1cnJlbnQgcmVkaXNwbGF5IGN5Y2xlIGJl
Y2F1c2UKKyAgdGhleSBzYXRpc2Z5IHRoZSBgR0xZUEhfRVFVQUxfUCcgdGVzdC4KKworLSBUaGUg
cmVzdCBvZiBvdXIgam91cm5leSB0YWtlcyBwbGFjZSB3aGVyZXZlciBgZHJhd19nbHlwaHMnIHdv
dWxkIG9yZGluYXJpbHkgYmUKKyAgY2FsbGVkLCBleGNsdWRpbmcgYHVwZGF0ZV90ZXh0X2FyZWEn
LiAgSWYgZmVhdHVyZXMgMTc2ODQvMjI4NzMgYXJlIGFjdGl2ZSwKKyAgYG1jX3JlZHJhd19yb3cn
IGNhbGxzIGBtY19kcmF3X2dseXBocycgKHdyaXRlcyBnbHlwaHMgdG8gdGhlIGdsYXNzKSBhbmQg
ZmFrZQorICBjdXJzb3JzIGFyZSB3cml0dGVuIHRvIHRoZSBnbGFzcyBpbW1lZGlhdGVseSB0aGVy
ZWFmdGVyIChpZiB0aGUgY29vcmRpbmF0ZXMKKyAgY29pbmNpZGUgd2l0aCBwcmVyZWNvcmRlZCBk
YXRhIGluIHRoZSBgdy0+bWNfbWF0cml4YCkuICBUaGUgZnVuY3Rpb25zCisgIGNvbnRhaW5pbmcg
dGhlIGFmb3JlbWVudGlvbmVkIGNhbGxzIGFyZToKKyAgLiBgZ3VpX2luc2VydF9nbHlwaHMnCisg
IC4gYGd1aV9maXhfb3ZlcmxhcHBpbmdfYXJlYScKKyAgLiBgZHJhd19yb3dfd2l0aF9tb3VzZV9m
YWNlJworICAuIGBleHBvc2VfYXJlYScKKyAgLiBgZXhwb3NlX2xpbmUnCisgIC4gYHJlZHJhd19v
dmVybGFwcGVkX3Jvd3MnIFt3aGljaCBoYXMgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byBgdXBkYXRl
X3dpbmRvdyddCisKKy0gQXMgdG8gYG1jX3Njcm9sbGluZ193aW5kb3cnLCBpdCB3b3VsZCBhcHBl
YXIgdGhhdCB0aGVyZSBpcyBubyB0YW5naWJsZQorICBiZW5lZml0IHRvIHJvdGF0aW5nIHRoZSBj
dXJyZW50L3Byb3NwZWN0aXZlIGNhY2hlIG9mIGZha2UgY3Vyc29ycyB0byBjb21wYXJlCisgIHRo
ZSBkYXRhIGJlZm9yZSByZW1vdmluZyB0aGUgZmFrZSBjdXJzb3JzLiAgV2hlbiBzY3JvbGxpbmcg
dGhlIGRpc3BsYXksIG9ubHkKKyAgX3NvbWVfIGxpbmVzIGFyZSBjb3BpZWQgdG8gbmV3IGxvY2F0
aW9ucy4gIEFyZWFzIHRoYXQgYXJlIG5vdCBvdmVyd3JpdHRlbiBtYXkKKyAgaGF2ZSBmYWtlIGN1
cnNvcnMgYW5kIHRob3NlIG1heSBub3QgbmVjZXNzYXJpbHkgYmUgcmVtb3ZlZCBpZiBkZXNpcmVk
L2N1cnJlbnQKKyAgbWF0cml4IGdseXBocyBhcmUgZXF1YWwuICBUaGUgdGVzdCBmb3IgYEdMWVBI
X0VRVUFMX1AnIGRvZXMgbm90IHRha2UgaW50bworICBjb25zaWRlcmF0aW9uIHRoZSBleGlzdGVu
Y2Ugb2YgYSBmYWtlIGN1cnNvciwgYW5kIHRoZSBnbHlwaCAod2l0aCBhIGZha2UKKyAgY3Vyc29y
KSBtYXkgbm90IGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgdGhlcmVvZi4gIEFzIHRvIGxpbmVzIHRo
YXQgYXJlIG5vdAorICBjb3BpZWQsIHBvcnRpb25zIG1heSBiZSB1cGRhdGVkIGFuZCBmYWtlIGN1
cnNvcnMgd291bGQgYmUgcmVtb3ZlZCB0aGVyZWJ5LgorICBgbWNfcm90YXRlX21hdHJpeCcgYW5k
IGBtY19yZXZlcnNlX3Zwb3MnIHdlcmUgcmVtb3ZlZCB3aXRoIHBhdGNoIHYuIDAyMi4wMDIuCisK
Ky0gTlM6ICBBcyBvZiAwOS8yOC8yMDE4ICg3OTQ2NDQ1OTYyMzcyYzQyNTUxODBhZjQ1Y2I3Yzg1
N2YxYjBiNWZhKSwgdGhlIE5TIHBvcnQKKyAgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcgdXNlZnVs
IGR1cmluZyBgdXBkYXRlX3dpbmRvdycgZXhjZXB0IG1hcmsgZGlydHkKKyAgcmVjdGFuZ2xlcy4g
IEFsbCBkcmF3aW5nIGlzIG5vdyBkb25lIHdoZW4gdGhlIE1hY09TIGNhbGxzIGBkcmF3UmVjdCcs
IHdoaWNoIGluCisgIHR1cm4gY2FsbHMgYGV4cG9zZV9mcmFtZScuICBUaGlzIHdhcyBkb25lIHRv
IGFkZCBzdXBwb3J0IGZvciBNYWNPUyBNb2phdmUgLi4uLgorCisKK1RPRE86CisKKy0gV2hlbiBh
biBpZGxlLXRpbWVyIGZpcmVzIGFuZCBwb2ludCBpcyBhdCB0aGUgZW5kIG9mIGEgaG9yaXpvbnRh
bGx5IHNjcm9sbGVkCisgIGxpbmUgaW4gYSBuYXJyb3cgd2luZG93LCB0aGUgdGVtcG9yYXJ5IGhv
cml6b250YWwgc2Nyb2xsIGlzIGNhbmNlbGVkLiAgQ3JlYXRlCisgIGEgbWluaW1hbCB3b3JraW5n
IGV4YW1wbGUgYW5kIGZpbGUgYSBidWcgcmVwb3J0LgorCisgIChwcm9nbgorICAgIChkZWZ1biB0
ZXN0ICgpCisgICAgKGludGVyYWN0aXZlKQorICAgICAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkg
KHBvaW50KSAoMSsgKHBvaW50KSkgbmlsIHQgdCkpKQorICAgICAgICAob3ZlcmxheS1wdXQgb3Yg
J2ZhY2UgJyg6Zm9yZWdyb3VuZCAicmVkIikpKSkKKyAgICAoZ2xvYmFsLXNldC1rZXkgW2Y1XSAn
dGVzdCkKKyAgICAoc3BsaXQtd2luZG93LWhvcml6b250YWxseSkKKyAgICAoc3dpdGNoLXRvLWJ1
ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgImZvbyIpKQorICAgIChzZXRxIGJpZGktZGlzcGxheS1y
ZW9yZGVyaW5nIG5pbCkKKyAgICAoc2V0cS1sb2NhbCBhdXRvLWhzY3JvbGwtbW9kZSAnY3VycmVu
dC1saW5lKQorICAgIChkb3RpbWVzIChpIDgwKQorICAgICAgKGluc2VydCAoY2hhci10by1zdHJp
bmcgKCsgNjUgaSkpKSkpCisKKy0gYG5zX2RyYXdfd2luZG93X2N1cnNvcicgY2FsbHMgYG5zX2Ns
aXBfdG9fcmVjdCcsIHdoaWNoIGRvZXMgX25vdF8gdGFrZQorICBgcm93LT5jbGlwYCBpbnRvIGNv
bnNpZGVyYXRpb24gd2hlbiBkcmF3aW5nIGN1cnNvcnMgd2l0aCBgTlNSZWN0RmlsbCcuICBXaGVu
CisgIGl0IGNvbWVzIHRpbWUgdG8gZHJhdyBnbHlwaHMgb24gdG9wIG9mIHRoZSBib3gvaG9sbG93
IGZhbWlseSBvZiBjdXJzb3JzLAorICBgcm93LT5jbGlwYCBpcyB0YWtlbiBpbnRvIGNvbnNpZGVy
YXRpb24gYnkgYGdldF9nbHlwaF9zdHJpbmdfY2xpcCcuICBGYWtlCisgIGN1cnNvcnMgY2FuIGJl
IGRyYXduIGV2ZW4gdGhvdWdoIHRoZSBnbHlwaHMgY2Fubm90LCByZXN1bHRpbmcgaW4gaG9sbG93
L2JveAorICBmYW1pbHkgb2YgY3Vyc29ycyB3aXRob3V0IHRleHQuICBUaGUgaXNzdWUgY2FuIGJl
IHJlcHJvZHVjZWQgd2l0aCBNLXggbWMtdGVzdC4KKyAgW0EgdGVtcG9yYXJ5IHdvcmthcm91bmQg
aXMgdG8gZGlzYWJsZSBgcm93LT5jbGlwYCB3aGlsZSBkcmF3aW5nIHRoZSBnbHlwaHMuXQorICBo
dHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMTktMDQvbXNn
MDAwMDkuaHRtbAorCistIERlYWwgd2l0aCBsZWZ0L3JpZ2h0IG92ZXJ3cml0dGVuIGdseXBocyBp
biB0aGUgdzMyIGFuZCBYIHBvcnRzIG9mIEVtYWNzLgorCistIFRoZSBjdXJyZW50IHRlc3QgZm9y
IGBhdXRvX2hzY3JvbGxfbW9kZV9wJyBvbmx5IGxvb2tzIGZvciBgY3VycmVudF9saW5lYCBhbmQK
KyAgYWxsIGZpdmUgcmVsYXRlZCB0ZXN0cyBhcmUgYmFzZWQgdXBvbiB0aGF0IGFzc3VtcHRpb24s
IHdoaWNoIG1heSBub3QgYmUgdHJ1ZS4KKworLSBNdWx0aXBsZSBDdXJzb3JzOiAgSWYgcG9pbnQg
aXMgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbXBvc2l0ZSBjaGFyYWN0ZXIsIHRoZW4KKyAgc2VsZWN0
IGEgZnVsbHkgY29tcG9zZWQgY2hhcmFjdGVyIHNvIHRoYXQgdGhlIGZha2UgY3Vyc29yIGlzIHZp
c2libGUuCisKKy0gSW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byB0aGUgTGlzcCBt
dWx0aXBsZS1jdXJzb3JzIGJ5IE1hZ25hciBTdmVlbi4KKworLSBGb2xsb3cgdXAgd2l0aCB0aGUg
RW1hY3MgdGVhbSByZSBidWcjMzIxNzc7IGkuZS4sIChDdXJyZW50IGxpbmUgbnVtYmVyIHNoaWZ0
cworICBvbmUgY29sdW1uIHRvIHRoZSBsZWZ0LikKKworLSBGb2xsb3cgdXAgd2l0aCB0aGUgRW1h
Y3MgdGVhbSByZSBidWcjMzIwNjA7IGkuZS4sIEhvcml6b250YWwgU2Nyb2xsaW5nCisgIChDdXJy
ZW50IExpbmUpOiAgV3JvbmcgbGluZSBnZXRzIGgtc2Nyb2xsZWQuCisKKy0gRGV0ZXJtaW5lIGlm
IGJ1ZyAjMjg5MzYgbmVlZHMgdG8gYmUgZml4ZWQgYW5kIGhlbHAgdGhlIEVtYWNzIHRlYW0gcmUg
c2FtZS4KKworLSBJcyB0aGVyZSBhbnkgYWRkaXRpb25hbCBtZWFuaW5nZnVsIG9wdGltaXphdGlv
biB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUKKyAgdGhyZWUgY2FsbHMgb2YgYG1jX3ByZV9zY3Jv
bGxfY2xlYW4nPworCistIFRoZXJlIGlzIGEgYnVnIGFmZmVjdGluZyBhbiBvbGRlciB2ZXJzaW9u
IG9mIEVtYWNzIGZvciB0aGUgTlMgcG9ydCB0aGF0IGNhdXNlcworICBwYXJ0aWFsIGxpbmUgZmxp
Y2tlcmluZyB3aGVuIHRoZSBzYW1lIGNoYXJhY3RlcnMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgKDs7
Ozs7OykKKyAgYW5kIE1DX0dMWVBITEVTUyBjdXJzb3JzIGFyZSBhYm92ZSBvciBiZWxvdyAtLSBo
YXZpbmcgdGhlIHNhbWUgYmFja2dyb3VuZCBjb2xvcgorICBhcyB0aGUgZnJhbWU7IGUuZy4sIGJs
YWNrIG9uIGJsYWNrICh1c2VkIHRvIGVyYXNlIGEgZ2x5cGhsZXNzIGN1cnNvcikuICBUaGUKKyAg
cGFydGlhbCBmbGlja2VyaW5nIGlzIG9ubHkgbm90aWNlYWJsZSB3aXRoIHJhcGlkIGZpcmU7IGUu
Zy4sIGhvbGRpbmcgZG93biB0aGUKKyAgcmlnaHQvbGVmdCBhcnJvdyBrZXkuICBXaGVuIGNoYW5n
aW5nIHRoZSBjb2xvciBvZiB0aGUgZ2x5cGhsZXNzIGN1cnNvciwgdGhlCisgIGlzc3VlIGlzIG5v
dCBwcmVzZW50LiAgW0BsYXdsaXN0IGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBYIGFuZCBIUE9TIGNv
b3JkaW5hdGVzCisgIGFyZSBhY2N1cmF0ZS5dCisKKworREVCVUdHSU5HOgorCit4ZGlzcC5jOiAg
WENoYXIyYiA9PiB1bnNpZ25lZAorCituc3Rlcm0ubTogIFhSZWN0YW5nbGUgPT4gY29uc3QgRW1h
Y3NfUmVjdGFuZ2xlCisKK3czMnRlcm0uYzogIFhHQ1ZhbHVlcyA9PiBFbWFjc19HQyAod2hpY2gg
aGFzIG5vIGBmb250YCBzdHJ1Y3QgbWVtYmVyKS4KKyAgICAgICAgICAgIG1hc2sgPT4gVGhlIG1h
c3RlciBicmFuY2ggbm8gbG9uZ2VyIHVzZXMgR0NGb250IGFzIGEgY29tcG9uZW50LgorCituc19m
b2N1cyArIG5zX2NsaXBfdG9fcm93ID0+IG5zX2NsaXBfdG9fcmVjdCBbQk9PTCAuLi4gc3RydWN0
IGZyYW1lICosIE5TUmVjdCAqLCBpbnQpCisKK25zX3VuZm9jdXMgPT4gbnNfcmVzZXRfY2xpcHBp
bmcKKworbWFrZV9zYXZlX3B0ciA9PiBtYWtlX21pbnRfcHRyCisKK3Jvdy0+Z2x5cGhzW1RFWFRf
QVJFQV1baHBvc10ucGl4ZWxfd2lkdGgKKwordy0+Y3VycmVudF9tYXRyaXgtPnJvd3NbMl0tPmds
eXBoc1tURVhUX0FSRUFdW2hwb3NdLnBpeGVsX3dpZHRoCisKK3ctPmN1cnJlbnRfbWF0cml4LT5y
b3dzWzJdLmVuYWJsZWRfcAorCit3LT5jdXJyZW50X21hdHJpeC0+cm93c1syXS51c2VkW1RFWFRf
QVJFQV0KKworUkFOR0VEX0lOVEVHRVJQID0+IFJBTkdFRF9GSVhOVU1QCisKK1RZUEVfUkFOR0VE
X0lOVEVHRVJQID0+IFRZUEVfUkFOR0VEX0ZJWE5VTVAKKworbWFrZV9udW1iZXIgPT4gbWFrZV9m
aXhudW0KKworWElOVCA9PiBYRklYTlVNCisKK1hGQVNUSU5UID0+IFhGSVhOQVQKKworc3RydWN0
IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIE9SCitzdHJ1Y3QgZnJhbWUgKmYgPSBY
RlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworCitMaXNwX09iamVjdCBzdHJpbmcgPSBGcHJpbjFf
dG9fc3RyaW5nIChpX3N0b3JlLCBRbmlsKTsKK2NoYXIgKmNoYXJfc3RyaW5nID0gU1NEQVRBIChz
dHJpbmcpOworZnByaW50ZiAoc3RkZXJyLCAiaV9zdG9yZTogICVzXG4iLCBjaGFyX3N0cmluZyk7
CisKK2NoYXIgKndfY29udGVudHMgPSAoQlVGRkVSUCAody0+Y29udGVudHMpICYmIFNUUklOR1Ag
KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQorICAgICAgICAgICAgICAgICAg
ID8gU1NEQVRBIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG5hbWUpKQorICAgICAgICAg
ICAgICAgICAgIDogIm5pbCI7CitmcHJpbnRmIChzdGRlcnIsICJcbkJ1ZmZlciAoJXMpXG4iLCB3
X2NvbnRlbnRzKTsKKworc3RydWN0IGZhY2UgKmZhY2UgPSAuLi4KK0xpc3BfT2JqZWN0IGZvcmVn
cm91bmQgPSBmYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKK0xpc3BfT2JqZWN0
IGJhY2tncm91bmQgPSBmYWNlLT5sZmFjZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVYXTsKK2Zwcmlu
dGYgKHN0ZGVyciwgIlxuZm9yZWdyb3VuZCAoJXMpIHwgYmFja2dyb3VuZCAoJXMpXG4iLAorICAg
ICAgICAgICAgICAgICAoIU5JTFAgKGZvcmVncm91bmQpID8gU1NEQVRBIChmb3JlZ3JvdW5kKSA6
ICJOSUxQIiksCisgICAgICAgICAgICAgICAgICghTklMUCAoYmFja2dyb3VuZCkgPyBTU0RBVEEg
KGJhY2tncm91bmQpIDogIk5JTFAiKSk7CisKK2ZwcmludGYgKHN0ZGVyciwgIk15IGxpc3Agb2Jq
ZWN0OiAgJXNcbiIsIFNTREFUQSAoRmNoYXJfdG9fc3RyaW5nIChtYWtlX2ZpeG51bSAoMTAxKSkp
KTsKKworZnByaW50ZiAoc3RkZXJyLCAic3RyaW5nOiAlcyB8IGludDogJWRcbiIsICJmb28iLCA2
OSk7CisKK2lmIChCVUZGRVJQICh3LT5jb250ZW50cykgJiYgU1RSSU5HUCAoQlZBUiAoWEJVRkZF
UiAody0+Y29udGVudHMpLCBuYW1lKSkpCisgIGZwcmludGYgKHN0ZGVyciwgIm5zX3VwZGF0ZV93
aW5kb3dfZW5kOiAgJXNcbiIsIFNTREFUQSAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBu
YW1lKSkpOworCitlYXNzZXJ0IChCVUZfQkVHIChiKSA8PSBjaGFycG9zICYmIGNoYXJwb3MgPD0g
QlVGX1ogKGIpKTsKK2Jvb2wgYmFyZl9jcmFzaCA9IChCVUZfQkVHIChiKSA8PSBjaGFycG9zICYm
IGNoYXJwb3MgPD0gQlVGX1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsgKi8KKworI2luY2x1ZGUgPHRp
bWUuaD4KKyNpbmNsdWRlIDxmdG9hc3RyLmg+CisKK2Jvb2wgbWNfc3RkZXJyX3AgPSBmYWxzZTsK
KworI2lmZGVmIEhBVkVfTlRHVUkKKyNkZWZpbmUgTUNfT1BUSU9OQUxfSERDKGhkYykgIEhEQyBo
ZGMsCisjZGVmaW5lIE1DX0RFQ0xBUkVfSERDKGhkYykgICBIREMgaGRjOworI2RlZmluZSBNQ19B
TExPQ0FURV9IREMoaGRjLCBmKSBoZGMgPSBnZXRfZnJhbWVfZGMgKChmKSkKKyNkZWZpbmUgTUNf
UkVMRUFTRV9IREMoaGRjLCBmKSAgcmVsZWFzZV9mcmFtZV9kYyAoKGYpLCAoaGRjKSkKKyNlbmRp
ZgorCisjaWZuZGVmIE1DX09QVElPTkFMX0hEQworI2RlZmluZSBNQ19PUFRJT05BTF9IREMoaGRj
KQorI2RlZmluZSBNQ19ERUNMQVJFX0hEQyhoZGMpCisjZGVmaW5lIE1DX0FMTE9DQVRFX0hEQyho
ZGMsIGYpCisjZGVmaW5lIE1DX1JFTEVBU0VfSERDKGhkYywgZikKKyNlbmRpZgorCitzdGF0aWMg
aW50IGxlZnRfb3ZlcndyaXR0ZW4gKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CitzdGF0aWMgaW50
IHJpZ2h0X292ZXJ3cml0dGVuIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIGludCBs
ZWZ0X292ZXJ3cml0aW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIGludCByaWdo
dF9vdmVyd3JpdGluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyB2b2lkIGFwcGVu
ZF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosIHN0cnVjdCBnbHlwaF9zdHJp
bmcgKiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfc3Ry
aW5nICopOworc3RhdGljIHZvaWQgcHJlcGVuZF9nbHlwaF9zdHJpbmdfbGlzdHMgKHN0cnVjdCBn
bHlwaF9zdHJpbmcgKiosIHN0cnVjdCBnbHlwaF9zdHJpbmcgKiosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqLCBzdHJ1Y3QgZ2x5
cGhfc3RyaW5nICopOworc3RhdGljIHZvaWQgYXBwZW5kX2dseXBoX3N0cmluZ19saXN0cyAoc3Ry
dWN0IGdseXBoX3N0cmluZyAqKiwgc3RydWN0IGdseXBoX3N0cmluZyAqKiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgc3RydWN0
IGdseXBoX3N0cmluZyAqKTsKK3N0YXRpYyB2b2lkIGluaXRfZ2x5cGhfc3RyaW5nIChzdHJ1Y3Qg
Z2x5cGhfc3RyaW5nICosIE1DX09QVElPTkFMX0hEQyAoaGRjKSB1bnNpZ25lZCAqLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX3Jv
dyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2x5cGhfcm93X2FyZWEs
IGludCwgZW51bSBkcmF3X2dseXBoc19mYWNlKTsKK3N0YXRpYyB2b2lkIGNvbXB1dGVfb3Zlcmhh
bmdzX2FuZF94IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgYm9vbCk7CitzdGF0aWMgc3Ry
dWN0IGdseXBoX3N0cmluZyAqIGdseXBoX3N0cmluZ19jb250YWluaW5nX2JhY2tncm91bmRfd2lk
dGggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CitzdGF0aWMgdm9pZCBzZXRfZ2x5cGhfc3RyaW5n
X2JhY2tncm91bmRfd2lkdGggKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgaW50LCBpbnQpOworc3Rh
dGljIGludCBmaWxsX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBpbnQsIGlu
dCwgaW50LCBpbnQpOworc3RhdGljIGludCBmaWxsX2dzdHJpbmdfZ2x5cGhfc3RyaW5nIChzdHJ1
Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQsIGludCk7CitzdGF0aWMgaW50IGZpbGxf
Y29tcG9zaXRlX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqLCBzdHJ1Y3QgZmFj
ZSAqLCBpbnQpOworc3RhdGljIGludCBmaWxsX3N0cmV0Y2hfZ2x5cGhfc3RyaW5nIChzdHJ1Y3Qg
Z2x5cGhfc3RyaW5nICosIGludCwgaW50KTsKK3N0YXRpYyB2b2lkIGZpbGxfaW1hZ2VfZ2x5cGhf
c3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworc3RhdGljIGludCBmaWxsX2dseXBobGVz
c19nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgaW50LCBpbnQsIGludCwgaW50
KTsKK3N0YXRpYyBwdHJkaWZmX3QgZGlzcGxheV9jb3VudF9saW5lc192aXN1YWxseSAoc3RydWN0
IGl0ICopOworc3RhdGljIHB0cmRpZmZfdCBkaXNwbGF5X2NvdW50X2xpbmVzX2xvZ2ljYWxseSAo
cHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90ICopOworCisjaWZkZWYg
SEFWRV9OVEdVSQorI2RlZmluZSBNQ19JTklUX0dMWVBIX1NUUklORyhzLCBjaGFyMmIsIHcsIHJv
dywgYXJlYSwgc3RhcnQsIGhsKSBcCisgIGluaXRfZ2x5cGhfc3RyaW5nIChzLCBoZGMsIGNoYXIy
Yiwgdywgcm93LCBhcmVhLCBzdGFydCwgaGwpCisjZWxzZQorI2RlZmluZSBNQ19JTklUX0dMWVBI
X1NUUklORyhzLCBjaGFyMmIsIHcsIHJvdywgYXJlYSwgc3RhcnQsIGhsKSBcCisgIGluaXRfZ2x5
cGhfc3RyaW5nIChzLCBjaGFyMmIsIHcsIHJvdywgYXJlYSwgc3RhcnQsIGhsKQorI2VuZGlmCisK
KyNkZWZpbmUgTUNfQlVJTERfU1RSRVRDSF9HTFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwg
VEFJTCwgSEwsIFgsIExBU1RfWCkgICBcCisgICAgIGRvCQkJCQkJCQkJICAgIFwKKyAgICAgICB7
CQkJCQkJCQkgICAgXAorCSBzID0gYWxsb2NhIChzaXplb2YgKnMpOwkJCQkJICAgIFwKKwkgTUNf
SU5JVF9HTFlQSF9TVFJJTkcgKHMsIE5VTEwsIHcsIHJvdywgYXJlYSwgU1RBUlQsIEhMKTsJCSAg
ICBcCisJIFNUQVJUID0gZmlsbF9zdHJldGNoX2dseXBoX3N0cmluZyAocywgU1RBUlQsIEVORCk7
ICAgICAgICAgICAgICAgICBcCisJIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCZIRUFELCAmVEFJTCwg
cyk7CQkJCSAgICBcCisgICAgICAgICBzLT54ID0gKFgpOwkJCQkJCQkgICAgXAorICAgICAgIH0J
CQkJCQkJCSAgICBcCisgICAgIHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9JTUFH
RV9HTFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAor
ICAgICBkbwkJCQkJCQkJCVwKKyAgICAgICB7CQkJCQkJCQlcCisJIHMgPSBhbGxvY2EgKHNpemVv
ZiAqcyk7CQkJCQlcCisJIE1DX0lOSVRfR0xZUEhfU1RSSU5HIChzLCBOVUxMLCB3LCByb3csIGFy
ZWEsIFNUQVJULCBITCk7CQlcCisJIGZpbGxfaW1hZ2VfZ2x5cGhfc3RyaW5nIChzKTsJCQkJCVwK
KwkgYXBwZW5kX2dseXBoX3N0cmluZyAoJkhFQUQsICZUQUlMLCBzKTsJCQkJXAorCSArK1NUQVJU
OwkJCQkJCQlcCisgICAgICAgICBzLT54ID0gKFgpOwkJCQkJCQlcCisgICAgICAgfQkJCQkJCQkJ
XAorICAgICB3aGlsZSAoZmFsc2UpCisKKyNpZm5kZWYgSEFWRV9YV0lER0VUUworIyBkZWZpbmUg
TUNfQlVJTERfWFdJREdFVF9HTFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEws
IFgsIExBU1RfWCkgXAorICAgICBlYXNzdW1lIChmYWxzZSkKKyNlbHNlCisjIGRlZmluZSBNQ19C
VUlMRF9YV0lER0VUX0dMWVBIX1NUUklORyhTVEFSVCwgRU5ELCBIRUFELCBUQUlMLCBITCwgWCwg
TEFTVF9YKSBcCisgICAgIGRvCQkJCQkJCQkJXAorICAgICAgIHsJCQkJCQkJCVwKKwkgcyA9IGFs
bG9jYSAoc2l6ZW9mICpzKTsJCQkJCVwKKwkgTUNfSU5JVF9HTFlQSF9TVFJJTkcgKHMsIE5VTEws
IHcsIHJvdywgYXJlYSwgU1RBUlQsIEhMKTsJCVwKKwkgZmlsbF94d2lkZ2V0X2dseXBoX3N0cmlu
ZyAocyk7CQkJCQlcCisJIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCYoSEVBRCksICYoVEFJTCksIHMp
OwkJCVwKKwkgKysoU1RBUlQpOwkJCQkJCQlcCisgICAgICAgICBzLT54ID0gKFgpOwkJCQkJCQlc
CisgICAgICAgfQkJCQkJCQkJXAorICAgICB3aGlsZSAoZmFsc2UpCisjZW5kaWYKKworI2RlZmlu
ZSBNQ19CVUlMRF9DSEFSX0dMWVBIX1NUUklOR1MoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwgSEws
IFgsIExBU1RfWCkJICAgXAorICAgICBkbwkJCQkJCQkJCSAgIFwKKyAgICAgICB7CQkJCQkJCQkg
ICBcCisJIGludCBmYWNlX2lkOwkJCQkJCQkgICBcCisJIHVuc2lnbmVkICpjaGFyMmI7CQkJCQkJ
ICAgXAorCQkJCQkJCQkJICAgXAorCSBmYWNlX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFS
VF0uZmFjZV9pZDsJCQkgICBcCisJCQkJCQkJCQkgICBcCisJIHMgPSBhbGxvY2EgKHNpemVvZiAq
cyk7CQkJCQkgICBcCisJIFNBRkVfTkFMTE9DQSAoY2hhcjJiLCAxLCAoRU5EKSAtIChTVEFSVCkp
OwkJCSAgIFwKKwkgTUNfSU5JVF9HTFlQSF9TVFJJTkcgKHMsIGNoYXIyYiwgdywgcm93LCBhcmVh
LCBTVEFSVCwgSEwpOwkgICBcCisJIGFwcGVuZF9nbHlwaF9zdHJpbmcgKCZIRUFELCAmVEFJTCwg
cyk7CQkJCSAgIFwKKwkgcy0+eCA9IChYKTsJCQkJCQkJICAgXAorCSBTVEFSVCA9IGZpbGxfZ2x5
cGhfc3RyaW5nIChzLCBmYWNlX2lkLCBTVEFSVCwgRU5ELCBvdmVybGFwcyk7CSAgIFwKKyAgICAg
ICB9CQkJCQkJCQkgICBcCisgICAgIHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9D
T01QT1NJVEVfR0xZUEhfU1RSSU5HKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBMQVNU
X1gpIFwKKyAgZG8gewkJCQkJCQkJCSAgICBcCisgICAgaW50IGZhY2VfaWQgPSAocm93KS0+Z2x5
cGhzW2FyZWFdW1NUQVJUXS5mYWNlX2lkOwkJCSAgICBcCisgICAgc3RydWN0IGZhY2UgKmJhc2Vf
ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CQkgICAgXAorICAgIHB0cmRpZmZfdCBj
bXBfaWQgPSAocm93KS0+Z2x5cGhzW2FyZWFdW1NUQVJUXS51LmNtcC5pZDsJCSAgICBcCisgICAg
c3RydWN0IGNvbXBvc2l0aW9uICpjbXAgPSBjb21wb3NpdGlvbl90YWJsZVtjbXBfaWRdOwkJICAg
IFwKKyAgICB1bnNpZ25lZCAqY2hhcjJiOwkJCQkJCQkgICAgXAorICAgIHN0cnVjdCBnbHlwaF9z
dHJpbmcgKmZpcnN0X3MgPSBOVUxMOwkJCQkgICAgXAorICAgIGludCBuOwkJCQkJCQkJICAgIFwK
KwkJCQkJCQkJCSAgICBcCisgICAgU0FGRV9OQUxMT0NBIChjaGFyMmIsIDEsIGNtcC0+Z2x5cGhf
bGVuKTsJCQkJICAgIFwKKwkJCQkJCQkJCSAgICBcCisgICAgZm9yIChuID0gMDsgbiA8IGNtcC0+
Z2x5cGhfbGVuOykJCQkJCSAgICBcCisgICAgICB7CQkJCQkJCQkJICAgIFwKKwlzID0gYWxsb2Nh
IChzaXplb2YgKnMpOwkJCQkJCSAgICBcCisJTUNfSU5JVF9HTFlQSF9TVFJJTkcgKHMsIGNoYXIy
Yiwgdywgcm93LCBhcmVhLCBTVEFSVCwgSEwpOwkJICAgIFwKKwlhcHBlbmRfZ2x5cGhfc3RyaW5n
ICgmKEhFQUQpLCAmKFRBSUwpLCBzKTsJCQkgICAgXAorCXMtPmNtcCA9IGNtcDsJCQkJCQkJICAg
IFwKKwlzLT5jbXBfZnJvbSA9IG47CQkJCQkJICAgIFwKKwlzLT54ID0gKFgpOwkJCQkJCQkgICAg
XAorCWlmIChuID09IDApCQkJCQkJCSAgICBcCisJICBmaXJzdF9zID0gczsJCQkJCQkJICAgIFwK
KwluID0gZmlsbF9jb21wb3NpdGVfZ2x5cGhfc3RyaW5nIChzLCBiYXNlX2ZhY2UsIG92ZXJsYXBz
KTsJICAgIFwKKyAgICAgIH0JCQkJCQkJCQkgICAgXAorCQkJCQkJCQkJICAgIFwKKyAgICArK1NU
QVJUOwkJCQkJCQkJICAgIFwKKyAgICBzID0gZmlyc3RfczsJCQkJCQkJICAgIFwKKyAgfSB3aGls
ZSAoZmFsc2UpCisKKyNkZWZpbmUgTUNfQlVJTERfR1NUUklOR19HTFlQSF9TVFJJTkcoU1RBUlQs
IEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkgXAorICBkbyB7CQkJCQkJCQkJICBcCisg
ICAgaW50IGZhY2VfaWQ7CQkJCQkJCSAgXAorICAgIHVuc2lnbmVkICpjaGFyMmI7CQkJCQkJCSAg
XAorICAgIExpc3BfT2JqZWN0IGdzdHJpbmc7CQkJCQkJICBcCisJCQkJCQkJCQkgIFwKKyAgICBm
YWNlX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFSVF0uZmFjZV9pZDsJCQkgIFwKKyAgICBn
c3RyaW5nID0gKGNvbXBvc2l0aW9uX2dzdHJpbmdfZnJvbV9pZAkJCQkgIFwKKwkgICAgICAgKChy
b3cpLT5nbHlwaHNbYXJlYV1bU1RBUlRdLnUuY21wLmlkKSk7CQkJICBcCisgICAgcyA9IGFsbG9j
YSAoc2l6ZW9mICpzKTsJCQkJCQkgIFwKKyAgICBTQUZFX05BTExPQ0EgKGNoYXIyYiwgMSwgTEdT
VFJJTkdfR0xZUEhfTEVOIChnc3RyaW5nKSk7CQkgIFwKKyAgICBNQ19JTklUX0dMWVBIX1NUUklO
RyAocywgY2hhcjJiLCB3LCByb3csIGFyZWEsIFNUQVJULCBITCk7CQkgIFwKKyAgICBhcHBlbmRf
Z2x5cGhfc3RyaW5nICgmKEhFQUQpLCAmKFRBSUwpLCBzKTsJCQkJICBcCisgICAgcy0+eCA9IChY
KTsJCQkJCQkJCSAgXAorICAgIFNUQVJUID0gZmlsbF9nc3RyaW5nX2dseXBoX3N0cmluZyAocywg
ZmFjZV9pZCwgU1RBUlQsIEVORCwgb3ZlcmxhcHMpOyBcCisgIH0gd2hpbGUgKGZhbHNlKQorCisj
ZGVmaW5lIE1DX0JVSUxEX0dMWVBITEVTU19HTFlQSF9TVFJJTkcoU1RBUlQsIEVORCwgSEVBRCwg
VEFJTCwgSEwsIFgsIExBU1RfWCkgXAorICBkbwkJCQkJCQkJCSAgICBcCisgICAgewkJCQkJCQkJ
CSAgICBcCisgICAgICBpbnQgZmFjZV9pZDsJCQkJCQkJICAgIFwKKwkJCQkJCQkJCSAgICBcCisg
ICAgICBmYWNlX2lkID0gKHJvdyktPmdseXBoc1thcmVhXVtTVEFSVF0uZmFjZV9pZDsJCQkgICAg
XAorCQkJCQkJCQkJICAgIFwKKyAgICAgIHMgPSBhbGxvY2EgKHNpemVvZiAqcyk7CQkJCQkJICAg
IFwKKyAgICAgIE1DX0lOSVRfR0xZUEhfU1RSSU5HIChzLCBOVUxMLCB3LCByb3csIGFyZWEsIFNU
QVJULCBITCk7CQkgICAgXAorICAgICAgYXBwZW5kX2dseXBoX3N0cmluZyAoJkhFQUQsICZUQUlM
LCBzKTsJCQkJICAgIFwKKyAgICAgIHMtPnggPSAoWCk7CQkJCQkJCSAgICBcCisgICAgICBTVEFS
VCA9IGZpbGxfZ2x5cGhsZXNzX2dseXBoX3N0cmluZyAocywgZmFjZV9pZCwgU1RBUlQsIEVORCwJ
ICAgIFwKKwkJCQkJICAgb3ZlcmxhcHMpOwkJCSAgICBcCisgICAgfQkJCQkJCQkJCSAgICBcCisg
IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTXzEoU1RBUlQs
IEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7
CQkJCQkJCQkJXAorICAgICAgSEVBRCA9IFRBSUwgPSBOVUxMOwkJCQkJCVwKKyAgICAgIHdoaWxl
IChTVEFSVCA8IEVORCkJCQkJCQlcCisJewkJCQkJCQkJXAorCSAgc3RydWN0IGdseXBoICpmaXJz
dF9nbHlwaCA9IChyb3cpLT5nbHlwaHNbYXJlYV0gKyBTVEFSVDsJXAorCSAgc3dpdGNoIChmaXJz
dF9nbHlwaC0+dHlwZSkJCQkJCVwKKwkgICAgewkJCQkJCQkJXAorCSAgICBjYXNlIENIQVJfR0xZ
UEg6CQkJCQkJXAorCSAgICAgIE1DX0JVSUxEX0NIQVJfR0xZUEhfU1RSSU5HUyAoU1RBUlQsIEVO
RCwgSEVBRCwgVEFJTCwJCVwKKwkJCQkJSEwsIFgsIExBU1RfWCk7CQkJXAorCSAgICAgIGJyZWFr
OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJICAgIGNhc2UgQ09NUE9TSVRFX0dMWVBIOgkJCQkJXAor
CSAgICAgIGlmIChmaXJzdF9nbHlwaC0+dS5jbXAuYXV0b21hdGljKQkJCQlcCisJCU1DX0JVSUxE
X0dTVFJJTkdfR0xZUEhfU1RSSU5HIChTVEFSVCwgRU5ELCBIRUFELCBUQUlMLAlcCisJCQkJCSAg
ICBITCwgWCwgTEFTVF9YKTsJCVwKKwkgICAgICBlbHNlCQkJCQkJCVwKKwkJTUNfQlVJTERfQ09N
UE9TSVRFX0dMWVBIX1NUUklORyAoU1RBUlQsIEVORCwgSEVBRCwgVEFJTCwJXAorCQkJCQkgICAg
ICBITCwgWCwgTEFTVF9YKTsJCVwKKwkgICAgICBicmVhazsJCQkJCQkJXAorCQkJCQkJCQkJXAor
CSAgICBjYXNlIFNUUkVUQ0hfR0xZUEg6CQkJCQkJXAorCSAgICAgIE1DX0JVSUxEX1NUUkVUQ0hf
R0xZUEhfU1RSSU5HIChTVEFSVCwgRU5ELCBIRUFELCBUQUlMLAlcCisJCQkJCSAgSEwsIFgsIExB
U1RfWCk7CQlcCisJICAgICAgYnJlYWs7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgICAgY2FzZSBJ
TUFHRV9HTFlQSDoJCQkJCQlcCisJICAgICAgTUNfQlVJTERfSU1BR0VfR0xZUEhfU1RSSU5HIChT
VEFSVCwgRU5ELCBIRUFELCBUQUlMLAkJXAorCQkJCQlITCwgWCwgTEFTVF9YKTsJCQlcCisJICAg
ICAgYnJlYWs7CisKKyNkZWZpbmUgTUNfQlVJTERfR0xZUEhfU1RSSU5HU19YVyhTVEFSVCwgRU5E
LCBIRUFELCBUQUlMLCBITCwgWCwgTEFTVF9YKQlcCisgICAgICAgICAgICBjYXNlIFhXSURHRVRf
R0xZUEg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgIE1DX0JVSUxEX1hXSURHRVRfR0xZUEhfU1RSSU5HIChTVEFSVCwgRU5ELCBIRUFELCBU
QUlMLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
TCwgWCwgTEFTVF9YKTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGJyZWFrOworCisj
ZGVmaW5lIE1DX0JVSUxEX0dMWVBIX1NUUklOR1NfMihTVEFSVCwgRU5ELCBIRUFELCBUQUlMLCBI
TCwgWCwgTEFTVF9YKQlcCisJICAgIGNhc2UgR0xZUEhMRVNTX0dMWVBIOgkJCQkJXAorCSAgICAg
IE1DX0JVSUxEX0dMWVBITEVTU19HTFlQSF9TVFJJTkcgKFNUQVJULCBFTkQsIEhFQUQsIFRBSUws
CVwKKwkJCQkJICAgIEhMLCBYLCBMQVNUX1gpOwkJXAorCSAgICAgIGJyZWFrOwkJCQkJCQlcCisJ
CQkJCQkJCQlcCisJICAgIGRlZmF1bHQ6CQkJCQkJCVwKKwkgICAgICBlbWFjc19hYm9ydCAoKTsJ
CQkJCQlcCisJICAgIH0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkgIGlmIChzKQkJCQkJCQlcCisJ
ICAgIHsJCQkJCQkJCVwKKwkgICAgICBzZXRfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmRfd2lkdGgg
KHMsIFNUQVJULCBMQVNUX1gpOwlcCisJICAgICAgKFgpICs9IHMtPndpZHRoOwkJCQkJCVwKKwkg
ICAgfQkJCQkJCQkJXAorCX0JCQkJCQkJCVwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmlu
ZSBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTKFNUQVJULCBFTkQsIEhFQUQsIFRBSUwsIEhMLCBYLCBM
QVNUX1gpCVwKKyAgICBNQ19CVUlMRF9HTFlQSF9TVFJJTkdTXzEoU1RBUlQsIEVORCwgSEVBRCwg
VEFJTCwgSEwsIFgsIExBU1RfWCkJXAorICAgIE1DX0JVSUxEX0dMWVBIX1NUUklOR1NfWFcoU1RB
UlQsIEVORCwgSEVBRCwgVEFJTCwgSEwsIFgsIExBU1RfWCkJXAorICAgIE1DX0JVSUxEX0dMWVBI
X1NUUklOR1NfMihTVEFSVCwgRU5ELCBIRUFELCBUQUlMLCBITCwgWCwgTEFTVF9YKQorCisvKiBT
ZXQgdmFyaWFibGVzIFdJRFRIIGFuZCBCWVRFUyBmb3IgYSBtdWx0aWJ5dGUgc2VxdWVuY2Ugc3Rh
cnRpbmcgYXQgUC4KKyAgIERQIGlzIGEgZGlzcGxheSB0YWJsZSBvciBOVUxMLiAqLworI2RlZmlu
ZSBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEgocCwgZHAsIGJ5dGVzLCB3aWR0aCkJCQlcCisgIGRv
IHsJCQkJCQkJCQlcCisgICAgaW50IGNoOwkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKyAgICBjaCA9
IFNUUklOR19DSEFSX0FORF9MRU5HVEggKHAsIGJ5dGVzKTsJCQkJXAorICAgIGlmIChCWVRFU19C
WV9DSEFSX0hFQUQgKCpwKSAhPSBieXRlcykJCQkJXAorICAgICAgd2lkdGggPSBieXRlcyAqIDQ7
CQkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJaWYgKGRwICE9
IDAgJiYgVkVDVE9SUCAoRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGNoKSkpCQlcCisJICB3aWR0aCA9
IHNhbml0aXplX2NoYXJfd2lkdGggKEFTSVpFIChESVNQX0NIQVJfVkVDVE9SIChkcCwgY2gpKSk7
IFwKKwllbHNlCQkJCQkJCQlcCisJICB3aWR0aCA9IENIQVJBQ1RFUl9XSURUSCAoY2gpOwkJCQkJ
XAorICAgICAgfQkJCQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworTGlzcF9PYmplY3QKK21jX3Zl
Y3RvciAoaW50IGxlbmd0aCkKK3sKKyAgc3RydWN0IExpc3BfVmVjdG9yICpwID0gYWxsb2NhdGVf
dmVjdG9yIChsZW5ndGgpOworICBmb3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KQorICAgIHAtPmNvbnRlbnRzW2ldID0gUW5pbDsKKyAgcmV0dXJuIG1ha2VfbGlzcF9wdHIgKHAs
IExpc3BfVmVjdG9ybGlrZSk7Cit9CisKK0xpc3BfT2JqZWN0CittY19saXN0biAocHRyZGlmZl90
IGNvdW50LCBMaXNwX09iamVjdCBhcmcsIC4uLikKK3sKKyAgZWFzc3VtZSAoMCA8IGNvdW50KTsK
KyAgTGlzcF9PYmplY3QgdmFsID0gRmNvbnMgKGFyZywgUW5pbCk7CisgIExpc3BfT2JqZWN0IHRh
aWwgPSB2YWw7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgYXJnKTsKKyAgZm9yIChw
dHJkaWZmX3QgaSA9IDE7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0
IGVsZW0gPSBGY29ucyAodmFfYXJnIChhcCwgTGlzcF9PYmplY3QpLCBRbmlsKTsKKyAgICAgIFhT
RVRDRFIgKHRhaWwsIGVsZW0pOworICAgICAgdGFpbCA9IGVsZW07CisgICAgfQorICB2YV9lbmQg
KGFwKTsKKyAgcmV0dXJuIHZhbDsKK30KKworTGlzcF9PYmplY3QKK21jX21lbXEgKExpc3BfT2Jq
ZWN0IGVsdCwgTGlzcF9PYmplY3QgbGlzdCkKK3sKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAg
aWYgKCFDT05TUCAobGlzdCkgfHwgRVEgKFhDQVIgKGxpc3QpLCBlbHQpKQorICAgICAgICBicmVh
azsKKyAgICAgIGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgICAgIGlmICghQ09OU1AgKGxpc3QpIHx8
IEVRIChYQ0FSIChsaXN0KSwgZWx0KSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENE
UiAobGlzdCk7CisgICAgICBpZiAoIUNPTlNQIChsaXN0KSB8fCBFUSAoWENBUiAobGlzdCksIGVs
dCkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3QpOworICAgIH0KKyAg
cmV0dXJuIGxpc3Q7Cit9CisKK0xpc3BfT2JqZWN0CittY19udGggKGludCBudW0sIExpc3BfT2Jq
ZWN0IGxpc3QpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtICYmICFOSUxQIChsaXN0KTsg
aSsrKQorICAgIGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgaWYgKENPTlNQIChsaXN0KSkKKyAgICBy
ZXR1cm4gWENBUiAobGlzdCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIFFuaWw7Cit9CisKK0xp
c3BfT2JqZWN0CittY19hc3NxIChMaXNwX09iamVjdCBrZXksIExpc3BfT2JqZWN0IGxpc3QpCit7
CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghQ09OU1AgKGxpc3QpCisgICAgICAgICAg
fHwgKENPTlNQIChYQ0FSIChsaXN0KSkKKyAgICAgICAgICAgICAgJiYgRVEgKFhDQVIgKFhDQVIg
KGxpc3QpKSwga2V5KSkpCisgICAgICAgIGJyZWFrOworICAgICAgbGlzdCA9IFhDRFIgKGxpc3Qp
OworICAgICAgaWYgKCFDT05TUCAobGlzdCkKKyAgICAgICAgICB8fCAoQ09OU1AgKFhDQVIgKGxp
c3QpKQorICAgICAgICAgICAgICAmJiBFUSAoWENBUiAoWENBUiAobGlzdCkpLCBrZXkpKSkKKyAg
ICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENEUiAobGlzdCk7CisgICAgICBpZiAoIUNPTlNQ
IChsaXN0KQorICAgICAgICAgIHx8IChDT05TUCAoWENBUiAobGlzdCkpCisgICAgICAgICAgICAg
ICYmIEVRIChYQ0FSIChYQ0FSIChsaXN0KSksIGtleSkpKQorICAgICAgICBicmVhazsKKyAgICAg
IGxpc3QgPSBYQ0RSIChsaXN0KTsKKyAgICB9CisgIGlmIChDT05TUCAobGlzdCkpCisgICAgcmV0
dXJuIFhDQVIgKGxpc3QpOworICAgIGVsc2UKKyAgICAgIHJldHVybiBRbmlsOworfQorCitMaXNw
X09iamVjdAorbWNfYXNzb2MgKExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgbGlzdCkKK3sK
KyAgTGlzcF9PYmplY3QgY2FyOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoIUNPTlNQ
IChsaXN0KQorICAgICAgICAgIHx8IChDT05TUCAoWENBUiAobGlzdCkpCisgICAgICAgICAgICAg
ICYmIChjYXIgPSBYQ0FSIChYQ0FSIChsaXN0KSksCisgICAgICAgICAgICAgICAgICBFUSAoY2Fy
LCBrZXkpIHx8ICFOSUxQIChGZXF1YWwgKGNhciwga2V5KSkpKSkKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBsaXN0ID0gWENEUiAobGlzdCk7CisgICAgICBpZiAoIUNPTlNQIChsaXN0KQorICAgICAg
ICAgIHx8IChDT05TUCAoWENBUiAobGlzdCkpCisgICAgICAgICAgICAgICYmIChjYXIgPSBYQ0FS
IChYQ0FSIChsaXN0KSksCisgICAgICAgICAgICAgICAgICBFUSAoY2FyLCBrZXkpIHx8ICFOSUxQ
IChGZXF1YWwgKGNhciwga2V5KSkpKSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENE
UiAobGlzdCk7CisgICAgICBpZiAoIUNPTlNQIChsaXN0KQorICAgICAgICAgIHx8IChDT05TUCAo
WENBUiAobGlzdCkpCisgICAgICAgICAgICAgICYmIChjYXIgPSBYQ0FSIChYQ0FSIChsaXN0KSks
CisgICAgICAgICAgICAgICAgICBFUSAoY2FyLCBrZXkpIHx8ICFOSUxQIChGZXF1YWwgKGNhciwg
a2V5KSkpKSkKKyAgICAgICAgYnJlYWs7CisgICAgICBsaXN0ID0gWENEUiAobGlzdCk7CisgICAg
fQorICBpZiAoQ09OU1AgKGxpc3QpKQorICAgIHJldHVybiBYQ0FSIChsaXN0KTsKKyAgICBlbHNl
CisgICAgICByZXR1cm4gUW5pbDsKK30KKworTGlzcF9PYmplY3QKK21jX3BsaXN0X2dldCAoTGlz
cF9PYmplY3QgcGxpc3QsIExpc3BfT2JqZWN0IHByb3ApCit7CisgIExpc3BfT2JqZWN0IHRhaWws
IGhhbGZ0YWlsOworICAvKiBoYWxmdGFpbCBpcyB1c2VkIHRvIGRldGVjdCBjaXJjdWxhciBsaXN0
cy4gICovCisgIHRhaWwgPSBoYWxmdGFpbCA9IHBsaXN0OworICB3aGlsZSAoQ09OU1AgKHRhaWwp
ICYmIENPTlNQIChYQ0RSICh0YWlsKSkpCisgICAgeworICAgICAgaWYgKEVRIChwcm9wLCBYQ0FS
ICh0YWlsKSkpCisgICAgICAgIHJldHVybiBYQ0FSIChYQ0RSICh0YWlsKSk7CisgICAgICB0YWls
ID0gWENEUiAoWENEUiAodGFpbCkpOworICAgICAgaGFsZnRhaWwgPSBYQ0RSIChoYWxmdGFpbCk7
CisgICAgICBpZiAoRVEgKHRhaWwsIGhhbGZ0YWlsKSkKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICByZXR1cm4gUW5pbDsKK30KKworLyogUkVHSU9OIEJFR0lOOiAgbWNfcmVnaW9uX2xpbWl0ICgx
KQorICAgUkVHSU9OIEVORDogIG1jX3JlZ2lvbl9saW1pdCAoMCkgKi8KK3B0cmRpZmZfdAorbWNf
cmVnaW9uX2xpbWl0IChib29sIGJlZ2luX3ApCit7CisgIGlmICghTklMUCAoVnRyYW5zaWVudF9t
YXJrX21vZGUpCisgICAgICAmJiBOSUxQIChWbWFya19ldmVuX2lmX2luYWN0aXZlKQorICAgICAg
JiYgTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1hcmtfYWN0aXZlKSkpCisgICAgeHNpZ25h
bDAgKFFtYXJrX2luYWN0aXZlKTsKKyAgTGlzcF9PYmplY3QgbWFya2VyID0gQlZBUiAoY3VycmVu
dF9idWZmZXIsIG1hcmspOworICBpbnQgbSA9IChYTUFSS0VSIChtYXJrZXIpLT5idWZmZXIpCisg
ICAgICAgICAgPyBYTUFSS0VSIChtYXJrZXIpLT5jaGFycG9zCisgICAgICAgICAgOiAtMTsKKyAg
cmV0dXJuIChtID09IC0xKQorICAgICAgICAgICA/IC0xCisgICAgICAgICA6IChQVCA8IG0pID09
IGJlZ2luX3AKKyAgICAgICAgICAgPyBQVAorICAgICAgICAgOiBjbGlwX3RvX2JvdW5kcyAoQkVH
ViwgbSwgWlYpOworfQorCisvKiBDaGVjayB0aGUgcHJlc2VuY2Ugb2YgYSBkaXNwbGF5IHByb3Bl
cnR5IGFuZCBjb21wdXRlIGl0cyB3aWR0aC4KKyAgIElmIGEgcHJvcGVydHkgd2FzIGZvdW5kIGFu
ZCBpdHMgd2lkdGggd2FzIGZvdW5kIGFzIHdlbGwsIHJldHVybgorICAgaXRzIHdpZHRoICg+PSAw
KSBhbmQgc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBwcm9wZXJ0eQorICAgaW4g
RU5EUE9TLgorICAgT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIC0xLiAqLworc3RhdGljIGludAorbWNf
Y2hlY2tfZGlzcGxheV93aWR0aCAocHRyZGlmZl90IHBvcywgcHRyZGlmZl90IGNvbCwgcHRyZGlm
Zl90ICplbmRwb3MpCit7CisgIExpc3BfT2JqZWN0IHZhbCwgb3ZlcmxheTsKKyAgaWYgKENPTlNQ
ICh2YWwgPSBnZXRfY2hhcl9wcm9wZXJ0eV9hbmRfb3ZlcmxheQorICAgICAgICAgICAgICAobWFr
ZV9maXhudW0gKHBvcyksIFFkaXNwbGF5LCBRbmlsLCAmb3ZlcmxheSkpCisgICAgICAmJiBFUSAo
UXNwYWNlLCBYQ0FSICh2YWwpKSkKKyAgICB7IC8qIEZJWE1FOiBVc2UgY2FsY19waXhlbF93aWR0
aF9vcl9oZWlnaHQuICovCisgICAgICBMaXNwX09iamVjdCBwbGlzdCA9IFhDRFIgKHZhbCksIHBy
b3A7CisgICAgICBpbnQgd2lkdGggPSAtMTsKKyAgICAgIEVNQUNTX0lOVCBhbGlnbl90b19tYXgg
PSAoY29sIDwgTU9TVF9QT1NJVElWRV9GSVhOVU0gLSBJTlRfTUFYCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IChFTUFDU19JTlQpIElOVF9NQVggKyBjb2wKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogTU9TVF9QT1NJVElWRV9GSVhOVU0pOworICAgICAgaWYg
KChwcm9wID0gbWNfcGxpc3RfZ2V0IChwbGlzdCwgUUN3aWR0aCksIFJBTkdFRF9GSVhOVU1QICgw
LCBwcm9wLCBJTlRfTUFYKSkKKyAgICAgICAgICB8fCAocHJvcCA9IG1jX3BsaXN0X2dldCAocGxp
c3QsIFFDcmVsYXRpdmVfd2lkdGgpLAorICAgICAgICAgICAgICBSQU5HRURfRklYTlVNUCAoMCwg
cHJvcCwgSU5UX01BWCkpKQorICAgICAgICB3aWR0aCA9IFhGSVhOVU0gKHByb3ApOworICAgICAg
ICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIDAgPD0gWEZMT0FUX0RBVEEgKHByb3ApCisgICAg
ICAgICAgICAgICAgICYmIFhGTE9BVF9EQVRBIChwcm9wKSA8PSBJTlRfTUFYKQorICAgICAgICAg
IHdpZHRoID0gKGludCkoWEZMT0FUX0RBVEEgKHByb3ApICsgMC41KTsKKyAgICAgICAgICBlbHNl
IGlmICgocHJvcCA9IG1jX3BsaXN0X2dldCAocGxpc3QsIFFDYWxpZ25fdG8pLAorICAgICAgICAg
ICAgICAgICAgICBSQU5HRURfRklYTlVNUCAoY29sLCBwcm9wLCBhbGlnbl90b19tYXgpKSkKKyAg
ICAgICAgICAgIHdpZHRoID0gWEZJWE5VTSAocHJvcCkgLSBjb2w7CisgICAgICAgICAgICAgIGVs
c2UgaWYgKEZMT0FUUCAocHJvcCkgJiYgY29sIDw9IFhGTE9BVF9EQVRBIChwcm9wKQorICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoWEZMT0FUX0RBVEEgKHByb3ApIDw9IGFsaWduX3RvX21heCkp
CisgICAgICAgICAgICAgICAgd2lkdGggPSAoaW50KShYRkxPQVRfREFUQSAocHJvcCkgKyAwLjUp
IC0gY29sOworICAgICAgaWYgKHdpZHRoID49IDApCisgICAgICAgIHsKKyAgICAgICAgICBwdHJk
aWZmX3Qgc3RhcnQ7CisgICAgICAgICAgaWYgKE9WRVJMQVlQIChvdmVybGF5KSkKKyAgICAgICAg
ICAgICplbmRwb3MgPSBPVkVSTEFZX1BPU0lUSU9OIChPVkVSTEFZX0VORCAob3ZlcmxheSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnZXRfcHJvcGVydHlfYW5kX3JhbmdlIChw
b3MsIFFkaXNwbGF5LCAmdmFsLCAmc3RhcnQsIGVuZHBvcywgUW5pbCk7CisgICAgICAgICAgLyog
Rm9yIDpyZWxhdGl2ZS13aWR0aCwgd2UgbmVlZCB0byBtdWx0aXBseSBieSB0aGUgY29sdW1uCisg
ICAgICAgICAgICAgd2lkdGggb2YgdGhlIGNoYXJhY3RlciBhdCBQT1MsIGlmIGl0IGlzIGdyZWF0
ZXIgdGhhbiAxLiAqLworICAgICAgICAgIGlmICghTklMUCAobWNfcGxpc3RfZ2V0IChwbGlzdCwg
UUNyZWxhdGl2ZV93aWR0aCkpCisgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChjdXJyZW50
X2J1ZmZlciwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGludCBiLCB3ZDsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcCA9
IEJZVEVfUE9TX0FERFIgKENIQVJfVE9fQllURSAocG9zKSk7CisgICAgICAgICAgICAgIE1DX01V
TFRJQllURV9CWVRFU19XSURUSCAocCwgYnVmZmVyX2Rpc3BsYXlfdGFibGUgKCksIGIsIHdkKTsK
KyAgICAgICAgICAgICAgd2lkdGggKj0gd2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgcmV0
dXJuIHdpZHRoOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKKy8qIFRyeSB0
byBjb21wb3NlIHRoZSBjaGFyYWN0ZXJzIGF0IENIQVJQT1MgYWNjb3JkaW5nIHRvIGNvbXBvc2l0
aW9uCisgICBydWxlIFJVTEUgKFtQQVRURVJOIFBSRVYtQ0hBUlMgRlVOQ10pLiAgTElNSVQgbGlt
aXRzIHRoZSBjaGFyYWN0ZXJzCisgICB0byBjb21wb3NlLiAgU1RSSU5HLCBpZiBub3QgbmlsLCBp
cyBhIHRhcmdldCBzdHJpbmcuICBXSU4gaXMgYQorICAgd2luZG93IHdoZXJlIHRoZSBjaGFyYWN0
ZXJzIGFyZSBiZWluZyBkaXNwbGF5ZWQuICBJZiBjaGFyYWN0ZXJzIGFyZQorICAgc3VjY2Vzc2Z1
bGx5IGNvbXBvc2VkLCByZXR1cm4gdGhlIGNvbXBvc2l0aW9uIGFzIGEgZ2x5cGgtc3RyaW5nCisg
ICBvYmplY3QuICBPdGhlcndpc2UgcmV0dXJuIG5pbC4gICovCitzdGF0aWMgTGlzcF9PYmplY3QK
K21jX2F1dG9jbXBfY2hhcnMgKExpc3BfT2JqZWN0IHJ1bGUsIHB0cmRpZmZfdCBjaGFycG9zLCBw
dHJkaWZmX3QgYnl0ZXBvcywKKyAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBsaW1pdCwgc3Ry
dWN0IHdpbmRvdyAqd2luLCBzdHJ1Y3QgZmFjZSAqZmFjZSwKKyAgICAgICAgICAgICAgICAgIExp
c3BfT2JqZWN0IHN0cmluZykKK3sKKyAgcHRyZGlmZl90IGNvdW50ID0gU1BFQ1BETF9JTkRFWCAo
KTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3aW4tPmZyYW1lKTsKKyAgTGlzcF9PYmpl
Y3QgcG9zID0gbWFrZV9maXhudW0gKGNoYXJwb3MpOworICBwdHJkaWZmX3QgdG87CisgIHB0cmRp
ZmZfdCBwdCA9IFBULCBwdF9ieXRlID0gUFRfQllURTsKKyAgTGlzcF9PYmplY3QgcmUsIGZvbnRf
b2JqZWN0LCBsZ3N0cmluZzsKKyAgcHRyZGlmZl90IGxlbjsKKyAgcmVjb3JkX3Vud2luZF9zYXZl
X21hdGNoX2RhdGEgKCk7CisgIHJlID0gQVJFRiAocnVsZSwgMCk7CisgIGlmIChOSUxQIChyZSkp
CisgICAgbGVuID0gMTsKKyAgZWxzZSBpZiAoISBTVFJJTkdQIChyZSkpCisgICAgcmV0dXJuIHVu
YmluZF90byAoY291bnQsIFFuaWwpOworICBlbHNlIGlmICgobGVuID0gZmFzdF9sb29raW5nX2F0
IChyZSwgY2hhcnBvcywgYnl0ZXBvcywgbGltaXQsIC0xLCBzdHJpbmcpKQorICAgICAgICAgICA+
IDApCisgICAgeworICAgICAgaWYgKE5JTFAgKHN0cmluZykpCisgICAgICAgIGxlbiA9IEJZVEVf
VE9fQ0hBUiAoYnl0ZXBvcyArIGxlbikgLSBjaGFycG9zOworICAgICAgZWxzZQorICAgICAgICBs
ZW4gPSBzdHJpbmdfYnl0ZV90b19jaGFyIChzdHJpbmcsIGJ5dGVwb3MgKyBsZW4pIC0gY2hhcnBv
czsKKyAgICB9CisgIGlmIChsZW4gPD0gMCkKKyAgICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwg
UW5pbCk7CisgIHRvID0gbGltaXQgPSBjaGFycG9zICsgbGVuOworI2lmZGVmIEhBVkVfV0lORE9X
X1NZU1RFTQorICBpZiAoRlJBTUVfV0lORE9XX1AgKGYpKQorICAgIHsKKyAgICAgIGZvbnRfb2Jq
ZWN0ID0gZm9udF9yYW5nZSAoY2hhcnBvcywgYnl0ZXBvcywgJnRvLCB3aW4sIGZhY2UsIHN0cmlu
Zyk7CisgICAgICBpZiAoISBGT05UX09CSkVDVF9QIChmb250X29iamVjdCkKKyAgICAgICAgICB8
fCAoISBOSUxQIChyZSkKKyAgICAgICAgICAgICAgJiYgdG8gPCBsaW1pdAorICAgICAgICAgICAg
ICAmJiAoZmFzdF9sb29raW5nX2F0IChyZSwgY2hhcnBvcywgYnl0ZXBvcywgdG8sIC0xLCBzdHJp
bmcpIDw9IDApKSkKKyAgICAgICAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIFFuaWwpOworICAg
IH0KKyAgZWxzZQorI2VuZGlmICAgICAgICAvKiBub3QgSEFWRV9XSU5ET1dfU1lTVEVNICovCisg
ICAgZm9udF9vYmplY3QgPSB3aW4tPmZyYW1lOworICBsZ3N0cmluZyA9IEZjb21wb3NpdGlvbl9n
ZXRfZ3N0cmluZyAocG9zLCBtYWtlX2ZpeG51bSAodG8pLCBmb250X29iamVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgIGlmIChOSUxQIChMR1NU
UklOR19JRCAobGdzdHJpbmcpKSkKKyAgICB7CisgICAgICAvKiBTYXZlIHBvaW50IGFzIG1hcmtl
ciBiZWZvcmUgY2FsbGluZyBvdXQgdG8gbGlzcC4gICovCisgICAgICBpZiAoTklMUCAoc3RyaW5n
KSkKKyAgICAgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChyZXN0b3JlX3BvaW50X3Vud2luZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9tYXJrZXIgKGN1cnJlbnRfYnVm
ZmVyLCBwdCwgcHRfYnl0ZSkpOworICAgICAgbGdzdHJpbmcgPSBzYWZlX2NhbGwgKDYsIFZhdXRv
X2NvbXBvc2l0aW9uX2Z1bmN0aW9uLCBBUkVGIChydWxlLCAyKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MsIG1ha2VfZml4bnVtICh0byksIGZvbnRfb2JqZWN0LCBzdHJpbmcpOwor
ICAgIH0KKyAgcmV0dXJuIHVuYmluZF90byAoY291bnQsIGxnc3RyaW5nKTsKK30KKworLyogQ2hl
Y2sgaWYgdGhlIGNoYXJhY3RlciBhdCBDSEFSUE9TIChhbmQgQllURVBPUykgaXMgY29tcG9zZWQK
KyAgIChwb3NzaWJseSB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycykgb24gd2luZG93IFcu
ICBFTkRQT1MgbGltaXRzCisgICBjaGFyYWN0ZXJzIHRvIGJlIGNvbXBvc2VkLiAgRkFDRSwgaWYg
bm9uLU5VTEwsIGlzIGEgYmFzZSBmYWNlIG9mCisgICB0aGUgY2hhcmFjdGVyLiAgSWYgU1RSSU5H
IGlzIG5vdCBuaWwsIGl0IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCisgICBjaGFyYWN0ZXIg
dG8gY2hlY2ssIGFuZCBDSEFSUE9TIGFuZCBCWVRFUE9TIGFyZSBpbmRpY2VzIGluIHRoZQorICAg
c3RyaW5nLiAgSW4gdGhhdCBjYXNlLCBGQUNFIG11c3Qgbm90IGJlIE5VTEwuCisgICBJZiB0aGUg
Y2hhcmFjdGVyIGlzIGNvbXBvc2VkLCBzZXR1cCBtZW1iZXJzIG9mIENNUF9JVCAoaWQsIG5nbHlw
aHMsCisgICBmcm9tLCB0bywgcmV2ZXJzZWRfcCksIGFuZCByZXR1cm4gdHJ1ZS4gIE90aGVyd2lz
ZSwgdXBkYXRlCisgICBDTVBfSVQtPnN0b3BfcG9zLCBhbmQgcmV0dXJuIGZhbHNlLiAgKi8KK2Jv
b2wKK21jX2NvbXBvc2l0aW9uX3Jlc2VhdF9pdCAoc3RydWN0IGNvbXBvc2l0aW9uX2l0ICpjbXBf
aXQsIHB0cmRpZmZfdCBjaGFycG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZm
X3QgYnl0ZXBvcywgcHRyZGlmZl90IGVuZHBvcywgc3RydWN0IHdpbmRvdyAqdywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmZhY2UsIExpc3BfT2JqZWN0IHN0cmluZykK
K3sKKyAgaWYgKGNtcF9pdC0+Y2ggPT0gLTIpCisgICAgeworICAgICAgY29tcG9zaXRpb25fY29t
cHV0ZV9zdG9wX3BvcyAoY21wX2l0LCBjaGFycG9zLCBieXRlcG9zLCBlbmRwb3MsIHN0cmluZyk7
CisgICAgICBpZiAoY21wX2l0LT5jaCA9PSAtMiB8fCBjbXBfaXQtPnN0b3BfcG9zICE9IGNoYXJw
b3MpCisgICAgICAgIC8qIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBjb21wb3NlZC4gICov
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgaWYgKGVuZHBvcyA8IDApCisgICAgZW5kcG9z
ID0gTklMUCAoc3RyaW5nKSA/IEJFR1YgOiAwOworICBpZiAoY21wX2l0LT5jaCA8IDApCisgICAg
eworICAgICAgLyogV2UgYXJlIGxvb2tpbmcgYXQgYSBzdGF0aWMgY29tcG9zaXRpb24uICAqLwor
ICAgICAgcHRyZGlmZl90IHN0YXJ0LCBlbmQ7CisgICAgICBMaXNwX09iamVjdCBwcm9wOworICAg
ICAgZmluZF9jb21wb3NpdGlvbiAoY2hhcnBvcywgLTEsICZzdGFydCwgJmVuZCwgJnByb3AsIHN0
cmluZyk7CisgICAgICBjbXBfaXQtPmlkID0gZ2V0X2NvbXBvc2l0aW9uX2lkIChjaGFycG9zLCBi
eXRlcG9zLCBlbmQgLSBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3AsIHN0cmluZyk7CisgICAgICBpZiAoY21wX2l0LT5pZCA8IDApCisgICAgICAgIGdv
dG8gbm9fY29tcG9zaXRpb247CisgICAgICBjbXBfaXQtPm5jaGFycyA9IGVuZCAtIHN0YXJ0Owor
ICAgICAgY21wX2l0LT5uZ2x5cGhzID0gY29tcG9zaXRpb25fdGFibGVbY21wX2l0LT5pZF0tPmds
eXBoX2xlbjsKKyAgICB9CisgIGVsc2UgaWYgKHcpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qg
bGdzdHJpbmcgPSBRbmlsOworICAgICAgTGlzcF9PYmplY3QgdmFsLCBlbHQ7CisgICAgICBwdHJk
aWZmX3QgaTsKKyAgICAgIHZhbCA9IENIQVJfVEFCTEVfUkVGIChWY29tcG9zaXRpb25fZnVuY3Rp
b25fdGFibGUsIGNtcF9pdC0+Y2gpOworICAgICAgZm9yIChpID0gMDsgaSA8IGNtcF9pdC0+cnVs
ZV9pZHg7IGkrKywgdmFsID0gWENEUiAodmFsKSk7CisgICAgICBpZiAoY2hhcnBvcyA8IGVuZHBv
cykKKyAgICAgICAgeworICAgICAgICAgIGZvciAoOyBDT05TUCAodmFsKTsgdmFsID0gWENEUiAo
dmFsKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZWx0ID0gWENBUiAodmFsKTsKKyAg
ICAgICAgICAgICAgaWYgKCEgVkVDVE9SUCAoZWx0KSB8fCBBU0laRSAoZWx0KSAhPSAzCisgICAg
ICAgICAgICAgICAgICB8fCAhIElOVEVHRVJQIChBUkVGIChlbHQsIDEpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgaWYgKFhGSVhOQVQgKEFSRUYgKGVsdCwgMSkp
ICE9IGNtcF9pdC0+bG9va2JhY2spCisgICAgICAgICAgICAgICAgZ290byBub19jb21wb3NpdGlv
bjsKKyAgICAgICAgICAgICAgbGdzdHJpbmcgPSBtY19hdXRvY21wX2NoYXJzIChlbHQsIGNoYXJw
b3MsIGJ5dGVwb3MsIGVuZHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3LCBmYWNlLCBzdHJpbmcpOworICAgICAgICAgICAgICBpZiAoY29tcG9zaXRpb25fZ3N0
cmluZ19wIChsZ3N0cmluZykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGxnc3RyaW5nID0gUW5pbDsKKyAgICAgICAgICAgICAgLyogQ29tcG9zaXRpb24gZmFpbGVkIHBl
cmhhcHMgYmVjYXVzZSB0aGUgZm9udCBkb2Vzbid0CisgICAgICAgICAgICAgICAgIHN1cHBvcnQg
c3VmZmljaWVudCByYW5nZSBvZiBjaGFyYWN0ZXJzLiAgVHJ5IHRoZQorICAgICAgICAgICAgICAg
ICBvdGhlciBjb21wb3NpdGlvbiBydWxlcyBpZiBhbnkuICAqLworICAgICAgICAgICAgfQorICAg
ICAgICAgIGNtcF9pdC0+cmV2ZXJzZWRfcCA9IDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgIHB0cmRpZmZfdCBjcG9zID0gY2hhcnBvcywgYnBvcyA9IGJ5dGVw
b3M7CisgICAgICAgICAgY21wX2l0LT5yZXZlcnNlZF9wID0gMTsKKyAgICAgICAgICBlbHQgPSBY
Q0FSICh2YWwpOworICAgICAgICAgIGlmIChjbXBfaXQtPmxvb2tiYWNrID4gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY3BvcyA9IGNoYXJwb3MgLSBjbXBfaXQtPmxvb2tiYWNrOwor
ICAgICAgICAgICAgICBpZiAoU1RSSU5HUCAoc3RyaW5nKSkKKyAgICAgICAgICAgICAgICBicG9z
ID0gc3RyaW5nX2NoYXJfdG9fYnl0ZSAoc3RyaW5nLCBjcG9zKTsKKyAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGJwb3MgPSBDSEFSX1RPX0JZVEUgKGNwb3MpOworICAgICAgICAg
ICAgfQorICAgICAgICAgIGxnc3RyaW5nID0gbWNfYXV0b2NtcF9jaGFycyAoZWx0LCBjcG9zLCBi
cG9zLCBjaGFycG9zICsgMSwgdywgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmluZyk7CisgICAgICAgICAgaWYgKCEgY29tcG9zaXRpb25fZ3N0cmluZ19wIChs
Z3N0cmluZykKKyAgICAgICAgICAgICAgfHwgY3BvcyArIExHU1RSSU5HX0NIQVJfTEVOIChsZ3N0
cmluZykgLSAxICE9IGNoYXJwb3MpCisgICAgICAgICAgICAvKiBDb21wb3NpdGlvbiBmYWlsZWQg
b3IgZGlkbid0IGNvdmVyIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICBjaGFyYWN0ZXIuICAq
LworICAgICAgICAgICAgZ290byBub19jb21wb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgaWYg
KE5JTFAgKGxnc3RyaW5nKSkKKyAgICAgICAgZ290byBub19jb21wb3NpdGlvbjsKKyAgICAgIGlm
IChOSUxQIChMR1NUUklOR19JRCAobGdzdHJpbmcpKSkKKyAgICAgICAgbGdzdHJpbmcgPSBjb21w
b3NpdGlvbl9nc3RyaW5nX3B1dF9jYWNoZSAobGdzdHJpbmcsIC0xKTsKKyAgICAgIGNtcF9pdC0+
aWQgPSBYRklYTlVNIChMR1NUUklOR19JRCAobGdzdHJpbmcpKTsKKyAgICAgIGZvciAoaSA9IDA7
IGkgPCBMR1NUUklOR19HTFlQSF9MRU4gKGxnc3RyaW5nKTsgaSsrKQorICAgICAgICBpZiAoTklM
UCAoTEdTVFJJTkdfR0xZUEggKGxnc3RyaW5nLCBpKSkpCisgICAgICAgICAgYnJlYWs7CisgICAg
ICBjbXBfaXQtPm5nbHlwaHMgPSBpOworICAgICAgY21wX2l0LT5mcm9tID0gMDsKKyAgICAgIGNt
cF9pdC0+dG8gPSBpOworICAgIH0KKyAgZWxzZQorICAgIGdvdG8gbm9fY29tcG9zaXRpb247Cisg
IHJldHVybiAxOworIG5vX2NvbXBvc2l0aW9uOgorICBpZiAoY2hhcnBvcyA9PSBlbmRwb3MpCisg
ICAgcmV0dXJuIDA7CisgIGlmIChjaGFycG9zIDwgZW5kcG9zKQorICAgIHsKKyAgICAgIGNoYXJw
b3MrKzsKKyAgICAgIGlmIChOSUxQIChzdHJpbmcpKQorICAgICAgICBJTkNfUE9TIChieXRlcG9z
KTsKKyAgICAgIGVsc2UKKyAgICAgICAgYnl0ZXBvcyArPSBCWVRFU19CWV9DSEFSX0hFQUQgKCoo
U0RBVEEgKHN0cmluZykgKyBieXRlcG9zKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg
Y2hhcnBvcy0tOworICAgICAgLyogQllURVBPUyBpcyBjYWxjdWxhdGVkIGluIGNvbXBvc2l0aW9u
X2NvbXB1dGVfc3RvcF9wb3MgKi8KKyAgICAgIGJ5dGVwb3MgPSAtMTsKKyAgICB9CisgIGlmIChj
bXBfaXQtPnJldmVyc2VkX3ApCisgICAgZW5kcG9zID0gLTE7CisgIGNvbXBvc2l0aW9uX2NvbXB1
dGVfc3RvcF9wb3MgKGNtcF9pdCwgY2hhcnBvcywgYnl0ZXBvcywgZW5kcG9zLCBzdHJpbmcpOwor
ICByZXR1cm4gMDsKK30KKworLyogU2Nhbm5pbmcgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBj
dXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGJ1ZmZlcgorICAgcG9zaXRpb24gRU5EUE9TIG9yIGF0
IHRoZSBjb2x1bW4gR09BTENPTCBvciBhdCB0aGUgZW5kIG9mIGxpbmUsIHdoaWNoZXZlcgorICAg
Y29tZXMgZmlyc3QuCisgICBSZXR1cm4gdGhlIHJlc3VsdGluZyBidWZmZXIgcG9zaXRpb24gYW5k
IGNvbHVtbiBpbiBFTkRQT1MgYW5kIEdPQUxDT0wuCisgICBQUkVWQ09MIGdldHMgc2V0IHRvIHRo
ZSBjb2x1bW4gb2YgdGhlIHByZXZpb3VzIHBvc2l0aW9uIChpdCdzIGFsd2F5cworICAgc3RyaWN0
bHkgc21hbGxlciB0aGFuIHRoZSBnb2FsIGNvbHVtbikuICovCit2b2lkCittY19zY2FuX2Zvcl9j
b2x1bW4gKHB0cmRpZmZfdCAqZW5kcG9zLCBFTUFDU19JTlQgKmdvYWxjb2wsIHB0cmRpZmZfdCAq
cHJldmNvbCwgcHRyZGlmZl90IHB0KQoreworICBFTUFDU19JTlQgbGFzdF9rbm93bl9jb2x1bW5f
bW9kaWZpZWQgPSAwOworICBwdHJkaWZmX3QgbGFzdF9rbm93bl9jb2x1bW4gPSAwOworICBpbnQg
dGFiX3dpZHRoID0gU0FORV9UQUJfV0lEVEggKGN1cnJlbnRfYnVmZmVyKTsKKyAgYm9vbCBjdGxf
YXJyb3cgPSAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGN0bF9hcnJvdykpOworICBzdHJ1
Y3QgTGlzcF9DaGFyX1RhYmxlICpkcCA9IGJ1ZmZlcl9kaXNwbGF5X3RhYmxlICgpOworICBib29s
IG11bHRpYnl0ZSA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgZW5hYmxlX211bHRpYnl0
ZV9jaGFyYWN0ZXJzKSk7CisgIHN0cnVjdCBjb21wb3NpdGlvbl9pdCBjbXBfaXQ7CisgIExpc3Bf
T2JqZWN0IHdpbmRvdzsKKyAgc3RydWN0IHdpbmRvdyAqdzsKKyAgLyogU3RhcnQgdGhlIHNjYW4g
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGxpbmUgd2l0aCBjb2x1bW4gbnVtYmVyIDAuICovCisg
IHJlZ2lzdGVyIHB0cmRpZmZfdCBjb2wgPSAwLCBwcmV2X2NvbCA9IDA7CisgIEVNQUNTX0lOVCBn
b2FsID0gZ29hbGNvbCA/ICpnb2FsY29sIDogTU9TVF9QT1NJVElWRV9GSVhOVU07CisgIHB0cmRp
ZmZfdCBlbmQgPSBlbmRwb3MgPyAqZW5kcG9zIDogcHQ7CisgIHB0cmRpZmZfdCBzY2FuLCBzY2Fu
X2J5dGUsIG5leHRfYm91bmRhcnk7CisgIHNjYW4gPSBmaW5kX25ld2xpbmUgKHB0LCBDSEFSX1RP
X0JZVEUgKHB0KSwgQkVHViwgQkVHVl9CWVRFLCAtMSwgTlVMTCwgJnNjYW5fYnl0ZSwgMSk7Cisg
IG5leHRfYm91bmRhcnkgPSBzY2FuOworICB3aW5kb3cgPSBGZ2V0X2J1ZmZlcl93aW5kb3cgKEZj
dXJyZW50X2J1ZmZlciAoKSwgUW5pbCk7CisgIHcgPSAhIE5JTFAgKHdpbmRvdykgPyBYV0lORE9X
ICh3aW5kb3cpIDogTlVMTDsKKyAgbWVtc2V0ICgmY21wX2l0LCAwLCBzaXplb2YgY21wX2l0KTsK
KyAgY21wX2l0LmlkID0gLTE7CisgIGNvbXBvc2l0aW9uX2NvbXB1dGVfc3RvcF9wb3MgKCZjbXBf
aXQsIHNjYW4sIHNjYW5fYnl0ZSwgZW5kLCBRbmlsKTsKKyAgLyogU2NhbiBmb3J3YXJkIHRvIHRo
ZSB0YXJnZXQgcG9zaXRpb24uICovCisgIHdoaWxlIChzY2FuIDwgZW5kKQorICAgIHsKKyAgICAg
IGludCBjOworICAgICAgLyogT2NjYXNpb25hbGx5IHdlIG1heSBuZWVkIHRvIHNraXAgaW52aXNp
YmxlIHRleHQuICovCisgICAgICB3aGlsZSAoc2NhbiA9PSBuZXh0X2JvdW5kYXJ5KQorICAgICAg
ICB7CisgICAgICAgICAgcHRyZGlmZl90IG9sZF9zY2FuID0gc2NhbjsKKyAgICAgICAgICAvKiBU
aGlzIHVwZGF0ZXMgTkVYVF9CT1VOREFSWSB0byB0aGUgbmV4dCBwbGFjZQorICAgICAgICAgICAg
IHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gc2tpcCBtb3JlIGludmlzaWJsZSB0ZXh0LiAqLworICAg
ICAgICAgIHNjYW4gPSBza2lwX2ludmlzaWJsZSAoc2NhbiwgJm5leHRfYm91bmRhcnksIGVuZCwg
UW5pbCk7CisgICAgICAgICAgaWYgKHNjYW4gIT0gb2xkX3NjYW4pCisgICAgICAgICAgICBzY2Fu
X2J5dGUgPSBDSEFSX1RPX0JZVEUgKHNjYW4pOworICAgICAgICAgIGlmIChzY2FuID49IGVuZCkK
KyAgICAgICAgICAgIGdvdG8gZW5kbG9vcDsKKyAgICAgICAgfQorICAgICAgLyogVGVzdCByZWFj
aGluZyB0aGUgZ29hbCBjb2x1bW4uICBXZSBkbyB0aGlzIGFmdGVyIHNraXBwaW5nCisgICBpbnZp
c2libGUgY2hhcmFjdGVycywgc28gdGhhdCB3ZSBwdXQgcG9pbnQgYmVmb3JlIHRoZQorICAgY2hh
cmFjdGVyIG9uIHdoaWNoIHRoZSBjdXJzb3Igd2lsbCBhcHBlYXIuICovCisgICAgICBpZiAoY29s
ID49IGdvYWwpCisgICAgICAgIGJyZWFrOworICAgICAgcHJldl9jb2wgPSBjb2w7CisgICAgICB7
IC8qIENoZWNrIGRpc3BsYXkgcHJvcGVydHkuICovCisgICAgICAgIHB0cmRpZmZfdCBlbmRwOwor
ICAgICAgICBpbnQgd2lkdGggPSBtY19jaGVja19kaXNwbGF5X3dpZHRoIChzY2FuLCBjb2wsICZl
bmRwKTsKKyAgICAgICAgaWYgKHdpZHRoID49IDApCisgICAgICAgICAgeworICAgICAgICAgICAg
Y29sICs9IHdpZHRoOworICAgICAgICAgICAgaWYgKGVuZHAgPiBzY2FuKSAvKiBBdm9pZCBpbmZp
bml0ZSBsb29wcyB3aXRoIDAtd2lkdGggb3ZlcmxheXMuICovCisgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzY2FuID0gZW5kcDsKKyAgICAgICAgICAgICAgICBzY2FuX2J5dGUgPSBD
SEFSX1RPX0JZVEUgKHNjYW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgLyogQ2hlY2sgY29tcG9zaXRpb24g
c2VxdWVuY2UuICovCisgICAgICBpZiAoY21wX2l0LmlkID49IDAKKyAgICAgICAgICB8fCAoc2Nh
biA9PSBjbXBfaXQuc3RvcF9wb3MKKyAgICAgICAgICAgICAgJiYgbWNfY29tcG9zaXRpb25fcmVz
ZWF0X2l0ICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIGVuZCwgdywgTlVMTCwgUW5pbCkpKQor
ICAgICAgICBjb21wb3NpdGlvbl91cGRhdGVfaXQgKCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0ZSwg
UW5pbCk7CisgICAgICBpZiAoY21wX2l0LmlkID49IDApCisgICAgICAgIHsKKyAgICAgICAgICBz
Y2FuICs9IGNtcF9pdC5uY2hhcnM7CisgICAgICAgICAgc2Nhbl9ieXRlICs9IGNtcF9pdC5uYnl0
ZXM7CisgICAgICAgICAgaWYgKHNjYW4gPD0gZW5kKQorICAgICAgICAgICAgY29sICs9IGNtcF9p
dC53aWR0aDsKKyAgICAgICAgICBpZiAoY21wX2l0LnRvID09IGNtcF9pdC5uZ2x5cGhzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjbXBfaXQuaWQgPSAtMTsKKyAgICAgICAgICAgICAg
Y29tcG9zaXRpb25fY29tcHV0ZV9zdG9wX3BvcyAoJmNtcF9pdCwgc2Nhbiwgc2Nhbl9ieXRlLCBl
bmQsIFFuaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICBjbXBfaXQuZnJvbSA9IGNtcF9pdC50bzsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgYyA9IEZFVENIX0JZVEUgKHNjYW5fYnl0ZSk7CisgICAgICAvKiBTZWUgaWYgdGhl
cmUgaXMgYSBkaXNwbGF5IHRhYmxlIGFuZCBpdCByZWxhdGVzIHRvIHRoaXMgY2hhcmFjdGVyLiAq
LworICAgICAgaWYgKGRwICE9IDAKKyAgICAgICAgICAmJiAhIChtdWx0aWJ5dGUgJiYgTEVBRElO
R19DT0RFX1AgKGMpKQorICAgICAgICAgICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1IgKGRw
LCBjKSkpCisgICAgICAgIHsKKyAgICAgICAgICBMaXNwX09iamVjdCBjaGFydmVjOworICAgICAg
ICAgIHB0cmRpZmZfdCBpLCBuOworICAgICAgICAgIC8qIFRoaXMgY2hhcmFjdGVyIGlzIGRpc3Bs
YXllZCB1c2luZyBhIHZlY3RvciBvZiBnbHlwaHMuCisgICAgICAgICAgICAgVXBkYXRlIHRoZSBj
b2x1bW4vcG9zaXRpb24gYmFzZWQgb24gdGhvc2UgZ2x5cGhzLiAqLworICAgICAgICAgIGNoYXJ2
ZWMgPSBESVNQX0NIQVJfVkVDVE9SIChkcCwgYyk7CisgICAgICAgICAgbiA9IEFTSVpFIChjaGFy
dmVjKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIHRoZSBzYW1lIGFzCisgICAg
ICAgICAgICAgIG5leHRfZWxlbWVudF9mcm9tX2Rpc3BsYXlfdmVjdG9yIGRvZXMgaXQuICovCisg
ICAgICAgICAgICAgIExpc3BfT2JqZWN0IGVudHJ5ID0gQVJFRiAoY2hhcnZlYywgaSk7CisgICAg
ICAgICAgICAgIGlmIChHTFlQSF9DT0RFX1AgKGVudHJ5KSkKKyAgICAgICAgICAgICAgICBjID0g
R0xZUEhfQ09ERV9DSEFSIChlbnRyeSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBjID0gJyAnOworICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQorICAgICAgICAgICAg
ICAgIGdvdG8gZW5kbG9vcDsKKyAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xyJyAmJiBFUSAoQlZB
UiAoY3VycmVudF9idWZmZXIsIHNlbGVjdGl2ZV9kaXNwbGF5KSwgUXQpKQorICAgICAgICAgICAg
ICAgIGdvdG8gZW5kbG9vcDsKKyAgICAgICAgICAgICAgaWYgKGMgPT0gJ1x0JykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb2wgKz0gdGFiX3dpZHRoOworICAgICAgICAg
ICAgICAgICAgY29sID0gY29sIC8gdGFiX3dpZHRoICogdGFiX3dpZHRoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICArK2NvbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAg
ICAgICAgLyogVGhlIGRpc3BsYXkgdGFibGUgZG9lc24ndCBhZmZlY3QgdGhpcyBjaGFyYWN0ZXI7
CisgICAgICAgICAgICAgICBpdCBkaXNwbGF5cyBhcyBpdHNlbGYuICovCisgICAgICAgICAgICBp
ZiAoYyA9PSAnXG4nKQorICAgICAgICAgICAgICBnb3RvIGVuZGxvb3A7CisgICAgICAgICAgICBp
ZiAoYyA9PSAnXHInICYmIEVRIChCVkFSIChjdXJyZW50X2J1ZmZlciwgc2VsZWN0aXZlX2Rpc3Bs
YXkpLCBRdCkpCisgICAgICAgICAgICAgIGdvdG8gZW5kbG9vcDsKKyAgICAgICAgICAgIGlmIChj
ID09ICdcdCcpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb2wgKz0gdGFiX3dp
ZHRoOworICAgICAgICAgICAgICAgIGNvbCA9IGNvbCAvIHRhYl93aWR0aCAqIHRhYl93aWR0aDsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmIChtdWx0aWJ5dGUgJiYgTEVB
RElOR19DT0RFX1AgKGMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8q
IFN0YXJ0IG9mIG11bHRpLWJ5dGUgZm9ybS4gKi8KKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKnB0cjsKKyAgICAgICAgICAgICAgICAgIGludCBieXRlcywgd2lkdGg7CisgICAgICAg
ICAgICAgICAgICBwdHIgPSBCWVRFX1BPU19BRERSIChzY2FuX2J5dGUpOworICAgICAgICAgICAg
ICAgICAgTUNfTVVMVElCWVRFX0JZVEVTX1dJRFRIIChwdHIsIGRwLCBieXRlcywgd2lkdGgpOwor
ICAgICAgICAgICAgICAgICAgLyogU3VidHJhY3Qgb25lIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBp
bmNyZW1lbnQKKyAgICAgICAgICAgICAgICAgIHRoYXQgaXMgZ29pbmcgdG8gaGFwcGVuIGJlbG93
LiAqLworICAgICAgICAgICAgICAgICAgc2Nhbl9ieXRlICs9IGJ5dGVzIC0gMTsKKyAgICAgICAg
ICAgICAgICAgIGNvbCArPSB3aWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY3RsX2Fycm93ICYmIChjIDwgMDQwIHx8IGMgPT0gMDE3NykpCisgICAgICAg
ICAgICAgICAgICBjb2wgKz0gMjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPCAwNDAg
fHwgYyA+PSAwMTc3KQorICAgICAgICAgICAgICAgICAgICBjb2wgKz0gNDsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNvbCsrOworICAgICAgICAgIH0K
KyAgICAgIHNjYW4rKzsKKyAgICAgIHNjYW5fYnl0ZSsrOworICAgIH0KKyBlbmRsb29wOgorICBs
YXN0X2tub3duX2NvbHVtbiA9IGNvbDsKKyAgbGFzdF9rbm93bl9jb2x1bW5fcG9pbnQgPSBwdDsK
KyAgbGFzdF9rbm93bl9jb2x1bW5fbW9kaWZpZWQgPSBNT0RJRkY7CisgIGlmIChnb2FsY29sKQor
ICAgICpnb2FsY29sID0gY29sOworICBpZiAoZW5kcG9zKQorICAgICplbmRwb3MgPSBzY2FuOwor
ICBpZiAocHJldmNvbCkKKyAgICAqcHJldmNvbCA9IHByZXZfY29sOworfQorCitwdHJkaWZmX3QK
K21jX2N1cnJlbnRfY29sdW1uIChzdHJ1Y3Qgd2luZG93ICp3LCBwdHJkaWZmX3QgcHQpCit7Cisg
IC8qIGBidWZfY2hhcnBvc190b19ieXRlcG9zJzogIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9IGNo
YXJwb3MgJiYgY2hhcnBvcyA8PSBCVUZfWiAoYikpOyAqLworICBzdHJ1Y3QgYnVmZmVyICpiID0g
WEJVRkZFUiAody0+Y29udGVudHMpOworICBzdHJ1Y3QgYnVmZmVyICpvbGRfYnVmZmVyID0gTlVM
TDsKKyAgaWYgKGIgIT0gY3VycmVudF9idWZmZXIpCisgICAgeworICAgICAgb2xkX2J1ZmZlciA9
IGN1cnJlbnRfYnVmZmVyOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYik7CisgICAgfQor
ICBib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAoYikgPD0gcHQgJiYgcHQgPD0gQlVGX1ogKGIp
KSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2gpCisgICAgeworICAgICAgaWYgKG9s
ZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICBFTUFDU19JTlQgbGFzdF9rbm93bl9jb2x1bW5fbW9kaWZp
ZWQgPSAwOworICBwdHJkaWZmX3QgbGFzdF9rbm93bl9jb2x1bW4gPSAwOworICBwdHJkaWZmX3Qg
Y29sOworICB1bnNpZ25lZCBjaGFyICpwdHIsICpzdG9wOworICBib29sIHRhYl9zZWVuOworICBw
dHJkaWZmX3QgcG9zdF90YWI7CisgIGludCBjOworICBpbnQgdGFiX3dpZHRoID0gU0FORV9UQUJf
V0lEVEggKGN1cnJlbnRfYnVmZmVyKTsKKyAgYm9vbCBjdGxfYXJyb3cgPSAhTklMUCAoQlZBUiAo
Y3VycmVudF9idWZmZXIsIGN0bF9hcnJvdykpOworICBzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICpk
cCA9IGJ1ZmZlcl9kaXNwbGF5X3RhYmxlICgpOworICBpZiAocHQgPT0gbGFzdF9rbm93bl9jb2x1
bW5fcG9pbnQKKyAgICAgICYmIE1PRElGRiA9PSBsYXN0X2tub3duX2NvbHVtbl9tb2RpZmllZCkK
KyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5h
bCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm4gbGFzdF9rbm93bl9jb2x1bW47CisgICAgfQor
ICAvKiBJZiB0aGUgYnVmZmVyIGhhcyBvdmVybGF5cywgdGV4dCBwcm9wZXJ0aWVzLAorICAgICBv
ciBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdXNlIGEgbW9yZSBnZW5lcmFsIGFsZ29yaXRobS4gKi8K
KyAgaWYgKGJ1ZmZlcl9pbnRlcnZhbHMgKGN1cnJlbnRfYnVmZmVyKQorICAgICAgfHwgYnVmZmVy
X2hhc19vdmVybGF5cyAoKQorICAgICAgfHwgWiAhPSBaX0JZVEUpCisgICAgeworICAgICAgRU1B
Q1NfSU5UIGNvbCA9IE1PU1RfUE9TSVRJVkVfRklYTlVNOworICAgICAgbWNfc2Nhbl9mb3JfY29s
dW1uICgmcHQsICZjb2wsIE5VTEwsIHB0KTsKKyAgICAgIHsKKyAgICAgICAgaWYgKG9sZF9idWZm
ZXIpCisgICAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICAg
IHJldHVybiBjb2w7CisgICAgICB9CisgICAgfQorICAvKiBTY2FuIGJhY2t3YXJkcyBmcm9tIHBv
aW50IHRvIHRoZSBwcmV2aW91cyBuZXdsaW5lLAorICAgICBjb3VudGluZyB3aWR0aC4gIFRhYiBj
aGFyYWN0ZXJzIGFyZSB0aGUgb25seSBjb21wbGljYXRlZCBjYXNlLiAqLworICAvKiBNYWtlIGEg
cG9pbnRlciBmb3IgZGVjcmVtZW50aW5nIHRocm91Z2ggdGhlIGNoYXJzIGJlZm9yZSBwb2ludC4g
Ki8KKyAgcHRyID0gQllURV9QT1NfQUREUiAoQ0hBUl9UT19CWVRFIChwdCkgLSAxKSArIDE7Cisg
IC8qIE1ha2UgYSBwb2ludGVyIHRvIHdoZXJlIGNvbnNlY3V0aXZlIGNoYXJzIGxlYXZlIG9mZiwK
KyAgICAgZ29pbmcgYmFja3dhcmRzIGZyb20gcG9pbnQuICovCisgIGlmIChwdCA9PSBCRUdWKQor
ICAgIHN0b3AgPSBwdHI7CisgICAgZWxzZSBpZiAocHQgPD0gR1BUIHx8IEJFR1YgPiBHUFQpCisg
ICAgICBzdG9wID0gQkVHVl9BRERSOworICAgICAgZWxzZQorICAgICAgICBzdG9wID0gR0FQX0VO
RF9BRERSOworICBjb2wgPSAwLCB0YWJfc2VlbiA9IDAsIHBvc3RfdGFiID0gMDsKKyAgd2hpbGUg
KDEpCisgICAgeworICAgICAgcHRyZGlmZl90IGksIG47CisgICAgICBMaXNwX09iamVjdCBjaGFy
dmVjOworICAgICAgaWYgKHB0ciA9PSBzdG9wKQorICAgICAgICB7CisgICAgICAgICAgLyogV2Ug
c3RvcHBlZCBlaXRoZXIgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcgorICAgICAgICAg
ICAgIG9yIGZvciB0aGUgZ2FwLiAqLworICAgICAgICAgIGlmIChwdHIgPT0gQkVHVl9BRERSKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLyogSXQgd2FzIHRoZSBnYXAuICBKdW1wIGJh
Y2sgb3ZlciBpdC4gKi8KKyAgICAgICAgICBzdG9wID0gQkVHVl9BRERSOworICAgICAgICAgIHB0
ciA9IEdQVF9BRERSOworICAgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhhdCBicmluZ3MgdXMg
dG8gYmVnaW5uaW5nIG9mIGJ1ZmZlci4gKi8KKyAgICAgICAgICBpZiAoQkVHViA+PSBHUFQpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYyA9ICotLXB0cjsKKyAgICAgIGlm
IChkcCAmJiBWRUNUT1JQIChESVNQX0NIQVJfVkVDVE9SIChkcCwgYykpKQorICAgICAgICB7Cisg
ICAgICAgICAgY2hhcnZlYyA9IERJU1BfQ0hBUl9WRUNUT1IgKGRwLCBjKTsKKyAgICAgICAgICBu
ID0gQVNJWkUgKGNoYXJ2ZWMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7
CisgICAgICAgICAgICBjaGFydmVjID0gUW5pbDsKKyAgICAgICAgICAgIG4gPSAxOworICAgICAg
ICAgIH0KKyAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgeworICAg
ICAgICAgIGlmIChWRUNUT1JQIChjaGFydmVjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgLyogVGhpcyBzaG91bGQgYmUgaGFuZGxlZCB0aGUgc2FtZSBhcworICAgICAgICAgICBuZXh0
X2VsZW1lbnRfZnJvbV9kaXNwbGF5X3ZlY3RvciBkb2VzIGl0LiAqLworICAgICAgICAgICAgICBM
aXNwX09iamVjdCBlbnRyeSA9IEFSRUYgKGNoYXJ2ZWMsIGkpOworICAgICAgICAgICAgICBpZiAo
R0xZUEhfQ09ERV9QIChlbnRyeSkpCisgICAgICAgICAgICAgICAgYyA9IEdMWVBIX0NPREVfQ0hB
UiAoZW50cnkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGMgPSAn
ICc7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGMgPj0gMDQwICYmIGMgPCAwMTc3KQor
ICAgICAgICAgICAgY29sKys7CisgICAgICAgICAgICBlbHNlIGlmIChjID09ICdcbicKKyAgICAg
ICAgICAgICAgICAgICAgIHx8IChjID09ICdccicKKyAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBFUSAoQlZBUiAoY3VycmVudF9idWZmZXIsIHNlbGVjdGl2ZV9kaXNwbGF5KSwgUXQpKSkKKyAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgICAgIGdv
dG8gc3RhcnRfb2ZfbGluZV9mb3VuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBl
bHNlIGlmIChjID09ICdcdCcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
aWYgKHRhYl9zZWVuKQorICAgICAgICAgICAgICAgICAgICBjb2wgPSAoKGNvbCArIHRhYl93aWR0
aCkgLyB0YWJfd2lkdGgpICogdGFiX3dpZHRoOworICAgICAgICAgICAgICAgICAgcG9zdF90YWIg
Kz0gY29sOworICAgICAgICAgICAgICAgICAgY29sID0gMDsKKyAgICAgICAgICAgICAgICAgIHRh
Yl9zZWVuID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
VkVDVE9SUCAoY2hhcnZlYykpCisgICAgICAgICAgICAgICAgICAvKiBXaXRoIGEgZGlzcGxheSB0
YWJsZSBlbnRyeSwgQyBpcyBkaXNwbGF5ZWQgYXMgaXMsIGFuZAorICAgICAgICAgICAgICAgICAg
ICAgbm90IGRpc3BsYXllZCBhcyBcTk5OIG9yIGFzIF5OLiAgSWYgQyBpcyBhIHNpbmdsZS1ieXRl
CisgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIsIGl0IHRha2VzIG9uZSBjb2x1bW4uICBJ
ZiBDIGlzIG11bHRpLWJ5dGUgaW4KKyAgICAgICAgICAgICAgICAgICAgIGEgdW5pYnl0ZSBidWZm
ZXIsIGl0J3MgdHJhbnNsYXRlZCB0byB1bmlieXRlLCBzbyBpdAorICAgICAgICAgICAgICAgICAg
ICAgYWxzbyB0YWtlcyBvbmUgY29sdW1uLiAqLworICAgICAgICAgICAgICAgICAgKytjb2w7Cisg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbCArPSAoY3RsX2Fy
cm93ICYmIGMgPCAwMjAwKSA/IDIgOiA0OworICAgICAgICB9CisgICAgfQorIHN0YXJ0X29mX2xp
bmVfZm91bmQ6CisgIGlmICh0YWJfc2VlbikKKyAgICB7CisgICAgICBjb2wgPSAoKGNvbCArIHRh
Yl93aWR0aCkgLyB0YWJfd2lkdGgpICogdGFiX3dpZHRoOworICAgICAgY29sICs9IHBvc3RfdGFi
OworICAgIH0KKyAgbGFzdF9rbm93bl9jb2x1bW4gPSBjb2w7CisgIGxhc3Rfa25vd25fY29sdW1u
X3BvaW50ID0gcHQ7CisgIGxhc3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gTU9ESUZGOworICBp
ZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAg
cmV0dXJuIGNvbDsKK30KKworREVGVU4gKCJtYy1jdXJyZW50LWNvbHVtbiIsIEZtY19jdXJyZW50
X2NvbHVtbiwgU21jX2N1cnJlbnRfY29sdW1uLCAyLCAyLCAwLAorICAgICAgIGRvYzogLyogUmV0
dXJuIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHBvaW50LiAgQmVnaW5uaW5nIG9mIGxpbmUg
aXMgY29sdW1uIDAuCitUaGlzIGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHRvZ2V0aGVyIHRoZSB3
aWR0aHMgb2YgYWxsIHRoZSBkaXNwbGF5ZWQKK3JlcHJlc2VudGF0aW9ucyBvZiB0aGUgY2hhcmFj
dGVyIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBwcmV2aW91cyBsaW5lCithbmQgcG9pbnQgKGUu
Zy4sIGNvbnRyb2wgY2hhcmFjdGVycyB3aWxsIGhhdmUgYSB3aWR0aCBvZiAyIG9yIDQsIHRhYnMK
K3dpbGwgaGF2ZSBhIHZhcmlhYmxlIHdpZHRoKS4KK0lnbm9yZXMgZmluaXRlIHdpZHRoIG9mIGZy
YW1lLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybgordmFsdWVzIGdy
ZWF0ZXIgdGhhbiAoZnJhbWUtd2lkdGgpLgorV2hldGhlciB0aGUgbGluZSBpcyB2aXNpYmxlIChp
ZiBgc2VsZWN0aXZlLWRpc3BsYXknIGlzIHQpIGhhcyBubyBlZmZlY3Q7Citob3dldmVyLCBeTSBp
cyB0cmVhdGVkIGFzIGVuZCBvZiBsaW5lIHdoZW4gYHNlbGVjdGl2ZS1kaXNwbGF5JyBpcyB0Lgor
VGV4dCB0aGF0IGhhcyBhbiBpbnZpc2libGUgcHJvcGVydHkgaXMgY29uc2lkZXJlZCBhcyBoYXZp
bmcgd2lkdGggMCwgdW5sZXNzCitgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJyBzcGVjaWZpZXMg
dGhhdCBpdCBpcyByZXBsYWNlZCBieSBhbiBlbGxpcHNpcy4gICovKQorICAoTGlzcF9PYmplY3Qg
d2luZG93LCBMaXNwX09iamVjdCBwdCkKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9s
aXZlX3dpbmRvdyAod2luZG93KTsKKyAgTGlzcF9PYmplY3QgdGVtcDsKKyAgWFNFVEZBU1RJTlQg
KHRlbXAsIG1jX2N1cnJlbnRfY29sdW1uICh3LCBYRklYTlVNIChwdCkpKTsKKyAgcmV0dXJuIHRl
bXA7Cit9CisKK3N0YXRpYyB2b2lkCittY19saW5lX251bWJlciAoc3RydWN0IGl0ICppdCkKK3sK
KyAgaWYgKCFCVUZGRVJQIChpdC0+dy0+Y29udGVudHMpKQorICAgIHJldHVybjsKKyAgaWYgKGl0
LT53LT5tY19tYXRyaXguY3Vyc29yc191c2VkW01DX0NBQ0hFXSA9PSAwCisgICAgICAmJiBpdC0+
dy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtDSF9DQUNIRV0gPT0gMAorICAgICAgJiYgaXQtPnct
Pm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbRkNfQ0FDSEVdID09IDAKKyAgICAgICYmIE5JTFAgKEJW
QVIgKFhCVUZGRVIgKGl0LT53LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgJiYgTklMUCAo
QlZBUiAoWEJVRkZFUiAoaXQtPnctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAmJiBO
SUxQIChCVkFSIChYQlVGRkVSIChpdC0+dy0+Y29udGVudHMpLCBmY192aXNpYmxlKSkpCisgICAg
cmV0dXJuOworICBwdHJkaWZmX3QgbGFzdF9saW5lID0gaXQtPmxudW07CisgIHB0cmRpZmZfdCBz
dGFydF9mcm9tLCBieXRlcG9zOworICBwdHJkaWZmX3QgdGhpc19saW5lOworICBib29sIGZpcnN0
X3RpbWUgPSBmYWxzZTsKKyAgcHRyZGlmZl90IGJlZ19ieXRlID0gZGlzcGxheV9saW5lX251bWJl
cnNfd2lkZW4gPyBCRUdfQllURSA6IEJFR1ZfQllURTsKKyAgcHRyZGlmZl90IHpfYnl0ZSA9IGRp
c3BsYXlfbGluZV9udW1iZXJzX3dpZGVuID8gWl9CWVRFIDogWlZfQllURTsKKyAgdm9pZCAqaXRk
YXRhID0gYmlkaV9zaGVsdmVfY2FjaGUgKCk7CisgIGlmIChFUSAoVmRpc3BsYXlfbGluZV9udW1i
ZXJzLCBRdmlzdWFsKSkKKyAgICB0aGlzX2xpbmUgPSBkaXNwbGF5X2NvdW50X2xpbmVzX3Zpc3Vh
bGx5IChpdCk7CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICghbGFzdF9saW5lKQorICAgICAg
ICB7CisgICAgICAgICAgLyogSWYgcG9zc2libGUsIHJldXNlIGRhdGEgY2FjaGVkIGJ5IGxpbmUt
bnVtYmVyLW1vZGUuICovCisgICAgICAgICAgaWYgKGl0LT53LT5iYXNlX2xpbmVfbnVtYmVyID4g
MAorICAgICAgICAgICAgICAmJiBpdC0+dy0+YmFzZV9saW5lX3BvcyA+IDAKKyAgICAgICAgICAg
ICAgJiYgaXQtPnctPmJhc2VfbGluZV9wb3MgPD0gSVRfQ0hBUlBPUyAoKml0KQorICAgICAgICAg
ICAgICAvKiBsaW5lLW51bWJlci1tb2RlIGFsd2F5cyBkaXNwbGF5cyBuYXJyb3dlZCBsaW5lCisg
ICAgICAgICAgICAgIG51bWJlcnMsIHNvIHdlIGNhbm5vdCB1c2UgaXRzIGRhdGEgaWYgdGhlIHVz
ZXIgd2FudHMKKyAgICAgICAgICAgICAgbGluZSBudW1iZXJzIHRoYXQgZGlzcmVnYXJkIG5hcnJv
d2luZywgb3IgaWYgdGhlCisgICAgICAgICAgICAgIGJ1ZmZlcidzIG5hcnJvd2luZyBoYXMganVz
dCBjaGFuZ2VkLiAqLworICAgICAgICAgICAgICAmJiAhKGRpc3BsYXlfbGluZV9udW1iZXJzX3dp
ZGVuCisgICAgICAgICAgICAgICAgICAgJiYgKEJFR19CWVRFICE9IEJFR1ZfQllURSB8fCBaX0JZ
VEUgIT0gWlZfQllURSkpCisgICAgICAgICAgICAgICYmICFjdXJyZW50X2J1ZmZlci0+Y2xpcF9j
aGFuZ2VkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGFydF9mcm9tID0gQ0hBUl9U
T19CWVRFIChpdC0+dy0+YmFzZV9saW5lX3Bvcyk7CisgICAgICAgICAgICAgIGxhc3RfbGluZSA9
IGl0LT53LT5iYXNlX2xpbmVfbnVtYmVyIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgc3RhcnRfZnJvbSA9IGJlZ19ieXRlOworICAgICAgICAgIGlm
ICghaXQtPmxudW1fYnl0ZXBvcykKKyAgICAgICAgICAgIGZpcnN0X3RpbWUgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGFydF9mcm9tID0gaXQtPmxudW1fYnl0
ZXBvczsKKyAgICAgIC8qIFBhcmFub2lhOiB3aGF0IGlmIHNvbWVvbmUgY2hhbmdlcyB0aGUgbmFy
cm93aW5nIHNpbmNlIHRoZQorICAgICAgbGFzdCB0aW1lIGRpc3BsYXlfbGluZSB3YXMgY2FsbGVk
PyAgU2hvdWxkbid0IHJlYWxseSBoYXBwZW4sCisgICAgICBidXQgd2hvIGtub3dzIHdoYXQgc29t
ZSBjcmF6eSBMaXNwIGludm9rZWQgYnkgOmV2YWwgY291bGQgZG8/ICAqLworICAgICAgaWYgKCEo
YmVnX2J5dGUgPD0gc3RhcnRfZnJvbSAmJiBzdGFydF9mcm9tIDw9IHpfYnl0ZSkpCisgICAgICAg
IHsKKyAgICAgICAgICBsYXN0X2xpbmUgPSAwOworICAgICAgICAgIHN0YXJ0X2Zyb20gPSBiZWdf
Ynl0ZTsKKyAgICAgICAgfQorICAgICAgdGhpc19saW5lID0gbGFzdF9saW5lICsgZGlzcGxheV9j
b3VudF9saW5lc19sb2dpY2FsbHkgKHN0YXJ0X2Zyb20sCisgICAgICAgICAgICAgICAgICAgSVRf
QllURVBPUyAoKml0KSwgSVRfQ0hBUlBPUyAoKml0KSwgJmJ5dGVwb3MpOworICAgICAgZWFzc2Vy
dCAodGhpc19saW5lID4gMCB8fCAodGhpc19saW5lID09IDAgJiYgc3RhcnRfZnJvbSA9PSBiZWdf
Ynl0ZSkpOworICAgICAgZWFzc2VydCAoYnl0ZXBvcyA9PSBJVF9CWVRFUE9TICgqaXQpKTsKKyAg
ICB9CisgIC8qIFJlY29yZCB0aGUgbGluZSBudW1iZXIgaW5mb3JtYXRpb24uICovCisgIGlmICh0
aGlzX2xpbmUgIT0gbGFzdF9saW5lIHx8ICFpdC0+bG51bV9ieXRlcG9zKQorICAgIHsKKyAgICAg
IGl0LT5sbnVtID0gdGhpc19saW5lOworICAgICAgaXQtPmxudW1fYnl0ZXBvcyA9IElUX0JZVEVQ
T1MgKCppdCk7CisgICAgfQorICBiaWRpX3Vuc2hlbHZlX2NhY2hlIChpdGRhdGEsIGZhbHNlKTsK
K30KKworLyogVVNBR0U6ICBmcHJpbnRmIChzdGRlcnIsICJGUkFNRSAoJXMpIiwgbWNfZnJhbWUg
KGYpKTsgKi8KK2NoYXIgKgorbWNfZnJhbWUgKHN0cnVjdCBmcmFtZSAqZikKK3sKKyAgTGlzcF9P
YmplY3QgZnJhbWU7CisgIFhTRVRGUkFNRSAoZnJhbWUsIGYpOworICByZXR1cm4gU1NEQVRBIChG
cHJpbjFfdG9fc3RyaW5nIChmcmFtZSwgUW5pbCkpOworfQorCisvKiBVU0FHRTogIGZwcmludGYg
KHN0ZGVyciwgIldJTkRPVyAoJXMpIiwgbWNfd2luZG93ICh3KSk7ICovCitjaGFyICoKK21jX3dp
bmRvdyAoc3RydWN0IHdpbmRvdyAqdykKK3sKKyAgTGlzcF9PYmplY3Qgd2luZG93OworICBYU0VU
V0lORE9XICh3aW5kb3csIHcpOworICByZXR1cm4gU1NEQVRBIChGcHJpbjFfdG9fc3RyaW5nICh3
aW5kb3csIFFuaWwpKTsKK30KKworLyogVVNBR0U6ICBmcHJpbnRmIChzdGRlcnIsICJDSEFSQUNU
RVIgKCVzKSIsIG1jX2NoYXJfdG9fc3RyaW5nIChnbHlwaC0+dS5jaCkpOyAqLworY2hhciAqCitt
Y19jaGFyX3RvX3N0cmluZyAoaW50IGFyZykKK3sKKyAgTGlzcF9PYmplY3QgY2hhcmFjdGVyID0g
KDAgPD0gYXJnICYmIGFyZyA8PSBNQVhfQ0hBUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ID8gRmNoYXJfdG9fc3RyaW5nIChtYWtlX2ZpeG51bSAoYXJnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogUW5pbDsKKyAgY2hhciAqIHJlc3VsdCA9ICghTklMUCAoY2hhcmFjdGVyKQor
ICAgICAgICAgICAgICAgICAgICYmIGFyZyA9PSA5KQorICAgICAgICAgICAgICAgICAgICA/ICJc
XHQiCisgICAgICAgICAgICAgICAgICA6ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAg
ICAgICAgICAgJiYgYXJnID09IDEwKQorICAgICAgICAgICAgICAgICAgICA/ICJcXG4iCisgICAg
ICAgICAgICAgICAgICA6ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAg
JiYgYXJnID09IDMyKQorICAgICAgICAgICAgICAgICAgICA/ICJcXHMiCisgICAgICAgICAgICAg
ICAgICA6ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgJiYgYXJnICE9
IDkKKyAgICAgICAgICAgICAgICAgICAgICYmIGFyZyAhPSAxMAorICAgICAgICAgICAgICAgICAg
ICAgJiYgYXJnICE9IDMyKQorICAgICAgICAgICAgICAgICAgICA/IFNTREFUQSAoY2hhcmFjdGVy
KQorICAgICAgICAgICAgICAgICAgOiAiXFw/IjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50
CittY19saXNwX3RvX2N1cnNvcl90eXBlIChMaXNwX09iamVjdCBhcmcpCit7CisgIGNoYXIgKnN0
cjsKKyAgaWYgKFhUWVBFIChhcmcpID09IExpc3BfU3RyaW5nKQorICAgIHN0ciA9IFNTREFUQSAo
YXJnKTsKKyAgICBlbHNlIGlmIChYVFlQRSAoYXJnKSA9PSBMaXNwX1N5bWJvbCkKKyAgICAgIHN0
ciA9IFNTREFUQSAoU1lNQk9MX05BTUUgKGFyZykpOworICAgICAgZWxzZSByZXR1cm4gLTE7Cisg
IGlmICghc3RyY21wIChzdHIsICJubyIpKQorICAgIHJldHVybiBNQ19OT19DVVJTT1I7CisgIGlm
ICghc3RyY21wIChzdHIsICJtYy1sZWZ0LWZyaW5nZS1iaXRtYXAiKSkKKyAgICByZXR1cm4gTUNf
TEVGVF9GUklOR0VfQklUTUFQOworICBpZiAoIXN0cmNtcCAoc3RyLCAibWMtcmlnaHQtZnJpbmdl
LWJpdG1hcCIpKQorICAgIHJldHVybiBNQ19SSUdIVF9GUklOR0VfQklUTUFQOworICBpZiAoIXN0
cmNtcCAoc3RyLCAiYm94IikpCisgICAgcmV0dXJuIE1DX0ZJTExFRF9CT1g7CisgIGlmICghc3Ry
Y21wIChzdHIsICJmcmFtZWQiKSkKKyAgICByZXR1cm4gTUNfRlJBTUVEX0JPWDsKKyAgaWYgKCFz
dHJjbXAgKHN0ciwgImhvbGxvdyIpKQorICAgIHJldHVybiBNQ19IT0xMT1dfQk9YOworICBpZiAo
IXN0cmNtcCAoc3RyLCAiYmFyIikpCisgICAgcmV0dXJuIE1DX0JBUjsKKyAgaWYgKCFzdHJjbXAg
KHN0ciwgImhiYXIiKSkKKyAgICByZXR1cm4gTUNfSEJBUjsKKyAgcmV0dXJuIC0xOworfQorCisv
KiBVU0FHRTogIGZwcmludGYgKHN0ZGVyciwgIkNVUlNPUiBUWVBFICglcykiLCBtY19jdXJzb3Jf
dHlwZV90b19zdHJpbmcgKGFyZykpOyAqLworY2hhciAqCittY19jdXJzb3JfdHlwZV90b19zdHJp
bmcgKGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUpCit7CisgIHN3aXRjaCAoY3Vyc29y
X3R5cGUpCisgICAgeworICAgICAgY2FzZSBNQ19GSUxMRURfQk9YOiByZXR1cm4gIk1DX0ZJTExF
RF9CT1giOworICAgICAgY2FzZSBNQ19GUkFNRURfQk9YOiByZXR1cm4gIk1DX0ZSQU1FRF9CT1gi
OworICAgICAgY2FzZSBNQ19IT0xMT1dfQk9YOiByZXR1cm4gIk1DX0hPTExPV19CT1giOworICAg
ICAgY2FzZSBNQ19CQVI6IHJldHVybiAiTUNfQkFSIjsKKyAgICAgIGNhc2UgTUNfSEJBUjogcmV0
dXJuICJNQ19IQkFSIjsKKyAgICAgIGNhc2UgTUNfTEVGVF9GUklOR0VfQklUTUFQOiByZXR1cm4g
Ik1DX0xFRlRfRlJJTkdFX0JJVE1BUCI7CisgICAgICBjYXNlIE1DX1JJR0hUX0ZSSU5HRV9CSVRN
QVA6IHJldHVybiAiTUNfUklHSFRfRlJJTkdFX0JJVE1BUCI7CisgICAgICBjYXNlIE1DX05PX0ZS
SU5HRV9CSVRNQVA6IHJldHVybiAiTUNfTk9fRlJJTkdFX0JJVE1BUCI7CisgICAgICBjYXNlIE1D
X05PX0NVUlNPUjoKKyAgICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gIk1DX05PX0NVUlNPUiI7
CisgICAgfQorfQorCisvKiBVU0FHRTogIGZwcmludGYgKHN0ZGVyciwgIkdMWVBIIEZMQVZPUiAo
JXMpIiwgbWNfZmxhdm9yX3RvX3N0cmluZyAoYXJnKSk7ICovCitjaGFyICoKK21jX2ZsYXZvcl90
b19zdHJpbmcgKGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvcikKK3sKKyAgc3dpdGNoIChnbHlw
aF9mbGF2b3IpCisgICAgeworICAgICAgY2FzZSBOT19GTEFWT1I6IHJldHVybiAiTk9fRkxBVk9S
IjsKKyAgICAgIGNhc2UgTUNfR0xZUEg6IHJldHVybiAiTUNfR0xZUEgiOworICAgICAgY2FzZSBN
Q19HTFlQSExFU1M6IHJldHVybiAiTUNfR0xZUEhMRVNTIjsKKyAgICAgIGNhc2UgTUNfT1ZFUkxB
WV9BUlJPV19CSVRNQVA6IHJldHVybiAiTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAiOworICAgICAg
Y2FzZSBNQ19QSUxDUk9XOiByZXR1cm4gIk1DX1BJTENST1ciOworICAgICAgY2FzZSBNQ19IT0xM
T1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XOiByZXR1cm4gIk1DX0hPTExPV19SRUNUQU5HTEVfUklH
SFRfQVJST1ciOworICAgICAgY2FzZSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hU
X0FSUk9XOiByZXR1cm4gIk1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1ci
OworICAgICAgY2FzZSBNQ19IT0xMT1dfUkVDVEFOR0xFOiByZXR1cm4gIk1DX0hPTExPV19SRUNU
QU5HTEUiOworICAgICAgY2FzZSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1c6IHJldHVybiAi
TUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XIjsKKyAgICAgIGNhc2UgTUNfUkVWRVJTRURfVkVS
VElDQUxfQkFSX1JJR0hUX0FSUk9XOiByZXR1cm4gIk1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9S
SUdIVF9BUlJPVyI7CisgICAgICBjYXNlIE1DX1ZFUlRJQ0FMX0JBUjogcmV0dXJuICJNQ19WRVJU
SUNBTF9CQVIiOworICAgICAgY2FzZSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVI6IHJldHVybiAi
TUNfUkVWRVJTRURfVkVSVElDQUxfQkFSIjsKKyAgICAgIGNhc2UgTUNfVkVSVElDQUxfQkFSX0JB
Q0tTTEFTSDogcmV0dXJuICJNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIIjsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KK30KKworLyogVVNBR0U6ICBmcHJp
bnRmIChzdGRlcnIsICJDQUNIRS1UWVBFICglcykiLCBtY19jYWNoZV90eXBlX3RvX3N0cmluZyAo
YXJnKSk7ICovCitjaGFyICoKK21jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChlbnVtIG1jX2NhY2hl
X3R5cGUgY2FjaGVfdHlwZSkKK3sKKyAgc3dpdGNoIChjYWNoZV90eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgTk9fQ0FDSEU6IHJldHVybiAiTk9fQ0FDSEUiOworICAgICAgY2FzZSBNQ19DQUNIRTog
cmV0dXJuICJNQ19DQUNIRSI7CisgICAgICBjYXNlIENIX0NBQ0hFOiByZXR1cm4gIkNIX0NBQ0hF
IjsKKyAgICAgIGNhc2UgRkNfQ0FDSEU6IHJldHVybiAiRkNfQ0FDSEUiOworICAgICAgZGVmYXVs
dDoKKyAgICAgIHJldHVybiAiVU5LTk9XTiI7CisgICAgfQorfQorCisvKiBVU0FHRTogIGZwcmlu
dGYgKHN0ZGVyciwgIkFDVElPTi1UWVBFICglcykiLCBtY19lbmdpbmVfdHlwZV90b19zdHJpbmcg
KGFyZykpOyAqLworY2hhciAqCittY19lbmdpbmVfdHlwZV90b19zdHJpbmcgKGVudW0gbWNfZW5n
aW5lX3R5cGUgYWN0aW9uX3R5cGUpCit7CisgIHN3aXRjaCAoYWN0aW9uX3R5cGUpCisgICAgewor
ICAgICAgY2FzZSBNVUxUSVBMRV9DVVJTT1JTOiByZXR1cm4gIk1VTFRJUExFX0NVUlNPUlMiOwor
ICAgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOiByZXR1cm4gIkhPUklaT05UQUxfUlVMRVIiOwor
ICAgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjogcmV0dXJuICJWRVJUSUNBTF9SVUxFUiI7CisgICAg
ICBjYXNlIEZJTExfQ09MVU1OOiByZXR1cm4gIkZJTExfQ09MVU1OIjsKKyAgICAgIGNhc2UgQ1VS
U09SX0lORElDQVRPUjogcmV0dXJuICJDVVJTT1JfSU5ESUNBVE9SIjsKKyAgICAgIGRlZmF1bHQ6
CisgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KK30KKworLyogVVNBR0U6ICBmcHJpbnRm
IChzdGRlcnIsICJGUk9NX1dIRVJFICglcykiLCBtY19kcmF3X3Jvd190eXBlX3RvX3N0cmluZyAo
YXJnKSk7ICovCitjaGFyICoKK21jX2RyYXdfcm93X3R5cGVfdG9fc3RyaW5nIChlbnVtIG1jX2Ry
YXdfcm93X3R5cGUgZnJvbV93aGVyZSkKK3sKKyAgc3dpdGNoIChmcm9tX3doZXJlKQorICAgIHsK
KyAgICAgIGNhc2UgTk9XSEVSRTogcmV0dXJuICJOT1dIRVJFIjsKKyAgICAgIGNhc2UgU0NSSUJF
X09ORTogcmV0dXJuICJTQ1JJQkVfT05FIjsKKyAgICAgIGNhc2UgU0NSSUJFX1RXTzogcmV0dXJu
ICJTQ1JJQkVfVFdPIjsKKyAgICAgIGNhc2UgU0NSSUJFX1RIUkVFOiByZXR1cm4gIlNDUklCRV9U
SFJFRSI7CisgICAgICBjYXNlIFNLSVBQRUQ6IHJldHVybiAiU0tJUFBFRCI7CisgICAgICBjYXNl
IFBPU1RfQ0hBTkdFRDogcmV0dXJuICJQT1NUX0NIQU5HRUQiOworICAgICAgY2FzZSBVTkNIQU5H
RUQ6IHJldHVybiAiVU5DSEFOR0VEIjsKKyAgICAgIGNhc2UgU0VUX0NVUlNPUl9PTkU6IHJldHVy
biAiU0VUX0NVUlNPUl9PTkUiOworICAgICAgY2FzZSBTRVRfQ1VSU09SX1RXTzogcmV0dXJuICJT
RVRfQ1VSU09SX1RXTyI7CisgICAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuICJVTktOT1dOIjsK
KyAgICB9Cit9CisKKy8qIFVTQUdFOiAgZnByaW50ZiAoc3RkZXJyLCAiRlJPTV9XSEVSRSAoJXMp
IiwgbWNfZHJhd19yb3dfdHlwZV90b19zdHJpbmcgKGFyZykpOyAqLworY2hhciAqCittY19yZWRy
YXdfcm93X3R5cGVfdG9fc3RyaW5nIChlbnVtIG1jX3JlZHJhd19yb3dfdHlwZSBmcm9tX3doZXJl
KQoreworICBzd2l0Y2ggKGZyb21fd2hlcmUpCisgICAgeworICAgICAgY2FzZSBVUERBVEVfV0lO
RE9XX19SRURSQVdfT1ZFUkxBUFBFRF9ST1dTOiByZXR1cm4gIlVQREFURV9XSU5ET1dfX1JFRFJB
V19PVkVSTEFQUEVEX1JPV1MiOworICAgICAgY2FzZSBHVUlfSU5TRVJUX0dMWVBIUzogcmV0dXJu
ICJHVUlfSU5TRVJUX0dMWVBIUyI7CisgICAgICBjYXNlIEdVSV9GSVhfT1ZFUkxBUFBJTkdfQVJF
QTogcmV0dXJuICJHVUlfRklYX09WRVJMQVBQSU5HX0FSRUEiOworICAgICAgY2FzZSBEUkFXX1JP
V19XSVRIX01PVVNFX0ZBQ0U6IHJldHVybiAiRFJBV19ST1dfV0lUSF9NT1VTRV9GQUNFIjsKKyAg
ICAgIGNhc2UgRVhQT1NFX0FSRUFfT05FOiByZXR1cm4gIkVYUE9TRV9BUkVBX09ORSI7CisgICAg
ICBjYXNlIEVYUE9TRV9BUkVBX1RXTzogcmV0dXJuICJFWFBPU0VfQVJFQV9UV08iOworICAgICAg
Y2FzZSBFWFBPU0VfTElORTogcmV0dXJuICJFWFBPU0VfTElORSI7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgcmV0dXJuICJVTktOT1dOIjsKKyAgICB9Cit9CisKK3ZvaWQKK21jX2NhY2hlX2luc3Bl
Y3RvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IG1jX21hdHJpeCBtYXRyaXgpCit7CisgIGlu
dCB2cG9zX2FsbG9jYXRlZCA9IHctPm1jX21hdHJpeC52cG9zX2FsbG9jYXRlZDsKKyAgaW50IHZw
b3NfdXNlZCA9IHctPm1jX21hdHJpeC52cG9zX3VzZWQ7CisgIGZwcmludGYgKHN0ZGVyciwgIiVz
OiAgbWF0cml4LnZwb3NfYWxsb2NhdGVkICglZCkgfCBtYXRyaXgudnBvc191c2VkICglZClcbiIs
CisgICAgICAgICAgICAgICAgICAgbWNfd2luZG93ICh3KSwgdnBvc19hbGxvY2F0ZWQsIHZwb3Nf
dXNlZCk7CisgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNIRTsK
KyAgICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAgKytjYWNoZV90eXBlKQorICAg
IHsKKyAgICAgIGludCBjdXJzb3JzX3VzZWQgPSB3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2Nh
Y2hlX3R5cGVdOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICBtYXRyaXguY3Vyc29yc191c2Vk
WyVzXSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBtY19jYWNoZV90eXBlX3RvX3N0
cmluZyAoY2FjaGVfdHlwZSksIGN1cnNvcnNfdXNlZCk7CisgICAgfQorICBmb3IgKGludCB2bnRo
ID0gMDsKKyAgICAgICB2bnRoIDwgdy0+bWNfbWF0cml4LnZwb3NfdXNlZDsKKyAgICAgICArK3Zu
dGgpCisgICAgeworICAgICAgZm9yIChlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1D
X0NBQ0hFOworICAgICAgICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAgICAgICsr
Y2FjaGVfdHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGludCBjYWNoZV9hbGxvY2F0ZWQgPSB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV9hbGxvY2F0ZWRbY2FjaGVfdHlwZV07CisgICAg
ICAgICAgaW50IGNhY2hlX3VzZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV91c2Vk
W2NhY2hlX3R5cGVdOworICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICB2bnRoICglZCkg
fCBjYWNoZV9hbGxvY2F0ZWRbJXNdICglZCkgfCBjYWNoZV91c2VkWyVzXSAoJWQpXG4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm50aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNoZV90eXBlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhY2hlX2FsbG9jYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1j
X2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNoZV90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhY2hlX3VzZWQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkCittY19zZXRf
bHNsX2JnIChzdHJ1Y3Qgd2luZG93ICp3LCBlbnVtIGZhY2VfaWQgZmFjZV9pZCwgc3RydWN0IG1j
X1JHQiAqbHNsKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAg
c3RydWN0IGZhY2UgKmZhY2U7CisgIGlmICghTklMUCAoVmZhY2VfcmVtYXBwaW5nX2FsaXN0KQor
ICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVMVF9GQUNFX0lEIC8qIFFkZWZhdWx0ICovCisgICAg
ICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9JRCAvKiBRbW9kZV9saW5lICovCisg
ICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5BQ1RJVkVfRkFDRV9JRCAvKiBRbW9k
ZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBIRUFERVJfTElORV9G
QUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gVE9PTF9C
QVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEZSSU5H
RV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFNDUk9MTF9C
QVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gQk9S
REVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gQ1VSU09S
X0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9VU0VfRkFD
RV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1FTlVfRkFDRV9JRCAv
KiBRbWVudSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRkFDRV9J
RCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19E
SVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2ZpcnN0X3BpeGVs
ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9MQVNUX1BJWEVMX0ZB
Q0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwgKi8KKyAgICAgICAgICB8fCBmYWNl
X2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2ZXJ0aWNhbF9ib3JkZXIgKi8KKyAg
ICAgICAgICB8fCBmYWNlX2lkID09IElOVEVSTkFMX0JPUkRFUl9GQUNFX0lEKSkgLyogUWludGVy
bmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGxvb2t1cF9iYXNpY19m
YWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAgZWxzZQorICAgICAgZmFjZSA9IEZBQ0VfRlJPTV9J
RCAoZiwgZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IGNvbG9yID0gKGZhY2UgIT0gTlVMTCkKKyAg
ICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPmxmYWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhd
CisgICAgICAgICAgICAgICAgICAgICAgOiBidWlsZF9zdHJpbmcgKCJPcmFuZ2VSZWQiKTsKKyAg
bWNfeHdfY29sb3JfdmFsdWVzICh3LCBjb2xvciwgbHNsKTsKK30KKwordm9pZAorbWNfc2V0X2Vz
c2VudGlhbHMgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBtY19lc3NlbnRpYWxzICplc3NlbnRp
YWxzKQoreworICBpZiAoIUJVRkZFUlAgKHctPmNvbnRlbnRzKSkKKyAgICByZXR1cm47CisgIGlm
IChOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAgICAgJiYg
TklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICYm
IE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpKQorICAgIHJl
dHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIGVzc2VudGlh
bHMtPmFjdGl2ZV9wID0gKHcgPT0gWFdJTkRPVyAoZi0+c2VsZWN0ZWRfd2luZG93KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBmID09IEZSQU1FX0RJU1BMQVlfSU5GTyAoZiktPmhpZ2hs
aWdodF9mcmFtZSk7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSICh3LT5jb250ZW50cyk7
CisgIHN0cnVjdCBidWZmZXIgKm9sZF9idWZmZXIgPSBOVUxMOworICBwdHJkaWZmX3Qgb3BvaW50
ID0gKHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KSkKKyAgICAgICAgICAgICAgICAgICAg
ID8gUFQKKyAgICAgICAgICAgICAgICAgICAgIDogWEZJWE5VTSAoRm1hcmtlcl9wb3NpdGlvbiAo
dy0+cG9pbnRtKSk7CisgIHB0cmRpZmZfdCBjdXJyZW50X2NvbCA9IG1jX2N1cnJlbnRfY29sdW1u
ICh3LCBvcG9pbnQpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURU
SCAoZik7CisgIGJvb2wgZmlsbF9jb2x1bW5fcCA9ICFOSUxQIChCVkFSIChiLCBmaWxsX2NvbHVt
bikpOworICBpbnQgZmlsbF9jb2wgPSBYRklYTlVNIChCVkFSIChiLCBmaWxsX2NvbHVtbikpOwor
ICBpbnQgaHNjbF94ID0gdy0+aHNjcm9sbCAqIGZyYW1lX2NoYXJfd2lkdGg7CisgIGlmIChiICE9
IGN1cnJlbnRfYnVmZmVyKQorICAgIHsKKyAgICAgIG9sZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZl
cjsKKyAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKGIpOworICAgIH0KKyAgZXNzZW50aWFscy0+
enYgPSBaVjsKKyAgZXNzZW50aWFscy0+enZfYnl0ZSA9IFpWX0JZVEU7CisgIGVzc2VudGlhbHMt
PmZjX3ggPSAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChW
ZGlzcGxheV9saW5lX251bWJlcnMpKQorICAgICAgICAgICAgICAgICAgICAgICA/IChmaWxsX2Nv
bCAqIGZyYW1lX2NoYXJfd2lkdGgpICsgdy0+bWMubG51bV9waXhlbF93aWR0aCAtIGhzY2xfeAor
ICAgICAgICAgICAgICAgICAgICAgOiAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgPyAoZmlsbF9jb2wgKiBmcmFtZV9jaGFyX3dpZHRoKSAtIGhzY2xfeAorICAgICAgICAg
ICAgICAgICAgICAgOiAwOworICBpZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2ludGVy
bmFsIChvbGRfYnVmZmVyKTsKKyAgZW51bSBmYWNlX2lkIGZpbGxfY29sdW1uX3ByZV96dl9mYWNl
X2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChY
QlVGRkVSICh3LT5jb250ZW50cyksIGZjX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAmJiBOSUxQ
IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKSkKKyAgICAgID8gbG9v
a3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLWluYWN0aXZlLXByZS16di1mYWNlIiks
IHRydWUpCisgICAgOiAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJW
QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisgICAgICAg
JiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg
ICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5j
dXJzb3IueCA9PSBlc3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo
dywgZiwgaW50ZXJuICgiZmMtb3BvaW50LWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpCisg
ICAgOiAoZXNzZW50aWFscy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF
UiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwg
Y2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ID09IGVzc2VudGlhbHMt
PmZjX3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1vcG9p
bnQtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6ICghZXNzZW50aWFscy0+YWN0aXZlX3AKKyAg
ICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY19pbmFjdGl2ZV93
aW5kb3dzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBj
cm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfdmVydGljYWxfcnVsZXIp
KQorICAgICAgICYmIHctPmN1cnNvci54ICE9IGVzc2VudGlhbHMtPmZjX3gpCisgICAgICA/IGxv
b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJmYy1pbmFjdGl2ZS1wcmUtenYtZmFjZSIp
LCB0cnVlKQorICAgIDogKGVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJW
QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAg
KEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5jdXJzb3IueCAhPSBl
c3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu
ICgiZmMtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm
LCBpbnRlcm4gKCJmYy1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZpbGxf
Y29sdW1uX3ByZV96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmaWxsX2NvbHVtbl9wcmVfenZf
ZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IGZpbGxfY29sdW1uX3ByZV96dl9jb2xvciA9IGZpbGxf
Y29sdW1uX3ByZV96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3Ry
dWN0IG1jX1JHQiBmY19wcmVfenZfZmc7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgZmlsbF9j
b2x1bW5fcHJlX3p2X2NvbG9yLCAmZmNfcHJlX3p2X2ZnKTsKKyAgZXNzZW50aWFscy0+ZmNfZmdb
UFJFX1pWXS5yZWQgPSBmY19wcmVfenZfZmcucmVkOworICBlc3NlbnRpYWxzLT5mY19mZ1tQUkVf
WlZdLmdyZWVuID0gZmNfcHJlX3p2X2ZnLmdyZWVuOworICBlc3NlbnRpYWxzLT5mY19mZ1tQUkVf
WlZdLmJsdWUgPSBmY19wcmVfenZfZmcuYmx1ZTsKKyAgZW51bSBmYWNlX2lkIGZpbGxfY29sdW1u
X2F0X3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+YWN0aXZlX3AKKyAgICAgJiYgIU5J
TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisg
ICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQor
ICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiZmMtaW5hY3RpdmUtYXQt
enYtZmFjZSIpLCB0cnVlKQorICAgIDogKCFlc3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAgICYm
ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX2luYWN0aXZlX3dpbmRvd3Mp
KQorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFp
cnMpKQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAg
ICAgJiYgdy0+Y3Vyc29yLnggPT0gZXNzZW50aWFscy0+ZmNfeCkKKyAgICAgID8gbG9va3VwX25h
bWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLW9wb2ludC1pbmFjdGl2ZS1hdC16di1mYWNlIiks
IHRydWUpCisgICAgOiAoZXNzZW50aWFscy0+YWN0aXZlX3AKKyAgICAgICAmJiAhTklMUCAoQlZB
UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAmJiAhTklMUCAo
QlZBUiAoYiwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIHctPmN1cnNvci54ID09IGVz
c2VudGlhbHMtPmZjX3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4g
KCJmYy1vcG9pbnQtYXQtenYtZmFjZSIpLCB0cnVlKQorICAgIDogKCFlc3NlbnRpYWxzLT5hY3Rp
dmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX2lu
YWN0aXZlX3dpbmRvd3MpKQorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250
ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNh
bF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29yLnggIT0gZXNzZW50aWFscy0+ZmNfeCkKKyAg
ICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLWluYWN0aXZlLWF0LXp2
LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IChlc3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAgICYmICFO
SUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYm
ICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29y
LnggIT0gZXNzZW50aWFscy0+ZmNfeCkKKyAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs
IGludGVybiAoImZjLWF0LXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNl
ICh3LCBmLCBpbnRlcm4gKCJmYy1hdC16di1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAq
ZmlsbF9jb2x1bW5fYXRfenZfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmlsbF9jb2x1bW5fYXRf
enZfZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IGZpbGxfY29sdW1uX2F0X3p2X2NvbG9yID0gZmls
bF9jb2x1bW5fYXRfenZfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIHN0
cnVjdCBtY19SR0IgZmNfYXRfenZfZmc7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgZmlsbF9j
b2x1bW5fYXRfenZfY29sb3IsICZmY19hdF96dl9mZyk7CisgIGVzc2VudGlhbHMtPmZjX2ZnW0FU
X1pWXS5yZWQgPSBmY19hdF96dl9mZy5yZWQ7CisgIGVzc2VudGlhbHMtPmZjX2ZnW0FUX1pWXS5n
cmVlbiA9IGZjX2F0X3p2X2ZnLmdyZWVuOworICBlc3NlbnRpYWxzLT5mY19mZ1tBVF9aVl0uYmx1
ZSA9IGZjX2F0X3p2X2ZnLmJsdWU7CisgIGVudW0gZmFjZV9pZCBmaWxsX2NvbHVtbl9wb3N0X3p2
X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+YWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJW
QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisgICAgICYm
IE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgICAg
PyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiZmMtaW5hY3RpdmUtcG9zdC16di1m
YWNlIiksIHRydWUpCisgICAgOiAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5J
TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfaW5hY3RpdmVfd2luZG93cykpCisg
ICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykp
CisgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAm
JiB3LT5jdXJzb3IueCA9PSBlc3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRf
ZmFjZSAodywgZiwgaW50ZXJuICgiZmMtb3BvaW50LWluYWN0aXZlLXBvc3QtenYtZmFjZSIpLCB0
cnVlKQorICAgIDogKGVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIg
KFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAgKEJW
QVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBlc3Nl
bnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi
ZmMtb3BvaW50LXBvc3QtenYtZmFjZSIpLCB0cnVlKQorICAgIDogKCFlc3NlbnRpYWxzLT5hY3Rp
dmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX2lu
YWN0aXZlX3dpbmRvd3MpKQorICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250
ZW50cyksIGNyb3NzaGFpcnMpKQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNh
bF9ydWxlcikpCisgICAgICAgJiYgdy0+Y3Vyc29yLnggIT0gZXNzZW50aWFscy0+ZmNfeCkKKyAg
ICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoImZjLWluYWN0aXZlLXBvc3Qt
enYtZmFjZSIpLCB0cnVlKQorICAgIDogKGVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICAgJiYg
IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAg
JiYgIU5JTFAgKEJWQVIgKGIsIGNoX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAmJiB3LT5jdXJz
b3IueCAhPSBlc3NlbnRpYWxzLT5mY194KQorICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywg
ZiwgaW50ZXJuICgiZmMtcG9zdC16di1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRf
ZmFjZSAodywgZiwgaW50ZXJuICgiZmMtcG9zdC16di1mYWNlIiksIHRydWUpOworICBzdHJ1Y3Qg
ZmFjZSAqZmlsbF9jb2x1bW5fcG9zdF96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmaWxsX2Nv
bHVtbl9wb3N0X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBmaWxsX2NvbHVtbl9wb3N0X3p2
X2NvbG9yID0gZmlsbF9jb2x1bW5fcG9zdF96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5E
X0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBmY19wb3N0X3p2X2ZnOworICBtY194d19jb2xvcl92
YWx1ZXMgKHcsIGZpbGxfY29sdW1uX3Bvc3RfenZfY29sb3IsICZmY19wb3N0X3p2X2ZnKTsKKyAg
ZXNzZW50aWFscy0+ZmNfZmdbUE9TVF9aVl0ucmVkID0gZmNfcG9zdF96dl9mZy5yZWQ7CisgIGVz
c2VudGlhbHMtPmZjX2ZnW1BPU1RfWlZdLmdyZWVuID0gZmNfcG9zdF96dl9mZy5ncmVlbjsKKyAg
ZXNzZW50aWFscy0+ZmNfZmdbUE9TVF9aVl0uYmx1ZSA9IGZjX3Bvc3RfenZfZmcuYmx1ZTsKKyAg
ZW51bSBmYWNlX2lkIGV2ZW5fcHJlX3p2X2ZhY2VfaWQgPQorICAgICghZXNzZW50aWFscy0+YWN0
aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5h
Y3RpdmVfd2luZG93cykpKQorICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAo
IistZXZlbi1pbmFjdGl2ZS1wcmUtenYtZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVk
X2ZhY2UgKHcsIGYsIGludGVybiAoIistZXZlbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgc3Ry
dWN0IGZhY2UgKmV2ZW5fcHJlX3p2X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGV2ZW5fcHJlX3p2
X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBldmVuX3ByZV96dl9jb2xvciA9IGV2ZW5fcHJlX3p2
X2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdCIGV2
ZW5fcHJlX3p2X2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGV2ZW5fcHJlX3p2X2NvbG9y
LCAmZXZlbl9wcmVfenZfZmcpOworICBlbnVtIGZhY2VfaWQgZXZlbl9hdF96dl9mYWNlX2lkID0K
KyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVS
ICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1l
ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWV2ZW4taW5hY3RpdmUtYXQtenYtZmFjZSIpLCB0cnVl
KQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistZXZlbi1hdC16di1m
YWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9hdF96dl9mYWNlID0gRkFDRV9GUk9N
X0lEIChmLCBldmVuX2F0X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBldmVuX2F0X3p2X2Nv
bG9yID0gZXZlbl9hdF96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAg
c3RydWN0IG1jX1JHQiBldmVuX2F0X3p2X2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGV2
ZW5fYXRfenZfY29sb3IsICZldmVuX2F0X3p2X2ZnKTsKKyAgZW51bSBmYWNlX2lkIGV2ZW5fcG9z
dF96dl9mYWNlX2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQ
IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAg
ICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWV2ZW4taW5hY3RpdmUtcG9z
dC16di1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu
ICgiKy1ldmVuLXBvc3QtenYtZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmV2ZW5fcG9z
dF96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBldmVuX3Bvc3RfenZfZmFjZV9pZCk7CisgIExp
c3BfT2JqZWN0IGV2ZW5fcG9zdF96dl9jb2xvciA9IGV2ZW5fcG9zdF96dl9mYWNlLT5sZmFjZVtM
RkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBldmVuX3Bvc3RfenZfZmc7
CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgZXZlbl9wb3N0X3p2X2NvbG9yLCAmZXZlbl9wb3N0
X3p2X2ZnKTsKKyAgZW51bSBmYWNlX2lkIG9kZF9wcmVfenZfZmFjZV9pZCA9CisgICAgKCFlc3Nl
bnRpYWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu
dHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywg
ZiwgaW50ZXJuICgiKy1vZGQtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxv
b2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1wcmUtenYtZmFjZSIpLCB0cnVl
KTsKKyAgc3RydWN0IGZhY2UgKm9kZF9wcmVfenZfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgb2Rk
X3ByZV96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qgb2RkX3ByZV96dl9jb2xvciA9IG9kZF9w
cmVfenZfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIHN0cnVjdCBtY19S
R0Igb2RkX3ByZV96dl9mZzsKKyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBvZGRfcHJlX3p2X2Nv
bG9yLCAmb2RkX3ByZV96dl9mZyk7CisgIGVudW0gZmFjZV9pZCBvZGRfYXRfenZfZmFjZV9pZCA9
CisgICAgKCFlc3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF
UiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFt
ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vZGQtaW5hY3RpdmUtYXQtenYtZmFjZSIpLCB0cnVl
KQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2RkLWF0LXp2LWZh
Y2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpvZGRfYXRfenZfZmFjZSA9IEZBQ0VfRlJPTV9J
RCAoZiwgb2RkX2F0X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBvZGRfYXRfenZfY29sb3Ig
PSBvZGRfYXRfenZfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIHN0cnVj
dCBtY19SR0Igb2RkX2F0X3p2X2ZnOworICBtY194d19jb2xvcl92YWx1ZXMgKHcsIG9kZF9hdF96
dl9jb2xvciwgJm9kZF9hdF96dl9mZyk7CisgIGVudW0gZmFjZV9pZCBvZGRfcG9zdF96dl9mYWNl
X2lkID0KKyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChY
QlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1
cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1pbmFjdGl2ZS1wb3N0LXp2LWZhY2Ui
KSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1w
b3N0LXp2LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpvZGRfcG9zdF96dl9mYWNlID0g
RkFDRV9GUk9NX0lEIChmLCBvZGRfcG9zdF96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qgb2Rk
X3Bvc3RfenZfY29sb3IgPSBvZGRfcG9zdF96dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5E
X0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBvZGRfcG9zdF96dl9mZzsKKyAgbWNfeHdfY29sb3Jf
dmFsdWVzICh3LCBvZGRfcG9zdF96dl9jb2xvciwgJm9kZF9wb3N0X3p2X2ZnKTsKKyAgZW51bSBm
YWNlX2lkIHBvc3RfZmlsbF9wcmVfenZfZmFjZV9pZCA9CisgICAgKCFlc3NlbnRpYWxzLT5hY3Rp
dmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjaF9pbmFj
dGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi
Ky1wb3N0LWZpbGwtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9u
YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmlsbC1wcmUtenYtZmFjZSIpLCB0cnVl
KTsKKyAgc3RydWN0IGZhY2UgKnBvc3RfZmlsbF9wcmVfenZfZmFjZSA9IEZBQ0VfRlJPTV9JRCAo
ZiwgcG9zdF9maWxsX3ByZV96dl9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgcG9zdF9maWxsX3By
ZV96dl9jb2xvciA9IHBvc3RfZmlsbF9wcmVfenZfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VO
RF9JTkRFWF07CisgIHN0cnVjdCBtY19SR0IgcG9zdF9maWxsX3ByZV96dl9mZzsKKyAgbWNfeHdf
Y29sb3JfdmFsdWVzICh3LCBwb3N0X2ZpbGxfcHJlX3p2X2NvbG9yLCAmcG9zdF9maWxsX3ByZV96
dl9mZyk7CisgIGVudW0gZmFjZV9pZCBwb3N0X2ZpbGxfYXRfenZfZmFjZV9pZCA9CisgICAgKCFl
c3NlbnRpYWxzLT5hY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u
dGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo
dywgZiwgaW50ZXJuICgiKy1wb3N0LWZpbGwtaW5hY3RpdmUtYXQtenYtZmFjZSIpLCB0cnVlKQor
ICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcG9zdC1maWxsLWF0LXp2
LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpwb3N0X2ZpbGxfYXRfenZfZmFjZSA9IEZB
Q0VfRlJPTV9JRCAoZiwgcG9zdF9maWxsX2F0X3p2X2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBw
b3N0X2ZpbGxfYXRfenZfY29sb3IgPSBwb3N0X2ZpbGxfYXRfenZfZmFjZS0+bGZhY2VbTEZBQ0Vf
Rk9SRUdST1VORF9JTkRFWF07CisgIHN0cnVjdCBtY19SR0IgcG9zdF9maWxsX2F0X3p2X2ZnOwor
ICBtY194d19jb2xvcl92YWx1ZXMgKHcsIHBvc3RfZmlsbF9hdF96dl9jb2xvciwgJnBvc3RfZmls
bF9hdF96dl9mZyk7CisgIGVudW0gZmFjZV9pZCBwb3N0X2ZpbGxfcG9zdF96dl9mYWNlX2lkID0K
KyAgICAoIWVzc2VudGlhbHMtPmFjdGl2ZV9wCisgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVS
ICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1l
ZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3QtZmlsbC1pbmFjdGl2ZS1wb3N0LXp2LWZhY2Ui
KSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXBvc3Qt
ZmlsbC1wb3N0LXp2LWZhY2UiKSwgdHJ1ZSk7CisgIHN0cnVjdCBmYWNlICpwb3N0X2ZpbGxfcG9z
dF96dl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBwb3N0X2ZpbGxfcG9zdF96dl9mYWNlX2lkKTsK
KyAgTGlzcF9PYmplY3QgcG9zdF9maWxsX3Bvc3RfenZfY29sb3IgPSBwb3N0X2ZpbGxfcG9zdF96
dl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgc3RydWN0IG1jX1JHQiBw
b3N0X2ZpbGxfcG9zdF96dl9mZzsKKyAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBwb3N0X2ZpbGxf
cG9zdF96dl9jb2xvciwgJnBvc3RfZmlsbF9wb3N0X3p2X2ZnKTsKKyAgZW51bSBmYWNlX2lkIHNw
ZWNpYWxfY2hhcl9mYWNlX2lkID0KKyAgICBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu
ICgiKy1zcGVjaWFsLWNoYXJhY3Rlci1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqc3Bl
Y2lhbF9jaGFyX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIHNwZWNpYWxfY2hhcl9mYWNlX2lkKTsK
KyAgTGlzcF9PYmplY3Qgc3BlY2lhbF9jaGFyX2ZnX2NvbG9yID0gc3BlY2lhbF9jaGFyX2ZhY2Ut
PmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBzdHJ1Y3QgbWNfUkdCIHNwX2ZvcmVn
cm91bmQ7CisgIG1jX3h3X2NvbG9yX3ZhbHVlcyAodywgc3BlY2lhbF9jaGFyX2ZnX2NvbG9yLCAm
c3BfZm9yZWdyb3VuZCk7CisgIGVzc2VudGlhbHMtPnNwX2ZnLnJlZCA9IHNwX2ZvcmVncm91bmQu
cmVkOworICBlc3NlbnRpYWxzLT5zcF9mZy5ncmVlbiA9IHNwX2ZvcmVncm91bmQuZ3JlZW47Cisg
IGVzc2VudGlhbHMtPnNwX2ZnLmJsdWUgPSBzcF9mb3JlZ3JvdW5kLmJsdWU7CisgIC8qIHJlZCAq
LworICBpZiAoKCFmaWxsX2NvbHVtbl9wCisgICAgICAgJiYgY3VycmVudF9jb2wgJSAyICE9IDAp
CisgICAgICB8fCAoZmlsbF9jb2x1bW5fcAorICAgICAgICAgICYmIGN1cnJlbnRfY29sICUgMiAh
PSAwCisgICAgICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wpKQorICAgIHsKKyAgICAg
IGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9aVl0ucmVkID0gb2RkX3ByZV96dl9mZy5yZWQ7CisgICAg
ICBlc3NlbnRpYWxzLT5jaF9mZ1tQUkVfWlZdLmdyZWVuID0gb2RkX3ByZV96dl9mZy5ncmVlbjsK
KyAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9aVl0uYmx1ZSA9IG9kZF9wcmVfenZfZmcuYmx1
ZTsKKyAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW0FUX1pWXS5yZWQgPSBvZGRfYXRfenZfZmcucmVk
OworICAgICAgZXNzZW50aWFscy0+Y2hfZmdbQVRfWlZdLmdyZWVuID0gb2RkX2F0X3p2X2ZnLmdy
ZWVuOworICAgICAgZXNzZW50aWFscy0+Y2hfZmdbQVRfWlZdLmJsdWUgPSBvZGRfYXRfenZfZmcu
Ymx1ZTsKKyAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BPU1RfWlZdLnJlZCA9IG9kZF9wb3N0X3p2
X2ZnLnJlZDsKKyAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BPU1RfWlZdLmdyZWVuID0gb2RkX3Bv
c3RfenZfZmcuZ3JlZW47CisgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQT1NUX1pWXS5ibHVlID0g
b2RkX3Bvc3RfenZfZmcuYmx1ZTsKKyAgICB9CisgICAgLyogeWVsbG93ICovCisgICAgZWxzZSBp
ZiAoKCFmaWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICYmIGN1cnJlbnRfY29sICUgMiA9PSAw
KQorICAgICAgICAgICAgIHx8IChmaWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICAgICYmIGN1
cnJlbnRfY29sICUgMiA9PSAwCisgICAgICAgICAgICAgICAgICYmIGN1cnJlbnRfY29sIDw9IGZp
bGxfY29sKSkKKyAgICAgIHsKKyAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUFJFX1pWXS5yZWQg
PSBldmVuX3ByZV96dl9mZy5yZWQ7CisgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BSRV9aVl0u
Z3JlZW4gPSBldmVuX3ByZV96dl9mZy5ncmVlbjsKKyAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdb
UFJFX1pWXS5ibHVlID0gZXZlbl9wcmVfenZfZmcuYmx1ZTsKKyAgICAgICAgZXNzZW50aWFscy0+
Y2hfZmdbQVRfWlZdLnJlZCA9IGV2ZW5fYXRfenZfZmcucmVkOworICAgICAgICBlc3NlbnRpYWxz
LT5jaF9mZ1tBVF9aVl0uZ3JlZW4gPSBldmVuX2F0X3p2X2ZnLmdyZWVuOworICAgICAgICBlc3Nl
bnRpYWxzLT5jaF9mZ1tBVF9aVl0uYmx1ZSA9IGV2ZW5fYXRfenZfZmcuYmx1ZTsKKyAgICAgICAg
ZXNzZW50aWFscy0+Y2hfZmdbUE9TVF9aVl0ucmVkID0gZXZlbl9wb3N0X3p2X2ZnLnJlZDsKKyAg
ICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUE9TVF9aVl0uZ3JlZW4gPSBldmVuX3Bvc3RfenZfZmcu
Z3JlZW47CisgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW1BPU1RfWlZdLmJsdWUgPSBldmVuX3Bv
c3RfenZfZmcuYmx1ZTsKKyAgICAgIH0KKyAgICAgIC8qIGdyZWVuICovCisgICAgICBlbHNlIGlm
IChmaWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCA+IGZpbGxfY29s
KQorICAgICAgICB7CisgICAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUFJFX1pWXS5yZWQgPSBw
b3N0X2ZpbGxfcHJlX3p2X2ZnLnJlZDsKKyAgICAgICAgICBlc3NlbnRpYWxzLT5jaF9mZ1tQUkVf
WlZdLmdyZWVuID0gcG9zdF9maWxsX3ByZV96dl9mZy5ncmVlbjsKKyAgICAgICAgICBlc3NlbnRp
YWxzLT5jaF9mZ1tQUkVfWlZdLmJsdWUgPSBwb3N0X2ZpbGxfcHJlX3p2X2ZnLmJsdWU7CisgICAg
ICAgICAgZXNzZW50aWFscy0+Y2hfZmdbQVRfWlZdLnJlZCA9IHBvc3RfZmlsbF9hdF96dl9mZy5y
ZWQ7CisgICAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdbQVRfWlZdLmdyZWVuID0gcG9zdF9maWxs
X2F0X3p2X2ZnLmdyZWVuOworICAgICAgICAgIGVzc2VudGlhbHMtPmNoX2ZnW0FUX1pWXS5ibHVl
ID0gcG9zdF9maWxsX2F0X3p2X2ZnLmJsdWU7CisgICAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdb
UE9TVF9aVl0ucmVkID0gcG9zdF9maWxsX3Bvc3RfenZfZmcucmVkOworICAgICAgICAgIGVzc2Vu
dGlhbHMtPmNoX2ZnW1BPU1RfWlZdLmdyZWVuID0gcG9zdF9maWxsX3Bvc3RfenZfZmcuZ3JlZW47
CisgICAgICAgICAgZXNzZW50aWFscy0+Y2hfZmdbUE9TVF9aVl0uYmx1ZSA9IHBvc3RfZmlsbF9w
b3N0X3p2X2ZnLmJsdWU7CisgICAgICAgIH0KK30KKwordm9pZAorbWNfY29sb3JfcGlja2VyIChz
dHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGggKmdseXBoLCBzdHJ1Y3QgbWNfZXNzZW50aWFs
cyBlc3NlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCICpsc2xfZmcs
IGludCBwb3NpbnQsIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUsCisgICAgICAgICAg
ICAgICAgICAgIGVudW0gbWNfcm93X3Bvc2l0aW9uIHJvd19wb3NpdGlvbiwgZW51bSBtY19lbmdp
bmVfdHlwZSBhY3Rpb25fdHlwZSkKK3sKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworICAg
IGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBY
RlJBTUUgKHctPmZyYW1lKTsKKyAgICAgIHB0cmRpZmZfdCBjdXJyZW50X2NvbCA9IG1jX2N1cnJl
bnRfY29sdW1uICh3LCBwb3NpbnQpOworICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIg
KHctPmNvbnRlbnRzKTsKKyAgICAgIGJvb2wgZmlsbF9jb2x1bW5fcCA9ICFOSUxQIChCVkFSIChi
LCBmaWxsX2NvbHVtbikpOworICAgICAgaW50IGZpbGxfY29sID0gKGZpbGxfY29sdW1uX3ApCisg
ICAgICAgICAgICAgICAgICAgICA/IFhGSVhOVU0gKEJWQVIgKGIsIGZpbGxfY29sdW1uKSkKKyAg
ICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgIGVudW0gZmFjZV9pZCBldmVuX2ZhY2VfaWQg
PQorICAgICAgICAoIWVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICYmICFOSUxQIChCVkFS
IChYQlVGRkVSICh3LT5jb250ZW50cyksIGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAg
PyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLWluYWN0aXZlLXByZS16
di1mYWNlIiksIHRydWUpCisgICAgICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVy
biAoIistZXZlbi1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgIHN0cnVjdCBmYWNlICpldmVu
X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGV2ZW5fZmFjZV9pZCk7CisgICAgICBMaXNwX09iamVj
dCBldmVuX2NvbG9yID0gZXZlbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsK
KyAgICAgIHN0cnVjdCBtY19SR0IgZXZlbl9mb3JlZ3JvdW5kOworICAgICAgbWNfeHdfY29sb3Jf
dmFsdWVzICh3LCBldmVuX2NvbG9yLCAmZXZlbl9mb3JlZ3JvdW5kKTsKKyAgICAgIGVudW0gZmFj
ZV9pZCBvZGRfZmFjZV9pZCA9CisgICAgICAgICghZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAg
ICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2lu
ZG93cykpKQorICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9k
ZC1pbmFjdGl2ZS1wcmUtenYtZmFjZSIpLCB0cnVlKQorICAgICAgICA6IGxvb2t1cF9uYW1lZF9m
YWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgIHN0
cnVjdCBmYWNlICpvZGRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgb2RkX2ZhY2VfaWQpOworICAg
ICAgTGlzcF9PYmplY3Qgb2RkX2NvbG9yID0gb2RkX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9V
TkRfSU5ERVhdOworICAgICAgc3RydWN0IG1jX1JHQiBvZGRfZm9yZWdyb3VuZDsKKyAgICAgIG1j
X3h3X2NvbG9yX3ZhbHVlcyAodywgb2RkX2NvbG9yLCAmb2RkX2ZvcmVncm91bmQpOworICAgICAg
ZW51bSBmYWNlX2lkIGJleW9uZF9maWxsX2ZhY2VfaWQgPQorICAgICAgICAoIWVzc2VudGlhbHMu
YWN0aXZlX3AKKyAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks
IGNoX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywg
ZiwgaW50ZXJuICgiKy1wb3N0LWZpbGwtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAg
ICAgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1wb3N0LWZpbGwtcHJl
LXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICBzdHJ1Y3QgZmFjZSAqYmV5b25kX2ZpbGxfZmFjZSA9
IEZBQ0VfRlJPTV9JRCAoZiwgYmV5b25kX2ZpbGxfZmFjZV9pZCk7CisgICAgICBMaXNwX09iamVj
dCBiZXlvbmRfZmlsbF9jb2xvciA9IGJleW9uZF9maWxsX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVH
Uk9VTkRfSU5ERVhdOworICAgICAgc3RydWN0IG1jX1JHQiBiZXlvbmRfZmlsbF9mb3JlZ3JvdW5k
OworICAgICAgbWNfeHdfY29sb3JfdmFsdWVzICh3LCBiZXlvbmRfZmlsbF9jb2xvciwgJmJleW9u
ZF9maWxsX2ZvcmVncm91bmQpOworICAgICAgLyogcmVkICovCisgICAgICBpZiAoKCFmaWxsX2Nv
bHVtbl9wCisgICAgICAgICAgICYmIGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAgICAgICYm
IHJvd19wb3NpdGlvbiA9PSBQUkVfWlYpCisgICAgICAgICAgfHwgKGZpbGxfY29sdW1uX3AKKyAg
ICAgICAgICAgICAgJiYgY3VycmVudF9jb2wgJSAyICE9IDAKKyAgICAgICAgICAgICAgJiYgY3Vy
cmVudF9jb2wgPD0gZmlsbF9jb2wKKyAgICAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IFBS
RV9aVikpCisgICAgICAgIHsKKyAgICAgICAgICBsc2xfZmctPnJlZCA9IG9kZF9mb3JlZ3JvdW5k
LnJlZDsKKyAgICAgICAgICBsc2xfZmctPmdyZWVuID0gb2RkX2ZvcmVncm91bmQuZ3JlZW47Cisg
ICAgICAgICAgbHNsX2ZnLT5ibHVlID0gb2RkX2ZvcmVncm91bmQuYmx1ZTsKKyAgICAgICAgfQor
ICAgICAgICAvKiB5ZWxsb3cgKi8KKyAgICAgICAgZWxzZSBpZiAoKCFmaWxsX2NvbHVtbl9wCisg
ICAgICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCAlIDIgPT0gMAorICAgICAgICAgICAgICAg
ICAgJiYgcm93X3Bvc2l0aW9uID09IFBSRV9aVikKKyAgICAgICAgICAgICAgICAgfHwgKGZpbGxf
Y29sdW1uX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGN1cnJlbnRfY29sICUgMiA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbAorICAgICAgICAg
ICAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IFBSRV9aVikpCisgICAgICAgICAgeworICAg
ICAgICAgICAgbHNsX2ZnLT5yZWQgPSBldmVuX2ZvcmVncm91bmQucmVkOworICAgICAgICAgICAg
bHNsX2ZnLT5ncmVlbiA9IGV2ZW5fZm9yZWdyb3VuZC5ncmVlbjsKKyAgICAgICAgICAgIGxzbF9m
Zy0+Ymx1ZSA9IGV2ZW5fZm9yZWdyb3VuZC5ibHVlOworICAgICAgICAgIH0KKyAgICAgICAgICAv
KiBncmVlbiAqLworICAgICAgICAgIGVsc2UgaWYgKGZpbGxfY29sdW1uX3AKKyAgICAgICAgICAg
ICAgICAgICAmJiBjdXJyZW50X2NvbCA+IGZpbGxfY29sCisgICAgICAgICAgICAgICAgICAgJiYg
cm93X3Bvc2l0aW9uID09IFBSRV9aVikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHNs
X2ZnLT5yZWQgPSBiZXlvbmRfZmlsbF9mb3JlZ3JvdW5kLnJlZDsKKyAgICAgICAgICAgICAgbHNs
X2ZnLT5ncmVlbiA9IGJleW9uZF9maWxsX2ZvcmVncm91bmQuZ3JlZW47CisgICAgICAgICAgICAg
IGxzbF9mZy0+Ymx1ZSA9IGJleW9uZF9maWxsX2ZvcmVncm91bmQuYmx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJvd19wb3NpdGlvbiA9PSBBVF9aVikKKyAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGxzbF9mZy0+cmVkID0gZXNzZW50aWFscy5zcF9mZy5y
ZWQ7CisgICAgICAgICAgICAgICAgbHNsX2ZnLT5ncmVlbiA9IGVzc2VudGlhbHMuc3BfZmcuZ3Jl
ZW47CisgICAgICAgICAgICAgICAgbHNsX2ZnLT5ibHVlID0gZXNzZW50aWFscy5zcF9mZy5ibHVl
OworICAgICAgICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIT1JJWk9O
VEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGlmIChnbHlwaCAhPSBOVUxMCisgICAgICAgICAgJiYg
Z2x5cGgtPnUuY2ggPT0gOTUKKyAgICAgICAgICAmJiBjdXJzb3JfdHlwZSA9PSBNQ19IQkFSKQor
ICAgICAgICB7CisgICAgICAgICAgbHNsX2ZnLT5yZWQgPSBlc3NlbnRpYWxzLnNwX2ZnLnJlZDsK
KyAgICAgICAgICBsc2xfZmctPmdyZWVuID0gZXNzZW50aWFscy5zcF9mZy5ncmVlbjsKKyAgICAg
ICAgICBsc2xfZmctPmJsdWUgPSBlc3NlbnRpYWxzLnNwX2ZnLmJsdWU7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxzbF9mZy0+cmVkID0gZXNzZW50
aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25dLnJlZDsKKyAgICAgICAgICAgIGxzbF9mZy0+Z3JlZW4g
PSBlc3NlbnRpYWxzLmNoX2ZnW3Jvd19wb3NpdGlvbl0uZ3JlZW47CisgICAgICAgICAgICBsc2xf
ZmctPmJsdWUgPSBlc3NlbnRpYWxzLmNoX2ZnW3Jvd19wb3NpdGlvbl0uYmx1ZTsKKyAgICAgICAg
ICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7
CisgICAgICBsc2xfZmctPnJlZCA9IGVzc2VudGlhbHMuY2hfZmdbcm93X3Bvc2l0aW9uXS5yZWQ7
CisgICAgICBsc2xfZmctPmdyZWVuID0gZXNzZW50aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25dLmdy
ZWVuOworICAgICAgbHNsX2ZnLT5ibHVlID0gZXNzZW50aWFscy5jaF9mZ1tyb3dfcG9zaXRpb25d
LmJsdWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGSUxMX0NPTFVNTjoKKyAgICB7
CisgICAgICBsc2xfZmctPnJlZCA9IGVzc2VudGlhbHMuZmNfZmdbcm93X3Bvc2l0aW9uXS5yZWQ7
CisgICAgICBsc2xfZmctPmdyZWVuID0gZXNzZW50aWFscy5mY19mZ1tyb3dfcG9zaXRpb25dLmdy
ZWVuOworICAgICAgbHNsX2ZnLT5ibHVlID0gZXNzZW50aWFscy5mY19mZ1tyb3dfcG9zaXRpb25d
LmJsdWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDVVJTT1JfSU5ESUNBVE9SOgor
ICAgIHsKKyAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICAgICAg
ZW51bSBmYWNlX2lkIGN1cnNvcl9mYWNlX2lkID0KKyAgICAgICAgKCFlc3NlbnRpYWxzLmFjdGl2
ZV9wCisgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjaF9p
bmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgICAgICYmIHJvd19wb3NpdGlvbiA9PSBQUkVfWlYpCisg
ICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut
Y3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpCisgICAgICAgIDogKGVzc2VudGlh
bHMuYWN0aXZlX3AKKyAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IFBSRV9aVikKKyAgICAg
ICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJz
b3ItcHJlLXp2LWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgOiAoIWVzc2VudGlhbHMuYWN0aXZlX3AK
KyAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5h
Y3RpdmVfd2luZG93cykpCisgICAgICAgICAgICYmIHJvd19wb3NpdGlvbiA9PSBBVF9aVikKKyAg
ICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtl
LWN1cnNvci1pbmFjdGl2ZS1hdC16di1mYWNlIiksIHRydWUpCisgICAgICAgIDogKGVzc2VudGlh
bHMuYWN0aXZlX3AKKyAgICAgICAgICAgJiYgcm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAg
ICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv
ci1hdC16di1mYWNlIiksIHRydWUpCisgICAgICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYs
IGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1hdC16di1mYWNlIiksIHRydWUpOworICAgICAg
c3RydWN0IGZhY2UgKmN1cnNvcl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBjdXJzb3JfZmFjZV9p
ZCk7CisgICAgICBMaXNwX09iamVjdCBjdXJzb3JfY29sb3IgPSBjdXJzb3JfZmFjZS0+bGZhY2Vb
TEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgICAgICBtY194d19jb2xvcl92YWx1ZXMgKHcsIGN1
cnNvcl9jb2xvciwgbHNsX2ZnKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCisvKiBE
cmF3IGdseXBocyBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaW4gQVJFQSBvZiBST1cgb24gd2luZG93
IFcsCisgICBzdGFydGluZyBhdCB4LXBvc2l0aW9uIFguICBYIGlzIHJlbGF0aXZlIHRvIEFSRUEg
aW4gVy4gIEhMIGlzIGEKKyAgIGZhY2Utb3ZlcnJpZGUgd2l0aCB0aGUgZm9sbG93aW5nIG1lYW5p
bmc6CisgICAtICBEUkFXX05PUk1BTF9URVhUICBkcmF3IG5vcm1hbGx5CisgICAtICBEUkFXX0NV
UlNPUiAgICBkcmF3IGluIGN1cnNvciBmYWNlCisgICAtICBEUkFXX01PVVNFX0ZBQ0UgIGRyYXcg
aW4gbW91c2UgZmFjZS4KKyAgIC0gIERSQVdfSU5WRVJTRV9WSURFTyAgZHJhdyBpbiBtb2RlIGxp
bmUgZmFjZQorICAgLSAgRFJBV19JTUFHRV9TVU5LRU4gIGRyYXcgYW4gaW1hZ2Ugd2l0aCBhIHN1
bmtlbiByZWxpZWYgYXJvdW5kIGl0CisgICAtICBEUkFXX0lNQUdFX1JBSVNFRCAgZHJhdyBhbiBp
bWFnZSB3aXRoIGEgcmFpc2VkIHJlbGllZiBhcm91bmQgaXQKKyAgIElmIE9WRVJMQVBTIGlzIG5v
bi16ZXJvLCBkcmF3IG9ubHkgdGhlIGZvcmVncm91bmQgb2YgY2hhcmFjdGVycyBhbmQKKyAgIGNs
aXAgdG8gdGhlIHBoeXNpY2FsIGhlaWdodCBvZiBST1cuICBOb24temVybyB2YWx1ZSBhbHNvIGRl
ZmluZXMKKyAgIHRoZSBvdmVybGFwcGluZyBwYXJ0IHRvIGJlIGRyYXduOgorICAgLSAgT1ZFUkxB
UFNfUFJFRCAgICBvdmVybGFwIHdpdGggcHJlY2VkaW5nIHJvd3MKKyAgIC0gIE9WRVJMQVBTX1NV
Q0MgICAgb3ZlcmxhcCB3aXRoIHN1Y2NlZWRpbmcgcm93cworICAgLSAgT1ZFUkxBUFNfQk9USCAg
ICBvdmVybGFwIHdpdGggYm90aCBwcmVjZWRpbmcvc3VjY2VlZGluZyByb3dzCisgICAtICBPVkVS
TEFQU19FUkFTRURfQ1VSU09SICBvdmVybGFwIHdpdGggZXJhc2VkIGN1cnNvciBhcmVhCisgICBW
YWx1ZSBpcyB0aGUgeC1wb3NpdGlvbiByZWFjaGVkLCByZWxhdGl2ZSB0byBBUkVBIG9mIFcuICov
CitpbnQKK21jX2RyYXdfZ2x5cGhzIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0
cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgICAgICAgICAgICAgICBzdHJ1
Y3QgbWNfbWF0cml4IG1jX21hdHJpeCwgaW50IHgsIGVudW0gZ2x5cGhfcm93X2FyZWEgYXJlYSwK
KyAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc3RhcnQsIHB0cmRpZmZfdCBlbmQsIGVudW0gZHJh
d19nbHlwaHNfZmFjZSBobCwKKyAgICAgICAgICAgICAgICBpbnQgb3ZlcmxhcHMsIGludCB2cG9z
LCBzdHJ1Y3QgbWNfUkdCIGxzbCwKKyAgICAgICAgICAgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlw
aF9mbGF2b3IsIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAg
ICAgaW50IHdkLCBib29sIGFjdGl2ZV9wLCBib29sIGN1cnNvcl9nY19wLAorICAgICAgICAgICAg
ICAgIGVudW0gZHJhd19nbHlwaF9hY3Rpb24gYWN0aW9uX3R5cGUsIGJvb2wgZHJhd19wKQorewor
ICBpbnQgc3RhcnRfeCA9IHg7CisgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgaW50IGxlbmd0aCA9
IDA7CisgIC8vICBpZiAobWNfc3RkZXJyX3ApCisgIC8vICAgIHsKKyAgLy8gICAgICBpbnQgc3Rh
cnRfaHBvcyA9IHN0YXJ0OworICAvLyAgICAgIGludCBlbmRfaHBvcyA9IGVuZDsKKyAgLy8gICAg
ICBmcHJpbnRmIChzdGRlcnIsICJtY19kcmF3X2dseXBocyAoJWQpOiAgc3RhcnRfeCAoJWQpIHwg
c3RhcnRfaHBvcyAoJWQpIHwgZW5kX2hwb3MgKCVkKVxuIiwKKyAgLy8gICAgICAgICAgICAgICAg
ICAgICAgIHZwb3MsIHN0YXJ0X3gsIHN0YXJ0X2hwb3MsIGVuZF9ocG9zKTsKKyAgLy8gICAgfQor
ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICBzdHJ1Y3Qg
Z2x5cGhfc3RyaW5nICpoZWFkLCAqdGFpbDsKKyAgc3RydWN0IGdseXBoX3N0cmluZyAqczsKKyAg
c3RydWN0IGdseXBoX3N0cmluZyAqY2xpcF9oZWFkID0gTlVMTCwgKmNsaXBfdGFpbCA9IE5VTEw7
CisgIGludCBpLCBqLCB4X3JlYWNoZWQsIGxhc3RfeCwgYXJlYV9sZWZ0ID0gMDsKKyAgTUNfREVD
TEFSRV9IREMgKGhkYyk7CisgIE1DX0FMTE9DQVRFX0hEQyAoaGRjLCBmKTsKKyAgLyogTGV0J3Mg
cmF0aGVyIGJlIHBhcmFub2lkIHRoYW4gZ2V0dGluZyBhIFNFR1YuICovCisgIGVuZCA9IG1pbiAo
ZW5kLCByb3ctPnVzZWRbYXJlYV0pOworICBzdGFydCA9IGNsaXBfdG9fYm91bmRzICgwLCBzdGFy
dCwgZW5kKTsKKyAgLyogVHJhbnNsYXRlIFggdG8gZnJhbWUgY29vcmRpbmF0ZXMuICBTZXQgbGFz
dF94IHRvIHRoZSByaWdodAorICAgICBlbmQgb2YgdGhlIGRyYXdpbmcgYXJlYS4gKi8KKyAgaWYg
KHJvdy0+ZnVsbF93aWR0aF9wKQorICAgIHsKKyAgICAgIC8qIFggaXMgcmVsYXRpdmUgdG8gdGhl
IGxlZnQgZWRnZSBvZiBXLCB3aXRob3V0IHNjcm9sbCBiYXJzCisgICBvciBmcmluZ2VzLiAqLwor
ICAgICAgYXJlYV9sZWZ0ID0gV0lORE9XX0xFRlRfRURHRV9YICh3KTsKKyAgICAgIGxhc3RfeCA9
IChXSU5ET1dfTEVGVF9FREdFX1ggKHcpICsgV0lORE9XX1BJWEVMX1dJRFRIICh3KQorICAgICAg
ICAgICAgICAgIC0gKHJvdy0+bW9kZV9saW5lX3AgPyBXSU5ET1dfUklHSFRfRElWSURFUl9XSURU
SCAodykgOiAwKSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgYXJlYV9sZWZ0
ID0gd2luZG93X2JveF9sZWZ0ICh3LCBhcmVhKTsKKyAgICAgICAgbGFzdF94ID0gYXJlYV9sZWZ0
ICsgd2luZG93X2JveF93aWR0aCAodywgYXJlYSk7CisgICAgICB9CisgIHggKz0gYXJlYV9sZWZ0
OworICAvKiBCdWlsZCBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBnbHlwaF9zdHJpbmcgc3RydWN0
dXJlcyBiZXR3ZWVuCisgICAgIGhlYWQgYW5kIHRhaWwgZnJvbSB3aGF0IHdlIGhhdmUgdG8gZHJh
dy4gIE5vdGUgdGhhdCB0aGUgbWFjcm8KKyAgICAgTUNfQlVJTERfR0xZUEhfU1RSSU5HUyB3aWxs
IG1vZGlmeSBpdHMgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCdzCisgICAgIHRoZSByZWFzb24gd2Ug
dXNlIGEgc2VwYXJhdGUgdmFyaWFibGUgYGknLiAqLworICBpID0gc3RhcnQ7CisgIFVTRV9TQUZF
X0FMTE9DQTsKKyAgTUNfQlVJTERfR0xZUEhfU1RSSU5HUyAoaSwgZW5kLCBoZWFkLCB0YWlsLCBo
bCwgeCwgbGFzdF94KTsKKyAgaWYgKHRhaWwpCisgICAgeworICAgICAgcyA9IGdseXBoX3N0cmlu
Z19jb250YWluaW5nX2JhY2tncm91bmRfd2lkdGggKHRhaWwpOworICAgICAgeF9yZWFjaGVkID0g
cy0+eCArIHMtPmJhY2tncm91bmRfd2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHhfcmVh
Y2hlZCA9IHg7CisgIC8qIElmIHRoZXJlIGFyZSBhbnkgZ2x5cGhzIHdpdGggbGJlYXJpbmcgPCAw
IG9yIHJiZWFyaW5nID4gd2lkdGggaW4KKyAgICAgdGhlIHJvdywgcmVkcmF3IHNvbWUgZ2x5cGhz
IGluIGZyb250IG9yIGZvbGxvd2luZyB0aGUgZ2x5cGgKKyAgICAgc3RyaW5ncyBidWlsdCBhYm92
ZS4gKi8KKyAgaWYgKGhlYWQgJiYgIW92ZXJsYXBzICYmIHJvdy0+Y29udGFpbnNfb3ZlcmxhcHBp
bmdfZ2x5cGhzX3ApCisgICAgeworICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqaCwgKnQ7Cisg
ICAgICBNb3VzZV9ITEluZm8gKmhsaW5mbyA9IE1PVVNFX0hMX0lORk8gKGYpOworICAgICAgaW50
IG1vdXNlX2JlZ19jb2wgVU5JTklULCBtb3VzZV9lbmRfY29sIFVOSU5JVDsKKyAgICAgIGJvb2wg
Y2hlY2tfbW91c2VfZmFjZSA9IGZhbHNlOworICAgICAgaW50IGR1bW15X3ggPSAwOworICAgICAg
LyogSWYgbW91c2UgaGlnaGxpZ2h0aW5nIGlzIG9uLCB3ZSBtYXkgbmVlZCB0byBkcmF3IGFkamFj
ZW50CisgICBnbHlwaHMgdXNpbmcgbW91c2UtZmFjZSBoaWdobGlnaHRpbmcuICovCisgICAgICBp
ZiAoYXJlYSA9PSBURVhUX0FSRUEgJiYgcm93LT5tb3VzZV9mYWNlX3AKKyAgICAgICAgICAmJiBo
bGluZm8tPm1vdXNlX2ZhY2VfYmVnX3JvdyA+PSAwCisgICAgICAgICAgJiYgaGxpbmZvLT5tb3Vz
ZV9mYWNlX2VuZF9yb3cgPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIHB0cmRpZmZfdCByb3df
dnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAocm93LCB3LT5jdXJyZW50X21hdHJpeCk7CisgICAgICAg
ICAgaWYgKHJvd192cG9zID49IGhsaW5mby0+bW91c2VfZmFjZV9iZWdfcm93CisgICAgICAgICAg
ICAgICYmIHJvd192cG9zIDw9IGhsaW5mby0+bW91c2VfZmFjZV9lbmRfcm93KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjaGVja19tb3VzZV9mYWNlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgbW91c2VfYmVnX2NvbCA9IChyb3dfdnBvcyA9PSBobGluZm8tPm1vdXNlX2ZhY2VfYmVnX3Jv
dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGxpbmZvLT5tb3VzZV9mYWNlX2Jl
Z19jb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgICAgICAgICAg
bW91c2VfZW5kX2NvbCA9IChyb3dfdnBvcyA9PSBobGluZm8tPm1vdXNlX2ZhY2VfZW5kX3JvdykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGxpbmZvLT5tb3VzZV9mYWNlX2VuZF9j
b2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcm93LT51c2VkW1RFWFRfQVJFQV07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIENvbXB1dGUgb3ZlcmhhbmdzIGZv
ciBhbGwgZ2x5cGggc3RyaW5ncy4gKi8KKyAgICAgIGlmIChGUkFNRV9SSUYgKGYpLT5jb21wdXRl
X2dseXBoX3N0cmluZ19vdmVyaGFuZ3MpCisgICAgICAgIGZvciAocyA9IGhlYWQ7IHM7IHMgPSBz
LT5uZXh0KQorICAgICAgICAgIEZSQU1FX1JJRiAoZiktPmNvbXB1dGVfZ2x5cGhfc3RyaW5nX292
ZXJoYW5ncyAocyk7CisgICAgICAvKiBQcmVwZW5kIGdseXBoIHN0cmluZ3MgZm9yIGdseXBocyBp
biBmcm9udCBvZiB0aGUgZmlyc3QgZ2x5cGgKKyAgICAgIHN0cmluZyB0aGF0IGFyZSBvdmVyd3Jp
dHRlbiBiZWNhdXNlIG9mIHRoZSBmaXJzdCBnbHlwaAorICAgICAgc3RyaW5nJ3MgbGVmdCBvdmVy
aGFuZy4gIFRoZSBiYWNrZ3JvdW5kIG9mIGFsbCBzdHJpbmdzCisgICAgICBwcmVwZW5kZWQgbXVz
dCBiZSBkcmF3biBiZWNhdXNlIHRoZSBmaXJzdCBnbHlwaCBzdHJpbmcKKyAgICAgIGRyYXdzIG92
ZXIgaXQuICovCisgICAgICBpID0gbGVmdF9vdmVyd3JpdHRlbiAoaGVhZCk7CisgICAgICBpZiAo
aSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIG92ZXJs
YXBfaGw7CisgICAgICAgICAgLyogSWYgdGhpcyByb3cgY29udGFpbnMgbW91c2UgaGlnaGxpZ2h0
aW5nLCBhdHRlbXB0IHRvIGRyYXcKKyAgICAgICAgICAgICB0aGUgb3ZlcmxhcHBlZCBnbHlwaHMg
d2l0aCB0aGUgY29ycmVjdCBoaWdobGlnaHQuICBUaGlzCisgICAgICAgICAgICAgY29kZSBmYWls
cyBpZiB0aGUgb3ZlcmxhcCBlbmNvbXBhc3NlcyBtb3JlIHRoYW4gb25lIGdseXBoCisgICAgICAg
ICAgICAgYW5kIG1vdXNlLWhpZ2hsaWdodCBzcGFucyBvbmx5IHNvbWUgb2YgdGhlc2UgZ2x5cGhz
LgorICAgICAgICAgICAgIEhvd2V2ZXIsIG1ha2luZyBpdCB3b3JrIHBlcmZlY3RseSBpbnZvbHZl
cyBhIGxvdCBtb3JlCisgICAgICAgICAgICAgY29kZSwgYW5kIEkgZG9uJ3Qga25vdyBpZiB0aGUg
cGF0aG9sb2dpY2FsIGNhc2Ugb2NjdXJzIGluCisgICAgICAgICAgICAgcHJhY3RpY2UsIHNvIHdl
J2xsIHN0aWNrIHRvIHRoaXMgZm9yIG5vdy4gIC0tLSBjeWQgICovCisgICAgICAgICAgaWYgKGNo
ZWNrX21vdXNlX2ZhY2UKKyAgICAgICAgICAgICAgJiYgbW91c2VfYmVnX2NvbCA8IHN0YXJ0ICYm
IG1vdXNlX2VuZF9jb2wgPiBpKQorICAgICAgICAgICAgb3ZlcmxhcF9obCA9IERSQVdfTU9VU0Vf
RkFDRTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgb3ZlcmxhcF9obCA9IERSQVdf
Tk9STUFMX1RFWFQ7CisgICAgICAgICAgaWYgKGhsICE9IG92ZXJsYXBfaGwpCisgICAgICAgICAg
ICBjbGlwX2hlYWQgPSBoZWFkOworICAgICAgICAgIGogPSBpOworICAgICAgICAgIE1DX0JVSUxE
X0dMWVBIX1NUUklOR1MgKGosIHN0YXJ0LCBoLCB0LCBvdmVybGFwX2hsLCBkdW1teV94LCBsYXN0
X3gpOworICAgICAgICAgIC8qIFRoZSBgbGVmdF9vdmVyd3JpdHRlbmAgYmVoYXZpb3IgdGhhdCBl
cmFzZXMgdGhlIGZha2UgY3Vyc29ycyB0cmFjZXMgdG8KKyAgICAgICAgICBgZm9udC0+ZHJpdmVy
LT5kcmF3YCBpbiBgbnNfZHJhd19nbHlwaF9zdHJpbmcnOyBhbmQsIHRoZSBoZWlnaHQgb2YgdGhl
IHJlY3RhbmdsZQorICAgICAgICAgIGRyYXduIGJ5IGBuc19kdW1wZ2x5cGhzX3N0cmV0Y2gnOyBh
bmQsIGBuc19tYXliZV9kdW1wZ2x5cGhzX2JhY2tncm91bmQnIHdoaWNoCisgICAgICAgICAgZXJh
c2VzIHRoZSBhcHBsaWNhYmxlIHJlY3RhbmdsZS4gKi8KKyAgICAgICAgICAvKiBFWEFNUExFOiAg
CU0KKyAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIGhhdmUgYSB2aXNpYmxlIDE4NyAowrsp
IHRoYXQgaXMgZm9sbG93ZWQgYnkgYSB2aXNpYmxlCisgICAgICAgICAgVEFCX1NUUkVUQ0ggKGFz
IGEgcmVzdWx0IG9mIGEgY29ycmVzcG9uZGluZyBgYnVmZmVyLWRpc3BsYXktdGFibGUnIGVudHJ5
KSwKKyAgICAgICAgICBmb2xsb3dlZCBieSB3aWRlICJNIiwgZm9sbG93ZWQgYnkgYSBzcGFjZSBh
dCB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cKKyAgICAgICAgICAod2hpY2ggaGFzIG5vIGJ1ZmZl
ciBwb3NpdGlvbikuICBXaGVuIHBsYWNpbmcgYSBmYWtlIGN1cnNvciBvbiB0aGUgIk0iLAorICAg
ICAgICAgIGhsID09IERSQVdfQ1VSU09SIGFuZCB0aGUgU1RSRVRDSF9HTFlQSCBpcyBgbGVmdF9v
dmVyd3JpdHRlbmAuICBEcmF3aW5nCisgICAgICAgICAgbm9ybWFsIHRleHQgZHVyaW5nIGB1cGRh
dGVfd2luZG93JyAoRFJBV19OT1JNQUxfVEVYVCkgY2FuIGFsc28gZXJhc2UgZmFrZQorICAgICAg
ICAgIGN1cnNvcnMgdGhhdCBhcmUgYGxlZnRfb3ZlcndyaXR0ZW4nLiAqLworICAgICAgICAgIGxl
bmd0aCA9IDA7CisgICAgICAgICAgZm9yIChzID0gaDsgczsgcyA9IHMtPm5leHQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIHMtPmxlZnRfb3ZlcndyaXR0ZW5fcCA9IHRydWU7CisgICAg
ICAgICAgICAgIHMtPmFjdGlvbl90eXBlID0gYWN0aW9uX3R5cGU7CisgICAgICAgICAgICAgIGxl
bmd0aCArPSBzLT5maXJzdF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgcmVsYXRpdmVfeCA9IHN0YXJ0X3ggLSBsZW5ndGg7CisgICAgICAgICAgZm9yIChzID0g
aDsgczsgcyA9IHMtPm5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHMtPmZpcnN0
X2dseXBoLT5yZWxhdGl2ZV94ID0gcmVsYXRpdmVfeDsKKyAgICAgICAgICAgICAgcmVsYXRpdmVf
eCArPSBzLT5maXJzdF9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgc3RhcnQgPSBpOworICAgICAgICAgIGNvbXB1dGVfb3ZlcmhhbmdzX2FuZF94ICh0LCBoZWFk
LT54LCB0cnVlKTsKKyAgICAgICAgICBwcmVwZW5kX2dseXBoX3N0cmluZ19saXN0cyAoJmhlYWQs
ICZ0YWlsLCBoLCB0KTsKKyAgICAgICAgICBpZiAoY2xpcF9oZWFkID09IE5VTEwpCisgICAgICAg
ICAgICBjbGlwX2hlYWQgPSBoZWFkOworICAgICAgICB9CisgICAgICAvKiBQcmVwZW5kIGdseXBo
IHN0cmluZ3MgZm9yIGdseXBocyBpbiBmcm9udCBvZiB0aGUgZmlyc3QgZ2x5cGgKKyAgICAgIHN0
cmluZyB0aGF0IG92ZXJ3cml0ZSB0aGF0IGdseXBoIHN0cmluZyBiZWNhdXNlIG9mIHRoZWlyCisg
ICAgICByaWdodCBvdmVyaGFuZy4gIEZvciB0aGVzZSBzdHJpbmdzLCBvbmx5IHRoZSBmb3JlZ3Jv
dW5kIG11c3QKKyAgICAgIGJlIGRyYXduLCBiZWNhdXNlIGl0IGRyYXdzIG92ZXIgdGhlIGdseXBo
IHN0cmluZyBhdCBgaGVhZCcuCisgICAgICBUaGUgYmFja2dyb3VuZCBtdXN0IG5vdCBiZSBkcmF3
biBiZWNhdXNlIHRoaXMgd291bGQgb3ZlcndyaXRlCisgICAgICByaWdodCBvdmVyaGFuZ3Mgb2Yg
cHJlY2VkaW5nIGdseXBocyBmb3Igd2hpY2ggbm8gZ2x5cGgKKyAgICAgIHN0cmluZ3MgZXhpc3Qu
ICovCisgICAgICBpID0gbGVmdF9vdmVyd3JpdGluZyAoaGVhZCk7CisgICAgICBpZiAoaSA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7
CisgICAgICAgICAgaWYgKGNoZWNrX21vdXNlX2ZhY2UKKyAgICAgICAgICAgICAgJiYgbW91c2Vf
YmVnX2NvbCA8IHN0YXJ0ICYmIG1vdXNlX2VuZF9jb2wgPiBpKQorICAgICAgICAgICAgb3Zlcmxh
cF9obCA9IERSQVdfTU9VU0VfRkFDRTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
b3ZlcmxhcF9obCA9IERSQVdfTk9STUFMX1RFWFQ7CisgICAgICAgICAgaWYgKGhsID09IG92ZXJs
YXBfaGwgfHwgY2xpcF9oZWFkID09IE5VTEwpCisgICAgICAgICAgICBjbGlwX2hlYWQgPSBoZWFk
OworICAgICAgICAgIE1DX0JVSUxEX0dMWVBIX1NUUklOR1MgKGksIHN0YXJ0LCBoLCB0LCBvdmVy
bGFwX2hsLCBkdW1teV94LCBsYXN0X3gpOworICAgICAgICAgIGZvciAocyA9IGg7IHM7IHMgPSBz
LT5uZXh0KQorICAgICAgICAgICAgcy0+YmFja2dyb3VuZF9maWxsZWRfcCA9IHRydWU7CisgICAg
ICAgICAgY29tcHV0ZV9vdmVyaGFuZ3NfYW5kX3ggKHQsIGhlYWQtPngsIHRydWUpOworICAgICAg
ICAgIHByZXBlbmRfZ2x5cGhfc3RyaW5nX2xpc3RzICgmaGVhZCwgJnRhaWwsIGgsIHQpOworICAg
ICAgICB9CisgICAgICAvKiBBcHBlbmQgZ2x5cGhzIHN0cmluZ3MgZm9yIGdseXBocyBmb2xsb3dp
bmcgdGhlIGxhc3QgZ2x5cGgKKyAgICAgIHN0cmluZyB0YWlsIHRoYXQgYXJlIG92ZXJ3cml0dGVu
IGJ5IHRhaWwuICBUaGUgYmFja2dyb3VuZCBvZgorICAgICAgdGhlc2Ugc3RyaW5ncyBoYXMgdG8g
YmUgZHJhd24gYmVjYXVzZSB0YWlsJ3MgZm9yZWdyb3VuZCBkcmF3cworICAgICAgb3ZlciBpdC4g
Ki8KKyAgICAgIGkgPSByaWdodF9vdmVyd3JpdHRlbiAodGFpbCk7CisgICAgICBpZiAoaSA+PSAw
KQorICAgICAgICB7CisgICAgICAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7
CisgICAgICAgICAgaWYgKGNoZWNrX21vdXNlX2ZhY2UKKyAgICAgICAgICAgICAgJiYgbW91c2Vf
YmVnX2NvbCA8IGkgJiYgbW91c2VfZW5kX2NvbCA+IGVuZCkKKyAgICAgICAgICAgIG92ZXJsYXBf
aGwgPSBEUkFXX01PVVNFX0ZBQ0U7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG92
ZXJsYXBfaGwgPSBEUkFXX05PUk1BTF9URVhUOworICAgICAgICAgIGlmIChobCAhPSBvdmVybGFw
X2hsKQorICAgICAgICAgICAgY2xpcF90YWlsID0gdGFpbDsKKyAgICAgICAgICBNQ19CVUlMRF9H
TFlQSF9TVFJJTkdTIChlbmQsIGksIGgsIHQsIG92ZXJsYXBfaGwsIHgsIGxhc3RfeCk7CisgICAg
ICAgIC8qIFRoZSBgcmlnaHRfb3ZlcndyaXR0ZW5gIGJlaGF2aW9yIHRoYXQgZXJhc2VzIHRoZSBm
YWtlIGN1cnNvcnMgdHJhY2VzIHRvCisgICAgICAgIGBmb250LT5kcml2ZXItPmRyYXdgIGluIGBu
c19kcmF3X2dseXBoX3N0cmluZyc7IGFuZCwgdGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlCisg
ICAgICAgIGRyYXduIGJ5IGBuc19kdW1wZ2x5cGhzX3N0cmV0Y2gnOyBhbmQsIGBuc19tYXliZV9k
dW1wZ2x5cGhzX2JhY2tncm91bmQnIHdoaWNoCisgICAgICAgIGVyYXNlcyB0aGUgYXBwbGljYWJs
ZSByZWN0YW5nbGUuICovCisgICAgICAgIC8qIEVYQU1QTEU6ICAiRW1hY3MgR3VpZGVkIFRvdXIJ
T3ZlcnZpZXciLgorICAgICAgICByaWdodF9vdmVyd3JpdHRlbiAoR05VIEVtYWNzIHdlbGNvbWUg
c2NyZWVuIHdpdGhvdXQgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJykKKyAgICAgICAgYW5kIHRoZSBy
ZWFsIGZha2UgY3Vyc29yIGlzIHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQgb2YgdGhlIHdvcmQgIlRv
dXIiOiAqLworICAgICAgICByZWxhdGl2ZV94ID0gc3RhcnRfeDsKKyAgICAgICAgZm9yIChzID0g
aDsgczsgcyA9IHMtPm5leHQpCisgICAgICAgICAgeworICAgICAgICAgICAgcy0+cmlnaHRfb3Zl
cndyaXR0ZW5fcCA9IHRydWU7CisgICAgICAgICAgICBzLT5hY3Rpb25fdHlwZSA9IGFjdGlvbl90
eXBlOworICAgICAgICAgICAgcmVsYXRpdmVfeCArPSBzLT5maXJzdF9nbHlwaC0+cGl4ZWxfd2lk
dGg7CisgICAgICAgICAgICBzLT5maXJzdF9nbHlwaC0+cmVsYXRpdmVfeCA9IHJlbGF0aXZlX3g7
CisgICAgICAgICAgfQorICAgICAgICAgIC8qIEJlY2F1c2UgTUNfQlVJTERfR0xZUEhfU1RSSU5H
UyB1cGRhdGVzIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICB3ZSBkb24ndCBoYXZlIGBl
bmQgPSBpOycgaGVyZS4gKi8KKyAgICAgICAgICBjb21wdXRlX292ZXJoYW5nc19hbmRfeCAoaCwg
dGFpbC0+eCArIHRhaWwtPndpZHRoLCBmYWxzZSk7CisgICAgICAgICAgYXBwZW5kX2dseXBoX3N0
cmluZ19saXN0cyAoJmhlYWQsICZ0YWlsLCBoLCB0KTsKKyAgICAgICAgICBpZiAoY2xpcF90YWls
ID09IE5VTEwpCisgICAgICAgICAgICBjbGlwX3RhaWwgPSB0YWlsOworICAgICAgICB9CisgICAg
ICAvKiBBcHBlbmQgZ2x5cGggc3RyaW5ncyBmb3IgZ2x5cGhzIGZvbGxvd2luZyB0aGUgbGFzdCBn
bHlwaAorICAgICAgc3RyaW5nIHRhaWwgdGhhdCBvdmVyd3JpdGUgdGFpbC4gIFRoZSBmb3JlZ3Jv
dW5kIG9mIHN1Y2gKKyAgICAgIGdseXBocyBoYXMgdG8gYmUgZHJhd24gYmVjYXVzZSBpdCB3cml0
ZXMgaW50byB0aGUgYmFja2dyb3VuZAorICAgICAgb2YgdGFpbC4gIFRoZSBiYWNrZ3JvdW5kIG11
c3Qgbm90IGJlIGRyYXduIGJlY2F1c2UgaXQgY291bGQKKyAgICAgIHBhaW50IG92ZXIgdGhlIGZv
cmVncm91bmQgb2YgZm9sbG93aW5nIGdseXBocy4gKi8KKyAgICAgIGkgPSByaWdodF9vdmVyd3Jp
dGluZyAodGFpbCk7CisgICAgICBpZiAoaSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgZW51
bSBkcmF3X2dseXBoc19mYWNlIG92ZXJsYXBfaGw7CisgICAgICAgICAgaWYgKGNoZWNrX21vdXNl
X2ZhY2UKKyAgICAgICAgICAgICAgJiYgbW91c2VfYmVnX2NvbCA8IGkgJiYgbW91c2VfZW5kX2Nv
bCA+IGVuZCkKKyAgICAgICAgICAgIG92ZXJsYXBfaGwgPSBEUkFXX01PVVNFX0ZBQ0U7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG92ZXJsYXBfaGwgPSBEUkFXX05PUk1BTF9URVhU
OworICAgICAgICAgIGlmIChobCA9PSBvdmVybGFwX2hsIHx8IGNsaXBfdGFpbCA9PSBOVUxMKQor
ICAgICAgICAgICAgY2xpcF90YWlsID0gdGFpbDsKKyAgICAgICAgICBpKys7ICAgICAgLyogV2Ug
bXVzdCBpbmNsdWRlIHRoZSBJdGggZ2x5cGguICovCisgICAgICAgICAgTUNfQlVJTERfR0xZUEhf
U1RSSU5HUyAoZW5kLCBpLCBoLCB0LCBvdmVybGFwX2hsLCB4LCBsYXN0X3gpOworICAgICAgICAg
IGZvciAocyA9IGg7IHM7IHMgPSBzLT5uZXh0KQorICAgICAgICAgICAgcy0+YmFja2dyb3VuZF9m
aWxsZWRfcCA9IHRydWU7CisgICAgICAgICAgY29tcHV0ZV9vdmVyaGFuZ3NfYW5kX3ggKGgsIHRh
aWwtPnggKyB0YWlsLT53aWR0aCwgZmFsc2UpOworICAgICAgICAgIGFwcGVuZF9nbHlwaF9zdHJp
bmdfbGlzdHMgKCZoZWFkLCAmdGFpbCwgaCwgdCk7CisgICAgICAgIH0KKyAgICAgIHRhaWwgPSBn
bHlwaF9zdHJpbmdfY29udGFpbmluZ19iYWNrZ3JvdW5kX3dpZHRoICh0YWlsKTsKKyAgICAgIGlm
IChjbGlwX3RhaWwpCisgICAgICAgIGNsaXBfdGFpbCA9IGdseXBoX3N0cmluZ19jb250YWluaW5n
X2JhY2tncm91bmRfd2lkdGggKGNsaXBfdGFpbCk7CisgICAgICBpZiAoY2xpcF9oZWFkIHx8IGNs
aXBfdGFpbCkKKyAgICAgICAgZm9yIChzID0gaGVhZDsgczsgcyA9IHMtPm5leHQpCisgICAgICAg
ICAgeworICAgICAgICAgICAgcy0+Y2xpcF9oZWFkID0gY2xpcF9oZWFkOworICAgICAgICAgICAg
cy0+Y2xpcF90YWlsID0gY2xpcF90YWlsOworICAgICAgICAgIH0KKyAgICB9CisgIC8qIERyYXcg
YWxsIHN0cmluZ3MuICovCisgIGZvciAocyA9IGhlYWQ7IHMgJiYgZHJhd19wOyBzID0gcy0+bmV4
dCkKKyAgICBGUkFNRV9SSUYgKGYpLT5tY19zY3JpYmVfc3RyaW5nIChzLCBtYXRyaXgsIHJvdywg
bWNfbWF0cml4LCBsc2wsIGdseXBoX2ZsYXZvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisjaWZu
ZGVmIEhBVkVfTlMKKyAgLyogV2hlbiBmb2N1cyBhIHNvbGUgZnJhbWUgYW5kIG1vdmUgaG9yaXpv
bnRhbGx5LCB0aGlzIGNsZWFycyBvbl9wCisgICAgIGNhdXNpbmcgYSBmYWlsdXJlIHRvIGVyYXNl
IHByZXYgY3Vyc29yIHBvc2l0aW9uLiAqLworICBpZiAoYXJlYSA9PSBURVhUX0FSRUEKKyAgICAg
ICYmICFyb3ctPmZ1bGxfd2lkdGhfcAorICAgICAgLyogV2hlbiBkcmF3aW5nIG92ZXJsYXBwaW5n
IHJvd3MsIG9ubHkgdGhlIGdseXBoIHN0cmluZ3MnCisgICAgICBmb3JlZ3JvdW5kIGlzIGRyYXdu
LCB3aGljaCBkb2Vzbid0IGVyYXNlIGEgY3Vyc29yIGNvbXBsZXRlbHkuICovCisgICAgICAmJiAh
b3ZlcmxhcHMpCisgICAgeworICAgICAgaW50IHgwID0gY2xpcF9oZWFkID8gY2xpcF9oZWFkLT54
IDogKGhlYWQgPyBoZWFkLT54IDogeCk7CisgICAgICBpbnQgeDEgPSAoY2xpcF90YWlsID8gY2xp
cF90YWlsLT54ICsgY2xpcF90YWlsLT5iYWNrZ3JvdW5kX3dpZHRoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogKHRhaWwgPyB0YWlsLT54ICsgdGFpbC0+YmFja2dyb3VuZF93aWR0aCA6IHgp
KTsKKyAgICAgIHgwIC09IGFyZWFfbGVmdDsKKyAgICAgIHgxIC09IGFyZWFfbGVmdDsKKyAgICAg
IG5vdGljZV9vdmVyd3JpdHRlbl9jdXJzb3IgKHcsIFRFWFRfQVJFQSwgeDAsIHgxLAorICAgICAg
ICAgcm93LT55LCBNQVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpKTsKKyAgICB9CisjZW5kaWYKKyAg
LyogVmFsdWUgaXMgdGhlIHgtcG9zaXRpb24gdXAgdG8gd2hpY2ggZHJhd24sIHJlbGF0aXZlIHRv
IEFSRUEgb2YgVy4KKyAgICAgVGhpcyBkb2Vzbid0IGluY2x1ZGUgcGFydHMgZHJhd24gYmVjYXVz
ZSBvZiBvdmVyaGFuZ3MuICovCisgIGlmIChyb3ctPmZ1bGxfd2lkdGhfcCkKKyAgICB4X3JlYWNo
ZWQgPSBGUkFNRV9UT19XSU5ET1dfUElYRUxfWCAodywgeF9yZWFjaGVkKTsKKyAgZWxzZQorICAg
IHhfcmVhY2hlZCAtPSBhcmVhX2xlZnQ7CisgIE1DX1JFTEVBU0VfSERDIChoZGMsIGYpOworICBT
QUZFX0ZSRUUgKCk7CisgIHJldHVybiB4X3JlYWNoZWQ7Cit9CisKKy8qIERyYXcgdGhlIGN1cnNv
ciBnbHlwaCBvZiB3aW5kb3cgVyBpbiBnbHlwaCByb3cgUk9XLiAgU2VlIHRoZQorICAgY29tbWVu
dCBvZiBkcmF3X2dseXBocyBmb3IgdGhlIG1lYW5pbmcgb2YgSEwuICovCit2b2lkCittY19kcmF3
X2N1cnNvcl9nbHlwaCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0
cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgICAgICAgZW51bSBk
cmF3X2dseXBoc19mYWNlIGhsLCBpbnQgeCwgaW50IGhwb3MsIGludCB2cG9zLAorICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsLCBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2
b3IsCisgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlw
ZSwgaW50IHdkLCBib29sIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Vy
c29yX2djX3ApCit7CisgIC8vICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9j
dXJzb3JfZ2x5cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAgLy8gIGZwcmludGYg
KHN0ZGVyciwgIm1jX2RyYXdfY3Vyc29yX2dseXBoOiAgY2ggKCVkKSB8IHggKCVkKSwgaHBvcyAo
JWQpLCB2cG9zKCVkKSwgaGwgKCVkKVxuIiwKKyAgLy8gICAgICAgICAgICAgICAgICAgIGN1cnNv
cl9nbHlwaC0+dS5jaCwgeCwgaHBvcywgdnBvcywgaGwpOworICBibG9ja19pbnB1dCAoKTsKKyAg
Ym9vbCBkcmF3X3AgPSB0cnVlOworICBtY19kcmF3X2dseXBocyAodywgbWF0cml4LCByb3csIHct
Pm1jX21hdHJpeCwgeCwgVEVYVF9BUkVBLCBocG9zLCBocG9zICsgMSwgaGwsCisgICAgICAgICAg
ICAgICAgICAwLCB2cG9zLCBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3Rp
dmVfcCwKKyAgICAgICAgICAgICAgICAgIGN1cnNvcl9nY19wLCBNQ19EUkFXX0dMWVBIX1NUUklO
RywgZHJhd19wKTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgLyogV2hlbiB3ZSBlcmFzZSB0aGUg
Y3Vyc29yLCBhbmQgUk9XIGlzIG92ZXJsYXBwZWQgYnkgb3RoZXIgcm93cywgbWFrZQorICBzdXJl
IHRoYXQgdGhlc2Ugb3ZlcmxhcHBpbmcgcGFydHMgb2Ygb3RoZXIgcm93cyBhcmUgcmVkcmF3bi4g
Ki8KKyAgaWYgKGhsID09IERSQVdfTk9STUFMX1RFWFQgJiYgcm93LT5vdmVybGFwcGVkX3ApCisg
ICAgeworICAgICAgaWYgKHJvdyA+IG1hdHJpeC0+cm93cworICAgICAgICAgICYmIE1BVFJJWF9S
T1dfT1ZFUkxBUFNfU1VDQ19QIChyb3cgLSAxKSkKKyAgICAgICAgZ3VpX2ZpeF9vdmVybGFwcGlu
Z19hcmVhICh3LCByb3cgLSAxLCBURVhUX0FSRUEsIE9WRVJMQVBTX0VSQVNFRF9DVVJTT1IpOwor
ICAgICAgaWYgKE1BVFJJWF9ST1dfQk9UVE9NX1kgKHJvdykgPCB3aW5kb3dfdGV4dF9ib3R0b21f
eSAodykKKyAgICAgICAgICAmJiBNQVRSSVhfUk9XX09WRVJMQVBTX1BSRURfUCAocm93ICsgMSkp
CisgICAgICAgIGd1aV9maXhfb3ZlcmxhcHBpbmdfYXJlYSAodywgcm93ICsgMSwgVEVYVF9BUkVB
LCBPVkVSTEFQU19FUkFTRURfQ1VSU09SKTsKKyAgICB9Cit9CisKK3ZvaWQKK21jX2VyYXNlX2N1
cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1
Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19tYXRyaXggbWNf
bWF0cml4LCBpbnQgeCwgaW50IHksIGludCBocG9zLCBpbnQgdnBvcywKKyAgICAgICAgICAgICAg
ICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNv
cl90eXBlLCBpbnQgd2QpCit7CisgIGJvb2wgZGVidWdfcCA9IGZhbHNlOworICBpZiAoZGVidWdf
cCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6ICB4ICglZCkgfCB5ICgl
ZCkgfCBocG9zICglZCkgfCB2cG9zICglZCkgfCB3ZCAoJWQpXG5cCisgICAgZ2x5cGhfZmxhdm9y
ICglcykgfCBjdXJzb3JfdHlwZSAoJXMpXG4iLAorICAgIHgsIHksIGhwb3MsIHZwb3MsIHdkLAor
ICAgIG1jX2ZsYXZvcl90b19zdHJpbmcgKGdseXBoX2ZsYXZvciksIG1jX2N1cnNvcl90eXBlX3Rv
X3N0cmluZyAoY3Vyc29yX3R5cGUpKTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5m
cmFtZSk7CisgIE1vdXNlX0hMSW5mbyAqaGxpbmZvID0gTU9VU0VfSExfSU5GTyAoZik7CisgIGJv
b2wgbW91c2VfZmFjZV9oZXJlX3AgPSBmYWxzZTsKKyAgc3RydWN0IGdseXBoICpjdXJzb3JfZ2x5
cGg7CisgIGVudW0gZHJhd19nbHlwaHNfZmFjZSBobDsKKyAgLyogTm8gY3Vyc29yIGRpc3BsYXll
ZCBvciByb3cgaW52YWxpZGF0ZWQgPT4gbm90aGluZyB0byBkbyBvbiB0aGUgc2NyZWVuLiAqLwor
ICBpZiAoY3Vyc29yX3R5cGUgPT0gTUNfTk9fQ1VSU09SKQorICAgIHsKKyAgICAgIGlmIChkZWJ1
Z19wKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6ICByZXR1cm4g
KCVkKVxuIiwgMSk7CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBWUE9TID49IG1hdHJpeC0+
bnJvd3MgbWVhbnMgdGhhdCB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZC4KKyAgICAgRG9uJ3QgYm90
aGVyIHRvIGVyYXNlIHRoZSBjdXJzb3IuICovCisgIGlmICh2cG9zID49IG1hdHJpeC0+bnJvd3Mp
CisgICAgeworICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1j
X2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4iLCAyKTsKKyAgICAgIHJldHVybjsKKyAgICB9
CisgIC8qIElmIHJvdyBjb250YWluaW5nIGN1cnNvciBpcyBtYXJrZWQgaW52YWxpZCwgdGhlcmUg
aXMgbm90aGluZyB3ZQorICAgICBjYW4gZG8uICovCisgIGlmICghcm93LT5lbmFibGVkX3ApCisg
ICAgeworICAgICAgaWYgKGRlYnVnX3ApCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2Vy
YXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4iLCAzKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
IC8qIElmIGxpbmUgc3BhY2luZyBpcyA+IDAsIG9sZCBjdXJzb3IgbWF5IG9ubHkgYmUgcGFydGlh
bGx5IHZpc2libGUgaW4KKyAgICAgd2luZG93IGFmdGVyIHNwbGl0LXdpbmRvdy4gIFNvIGFkanVz
dCB2aXNpYmxlIGhlaWdodC4gKi8KKyAgcm93LT52aXNpYmxlX2hlaWdodCA9IG1pbiAocm93LT52
aXNpYmxlX2hlaWdodCwKKyAgICAgICAgICAgIHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KSAtIHJv
dy0+eSk7CisgIC8qIElmIHJvdyBpcyBjb21wbGV0ZWx5IGludmlzaWJsZSwgZG9uJ3QgYXR0ZW1w
dCB0byBkZWxldGUgYSBjdXJzb3Igd2hpY2gKKyAgICAgaXNuJ3QgdGhlcmUuICBUaGlzIGNhbiBo
YXBwZW4gaWYgY3Vyc29yIGlzIGF0IHRvcCBvZiBhIHdpbmRvdywgYW5kCisgICAgIHdlIHN3aXRj
aCB0byBhIGJ1ZmZlciB3aXRoIGEgaGVhZGVyIGxpbmUgaW4gdGhhdCB3aW5kb3cuICovCisgIGlm
IChyb3ctPnZpc2libGVfaGVpZ2h0IDw9IDApCisgICAgeworICAgICAgaWYgKGRlYnVnX3ApCisg
ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQpXG4i
LCA0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIC8qIElmIGN1cnNvciBpcyBpbiB0aGUgZnJp
bmdlLCBlcmFzZSBieSBkcmF3aW5nIGFjdHVhbCBiaXRtYXAgdGhlcmUuICovCisgIGlmIChyb3ct
PmN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX0dMWVBIKQor
ICAgIHsKKyAgICAgIHJvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0gZmFsc2U7CisgICAgICBtY19k
cmF3X2ZyaW5nZV9iaXRtYXAgKHcsIHJvdywgcm93LT5yZXZlcnNlZF9wLCBjdXJzb3JfdHlwZSk7
CisgICAgICBpZiAoZGVidWdfcCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2Vf
Y3Vyc29yOiAgcmV0dXJuICglZClcbiIsIDUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyog
VGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIG5ldyByb3cgaXMgc2hvcnRlciB0aGFuIHRoZSBvbGQg
b25lLgorICAgICBJbiB0aGlzIGNhc2UsIGVpdGhlciBkcmF3X2dseXBocyBvciBjbGVhcl9lbmRf
b2ZfbGluZQorICAgICBzaG91bGQgaGF2ZSBjbGVhcmVkIHRoZSBjdXJzb3IuICBOb3RlIHRoYXQg
d2Ugd291bGRuJ3QgYmUKKyAgICAgYWJsZSB0byBlcmFzZSB0aGUgY3Vyc29yIGluIHRoaXMgY2Fz
ZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYQorICAgICBjdXJzb3IgZ2x5cGggYXQgaGFuZC4gKi8K
KyAgaWYgKChyb3ctPnJldmVyc2VkX3AKKyAgICAgICA/IChocG9zIDwgMCkKKyAgICAgICA6ICho
cG9zID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKSkpCisgICAgeworICAgICAgaWYgKGRlYnVnX3Ap
CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2N1cnNvcjogIHJldHVybiAoJWQp
XG4iLCA2KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIC8qIFdoZW4gdGhlIHdpbmRvdyBpcyBo
c2Nyb2xsZWQsIGN1cnNvciBocG9zIGNhbiBsZWdpdGltYXRlbHkgYmUgb3V0CisgICAgIG9mIGJv
dW5kcywgYnV0IHdlIGRyYXcgdGhlIGN1cnNvciBhdCB0aGUgY29ycmVzcG9uZGluZyB3aW5kb3cK
KyAgICAgbWFyZ2luIGluIHRoYXQgY2FzZS4gKi8KKyAgaWYgKCFyb3ctPnJldmVyc2VkX3AgJiYg
aHBvcyA8IDApCisgICAgaHBvcyA9IDA7CisgIGlmIChyb3ctPnJldmVyc2VkX3AgJiYgaHBvcyA+
PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICBocG9zID0gcm93LT51c2VkW1RFWFRfQVJFQV0g
LSAxOworICAvKiBJZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBtb3VzZSBmYWNlIGFyZWEsIHJlZGlz
cGxheSB0aGF0IHdoZW4gd2UgY2xlYXIgdGhlIGN1cnNvci4gKi8KKyAgaWYgKCEgTklMUCAoaGxp
bmZvLT5tb3VzZV9mYWNlX3dpbmRvdykKKyAgICAgICYmIGNvb3Jkc19pbl9tb3VzZV9mYWNlX3Ag
KHcsIGhwb3MsIHZwb3MpCisgICAgICAvKiBEb24ndCByZWRyYXcgdGhlIGN1cnNvcidzIHNwb3Qg
aW4gbW91c2UgZmFjZSBpZiBpdCBpcyBhdCB0aGUKKyAgICAgIGVuZCBvZiBhIGxpbmUgKG9uIGEg
bmV3bGluZSkuICBUaGUgY3Vyc29yIGFwcGVhcnMgdGhlcmUsIGJ1dAorICAgICAgbW91c2UgaGln
aGxpZ2h0aW5nIGRvZXMgbm90LiAqLworICAgICAgJiYgcm93LT51c2VkW1RFWFRfQVJFQV0gPiBo
cG9zICYmIGhwb3MgPj0gMCkKKyAgICBtb3VzZV9mYWNlX2hlcmVfcCA9IHRydWU7CisgIC8qIE1h
eWJlIGNsZWFyIHRoZSBkaXNwbGF5IHVuZGVyIHRoZSBjdXJzb3IuICovCisgIGlmIChjdXJzb3Jf
dHlwZSA9PSBNQ19IT0xMT1dfQk9YCisgICAgICB8fCBjdXJzb3JfdHlwZSA9PSBNQ19GUkFNRURf
Qk9YKQorICAgIHsKKyAgICAgIGludCB0ZW1wX3ggPSB4OworICAgICAgaW50IGhlYWRlcl9saW5l
X2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICAgICAgY3Vyc29yX2ds
eXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIGhwb3MsIHZwb3MpOwor
ICAgICAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYg
KGRlYnVnX3ApCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJtY19lcmFzZV9jdXJzb3I6
ICByZXR1cm4gKCVkKVxuIiwgNyk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICBpbnQgdGVtcF93ZCA9IGN1cnNvcl9nbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICBpZiAodGVt
cF94IDwgMCkKKyAgICAgICAgeworICAgICAgICAgIHRlbXBfd2QgKz0gdGVtcF94OworICAgICAg
ICAgIHRlbXBfeCA9IDA7CisgICAgICAgIH0KKyAgICAgIHRlbXBfd2QgPSBtaW4gKHdkLCB3aW5k
b3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpIC0gdGVtcF94KTsKKyAgICAgIGludCBmeSA9IFdJ
TkRPV19UT19GUkFNRV9QSVhFTF9ZICh3LCBtYXggKGhlYWRlcl9saW5lX2hlaWdodCwgcm93LT55
KSk7CisgICAgICBpbnQgZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB0ZW1w
X3gpOworICAgICAgaWYgKHRlbXBfd2QgPiAwKQorICAgICAgICBGUkFNRV9SSUYgKGYpLT5jbGVh
cl9mcmFtZV9hcmVhIChmLCBmeCwgZnksIHRlbXBfd2QsIHJvdy0+dmlzaWJsZV9oZWlnaHQpOwor
ICAgIH0KKyAgLyogRXJhc2UgdGhlIGN1cnNvciBieSByZWRyYXdpbmcgdGhlIGNoYXJhY3RlciB1
bmRlcm5lYXRoIGl0LiAqLworICBpZiAobW91c2VfZmFjZV9oZXJlX3ApCisgICAgaGwgPSBEUkFX
X01PVVNFX0ZBQ0U7CisgICAgZWxzZQorICAgICAgaGwgPSBEUkFXX05PUk1BTF9URVhUOworICBz
dHJ1Y3QgbWNfUkdCIGxzbCA9IHsucmVkID0gLTEuMCwgLmdyZWVuID0gLTEuMCwgLmJsdWUgPSAt
MS4wfTsKKyAgYm9vbCBhY3RpdmVfcCA9IGZhbHNlOworICBib29sIGN1cnNvcl9nY19wID0gZmFs
c2U7CisgIC8vICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5
cGggKHcsIG1hdHJpeCwgcm93LCBocG9zLCB2cG9zKTsKKyAgLy8gIGZwcmludGYgKHN0ZGVyciwg
Im1jX2RyYXdfY3Vyc29yX2dseXBoOiAgY2ggKCVkKSB8IHggKCVkKSwgaHBvcyAoJWQpLCB2cG9z
KCVkKSwgaGwgKCVkKVxuIiwKKyAgLy8gICAgICAgICAgICAgICAgICAgIGN1cnNvcl9nbHlwaC0+
dS5jaCwgeCwgaHBvcywgdnBvcywgaGwpOworICBibG9ja19pbnB1dCAoKTsKKyAgYm9vbCBkcmF3
X3AgPSB0cnVlOworICBtY19kcmF3X2dseXBocyAodywgbWF0cml4LCByb3csIG1jX21hdHJpeCwg
eCwgVEVYVF9BUkVBLCBocG9zLCBocG9zICsgMSwgaGwsIDAsCisgICAgICAgICAgICAgICAgICB2
cG9zLCBsc2wsIGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwKKyAgICAg
ICAgICAgICAgICAgIGN1cnNvcl9nY19wLCBNQ19FUkFTRV9HTFlQSF9TVFJJTkcsIGRyYXdfcCk7
CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIC8qIFdoZW4gd2UgZXJhc2UgdGhlIGN1cnNvciwgYW5k
IFJPVyBpcyBvdmVybGFwcGVkIGJ5IG90aGVyIHJvd3MsIG1ha2UKKyAgc3VyZSB0aGF0IHRoZXNl
IG92ZXJsYXBwaW5nIHBhcnRzIG9mIG90aGVyIHJvd3MgYXJlIHJlZHJhd24uICovCisgIGlmICho
bCA9PSBEUkFXX05PUk1BTF9URVhUICYmIHJvdy0+b3ZlcmxhcHBlZF9wKQorICAgIHsKKyAgICAg
IGlmIChyb3cgPiBtYXRyaXgtPnJvd3MKKyAgICAgICAgICAmJiBNQVRSSVhfUk9XX09WRVJMQVBT
X1NVQ0NfUCAocm93IC0gMSkpCisgICAgICAgIGd1aV9maXhfb3ZlcmxhcHBpbmdfYXJlYSAodywg
cm93IC0gMSwgVEVYVF9BUkVBLCBPVkVSTEFQU19FUkFTRURfQ1VSU09SKTsKKyAgICAgIGlmIChN
QVRSSVhfUk9XX0JPVFRPTV9ZIChyb3cpIDwgd2luZG93X3RleHRfYm90dG9tX3kgKHcpCisgICAg
ICAgICAgJiYgTUFUUklYX1JPV19PVkVSTEFQU19QUkVEX1AgKHJvdyArIDEpKQorICAgICAgICBn
dWlfZml4X292ZXJsYXBwaW5nX2FyZWEgKHcsIHJvdyArIDEsIFRFWFRfQVJFQSwgT1ZFUkxBUFNf
RVJBU0VEX0NVUlNPUik7CisgICAgfQorfQorCisvKgorLSBEcmF3IGFsbCBnbHlwaCBjdXJzb3Jz
LCBidXQgZXJhc2Ugd2l0aCBgbWNfZXJhc2VfY3Vyc29yJy4KKy0gRHJhdy9lcmFzZSBhbGwgZ2x5
cGhsZXNzIGN1cnNvcnMuCistIFdoZW4gYCFyZW1vdmVfcGAsIHNldCB0aGUgcm93IGRhdGEgcmVs
YXRpbmcgdG8gZnJpbmdlIGJpdG1hcHMuCisgIGBkcmF3X3Jvd19mcmluZ2VfYml0bWFwcycgKHdp
dGhpbiBgZXhwb3NlX2xpbmUnIGFuZCBgZHJhd193aW5kb3dfZnJpbmdlcycpCisgIGlzIHRoZSBt
ZWNoYW5pc20gdGhhdCBkcmF3cyB0aGUgZnJpbmdlIGJpdG1hcHMuICovCit2b2lkCittY19kcmF3
X2VyYXNlX2h5YnJpZCAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0
cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IHgs
IGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBo
LAorICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUs
IGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBs
c2wsIGJvb2wgYWN0aXZlX3AsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciwKKyAgICAgICAg
ICAgICAgICAgICAgICBib29sIHJlbW92ZV9wKQoreworICAvKiBgbWF0cml4X3JvdycgaW4gYGRp
c3BuZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2VydCAobWF0cml4
ICYmIG1hdHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+
bnJvd3MpOyAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKG1hdHJpeCAmJiBtYXRyaXgtPnJv
d3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgcmV0dXJuOwor
ICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgbWF0cml4LT5ucm93
cykgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICByZXR1cm47Cisg
IGlmICh4IDwgMAorICAgICAgfHwgeSA8IDAKKyAgICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2
cG9zIDwgMCkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJh
bWUpOworICBib29sIGF1dG9faHNjcm9sbF9tb2RlX3AgPSBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1
ZSAoUWF1dG9faHNjcm9sbF9tb2RlLCB3LT5jb250ZW50cyksIFFjdXJyZW50X2xpbmUpOworICAv
KiBFWEFNUExFOiAgKHNjcm9sbC1sZWZ0IDUpICovCisgIGJvb2wgaHNjbF9hbGxfdGVtcF9wID0g
KHctPnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1
dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9s
bCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7
CisgIC8qIEVYQU1QTEU6ICBDLXUgQy14IDwgYW5kIGRvIG5vdGhpbmcuICovCisgIGJvb2wgaHNj
bF9hbGxfcGVybV8wX3AgPSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiB3LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5t
aW5faHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQg
ZG8gc29tZXRoaW5nIGVsc2UgYmVzaWRlcyBob3Jpem9udGFsbHkgc2Nyb2xsaW5nIHRoZQorICAg
ICAgICAgICAgICAgY3VycmVudCBsaW5lIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3Vy
cmVudCBsaW5lIGlzIF9ub3RfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4gKi8K
KyAgYm9vbCBoc2NsX2FsbF9wZXJtXzFfcCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiB3LT5taW5faHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMt
dSBDLXggPCBhbmQgLi4uCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9y
aXpvbnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1f
Ml9wID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiB3LT5oc2Nyb2xsID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5f
aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9s
bCAhPSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIChzY3JvbGwtbGVmdCA1KTsgYW5kLCB0
aGVuIHByZXNzIHRoZSBsZWZ0IGFycm93IGtleSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgIEN1
cnJlbnQgbGluZSBfaXNfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4qLworICBi
b29sIGhzY2xfdGVtcF9wID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAg
ICAgICAgICAgICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAm
JiB3LT5oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xs
ID09IDApOworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgdGhhdCBj
YXVzZXMgdGhlIGN1cnJlbnQgbGluZSB0byBiZQorICAgICAgICAgICAgICAgaG9yaXpvbnRhbGx5
IHNjcm9sbGVkIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18g
aG9yaXpvbnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfcGVybV9w
ID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICYmIGF1
dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4g
MAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAg
ICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICBpbnQgZnJp
bmdlX2JpdG1hcCA9IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgIGludCBmYWNlX2lkID0gREVGQVVM
VF9GQUNFX0lEOworICBpZiAoIXJlbW92ZV9wCisgICAgICAmJiBnbHlwaF9mbGF2b3IgPT0gTUNf
T1ZFUkxBWV9BUlJPV19CSVRNQVAKKyAgICAgICYmICFoc2NsX2FsbF90ZW1wX3AKKyAgICAgICYm
ICFoc2NsX3RlbXBfcAorICAgICAgJiYgIWhzY2xfcGVybV9wCisgICAgICAmJiAhaHNjbF9hbGxf
cGVybV8wX3AKKyAgICAgICYmICFoc2NsX2FsbF9wZXJtXzFfcAorICAgICAgJiYgIWhzY2xfYWxs
X3Blcm1fMl9wKQorICAgIHsKKyAgICAgIGVudW0gZmFjZV9pZCBvdmVybGF5X2Fycm93X2ZhY2Vf
aWQgPQorICAgICAgICAoIWFjdGl2ZV9wCisgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZF
UiAody0+Y29udGVudHMpLCBjaF9pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgID8gbG9va3Vw
X2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWluYWN0aXZlLXBy
ZS16di1mYWNlIiksIEZSSU5HRV9GQUNFX0lELCB0cnVlKQorICAgICAgICA6IChhY3RpdmVfcCkK
KyAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3Zlcmxh
eS1hcnJvdy1wcmUtenYtZmFjZSIpLCBGUklOR0VfRkFDRV9JRCwgdHJ1ZSkKKyAgICAgICAgOiBE
RUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBmYWNlX2lkID0gKGN1cnNvcl90eXBlID09IE1DX0xFRlRf
RlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICA/IG92ZXJsYXlfYXJyb3dfZmFjZV9pZAor
ICAgICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgaWYgKHctPmhzY3JvbGwg
IT0gMCkKKyAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBp
bnRlcm4gKCIrLW92ZXJsYXktYXJyb3ciKSwgZmFsc2UsIHRydWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4g
KCIrLW92ZXJsYXktYXJyb3ciKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICByb3ctPmxlZnRfZnJpbmdl
X2JpdG1hcCA9IChjdXJzb3JfdHlwZSA9PSBNQ19MRUZUX0ZSSU5HRV9CSVRNQVApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJpbmdlX2JpdG1hcAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IE1DX05PX0ZSSU5HRV9CSVRNQVA7CisgICAgICByb3ctPmxlZnRf
ZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lkOworICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9vZmZzZXQg
PSAwOworICAgICAgcm93LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSBmYWxzZTsKKyAgICB9
CisgICAgZWxzZSBpZiAoIXJlbW92ZV9wCisgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yID09
IE1DX09WRVJMQVlfQVJST1dfQklUTUFQCisgICAgICAgICAgICAgJiYgKGhzY2xfYWxsX3RlbXBf
cAorICAgICAgICAgICAgICAgICB8fCBoc2NsX2FsbF9wZXJtXzBfcAorICAgICAgICAgICAgICAg
ICB8fCBoc2NsX2FsbF9wZXJtXzFfcAorICAgICAgICAgICAgICAgICB8fCBoc2NsX2FsbF9wZXJt
XzJfcAorICAgICAgICAgICAgICAgICB8fCBoc2NsX3RlbXBfcAorICAgICAgICAgICAgICAgICB8
fCBoc2NsX3Blcm1fcCkpCisgICAgICB7CisgICAgICAgIGVudW0gZmFjZV9pZCBvdmVybGF5X2Fy
cm93X2ZhY2VfaWQgPQorICAgICAgICAgICghYWN0aXZlX3AKKyAgICAgICAgICAgJiYgIU5JTFAg
KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfaW5hY3RpdmVfd2luZG93cykpKQorICAg
ICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFy
cm93LWhzY2wtaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisg
ICAgICAgICAgOiAoYWN0aXZlX3ApCisgICAgICAgICAgICA/IGxvb2t1cF9kZXJpdmVkX2ZhY2Ug
KHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1oc2NsLXByZS16di1mYWNlIiksIEZSSU5H
RV9GQUNFX0lELCB0cnVlKQorICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgICBm
YWNlX2lkID0gKGN1cnNvcl90eXBlID09IE1DX0xFRlRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAg
ICAgICAgICAgID8gb3ZlcmxheV9hcnJvd19mYWNlX2lkCisgICAgICAgICAgICAgICAgICA6IERF
RkFVTFRfRkFDRV9JRDsKKyAgICAgICAgaWYgKGhzY2xfYWxsX3Blcm1fMF9wKQorICAgICAgICAg
IGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2Ns
LXBlcm0iKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICBlbHNlIGlmIChoc2NsX2FsbF9wZXJt
XzFfcCkKKyAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdlX2JpdG1hcCAo
dywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaHNjbF9hbGxfcGVybV8yX3ApCisgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBt
Y19nZXRfZnJpbmdlX2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgZmFsc2UsIHRy
dWUpOworICAgICAgICAgICAgICBlbHNlIGlmIChoc2NsX3Blcm1fcCkKKyAgICAgICAgICAgICAg
ICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNj
bC1wZXJtIiksIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxs
X3RlbXBfcCkKKyAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfZnJpbmdl
X2JpdG1hcCAodywgaW50ZXJuICgiKy1oc2NsLXRlbXAiKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGhzY2xfdGVtcF9wKQorICAgICAgICAgICAgICAgICAgICBm
cmluZ2VfYml0bWFwID0gbWNfZ2V0X2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNjbC10
ZW1wIiksIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9iaXRtYXAgPSAo
Y3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gZnJpbmdlX2JpdG1hcAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogTUNfTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgICAgcm93LT5sZWZ0X2ZyaW5n
ZV9mYWNlX2lkID0gZmFjZV9pZDsKKyAgICAgICAgcm93LT5sZWZ0X2ZyaW5nZV9vZmZzZXQgPSAw
OworICAgICAgICByb3ctPmZyaW5nZV9iaXRtYXBfcGVyaW9kaWNfcCA9IGZhbHNlOworICAgICAg
fQorICAgICAgZWxzZSBpZiAoIXJlbW92ZV9wCisgICAgICAgICAgICAgICAmJiAoZ2x5cGhfZmxh
dm9yID09IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAg
ICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9B
UlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19IT0xMT1dfUkVD
VEFOR0xFCisgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FM
X0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBN
Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICB8
fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSCisgICAgICAgICAgICAgICAgICAgfHwg
Z2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAg
ICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIKSkKKyAgICAg
ICAgeworICAgICAgICAgIExpc3BfT2JqZWN0IGJpdG1hcF9mbGF2b3IgPSAoZ2x5cGhfZmxhdm9y
ID09IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gUW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJyb3cKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfZmxhdm9yID09IE1D
X1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1cpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfcmV2ZXJzZWRfaG9sbG93X3JlY3RhbmdsZV9y
aWdodF9hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlw
aF9mbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IFFtY19ob2xsb3dfcmVjdGFuZ2xlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJf
UklHSFRfQVJST1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBR
bWNfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklH
SFRfQVJST1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNf
cmV2ZXJzZWRfdmVydGljYWxfYmFyX3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBN
Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBRbWNfcmV2ZXJzZWRfdmVydGljYWxfYmFyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogKGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFD
S1NMQVNIKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3Zl
cnRpY2FsX2Jhcl9iYWNrc2xhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBRbmlsOworICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSAoY3Vyc29yX3R5cGUgPT0gTUNf
UklHSFRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBf
ZnJpbmdlX2JpdG1hcCAoYml0bWFwX2ZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBNQ19OT19GUklOR0VfQklUTUFQOworICAgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5cGUg
PT0gTUNfUklHSFRfRlJJTkdFX0JJVE1BUAorICAgICAgICAgICAgICAgICAgICAgJiYgKGdseXBo
X2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJ
Q0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoX2Zs
YXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpKQorICAgICAgICAgICAgICAgICAgICAg
ID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZXZlcnNlZC1iYXItcHJl
LXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAgICAgICAgICAgIDog
KGN1cnNvcl90eXBlID09IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVAKKyAgICAgICAgICAgICAgICAg
ICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JFVkVSU0VEX0hPTExPV19SRUNUQU5HTEVfUklH
SFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxhdm9yICE9IE1DX1JF
VkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAm
JiBnbHlwaF9mbGF2b3IgIT0gTUNfUkVWRVJTRURfVkVSVElDQUxfQkFSKQorICAgICAgICAgICAg
ICAgICAgICAgID8gbG9va3VwX2Rlcml2ZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1iYXItcHJl
LXp2LWZhY2UiKSwgRlJJTkdFX0ZBQ0VfSUQsIHRydWUpCisgICAgICAgICAgICAgICAgICAgIDog
REVGQVVMVF9GQUNFX0lEOworICAgICAgICAgIHJvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wID0gZmFs
c2U7CisgICAgICAgICAgcm93LT5yaWdodF9mcmluZ2VfYml0bWFwID0gZnJpbmdlX2JpdG1hcDsK
KyAgICAgICAgICByb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gZmFjZV9pZDsKKyAgICAgICAg
ICByb3ctPnJpZ2h0X2ZyaW5nZV9vZmZzZXQgPSAwOworICAgICAgICAgIHJvdy0+ZnJpbmdlX2Jp
dG1hcF9wZXJpb2RpY19wID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZ2x5
cGhfZmxhdm9yID09IE1DX0dMWVBICisgICAgICAgICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9
PSBNQ19HTFlQSExFU1MpCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBvbl9wID0gdHJ1
ZTsKKyAgICAgICAgICAgIEZSQU1FX1JJRiAoZiktPm1jX3NjcmliZV9jdXJzb3IgKHcsIG1hdHJp
eCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2cG9zLCB3ZCwgaCwgbHNsLCBjdXJzb3JfdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgZ2x5cGhf
Zmxhdm9yLCBvbl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0aXZlX3ApOworICAgICAgICAgIH0KK30KKworLyogRHVtcCBjb250ZW50cyBvZiBnbHlw
aCBHTFlQSCB0byBzdGRlcnIuICBST1cgYW5kIEFSRUEgYXJlCisgICB0aGUgZ2x5cGggcm93IGFu
ZCBhcmVhIHdoZXJlIHRoZSBnbHlwaCBjb21lcyBmcm9tLiAqLwordm9pZAorbWNfZHVtcF9nbHlw
aCAoc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3QgZ2x5cGggKmdseXBoLCBpbnQgYXJlYSwK
KyAgICAgICAgICAgICAgIGludCByZWxhdGl2ZV94LCBpbnQgdnBvcykKK3sKKyAgYm9vbCBnbHlw
aF96dl9wID0gKGdseXBoIC0gcm93LT5nbHlwaHNbYXJlYV0gPT0gcm93LT51c2VkW2FyZWFdIC0g
MQorICAgICAgICAgICAgICAgICAgICAgJiYgTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSA9
PSBaVik7CisgIGlmIChnbHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBICisgICAgICB8fCBnbHlwaC0+
dHlwZSA9PSBHTFlQSExFU1NfR0xZUEgpCisgICAgeworICAgICAgZnByaW50ZiAoc3RkZXJyLAor
ICAgICAgICAiICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAl
MS4xZCUxLjFkICAlM2QgJXMgJXNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVY
VF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2Vk
W2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgIChnbHlwaC0+dHlwZSA9
PSBDSEFSX0dMWVBICisgICAgICAgICA/ICdDJworICAgICAgICAgOiAnRycpLAorICAgICAgICBn
bHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAg
ICA/ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAg
ID8gJ1MnCisgICAgICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAg
ICAgPyAnMCcKKyAgICAgICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxf
d2lkdGgsCisgICAgICAgIGdseXBoLT51LmNoLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAg
ICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9s
aW5lX3AsCisgICAgICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisg
ICAgICAgIG1jX2NoYXJfdG9fc3RyaW5nIChnbHlwaC0+dS5jaCkpOworICAgIH0KKyAgZWxzZSBp
ZiAoZ2x5cGgtPnR5cGUgPT0gU1RSRVRDSF9HTFlQSCkKKyAgICB7CisgICAgICBmcHJpbnRmIChz
dGRlcnIsCisgICAgICAgICIgJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUw
NnggJTRkICUxLjFkJTEuMWQgICUzZCAlcyAlc1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmds
eXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiBy
b3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1MnLAor
ICAgICAgICBnbHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3Qp
CisgICAgICAgICAgICA/ICdCJworICAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3Qp
CisgICAgICAgICAgICA/ICdTJworICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5vYmplY3QpCisg
ICAgICAgICAgICA/ICcwJworICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4
ZWxfd2lkdGgsCisgICAgICAgIDB1LAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAg
Z2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3As
CisgICAgICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAg
ICJcXFMiKTsKKyAgICB9CisgIGVsc2UgaWYgKGdseXBoLT50eXBlID09IElNQUdFX0dMWVBIKQor
ICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgIiAlNSJwRCJkLyUtNWQgJTVk
ICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCAlNGQgJTEuMWQlMS4xZCAgJTNkICVzICVjXG4iLAor
ICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgocm93LT51
c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICByZWxh
dGl2ZV94LAorICAgICAgICAnSScsCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAo
QlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ0InCisgICAgICAgICAgOiAo
U1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAgICAgOiAo
TklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJzAnCisgICAgICAgICAgOiAnLScp
KSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgKHVuc2lnbmVkIGludCkg
Z2x5cGgtPnUuaW1nX2lkLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgt
PmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAg
ICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICcuJyk7
CisgICAgfQorICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBDT01QT1NJVEVfR0xZUEgpCisgICAg
eworICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiICU1InBEImQvJS01ZCAlNWQgJWMg
JTkicEQiZCAlYyAlM2QgMHglMDZ4IiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhU
X0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRb
YXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJysnLAorICAgICAgICBn
bHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAg
ICAgICA/ICdCJworICAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAg
ICAgICA/ICdTJworICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAg
ICA/ICcwJworICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgs
CisgICAgICAgICh1bnNpZ25lZCBpbnQpIGdseXBoLT51LmNtcC5pZCk7CisgICAgICBmcHJpbnRm
IChzdGRlcnIsICIgJTRkICUxLjFkJTEuMWQiLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAg
ICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9s
aW5lX3ApOworICAgICAgaWYgKGdseXBoLT51LmNtcC5hdXRvbWF0aWMpCisgICAgICAgIGZwcmlu
dGYgKHN0ZGVyciwgIiAgJTNkICVzIC4gWyVkLSVkXVxuIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBnbHlwaC0+aHBvcywgZ2x5cGhfenZfcCA/ICJaViIgOiAiLS0iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGdseXBoLT5zbGljZS5jbXAuZnJvbSwgZ2x5cGgtPnNsaWNlLmNtcC50byk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cisg
IGVsc2UgaWYgKGdseXBoLT50eXBlID09IFhXSURHRVRfR0xZUEgpCisgICAgeworI2lmbmRlZiBI
QVZFX1hXSURHRVRTCisgICAgICBlYXNzdW1lIChmYWxzZSk7CisjZWxzZQorICAgICAgZnByaW50
ZiAoc3RkZXJyLAorICAgICAgICAiICAlNWQvJS01ZCAlNWQgJTRjICU2ZCAlYyAlM2QgMHglMDV4
ICU0ZCAlMS4xZCUxLjFkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlw
aHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93
LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdYJywKKyAg
ICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQor
ICAgICAgICAgICA/ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAg
ICAgICAgICAgID8gJ1MnCisgICAgICAgICA6ICctJykpLAorICAgICAgICBnbHlwaC0+cGl4ZWxf
d2lkdGgsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hf
bGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgt
PnUueHdpZGdldCwKKyAgICAgICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0t
IiwKKyAgICAgICAgJy4nKTsKKyNlbmRpZgorICAgIH0KK30KKworLyogRHVtcCB0aGUgY29udGVu
dHMgb2YgZ2x5cGggcm93IGF0IFZQT1MgaW4gTUFUUklYIHRvIHN0ZGVyci4KKyAgIEdMWVBIUyAw
IG1lYW5zIGRvbid0IHNob3cgZ2x5cGggY29udGVudHMuCisgICBHTFlQSFMgMSBtZWFucyBzaG93
IGdseXBocyBpbiBzaG9ydCBmb3JtCisgICBHTFlQSFMgPiAxIG1lYW5zIHNob3cgZ2x5cGhzIGlu
IGxvbmcgZm9ybS4gKi8KK3ZvaWQKK21jX2R1bXBfZ2x5cGhfcm93IChzdHJ1Y3QgZ2x5cGhfcm93
ICpyb3csIGludCB2cG9zLCBpbnQgZ2x5cGhzKQoreworICBpbnQgcmVsYXRpdmVfeCA9IDA7Cisg
IGlmIChnbHlwaHMgIT0gMSkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbkRVTVAg
R0xZUEggUk9XXG4iKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlJvdyAgICAgU3RhcnQgICAg
ICAgRW5kIFVzZWQgb0U+PFxcQ1RaRmVzbSAgICAgWCAgICBZICAgIFcgICAgSCAgICBWICAgIEEg
ICAgUFxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICI9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1c
biIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJTNkICU5InBEImQgJTkicEQiZCAlNGQgJTEu
MWQlMS4xZCUxLjFkJTEuMWRcCislMS4xZCUxLjFkJTEuMWQlMS4xZCUxLjFkJTEuMWQlMS4xZCUx
LjFkICAlNGQgJTRkICU0ZCAlNGQgJTRkICU0ZCAlNGRcbiIsCisgICAgICAgICB2cG9zLAorICAg
ICAgICAgTUFUUklYX1JPV19TVEFSVF9DSEFSUE9TIChyb3cpLAorICAgICAgICAgTUFUUklYX1JP
V19FTkRfQ0hBUlBPUyAocm93KSwKKyAgICAgICAgIHJvdy0+dXNlZFtURVhUX0FSRUFdLAorICAg
ICAgICAgcm93LT5jb250YWluc19vdmVybGFwcGluZ19nbHlwaHNfcCwKKyAgICAgICAgIHJvdy0+
ZW5hYmxlZF9wLAorICAgICAgICAgcm93LT50cnVuY2F0ZWRfb25fbGVmdF9wLAorICAgICAgICAg
cm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCwKKyAgICAgICAgIHJvdy0+Y29udGludWVkX3AsCisg
ICAgICAgICBNQVRSSVhfUk9XX0NPTlRJTlVBVElPTl9MSU5FX1AgKHJvdyksCisgICAgICAgICBN
QVRSSVhfUk9XX0RJU1BMQVlTX1RFWFRfUCAocm93KSwKKyAgICAgICAgIHJvdy0+ZW5kc19hdF96
dl9wLAorICAgICAgICAgcm93LT5maWxsX2xpbmVfcCwKKyAgICAgICAgIHJvdy0+ZW5kc19pbl9t
aWRkbGVfb2ZfY2hhcl9wLAorICAgICAgICAgcm93LT5zdGFydHNfaW5fbWlkZGxlX29mX2NoYXJf
cCwKKyAgICAgICAgIHJvdy0+bW91c2VfZmFjZV9wLAorICAgICAgICAgcm93LT54LAorICAgICAg
ICAgcm93LT55LAorICAgICAgICAgcm93LT5waXhlbF93aWR0aCwKKyAgICAgICAgIHJvdy0+aGVp
Z2h0LAorICAgICAgICAgcm93LT52aXNpYmxlX2hlaWdodCwKKyAgICAgICAgIHJvdy0+YXNjZW50
LAorICAgICAgICAgcm93LT5waHlzX2FzY2VudCk7CisgICAgICAvKiBUaGUgbmV4dCAzIGxpbmVz
IHNob3VsZCBhbGlnbiB0byAiU3RhcnQiIGluIHRoZSBoZWFkZXIuICovCisgICAgICBmcHJpbnRm
IChzdGRlcnIsICIgICAgJTkicEQiZCAlOSJwRCJkXHQlNWRcbiIsIHJvdy0+c3RhcnQub3Zlcmxh
eV9zdHJpbmdfaW5kZXgsCisgICAgICAgICByb3ctPmVuZC5vdmVybGF5X3N0cmluZ19pbmRleCwK
KyAgICAgICAgIHJvdy0+Y29udGludWF0aW9uX2xpbmVzX3dpZHRoKTsKKyAgICAgIGZwcmludGYg
KHN0ZGVyciwgIiAgICAlOSJwRCJkICU5InBEImRcbiIsCisgICAgICAgICBDSEFSUE9TIChyb3ct
PnN0YXJ0LnN0cmluZ19wb3MpLAorICAgICAgICAgQ0hBUlBPUyAocm93LT5lbmQuc3RyaW5nX3Bv
cykpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAgICU5ZCAlOWRcbiIsIHJvdy0+c3RhcnQu
ZHB2ZWNfaW5kZXgsCisgICAgICAgICByb3ctPmVuZC5kcHZlY19pbmRleCk7CisgICAgfQorICBp
ZiAoZ2x5cGhzID4gMSkKKyAgICB7CisgICAgICBmb3IgKGludCBhcmVhID0gTEVGVF9NQVJHSU5f
QVJFQTsgYXJlYSA8IExBU1RfQVJFQTsgKythcmVhKQorICAgICAgICB7CisgICAgICAgICAgc3Ry
dWN0IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5cGhzW2FyZWFdOworICAgICAgICAgIHN0cnVjdCBn
bHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyByb3ctPnVzZWRbYXJlYV07CisgICAgICAgICAgLyog
R2x5cGggZm9yIGEgbGluZSBlbmQgaW4gdGV4dC4gKi8KKyAgICAgICAgICBpZiAoYXJlYSA9PSBU
RVhUX0FSRUEgJiYgZ2x5cGggPT0gZ2x5cGhfZW5kICYmIGdseXBoLT5jaGFycG9zID4gMCkKKyAg
ICAgICAgICAgICsrZ2x5cGhfZW5kOworICAgICAgICAgIGlmIChnbHlwaCA8IGdseXBoX2VuZCkK
KyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkdseXBoIy9Ub3RhbCBSZWwuWCBUICAgICAg
IFBvcyBPICAgVyAgICAgQ29kZSBGYWNlIExSIEhQT1MgWlYgQ1xuIik7CisgICAgICAgICAgZm9y
ICg7IGdseXBoIDwgZ2x5cGhfZW5kOyArK2dseXBoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBtY19kdW1wX2dseXBoIChyb3csIGdseXBoLCBhcmVhLCByZWxhdGl2ZV94LCB2cG9zKTsK
KyAgICAgICAgICAgICAgcmVsYXRpdmVfeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2x5cGhzID09IDEpCisgICAg
ICB7CisgICAgICAgIGNoYXIgc1tTSFJUX01BWCArIDRdOworICAgICAgICBmb3IgKGludCBhcmVh
ID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8IExBU1RfQVJFQTsgKythcmVhKQorICAgICAgICAg
IHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvdy0+
dXNlZFthcmVhXTsgKytpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0
IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5cGhzW2FyZWFdICsgaTsKKyAgICAgICAgICAgICAgICBp
ZiAoaSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICYmIGFyZWEg
PT0gVEVYVF9BUkVBCisgICAgICAgICAgICAgICAgICAgICYmIE5JTFAgKGdseXBoLT5vYmplY3Qp
CisgICAgICAgICAgICAgICAgICAgICYmIGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAg
ICAgICAgICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggPT0gJyAnKQorICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzdHJjcHkgKCZzW2ldLCAiW1xcbl0iKTsKKyAgICAgICAg
ICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggPCAweDgwCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBnbHlwaC0+dS5jaCA+PSAnICcpCisgICAgICAgICAgICAgICAgICAgIHNbaV0gPSBnbHlw
aC0+dS5jaDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
IHNbaV0gPSAnLic7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNbaV0gPSAnXDAnOwor
ICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJTNkOiAoJWQpICclcydcbiIsIHZwb3MsIHJv
dy0+ZW5hYmxlZF9wLCBzKTsKKyAgICAgICAgICB9CisgICAgICB9Cit9CisKK0RFRlVOICgibWMt
ZHVtcC1nbHlwaC1yb3ciLCBGbWNfZHVtcF9nbHlwaF9yb3csIFNtY19kdW1wX2dseXBoX3Jvdywg
MSwgMiwgIlAiLAorICAgICAgIGRvYzogLyogRHVtcCBnbHlwaCByb3cgUk9XIHRvIHN0ZGVyci4K
K0ludGVyYWN0aXZlbHksIFJPVyBpcyB0aGUgcHJlZml4IG51bWVyaWMgYXJndW1lbnQgYW5kIGRl
ZmF1bHRzIHRvCit0aGUgcm93IHdoaWNoIGRpc3BsYXlzIHBvaW50LgorT3B0aW9uYWwgYXJndW1l
bnQgR0xZUEhTIDAgbWVhbnMgZG9uJ3QgZHVtcCBnbHlwaHMuCitHTFlQSFMgMSBtZWFucyBkdW1w
IGdseXBocyBpbiBzaG9ydCBmb3JtLgorR0xZUEhTID4gMSBvciBvbWl0dGVkIG1lYW5zIGR1bXAg
Z2x5cGhzIGluIGxvbmcgZm9ybS4gICovKQorICAoTGlzcF9PYmplY3Qgcm93LCBMaXNwX09iamVj
dCBnbHlwaHMpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChzZWxlY3RlZF93aW5k
b3cpOworICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXggPSB3LT5jdXJyZW50X21hdHJpeDsK
KyAgRU1BQ1NfSU5UIHZwb3M7CisgIGlmIChOSUxQIChyb3cpKQorICAgIHsKKyAgICAgIGludCBk
MSwgZDIsIGQzLCBkNCwgZDUsIHlwb3M7CisgICAgICBib29sIHZpc2libGVfcCA9IHBvc192aXNp
YmxlX3AgKHcsIFBULCAmZDEsICZkMiwgJmQzLCAmZDQsICZkNSwgJnlwb3MpOworICAgICAgaW50
IGhlYWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICAg
ICAgaW50IHZvZmZzZXQgPSAoaGVhZGVyX2xpbmVfaGVpZ2h0ID4gMAorICAgICAgICAgICAgICAg
ICAgICAgJiYgeXBvcyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgPyB5cG9zICsgMQorICAg
ICAgICAgICAgICAgICAgICAgIDogeXBvczsKKyAgICAgIGlmICh2aXNpYmxlX3ApCisgICAgICAg
IHZwb3MgPSB2b2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgdnBvcyA9IDA7CisgICAg
fQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgQ0hFQ0tfTlVNQkVSIChyb3cpOworICAgICAg
ICB2cG9zID0gWEZJWE5VTSAocm93KTsKKyAgICAgIH0KKyAgaWYgKHZwb3MgPj0gMCAmJiB2cG9z
IDwgbWF0cml4LT5ucm93cykKKyAgICBtY19kdW1wX2dseXBoX3JvdyAoTUFUUklYX1JPVyAobWF0
cml4LCB2cG9zKSwKKyAgICAgICAgdnBvcywKKyAgICAgICAgVFlQRV9SQU5HRURfRklYTlVNUCAo
aW50LCBnbHlwaHMpID8gWEZJWE5VTSAoZ2x5cGhzKSA6IDIpOworICByZXR1cm4gUW5pbDsKK30K
Kwordm9pZAorbWNfZHVtcF9nbHlwaF9tYXRyaXggKHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJp
eCwgaW50IGdseXBocykKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBtYXRyaXgtPm5y
b3dzOyArK2kpCisgICAgbWNfZHVtcF9nbHlwaF9yb3cgKE1BVFJJWF9ST1cgKG1hdHJpeCwgaSks
IGksIGdseXBocyk7Cit9CisKK0RFRlVOICgibWMtZHVtcC1nbHlwaC1tYXRyaXgiLCBGbWNfZHVt
cF9nbHlwaF9tYXRyaXgsCisgICAgICAgU21jX2R1bXBfZ2x5cGhfbWF0cml4LCAwLCAxLCAicCIs
CisgICAgICAgZG9jOiAvKiBEdW1wIHRoZSBjdXJyZW50IG1hdHJpeCBvZiB0aGUgc2VsZWN0ZWQg
d2luZG93IHRvIHN0ZGVyci4KK1Nob3dzIGNvbnRlbnRzIG9mIGdseXBoIHJvdyBzdHJ1Y3R1cmVz
LiAgV2l0aCBub24tbmlsCitwYXJhbWV0ZXIgR0xZUEhTLCBkdW1wIGdseXBocyBhcyB3ZWxsLiAg
SWYgR0xZUEhTIGlzIDEgc2hvdworZ2x5cGhzIGluIHNob3J0IGZvcm0sIG90aGVyd2lzZSBzaG93
IGdseXBocyBpbiBsb25nIGZvcm0uCistIEludGVyYWN0aXZlbHksIG5vIGFyZ3VtZW50IG1lYW5z
IHNob3cgZ2x5cGhzIGluIHNob3J0IGZvcm07Cit3aXRoIG51bWVyaWMgYXJndW1lbnQsIGl0cyB2
YWx1ZSBpcyBwYXNzZWQgYXMgdGhlIEdMWVBIUyBmbGFnLiAgKi8pCisgIChMaXNwX09iamVjdCBn
bHlwaHMpCit7CisgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cp
OworICBzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSBYQlVGRkVSICh3LT5jb250ZW50cyk7CisgIGZw
cmludGYgKHN0ZGVyciwgIlBUID0gJSJwRCJkLCBCRUdWID0gJSJwRCJkLiBaViA9ICUicEQiZFxu
IiwKKyAgICAgQlVGX1BUIChidWZmZXIpLCBCVUZfQkVHViAoYnVmZmVyKSwgQlVGX1pWIChidWZm
ZXIpKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiQ3Vyc29yIHggPSAlZCwgeSA9ICVkLCBocG9zID0g
JWQsIHZwb3MgPSAlZFxuIiwKKyAgICAgdy0+Y3Vyc29yLngsIHctPmN1cnNvci55LCB3LT5jdXJz
b3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MpOworICBmcHJpbnRmIChzdGRlcnIsICI9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICBtY19kdW1wX2dseXBo
X21hdHJpeCAody0+Y3VycmVudF9tYXRyaXgsCisgICAgICAgICBUWVBFX1JBTkdFRF9GSVhOVU1Q
IChpbnQsIGdseXBocykgPyBYRklYTlVNIChnbHlwaHMpIDogMCk7CisgIHJldHVybiBRbmlsOwor
fQorCitib29sCittY190cmF2ZXJzZV9jYWNoZV9wIChzdHJ1Y3QgbWNfbWF0cml4IG1hdHJpeCwg
ZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICBpbnQg
dm50aCwgaW50IG50aCkKK3sKKyAgaWYgKHZudGggPCBtYXRyaXgudnBvc191c2VkCisgICAgICAm
JiBtYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdID4gMAorICAgICAgJiYgbnRoIDwgbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVfdXNlZFtjYWNoZV90eXBlXSkKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgICBlbHNlCisgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK21jX3Jlc2V0X2NhY2hl
IChzdHJ1Y3Qgd2luZG93ICp3KQoreworICBpZiAoIUJVRkZFUlAgKHctPmNvbnRlbnRzKSkKKyAg
ICByZXR1cm47CisgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBNQ19DQUNI
RTsKKyAgICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAgKytjYWNoZV90eXBlKQor
ICAgIHsKKyAgICAgIGJvb2wgYnZhcl9hY3RpdmVfcDsKKyAgICAgIHN3aXRjaCAoY2FjaGVfdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgTk9fQ0FDSEU6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIE1DX0NB
Q0hFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoQlVGRkVSUCAody0+Y29udGVu
dHMpCisgICAgICAgICAgICAgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50
cyksIG1jX2NvbmYpKSkKKyAgICAgICAgICAgICAgICBidmFyX2FjdGl2ZV9wID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNf
Y29uZikpKQorICAgICAgICAgICAgICAgICAgYnZhcl9hY3RpdmVfcCA9IHRydWU7CisgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgQ0hfQ0FDSEU6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAg
ICAgICAgICAgICAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jv
c3NoYWlycykpKQorICAgICAgICAgICAgICAgIGJ2YXJfYWN0aXZlX3AgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hh
aXJzKSkpCisgICAgICAgICAgICAgICAgICBidmFyX2FjdGl2ZV9wID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBGQ19DQUNIRToKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAg
ICAgICAgICAgICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192
aXNpYmxlKSkpCisgICAgICAgICAgICAgICAgYnZhcl9hY3RpdmVfcCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGZjX3Zpc2li
bGUpKSkKKyAgICAgICAgICAgICAgICAgIGJ2YXJfYWN0aXZlX3AgPSB0cnVlOworICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKCFidmFyX2Fj
dGl2ZV9wKQorICAgICAgICB7CisgICAgICAgICAgLyogRGVjcmVhc2UgdGhlIHNpemUgb2YgdGhl
IGFycmF5IHRvIGEgYmFyZSBtaW5pbXVtLiAqLworICAgICAgICAgIGZvciAoaW50IHZudGggPSAw
OyB2bnRoIDwgdy0+bWNfbWF0cml4LnZwb3NfdXNlZDsgKyt2bnRoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBpZiAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVk
W2NhY2hlX3R5cGVdID4gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSA9CisgICAgICAgICAgICAg
ICAgICAgIHhucmVhbGxvYyAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV0sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICp3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXSk7CisgICAgICAgICAgICAgICAgICB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV9hbGxvY2F0ZWRbY2FjaGVfdHlwZV0gPSAxOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVfdXNlZFtjYWNoZV90eXBlXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgdy0+bWNf
bWF0cml4LmN1cnNvcnNfdXNlZFtjYWNoZV90eXBlXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gIEFsdGhvdWdoIGl0IHdvdWxkIG5vdCBiZSB2ZXJ5IGVmZmljaWVudCwgaXQgaXMgcG9zc2li
bGUgdG8gc2V0CisgICAgICAgIC8vICB0aGUgX3VzZWRfIGVsZW1lbnRzIG9mIHRoZSBhcnJheSB0
byB6ZXJvLiAgSW4gc3VjaCBhIGNhc2UsIHRoZQorICAgICAgICAvLyAgLi4uX2VsdHMuYWxsb2Nh
dGVkW2NhY2hlX3R5cGVdIHdvdWxkIHJlbWFpbiB0aGUgc2FtZS4KKyAgICAgICAgLy8gIG1lbXNl
dCAody0+bWNfbWF0cml4LnZwb3NbQF0uY2FjaGVbY2FjaGVfdHlwZV0sIDAsIHctPm1jX21hdHJp
eC52cG9zW0BdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0KKyAgICAgICAgLy8gICAgICAgICAgKiAo
c2l6ZW9mICp3LT5tY19tYXRyaXgudnBvc1tAXS5jYWNoZVtjYWNoZV90eXBlXSkpOworICAgICAg
ICAvLyAgQXQgdGhpcyB0aW1lLCB3ZSBhcmUgaW5zdGVhZCBsZWF2aW5nIHRoZSBhcnJheSBhcy1p
cyB3aXRoIHRoZQorICAgICAgICAvLyAgdW5kZXJzdGFuZGluZyB0aGF0IGl0IHdpbGwgY29udGFp
biBvdXRkYXRlZCBkYXRhIChha2EgZ2FyYmFnZSkuCisgICAgICAgIC8vICBVc2luZyB0aGUgY291
bnRlciBgdy0+bWNfbWF0cml4LnZwb3NbQF0uY2FjaGVfdXNlZFtjYWNoZV90eXBlXWAsIHdlIHRy
YWNrIGN1cnJlbnQgZGF0YS4KKyAgICAgICAgZWxzZSBpZiAoYnZhcl9hY3RpdmVfcCkKKyAgICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGludCB2bnRoID0gMDsgdm50aCA8IHctPm1jX21hdHJp
eC52cG9zX3VzZWQ7ICsrdm50aCkKKyAgICAgICAgICAgICAgdy0+bWNfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVfdXNlZFtjYWNoZV90eXBlXSA9IDA7CisgICAgICAgICAgICB3LT5tY19tYXRyaXgu
Y3Vyc29yc191c2VkW2NhY2hlX3R5cGVdID0gMDsKKyAgICAgICAgICB9CisgICAgfQorfQorCitz
dGF0aWMgdm9pZAorbWNfaGVscGVyIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0
cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKyAgICAgICAgICAgc3RydWN0IGds
eXBoICpnbHlwaCwgaW50IHgsIGludCBmeCwgaW50IHksIGludCBmeSwgaW50IGhwb3MsIGludCB2
cG9zLAorICAgICAgICAgICBpbnQgd2QsIGludCBoLCBlbnVtIG1jX2N1cnNvcl90eXBlIGN1cnNv
cl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICBlbnVtIG1jX3Jvd19wb3NpdGlv
biByb3dfcG9zaXRpb24sIHN0cnVjdCBtY19SR0IgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgc3Ry
dWN0IG1jX1JHQiBiYWNrZ3JvdW5kLCBib29sIGFjdGl2ZV9wLCBlbnVtIG1jX2ZsYXZvciBnbHlw
aF9mbGF2b3IsCisgICAgICAgICAgIGJvb2wgZHJhd19wLCBlbnVtIG1jX2RyYXdfcm93X3R5cGUg
ZnJvbV93aGVyZSwKKyAgICAgICAgICAgZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUsIGVu
dW0gbWNfZW5naW5lX3R5cGUgYWN0aW9uX3R5cGUpCit7CisgIGludCB2bnRoID0gTUFUUklYX1JP
V19WUE9TIChyb3csIG1hdHJpeCk7CisgIGlmIChtY19zdGRlcnJfcAorICAgICAgJiYgZHJhd19w
KQorICAgIHsKKyAgICAgIGludCBjaGFycG9zID0gZ2x5cGgtPmNoYXJwb3M7CisgICAgICBpbnQg
bG51bSA9IGdseXBoLT5sbnVtOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5tY19oZWxwZXIg
KCVzKTogIGZyb21fd2hlcmUgKCVzKVxuXAorICBhY3Rpb25fdHlwZSAoJXMpIHwgZmxhdm9yICgl
cykgfCBjaGFycG9zICglZCkgfCBsbnVtICglZClcblwKKyAgY2hhciAoJXMpIHwgeCAoJWQpIHwg
ZnggKCVkKSB8IHkgKCVkKSB8IGZ5ICglZCkgfCBocG9zICglZC8lZCkgfCB2cG9zICglZClcblwK
KyAgd2QgKCVkKSB8IGggKCVkKSB8IGN1cnNvcl90eXBlICglcykgfCBjdXJzb3Jfd2lkdGggKCVk
KSB8IGFjdGl2ZV9wICglcylcblwKKyAgRkctUkdCICglZi8lZi8lZikgfCBCRy1SR0IgKCVmLyVm
LyVmKVxuIiwKKyAgICAgIG1jX3dpbmRvdyAodyksIG1jX2RyYXdfcm93X3R5cGVfdG9fc3RyaW5n
IChmcm9tX3doZXJlKSwKKyAgICAgIG1jX2VuZ2luZV90eXBlX3RvX3N0cmluZyAoYWN0aW9uX3R5
cGUpLCBtY19mbGF2b3JfdG9fc3RyaW5nIChnbHlwaF9mbGF2b3IpLAorICAgICAgY2hhcnBvcywg
bG51bSwgbWNfY2hhcl90b19zdHJpbmcgKGdseXBoLT51LmNoKSwgeCwgZngsIHksIGZ5LCBocG9z
LAorICAgICAgcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxLCB2cG9zLCB3ZCwgaCwgbWNfY3Vyc29y
X3R5cGVfdG9fc3RyaW5nIChjdXJzb3JfdHlwZSksCisgICAgICBjdXJzb3Jfd2lkdGgsIChhY3Rp
dmVfcCA/ICJ0cnVlIiA6ICJmYWxzZSIpLCBmb3JlZ3JvdW5kLnJlZCwgZm9yZWdyb3VuZC5ncmVl
biwKKyAgICAgIGZvcmVncm91bmQuYmx1ZSwgYmFja2dyb3VuZC5yZWQsIGJhY2tncm91bmQuZ3Jl
ZW4sIGJhY2tncm91bmQuYmx1ZSk7CisgICAgfQorICBib29sIHJlbW92ZV9wID0gZmFsc2U7Cisg
IGlmIChkcmF3X3AKKyAgICAgICYmIChmcm9tX3doZXJlID09IFNLSVBQRUQKKyAgICAgICAgICB8
fCBmcm9tX3doZXJlID09IFBPU1RfQ0hBTkdFRAorICAgICAgICAgIHx8IGZyb21fd2hlcmUgPT0g
VU5DSEFOR0VECisgICAgICAgICAgfHwgZnJvbV93aGVyZSA9PSBTRVRfQ1VSU09SX1RXTykpCisg
ICAgeworICAgICAgYm9vbCBzYW1lX3AgPSBmYWxzZTsKKyAgICAgIGZvciAoaW50IG50aCA9IDA7
IG50aCA8IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV07ICsr
bnRoKQorICAgICAgICB7CisgICAgICAgICAgc2FtZV9wIHw9CisgICAgICAgICAgICAody0+bWNf
bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5zYW1lX3AgPT0gdHJ1ZQor
ICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF0uZ2x5cGgudHlwZSA9PSBnbHlwaC0+dHlwZQorICAgICAgICAgICAgICYmIHctPm1jX21h
dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGguYnl0ZXBvcyA9PSBn
bHlwaC0+Ynl0ZXBvcworICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGguY2hhcnBvcyA9PSBnbHlwaC0+Y2hhcnBvcworICAg
ICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF0uZ2x5cGgubG51bSA9PSBnbHlwaC0+bG51bQorICAgICAgICAgICAgICYmIHctPm1jX21hdHJp
eC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgudS52YWwgPT0gZ2x5cGgt
PnUudmFsCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2Fj
aGVfdHlwZV1bbnRoXS5nbHlwaC5mYWNlX2lkID09IGdseXBoLT5mYWNlX2lkCisgICAgICAgICAg
ICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlw
aC5wYWRkaW5nX3AgPT0gZ2x5cGgtPnBhZGRpbmdfcAorICAgICAgICAgICAgICYmIHctPm1jX21h
dHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgubGVmdF9ib3hfbGlu
ZV9wID09IGdseXBoLT5sZWZ0X2JveF9saW5lX3AKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnJpZ2h0X2JveF9saW5l
X3AgPT0gZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnZvZmZzZXQgPT0gZ2x5
cGgtPnZvZmZzZXQKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo
ZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnBpeGVsX3dpZHRoID09IGdseXBoLT5waXhlbF93aWR0
aAorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5
cGVdW250aF0uZ2x5cGguc2xpY2UuaW1nLnggPT0gZ2x5cGgtPnNsaWNlLmltZy54CisgICAgICAg
ICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5n
bHlwaC5zbGljZS5pbWcueSA9PSBnbHlwaC0+c2xpY2UuaW1nLnkKKyAgICAgICAgICAgICAmJiB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNl
LmltZy53aWR0aCA9PSBnbHlwaC0+c2xpY2UuaW1nLndpZHRoCisgICAgICAgICAgICAgJiYgdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5zbGljZS5p
bWcuaGVpZ2h0ID09IGdseXBoLT5zbGljZS5pbWcuaGVpZ2h0CisgICAgICAgICAgICAgJiYgdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5zbGljZS5j
bXAuZnJvbSA9PSBnbHlwaC0+c2xpY2UuY21wLmZyb20KKyAgICAgICAgICAgICAmJiB3LT5tY19t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnggPT0geAorICAgICAgICAg
ICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZngg
PT0gZngKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhdLnkgPT0geQorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3Zu
dGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZnkgPT0gZnkKKyAgICAgICAgICAgICAmJiB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmhwb3MgPT0gaHBvcwor
ICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF0udnBvcyA9PSB2cG9zCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS53ZCA9PSB3ZAorICAgICAgICAgICAgICYmIHctPm1j
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uaCA9PSBoCisgICAgICAg
ICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5j
dXJzb3JfdHlwZSA9PSBjdXJzb3JfdHlwZQorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uY3Vyc29yX3dpZHRoID09IGN1cnNvcl93
aWR0aAorICAgICAgICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl
X3R5cGVdW250aF0uZmcucmVkID09IGZvcmVncm91bmQucmVkCisgICAgICAgICAgICAgJiYgdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ncmVlbiA9PSBm
b3JlZ3JvdW5kLmdyZWVuCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ibHVlID09IGZvcmVncm91bmQuYmx1ZQorICAgICAg
ICAgICAgICYmIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0u
YmcucmVkID09IGJhY2tncm91bmQucmVkCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZw
b3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ncmVlbiA9PSBiYWNrZ3JvdW5kLmdy
ZWVuCisgICAgICAgICAgICAgJiYgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVf
dHlwZV1bbnRoXS5iZy5ibHVlID09IGJhY2tncm91bmQuYmx1ZQorICAgICAgICAgICAgICYmIHct
Pm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uYWN0aXZlX3AgPT0g
YWN0aXZlX3AKKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtj
YWNoZV90eXBlXVtudGhdLmdseXBoX2ZsYXZvciA9PSBnbHlwaF9mbGF2b3IKKyAgICAgICAgICAg
ICAmJiB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnJvd19w
b3NpdGlvbiA9PSByb3dfcG9zaXRpb24KKyAgICAgICAgICAgICAmJiB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmVuYWJsZWRfcCA9PSB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgLyogSW4gYSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgYXJlIG5vIGNoYW5nZXMg
KGUuZy4sIEMtZyksIHdlIHN0aWxsIG5lZWQgdG8KKyAgICAgIHJlc2V0IHRoZSBsZWZ0L3JpZ2h0
IGZyaW5nZSBiaXRtYXAgaW5kaWNhdG9ycy4gKi8KKyAgICAgIGlmICghc2FtZV9wCisgICAgICAg
ICAgfHwgY3Vyc29yX3R5cGUgPT0gTUNfTEVGVF9GUklOR0VfQklUTUFQCisgICAgICAgICAgfHwg
Y3Vyc29yX3R5cGUgPT0gTUNfUklHSFRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgbWNfZHJhd19l
cmFzZV9oeWJyaWQgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdk
LCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93
aWR0aCwgZm9yZWdyb3VuZCwgYWN0aXZlX3AsIGdseXBoX2ZsYXZvciwgcmVtb3ZlX3ApOworICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChkcmF3X3AKKyAgICAgICAgICAgICAmJiAo
ZnJvbV93aGVyZSA9PSBTQ1JJQkVfT05FCisgICAgICAgICAgICAgICAgIHx8IGZyb21fd2hlcmUg
PT0gU0NSSUJFX1RXTworICAgICAgICAgICAgICAgICB8fCBmcm9tX3doZXJlID09IFNDUklCRV9U
SFJFRQorICAgICAgICAgICAgICAgICB8fCBmcm9tX3doZXJlID09IE5PV0hFUkUpKQorICAgICAg
eworICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5
LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLCBhY3RpdmVfcCwgZ2x5cGhfZmxh
dm9yLCByZW1vdmVfcCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgaWYgKGNhY2hlX3R5
cGUgPT0gTk9fQ0FDSEUpCisgICAgcmV0dXJuOworICArK3ctPm1jX21hdHJpeC5jdXJzb3JzX3Vz
ZWRbY2FjaGVfdHlwZV07CisgIGlmICh2bnRoID49IHctPm1jX21hdHJpeC52cG9zX3VzZWQpCisg
ICAgdy0+bWNfbWF0cml4LnZwb3NfdXNlZCA9IHZudGggKyAxOworICBpZiAody0+bWNfbWF0cml4
LnZwb3NfYWxsb2NhdGVkIDwgdy0+bWNfbWF0cml4LnZwb3NfdXNlZCkKKyAgICB7CisgICAgICBp
bnQgb2xkX2FsbG9jID0gdy0+bWNfbWF0cml4LnZwb3NfYWxsb2NhdGVkOworICAgICAgaW50IG5l
d19lbHRzID0gdy0+bWNfbWF0cml4LnZwb3NfdXNlZCAtIHctPm1jX21hdHJpeC52cG9zX2FsbG9j
YXRlZDsKKyAgICAgIHctPm1jX21hdHJpeC52cG9zID0geHBhbGxvYyAody0+bWNfbWF0cml4LnZw
b3MsICZ3LT5tY19tYXRyaXgudnBvc19hbGxvY2F0ZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld19lbHRzLCBJTlRfTUFYLCBzaXplb2YgKnctPm1jX21hdHJpeC52cG9z
KTsKKyAgICAgIG1lbXNldCAody0+bWNfbWF0cml4LnZwb3MgKyBvbGRfYWxsb2MsIDAsCisgICAg
ICAgICAgICAgICAody0+bWNfbWF0cml4LnZwb3NfYWxsb2NhdGVkIC0gb2xkX2FsbG9jKSAqIHNp
emVvZiAqdy0+bWNfbWF0cml4LnZwb3MpOworICAgIH0KKyAgKyt3LT5tY19tYXRyaXgudnBvc1t2
bnRoXS5jYWNoZV91c2VkW2NhY2hlX3R5cGVdOworICBpZiAody0+bWNfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdIDwgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0u
Y2FjaGVfdXNlZFtjYWNoZV90eXBlXSkKKyAgICB7CisgICAgICBpbnQgb2xkX2FsbG9jID0gdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdOworICAgICAg
aW50IG5ld19lbHRzID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVfdXNlZFtjYWNoZV90
eXBlXSAtIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlX2FsbG9jYXRlZFtjYWNoZV90eXBl
XTsKKyAgICAgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdID0geHBh
bGxvYyAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZV9hbGxvY2F0ZWRbY2FjaGVfdHlwZV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19l
bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJTlRfTUFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YgKnctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdKTsKKyAgICAgIG1lbXNldCAody0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV0gKyBvbGRfYWxsb2MsIDAsCisgICAgICAgICAgICAgICAody0+bWNfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVfYWxsb2NhdGVkW2NhY2hlX3R5cGVdIC0gb2xkX2FsbG9jKQor
ICAgICAgICAgICAgICAgICAqIHNpemVvZiAqdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb
Y2FjaGVfdHlwZV0pOworICAgIH0KKyAgaW50IG50aCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0gLSAxOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5j
YWNoZVtjYWNoZV90eXBlXVtudGhdLnNhbWVfcCA9IGZhbHNlOworICB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnR5cGUgPSBnbHlwaC0+dHlwZTsK
KyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5i
eXRlcG9zID0gZ2x5cGgtPmJ5dGVwb3M7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdW250aF0uZ2x5cGguY2hhcnBvcyA9IGdseXBoLT5jaGFycG9zOworICB3LT5t
Y19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLmxudW0gPSBn
bHlwaC0+bG51bTsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b
bnRoXS5nbHlwaC51LnZhbCA9IGdseXBoLT51LnZhbDsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC51LmNoID0gZ2x5cGgtPnUuY2g7CisgIHct
Pm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGguZmFjZV9p
ZCA9IGdseXBoLT5mYWNlX2lkOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhdLmdseXBoLnBhZGRpbmdfcCA9IGdseXBoLT5wYWRkaW5nX3A7CisgIHctPm1j
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5cGgubGVmdF9ib3hf
bGluZV9wID0gZ2x5cGgtPmxlZnRfYm94X2xpbmVfcDsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50
aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5nbHlwaC5yaWdodF9ib3hfbGluZV9wID0gZ2x5cGgt
PnJpZ2h0X2JveF9saW5lX3A7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl
X3R5cGVdW250aF0uZ2x5cGgudm9mZnNldCA9IGdseXBoLT52b2Zmc2V0OworICB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnBpeGVsX3dpZHRoID0g
Z2x5cGgtPnBpeGVsX3dpZHRoOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhdLmdseXBoLnNsaWNlLmltZy54ID0gZ2x5cGgtPnNsaWNlLmltZy54OworICB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNl
LmltZy55ID0gZ2x5cGgtPnNsaWNlLmltZy55OworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5j
YWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNsaWNlLmltZy53aWR0aCA9IGdseXBoLT5zbGlj
ZS5pbWcud2lkdGg7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF0uZ2x5cGguc2xpY2UuaW1nLmhlaWdodCA9IGdseXBoLT5zbGljZS5pbWcuaGVpZ2h0Owor
ICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoLnNs
aWNlLmNtcC5mcm9tID0gZ2x5cGgtPnNsaWNlLmNtcC5mcm9tOworICB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnggPSB4OworICB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZ4ID0gZng7CisgIHctPm1jX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0ueSA9IHk7CisgIHctPm1jX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZnkgPSBmeTsKKyAgdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5ocG9zID0gaHBvczsKKyAgdy0+bWNf
bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS52cG9zID0gdnBvczsKKyAg
dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS53ZCA9IHdkOwor
ICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmggPSBoOwor
ICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl90
eXBlID0gY3Vyc29yX3R5cGU7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hl
X3R5cGVdW250aF0uY3Vyc29yX3dpZHRoID0gY3Vyc29yX3dpZHRoOworICB3LT5tY19tYXRyaXgu
dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLnJlZCA9IGZvcmVncm91bmQucmVk
OworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLmdy
ZWVuID0gZm9yZWdyb3VuZC5ncmVlbjsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb
Y2FjaGVfdHlwZV1bbnRoXS5mZy5ibHVlID0gZm9yZWdyb3VuZC5ibHVlOworICB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLnJlZCA9IGJhY2tncm91bmQu
cmVkOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJn
LmdyZWVuID0gYmFja2dyb3VuZC5ncmVlbjsKKyAgdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ibHVlID0gYmFja2dyb3VuZC5ibHVlOworICB3LT5tY19t
YXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmFjdGl2ZV9wID0gYWN0aXZl
X3A7CisgIHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZ2x5
cGhfZmxhdm9yID0gZ2x5cGhfZmxhdm9yOworICB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo
ZVtjYWNoZV90eXBlXVtudGhdLnJvd19wb3NpdGlvbiA9IHJvd19wb3NpdGlvbjsKKyAgdy0+bWNf
bWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3AgPSB0cnVl
OworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnbHlwaCBXJ3MgcGh5c2ljYWwgY3Vy
c29yIGlzIG9uLiAgVmFsdWUgaXMgbnVsbCBpZiBXJ3MKKyAgIG1hdHJpeCBpcyBpbnZhbGlkLCBz
byB0aGF0IG5vIG1lYW5pbmdmdWwgZ2x5cGggY2FuIGJlIHJldHVybmVkLiAqLworc3RydWN0IGds
eXBoICoKK21jX2dldF9jdXJzb3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlw
aF9tYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cg
KnJvdywgaW50IGhwb3MsIGludCB2cG9zKQoreworICBzdHJ1Y3QgZ2x5cGggKmdseXBoOworICBp
ZiAoISh2cG9zID49IDAKKyAgICAgICAgJiYgdnBvcyA8IG1hdHJpeC0+bnJvd3MpKQorICAgIHJl
dHVybiBOVUxMOworICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgIHJldHVybiBOVUxMOworICBp
ZiAody0+aHNjcm9sbCkKKyAgICB7CisgICAgICAvKiBXaGVuIHRoZSB3aW5kb3cgaXMgaHNjcm9s
bGVkLCBjdXJzb3IgaHBvcyBjYW4gbGVnaXRpbWF0ZWx5IGJlCisgICAgICBvdXQgb2YgYm91bmRz
LCBidXQgd2UgZHJhdyB0aGUgY3Vyc29yIGF0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB3aW5k
b3cgbWFyZ2luIGluIHRoYXQgY2FzZS4gKi8KKyAgICAgIGlmICghcm93LT5yZXZlcnNlZF9wICYm
IGhwb3MgPCAwKQorICAgICAgICBocG9zID0gMDsKKyAgICAgIGlmIChyb3ctPnJldmVyc2VkX3Ag
JiYgaHBvcyA+PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICAgICAgaHBvcyA9IHJvdy0+dXNl
ZFtURVhUX0FSRUFdIC0gMTsKKyAgICB9CisgIGlmICgwIDw9IGhwb3MgJiYgaHBvcyA8IHJvdy0+
dXNlZFtURVhUX0FSRUFdKQorICAgIGdseXBoID0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIGhw
b3M7CisgICAgZWxzZQorICAgICAgZ2x5cGggPSBOVUxMOworICByZXR1cm4gZ2x5cGg7Cit9CisK
Ky8qIFRoaXMgZnVuY3Rpb24gZGlmZmVycyBzdWJzdGFudGlhbGx5IGZyb20gYGdldF9waHlzX2N1
cnNvcl9nZW9tZXRyeScuCisgICBgeHRlcm0uY2A6ICBgbWNfeF9kcmF3X2hvbGxvd19jdXJzb3Jg
IGNhbGxzIGB4X2RyYXdfcmVjdGFuZ2xlJywgd2hpY2ggcmVxdWlyZXMKKyAgIGEgV0QgLSAxIGFu
ZCBIIC0gMS4gIFNvIHRoYXQgYG1jX2dldF9jdXJzb3JfZ2VvbWV0cnlgIGNhbiBiZSB1c2VkIGZv
ciBhbGwKKyAgIHBsYXRmb3JtcywgYG1jX3hfZHJhd19ob2xsb3dfY3Vyc29yYCBzdWJ0cmFjdHMg
dGhlIGV4dHJhIHBpeGVsIGZyb20gV0QgYW5kIEguCisgICBGWDogIEZyYW1lIHJlbGF0aXZlIGNv
b3JkaW5hdGUgZm9yIHdpbmRvdyByZWxhdGl2ZSBYLgorICAgRlk6ICBGcmFtZSByZWxhdGl2ZSBj
b29yZGluYXRlIG9mIFJPVy0+WTsgaS5lLiwgdG9wIG9mIHRoZSBsaW5lLiAgRm9yIGFuCisgICAg
ICAgIE1DX0hCQVIsIHVzZSBST1ctPlkgKyBST1ctPlZJU0lCTEVfSEVJR0hUIC0gMSBwaXhlbCBz
byB0aGF0IGl0CisgICAgICAgIGlzIHBhbGNlZCBhdCB0aGUgdmVyeSBib3R0b20gb2YgdGhlIHZp
c2libGUgcm93LgorICAgV0Q6ICBHTFlQSC0+UElYRUxfV0lEVEgsIGV4Y2VwdCB3aGVuIGRlYWxp
bmcgd2l0aCBhIFNUUkVUQ0hfR0xZUEggd2hlbiB3ZSB0YWtlCisgICAgICAgIGludG8gY29uc2lk
ZXJhdGlvbiBgeC1zdHJldGNoLWN1cnNvcicgYW5kIGBjdXJzb3JfdHlwZWAuCisgICBIOiAgTUNf
SEJBUiBpcyAxIHBpeGVsLCBhbmQgYWxsIG90aGVycyBhcmUgUk9XLT5WSVNJQkxFX0hFSUdIVC4K
KyAgICAgICBGSVhNRTogIEFkZCBjb25kaXRpb25zIGZvciB1c2VyLXNwZWNpZmllZCB0aGlja25l
c3Mgb2YgTUNfQkFSIGFuZAorICAgICAgICAgICAgICAgTUNfSEJBUiBhcyB0byBgbWMtcmVhbC1m
YWtlLWN1cnNvcicuCisgICBNVUxUSVBMRV9DVVJTT1JTOiAgV2UgZG8gbm90IHVzZSB0aGlzIGZ1
bmN0aW9uLgorICAgSE9SSVpPTlRBTF9SVUxFUjogIFdlIHdhbnQgYSB1bml2ZXJzYWwgRlkgY29v
cmRpbmF0ZSBmb3IgYSBsZXZlbCBydWxlci4KKyAgIFZFUlRJQ0FMX1JVTEVSIGFuZCBGSUxMX0NP
TFVNTjogIFdlIHdhbnQgYW4gSCB0aGF0IGVuc3VyZXMgbm8gZ2FwIGJldHdlZW4gdGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy9uZXh0IGxpbmUuICBUaGUg
RlggY29vcmRpbmF0ZSBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2V3aGVyZTogIGB3LT5jdXJzb3IueGAgLyBgbWMuZmNfeGAuICovCit2b2lkCittY19nZXRf
Y3Vyc29yX2dlb21ldHJ5IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICpt
YXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csIGlu
dCB4LCBpbnQgKmZ4LCBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZnksIGlu
dCBocG9zLCBpbnQgdnBvcywgaW50ICpoLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBt
Y19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSwgaW50IGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludCAqd2QpCit7CisgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSBtY19nZXRf
Y3Vyc29yX2dseXBoICh3LCBtYXRyaXgsIHJvdywgaHBvcywgdnBvcyk7CisgIGlmIChnbHlwaCA9
PSBOVUxMKQorICAgIHJldHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1df
RlJBTUUgKHcpKTsKKyAgKmZ4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgeCk7
CisgICpoID0gcm93LT52aXNpYmxlX2hlaWdodDsKKyAgLyogRG9uJ3QgbGV0IHRoZSBjdXJzb3Ig
ZXhjZWVkIHRoZSBkaW1lbnNpb25zIG9mIHRoZSByb3csIHNvIHRoYXQKKyAgdGhlIHVwcGVyL2xv
d2VyIHNpZGUgb2YgdGhlIGJveCBhcmVuJ3QgY2xpcHBlZC4gICovCisgIGludCB3X2hlYWRlcl9s
aW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQgd190ZXh0
X2JvdHRvbV95ID0gd2luZG93X3RleHRfYm90dG9tX3kgKHcpIC0gKmg7CisgIGlmICh5IDwgd19o
ZWFkZXJfbGluZV9oZWlnaHQpCisgICAgeworICAgICAgKmggPSBtYXggKCpoIC0gKHdfaGVhZGVy
X2xpbmVfaGVpZ2h0IC0geSkgKyAxLCAqaCk7CisgICAgICB5ID0gd19oZWFkZXJfbGluZV9oZWln
aHQgLSAxOworICAgICAgLy8gZnByaW50ZiAoc3RkZXJyLCAiQ09ORElUSU9OICMgMVxuIik7Cisg
ICAgfQorICAgZWxzZSBpZiAoeSA+IHdfdGV4dF9ib3R0b21feSkKKyAgICAgeworICAgICAgICpo
ICs9IHkgLSB3X3RleHRfYm90dG9tX3k7CisgICAgICAgeSA9IHdfdGV4dF9ib3R0b21feTsKKyAg
ICAgICAvLyBmcHJpbnRmIChzdGRlcnIsICJDT05ESVRJT04gIyAyXG4iKTsKKyAgICAgfQorICAq
ZnkgPSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgeSk7CisgIHN3aXRjaCAoY3Vyc29yX3R5
cGUpCisgICAgeworICAgICAgY2FzZSBNQ19CQVI6CisgICAgICAgIHsKKyAgICAgICAgICBpZiAo
Y3Vyc29yX3dpZHRoIDwgMSkKKyAgICAgICAgICAgIGN1cnNvcl93aWR0aCA9IG1heCAoRlJBTUVf
Q1VSU09SX1dJRFRIIChmKSwgMSk7CisgICAgICAgICAgaWYgKGN1cnNvcl93aWR0aCA8IGdseXBo
LT5waXhlbF93aWR0aCkKKyAgICAgICAgICAqd2QgPSBjdXJzb3Jfd2lkdGg7CisgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgIGNhc2UgTUNfSEJBUjoKKyAgICAgICAgeworICAgICAg
ICAgIGludCBjdXJzb3JfaGVpZ2h0ID0gKGN1cnNvcl93aWR0aCA8IDEpID8gbHJpbnQgKDAuMjUg
KiAqaCkgOiBjdXJzb3Jfd2lkdGg7CisgICAgICAgICAgaWYgKGN1cnNvcl9oZWlnaHQgPiByb3ct
PmhlaWdodCkKKyAgICAgICAgICAgIGN1cnNvcl9oZWlnaHQgPSByb3ctPmhlaWdodDsKKyAgICAg
ICAgICAvKiBDdXJzb3Igc21hbGxlciB0aGFuIGxpbmUgaGVpZ2h0LCBzbyBtb3ZlIGRvd24uICov
CisgICAgICAgICAgaWYgKCpoID4gY3Vyc29yX2hlaWdodCkKKyAgICAgICAgICAgICpmeSArPSAq
aCAtIGN1cnNvcl9oZWlnaHQ7CisgICAgICAgICAgKmggPSBjdXJzb3JfaGVpZ2h0OworICAgICAg
ICAgICp3ZCA9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgY2FzZSBNQ19SSUdIVF9GUklOR0VfQklUTUFQOgorICAgICAgY2FzZSBNQ19MRUZU
X0ZSSU5HRV9CSVRNQVA6CisgICAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRNQVA6CisgICAgICBj
YXNlIE1DX05PX0NVUlNPUjoKKyAgICAgIGNhc2UgTUNfRlJBTUVEX0JPWDoKKyAgICAgIGNhc2Ug
TUNfRklMTEVEX0JPWDoKKyAgICAgIGNhc2UgTUNfSE9MTE9XX0JPWDoKKyAgICAgIGRlZmF1bHQ6
CisgICAgICAvKiBDb21wdXRlIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlIHRvIGRyYXcuICBJ
ZiBvbiBhIHN0cmV0Y2ggZ2x5cGgsIGFuZAorICAgICAgYHgtc3RyZXRjaC1jdXJzb3InIGlzIG5p
bCwgZG9uJ3QgZHJhdyBhIHJlY3RhbmdsZSBhcyB3aWRlIGFzIHRoZSBnbHlwaCwgYnV0CisgICAg
ICB1c2UgYSBjYW5vbmljYWwgY2hhcmFjdGVyIHdpZHRoIGluc3RlYWQuICovCisgICAgICAqd2Qg
PSAoZ2x5cGgtPnR5cGUgPT0gU1RSRVRDSF9HTFlQSAorICAgICAgICAgICAgICYmICF4X3N0cmV0
Y2hfY3Vyc29yX3ApCisgICAgICAgICAgICA/IG1pbiAoRlJBTUVfQ09MVU1OX1dJRFRIIChmKSwg
Z2x5cGgtPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgOiBnbHlwaC0+cGl4ZWxfd2lkdGg7Cisg
ICAgfQorLyoKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImN1cnNvcl93aWR0aDogKCVkKSB8IHgg
KCVkKSB8ICpmeCAoJWQpIHwgeSAoJWQpIHwgKmZ5ICglZCksICp3ZCAoJWQpIHwgKmggKCVkKVxu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3dpZHRoLCB4LCAqZngsIHksICpmeSwg
KndkLCAqaCk7CisqLworfQorCit2b2lkCittY19lbmdpbmUgKHN0cnVjdCB3aW5kb3cgKncsIHN0
cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAg
ICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoLCBpbnQgYXJlYSwgaW50IHJlbGF0aXZlX3gsIGludCB4
X2xpbWl0LCBpbnQgeSwKKyAgICAgICAgICAgaW50IGhwb3MsIGludCB2cG9zLCBlbnVtIG1jX2N1
cnNvcl90eXBlIGN1cnNvcl90eXBlLCBpbnQgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICBzdHJ1
Y3QgZ2x5cGhfbWF0cml4ICpjdXJzb3JfbWF0cml4LCBzdHJ1Y3QgbWNfZXNzZW50aWFscyBlc3Nl
bnRpYWxzLAorICAgICAgICAgICBlbnVtIG1jX3Jvd19wb3NpdGlvbiByb3dfcG9zaXRpb24sIHN0
cnVjdCBtY19SR0IgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgZW51bSBtY19lbmdpbmVfdHlwZSBh
Y3Rpb25fdHlwZSwgYm9vbCBkcmF3X3AsCisgICAgICAgICAgIGVudW0gbWNfZHJhd19yb3dfdHlw
ZSBmcm9tX3doZXJlLCBlbnVtIG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSkKK3sKKyAgaW50IG9w
b2ludF94ID0gdy0+Y3Vyc29yLng7CisgIGludCBvcG9pbnRfeSA9IHctPmN1cnNvci55OworICBp
bnQgb3BvaW50X2hwb3MgPSB3LT5jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+
Y3Vyc29yLnZwb3M7CisgIGludCBmeCwgZnksIGgsIHdkOworICBtY19nZXRfY3Vyc29yX2dlb21l
dHJ5ICh3LCBtYXRyaXgsIHJvdywgcmVsYXRpdmVfeCwgJmZ4LCB5LCAmZnksIGhwb3MsIHZwb3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICZoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRo
LCAmd2QpOworICBpbnQgb3BvaW50X2Z4ID0gV0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAo
dywgb3BvaW50X3gpOworICBpbnQgZmNfZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9Y
ICh3LCBlc3NlbnRpYWxzLmZjX3gpOworICBib29sIGdseXBoX3p2X3AgPSAoZ2x5cGggLSByb3ct
PmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAg
ICAgICAgICYmIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgPT0gWlYpOworICBzdHJ1Y3Qg
ZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZG
RVIgKHctPmNvbnRlbnRzKTsKKyAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hfd2lk
dGggKHcsIFRFWFRfQVJFQSk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmN1cnNvcl9yb3cgPSAody0+
Y3Vyc29yLnZwb3MgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1B
VFJJWF9ST1cgKGN1cnNvcl9tYXRyaXgsIHctPmN1cnNvci52cG9zKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBOVUxMOworICBzdHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9
ICh3LT5jdXJzb3IudnBvcyAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIGN1cnNvcl9tYXRyaXgsIGN1cnNvcl9yb3csCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5jdXJz
b3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBOVUxMOworICBib29sIGN1cnNvcl9hdF9mcmluZ2VfcCA9IChjdXJzb3JfZ2x5cGggPT0gTlVM
TAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jfcm93ICE9IE5VTEwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gY3Vyc29yX3Jv
dy0+dXNlZFtURVhUX0FSRUFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNv
cl9yb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgdy0+Y3Vyc29yLnggPT0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID09IGN1cnNvcl9yb3ctPnBpeGVsX3dpZHRoKTsK
KyAgYm9vbCBjdXJzb3JfYmV5b25kX2ZyaW5nZV9wID0gKGN1cnNvcl9nbHlwaCA9PSBOVUxMCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJzb3Jfcm93ICE9IE5VTEwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zID09IGN1cnNv
cl9yb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgIWN1cnNvcl9yb3ctPmV4YWN0X3dpbmRvd193aWR0aF9saW5lX3AKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID49IHRleHRfYXJlYV93aWR0aAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnggPj0gY3Vyc29yX3Jv
dy0+cGl4ZWxfd2lkdGgpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9X
SURUSCAoZik7CisgIGludCB0ZW1wX2ZhY2VfaWQgPSBnbHlwaC0+ZmFjZV9pZDsKKyAgc3RydWN0
IG1jX1JHQiBiYWNrZ3JvdW5kOworICBtY19zZXRfbHNsX2JnICh3LCB0ZW1wX2ZhY2VfaWQsICZi
YWNrZ3JvdW5kKTsKKyAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAob3BvaW50X3ggPT0gcmVs
YXRpdmVfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfaHBvcyA9PSBo
cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09IHJvdy0+eQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB2cG9zKTsKKwor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgQkVHSU46
ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAgICAgICAgKi8KKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworICBpZiAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAg
ICAgfHwgZ2x5cGgtPnR5cGUgPT0gR0xZUEhMRVNTX0dMWVBIKQorICB7CisgICAgaWYgKG1jX3N0
ZGVycl9wKQorICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiXG4gJTUicEQiZC8lLTVk
ICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEuMWQgICUzZCAlcyAlc1xu
IiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJv
dy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAg
cmVsYXRpdmVfeCwKKyAgICAgICAgKGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAg
ID8gJ0MnCisgICAgICAgICA6ICdHJyksCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAg
ICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgID8gJ0InCisgICAgICAgICA6IChT
VFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICAgIDog
KE5JTFAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAg
ICAgOiAnLScpKSksCisgICAgICAgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAg
Z2x5cGgtPnUuY2gsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVm
dF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAg
Z2x5cGgtPmhwb3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgbWNfY2hhcl90
b19zdHJpbmcgKGdseXBoLT51LmNoKSk7CisgIHN3aXRjaCAoYWN0aW9uX3R5cGUpCisgIHsKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJTT1JT
OiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICovCisvKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIE1VTFRJUExFX0NVUlNPUlM6CisgICAgeworICAg
ICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIHJlbGF0aXZlX3gsIGZ4LCB5LCBm
eSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgd2QsIGgsIGN1cnNvcl90eXBlLCBjdXJz
b3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAgYmFj
a2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVy
ZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJl
YWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgIEhP
UklaT05UQUxfUlVMRVI6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAg
ICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpPTlRBTF9SVUxF
UjoKKyAgICB7CisgICAgICBpZiAocmVsYXRpdmVfeCA8IHJvdy0+cGl4ZWxfd2lkdGgKKyAgICAg
ICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJp
eCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAg
ICAgICAgICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRp
b24sIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFs
cy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAg
ICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBpZiAocmVsYXRpdmVfeCA8IHJv
dy0+cGl4ZWxfd2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBo
LT5waXhlbF93aWR0aDsKKyAgICAgICAgICBmeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAg
ICAgIH0KKyAgICAgIGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51
c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIHJlbGF0aXZlX3ggPCB4X2xpbWl0KQorICAgICAg
ICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5
LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHhfbGltaXQgLSByZWxhdGl2ZV94LCBo
LCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sCisgICAgICAgICAgICAg
ICAgICAgZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZ
UEhMRVNTLAorICAgICAgICAgICAgICAgICAgIGRyYXdfcCwgZnJvbV93aGVyZSwgY2FjaGVfdHlw
ZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisvKiAgICAgICAgICAgICAgIFZFUlRJQ0FMX1JVTEVSOiAgQ0hBUl9HTFlQSCB8IEdM
WVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworICAgIGNhc2UgVkVSVElDQUxfUlVMRVI6CisgICAgeworICAgICAgZW51bSBtY19mbGF2b3Ig
Z2x5cGhfZmxhdm9yID0gKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHJvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT5jb250aW51ZWRfcAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29u
X3JpZ2h0X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVS
VElDQUxfQkFSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChjdXJzb3Jf
YXRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJv
dy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IChjdXJzb3JfYmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZFUlRJ
Q0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAoY3Vyc29yX2JleW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgY3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FSRUFdICE9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9w
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1JFVkVSU0VEX1ZF
UlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGgg
LSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID49IHJvdy0+cGl4ZWxf
d2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhM
RVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96dl9wKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAgIGlmIChn
bHlwaF9mbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwg
Z2x5cGhfZmxhdm9yID09IE1DX1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAg
ICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAg
ICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgIHx8IGds
eXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90
eXBlID0gTUNfUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgICAgIHdkID0gMTsKKyAgICAgIG1jX2hl
bHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCByZWxhdGl2ZV94LCBvcG9pbnRfZngsIHksIGZ5
LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNv
cl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93
aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAg
YnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAg
IEZJTExfQ09MVU1OOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAg
ICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46Cisg
ICAgeworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gKGdseXBoIC0gcm93LT5n
bHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgZXNzZW50aWFscy5mY194ID49IHJvdy0+cGl4ZWxfd2lk
dGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNT
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnbHlwaF96dl9wKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFp
cnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJW
QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGljYWxfcnVsZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0geQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdnBvcykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICB3ZCA9IDE7
CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZmNf
ZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5
cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdf
cCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUp
OworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2Fz
ZSBDVVJTT1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog
ICAgICAgICAgICAgICAgICAgICAgICBFTkQ6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBI
ICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVHSU46
ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKQor
ICB7CisgICAgaWYgKG1jX3N0ZGVycl9wKQorICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAg
ICAiXG4gJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFk
JTEuMWQgICUzZCAlcyAlc1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FS
RUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJl
YV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1MnLAorICAgICAgICBnbHlw
aC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmplY3QpCisgICAgICAgICA/
ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8g
J1MnCisgICAgICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICAg
PyAnMCcKKyAgICAgICAgICAgICAgIDogJy0nKSkpLAorICAgICAgICBnbHlwaC0+cGl4ZWxfd2lk
dGgsCisgICAgICAgIDB1LAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgt
PmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAg
ICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICJcXFMi
KTsKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CisvKiAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFX0NVUlNPUlM6ICBTVFJFVENIX0dM
WVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAg
IGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJp
eCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAg
ICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9u
LCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFj
dGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICBj
YWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgSE9SSVpPTlRBTF9SVUxF
UjogIFNUUkVUQ0hfR0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGlmIChy
ZWxhdGl2ZV94IDwgcm93LT5waXhlbF93aWR0aAorICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vy
c29yX3ApCisgICAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCByZWxhdGl2
ZV94LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgd2QsIGgsIGN1
cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3VuZCwKKyAgICAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwg
ZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICAgIGNhY2hlX3R5cGUsIGFjdGlv
bl90eXBlKTsKKyAgICAgIGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93
LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIHJlbGF0aXZlX3ggPD0geF9saW1pdCkKKyAg
ICAgICAgeworICAgICAgICAgIGlmIChyZWxhdGl2ZV94IDwgcm93LT5waXhlbF93aWR0aCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVsYXRpdmVfeCArPSBnbHlwaC0+cGl4ZWxfd2lk
dGg7CisgICAgICAgICAgICAgIGZ4ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB0ZW1wX2ZhY2VfaWQgPSAocm93LT5maWxsX2xpbmVfcCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICA/IGdseXBoLT5mYWNlX2lkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBiYWNrZ3JvdW5k
OworICAgICAgICAgIG1jX3NldF9sc2xfYmcgKHcsIHRlbXBfZmFjZV9pZCwgJmJhY2tncm91bmQp
OworICAgICAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoLCByZWxhdGl2ZV94
LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICB4X2xpbWl0IC0g
cmVsYXRpdmVfeCwgaCwgY3Vyc29yX3R5cGUsIHhfbGltaXQgLSByZWxhdGl2ZV94LAorICAgICAg
ICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBlc3Nl
bnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgICAgTUNfR0xZUEhMRVNTLCBkcmF3
X3AsIGZyb21fd2hlcmUsIGNhY2hlX3R5cGUsIGFjdGlvbl90eXBlKTsKKyAgICAgICAgfQorICAg
ICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBTVFJFVENIX0dMWVBIICAgICAgICAgICAg
ICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgVkVSVElDQUxf
UlVMRVI6CisgICAgeworICAgICAgaWYgKHJvdy0+ZmlsbF9saW5lX3AKKyAgICAgICAgICAmJiBn
bHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAg
ICAgICAgICYmIG9wb2ludF94ID4gcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAg
ICAgICAgdGVtcF9mYWNlX2lkID0gZ2x5cGgtPmZhY2VfaWQ7CisgICAgICAgIGVsc2UgaWYgKCFy
b3ctPmZpbGxfbGluZV9wCisgICAgICAgICAgICAgICAgICYmIGdseXBoIC0gcm93LT5nbHlwaHNb
VEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICYmIG9w
b2ludF94ID4gcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAgICB0ZW1w
X2ZhY2VfaWQgPSBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBzdHJ1Y3QgbWNfUkdCIGJhY2tncm91
bmQ7CisgICAgICBtY19zZXRfbHNsX2JnICh3LCB0ZW1wX2ZhY2VfaWQsICZiYWNrZ3JvdW5kKTsK
KyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdlX3AK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9w
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JB
Ul9CQUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNv
cl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
IXJvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP
VworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9uZF9m
cmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50
cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9B
UkVBXSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93
LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogTUNfR0xZUEhMRVNTOworICAgICAgaWYgKGdseXBoX2ZsYXZvciA9PSBN
Q19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0g
TUNfUkVWRVJTRURfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZ2x5cGhf
Zmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICB8fCBnbHlwaF9m
bGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSCisgICAgICAgICAgfHwgZ2x5cGhfZmxhdm9yID09IE1D
X1JFVkVSU0VEX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUgPSBNQ19SSUdIVF9G
UklOR0VfQklUTUFQOworICAgICAgd2QgPSAxOworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgs
IHJvdywgZ2x5cGgsIG9wb2ludF94LCBvcG9pbnRfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAg
ICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0
aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxz
LmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAg
ICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExf
Q09MVU1OOiAgU1RSRVRDSF9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgeworICAgICAgaWYg
KHJvdy0+ZmlsbF9saW5lX3AKKyAgICAgICAgICAmJiBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRf
QVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNf
eCA+IHJlbGF0aXZlX3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGgpCisgICAgICAgIHRlbXBfZmFjZV9p
ZCA9IGdseXBoLT5mYWNlX2lkOworICAgICAgICBlbHNlIGlmICghcm93LT5maWxsX2xpbmVfcAor
ICAgICAgICAgICAgICAgICAmJiBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93
LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPiBy
ZWxhdGl2ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoKQorICAgICAgICAgIHRlbXBfZmFjZV9pZCA9
IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIHN0cnVjdCBtY19SR0IgYmFja2dyb3VuZDsKKyAgICAg
IG1jX3NldF9sc2xfYmcgKHcsIHRlbXBfZmFjZV9pZCwgJmJhY2tncm91bmQpOworICAgICAgZW51
bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gTUNfR0xZUEhMRVNTOworICAgICAgd2QgPSAxOwor
ICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGVzc2VudGlhbHMuZmNfeCwg
ZmNfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29y
X3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3IsIGRy
YXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9uX3R5
cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAg
Y2FzZSBDVVJTT1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgU1RSRVRDSF9HTFlQSCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJF
R0lOOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkK
KyAgeworICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAg
ICAgIlxuICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAlMS4x
ZCUxLjFkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9B
UkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2VkW2Fy
ZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdJJywKKyAgICAgICAgZ2x5
cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAg
PyAnQicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/
ICdTJworICAgICAgICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgICAg
ID8gJzAnCisgICAgICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dp
ZHRoLAorICAgICAgICAodW5zaWduZWQgaW50KSBnbHlwaC0+dS5pbWdfaWQsCisgICAgICAgIGds
eXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICBn
bHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2X3Ag
PyAiWlYiIDogIi0tIiwKKyAgICAgICAgJy4nKTsKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAg
eworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBN
VUxUSVBMRV9DVVJTT1JTOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgKi8KKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7
CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBtY19oZWxwZXIgKHcs
IG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAor
ICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bv
c2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRp
YWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAg
ICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIEhPUklaT05U
QUxfUlVMRVI6ICBJTUFHRV9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAg
IGN1cnNvcl90eXBlID0gTUNfSE9MTE9XX0JPWDsKKyAgICAgIGlmICghcmVhbF9mYWtlX2N1cnNv
cl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVf
eCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHdkLCBoLCBjdXJz
b3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAgICAg
ICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgsIGRy
YXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25f
dHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8q
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBJTUFHRV9HTFlQSCAg
ICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2Fz
ZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19C
T1g7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwg
ZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5
cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBm
cm9tX3doZXJlLAorICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7Cisg
ICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZJTExfQ09MVU1OOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAg
ICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBGSUxMX0NP
TFVNTjoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBt
Y19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBo
cG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93
aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3Jv
dW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAor
ICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsK
KyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIENVUlNPUl9JTkRJQ0FU
T1I6CisgICAgeworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CisgIH0KKyAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRU5EOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgQ09NUE9TSVRFX0dMWVBI
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisg
IGVsc2UgaWYgKGdseXBoLT50eXBlID09IENPTVBPU0lURV9HTFlQSCkKKyAgeworICAgIGlmICht
Y19zdGRlcnJfcCkKKyAgICAgIHsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAg
ICJcbiAlNSJwRCJkLyUtNWQgJTVkICVjICU5InBEImQgJWMgJTNkIDB4JTA2eCIsCisgICAgICAg
ICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAgICgocm93LT51c2Vk
W2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICAgIHJlbGF0
aXZlX3gsCisgICAgICAgICAgJysnLAorICAgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAg
ICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICA/ICdCJworICAgICAgICAg
ICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICA/ICdTJworICAgICAg
ICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgICAgICA/ICcwJwor
ICAgICAgICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgICBnbHlwaC0+cGl4ZWxfd2lkdGgs
CisgICAgICAgICAgKHVuc2lnbmVkIGludCkgZ2x5cGgtPnUuY21wLmlkKTsKKyAgICAgICAgZnBy
aW50ZiAoc3RkZXJyLCAiICU0ZCAlMS4xZCUxLjFkIiwKKyAgICAgICAgICBnbHlwaC0+ZmFjZV9p
ZCwKKyAgICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9wLAorICAgICAgICAgIGdseXBoLT5y
aWdodF9ib3hfbGluZV9wKTsKKyAgICAgIGlmIChnbHlwaC0+dS5jbXAuYXV0b21hdGljKQorICAg
ICAgICBmcHJpbnRmIChzdGRlcnIsICIgICUzZCAlcyAuIFslZC0lZF1cbiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2x5cGgtPmhwb3MsIGdseXBoX3p2X3AgPyAiWlYiIDogIi0tIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC0+c2xpY2UuY21wLmZyb20sIGdseXBoLT5zbGlj
ZS5jbXAudG8pOworICAgICAgICBlbHNlCisgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4i
KTsKKyAgICAgIH0KKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgTVVMVElQTEVfQ1VSU09SUzogIENP
TVBPU0lURV9HTFlQSCAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIg
KHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9z
LAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93
X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3Nl
bnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAg
ICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBicmVhazsKKyAgICB9Cisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBIT1JJWk9O
VEFMX1JVTEVSOiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAqLworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAg
ICAgIGlmIChyZWxhdGl2ZV94IDw9IHhfbGltaXQKKyAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1
cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRp
dmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgIHdkLCBoLCBj
dXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAg
ICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNfR0xZUEgs
IGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rp
b25fdHlwZSk7CisgICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJv
dy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAmJiByZWxhdGl2ZV94IDw9IHhfbGltaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAg
ICAgICAgICB3aGlsZSAocmVsYXRpdmVfeCA8PSB4X2xpbWl0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwg
ZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdkLCBoLCBj
dXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZvcmVncm91bmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgTUNf
R0xZUEhMRVNTLCBkcmF3X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV93aGVyZSwg
Y2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9IGZy
YW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOwor
ICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAg
ICAgVkVSVElDQUxfUlVMRVI6ICBDT01QT1NJVEVfR0xZUEggICAgICAgICAgICAgICAgICAgICov
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgorICAg
IHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChjdXJzb3JfYXRfZnJpbmdl
X3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVl
ZF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FM
X0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1
cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgIXJvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9B
UlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2JleW9u
ZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcm93
LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRfZnJpbmdlX3AKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9yb3ctPnVzZWRbVEVY
VF9BUkVBXSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAh
cm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ct
PnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiBvcG9pbnRfeCA+PSByb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAoZ2x5cGhfenZfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogTUNfR0xZUEg7CisgICAgICBpZiAoZ2x5cGhfZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9S
SUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19SRVZFUlNFRF9WRVJU
SUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfVkVS
VElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBNQ19WRVJU
SUNBTF9CQVIKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNfUkVWRVJTRURfVkVSVElD
QUxfQkFSKQorICAgICAgICBjdXJzb3JfdHlwZSA9IE1DX1JJR0hUX0ZSSU5HRV9CSVRNQVA7Cisg
ICAgICB3ZCA9IDE7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVs
YXRpdmVfeCwgb3BvaW50X2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAg
d2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3Vu
ZCwKKyAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgZ2x5
cGhfZmxhdm9yLCBkcmF3X3AsIGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIGNhY2hlX3R5
cGUsIGFjdGlvbl90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExfQ09MVU1OOiAgQ09NUE9T
SVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGds
eXBoX2ZsYXZvciA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2Vk
W2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2Vu
dGlhbHMuZmNfeCA+IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IChnbHlwaF96dl9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5J
TFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGlj
YWxfcnVsZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3Bv
aW50X3kgPT0geQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3Bv
aW50X3Zwb3MgPT0gdnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNf
R0xZUEg7CisgICAgICB3ZCA9IDE7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBn
bHlwaCwgcmVsYXRpdmVfeCwgZmNfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAg
ICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3Jl
Z3JvdW5kLAorICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9w
LCBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2Fj
aGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCisgICAgY2FzZSBDVVJTT1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJy
ZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQ6ICBD
T01QT1NJVEVfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQkVHSU46ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlw
ZSA9PSBYV0lER0VUX0dMWVBIKQorICB7CisjaWZuZGVmIEhBVkVfWFdJREdFVFMKKyAgICBlYXNz
dW1lIChmYWxzZSk7CisjZWxzZQorICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYg
KHN0ZGVyciwKKyAgICAgICAgIlxuICAlNWQvJS01ZCAlNWQgJTRjICU2ZCAlYyAlM2QgMHglMDV4
ICU0ZCAlMS4xZCUxLjFkICAlM2QgJXMgJWNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlw
aHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93
LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdYJywKKyAg
ICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQor
ICAgICAgICAgPyAnQicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAg
ICAgICAgICA/ICdTJworICAgICAgICAgICAgOiAnLScpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVs
X3dpZHRoLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRfYm94
X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBo
LT51Lnh3aWRnZXQsCisgICAgICAgIGdseXBoLT5ocG9zLCBnbHlwaF96dl9wID8gIlpWIiA6ICIt
LSIsCisgICAgICAgICcuJyk7CisjZW5kaWYKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgewor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJ
UExFX0NVUlNPUlM6ICBYV0lER0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7Cisg
ICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHks
IGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vyc29yX3R5cGUsIGN1
cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBi
YWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3do
ZXJlLAorICAgICAgICAgICAgICAgICBjYWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBi
cmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAg
ICAgICAgICAgSE9SSVpPTlRBTF9SVUxFUjogIFhXSURHRVRfR0xZUEggICAgICAgICAgICAgICAg
ICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JV
TEVSOgorICAgIHsKKyAgICAgIGlmIChyZWxhdGl2ZV94IDw9IHhfbGltaXQKKyAgICAgICAgICAm
JiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93
LCBnbHlwaCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAg
ICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZv
cmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3Rp
dmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgICBj
YWNoZV90eXBlLCBhY3Rpb25fdHlwZSk7CisgICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tU
RVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAmJiByZWxhdGl2ZV94
IDw9IHhfbGltaXQpCisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5w
aXhlbF93aWR0aDsKKyAgICAgICAgICB3aGlsZSAocmVsYXRpdmVfeCA8PSB4X2xpbWl0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlw
aCwgcmVsYXRpdmVfeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHdkLCBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCByb3dfcG9zaXRpb24sIGZv
cmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFs
cy5hY3RpdmVfcCwgTUNfR0xZUEhMRVNTLCBkcmF3X3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJvbV93aGVyZSwgY2FjaGVfdHlwZSwgYWN0aW9uX3R5cGUpOworICAgICAgICAgICAgICBy
ZWxhdGl2ZV94ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAg
ICAgICAgICAgICAgICAgICAgIFZFUlRJQ0FMX1JVTEVSOiAgWFdJREdFVF9HTFlQSCAgICAgICAg
ICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJ
Q0FMX1JVTEVSOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IChj
dXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiByb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgIXJvdy0+Y29udGludWVkX3AKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9y
aWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJ
Q0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAoY3Vyc29yX2JleW9uZF9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJS
T1cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9iZXlvbmRf
ZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNv
cl9yb3ctPnVzZWRbVEVYVF9BUkVBXSAhPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBNQ19SRVZFUlNFRF9WRVJUSUNBTF9CQVIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVY
VF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+PSByb3ctPnBpeGVsX3dpZHRoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGhfenZfcCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICBpZiAoZ2x5cGhfZmxhdm9yID09IE1D
X1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGdseXBoX2ZsYXZvciA9PSBN
Q19SRVZFUlNFRF9WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBnbHlwaF9m
bGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgIHx8IGdseXBoX2Zs
YXZvciA9PSBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICB8fCBnbHlwaF9mbGF2b3IgPT0gTUNf
UkVWRVJTRURfVkVSVElDQUxfQkFSKQorICAgICAgICBjdXJzb3JfdHlwZSA9IE1DX1JJR0hUX0ZS
SU5HRV9CSVRNQVA7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVs
YXRpdmVfeCwgb3BvaW50X2Z4LCB5LCBmeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAg
d2QsIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgZm9yZWdyb3Vu
ZCwKKyAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCwgZXNzZW50aWFscy5hY3RpdmVfcCwgZ2x5
cGhfZmxhdm9yLCBkcmF3X3AsIGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIGNhY2hlX3R5
cGUsIGFjdGlvbl90eXBlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMX0NPTFVNTjogIFhXSURH
RVRfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGds
eXBoX2ZsYXZvciA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2Vk
W2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2Vu
dGlhbHMuZmNfeCA+IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IChnbHlwaF96dl9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5J
TFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY2hfdmVydGlj
YWxfcnVsZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3Bv
aW50X3kgPT0geQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3Bv
aW50X3Zwb3MgPT0gdnBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNf
R0xZUEg7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgcmVsYXRpdmVf
eCwgZmNfZngsIHksIGZ5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICB3ZCwgaCwgY3Vy
c29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9uLCBmb3JlZ3JvdW5kLAorICAgICAg
ICAgICAgICAgICBiYWNrZ3JvdW5kLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLCBnbHlwaF9mbGF2b3Is
IGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgY2FjaGVfdHlwZSwgYWN0aW9u
X3R5cGUpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisg
ICAgY2FzZSBDVVJTT1JfSU5ESUNBVE9SOgorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgWFdJREdFVF9HTFlQSCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK30K
Kwordm9pZAorbWNfZHJhd19yb3cgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9tYXRy
aXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAgICAgIHN0cnVjdCBn
bHlwaCAqc3RhcnQsIGludCB4LCBpbnQgaHBvc19sZW5ndGgsIGludCB2cG9zLAorICAgICAgICAg
ICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1cnNvcl9tYXRyaXgsIHN0cnVjdCBtY19lc3NlbnRp
YWxzIGVzc2VudGlhbHMsCisgICAgICAgICAgICAgZW51bSBtY19yb3dfcG9zaXRpb24gcm93X3Bv
c2l0aW9uLCBib29sIGRyYXdfcCwgZW51bSBtY19kcmF3X3Jvd190eXBlIGZyb21fd2hlcmUpCit7
CisgIC8vICBjbG9ja190IGNsb2NrX3N0YXJ0ID0gY2xvY2soKTsKKyAgLyogVzMyIEVtYWNzIGNy
YXNoZXMgb24gc3RhcnR1cCB3aXRob3V0IGEgYEJVRkZFUlAnIGNoZWNrIGluIGB1cGRhdGVfd2lu
ZG93Jy4gKi8KKyAgaWYgKCFCVUZGRVJQICh3LT5jb250ZW50cykpCisgICAgcmV0dXJuOworICBz
dHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+Y29udGVudHMpOworICBpZiAoTklMUCAoQlZB
UiAoYiwgbWNfY29uZikpCisgICAgICAmJiBOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAg
ICAgICYmIE5JTFAgKEJWQVIgKGIsIGZjX3Zpc2libGUpKSkKKyAgICByZXR1cm47CisgIHN0cnVj
dCBnbHlwaF9yb3cgKmJvdHRvbV9yb3cgPSBNQVRSSVhfQk9UVE9NX1RFWFRfUk9XIChtYXRyaXgs
IHcpOworICBpbnQgYm90dG9tX3Zwb3MgPSBNQVRSSVhfUk9XX1ZQT1MgKGJvdHRvbV9yb3csIG1h
dHJpeCk7CisgIGlmICh2cG9zID09IGJvdHRvbV92cG9zKQorICAgIHJldHVybjsKKyAgaWYgKCFy
b3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICByZXR1cm47CisgIGludCBocG9zX3N0YXJ0ID0gc3Rh
cnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdOworICBpZiAobWNfc3RkZXJyX3ApCisgICAgZnBy
aW50ZiAoc3RkZXJyLCAibWNfZHJhd19yb3cgKCVkKTogIGRyYXdfcCAoJXMpIHwgaHBvcyAoJWQp
IHwgbGVuICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICB2cG9zLCBkcmF3X3AgPyAieSIg
OiAibiIsIGhwb3Nfc3RhcnQsIGhwb3NfbGVuZ3RoKTsKKyAgaW50IG9wb2ludF9meCwgb3BvaW50
X2Z5LCBvcG9pbnRfd2QsIG9wb2ludF9oOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93
X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgaW50IGhlYWRlcl9saW5lX2Zvcm1hdCA9IFdJ
TkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJzb3Jf
cm93ID0gKHctPmN1cnNvci52cG9zICE9IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBNQVRSSVhfUk9XIChjdXJzb3JfbWF0cml4LCB3LT5jdXJzb3IudnBvcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTDsKKyAgc3RydWN0IGdseXBoICpjdXJz
b3JfZ2x5cGggPSAody0+Y3Vyc29yLnZwb3MgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBtY19nZXRfY3Vyc29yX2dseXBoICh3LCBjdXJzb3JfbWF0cml4LCBjdXJzb3Jf
cm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNvci52cG9zKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogTlVMTDsKKyAgYm9vbCBjdXJzb3JfYXRfZnJpbmdlX3AgPSAoY3Vyc29yX2ds
eXBoID09IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3JvdyAh
PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zID09
IGN1cnNvcl9yb3ctPnVzZWRbVEVYVF9BUkVBXQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBjdXJzb3Jfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID09IHRleHRfYXJlYV93aWR0aAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA9PSBjdXJzb3Jfcm93LT5waXhl
bF93aWR0aCk7CisgIGJvb2wgY3Vyc29yX2JleW9uZF9mcmluZ2VfcCA9IChjdXJzb3JfZ2x5cGgg
PT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX3JvdyAh
PSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBv
cyA9PSBjdXJzb3Jfcm93LT51c2VkW1RFWFRfQVJFQV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmICFjdXJzb3Jfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSB0ZXh0X2FyZWFf
d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID49
IGN1cnNvcl9yb3ctPnBpeGVsX3dpZHRoKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRVBMQUNFIFRIRSBSRUFMIENVUlNPUgorKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqICovCisgIGVudW0gZmFjZV9pZCBiZ19mYWNlX2lkID0gKGN1cnNvcl9nbHlw
aCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY3Vyc29yX2dseXBoLT5m
YWNlX2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7Cisg
IHN0cnVjdCBtY19SR0IgY3Vyc29yX2JnOworICBtY19zZXRfbHNsX2JnICh3LCBiZ19mYWNlX2lk
LCAmY3Vyc29yX2JnKTsKKyAgLyogRklYTUU6ICBQdXQgaW4gc29tZSBjb2RlIHRvIGRlZmF1bHQg
dG8gTUNfSE9MTE9XX0JPWCBpZiB0aGUgdXNlciBoYXMKKyAgdW53aXR0aW5nbHkgY29tZSB1cCB3
aXRoIHNvbWUgdW5hY2NlcHRhYmxlIGZvcm0gb2YgdW5yZWNvZ25pemVkIGN1cnNvciB0eXBlLiAq
LworICBMaXNwX09iamVjdCBsaXNwX3R5cGUgPSBCVkFSIChiLCBtY19yZWFsX2Zha2VfY3Vyc29y
KTsKKyAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlwZSA9IChDT05TUCAobGlzcF90eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWNfbGlzcF90b19jdXJz
b3JfdHlwZSAoWENBUiAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogbWNfbGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsKKyAgaW50IGN1cnNv
cl93aWR0aCA9IChDT05TUCAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgID8gWEZJ
WE5VTSAoWENBUiAoWENEUiAobGlzcF90eXBlKSkpCisgICAgICAgICAgICAgICAgICAgICA6IC0x
OworICBzdHJ1Y3QgbWNfUkdCIGN1cnNvcl9mZzsKKyAgbWNfY29sb3JfcGlja2VyICh3LCBjdXJz
b3JfZ2x5cGgsIGVzc2VudGlhbHMsICZjdXJzb3JfZmcsIC0xLCBjdXJzb3JfdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICByb3dfcG9zaXRpb24sIENVUlNPUl9JTkRJQ0FUT1IpOworICBib29sIGZp
bGxfY29sdW1uX3RydW1wc19wID0gKCFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGZjX3Zp
c2libGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54ID09
IGVzc2VudGlhbHMuZmNfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjdXJz
b3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3Vyc29y
X2JleW9uZF9mcmluZ2VfcCk7CisgIC8qIFdlIHVzZSBhIHRlc3Qgc2ltaWxhciB0byB0aGUgcmVh
bCBmYWtlIGN1cnNvciBzbyB0aGF0IHRoZSBmcmluZ2UgYml0bWFwIGlzCisgIG9ubHkgZHJhd24g
b25jZSBwZXIgd2luZG93LiAqLworICBpZiAodnBvcyA9PSB3LT5jdXJzb3IudnBvcworICAgICAg
JiYgaHBvc19zdGFydCArIGhwb3NfbGVuZ3RoID09IHJvdy0+dXNlZFtURVhUX0FSRUFdCisgICAg
ICAmJiAhTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAmJiAhTklMUCAoQlZBUiAo
YiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpKQorICAgIHsKKyAgICAgIC8qIGZyaW5nZSBiaXRtYXBz
IHVzZSBmYWNlX2lkIHRvIHNldCB0aGUgZm9yZWdyb3VuZCBjb2xvci4gIFRoZSBvdmVybGF5LWFy
cm93CisgICAgICBpcyBwcmVzZW50bHkgdGhlIG9ubHkgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXNz
ZW50aWFscy5hY3RpdmVfcGAgYW5kIGBtaW5pbWFsX3BgIGFyZQorICAgICAgdXNlZCB0byBkZXRl
cm1pbmUgdGhlIGFwcGxpY2FibGUgZmFjZV9pZC4gKi8KKyAgICAgIHN0cnVjdCBtY19SR0IgbHNs
X2ZnID0gey5yZWQgPSAtMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVu
ID0gLTEuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gLTEuMH07Cisg
ICAgICAvKiBXZSB1c2UgdGhlIGZpcnN0IGdseXBoIGluIHRoZSByb3csIHdpdGggYW4gWCBhbmQg
SFBPUyBvZiB6ZXJvLiAqLworICAgICAgbWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgcm93LT5n
bHlwaHNbVEVYVF9BUkVBXSwgMCwgLTEsIHctPmN1cnNvci55LCAtMSwKKyAgICAgICAgICAgICAg
ICAgMCwgdy0+Y3Vyc29yLnZwb3MsIC0xLCAtMSwgTUNfTEVGVF9GUklOR0VfQklUTUFQLCAtMSwg
cm93X3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICBsc2xfZmcsIGN1cnNvcl9iZywgZXNzZW50
aWFscy5hY3RpdmVfcCwgTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAsCisgICAgICAgICAgICAgICAg
IGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1IpOworICAgIH0K
KyAgaWYgKGN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBv
cworICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgJiYgdy0+Y3Vy
c29yLmhwb3MgPT0gaHBvc19zdGFydCArIGhwb3NfbGVuZ3RoCisgICAgICAmJiAhTklMUCAoQlZB
UiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRh
bF9ydWxlcikpKQorICAgIHsKKyAgICAgIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZvciA9IE1D
X0hPTExPV19SRUNUQU5HTEU7CisgICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoID0gcm93LT5nbHlw
aHNbVEVYVF9BUkVBXTsKKyAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyBy
b3ctPnVzZWRbVEVYVF9BUkVBXTsKKyAgICAgIC8qIEdseXBoIGZvciBhIGxpbmUgZW5kIGluIHRl
eHQuICovCisgICAgICBpZiAoZ2x5cGggPT0gZ2x5cGhfZW5kICYmIGdseXBoLT5jaGFycG9zID4g
MCkKKyAgICAgICAgKytnbHlwaF9lbmQ7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93
LCBnbHlwaF9lbmQgLSAxLCB3LT5jdXJzb3IueCwgLTEsIHctPmN1cnNvci55LCAtMSwKKyAgICAg
ICAgICAgICAgICAgdy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNvci52cG9zLCAtMSwgLTEsIE1DX1JJ
R0hUX0ZSSU5HRV9CSVRNQVAsCisgICAgICAgICAgICAgICAgIC0xLCByb3dfcG9zaXRpb24sIGN1
cnNvcl9mZywgY3Vyc29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAorICAgICAgICAgICAgICAg
ICBnbHlwaF9mbGF2b3IsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUsIENVUlNPUl9JTkRJ
Q0FUT1IpOworICAgIH0KKyAgLyogQ3Vyc29yIGlzIGJleW9uZCB0aGUgcmlnaHQgZnJpbmdlOyBl
LmcuLCB3aGVuIHJpZ2h0IGhvcml6b250YWwgc2Nyb2xsaW5nLiAqLworICBlbHNlIGlmIChjdXJz
b3JfYmV5b25kX2ZyaW5nZV9wCisgICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MK
KyAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAm
JiAoaHBvc19zdGFydCArIGhwb3NfbGVuZ3RoKSA9PSByb3ctPnVzZWRbVEVYVF9BUkVBXQorICAg
ICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICYmICFO
SUxQIChCVkFSIChiLCBjaF9ob3Jpem9udGFsX3J1bGVyKSkpCisgICAgeworICAgICAgZW51bSBt
Y19mbGF2b3IgZ2x5cGhfZmxhdm9yID0gTUNfUkVWRVJTRURfSE9MTE9XX1JFQ1RBTkdMRV9SSUdI
VF9BUlJPVzsKKyAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBoc1tURVhUX0FS
RUFdOworICAgICAgc3RydWN0IGdseXBoICpnbHlwaF9lbmQgPSBnbHlwaCArIHJvdy0+dXNlZFtU
RVhUX0FSRUFdOworICAgICAgLyogR2x5cGggZm9yIGEgbGluZSBlbmQgaW4gdGV4dC4gKi8KKyAg
ICAgIGlmIChnbHlwaCA9PSBnbHlwaF9lbmQgJiYgZ2x5cGgtPmNoYXJwb3MgPiAwKQorICAgICAg
ICArK2dseXBoX2VuZDsKKyAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGdseXBoX2Vu
ZCAtIDEsIHJvdy0+cGl4ZWxfd2lkdGgsIC0xLCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAg
ICAgLTEsIHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMSwgdy0+Y3Vyc29yLnZwb3MsIC0xLCAtMSwK
KyAgICAgICAgICAgICAgICAgTUNfUklHSFRfRlJJTkdFX0JJVE1BUCwgLTEsIHJvd19wb3NpdGlv
biwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsCisgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMuYWN0
aXZlX3AsIGdseXBoX2ZsYXZvciwgZHJhd19wLCBmcm9tX3doZXJlLCBDSF9DQUNIRSwKKyAgICAg
ICAgICAgICAgICAgQ1VSU09SX0lORElDQVRPUik7CisgICAgfQorICAvKiBFWEFNUExFIChidWZm
ZXItbG9jYWwpOiAgKHNldHEgbWMtcmVhbC1mYWtlLWN1cnNvciBuaWwvJ25vLyJubyIpICovCisg
IGVsc2UgaWYgKCFjdXJzb3JfYXRfZnJpbmdlX3AKKyAgICAgICAgICAgJiYgY3Vyc29yX2dseXBo
ICE9IE5VTEwKKyAgICAgICAgICAgJiYgY3Vyc29yX3R5cGUgPT0gTUNfTk9fQ1VSU09SCisgICAg
ICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgJiYgdy0+Y3Vyc29y
Lmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBvcyA8IGhwb3Nf
c3RhcnQgKyBocG9zX2xlbmd0aCkKKyAgICB7CisgICAgICAvKiBXaGVuIGEgdXNlciBoYXMgbm90
IHNwZWNpZmllZCBhIHZhbHVlIGZvciBgbWMtcmVhbC1mYWtlLWN1cnNvcicsIG9yIHRoZQorICAg
ICAgdmFsdWUgaXMgYG5vYCBpbiB0aGUgZm9ybSBvZiBhIHN5bWJvbCBvciBzdHJpbmcsIHRoZW4g
dGhlIGRlZmF1bHQgd2UgdXNlCisgICAgICBhbiBNQ19CQVIgYW5kIGFuIE1DX0hCQVIgLS0gYm90
aCBoYXZpbmcgYSBjdXJzb3Jfd2lkdGggb2YgMS4gKi8KKyAgICAgIG1jX2dldF9jdXJzb3JfZ2Vv
bWV0cnkgKHcsIG1hdHJpeCwgcm93LCB3LT5jdXJzb3IueCwgJm9wb2ludF9meCwgdy0+Y3Vyc29y
LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BvaW50X2Z5LCB3LT5jdXJzb3Iu
aHBvcywgdy0+Y3Vyc29yLnZwb3MsICZvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1DX0JBUiwgMSwgJm9wb2ludF93ZCk7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJp
eCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1cnNvci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55
LAorICAgICAgICAgICAgICAgICBvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3Iu
dnBvcywgb3BvaW50X3dkLCBvcG9pbnRfaCwKKyAgICAgICAgICAgICAgICAgTUNfQkFSLCAxLCBy
b3dfcG9zaXRpb24sIGN1cnNvcl9mZywgY3Vyc29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9wLAor
ICAgICAgICAgICAgICAgICBNQ19HTFlQSExFU1MsIGRyYXdfcCwgZnJvbV93aGVyZSwgTklMUCAo
QlZBUiAoYiwgbWNfY29uZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IE1DX0NBQ0hFLCBDVVJTT1JfSU5ESUNBVE9SKTsKKyAgICAg
IG1jX2dldF9jdXJzb3JfZ2VvbWV0cnkgKHcsIG1hdHJpeCwgcm93LCB3LT5jdXJzb3IueCwgJm9w
b2ludF9meCwgdy0+Y3Vyc29yLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3Bv
aW50X2Z5LCB3LT5jdXJzb3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MsICZvcG9pbnRfaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1DX0hCQVIsIDEsICZvcG9pbnRfd2QpOworICAgICAg
bWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgY3Vyc29yX2dseXBoLCB3LT5jdXJzb3IueCwgb3Bv
aW50X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAgICAgb3BvaW50X2Z5LCB3LT5jdXJz
b3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MsIG9wb2ludF93ZCwgb3BvaW50X2gsCisgICAgICAgICAg
ICAgICAgIE1DX0hCQVIsIDEsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2ZnLCBjdXJzb3JfYmcsIGVz
c2VudGlhbHMuYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgIE1DX0dMWVBILCBkcmF3X3AsIGZy
b21fd2hlcmUsIE5JTFAgKEJWQVIgKGIsIG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUNfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1Ip
OworICAgIH0KKyAgZWxzZSBpZiAoIWN1cnNvcl9hdF9mcmluZ2VfcAorICAgICAgICAgICAmJiBj
dXJzb3JfZ2x5cGggIT0gTlVMTAorICAgICAgICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9z
CisgICAgICAgICAgICYmIHctPmN1cnNvci5ocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAg
JiYgdy0+Y3Vyc29yLmhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAg
JiYgY3Vyc29yX2dseXBoLT50eXBlICE9IFNUUkVUQ0hfR0xZUEgpCisgICAgeworICAgICAgbWNf
Z2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1cnNvci54LCAmb3BvaW50
X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcG9pbnRf
ZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywgJm9wb2ludF9oLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgJm9wb2ludF93
ZCk7CisgICAgICBtY19oZWxwZXIgKHcsIG1hdHJpeCwgcm93LCBjdXJzb3JfZ2x5cGgsIHctPmN1
cnNvci54LCBvcG9pbnRfZngsIHctPmN1cnNvci55LAorICAgICAgICAgICAgICAgICBvcG9pbnRf
ZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywgb3BvaW50X3dkLCBvcG9pbnRfaCwK
KyAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgcm93X3Bvc2l0aW9u
LCBjdXJzb3JfZmcsIGN1cnNvcl9iZywKKyAgICAgICAgICAgICAgICAgZXNzZW50aWFscy5hY3Rp
dmVfcCwgTUNfR0xZUEgsIGRyYXdfcCwgZnJvbV93aGVyZSwKKyAgICAgICAgICAgICAgICAgTklM
UCAoQlZBUiAoYiwgbWNfY29uZikpCisgICAgICAgICAgICAgICAgID8gQ0hfQ0FDSEUKKyAgICAg
ICAgICAgICAgICAgOiBNQ19DQUNIRSwgQ1VSU09SX0lORElDQVRPUik7CisgICAgfQorICBlbHNl
IGlmICghY3Vyc29yX2F0X2ZyaW5nZV9wCisgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaCAhPSBO
VUxMCisgICAgICAgICAgICYmIHZwb3MgPT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgJiYg
dy0+Y3Vyc29yLmhwb3MgPj0gaHBvc19zdGFydAorICAgICAgICAgICAmJiB3LT5jdXJzb3IuaHBv
cyA8IGhwb3Nfc3RhcnQgKyBocG9zX2xlbmd0aAorICAgICAgICAgICAmJiBjdXJzb3JfZ2x5cGgt
PnR5cGUgPT0gU1RSRVRDSF9HTFlQSCkKKyAgICB7CisgICAgICAvKiBJZiBhIHVzZXIgaGFzIHNl
dCBgeC1zdHJldGNoLWN1cnNvcicgdG8gYSBub24tbmlsIHZhbHVlLCBoZS9zaGUgY2hvc2UgdG8K
KyAgICAgIGhhdmUgYSBjdXJzb3IgdGhhdCBzcGFucyB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUg
U1RSRVRDSF9HTFlQSC4gKi8KKyAgICAgIGlmICgheF9zdHJldGNoX2N1cnNvcl9wKQorICAgICAg
ICB7CisgICAgICAgICAgLyogVGhlIE1DX0hCQVIgc2hhbGwgaGF2ZSBhIGBjdXJzb3Jfd2lkdGhg
IG9mIDEuICovCisgICAgICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCBy
b3csIHctPmN1cnNvci54LCAmb3BvaW50X2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHctPmN1cnNvci55LCAmb3BvaW50X2Z5LCB3LT5jdXJzb3IuaHBvcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3LT5jdXJzb3IudnBvcywgJm9wb2ludF9oLCBNQ19I
QkFSLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcG9pbnRfd2QpOwor
ICAgICAgICAgIG1jX2hlbHBlciAodywgbWF0cml4LCByb3csIGN1cnNvcl9nbHlwaCwgdy0+Y3Vy
c29yLngsIG9wb2ludF9meCwKKyAgICAgICAgICAgICAgICAgICAgIHctPmN1cnNvci55LCBvcG9p
bnRfZnksIHctPmN1cnNvci5ocG9zLCB3LT5jdXJzb3IudnBvcywKKyAgICAgICAgICAgICAgICAg
ICAgIG9wb2ludF93ZCwgb3BvaW50X2gsIE1DX0hCQVIsIDEsIHJvd19wb3NpdGlvbiwgY3Vyc29y
X2ZnLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX2JnLCBlc3NlbnRpYWxzLmFjdGl2ZV9w
LCBNQ19HTFlQSCwgZHJhd19wLCBmcm9tX3doZXJlLAorICAgICAgICAgICAgICAgICAgICAgTklM
UCAoQlZBUiAoYiwgbWNfY29uZikpCisgICAgICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisg
ICAgICAgICAgICAgICAgICAgICA6IE1DX0NBQ0hFLCBDVVJTT1JfSU5ESUNBVE9SKTsKKyAgICAg
ICAgfQorICAgICAgbWNfZ2V0X2N1cnNvcl9nZW9tZXRyeSAodywgbWF0cml4LCByb3csIHctPmN1
cnNvci54LCAmb3BvaW50X2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy0+Y3Vy
c29yLnksICZvcG9pbnRfZnksIHctPmN1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdy0+Y3Vyc29yLnZwb3MsICZvcG9pbnRfaCwgY3Vyc29yX3R5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsICZvcG9pbnRfd2QpOworICAgICAg
bWNfaGVscGVyICh3LCBtYXRyaXgsIHJvdywgY3Vyc29yX2dseXBoLCB3LT5jdXJzb3IueCwgb3Bv
aW50X2Z4LCB3LT5jdXJzb3IueSwKKyAgICAgICAgICAgICAgICAgb3BvaW50X2Z5LCB3LT5jdXJz
b3IuaHBvcywgdy0+Y3Vyc29yLnZwb3MsIG9wb2ludF93ZCwgb3BvaW50X2gsCisgICAgICAgICAg
ICAgICAgIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIHJvd19wb3NpdGlvbiwgY3Vyc29yX2Zn
LCBjdXJzb3JfYmcsCisgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMuYWN0aXZlX3AsIE1DX0dM
WVBILCBkcmF3X3AsIGZyb21fd2hlcmUsCisgICAgICAgICAgICAgICAgIE5JTFAgKEJWQVIgKGIs
IG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICA/IENIX0NBQ0hFCisgICAgICAgICAgICAgICAg
IDogTUNfQ0FDSEUsIENVUlNPUl9JTkRJQ0FUT1IpOworICAgIH0KKy8qICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICBEUkFXIEFORCBSRUNPUkQgRkFLRSBD
VVJTT1JTCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgaWYgKCFlc3NlbnRpYWxzLmFjdGl2
ZV9wCisgICAgICAmJiBOSUxQIChCVkFSIChiLCBtY19pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAg
ICYmIE5JTFAgKEJWQVIgKGIsIGNoX2luYWN0aXZlX3dpbmRvd3MpKQorICAgICAgJiYgTklMUCAo
QlZBUiAoYiwgZmNfaW5hY3RpdmVfd2luZG93cykpKQorICAgIHJldHVybjsKKyAgaWYgKGhwb3Nf
bGVuZ3RoID09IDEpCisgICAgeworICAgICAgaWYgKCFOSUxQIChCVkFSIChiLCBtY19jb25mKSkK
KyAgICAgICAgICAmJiAoZXNzZW50aWFscy5hY3RpdmVfcAorICAgICAgICAgICAgICB8fCAoIWVz
c2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBt
Y19pbmFjdGl2ZV93aW5kb3dzKSkpKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBzcGFj
ZSBhcHBlbmRlZCB0byBhIHJvdyBlbmRpbmcgd2l0aCBhIG5ldyBsaW5lCisgICAgICAgICAgZG9l
cyBub3QgaGF2ZSBhIGBnbHlwaC0+Y2hhcnBvc2AgKC0xLCAwKSB0aGF0IHdlIGNhbgorICAgICAg
ICAgIHVzZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLiAgV2hlbiB0aGVyZSBpcyBh
CisgICAgICAgICAgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBlbnRyeSB0aGF0IGFzc2lnbnMgYSB2
aXNpYmxlCisgICAgICAgICAgZ2x5cGggdG8gYSBuZXcgbGluZSwgdGhlcmUgaXMgbm8gcHJvYmxl
bSBiZWNhdXNlIHRoYXQKKyAgICAgICAgICBnbHlwaCBoYXMgYSBgZ2x5cGgtPmNoYXJwb3MnIHRo
YXQgd2UgY2FuIHVzZS4gIFdoZW4KKyAgICAgICAgICBubyB2aXNpYmxlIEVPTCBnbHlwaCBleGlz
dHMsIHdlIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgdGVzdDogIHRoZSBhcHBlbmRlZCBz
cGFjZSBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9uZQorICAgICAgICAgIGxlc3MgdGhhbiB0aGUg
ZW5kIG9mIHRoZSBtYXRyaXggcm93LiAqLworICAgICAgICAgIGludCBocG9zID0gc3RhcnQgLSBy
b3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgIHN0cnVjdCBnbHlwaCAqcHJldmlvdXNf
Z2x5cGggPSAoMCA8PSBocG9zIC0gMSAmJiBocG9zIC0gMSA8IHJvdy0+dXNlZFtURVhUX0FSRUFd
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvdy0+Z2x5cGhz
W1RFWFRfQVJFQV0gKyBocG9zIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE5VTEw7CisgICAgICAgICAgLy8gc3RydWN0IGdseXBoICpsYXN0X2dseXBoID0g
cm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMTsKKyAgICAg
ICAgICBib29sIHNraXBfcCA9IChwcmV2aW91c19nbHlwaCAhPSBOVUxMCisgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJwb3MgPT0gTUFUUklYX1JPV19FTkRf
Q0hBUlBPUyAocm93KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGFydC0+Ynl0
ZXBvcyAhPSBlc3NlbnRpYWxzLnp2X2J5dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8g
dHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hlbiBhIGBidWZmZXItZGlzcGxheS10
YWJsZScgZW50cnkgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgdmlzaWJsZSB0
YWIgY2hhcmFjdGVyICgiwrsiKSwgdGhlIHN1YnNlcXVlbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFNUUkVUQ0hfR0xZUEggd2lsbCBoYXZlIHRoZSBzYW1lIHN0YXJ0LT5jaGFycG9zCisgICAg
ICAgICAgICAgICAgICAgICAgICBhcyB0aGUgYWZvcmVtZW50aW9uZWQgdmlzaWJsZSB0YWIgY2hh
cmFjdGVyLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNfZ2x5cGggIT0g
TlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJw
b3MgPT0gc3RhcnQtPmNoYXJwb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTsKKyAgICAgICAgICBpbnQgcG9zaW50ID0g
KHJvd19wb3NpdGlvbiA9PSBQT1NUX1pWKQorICAgICAgICAgICAgICAgICAgICAgICAgID8gLTEK
KyAgICAgICAgICAgICAgICAgICAgICAgOiAocm93X3Bvc2l0aW9uID09IEFUX1pWKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICA/IGVzc2VudGlhbHMuenYKKyAgICAgICAgICAgICAgICAgICAg
ICAgOiAoc3RhcnQtPmJ5dGVwb3MgIT0gZXNzZW50aWFscy56dl9ieXRlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHN0YXJ0IC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVz
ZWRbVEVYVF9BUkVBXSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBNQVRSSVhfUk9X
X0VORF9DSEFSUE9TIChyb3cpIC0gMQorICAgICAgICAgICAgICAgICAgICAgICA6IChzdGFydC0+
Ynl0ZXBvcyA9PSBlc3NlbnRpYWxzLnp2X2J5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgc3RhcnQgLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFtURVhUX0FSRUFd
IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IGVzc2VudGlhbHMuenYKKyAgICAgICAg
ICAgICAgICAgICAgICAgOiBzdGFydC0+Y2hhcnBvczsKKyAgICAgICAgICBMaXNwX09iamVjdCBz
cGVjcyA9IG1jX2Fzc29jIChtYWtlX2ZpeG51bSAocG9zaW50KSwgQlZBUiAoYiwgbWNfY29uZikp
OworICAgICAgICAgIGlmICgoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgdnBvcyA+IDApCisg
ICAgICAgICAgICAgICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAg
JiYgIU5JTFAgKHNwZWNzKQorICAgICAgICAgICAgICAmJiByb3ctPnkgPD0gd2luZG93X3RleHRf
Ym90dG9tX3kgKHcpCisgICAgICAgICAgICAgICYmICFza2lwX3AKKyAgICAgICAgICAgICAgJiYg
cm93X3Bvc2l0aW9uICE9IFBPU1RfWlYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIExp
c3BfT2JqZWN0IGxpc3BfdHlwZSA9IG1jX250aCAoMSwgc3BlY3MpOworICAgICAgICAgICAgICBl
bnVtIG1jX2N1cnNvcl90eXBlIGN1cnNvcl90eXBlID0gKENPTlNQIChsaXNwX3R5cGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtY19saXNwX3Rv
X2N1cnNvcl90eXBlIChYQ0FSIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5
cGUpOworICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IChzdGFydC0+dHlwZSA9PSBJTUFHRV9H
TFlQSCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1DX0hPTExPV19CT1gKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcl90eXBlOworICAgICAgICAgICAgICBpbnQg
Y3Vyc29yX3dpZHRoID0gKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBYRklYTlVNIChYQ0FSIChYQ0RSIChsaXNwX3R5cGUpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7CisgICAgICAgICAgICAgIExpc3BfT2JqZWN0
IG1jX2ZvcmVncm91bmQgPSBtY19udGggKDIsIHNwZWNzKTsKKyAgICAgICAgICAgICAgc3RydWN0
IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgICAgIGlmIChTVFJJTkdQIChtY19mb3JlZ3JvdW5k
KSkKKyAgICAgICAgICAgICAgICBtY194d19jb2xvcl92YWx1ZXMgKHcsIG1jX2ZvcmVncm91bmQs
ICZsc2xfZmcpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZFQ1RPUlAgKG1jX2ZvcmVncm91
bmQpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsc2xfZmcucmVk
ID0gWEZMT0FUX0RBVEEgKEFSRUYgKG1jX2ZvcmVncm91bmQsIDApKTsKKyAgICAgICAgICAgICAg
ICAgICAgbHNsX2ZnLmdyZWVuID0gWEZMT0FUX0RBVEEgKEFSRUYgKG1jX2ZvcmVncm91bmQsIDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgbHNsX2ZnLmJsdWUgPSBYRkxPQVRfREFUQSAoQVJFRiAo
bWNfZm9yZWdyb3VuZCwgMikpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoTklMUCAobWNfZm9yZWdyb3VuZCkpCisgICAgICAgICAgICAgICAgICAgIG1j
X2NvbG9yX3BpY2tlciAodywgc3RhcnQsIGVzc2VudGlhbHMsICZsc2xfZmcsIHBvc2ludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSwgcm93X3Bvc2l0
aW9uLCBNVUxUSVBMRV9DVVJTT1JTKTsKKyAgICAgICAgICAgICAgaW50IHZwb3MgPSBNQVRSSVhf
Uk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0
X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgbWF0cml4LCByb3csIHN0
YXJ0LCBURVhUX0FSRUEsIHgsIHhfbGltaXQsIHJvdy0+eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sIHZwb3MsIGN1cnNvcl90eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgY3Vyc29yX21hdHJpeCwgZXNz
ZW50aWFscywgcm93X3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxzbF9mZywg
TVVMVElQTEVfQ1VSU09SUywgZHJhd19wLCBmcm9tX3doZXJlLCBNQ19DQUNIRSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmICghTklMUCAoQlZBUiAoYiwgZmNfdmlzaWJsZSkp
CisgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFl
c3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwg
ZmNfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAvLyAmJiBlc3NlbnRpYWxzLmZjX3gg
PD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgJiYgZXNzZW50aWFscy5mY194IDwgdGV4dF9h
cmVhX3dpZHRoCisgICAgICAgICAgJiYgZXNzZW50aWFscy5mY194ID49IHctPm1jLmxudW1fcGl4
ZWxfd2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgeF9saW1pdCA9IHggKyBzdGFydC0+
cGl4ZWxfd2lkdGg7CisgICAgICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAody0+Y3Vy
c29yLnggPT0gZXNzZW50aWFscy5mY194CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgdy0+Y3Vyc29yLnkgPT0gcm93LT55CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gc3RhcnQgLSByb3ctPmdseXBoc1tURVhU
X0FSRUFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29y
LnZwb3MgPT0gdnBvcyk7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAg
ICAgbWNfY29sb3JfcGlja2VyICh3LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIE1D
X0JBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd19wb3NpdGlvbiwgRklMTF9DT0xV
TU4pOworICAgICAgICAgIGlmICh4IDwgdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgIC8v
IHggKyBzdGFydC0+cGl4ZWxfd2lkdGggPD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAg
ICYmICgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAg
ICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAmJiAoKHN0YXJ0
ICE9IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEKKyAg
ICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPj0geAorICAgICAgICAgICAgICAg
ICAgICYmIGVzc2VudGlhbHMuZmNfeCA8IHggKyBzdGFydC0+cGl4ZWxfd2lkdGgpCisgICAgICAg
ICAgICAgICAgICB8fCAoc3RhcnQgPT0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIHJvdy0+dXNl
ZFtURVhUX0FSRUFdIC0gMQorICAgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNf
eCA+PSB4KSkKKyAgICAgICAgICAgICAgJiYgcm93LT55IDw9IHdpbmRvd190ZXh0X2JvdHRvbV95
ICh3KQorICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICAgICAg
bWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgc3RhcnQsIFRFWFRfQVJFQSwgeCwgeF9saW1pdCwg
cm93LT55LAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRf
QVJFQV0sIHZwb3MsIE1DX0JBUiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX21h
dHJpeCwgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBsc2xfZmcsCisgICAgICAgICAgICAgICAg
ICAgICAgIEZJTExfQ09MVU1OLCBkcmF3X3AsIGZyb21fd2hlcmUsIEZDX0NBQ0hFKTsKKyAgICAg
ICAgfQorICAgICAgaWYgKCFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAm
JiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpCisgICAgICAgICAgJiYgKGVz
c2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9w
CisgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93
cykpKSkKKyAgICAgICAgICAmJiB2cG9zID09IHctPmN1cnNvci52cG9zKQorICAgICAgICB7Cisg
ICAgICAgICAgaW50IHhfbGltaXQgPSAoc3RhcnQgPT0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSAr
IHJvdy0+dXNlZFtURVhUX0FSRUFdIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gdGV4
dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICA6IHggKyBzdGFydC0+cGl4ZWxf
d2lkdGg7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgbWNfY29s
b3JfcGlja2VyICh3LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIE1DX0hCQVIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICByb3dfcG9zaXRpb24sIEhPUklaT05UQUxfUlVMRVIp
OworICAgICAgICAgIC8qIFByZXNlcnZlIHN1cHBvcnQgZm9yIGRlZmF1bHQgYmVoYXZpb3Igc3Vj
aCB0aGF0IGEgdXNlciBtYXkKKyAgICAgICAgICBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgYW4gTUNf
SEJBUiwgd2hpY2ggYmVnaW5zIGl0cyBqb3VybmV5CisgICAgICAgICAgYXMgdGhlIGBjdXJzb3Jf
d2lkdGgnLiAgYG1jX2dldF9jdXJzb3JfZ2VvbWV0cnknIHJlYWRqdXN0cy4gKi8KKyAgICAgICAg
ICBtY19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBzdGFydCwgVEVYVF9BUkVBLCB4LCB4X2xpbWl0
LCByb3ctPnksCisgICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RFWFRf
QVJFQV0sIHZwb3MsIE1DX0hCQVIsIDEsCisgICAgICAgICAgICAgICAgICAgICBjdXJzb3JfbWF0
cml4LCBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywKKyAgICAgICAgICAgICAgICAg
ICAgIEhPUklaT05UQUxfUlVMRVIsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FDSEUpOworICAg
ICAgICB9CisgICAgICBpZiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAg
ICYmICFOSUxQIChCVkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgJiYgKGVz
c2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9w
CisgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93
cykpKSkKKyAgICAgICAgICAmJiAhZmlsbF9jb2x1bW5fdHJ1bXBzX3ApCisgICAgICAgIHsKKyAg
ICAgICAgICBjdXJzb3JfdHlwZSA9IChzdGFydC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgID8gTUNfSE9MTE9XX0JPWAorICAgICAgICAgICAgICAgICAgICAg
ICAgOiBNQ19CQVI7CisgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7Cisg
ICAgICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAody0+Y3Vyc29yLnkgPT0gcm93LT55
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnZwb3Mg
PT0gdnBvcyk7CisgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgbWNf
Y29sb3JfcGlja2VyICh3LCBzdGFydCwgZXNzZW50aWFscywgJmxzbF9mZywgLTEsIGN1cnNvcl90
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBWRVJUSUNBTF9S
VUxFUik7CisgICAgICAgICAgaWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4g
MCkKKyAgICAgICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAg
ICAgICAmJiAoKHN0YXJ0ICE9IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyByb3ctPnVzZWRbVEVY
VF9BUkVBXSAtIDEKKyAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSB4CisgICAg
ICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLnggPCB4ICsgc3RhcnQtPnBpeGVsX3dpZHRoKQor
ICAgICAgICAgICAgICAgICAgfHwgKHN0YXJ0ID09IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gKyBy
b3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJz
b3IueCA+PSB4KSkKKyAgICAgICAgICAgICAgJiYgcm93LT55IDw9IHdpbmRvd190ZXh0X2JvdHRv
bV95ICh3KQorICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICAg
ICAgbWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgc3RhcnQsIFRFWFRfQVJFQSwgeCwgeF9saW1p
dCwgcm93LT55LAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydCAtIHJvdy0+Z2x5cGhzW1RF
WFRfQVJFQV0sIHZwb3MsIGN1cnNvcl90eXBlLCAxLAorICAgICAgICAgICAgICAgICAgICAgICBj
dXJzb3JfbWF0cml4LCBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgVkVSVElDQUxfUlVMRVIsIGRyYXdfcCwgZnJvbV93aGVyZSwgQ0hfQ0FD
SEUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaW50IHJl
bGF0aXZlX3ggPSAwOworICAgICAgICBmb3IgKGludCBhcmVhID0gTEVGVF9NQVJHSU5fQVJFQTsg
YXJlYSA8IExBU1RfQVJFQTsgKythcmVhKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVj
dCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBoc1thcmVhXTsKKyAgICAgICAgICAgIHN0cnVjdCBn
bHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyByb3ctPnVzZWRbYXJlYV07CisgICAgICAgICAgICAv
KiBHbHlwaCBmb3IgYSBsaW5lIGVuZCBpbiB0ZXh0LiAqLworICAgICAgICAgICAgaWYgKGFyZWEg
PT0gVEVYVF9BUkVBICYmIGdseXBoID09IGdseXBoX2VuZCAmJiBnbHlwaC0+Y2hhcnBvcyA+IDAp
CisgICAgICAgICAgICAgICsrZ2x5cGhfZW5kOworICAgICAgICAgICAgZm9yICg7IGdseXBoIDwg
Z2x5cGhfZW5kOyArK2dseXBoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KHZwb3MgIT0gdy0+Y3Vyc29yLnZwb3MKKyAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGggIT0g
Z2x5cGhfZW5kIC0gMQorICAgICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPCBy
ZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICYmIHctPmN1cnNvci54IDwgcmVsYXRpdmVf
eAorICAgICAgICAgICAgICAgICAgICAmJiBOSUxQIChCVkFSIChiLCBtY19jb25mKSkpCisgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIU5JTFAgKEJWQVIgKGIs
IG1jX2NvbmYpKQorICAgICAgICAgICAgICAgICAgICAmJiAoZXNzZW50aWFscy5hY3RpdmVfcAor
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCFlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1jX2luYWN0aXZlX3dpbmRv
d3MpKSkpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGUg
c3BhY2UgYXBwZW5kZWQgdG8gYSByb3cgZW5kaW5nIHdpdGggYSBuZXcgbGluZSBkb2VzCisgICAg
ICAgICAgICAgICAgICAgIG5vdCBoYXZlIGEgYGdseXBoLT5jaGFycG9zYCAoLTEsIDApIHRoYXQg
d2UgY2FuIHVzZSBmb3IgdGhpcworICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGFwcGxp
Y2F0aW9uLiAgV2hlbiBhIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkKKyAgICAgICAgICAg
ICAgICAgICAgYXNzaWducyBhIHZpc2libGUgZ2x5cGggdG8gYSBuZXcgbGluZSwgdGhlcmUgaXMg
bm8gcHJvYmxlbQorICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoYXQgZ2x5cGggaGFzIGEg
YGdseXBoLT5jaGFycG9zJyB0aGF0IHdlIGNhbiB1c2UuCisgICAgICAgICAgICAgICAgICAgIFdo
ZW4gbm8gdmlzaWJsZSBFT0wgZ2x5cGggZXhpc3RzLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyB0ZXN0
OgorICAgICAgICAgICAgICAgICAgICB0aGUgYXBwZW5kZWQgc3BhY2UgaGFzIGEgcG9zaXRpb24g
dGhhdCBpcyBvbmUgbGVzcyB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICBlbmQgb2YgdGhl
IG1hdHJpeCByb3cuICovCisgICAgICAgICAgICAgICAgICAgIGludCBocG9zID0gZ2x5cGggLSBy
b3ctPmdseXBoc1tURVhUX0FSRUFdOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2x5cGgg
KnByZXZpb3VzX2dseXBoID0gKDAgPD0gaHBvcyAtIDEgJiYgaHBvcyAtIDEgPCByb3ctPnVzZWRb
VEVYVF9BUkVBXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSArIGhwb3MgLSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEw7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHN0cnVjdCBnbHlwaCAqbGFzdF9nbHlwaCA9IHJvdy0+Z2x5cGhzW1RFWFRf
QVJFQV0gKyByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2tpcF9wID0gKHByZXZpb3VzX2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgcHJldmlvdXNfZ2x5cGgtPmNoYXJwb3MgPT0gTUFUUklYX1JPV19F
TkRfQ0hBUlBPUyAocm93KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgZ2x5cGgtPmJ5dGVwb3MgIT0gZXNzZW50aWFscy56dl9ieXRlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogV2hlbiBhIGBidWZmZXItZGlzcGxheS10YWJsZScgZW50cnkgY29udGFpbnMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHZpc2libGUgdGFiIGNoYXJhY3RlciAo
IsK7IiksIHRoZSBzdWJzZXF1ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U1RSRVRDSF9HTFlQSCB3aWxsIGhhdmUgdGhlIHNhbWUgZ2x5cGgtPmNoYXJwb3MKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgYWZvcmVtZW50aW9uZWQgdmlzaWJsZSB0
YWIgY2hhcmFjdGVyLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHBy
ZXZpb3VzX2dseXBoICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBwcmV2aW91c19nbHlwaC0+Y2hhcnBvcyA9PSBnbHlwaC0+Y2hhcnBvcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGludCBwb3NpbnQgPSAo
cm93X3Bvc2l0aW9uID09IFBPU1RfWlYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJvd19wb3NpdGlv
biA9PSBBVF9aVikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXNzZW50
aWFscy56dgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGgtPmJ5dGVw
b3MgIT0gZXNzZW50aWFscy56dl9ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW1RFWFRf
QVJFQV0gLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1BVFJJWF9S
T1dfRU5EX0NIQVJQT1MgKHJvdykgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IChnbHlwaC0+Ynl0ZXBvcyA9PSBlc3NlbnRpYWxzLnp2X2J5dGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9
PSByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gZXNzZW50aWFscy56dgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBnbHlwaC0+Y2hhcnBvczsKKyAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3Qgc3BlY3Mg
PSBtY19hc3NvYyAobWFrZV9maXhudW0gKHBvc2ludCksIEJWQVIgKGIsIG1jX2NvbmYpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiB2cG9zID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChzcGVjcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHJvdy0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21feSAodykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmICFza2lwX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHJv
d19wb3NpdGlvbiAhPSBQT1NUX1pWKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGxpc3BfdHlwZSA9IG1jX250aCAoMSwgc3BlY3Mp
OworICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlw
ZSA9IChDT05TUCAobGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIg
KGxpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUgPSAoZ2x5cGgtPnR5cGUgPT0gSU1BR0Vf
R0xZUEgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUNfSE9MTE9X
X0JPWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcl90eXBl
OworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnNvcl93aWR0aCA9IChDT05TUCAobGlz
cF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFhG
SVhOVU0gKFhDQVIgKFhDRFIgKGxpc3BfdHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09i
amVjdCBtY19mb3JlZ3JvdW5kID0gbWNfbnRoICgyLCBzcGVjcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChTVFJJTkdQIChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWNf
eHdfY29sb3JfdmFsdWVzICh3LCBtY19mb3JlZ3JvdW5kLCAmbHNsX2ZnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoVkVDVE9SUCAobWNfZm9yZWdyb3VuZCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNs
X2ZnLnJlZCA9IFhGTE9BVF9EQVRBIChBUkVGIChtY19mb3JlZ3JvdW5kLCAwKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsc2xfZmcuZ3JlZW4gPSBYRkxPQVRfREFUQSAoQVJFRiAo
bWNfZm9yZWdyb3VuZCwgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsX2Zn
LmJsdWUgPSBYRkxPQVRfREFUQSAoQVJFRiAobWNfZm9yZWdyb3VuZCwgMikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChOSUxQIChtY19mb3JlZ3JvdW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1j
X2NvbG9yX3BpY2tlciAodywgZ2x5cGgsIGVzc2VudGlhbHMsICZsc2xfZmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2ludCwgY3Vyc29yX3R5cGUs
IHJvd19wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVVMVElQTEVfQ1VSU09SUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdnBv
cyA9IE1BVFJJWF9ST1dfVlBPUyAocm93LCBtYXRyaXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtY19lbmdpbmUgKHcsIG1hdHJpeCwgcm93LCBnbHlwaCwgYXJlYSwgcmVsYXRpdmVfeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9saW1pdCwgcm93LT55LCBnbHlwaCAt
IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9tYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbHMsIHJvd19wb3NpdGlvbiwg
bHNsX2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRV9DVVJT
T1JTLCBkcmF3X3AsIGZyb21fd2hlcmUsIE1DX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFOSUxQIChCVkFS
IChiLCBmY192aXNpYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKGVzc2VudGlhbHMuYWN0
aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICghZXNzZW50aWFscy5hY3RpdmVfcAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBmY19pbmFjdGl2
ZV93aW5kb3dzKSkpKQorICAgICAgICAgICAgICAgICAgICAvLyAmJiBlc3NlbnRpYWxzLmZjX3gg
PD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICYmIGVzc2VudGlhbHMuZmNf
eCA8IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZj
X3ggPj0gdy0+bWMubG51bV9waXhlbF93aWR0aCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKHctPmN1cnNvci54ID09IGVzc2Vu
dGlhbHMuZmNfeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiB3LT5jdXJzb3IueSA9PSByb3ctPnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgdy0+Y3Vyc29yLmhwb3MgPT0gZ2x5cGggLSByb3ctPmdseXBo
c1tURVhUX0FSRUFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHctPmN1cnNvci52cG9zID09IHZwb3MpOworICAgICAgICAgICAgICAgICAgICBpbnQg
aHBvcyA9IGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IG1jX1JHQiBsc2xfZmc7CisgICAgICAgICAgICAgICAgICAgIG1jX2NvbG9yX3Bp
Y2tlciAodywgZ2x5cGgsIGVzc2VudGlhbHMsICZsc2xfZmcsIC0xLCBNQ19CQVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3Bvc2l0aW9uLCBGSUxMX0NPTFVNTik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIGhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICYmIHJlbGF0aXZlX3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGggPD0g
dGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94IDwg
dGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGhlYWRlcl9saW5l
X2Zvcm1hdCA+IDAgJiYgdnBvcyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
aGVhZGVyX2xpbmVfZm9ybWF0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGds
eXBoICE9IGdseXBoX2VuZCAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZXNz
ZW50aWFscy5mY194ID49IHJlbGF0aXZlX3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgZXNzZW50aWFscy5mY194IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlc3NlbnRpYWxzLmZjX3ggPj0gcmVsYXRp
dmVfeCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPnkgPD0gd2luZG93X3RleHRf
Ym90dG9tX3kgKHcpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNv
cl9wKQorICAgICAgICAgICAgICAgICAgICAgIG1jX2VuZ2luZSAodywgbWF0cml4LCByb3csIGds
eXBoLCBhcmVhLCByZWxhdGl2ZV94LCB4X2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm93LT55LCBocG9zLCB2cG9zLCBNQ19CQVIsIDEsIGN1cnNvcl9tYXRyaXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24s
IGxzbF9mZywgRklMTF9DT0xVTU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
cmF3X3AsIGZyb21fd2hlcmUsIEZDX0NBQ0hFKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAgICAgICAgICAg
ICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaG9yaXpvbnRhbF9ydWxlcikpCisgICAgICAg
ICAgICAgICAgICAgICYmIChlc3NlbnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAoIWVzc2VudGlhbHMuYWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAhTklMUCAoQlZBUiAoYiwgY2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgdnBvcyA9PSB3LT5jdXJzb3IudnBvcykKKyAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaW50IHhfbGltaXQgPSB0ZXh0X2FyZWFfd2lkdGg7CisgICAg
ICAgICAgICAgICAgICAgIGludCBocG9zID0gZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFd
OworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZzsKKyAgICAgICAgICAg
ICAgICAgICAgbWNfY29sb3JfcGlja2VyICh3LCBnbHlwaCwgZXNzZW50aWFscywgJmxzbF9mZywg
LTEsIE1DX0hCQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93X3Bv
c2l0aW9uLCBIT1JJWk9OVEFMX1JVTEVSKTsKKyAgICAgICAgICAgICAgICAgICAgLyogUHJlc2Vy
dmUgc3VwcG9ydCBmb3IgZGVmYXVsdCBiZWhhdmlvciBzdWNoIHRoYXQgYSB1c2VyIG1heQorICAg
ICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBoZWlnaHQgb2YgYW4gTUNfSEJBUiwgd2hpY2gg
YmVnaW5zIGl0cyBqb3VybmV5CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBgY3Vyc29yX3dp
ZHRoJy4gIGBtY19nZXRfY3Vyc29yX2dlb21ldHJ5JyByZWFkanVzdHMuICovCisgICAgICAgICAg
ICAgICAgICAgIGlmIChocG9zID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGhwb3MgPCBocG9zX3N0YXJ0ICsgaHBvc19sZW5ndGgpCisgICAgICAgICAgICAgICAgICAg
ICAgbWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gsIHhf
bGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnksIGhwb3MsIHZw
b3MsIE1DX0hCQVIsIDEsIGN1cnNvcl9tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlc3NlbnRpYWxzLCByb3dfcG9zaXRpb24sIGxzbF9mZywgSE9SSVpPTlRBTF9SVUxF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdfcCwgZnJvbV93aGVyZSwg
Q0hfQ0FDSEUpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghTklM
UCAoQlZBUiAoYiwgY3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChC
VkFSIChiLCBjaF92ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgICAgICAgICAgICYmIChlc3Nl
bnRpYWxzLmFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWVzc2VudGlhbHMu
YWN0aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwg
Y2hfaW5hY3RpdmVfd2luZG93cykpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWZpbGxfY29s
dW1uX3RydW1wc19wKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBj
dXJzb3JfdHlwZSA9IChnbHlwaC0+dHlwZSA9PSBJTUFHRV9HTFlQSCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA/IE1DX0hPTExPV19CT1gKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IE1DX0JBUjsKKyAgICAgICAgICAgICAgICAgICAgaW50IHhfbGltaXQg
PSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVhbF9mYWtlX2N1
cnNvcl9wID0gKHctPmN1cnNvci55ID09IHJvdy0+eQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IudnBvcyA9PSB2cG9zKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IGhwb3MgPSBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV07
CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2ZnOworICAgICAgICAgICAg
ICAgICAgICBtY19jb2xvcl9waWNrZXIgKHcsIGdseXBoLCBlc3NlbnRpYWxzLCAmbHNsX2ZnLCAt
MSwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93
X3Bvc2l0aW9uLCBWRVJUSUNBTF9SVUxFUik7CisgICAgICAgICAgICAgICAgICAgIGlmIChocG9z
ID49IGhwb3Nfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPCBocG9zX3N0
YXJ0ICsgaHBvc19sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgoaGVhZGVyX2xp
bmVfZm9ybWF0ID4gMCAmJiB2cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICgo
Z2x5cGggIT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3
LT5jdXJzb3IueCA+PSByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHctPmN1cnNvci54IDwgcmVsYXRpdmVfeCArIGdseXBoLT5waXhlbF93aWR0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAoZ2x5cGggPT0gZ2x5cGhfZW5kIC0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5jdXJzb3IueCA+PSByZWxhdGl2ZV94KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHJvdy0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21feSAo
dykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAg
ICAgICAgICAgICAgICAgICAgbWNfZW5naW5lICh3LCBtYXRyaXgsIHJvdywgZ2x5cGgsIGFyZWEs
IHJlbGF0aXZlX3gsIHhfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
b3ctPnksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlLCAxLCBjdXJzb3JfbWF0cml4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNzZW50aWFscywgcm93X3Bvc2l0aW9uLCBsc2xf
ZmcsIFZFUlRJQ0FMX1JVTEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJh
d19wLCBmcm9tX3doZXJlLCBDSF9DQUNIRSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVsYXRpdmVfeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisgICAgICB9CisgIC8vICBjbG9ja190IGNsb2NrX2VuZCA9IGNsb2Nr
KCk7CisgIC8vICBkb3VibGUgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoY2xvY2tfZW5kIC0g
Y2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAvLyAgZnByaW50ZiAoc3RkZXJyLCAi
bWNfZHJhd19yb3cgKCVzKTogIFRJTUUgKCVmKVxuIiwgbWNfd2luZG93ICh3KSwgY3B1X3RpbWVf
dXNlZCk7Cit9CisKK2Jvb2wKK21jX3JlZHJhd19yb3cgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVj
dCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAorICAgICAgICAg
ICAgICAgZW51bSBnbHlwaF9yb3dfYXJlYSBhcmVhLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X2hw
b3MsIGludCBlbmRfaHBvcywKKyAgICAgICAgICAgICAgIGJvb2wgY2xlYXJfZW9sX3AsIGVudW0g
ZHJhd19nbHlwaHNfZmFjZSBobCwKKyAgICAgICAgICAgICAgIGVudW0gbWNfcmVkcmF3X3Jvd190
eXBlIGZyb21fd2hlcmUpCit7CisgIGJvb2wgZ29fcCA9ICgody0+bWNfbWF0cml4LmN1cnNvcnNf
dXNlZFtNQ19DQUNIRV0gPiAwCisgICAgICAgICAgICAgICAgfHwgdy0+bWNfbWF0cml4LmN1cnNv
cnNfdXNlZFtDSF9DQUNIRV0gPiAwCisgICAgICAgICAgICAgICAgfHwgdy0+bWNfbWF0cml4LmN1
cnNvcnNfdXNlZFtGQ19DQUNIRV0gPiAwKQorICAgICAgICAgICAgICAgJiYgYXJlYSA9PSBURVhU
X0FSRUEKKyAgICAgICAgICAgICAgICYmIHJvdy0+dXNlZFthcmVhXSk7CisgIGlmICghZ29fcCkK
KyAgICByZXR1cm4gZmFsc2U7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZS
QU1FICh3KSk7CisgIGludCB2cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIG1hdHJpeCk7Cisg
IGlmIChtY19zdGRlcnJfcCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19yZWRyYXdfcm93ICgl
ZCk6ICAlc1xuXAorICBzdGFydF94ICglZCkgfCBzdGFydF9ocG9zICglZCkgfCBlbmRfaHBvcyAo
JWQpXG4iLAorICB2cG9zLCBtY19yZWRyYXdfcm93X3R5cGVfdG9fc3RyaW5nIChmcm9tX3doZXJl
KSwgc3RhcnRfeCwgc3RhcnRfaHBvcywgZW5kX2hwb3MpOworICBzdHJ1Y3QgbWNfUkdCIGxzbCA9
IHsucmVkID0gLTEuMCwgLmdyZWVuID0gLTEuMCwgLmJsdWUgPSAtMS4wfTsKKyAgZW51bSBtY19m
bGF2b3IgZ2x5cGhfZmxhdm9yID0gTk9fRkxBVk9SOworICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1
cnNvcl90eXBlID0gTUNfTk9fQ1VSU09SOworICBpbnQgd2QgPSAtMTsKKyAgYm9vbCBhY3RpdmVf
cCA9ICh3ID09IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdykKKyAgICAgICAgICAgICAgICAg
ICAmJiBmID09IEZSQU1FX0RJU1BMQVlfSU5GTyAoZiktPmhpZ2hsaWdodF9mcmFtZSk7CisgIGJv
b2wgY3Vyc29yX2djX3AgPSBmYWxzZTsKKyAgaW50IG92ZXJsYXBzID0gMDsKKyAgaW50IHggPSAw
OworICBib29sIGRyYXdfcCA9IHRydWU7CisgIC8vICBjbG9ja190IGNsb2NrX3N0YXJ0ID0gY2xv
Y2soKTsKKyAgaWYgKGVuZF9ocG9zID4gc3RhcnRfaHBvcykKKyAgICB4ID0gbWNfZHJhd19nbHlw
aHMgKHcsIG1hdHJpeCwgcm93LCB3LT5tY19tYXRyaXgsIHN0YXJ0X3gsIFRFWFRfQVJFQSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2hwb3MsIGVuZF9ocG9zLCBobCwgb3ZlcmxhcHMs
IHZwb3MsIGxzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29y
X3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICBNQ19EUkFXX0dMWVBIX1NUUklORywgZHJhd19wKTsKKyAgLy8gIGNsb2NrX3QgY2xvY2tfZW5k
ID0gY2xvY2soKTsKKyAgLy8gIGRvdWJsZSB0aW1lX2dseXBocyA9ICgoZG91YmxlKSAoY2xvY2tf
ZW5kIC0gY2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICAvKiBgcmVkcmF3X292ZXJs
YXBwZWRfcm93cycgY2FsbHMgYHJpZi0+Y2xlYXJfZW5kX29mX2xpbmUnLiAqLworICBpZiAoY2xl
YXJfZW9sX3AKKyAgICAgICYmIGVuZF9ocG9zID4gc3RhcnRfaHBvcykKKyAgICB7CisgICAgICAv
KiBBZHZhbmNlIHRoZSBvdXRwdXQgY3Vyc29yLiAqLworICAgICAgdy0+b3V0cHV0X2N1cnNvci5o
cG9zID0gZW5kX2hwb3M7CisgICAgICB3LT5vdXRwdXRfY3Vyc29yLnggPSB4OworICAgICAgRlJB
TUVfUklGIChmKS0+Y2xlYXJfZW5kX29mX2xpbmUgKHcsIHJvdywgVEVYVF9BUkVBLCAtMSk7Cisg
ICAgfQorICAvLyAgY2xvY2tfc3RhcnQgPSBjbG9jaygpOworICBpbnQgdm50aCA9IE1BVFJJWF9S
T1dfVlBPUyAocm93LCBtYXRyaXgpOworICAvKiBTVFJFVENIX0dMWVBIIG1heSBjb250YWluIG1v
cmUgdGhhbiBvbmUgZmFrZSBjdXJzb3IgYXQgdGhlIHNhbWUgSFBPUy4gKi8KKyAgZm9yIChlbnVt
IG1jX2NhY2hlX3R5cGUgY2FjaGVfdHlwZSA9IE1DX0NBQ0hFOworICAgICAgIGNhY2hlX3R5cGUg
PCBOT19DQUNIRTsKKyAgICAgICArK2NhY2hlX3R5cGUpCisgICAgeworICAgICAgZm9yIChpbnQg
bnRoID0gMDsKKyAgICAgICAgICAgbWNfdHJhdmVyc2VfY2FjaGVfcCAody0+bWNfbWF0cml4LCBj
YWNoZV90eXBlLCB2bnRoLCBudGgpOworICAgICAgICAgICArK250aCkKKyAgICAgICAgeworICAg
ICAgICAgIGludCB4ID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1b
bnRoXS54OworICAgICAgICAgIGludCBmeCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hl
W2NhY2hlX3R5cGVdW250aF0uZng7CisgICAgICAgICAgaW50IHkgPSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnk7CisgICAgICAgICAgaW50IGZ5ID0gdy0+
bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5meTsKKyAgICAgICAg
ICBpbnQgaHBvcyA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF0uaHBvczsKKyAgICAgICAgICBpbnQgdnBvcyA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW250aF0udnBvczsKKyAgICAgICAgICBpbnQgd2QgPSB3LT5tY19tYXRy
aXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLndkOworICAgICAgICAgIGludCBo
ID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5oOworICAg
ICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5cGUgPSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmN1cnNvcl90eXBlOworICAgICAgICAgIGlu
dCBjdXJzb3Jfd2lkdGggPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhdLmN1cnNvcl93aWR0aDsKKyAgICAgICAgICBzdHJ1Y3QgbWNfUkdCIGxzbF9mZyA9IHsu
cmVkID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5y
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdyZWVuID0gdy0+bWNfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5mZy5ncmVlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuYmx1ZSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhd
LmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZmcuYmx1ZX07CisgICAgICAgICAgLy8gIHN0cnVjdCBt
Y19SR0IgbHNsX2JnID0gey5yZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNo
ZV90eXBlXVtudGhdLmJnLnJlZCwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmdyZWVuID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XS5iZy5ncmVlbiwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgLmJsdWUg
PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmJsdWV9
OworICAgICAgICAgIGJvb2wgYWN0aXZlX3AgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNo
ZVtjYWNoZV90eXBlXVtudGhdLmFjdGl2ZV9wOworICAgICAgICAgIGVudW0gbWNfZmxhdm9yIGds
eXBoX2ZsYXZvciA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250
aF0uZ2x5cGhfZmxhdm9yOworICAgICAgICAgIGJvb2wgZW5hYmxlZF9wID0gdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3A7CisgICAgICAgICAg
aWYgKHZwb3MgPT0gdm50aAorICAgICAgICAgICAgICAmJiAoKGhwb3MgPj0gc3RhcnRfaHBvcwor
ICAgICAgICAgICAgICAgICAgICYmIGhwb3MgPCBlbmRfaHBvcykKKyAgICAgICAgICAgICAgICAg
IC8qIEEgZmxvYXRpbmcgY3Vyc29yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBnbHlwaCByb3cuICov
CisgICAgICAgICAgICAgICAgICB8fCAoaHBvcyArIDEgPT0gc3RhcnRfaHBvcworICAgICAgICAg
ICAgICAgICAgICAgICYmIGhwb3MgKyAxID09IGVuZF9ocG9zKSkKKyAgICAgICAgICAgICAgJiYg
ZW5hYmxlZF9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBib29sIHJlbW92ZV9wID0g
ZmFsc2U7CisgICAgICAgICAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCBtYXRyaXgsIHJv
dywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3ZCwgaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGxzbF9mZywgYWN0aXZl
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9mbGF2b3IsIHJl
bW92ZV9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIHRydWU7
CisgIC8vICBjbG9ja19lbmQgPSBjbG9jaygpOworICAvLyAgZG91YmxlIHRpbWVfY3Vyc29ycyA9
ICgoZG91YmxlKSAoY2xvY2tfZW5kIC0gY2xvY2tfc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOwor
ICAvLyAgZnByaW50ZiAoc3RkZXJyLCAibWNfcmVkcmF3X3JvdyAoJWQpOiAgaHBvcyAoJWQvJWQp
IHwgZ2x5cGhzICglZikgfCBjdXJzb3JzICglZilcbiIsCisgIC8vICAgICAgICAgICAgICAgICAg
IHZwb3MsIHN0YXJ0X2hwb3MsIGVuZF9ocG9zLCB0aW1lX2dseXBocywgdGltZV9jdXJzb3JzKTsK
K30KKwordm9pZAorbWNfZXJhc2Vfcm93IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhf
bWF0cml4ICptYXRyaXgsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdykKK3sKKyAgaW50IHZudGggPSBN
QVRSSVhfUk9XX1ZQT1MgKHJvdywgbWF0cml4KTsKKyAgaWYgKG1jX3N0ZGVycl9wKQorICAgIGZw
cmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX3JvdyAoJXMpOiAgdnBvcyAoJWQpXG4iLCBtY193aW5k
b3cgKHcpLCB2bnRoKTsKKyAgLy8gIGlmIChtY19zdGRlcnJfcCkKKyAgLy8gICAgZnByaW50ZiAo
c3RkZXJyLCAibWNfZXJhc2VfaGVscGVyICglcyk6ICBjYWNoZSAoJXMpIHwgdnBvcyAoJWQpXG4i
LAorICAvLyAgICAgIG1jX3dpbmRvdyAodyksIG1jX2NhY2hlX3R5cGVfdG9fc3RyaW5nIChjYWNo
ZV90eXBlKSwgdm50aCk7CisgIGZvciAoZW51bSBtY19jYWNoZV90eXBlIGNhY2hlX3R5cGUgPSBN
Q19DQUNIRTsKKyAgICAgICBjYWNoZV90eXBlIDwgTk9fQ0FDSEU7CisgICAgICAgKytjYWNoZV90
eXBlKQorICAgIHsKKyAgICAgIGZvciAoaW50IG50aCA9IDA7CisgICAgICAgICAgIG1jX3RyYXZl
cnNlX2NhY2hlX3AgKHctPm1jX21hdHJpeCwgY2FjaGVfdHlwZSwgdm50aCwgbnRoKTsKKyAgICAg
ICAgICAgKytudGgpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgeCA9IHctPm1jX21hdHJpeC52
cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0ueDsKKyAgICAgICAgICBpbnQgZnggPSB3
LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZ4OworICAgICAg
ICAgIGludCB5ID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XS55OworICAgICAgICAgIGludCBmeSA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2Nh
Y2hlX3R5cGVdW250aF0uZnk7CisgICAgICAgICAgaW50IGhwb3MgPSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmhwb3M7CisgICAgICAgICAgaW50IHZwb3Mg
PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLnZwb3M7Cisg
ICAgICAgICAgaW50IHdkID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlw
ZV1bbnRoXS53ZDsKKyAgICAgICAgICBpbnQgaCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNh
Y2hlW2NhY2hlX3R5cGVdW250aF0uaDsKKyAgICAgICAgICBlbnVtIG1jX2N1cnNvcl90eXBlIGN1
cnNvcl90eXBlID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRo
XS5jdXJzb3JfdHlwZTsKKyAgICAgICAgICBpbnQgY3Vyc29yX3dpZHRoID0gdy0+bWNfbWF0cml4
LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5jdXJzb3Jfd2lkdGg7CisgICAgICAg
ICAgLy8gIHN0cnVjdCBtY19SR0IgbHNsX2ZnID0gey5yZWQgPSB3LT5tY19tYXRyaXgudnBvc1t2
bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmZnLnJlZCwKKyAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmdyZWVuID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVb
Y2FjaGVfdHlwZV1bbnRoXS5mZy5ncmVlbiwKKyAgICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmJsdWUgPSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBl
XVtudGhdLmZnLmJsdWV9OworICAgICAgICAgIHN0cnVjdCBtY19SR0IgbHNsX2JnID0gey5yZWQg
PSB3LT5tY19tYXRyaXgudnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLnJlZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ3JlZW4gPSB3LT5tY19tYXRyaXgu
dnBvc1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmJnLmdyZWVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5ibHVlID0gdy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2Fj
aGVbY2FjaGVfdHlwZV1bbnRoXS5iZy5ibHVlfTsKKyAgICAgICAgICBib29sIGFjdGl2ZV9wID0g
dy0+bWNfbWF0cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5hY3RpdmVfcDsK
KyAgICAgICAgICBlbnVtIG1jX2ZsYXZvciBnbHlwaF9mbGF2b3IgPSB3LT5tY19tYXRyaXgudnBv
c1t2bnRoXS5jYWNoZVtjYWNoZV90eXBlXVtudGhdLmdseXBoX2ZsYXZvcjsKKyAgICAgICAgICBi
b29sIGVuYWJsZWRfcCA9IHctPm1jX21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVd
W250aF0uZW5hYmxlZF9wOworICAgICAgICAgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5j
YCBjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3RzLAorICAgICAgICAgIGVhc3NlcnQgKG1hdHJp
eCAmJiBtYXRyaXgtPnJvd3MpOworICAgICAgICAgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8
IG1hdHJpeC0+bnJvd3MpOyAqLworICAgICAgICAgIGJvb2wgYmFyZl9jcmFzaF9vbmUgPSAobWF0
cml4ICYmIG1hdHJpeC0+cm93cykgPyBmYWxzZSA6IHRydWU7CisgICAgICAgICAgaWYgKGJhcmZf
Y3Jhc2hfb25lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgYm9vbCBiYXJmX2Ny
YXNoX3R3byA9ICh2cG9zID49IDAgJiYgdnBvcyA8IG1hdHJpeC0+bnJvd3MpID8gZmFsc2UgOiB0
cnVlOworICAgICAgICAgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgIGlmICh2cG9zID09IHZudGgKKyAgICAgICAgICAgICAgJiYgZ2x5cGhfZmxh
dm9yID09IE1DX0dMWVBICisgICAgICAgICAgICAgICYmIGVuYWJsZWRfcCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgbWNfZXJhc2VfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgdy0+bWNf
bWF0cml4LCB4LCB5LCBocG9zLCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkKTsKKyAgICAgICAgICAgICAgdy0+bWNfbWF0
cml4LnZwb3Nbdm50aF0uY2FjaGVbY2FjaGVfdHlwZV1bbnRoXS5lbmFibGVkX3AgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgLS13LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5cGVdOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodnBvcyA9PSB2bnRoCisgICAgICAg
ICAgICAgICAgICAgICAmJiBlbmFibGVkX3ApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBib29sIHJlbW92ZV9wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtY19kcmF3X2VyYXNl
X2h5YnJpZCAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlLCBjdXJz
b3Jfd2lkdGgsIGxzbF9iZywgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdseXBoX2ZsYXZvciwgcmVtb3ZlX3ApOworICAgICAgICAgICAgICAgIHctPm1j
X21hdHJpeC52cG9zW3ZudGhdLmNhY2hlW2NhY2hlX3R5cGVdW250aF0uZW5hYmxlZF9wID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgLS13LT5tY19tYXRyaXguY3Vyc29yc191c2VkW2NhY2hlX3R5
cGVdOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHctPm1jX21hdHJpeC52cG9z
W3ZudGhdLmNhY2hlX3VzZWRbY2FjaGVfdHlwZV0gPSAwOworICAgIH0KK30KKworLyogRXJhc2Ug
ZmFrZSBjdXJzb3JzIGZyb20gKG1pbiwgcnVuLmN1cnJlbnRfeSwgcnVuLmRlc2lyZWRfeSkgdG8g
ZW5kIG9mIHdpbmRvdy4KKyAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX0RPV046
CisgICAgcnVuLmhlaWdodCA9IGl0Lmxhc3RfdmlzaWJsZV95IC0gcnVuLmRlc2lyZWRfeQorICAg
IFtlbWFjcyAtcTogIEhvbGQgdXAtYXJyb3cga2V5IHRyaWdnZXJpbmcgYXV0by1yZWNlbnRlciBh
dCBzY3JvbGwtbWFyZ2luLl0KKyAgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX1VQ
OgorICAgIHJ1bi5oZWlnaHQgPSBpdC5sYXN0X3Zpc2libGVfeSAtIHJ1bi5jdXJyZW50X3k7Cisg
ICAgW2VtYWNzIC1xOiAgSG9sZCB1cC1hcnJvdyBrZXkgdHJpZ2dlcmluZyBhdXRvLXJlY2VudGVy
IGF0IHNjcm9sbC1tYXJnaW4uXQorICBUUllfV0lORE9XX0lEOgorICAgIHJ1bi5oZWlnaHQgPSBp
dC5sYXN0X3Zpc2libGVfeSAtIG1heCAocnVuLmN1cnJlbnRfeSwgcnVuLmRlc2lyZWRfeSkKKyAg
ICBbQWRkIG9yIHJlbW92ZSBsaW5lcyBmcm9tIHRoZSBidWZmZXI7IGUuZy4sIFJFVCBvciBERUwu
XQorICArLS0tLS0tLS0tLS0tLSsgPD0gaXQuY3VycmVudF95ID09IDAKKyAgfCAgICAgICAgICAg
ICB8CisgIHwgICAgICAgICAgICAgfCA8PSBydW4uZGVzaXJlZF95ID09IDI3MCBbdXAgKOKGkSld
ID09IHJ1bi5jdXJyZW50X3kgPCBydW4uZGVzaXJlZF95CisgIHwgICAgICAgICAgICAgfCAgICBy
dW4uaGVpZ2h0ID0gaXQubGFzdF92aXNpYmxlX3kgLSBydW4uY3VycmVudF95OworICB8ICAgICAg
ICAgICAgIHwgICAgcnVuLmhlaWdodCA9PSAxMDgwIC0gNTQwID09IDU0MAorICB8ICAgICAgICAg
ICAgIHwgICAgW1RoZSBlbnRpcmUgYm90dG9tIHJlY3RhbmdsZSBnZXRzIGNvcGllZCB0byB1cHBl
ciBydW4uZGVzaXJlZF95Ll0KKyAgfCAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tKyA8
PSBydW4uY3VycmVudF95ID09IDU0MAorICB8ICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAg
ICB8IDw9IHJ1bi5kZXNpcmVkX3kgPT0gODEwIFtkb3duICjihpMpXSA9PSBydW4uY3VycmVudF95
ID4gcnVuLmRlc2lyZWRfeQorICB8ICAgICAgICAgICAgIHwgICAgcnVuLmhlaWdodCA9IGl0Lmxh
c3RfdmlzaWJsZV95IC0gcnVuLmRlc2lyZWRfeQorICB8ICAgICAgICAgICAgIHwgICAgcnVuLmhl
aWdodCA9PSAxMDgwIC0gODEwID09IDI3MAorICB8ICAgICAgICAgICAgIHwgICAgW1RvcCBwYXJ0
IG9mIHRoZSBsb3dlciByZWN0YW5nbGUgZ2V0cyBjb3BpZWQgdG8gbG93ZXIgcnVuLmRlc2lyZWRf
eS5dCisgIHwgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLSsgPD0gaXQubGFzdF92aXNp
YmxlX3kgPT0gMTA4MCAqLwordm9pZAorbWNfcHJlX3Njcm9sbF9jbGVhbiAoc3RydWN0IHdpbmRv
dyAqdywgc3RydWN0IHJ1biBydW4sIGludCBzdGFydF92cG9zLAorICAgICAgICAgICAgICAgICAg
ICAgaW50IG5yb3dzX3Njcm9sbGVkLCBlbnVtIG1jX3ByZV9zY3JvbGxfY2xlYW5fdHlwZSBmcm9t
X3doZXJlKQoreworICBpZiAoTUlOSV9XSU5ET1dfUCAodykpCisgICAgcmV0dXJuOworICBib29s
IGdvX29uZV9wID0gKHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbTUNfQ0FDSEVdID4gMAorICAg
ICAgICAgICAgICAgICAgIHx8IHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbQ0hfQ0FDSEVdID4g
MAorICAgICAgICAgICAgICAgICAgIHx8IHctPm1jX21hdHJpeC5jdXJzb3JzX3VzZWRbRkNfQ0FD
SEVdID4gMCk7CisgIGJvb2wgZ29fdHdvX3AgPSAoQlVGRkVSUCAody0+Y29udGVudHMpCisgICAg
ICAgICAgICAgICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNy
b3NzaGFpcnMpKQorICAgICAgICAgICAgICAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZF
UiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfHwg
IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpKSk7CisgIGlmICht
Y19zdGRlcnJfcCkKKyAgICBmcHJpbnRmIChzdGRlcnIsICJtY19wcmVfc2Nyb2xsX2NsZWFuICgl
cyk6XG5cCisgICVzIHwgZ29fb25lX3AgKCVzKSB8IGdvX3R3b19wICglcylcblwKKyAgc3RhcnRf
dnBvcyAoJWQpIHwgbnJvd3Nfc2Nyb2xsZWQgKCVkKVxuXAorICAlczogIHJ1bi5jdXJyZW50L2Rl
c2lyZWRfeSAoJWQvJWQpIHwgcnVuLmhlaWdodCAoJWQpXG4iLAorICAgIG1jX3dpbmRvdyAodyks
IChmcm9tX3doZXJlID09IFRSWV9XSU5ET1dfUkVVU0lOR19DVVJSRU5UX01BVFJJWF9ET1dOKQor
ICAgICAgICAgICAgICAgICAgICAgPyAiVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklY
X0RPV04iCisgICAgICAgICAgICAgICAgICAgOiAoZnJvbV93aGVyZSA9PSBUUllfV0lORE9XX1JF
VVNJTkdfQ1VSUkVOVF9NQVRSSVhfVVApCisgICAgICAgICAgICAgICAgICAgICA/ICJUUllfV0lO
RE9XX1JFVVNJTkdfQ1VSUkVOVF9NQVRSSVhfVVAiCisgICAgICAgICAgICAgICAgICAgOiAoZnJv
bV93aGVyZSA9PSBUUllfV0lORE9XX0lEKQorICAgICAgICAgICAgICAgICAgICAgPyAiVFJZX1dJ
TkRPV19JRCIKKyAgICAgICAgICAgICAgICAgICA6ICJVTktOT1dOIiwKKyAgICBnb19vbmVfcCA/
ICJ5ZXMiIDogIm5vIiwgZ29fdHdvX3AgPyAieWVzIiA6ICJubyIsCisgICAgc3RhcnRfdnBvcywg
bnJvd3Nfc2Nyb2xsZWQsCisgICAgcnVuLmN1cnJlbnRfeSA8IHJ1bi5kZXNpcmVkX3kgPyAi4oaT
IiA6ICLihpEiLAorICAgIHJ1bi5jdXJyZW50X3ksIHJ1bi5kZXNpcmVkX3ksIHJ1bi5oZWlnaHQp
OworICBpZiAoIWdvX29uZV9wICYmICFnb190d29fcCkKKyAgICByZXR1cm47CisgIGJvb2wgdXBk
YXRpbmdfZnJhbWVfcCA9IGZhbHNlOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZy
YW1lKTsKKyAgaWYgKFhGUkFNRSAody0+ZnJhbWUpICE9IGYtPm1jX3VwZGF0aW5nX2ZyYW1lCisg
ICAgICAmJiAoZ29fb25lX3AgfHwgZ29fdHdvX3ApKQorICAgIHsKKyAgICAgIHVwZGF0aW5nX2Zy
YW1lX3AgPSB0cnVlOworICAgICAgdXBkYXRlX2JlZ2luIChmKTsKKyAgICB9CisgIGlmICh3LT5w
aHlzX2N1cnNvcl9vbl9wCisgICAgICAmJiBnb190d29fcCkKKyAgICBlcmFzZV9waHlzX2N1cnNv
ciAodyk7CisgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4
OworICBmb3IgKGludCB2bnRoID0gc3RhcnRfdnBvczsKKyAgICAgICBtYXRyaXggIT0gTlVMTAor
ICAgICAgICYmIHZudGggPCBtYXRyaXgtPm5yb3dzCisgICAgICAgJiYgTUFUUklYX1JPVyAobWF0
cml4LCB2bnRoKS0+ZW5hYmxlZF9wCisgICAgICAgJiYgZ29fb25lX3A7CisgICAgICAgKyt2bnRo
KQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKG1hdHJp
eCwgdm50aCk7CisgICAgICBtY19lcmFzZV9yb3cgKHcsIG1hdHJpeCwgcm93KTsKKyAgICB9Cisg
IGlmICh1cGRhdGluZ19mcmFtZV9wKQorICAgIHVwZGF0ZV9lbmQgKGYpOworICAvLyBtY19yZXNl
dF9jYWNoZSAodyk7Cit9CisKK0RFRlVOICgibWMtc3RkZXJyIiwgRm1jX3N0ZGVyciwgU21jX3N0
ZGVyciwgMCwgMSwgIlAiLAorICAgICAgIGRvYzogLyogVG9nZ2xlIHRyYWNpbmcgb2YgbXVsdGlw
bGUgZmFrZSBjdXJzb3JzLgorV2l0aCBBUkcsIHR1cm4gdHJhY2luZyBvbiBpZiBhbmQgb25seSBp
ZiBBUkcgaXMgcG9zaXRpdmUuICovKQorICAoTGlzcF9PYmplY3QgYXJnKQoreworICBpZiAoTklM
UCAoYXJnKSkKKyAgICBtY19zdGRlcnJfcCA9ICFtY19zdGRlcnJfcDsKKyAgZWxzZQorICAgIHsK
KyAgICAgIGFyZyA9IEZwcmVmaXhfbnVtZXJpY192YWx1ZSAoYXJnKTsKKyAgICAgIG1jX3N0ZGVy
cl9wID0gWEZJWE5VTSAoYXJnKSA+IDA7CisgICAgfQorICByZXR1cm4gUW5pbDsKK30KKworLyog
ZW5kIE1VTFRJUExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAwK
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogCQkgICAgICBXaW5kb3cgZGlzcGxheSBkaW1lbnNpb25zCkBAIC04
ODYwLDYgKzEzODQxLDI3IEBAIG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3RvIChzdHJ1Y3QgaXQg
Kml0LAogICAgICAgIHx8IChpdC0+bWV0aG9kID09IEdFVF9GUk9NX0RJU1BMQVlfVkVDVE9SCQlc
CiAJICAgJiYgaXQtPmRwdmVjICsgaXQtPmN1cnJlbnQuZHB2ZWNfaW5kZXggKyAxID49IGl0LT5k
cGVuZCkpKQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09S
UyAqLworCisgIGJvb2wgbWNfbGluZV9udW1iZXJfcGVuZGluZyA9IGZhbHNlOworCisgIGlmIChp
dC0+aHBvcyA9PSAwKQorICAgIHsKKyAgICAgIGlmICghKChvcCAmJiBNT1ZFX1RPX1gpICYmIHRv
X3ggPT0gaXQtPmZpcnN0X3Zpc2libGVfeCkKKyAgICAgICAgICAmJiAhc2hvdWxkX3Byb2R1Y2Vf
bGluZV9udW1iZXIgKGl0KSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChpdC0+Y3VycmVudF94
ID09IGl0LT5maXJzdF92aXNpYmxlX3gpCisgICAgICAgICAgICBtY19saW5lX251bWJlciAoaXQp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBtY19saW5lX251bWJlcl9wZW5kaW5n
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisK
KwogICBpZiAoaXQtPmhwb3MgPT0gMCkKICAgICB7CiAgICAgICAvKiBJZiBsaW5lIG51bWJlcnMg
YXJlIGJlaW5nIGRpc3BsYXllZCwgcHJvZHVjZSBhIGxpbmUgbnVtYmVyLgpAQCAtOTI1MSw2ICsx
NDI1MywyMiBAQCBtb3ZlX2l0X2luX2Rpc3BsYXlfbGluZV90byAoc3RydWN0IGl0ICppdCwKIAkJ
ICAgIH0KIAkJfQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VS
U09SUyAqLworCisgICAgICAgIGlmIChuZXdfeCA+IGl0LT5maXJzdF92aXNpYmxlX3gpCisgICAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1jX2xpbmVfbnVtYmVyX3BlbmRpbmcpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtY19saW5lX251bWJlcl9wZW5kaW5nID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgbWNfbGluZV9udW1iZXIgKGl0KTsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgICAgIGlmIChu
ZXdfeCA+IGl0LT5maXJzdF92aXNpYmxlX3gpCiAJCXsKIAkJICAvKiBJZiB3ZSBoYXZlIHJlYWNo
ZWQgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUKQEAgLTE0Mzk3LDkgKzE5NDE1LDIyIEBAIHJl
ZGlzcGxheV9pbnRlcm5hbCAodm9pZCkKIAkgICAgICAqdy0+ZGVzaXJlZF9tYXRyaXgtPm1ldGhv
ZCA9IDA7CiAJICAgICAgZGVidWdfbWV0aG9kX2FkZCAodywgIm9wdGltaXphdGlvbiAxIik7CiAj
ZW5kaWYKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg
Ki8KKwogI2lmZGVmIEhBVkVfV0lORE9XX1NZU1RFTQorICBpZiAoQlVGRkVSUCAody0+Y29udGVu
dHMpCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hh
aXJzKSkpCisgICAgbWNfdXBkYXRlX3dpbmRvd19mcmluZ2VzICh3LCBmYWxzZSk7CisgICAgZWxz
ZQogCSAgICAgIHVwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywgZmFsc2UpOwogI2VuZGlmCisKKy8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICBnb3RvIHVwZGF0ZTsKIAkgICAgfQog
CSAgZWxzZQpAQCAtMTc3OTIsMTAgKzIyODIzLDIyIEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3Bf
T2JqZWN0IHdpbmRvdywgYm9vbCBqdXN0X3RoaXNfb25lX3ApCiAgICAgfQogCiAjaWZkZWYgSEFW
RV9XSU5ET1dfU1lTVEVNCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBM
RS1DVVJTT1JTICovCisKKyAgYm9vbCBrZWVwX2N1cnJlbnRfcCA9IChqdXN0X3RoaXNfb25lX3AK
KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIXVzZWRfY3VycmVudF9tYXRyaXhfcCAmJiAh
b3ZlcmxheV9hcnJvd19zZWVuKQorICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHctPnBzZXVk
b193aW5kb3dfcCk7CisKKyAgYm9vbCBmcmluZ2VzX3VwZGF0ZWRfcCA9IChCVUZGRVJQICh3LT5j
b250ZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJV
RkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IG1jX3VwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywga2VlcF9jdXJyZW50X3ApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IHVwZGF0ZV93aW5kb3dfZnJpbmdlcyAodywga2VlcF9j
dXJyZW50X3ApOworCiAgIGlmIChGUkFNRV9XSU5ET1dfUCAoZikKLSAgICAgICYmIHVwZGF0ZV93
aW5kb3dfZnJpbmdlcyAodywgKGp1c3RfdGhpc19vbmVfcAotCQkJCSAgICB8fCAoIXVzZWRfY3Vy
cmVudF9tYXRyaXhfcCAmJiAhb3ZlcmxheV9hcnJvd19zZWVuKQotCQkJCSAgICB8fCB3LT5wc2V1
ZG9fd2luZG93X3ApKSkKKyAgICAgICYmIGZyaW5nZXNfdXBkYXRlZF9wKQogICAgIHsKICAgICAg
IHVwZGF0ZV9iZWdpbiAoZik7CiAgICAgICBibG9ja19pbnB1dCAoKTsKQEAgLTE3ODEwLDYgKzIy
ODUzLDkgQEAgcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBib29sIGp1c3Rf
dGhpc19vbmVfcCkKICAgICAgIHVwZGF0ZV9lbmQgKGYpOwogICAgIH0KIAorLyogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovCisKKwogICBpZiAoV0lORE9XX0JPVFRPTV9ESVZJREVSX1dJRFRIICh3KSkK
ICAgICBndWlfZHJhd19ib3R0b21fZGl2aWRlciAodyk7CiAjZW5kaWYgLyogSEFWRV9XSU5ET1df
U1lTVEVNICovCkBAIC0xODEyNSw2ICsyMzE3MSwxNiBAQCB0cnlfd2luZG93X3JldXNpbmdfY3Vy
cmVudF9tYXRyaXggKHN0cnVjdCB3aW5kb3cgKncpCiAJICAgICAgdXBkYXRlX2JlZ2luIChmKTsK
IAkgICAgICBndWlfdXBkYXRlX3dpbmRvd19iZWdpbiAodyk7CiAJICAgICAgRlJBTUVfUklGIChm
KS0+Y2xlYXJfd2luZG93X21vdXNlX2ZhY2UgKHcpOworCisKKy8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgbWNfcHJlX3Njcm9sbF9jbGVhbiAo
dywgcnVuLCBzdGFydF92cG9zLCBucm93c19zY3JvbGxlZCwgVFJZX1dJTkRPV19SRVVTSU5HX0NV
UlJFTlRfTUFUUklYX0RPV04pOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJICAg
ICAgRlJBTUVfUklGIChmKS0+c2Nyb2xsX3J1bl9ob29rICh3LCAmcnVuKTsKIAkgICAgICBndWlf
dXBkYXRlX3dpbmRvd19lbmQgKHcsIGZhbHNlLCBmYWxzZSk7CiAJICAgICAgdXBkYXRlX2VuZCAo
Zik7CkBAIC0xODI5MSw2ICsyMzM0NywxNiBAQCB0cnlfd2luZG93X3JldXNpbmdfY3VycmVudF9t
YXRyaXggKHN0cnVjdCB3aW5kb3cgKncpCiAJICB1cGRhdGVfYmVnaW4gKGYpOwogCSAgZ3VpX3Vw
ZGF0ZV93aW5kb3dfYmVnaW4gKHcpOwogCSAgRlJBTUVfUklGIChmKS0+Y2xlYXJfd2luZG93X21v
dXNlX2ZhY2UgKHcpOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUt
Q1VSU09SUyAqLworCisgICAgbWNfcHJlX3Njcm9sbF9jbGVhbiAodywgcnVuLCBzdGFydF92cG9z
LCBucm93c19zY3JvbGxlZCwgVFJZX1dJTkRPV19SRVVTSU5HX0NVUlJFTlRfTUFUUklYX1VQKTsK
KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgRlJBTUVfUklGIChmKS0+c2Nyb2xs
X3J1bl9ob29rICh3LCAmcnVuKTsKIAkgIGd1aV91cGRhdGVfd2luZG93X2VuZCAodywgZmFsc2Us
IGZhbHNlKTsKIAkgIHVwZGF0ZV9lbmQgKGYpOwpAQCAtMTkyNDUsNiArMjQzMTEsMTYgQEAgdHJ5
X3dpbmRvd19pZCAoc3RydWN0IHdpbmRvdyAqdykKICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0K
IAkgIGd1aV91cGRhdGVfd2luZG93X2JlZ2luICh3KTsKIAkgIEZSQU1FX1JJRiAoZiktPmNsZWFy
X3dpbmRvd19tb3VzZV9mYWNlICh3KTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q
IE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgIG1jX3ByZV9zY3JvbGxfY2xlYW4gKHcsIHJ1biwg
Zmlyc3RfdW5jaGFuZ2VkX2F0X2VuZF92cG9zLCBkdnBvcywgVFJZX1dJTkRPV19JRCk7CisKKy8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgIEZSQU1FX1JJRiAoZiktPnNjcm9sbF9ydW5f
aG9vayAodywgJnJ1bik7CiAJICBndWlfdXBkYXRlX3dpbmRvd19lbmQgKHcsIGZhbHNlLCBmYWxz
ZSk7CiAjZW5kaWYKQEAgLTIxNTI4LDYgKzI2NjA0LDE3IEBAIG1heWJlX3Byb2R1Y2VfbGluZV9u
dW1iZXIgKHN0cnVjdCBpdCAqaXQpCiAgICAgICBTRVRfVEVYVF9QT1MgKHRlbV9pdC5wb3NpdGlv
biwgLTEsIC0xKTsKICAgICAgIFBST0RVQ0VfR0xZUEhTICgmdGVtX2l0KTsKIAorCisvKiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgLyogVGhp
cyBwZXJtaXRzIHVzIHRvIGluc3BlY3QgdGhlIEhQT1Mgb2YgbGluZSBudW1iZXIgZ2x5cGhzIGFu
ZCB0aGUgc3BhY2UKKyAgICAgIHBhZGRpbmcgYmVmb3JlL2FmdGVyIHRoZSBsaW5lIG51bWJlcnMu
ICBXZSBzZXQgYGdseXBoLT5ocG9zYCBlbHNld2hlcmUuICovCisgICAgICB0ZW1faXQuaHBvcyAr
PSAxOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICAvKiBTdG9wIHByb2R1
Y2luZyBnbHlwaHMsIGFuZCByZWZyYWluIGZyb20gcHJvZHVjaW5nIHRoZSBsaW5lCiAJIG51bWJl
ciwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3BhY2Ugb24gdGhpcyBsaW5lLiAgKi8KICAgICAg
IGlmICh0ZW1faXQuY3VycmVudF94ID49IHdpZHRoX2xpbWl0KQpAQCAtMjE1MzksNiArMjY2MjYs
MzQgQEAgbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoc3RydWN0IGl0ICppdCkKIAl9CiAgICAg
fQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLwor
CisgIHN0cnVjdCB0ZXh0X3BvcyB3c3RhcnQ7CisgIFNFVF9URVhUX1BPU19GUk9NX01BUktFUiAo
d3N0YXJ0LCBpdC0+dy0+c3RhcnQpOworICBpZiAoaXQtPmFyZWEgPT0gVEVYVF9BUkVBCisgICAg
ICAmJiBJVF9DSEFSUE9TICgqaXQpID09IHdzdGFydC5jaGFycG9zKQorICAgIHsKKyAgICAgIHN0
cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChpdC0+dy0+Y29udGVudHMpOworICAgICAgc3RydWN0
IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgICAgICAvKiBOZWVkZWQgc28gdGhhdCBidWZm
ZXItbG9jYWwgdmFsdWVzIGNhbiBiZSBkZXRlcm1pbmVkOyBlLmcuLCB3aGVuCisgICAgICBzd2l0
Y2hpbmcgdG8gdGhlIG1pbmlidWZmZXIuICovCisgICAgICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgIG9sZF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcjsKKyAg
ICAgICAgICBzZXRfYnVmZmVyX2ludGVybmFsIChiKTsKKyAgICAgICAgfQorICAgICAgaXQtPnct
Pm1jLmxudW1fcGl4ZWxfd2lkdGggPSAoIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGVtX2l0LmN1cnJlbnRfeAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgICBpZiAob2xkX2J1ZmZl
cikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgfQorCisv
KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIFJlY29yZCB0aGUgd2lkdGggaW4gcGl4
ZWxzIHdlIG5lZWQgZm9yIHRoZSBsaW5lIG51bWJlciBkaXNwbGF5LiAgKi8KICAgaXQtPmxudW1f
cGl4ZWxfd2lkdGggPSB0ZW1faXQuY3VycmVudF94OwogICAvKiBDb3B5IHRoZSBwcm9kdWNlZCBn
bHlwaHMgaW50byBJVCdzIGdseXBoX3Jvdy4gICovCkBAIC0yMTcyOSw2ICsyNjg0NCwxNSBAQCBk
aXNwbGF5X2xpbmUgKHN0cnVjdCBpdCAqaXQsIGludCBjdXJzb3JfdnBvcykKIAogICBib29sIGxp
bmVfbnVtYmVyX25lZWRlZCA9IHNob3VsZF9wcm9kdWNlX2xpbmVfbnVtYmVyIChpdCk7CiAKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgYm9v
bCBtY19saW5lX251bWJlcl9uZWVkZWQgPSAhc2hvdWxkX3Byb2R1Y2VfbGluZV9udW1iZXIgKGl0
KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBNb3ZlIG92ZXIgZGlzcGxh
eSBlbGVtZW50cyB0aGF0IGFyZSBub3QgdmlzaWJsZSBiZWNhdXNlIHdlIGFyZQogICAgICBoc2Ny
b2xsZWQuICBUaGlzIG1heSBzdG9wIGF0IGFuIHgtcG9zaXRpb24gPCBmaXJzdF92aXNpYmxlX3gK
ICAgICAgaWYgdGhlIGZpcnN0IGdseXBoIGlzIHBhcnRpYWxseSB2aXNpYmxlIG9yIGlmIHdlIGhp
dCBhIGxpbmUgZW5kLiAgKi8KQEAgLTIxNzY5LDEyICsyNjg5MywzMyBAQCBkaXNwbGF5X2xpbmUg
KHN0cnVjdCBpdCAqaXQsIGludCBjdXJzb3JfdnBvcykKICAgICAgIG1pbl9wb3MgPSBDSEFSUE9T
ICh0aGlzX2xpbmVfbWluX3Bvcyk7CiAgICAgICBtaW5fYnBvcyA9IEJZVEVQT1MgKHRoaXNfbGlu
ZV9taW5fcG9zKTsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNV
UlNPUlMgKi8KKworICAgICAgaWYgKG1jX2xpbmVfbnVtYmVyX25lZWRlZCkKKyAgICAgICAgbWNf
bGluZV9udW1iZXIgKGl0KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAg
LyogUHJvZHVjZSBsaW5lIG51bWJlciwgaWYgbmVlZGVkLiAgKi8KICAgICAgIGlmIChsaW5lX251
bWJlcl9uZWVkZWQpCiAJbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoaXQpOwogICAgIH0KICAg
ZWxzZSBpZiAoaXQtPmFyZWEgPT0gVEVYVF9BUkVBKQogICAgIHsKKworCisvKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMqLworCisgICAgICBpZiAobWNfbGluZV9u
dW1iZXJfbmVlZGVkKQorICAgICAgICBtY19saW5lX251bWJlciAoaXQpOworCisvKiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KKworCiAgICAgICAvKiBMaW5lIG51bWJlcnMgc2hvdWxkIHByZWNlZGUg
dGhlIGxpbmUtcHJlZml4IG9yIHdyYXAtcHJlZml4LiAgKi8KICAgICAgIGlmIChsaW5lX251bWJl
cl9uZWVkZWQpCiAJbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoaXQpOwpAQCAtMjE5NDIsNiAr
MjcwODcsMTcgQEAgZGlzcGxheV9saW5lIChzdHJ1Y3QgaXQgKml0LCBpbnQgY3Vyc29yX3Zwb3Mp
CiAJICAgICBwcm9jZXNzIHRoZSBwcmVmaXggbm93LiAgKi8KIAkgIGlmIChpdC0+YXJlYSA9PSBU
RVhUX0FSRUEgJiYgcGVuZGluZ19oYW5kbGVfbGluZV9wcmVmaXgpCiAJICAgIHsKKworCisvKiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgICBp
ZiAobWNfbGluZV9udW1iZXJfbmVlZGVkKQorICAgICAgICAgIG1jX2xpbmVfbnVtYmVyIChpdCk7
CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgICAvKiBMaW5lIG51bWJlcnMg
c2hvdWxkIHByZWNlZGUgdGhlIGxpbmUtcHJlZml4IG9yIHdyYXAtcHJlZml4LiAgKi8KIAkgICAg
ICBpZiAobGluZV9udW1iZXJfbmVlZGVkKQogCQltYXliZV9wcm9kdWNlX2xpbmVfbnVtYmVyIChp
dCk7CkBAIC0yNzM2MCw2ICszMjUxNiwxOCBAQCBhcHBlbmRfZ2x5cGggKHN0cnVjdCBpdCAqaXQp
CiAJICAgIGdbMV0gPSAqZzsKIAkgIGdseXBoID0gaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2FyZWFd
OwogCX0KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg
Ki8KKworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsKKyAgICAgIGdseXBoLT5ieXRlcG9z
ID0gSVRfQllURVBPUyAoKml0KTsKKyAgICAgIGdseXBoLT5sbnVtID0gaXQtPmxudW07CisKKy8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIGdseXBoLT5jaGFycG9zID0gQ0hBUlBP
UyAoaXQtPnBvc2l0aW9uKTsKICAgICAgIGdseXBoLT5vYmplY3QgPSBpdC0+b2JqZWN0OwogICAg
ICAgaWYgKGl0LT5waXhlbF93aWR0aCA+IDApCkBAIC0yNzQ0Miw2ICszMjYxMCwxOCBAQCBhcHBl
bmRfY29tcG9zaXRlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCSAgICBnWzFdID0gKmc7CiAJICBn
bHlwaCA9IGl0LT5nbHlwaF9yb3ctPmdseXBoc1tpdC0+YXJlYV07CiAJfQorCisKKy8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+
aHBvcyA9IGl0LT5ocG9zOworICAgICAgZ2x5cGgtPmJ5dGVwb3MgPSBJVF9CWVRFUE9TICgqaXQp
OworICAgICAgZ2x5cGgtPmxudW0gPSBpdC0+bG51bTsKKworLyogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ICovCisKKwogICAgICAgZ2x5cGgtPmNoYXJwb3MgPSBpdC0+Y21wX2l0LmNoYXJwb3M7CiAgICAg
ICBnbHlwaC0+b2JqZWN0ID0gaXQtPm9iamVjdDsKICAgICAgIGVhc3NlcnQgKGl0LT5waXhlbF93
aWR0aCA8PSBTSFJUX01BWCk7CkBAIC0yNzY1MCw2ICszMjgzMCwxOCBAQCBwcm9kdWNlX2ltYWdl
X2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCX0KICAgICAgIGlmIChnbHlwaCA8IGl0LT5nbHlwaF9y
b3ctPmdseXBoc1thcmVhICsgMV0pCiAJeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor
LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+aHBvcyA9IGl0LT5ocG9zOwor
ICAgICAgZ2x5cGgtPmJ5dGVwb3MgPSBJVF9CWVRFUE9TICgqaXQpOworICAgICAgZ2x5cGgtPmxu
dW0gPSBpdC0+bG51bTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgZ2x5cGgt
PmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9iamVjdCA9IGl0
LT5vYmplY3Q7CiAJICBnbHlwaC0+cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5kcyAoLTEsIGl0
LT5waXhlbF93aWR0aCwgU0hSVF9NQVgpOwpAQCAtMjc3NTMsNiArMzI5NDUsMTggQEAgcHJvZHVj
ZV94d2lkZ2V0X2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCX0KICAgICAgIGlmIChnbHlwaCA8IGl0
LT5nbHlwaF9yb3ctPmdseXBoc1thcmVhICsgMV0pCiAJeworCisKKy8qICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+aHBvcyA9IGl0
LT5ocG9zOworICAgICAgZ2x5cGgtPmJ5dGVwb3MgPSBJVF9CWVRFUE9TICgqaXQpOworICAgICAg
Z2x5cGgtPmxudW0gPSBpdC0+bG51bTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog
CSAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9i
amVjdCA9IGl0LT5vYmplY3Q7CiAJICBnbHlwaC0+cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5k
cyAoLTEsIGl0LT5waXhlbF93aWR0aCwgU0hSVF9NQVgpOwpAQCAtMjc4MzksNiArMzMwNDMsMTgg
QEAgYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIExpc3BfT2JqZWN0IG9iamVj
dCwKIAkgICAgd2lkdGggLT0gaXQtPmZpcnN0X3Zpc2libGVfeCAtIGl0LT5jdXJyZW50X3g7CiAJ
ICBlYXNzZXJ0ICh3aWR0aCA+IDApOwogCX0KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
Ky8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsK
KyAgICAgIGdseXBoLT5ieXRlcG9zID0gSVRfQllURVBPUyAoKml0KTsKKyAgICAgIGdseXBoLT5s
bnVtID0gaXQtPmxudW07CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIGds
eXBoLT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKICAgICAgIGdseXBoLT5vYmpl
Y3QgPSBvYmplY3Q7CiAgICAgICAvKiBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBU
WVBFX01BWCBoZXJlLCBidXQKQEAgLTI4MjkzLDYgKzMzNTA5LDE4IEBAIGFwcGVuZF9nbHlwaGxl
c3NfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIGludCBmYWNlX2lkLCBib29sIGZvcl9ub19mb250LCBp
bnQgbGVuLAogCSAgICBnWzFdID0gKmc7CiAJICBnbHlwaCA9IGl0LT5nbHlwaF9yb3ctPmdseXBo
c1thcmVhXTsKIAl9CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1D
VVJTT1JTICovCisKKyAgICAgIGdseXBoLT5ocG9zID0gaXQtPmhwb3M7CisgICAgICBnbHlwaC0+
Ynl0ZXBvcyA9IElUX0JZVEVQT1MgKCppdCk7CisgICAgICBnbHlwaC0+bG51bSA9IGl0LT5sbnVt
OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICBnbHlwaC0+Y2hhcnBvcyA9
IENIQVJQT1MgKGl0LT5wb3NpdGlvbik7CiAgICAgICBnbHlwaC0+b2JqZWN0ID0gaXQtPm9iamVj
dDsKICAgICAgIGVhc3NlcnQgKGl0LT5waXhlbF93aWR0aCA8PSBTSFJUX01BWCk7CkBAIC0yOTM0
MywxMCArMzQ1NzEsMjAgQEAgZ3VpX2luc2VydF9nbHlwaHMgKHN0cnVjdCB3aW5kb3cgKncsIHN0
cnVjdCBnbHlwaF9yb3cgKnVwZGF0ZWRfcm93LAogCiAgIC8qIFdyaXRlIHRoZSBnbHlwaHMuICAq
LwogICBocG9zID0gc3RhcnQgLSByb3ctPmdseXBoc1t1cGRhdGVkX2FyZWFdOworCisKKy8qICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGlmICghbWNf
cmVkcmF3X3JvdyAodywgdy0+Y3VycmVudF9tYXRyaXgsIHJvdywgdXBkYXRlZF9hcmVhLCB3LT5v
dXRwdXRfY3Vyc29yLngsCisgICAgICAgICAgICAgICAgICAgICAgaHBvcywgaHBvcyArIGxlbiwg
ZmFsc2UsIERSQVdfTk9STUFMX1RFWFQsIEdVSV9JTlNFUlRfR0xZUEhTKSkKICAgZHJhd19nbHlw
aHMgKHcsIHctPm91dHB1dF9jdXJzb3IueCwgcm93LCB1cGRhdGVkX2FyZWEsCiAJICAgICAgIGhw
b3MsIGhwb3MgKyBsZW4sCiAJICAgICAgIERSQVdfTk9STUFMX1RFWFQsIDApOwogCisvKiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiogKi8KKworCiAgIC8qIEFkdmFuY2UgdGhlIG91dHB1dCBjdXJzb3IuICAq
LwogICB3LT5vdXRwdXRfY3Vyc29yLmhwb3MgKz0gbGVuOwogICB3LT5vdXRwdXRfY3Vyc29yLngg
Kz0gc2hpZnRfYnlfd2lkdGg7CkBAIC0yOTc3Miw5ICszNTAxMCwxOSBAQCBndWlfZml4X292ZXJs
YXBwaW5nX2FyZWEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKIAkg
IHdoaWxlIChpIDwgcm93LT51c2VkW2FyZWFdCiAJCSAmJiByb3ctPmdseXBoc1thcmVhXVtpXS5v
dmVybGFwc192ZXJ0aWNhbGx5X3ApOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog
TVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBpZiAoIW1jX3JlZHJhd19yb3cgKHcsIHctPmN1
cnJlbnRfbWF0cml4LCByb3csIGFyZWEsIHN0YXJ0X3gsIHN0YXJ0LCBpLAorICAgICAgICAgIGZh
bHNlLCBEUkFXX05PUk1BTF9URVhULCBHVUlfRklYX09WRVJMQVBQSU5HX0FSRUEpKQogCSAgZHJh
d19nbHlwaHMgKHcsIHN0YXJ0X3gsIHJvdywgYXJlYSwKIAkJICAgICAgIHN0YXJ0LCBpLAogCQkg
ICAgICAgRFJBV19OT1JNQUxfVEVYVCwgb3ZlcmxhcHMpOworCisvKiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiogKi8KKworCiAJfQogICAgICAgZWxzZQogCXsKQEAgLTMwMDI1LDEwICszNTI3MywyMCBAQCBk
aXNwbGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uLAogICBuZXdf
Y3Vyc29yX3R5cGUgPSBnZXRfd2luZG93X2N1cnNvcl90eXBlICh3LCBnbHlwaCwKIAkJCQkJICAg
ICZuZXdfY3Vyc29yX3dpZHRoLCAmYWN0aXZlX2N1cnNvcik7CiAKKworLyogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKICAgLyogSWYgY3Vyc29yIGlzIGN1
cnJlbnRseSBiZWluZyBzaG93biBhbmQgd2UgZG9uJ3Qgd2FudCBpdCB0byBiZSBvcgogICAgICBp
dCBpcyBpbiB0aGUgd3JvbmcgcGxhY2UsIG9yIHRoZSBjdXJzb3IgdHlwZSBpcyBub3Qgd2hhdCB3
ZSB3YW50LAogICAgICBlcmFzZSBpdC4gICovCiAgIGlmICh3LT5waHlzX2N1cnNvcl9vbl9wCisg
ICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMpKQor
ICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBmY192aXNpYmxlKSkK
KyAgICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfY29uZikpCisg
ICAgICAmJiB3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW01DX0NBQ0hFXSA9PSAwCisgICAgICAm
JiB3LT5tY19tYXRyaXguY3Vyc29yc191c2VkW0NIX0NBQ0hFXSA9PSAwCisgICAgICAmJiB3LT5t
Y19tYXRyaXguY3Vyc29yc191c2VkW0ZDX0NBQ0hFXSA9PSAwCiAgICAgICAmJiAoIW9uCiAJICB8
fCB3LT5waHlzX2N1cnNvci54ICE9IHgKIAkgIHx8IHctPnBoeXNfY3Vyc29yLnkgIT0geQpAQCAt
MzAwNDEsNiArMzUyOTksOSBAQCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93
ICp3LCBib29sIG9uLAogCSAgICAgICYmIG5ld19jdXJzb3Jfd2lkdGggIT0gdy0+cGh5c19jdXJz
b3Jfd2lkdGgpKSkKICAgICBlcmFzZV9waHlzX2N1cnNvciAodyk7CiAKKy8qICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiAqLworCisKICAgLyogRG9uJ3QgY2hlY2sgcGh5c19jdXJzb3Jfb25fcCBoZXJlIGJl
Y2F1c2UgdGhhdCBmbGFnIGlzIG9ubHkgc2V0CiAgICAgIHRvIGZhbHNlIGluIHNvbWUgY2FzZXMg
d2hlcmUgd2Uga25vdyB0aGF0IHRoZSBjdXJzb3IgaGFzIGJlZW4KICAgICAgY29tcGxldGVseSBl
cmFzZWQsIHRvIGF2b2lkIHRoZSBleHRyYSB3b3JrIG9mIGVyYXNpbmcgdGhlIGN1cnNvcgpAQCAt
MzAwNTksOSArMzUzMjAsMjMgQEAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAoc3RydWN0IHdpbmRv
dyAqdywgYm9vbCBvbiwKICAgICAgIHctPnBoeXNfY3Vyc29yLnZwb3MgPSB2cG9zOwogICAgIH0K
IAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwor
ICBpZiAoTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAg
ICAgICYmIE5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgZmNfdmlzaWJsZSkpCisg
ICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2NvbmYpKQorICAg
ICAgJiYgdy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtNQ19DQUNIRV0gPT0gMAorICAgICAgJiYg
dy0+bWNfbWF0cml4LmN1cnNvcnNfdXNlZFtDSF9DQUNIRV0gPT0gMAorICAgICAgJiYgdy0+bWNf
bWF0cml4LmN1cnNvcnNfdXNlZFtGQ19DQUNIRV0gPT0gMCkKICAgRlJBTUVfUklGIChmKS0+ZHJh
d193aW5kb3dfY3Vyc29yICh3LCBnbHlwaF9yb3csIHgsIHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3X2N1cnNvcl90eXBlLCBuZXdfY3Vyc29yX3dpZHRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uLCBhY3RpdmVfY3Vyc29yKTsKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAKQEAgLTMwMTU0LDcgKzM1NDI5LDE4
IEBAIGRyYXdfcm93X3dpdGhfbW91c2VfZmFjZSAoc3RydWN0IHdpbmRvdyAqdywgaW50IHN0YXJ0
X3gsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KICAg
aWYgKEZSQU1FX1dJTkRPV19QIChYRlJBTUUgKHctPmZyYW1lKSkpCiAgICAgeworCisKKy8qICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAgICBpZiAo
IW1jX3JlZHJhd19yb3cgKHcsIHctPmN1cnJlbnRfbWF0cml4LCByb3csIFRFWFRfQVJFQSwgc3Rh
cnRfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfaHBvcywgZW5kX2hwb3MsIGZh
bHNlLCBkcmF3LCBEUkFXX1JPV19XSVRIX01PVVNFX0ZBQ0UpKQogICAgICAgZHJhd19nbHlwaHMg
KHcsIHN0YXJ0X3gsIHJvdywgVEVYVF9BUkVBLCBzdGFydF9ocG9zLCBlbmRfaHBvcywgZHJhdywg
MCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYKQEAgLTMyMjE0LDExICszNzUwMCwyMyBAQCBleHBvc2VfYXJlYSAoc3RydWN0IHdp
bmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqcm93LCBjb25zdCBFbWFjc19SZWN0YW5nbGUgKnIs
CiAgIHN0cnVjdCBnbHlwaCAqbGFzdDsKICAgaW50IGZpcnN0X3gsIHN0YXJ0X3gsIHg7CiAKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKICAgaWYg
KGFyZWEgPT0gVEVYVF9BUkVBICYmIHJvdy0+ZmlsbF9saW5lX3ApCisgICAgeworICAgICAgaWYg
KCFtY19yZWRyYXdfcm93ICh3LCB3LT5jdXJyZW50X21hdHJpeCwgcm93LCBhcmVhLCAwLCAwLCBy
b3ctPnVzZWRbYXJlYV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBEUkFXX05P
Uk1BTF9URVhULCBFWFBPU0VfQVJFQV9PTkUpKQogICAgIC8qIElmIHJvdyBleHRlbmRzIGZhY2Ug
dG8gZW5kIG9mIGxpbmUgd3JpdGUgdGhlIHdob2xlIGxpbmUuICAqLwogICAgIGRyYXdfZ2x5cGhz
ICh3LCAwLCByb3csIGFyZWEsCiAJCSAwLCByb3ctPnVzZWRbYXJlYV0sCiAJCSBEUkFXX05PUk1B
TF9URVhULCAwKTsKKyAgICB9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgZWxz
ZQogICAgIHsKICAgICAgIC8qIFNldCBTVEFSVF9YIHRvIHRoZSB3aW5kb3ctcmVsYXRpdmUgc3Rh
cnQgcG9zaXRpb24gZm9yIGRyYXdpbmcgZ2x5cGhzIG9mCkBAIC0zMjI1MCwxMSArMzc1NDgsMjQg
QEAgZXhwb3NlX2FyZWEgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywg
Y29uc3QgRW1hY3NfUmVjdGFuZ2xlICpyLAogCSAgKytsYXN0OwogCX0KIAorCisvKiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKwogICAgICAgLyogUmVwYWlu
dC4gICovCi0gICAgICBpZiAobGFzdCA+IGZpcnN0KQorCisgICAgICAvKiBGbG9hdGluZyBmYWtl
IGN1cnNvcnMgd2lsbCBleGlzdCB3aGVuIChsYXN0ID09IGZpcnN0KS4gKi8KKyAgICAgIGlmICgh
bWNfcmVkcmF3X3JvdyAodywgdy0+Y3VycmVudF9tYXRyaXgsIHJvdywgYXJlYSwgZmlyc3RfeCAt
IHN0YXJ0X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IC0gcm93LT5nbHlwaHNb
YXJlYV0sIGxhc3QgLSByb3ctPmdseXBoc1thcmVhXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UsIERSQVdfTk9STUFMX1RFWFQsIEVYUE9TRV9BUkVBX1RXTykKKyAgICAgICAgICAm
JiBsYXN0ID4gZmlyc3QpCiAJZHJhd19nbHlwaHMgKHcsIGZpcnN0X3ggLSBzdGFydF94LCByb3cs
IGFyZWEsCiAJCSAgICAgZmlyc3QgLSByb3ctPmdseXBoc1thcmVhXSwgbGFzdCAtIHJvdy0+Z2x5
cGhzW2FyZWFdLAogCQkgICAgIERSQVdfTk9STUFMX1RFWFQsIDApOworCisvKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiogKi8KKworCiAgICAgfQogfQogCkBAIC0zMjI2OCwxMCArMzc1NzksMjIgQEAgZXhw
b3NlX2xpbmUgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgY29uc3Qg
RW1hY3NfUmVjdGFuZ2xlICpyKQogewogICBlYXNzZXJ0IChyb3ctPmVuYWJsZWRfcCk7CiAKKwor
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKICAgaWYg
KHJvdy0+bW9kZV9saW5lX3AgfHwgdy0+cHNldWRvX3dpbmRvd19wKQorICAgIHsKKyAgICAgIGlm
ICghbWNfcmVkcmF3X3JvdyAodywgdy0+Y3VycmVudF9tYXRyaXgsIHJvdywgVEVYVF9BUkVBLCAw
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPnVzZWRbVEVYVF9BUkVBXSwgZmFs
c2UsIERSQVdfTk9STUFMX1RFWFQsIEVYUE9TRV9MSU5FKSkKICAgICBkcmF3X2dseXBocyAodywg
MCwgcm93LCBURVhUX0FSRUEsCiAJCSAwLCByb3ctPnVzZWRbVEVYVF9BUkVBXSwKIAkJIERSQVdf
Tk9STUFMX1RFWFQsIDApOworICAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog
ICBlbHNlCiAgICAgewogICAgICAgaWYgKHJvdy0+dXNlZFtMRUZUX01BUkdJTl9BUkVBXSkKQEAg
LTMyODE5LDYgKzM4MTQyLDIyIEBAIGd1aV9pbnRlcnNlY3RfcmVjdGFuZ2xlcyAoY29uc3QgRW1h
Y3NfUmVjdGFuZ2xlICpyMSwgY29uc3QgRW1hY3NfUmVjdGFuZ2xlICpyMiwKIHZvaWQKIHN5bXNf
b2ZfeGRpc3AgKHZvaWQpCiB7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU
SVBMRS1DVVJTT1JTICovCisKKyAgZGVmc3ViciAoJlNtY19kdW1wX2dseXBoX3Jvdyk7CisKKyAg
ZGVmc3ViciAoJlNtY19kdW1wX2dseXBoX21hdHJpeCk7CisKKyAgZGVmc3ViciAoJlNtY19jdXJy
ZW50X2NvbHVtbik7CisKKyAgZGVmc3ViciAoJlNtY19zdGRlcnIpOworCisvKiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiogKi8KKworCiAgIFZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3RvciA9IFFuaWw7CiAg
IHN0YXRpY3BybyAoJlZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rvcik7CiAKZGlmZiAtLWdpdCBh
L3NyYy94dGVybS5jIGIvc3JjL3h0ZXJtLmMKaW5kZXggYzk2YWE3NC4uZDM0ZDgxZCAxMDA2NDQK
LS0tIGEvc3JjL3h0ZXJtLmMKKysrIGIvc3JjL3h0ZXJtLmMKQEAgLTEzMiw2ICsxMzIsOTA3IEBA
IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcv
bGljZW5zZXMvPi4gICovCiAjaW5jbHVkZSA8WDExL1hLQmxpYi5oPgogI2VuZGlmCiAKKworLyog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyNp
ZmRlZiBHTFlQSF9ERUJVRworc3RhdGljIHZvaWQgeF9jaGVja19mb250IChzdHJ1Y3QgZnJhbWUg
Kiwgc3RydWN0IGZvbnQgKik7CisjZW5kaWYKKworc3RhdGljIHZvaWQgeF9zZXRfbW9kZV9saW5l
X2ZhY2VfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfc2V0X21v
dXNlX2ZhY2VfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKik7CisKK3N0YXRpYyB2b2lkIHhfY2xp
cF90b19yb3cgKHN0cnVjdCB3aW5kb3cgKiwgc3RydWN0IGdseXBoX3JvdyAqLCBlbnVtIGdseXBo
X3Jvd19hcmVhLCBHQyk7CisKK3N0YXRpYyB2b2lkIHhfZHJhd19yZWN0YW5nbGUgKHN0cnVjdCBm
cmFtZSAqLCBHQywgaW50LCBpbnQsIGludCwgaW50KTsKKworc3RhdGljIHZvaWQgeF9yZXNldF9j
bGlwX3JlY3RhbmdsZXMgKHN0cnVjdCBmcmFtZSAqLCBHQyk7CisKK3N0YXRpYyB2b2lkIHhfZmls
bF9yZWN0YW5nbGUgKHN0cnVjdCBmcmFtZSAqLCBHQywgaW50LCBpbnQsIGludCwgaW50KTsKKwor
c3RhdGljIHZvaWQgeF9kcmF3X2dseXBoX3N0cmluZ19iZ19yZWN0IChzdHJ1Y3QgZ2x5cGhfc3Ry
aW5nICosIGludCwgaW50LCBpbnQsIGludCk7CisKK3N0YXRpYyB2b2lkIHhfc2V0X2NsaXBfcmVj
dGFuZ2xlcyAoc3RydWN0IGZyYW1lICosIEdDLCBYUmVjdGFuZ2xlICosIGludCk7CisKK3N0YXRp
YyB2b2lkIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGluZyAoc3RydWN0IGdseXBoX3N0cmluZyAq
KTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzdHJ1Y3Qg
Z2x5cGhfc3RyaW5nICosIGJvb2wpOworCitzdGF0aWMgdm9pZCB4X2RyYXdfZ2x5cGhfc3RyaW5n
X2JveCAoc3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9zZXRfZ2x5cGhf
c3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKiwgc3RydWN0IGds
eXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2ltYWdlX2dseXBoX3N0cmluZyAo
c3RydWN0IGdseXBoX3N0cmluZyAqKTsKKworc3RhdGljIHZvaWQgeF9kcmF3X2dseXBoX3N0cmlu
Z19mb3JlZ3JvdW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X2Ry
YXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n
ICopOworCitzdGF0aWMgdm9pZCB4X2RyYXdfZ2x5cGhsZXNzX2dseXBoX3N0cmluZ19mb3JlZ3Jv
dW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCitzdGF0aWMgdm9pZCB4X2RyYXdfdW5kZXJ3
YXZlIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICopOworCisvKiBEZWNpZGUgaWYgY29sb3IgbmFtZWQg
Q09MT1JfTkFNRSBpcyB2YWxpZCBmb3IgdXNlIG9uIGZyYW1lIEYuICBJZgorICAgc28sIHJldHVy
biB0aGUgUkdCIHZhbHVlcyBpbiBDT0xPUi4gIElmIEFMTE9DX1AsCisgICBhbGxvY2F0ZSB0aGUg
Y29sb3IuICBWYWx1ZSBpcyBmYWxzZSBpZiBDT0xPUl9OQU1FIGlzIGludmFsaWQsIG9yCisgICBu
byBjb2xvciBjb3VsZCBiZSBhbGxvY2F0ZWQuICAqLworYm9vbAorbWNfeF9kZWZpbmVkX2NvbG9y
IChzdHJ1Y3QgZnJhbWUgKmYsIGNvbnN0IGNoYXIgKmNvbG9yX25hbWUsIFhDb2xvciAqY29sb3Is
IGJvb2wgYWxsb2NfcCkKK3sKKyAgYm9vbCBzdWNjZXNzX3AgPSBmYWxzZTsKKyAgQ29sb3JtYXAg
Y21hcCA9IEZSQU1FX1hfQ09MT1JNQVAgKGYpOworICBibG9ja19pbnB1dCAoKTsKKyNpZmRlZiBV
U0VfR1RLCisgIHN1Y2Nlc3NfcCA9IHhnX2NoZWNrX3NwZWNpYWxfY29sb3JzIChmLCBjb2xvcl9u
YW1lLCBjb2xvcik7CisjZW5kaWYKKyAgaWYgKCFzdWNjZXNzX3ApCisgICAgc3VjY2Vzc19wID0g
eF9wYXJzZV9jb2xvciAoZiwgY29sb3JfbmFtZSwgY29sb3IpICE9IDA7CisgIGlmIChzdWNjZXNz
X3AgJiYgYWxsb2NfcCkKKyAgICBzdWNjZXNzX3AgPSB4X2FsbG9jX25lYXJlc3RfY29sb3IgKGYs
IGNtYXAsIGNvbG9yKTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIHN1Y2Nlc3NfcDsK
K30KKwordm9pZAorbWNfeHdfY29sb3JfdmFsdWVzIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09i
amVjdCBjb2xvciwgc3RydWN0IG1jX1JHQiAqbHNsKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9y
KTsKKyAgWENvbG9yIHRlbXA7CisgIHN0cnVjdCBmcmFtZSAqZiA9IGRlY29kZV93aW5kb3dfc3lz
dGVtX2ZyYW1lICh3LT5mcmFtZSk7CisgIGlmIChtY194X2RlZmluZWRfY29sb3IgKGYsIFNTREFU
QSAoY29sb3IpLCAmdGVtcCwgZmFsc2UpKQorICAgIHsKKyAgICAgIGxzbC0+cmVkID0gdGVtcC5y
ZWQgLyA2NTUzNS4wOworICAgICAgbHNsLT5ncmVlbiA9IHRlbXAuZ3JlZW4gLyA2NTUzNS4wOwor
ICAgICAgbHNsLT5ibHVlID0gdGVtcC5ibHVlIC8gNjU1MzUuMDsKKyAgICB9CisgIGVsc2UKKyAg
ICB7CisgICAgICBsc2wtPnJlZCA9IC0xLjA7CisgICAgICBsc2wtPmdyZWVuID0gLTEuMDsKKyAg
ICAgIGxzbC0+Ymx1ZSA9IC0xLjA7CisgICAgfQorfQorCisvKiBTZXQgUy0+Z2MgdG8gYSBzdWl0
YWJsZSBHQyBmb3IgZHJhd2luZyBnbHlwaCBzdHJpbmcgUyBpbiBjdXJzb3IgZmFjZS4gKi8KK3N0
YXRpYyB2b2lkCittY194X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIGJv
b2wgY3Vyc29yX2djX3ApCit7CisgIGlmIChjdXJzb3JfZ2NfcCkKKyAgICB7CisgICAgICBzLT5n
YyA9IHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYzsKKyAgICAgIHJldHVybjsKKyAgICB9
CisgIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisgICAgICAmJiBzLT5mYWNlLT5i
YWNrZ3JvdW5kID09IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKHMtPmYpCisgICAgICAmJiBzLT5m
YWNlLT5mb3JlZ3JvdW5kID09IEZSQU1FX0ZPUkVHUk9VTkRfUElYRUwgKHMtPmYpCisgICAgICAm
JiAhcy0+Y21wKQorICAgIHMtPmdjID0gcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djOwor
ICBlbHNlCisgICAgeworICAgICAgLyogQ3Vyc29yIG9uIG5vbi1kZWZhdWx0IGZhY2U6IG11c3Qg
bWVyZ2UuICovCisgICAgICBYR0NWYWx1ZXMgeGdjdjsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbWFz
azsKKyAgICAgIHhnY3YuYmFja2dyb3VuZCA9IHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9w
aXhlbDsKKyAgICAgIHhnY3YuZm9yZWdyb3VuZCA9IHMtPmZhY2UtPmJhY2tncm91bmQ7CisgICAg
ICAvKiBJZiB0aGUgZ2x5cGggd291bGQgYmUgaW52aXNpYmxlLCB0cnkgYSBkaWZmZXJlbnQgZm9y
ZWdyb3VuZC4gKi8KKyAgICAgIGlmICh4Z2N2LmZvcmVncm91bmQgPT0geGdjdi5iYWNrZ3JvdW5k
KQorICAgICAgICB4Z2N2LmZvcmVncm91bmQgPSBzLT5mYWNlLT5mb3JlZ3JvdW5kOworICAgICAg
aWYgKHhnY3YuZm9yZWdyb3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgIHhnY3YuZm9y
ZWdyb3VuZCA9IHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9mb3JlZ3JvdW5kX3BpeGVsOwor
ICAgICAgaWYgKHhnY3YuZm9yZWdyb3VuZCA9PSB4Z2N2LmJhY2tncm91bmQpCisgICAgICAgIHhn
Y3YuZm9yZWdyb3VuZCA9IHMtPmZhY2UtPmZvcmVncm91bmQ7CisgICAgICAvKiBNYWtlIHN1cmUg
dGhlIGN1cnNvciBpcyBkaXN0aW5jdCBmcm9tIHRleHQgaW4gdGhpcyBmYWNlLiAqLworICAgICAg
aWYgKHhnY3YuYmFja2dyb3VuZCA9PSBzLT5mYWNlLT5iYWNrZ3JvdW5kCisgICAgICAgICAgJiYg
eGdjdi5mb3JlZ3JvdW5kID09IHMtPmZhY2UtPmZvcmVncm91bmQpCisgICAgICAgIHsKKyAgICAg
ICAgICB4Z2N2LmJhY2tncm91bmQgPSBzLT5mYWNlLT5mb3JlZ3JvdW5kOworICAgICAgICAgIHhn
Y3YuZm9yZWdyb3VuZCA9IHMtPmZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgIH0KKyAgICAgIElG
X0RFQlVHICh4X2NoZWNrX2ZvbnQgKHMtPmYsIHMtPmZvbnQpKTsKKyAgICAgIHhnY3YuZ3JhcGhp
Y3NfZXhwb3N1cmVzID0gRmFsc2U7CisgICAgICBtYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NCYWNr
Z3JvdW5kIHwgR0NHcmFwaGljc0V4cG9zdXJlczsKKyAgICAgIGlmIChGUkFNRV9ESVNQTEFZX0lO
Rk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNvcl9nYykKKyAgICAgICAgWENoYW5nZUdDIChGUkFNRV9Y
X0RJU1BMQVkgKHMtPmYpLCBGUkFNRV9ESVNQTEFZX0lORk8gKHMtPmYpLT5zY3JhdGNoX2N1cnNv
cl9nYywKKyAgICAgICAgICAgICAgICAgICBtYXNrLCAmeGdjdik7CisgICAgICBlbHNlCisgICAg
ICAgIEZSQU1FX0RJU1BMQVlfSU5GTyAocy0+ZiktPnNjcmF0Y2hfY3Vyc29yX2djCisgICAgICAg
ICAgPSBYQ3JlYXRlR0MgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIEZSQU1FX1hfV0lORE9XIChz
LT5mKSwgbWFzaywgJnhnY3YpOworICAgICAgcy0+Z2MgPSBGUkFNRV9ESVNQTEFZX0lORk8gKHMt
PmYpLT5zY3JhdGNoX2N1cnNvcl9nYzsKKyAgICB9Cit9CisKKy8qIFNldCBTLT5nYyBvZiBnbHlw
aCBzdHJpbmcgUyBmb3IgZHJhd2luZyB0aGF0IGdseXBoIHN0cmluZy4gIFNldAorICAgUy0+c3Rp
cHBsZWRfcCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSBmYWNlIG9mIFMgaGFzIGEgc3RpcHBs
ZSBwYXR0ZXJuLiAqLworc3RhdGljIHZvaWQKK21jX3hfc2V0X2dseXBoX3N0cmluZ19nYyAoc3Ry
dWN0IGdseXBoX3N0cmluZyAqcywgYm9vbCBjdXJzb3JfZ2NfcCkKK3sKKyAgcHJlcGFyZV9mYWNl
X2Zvcl9kaXNwbGF5IChzLT5mLCBzLT5mYWNlKTsKKyAgaWYgKHMtPmhsID09IERSQVdfTk9STUFM
X1RFWFQpCisgICAgeworICAgICAgcy0+Z2MgPSBzLT5mYWNlLT5nYzsKKyAgICAgIHMtPnN0aXBw
bGVkX3AgPSBzLT5mYWNlLT5zdGlwcGxlICE9IDA7CisgICAgfQorICBlbHNlIGlmIChzLT5obCA9
PSBEUkFXX0lOVkVSU0VfVklERU8pCisgICAgeworICAgICAgeF9zZXRfbW9kZV9saW5lX2ZhY2Vf
Z2MgKHMpOworICAgICAgcy0+c3RpcHBsZWRfcCA9IHMtPmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAg
ICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfQ1VSU09SKQorICAgIHsKKyAgICAgIG1jX3hf
c2V0X2N1cnNvcl9nYyAocywgY3Vyc29yX2djX3ApOworICAgICAgcy0+c3RpcHBsZWRfcCA9IGZh
bHNlOworICAgIH0KKyAgZWxzZSBpZiAocy0+aGwgPT0gRFJBV19NT1VTRV9GQUNFKQorICAgIHsK
KyAgICAgIHhfc2V0X21vdXNlX2ZhY2VfZ2MgKHMpOworICAgICAgcy0+c3RpcHBsZWRfcCA9IHMt
PmZhY2UtPnN0aXBwbGUgIT0gMDsKKyAgICB9CisgIGVsc2UgaWYgKHMtPmhsID09IERSQVdfSU1B
R0VfUkFJU0VECisgICAgICAgICAgIHx8IHMtPmhsID09IERSQVdfSU1BR0VfU1VOS0VOKQorICAg
IHsKKyAgICAgIHMtPmdjID0gcy0+ZmFjZS0+Z2M7CisgICAgICBzLT5zdGlwcGxlZF9wID0gcy0+
ZmFjZS0+c3RpcHBsZSAhPSAwOworICAgIH0KKyAgZWxzZQorICAgIGVtYWNzX2Fib3J0ICgpOwor
ICAvKiBHQyBtdXN0IGhhdmUgYmVlbiBzZXQuICovCisgIGVhc3NlcnQgKHMtPmdjICE9IDApOwor
fQorCisvKiBEcmF3IGEgaG9sbG93IGJveCBjdXJzb3Igb24gd2luZG93IFcgaW4gZ2x5cGggcm93
IFJPVy4gKi8KK3N0YXRpYyB2b2lkCittY194X2RyYXdfaG9sbG93X2N1cnNvciAoc3RydWN0IHdp
bmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy
b3csCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGludCBm
eSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoKQoreworICBzdHJ1Y3QgZnJhbWUg
KmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8g
KmRweWluZm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKGYpOworICBEaXNwbGF5ICpkcHkgPSBGUkFN
RV9YX0RJU1BMQVkgKGYpOworICBYR0NWYWx1ZXMgeGdjdjsKKyAgR0MgZ2M7CisgIC8qIEdldCB0
aGUgZ2x5cGggdGhlIGN1cnNvciBpcyBvbi4gIElmIHdlIGNhbid0IHRlbGwgYmVjYXVzZQorICAg
ICB0aGUgY3VycmVudCBtYXRyaXggaXMgaW52YWxpZCBvciBzdWNoLCBnaXZlIHVwLiAqLworICBz
dHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaCA9IG1jX2dldF9jdXJzb3JfZ2x5cGggKHcsIG1hdHJp
eCwgcm93LCBocG9zLCB2cG9zKTsKKyAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgIHJl
dHVybjsKKyAgLyogVGhlIGZvcmVncm91bmQgb2YgY3Vyc29yX2djIGlzIHR5cGljYWxseSB0aGUg
c2FtZSBhcyB0aGUgbm9ybWFsCisgICAgIGJhY2tncm91bmQgY29sb3IsIHdoaWNoIGNhbiBjYXVz
ZSB0aGUgY3Vyc29yIGJveCB0byBiZSBpbnZpc2libGUuICovCisgIHhnY3YuZm9yZWdyb3VuZCA9
IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbDsKKyAgaWYgKGRweWluZm8tPnNjcmF0Y2hf
Y3Vyc29yX2djKQorICAgIFhDaGFuZ2VHQyAoZHB5LCBkcHlpbmZvLT5zY3JhdGNoX2N1cnNvcl9n
YywgR0NGb3JlZ3JvdW5kLCAmeGdjdik7CisgIGVsc2UKKyAgICBkcHlpbmZvLT5zY3JhdGNoX2N1
cnNvcl9nYyA9IFhDcmVhdGVHQyAoZHB5LCBGUkFNRV9YX1dJTkRPVyAoZiksCisgICAgICAgICAg
ICAgIEdDRm9yZWdyb3VuZCwgJnhnY3YpOworICBnYyA9IGRweWluZm8tPnNjcmF0Y2hfY3Vyc29y
X2djOworICAvKiBTZXQgY2xpcHBpbmcsIGRyYXcgdGhlIHJlY3RhbmdsZSwgYW5kIHJlc2V0IGNs
aXBwaW5nIGFnYWluLiAqLworICB4X2NsaXBfdG9fcm93ICh3LCByb3csIFRFWFRfQVJFQSwgZ2Mp
OworICAvKiBgeF9kcmF3X3JlY3RhbmdsZScgbmVlZHMgYSBXRCBhbmQgSCB0aGF0IGFyZSAxIHBp
eGVsIGxlc3MuICovCisgIGludCByeCA9IGZ4OworICBpbnQgcnkgPSBmeTsKKyAgaW50IHJ3ID0g
d2QgLSAxOworICBpbnQgcmggPSBoIC0gMTsKKyAgeF9kcmF3X3JlY3RhbmdsZSAoZiwgZ2MsIHJ4
LCByeSwgcncsIHJoKTsKKy8qCisgIGZwcmludGYgKHN0ZGVyciwgIm1jX3hfZHJhd19ob2xsb3df
Y3Vyc29yOiAgcnggKCVkKSB8IHJ5ICglZCkgfCBydyAoJWQpIHwgcmggKCVkKVxuIiwKKyAgICAg
ICAgICAgICAgICAgICAgcngsIHJ5LCBydywgcmgpOworKi8KKyAgeF9yZXNldF9jbGlwX3JlY3Rh
bmdsZXMgKGYsIGdjKTsKK30KKworLyogRHJhdyBhIGJhciBjdXJzb3Igb24gd2luZG93IFcgaW4g
Z2x5cGggcm93IFJPVy4gKi8KK3N0YXRpYyB2b2lkCittY194X2RyYXdfYmFyX2N1cnNvciAoc3Ry
dWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX21hdHJpeCAqbWF0cml4LCBzdHJ1Y3QgZ2x5cGhf
cm93ICpyb3csCisgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCBmeCwgaW50IHksIGlu
dCBmeSwgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgd2QsIGludCBoLAorICAgICAgICAgICAgICAg
ICAgICAgIGludCB3aWR0aCwgZW51bSBtY19jdXJzb3JfdHlwZSBraW5kLCBib29sIGN1cnNvcl9n
Y19pbnZpc2libGVfb2theV9wKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZy
YW1lKTsKKyAgLyogSWYgY3Vyc29yIGlzIG91dCBvZiBib3VuZHMsIGRvbid0IGRyYXcgZ2FyYmFn
ZS4gIFRoaXMgY2FuIGhhcHBlbgorICAgICBpbiBtaW5pLWJ1ZmZlciB3aW5kb3dzIHdoZW4gc3dp
dGNoaW5nIGJldHdlZW4gZWNobyBhcmVhIGdseXBocworICAgICBhbmQgbWluaS1idWZmZXIuICov
CisgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAodywg
bWF0cml4LCByb3csIGhwb3MsIHZwb3MpOworICBpZiAoY3Vyc29yX2dseXBoID09IE5VTEwpCisg
ICAgcmV0dXJuOworICAvKiBFeHBlcmltZW50YWwgYXZvaWRhbmNlIG9mIGN1cnNvciBvbiB4d2lk
Z2V0LiAqLworICBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09IFhXSURHRVRfR0xZUEgpCisgICAg
cmV0dXJuOworICAvKiBJZiBvbiBhbiBpbWFnZSwgZHJhdyBsaWtlIGEgbm9ybWFsIGN1cnNvci4g
IFRoYXQncyB1c3VhbGx5IGJldHRlcgorICAgICB2aXNpYmxlIHRoYW4gZHJhd2luZyBhIGJhciwg
ZXNwLiBpZiB0aGUgaW1hZ2UgaXMgbGFyZ2Ugc28gdGhhdAorICAgICB0aGUgYmFyIG1pZ2h0IG5v
dCBiZSBpbiB0aGUgd2luZG93LiAqLworICBpZiAoY3Vyc29yX2dseXBoLT50eXBlID09IElNQUdF
X0dMWVBIKQorICAgIHsKKyAgICAgIHN0cnVjdCBtY19SR0IgbHNsID0gey5yZWQgPSAtMS4wLCAu
Z3JlZW4gPSAtMS4wLCAuYmx1ZSA9IC0xLjB9OworICAgICAgZW51bSBtY19mbGF2b3IgZ2x5cGhf
Zmxhdm9yID0gTk9fRkxBVk9SOworICAgICAgZW51bSBtY19jdXJzb3JfdHlwZSBjdXJzb3JfdHlw
ZSA9IE1DX0hPTExPV19CT1g7CisgICAgICBib29sIGFjdGl2ZV9wID0gZmFsc2U7CisgICAgICBi
b29sIGN1cnNvcl9nY19wID0gZmFsc2U7CisgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywg
bWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2x5cGhfZmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9w
LCBjdXJzb3JfZ2NfcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgRGlzcGxheSAqZHB5
ID0gRlJBTUVfWF9ESVNQTEFZIChmKTsKKyAgICAgIFdpbmRvdyB3aW5kb3cgPSBGUkFNRV9YX1dJ
TkRPVyAoZik7CisgICAgICBHQyBnYyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZiktPnNjcmF0Y2hf
Y3Vyc29yX2djOworICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gR0NGb3JlZ3JvdW5kIHwgR0NC
YWNrZ3JvdW5kIHwgR0NHcmFwaGljc0V4cG9zdXJlczsKKyAgICAgIHN0cnVjdCBmYWNlICpmYWNl
ID0gRkFDRV9GUk9NX0lEIChmLCBjdXJzb3JfZ2x5cGgtPmZhY2VfaWQpOworICAgICAgWEdDVmFs
dWVzIHhnY3Y7CisgICAgICAvKiBJZiB0aGUgZ2x5cGgncyBiYWNrZ3JvdW5kIGVxdWFscyB0aGUg
Y29sb3Igd2Ugbm9ybWFsbHkgZHJhdworICAgdGhlIGJhcnMgY3Vyc29yIGluLCB0aGUgYmFyIGN1
cnNvciBpbiBpdHMgbm9ybWFsIGNvbG9yIGlzCisgICBpbnZpc2libGUuICBVc2UgdGhlIGdseXBo
J3MgZm9yZWdyb3VuZCBjb2xvciBpbnN0ZWFkIGluIHRoaXMKKyAgIGNhc2UsIG9uIHRoZSBhc3N1
bXB0aW9uIHRoYXQgdGhlIGdseXBoJ3MgY29sb3JzIGFyZSBjaG9zZW4gc28KKyAgIHRoYXQgdGhl
IGdseXBoIGlzIGxlZ2libGUuICovCisgICAgICBpZiAoZmFjZS0+YmFja2dyb3VuZCA9PSBmLT5v
dXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwKKyAgICAgICAgICAmJiAhY3Vyc29yX2djX2ludmlz
aWJsZV9va2F5X3ApCisgICAgICAgIHhnY3YuYmFja2dyb3VuZCA9IHhnY3YuZm9yZWdyb3VuZCA9
IGZhY2UtPmZvcmVncm91bmQ7CisgICAgICBlbHNlCisgICAgICAgIHhnY3YuYmFja2dyb3VuZCA9
IHhnY3YuZm9yZWdyb3VuZCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbDsKKyAgICAg
IHhnY3YuZ3JhcGhpY3NfZXhwb3N1cmVzID0gRmFsc2U7CisgICAgICBpZiAoZ2MpCisgICAgICAg
IFhDaGFuZ2VHQyAoZHB5LCBnYywgbWFzaywgJnhnY3YpOworICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgZ2MgPSBYQ3JlYXRlR0MgKGRweSwgd2luZG93LCBtYXNrLCAmeGdjdik7Cisg
ICAgICAgICAgRlJBTUVfRElTUExBWV9JTkZPIChmKS0+c2NyYXRjaF9jdXJzb3JfZ2MgPSBnYzsK
KyAgICAgICAgfQorICAgICAgeF9jbGlwX3RvX3JvdyAodywgcm93LCBURVhUX0FSRUEsIGdjKTsK
KyAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKGYsIGdjLCBmeCwgZnksIHdkLCBoKTsKKyAgICAgIHhf
cmVzZXRfY2xpcF9yZWN0YW5nbGVzIChmLCBnYyk7CisgICAgfQorfQorCisvKiBSSUY6IERyYXcg
Y3Vyc29yIG9uIHdpbmRvdyBXLiAqLworc3RhdGljIHZvaWQKK21jX3hfZHJhd193aW5kb3dfY3Vy
c29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIHN0cnVj
dCBnbHlwaF9yb3cgKnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IGZ4
LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50IHZwb3MsIGludCB3ZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaCwgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfY3Vyc29yX3R5
cGUgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnNvcl93aWR0
aCwgZW51bSBtY19mbGF2b3IgZ2x5cGhfZmxhdm9yLCBib29sIG9uX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhY3RpdmVfcCkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1F
IChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgLyogVGhlIGZyaW5nZSBiaXRtYXBzIGFyZSBwcmVzZW50
bHkgaGFuZGxlZCBlbHNld2hlcmUsIGJ1dCBjb3VsZCBzb21lZGF5CisgIGJlIG1hbmFnZWQgKGlu
IHBhcnQpIGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlLiAqLworICBpZiAob25fcCkKKyAgICB7Cisg
ICAgICBpZiAocm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wCisgICAgICAgICAgJiYgKHJv
dy0+cmV2ZXJzZWRfcAorICAgICAgICAgICAgICA/IChocG9zIDwgMCkKKyAgICAgICAgICAgICAg
OiAoaHBvcyA+PSByb3ctPnVzZWRbVEVYVF9BUkVBXSkpKQorICAgICAgICB7CisgICAgICAgICAg
cm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSB0cnVlOworICAgICAgICAgIG1jX2RyYXdfZnJpbmdl
X2JpdG1hcCAodywgcm93LCByb3ctPnJldmVyc2VkX3AsIGN1cnNvcl90eXBlKTsKKyAgICAgICAg
fQorICAgICAgZWxzZQorICAgICAgICB7CisgIENvbG9ybWFwIGNtYXAgPSBGUkFNRV9YX0NPTE9S
TUFQIChmKTsKKyAgdW5zaWduZWQgbG9uZyBvcmlnaW5hbF9jdXJzb3JfcGl4ZWwgPSBmLT5vdXRw
dXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CisgIC8qIHh0ZXJtLmMveHRlcm0uaCB1c2UgR0M7IHdo
ZXJlYXMsIHczMnRlcm0uYy93MzJ0ZXJtLmggdXNlIFhHQ1ZhbHVlcyAqICovCisgIFhHQ1ZhbHVl
cyB4Z2N2OworICBYR2V0R0NWYWx1ZXMgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9k
YXRhLngtPmN1cnNvcl9nYywgR0NGb3JlZ3JvdW5kLCAmeGdjdik7CisgIFhHZXRHQ1ZhbHVlcyAo
RlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBHQ0JhY2tn
cm91bmQsICZ4Z2N2KTsKKyAgWENvbG9yIGNvbG9yOworICBjb2xvci5yZWQgPSBtaW4gKDY1NTM1
LCA2NTUzNSAqIGxzbC5yZWQpOworICBjb2xvci5ncmVlbiA9IG1pbiAoNjU1MzUsIDY1NTM1ICog
bHNsLmdyZWVuKTsKKyAgY29sb3IuYmx1ZSA9IG1pbiAoNjU1MzUsIDY1NTM1ICogbHNsLmJsdWUp
OworICAvKiBgeF9hbGxvY19uZWFyZXN0X2NvbG9yJyBzZXRzIHRoZSBgY29sb3IucGl4ZWxgLiAq
LworICB4X2FsbG9jX25lYXJlc3RfY29sb3IgKGYsIGNtYXAsICZjb2xvcik7CisgIHN3aXRjaCAo
Y3Vyc29yX3R5cGUpCisgIHsKKyAgICBjYXNlIE1DX05PX0ZSSU5HRV9CSVRNQVA6CisgICAgICBi
cmVhazsKKyAgICBjYXNlIE1DX05PX0NVUlNPUjoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTUNf
UklHSFRfRlJJTkdFX0JJVE1BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTUNfTEVGVF9GUklO
R0VfQklUTUFQOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNQ19GUkFNRURfQk9YOgorICAgIHsK
KyAgICAgIHN0cnVjdCBnbHlwaCAqY3Vyc29yX2dseXBoID0gbWNfZ2V0X2N1cnNvcl9nbHlwaCAo
dywgbWF0cml4LCByb3csIGhwb3MsIHZwb3MpOworICAgICAgaWYgKGN1cnNvcl9nbHlwaCA9PSBO
VUxMKQorICAgICAgICByZXR1cm47CisgICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAo
dy0+Y29udGVudHMpOworICAgICAgYm9vbCByZWdpb25fYWN0aXZlX3AgPSAoIU5JTFAgKFZ0cmFu
c2llbnRfbWFya19tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAg
KEJWQVIgKGIsIG1hcmtfYWN0aXZlKSkpOworICAgICAgcHRyZGlmZl90IHJlZ2lvbl9iZWcgPSAo
cmVnaW9uX2FjdGl2ZV9wKSA/IG1jX3JlZ2lvbl9saW1pdCAoMSkgOiAtMTsKKyAgICAgIHB0cmRp
ZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBtY19yZWdpb25fbGltaXQgKDAp
IDogLTE7CisgICAgICBpZiAoY3Vyc29yX2dseXBoLT50eXBlICE9IElNQUdFX0dMWVBIICYmIGxz
bC5yZWQgPj0gMCAmJiBsc2wuZ3JlZW4gPj0gMCAmJiBsc2wuYmx1ZSA+PSAwKQorICAgICAgICB7
CisgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJz
b3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21h
a2VfZ2MnIGluIHhmbnMuYy4gKi8KKyAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAg
ICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hh
cnBvcyA9PSByZWdpb25fYmVnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZh
Y2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFj
ZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWF0LXJlZ2lvbi1wcmUtenYtZmFj
ZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVn
aW9uX2JlZ19mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdf
ZmFjZV9pZCk7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2Vf
aWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29y
LXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93
X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOwor
ICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0
cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQpOwor
ICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0
cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZS0+Zm9y
ZWdyb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0
aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAg
ICAgICAmJiBjdXJzb3JfZ2x5cGgtPmNoYXJwb3MgPT0gcmVnaW9uX2VuZCkKKyAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9l
bmRfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr
ZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAg
IHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZSA9IEZBQ0VfRlJPTV9J
RCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2VfaWQpOworICAgICAgICAgICAgICAg
IGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAo
dywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOwor
ICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZS
T01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgWFNldEZv
cmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9n
YywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICBYU2V0
QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29y
X2djLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9lbmRfZmFjZS0+YmFja2dyb3VuZCk7CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAgICAg
ICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICYmIGN1
cnNvcl9nbHlwaC0+Y2hhcnBvcyA+IHJlZ2lvbl9iZWcKKyAgICAgICAgICAgICAgICAgICAgICAg
JiYgY3Vyc29yX2dseXBoLT5jaGFycG9zIDwgcmVnaW9uX2VuZCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0
d2Vlbl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m
YWtlLWN1cnNvci1pbi1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlID0gRkFD
RV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZXR3ZWVuX2ZhY2VfaWQpOworICAg
ICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1
cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZh
Y2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2
ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOworICAgICAg
ICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1
dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAg
ICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5v
dXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFj
ZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGFjdGl2ZV9wKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBl
bnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcs
IGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0Vf
RlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgICAg
WFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1
cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRh
LngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY3RpdmVfcCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xs
b3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIr
LXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFDRV9G
Uk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngt
PmN1cnNvcl9nYywgaG9sbG93X2luYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAg
ICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRw
dXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19pbmFjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAg
ICAgIC8qIEZvcmNlIGBtY194X3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2Rh
dGEueC0+Y3Vyc29yX2djJy4gKi8KKyAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsK
KyAgICAgICAgICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VS
U09SLCB4LCBocG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdseXBoX2ZsYXZvciwgY3Vyc29yX3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOwor
ICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRf
ZGF0YS54LT5jdXJzb3JfZ2MsIHhnY3YuZm9yZWdyb3VuZCk7CisgICAgICAgICAgWFNldEJhY2tn
cm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywg
eGdjdi5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAg
IC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4g
Ki8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBjb2xvci5waXhl
bDsKKyAgICAgICAgICBtY194X2RyYXdfaG9sbG93X2N1cnNvciAodywgbWF0cml4LCByb3csIHgs
IGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAgIGYtPm91dHB1dF9kYXRh
LngtPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChjdXJzb3JfZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEggJiYgbHNsLnJl
ZCA+PSAwICYmIGxzbC5ncmVlbiA+PSAwICYmIGxzbC5ibHVlID49IDApCisgICAgICAgICAgewor
ICAgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJz
b3JfcGl4ZWwnLiAqLworICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVs
ID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgICBtY194X2RyYXdfaG9sbG93X2N1cnNvciAodywg
bWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAg
ICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVs
OworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBi
eSBib3Jyb3dpbmcgdGhlCisgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9n
YycgaW4geGZucy5jLiAqLworICAgICAgICAgICAgICBpZiAocmVnaW9uX2FjdGl2ZV9wCisgICAg
ICAgICAgICAgICAgICAmJiBhY3RpdmVfcAorICAgICAgICAgICAgICAgICAgJiYgY3Vyc29yX2ds
eXBoLT5jaGFycG9zID09IHJlZ2lvbl9iZWcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlX2lkID0g
bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1hdC1y
ZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj
ZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fYmVnX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxv
d19hY3RpdmVfcmVnaW9uX2JlZ19mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIGVudW0gZmFj
ZV9pZCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50
ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAg
ICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAo
ZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3Jv
dW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhv
bGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgICBYU2V0QmFj
a2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2dj
LCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9iZWdfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGFjdGl2ZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgY3Vyc29yX2dseXBoLT5jaGFycG9zID09IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3JlZ2lv
bl9lbmRfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwt
ZmFrZS1jdXJzb3ItYXQtcmVnaW9uLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2FjdGl2ZV9yZWdpb25fZW5kX2ZhY2UgPSBGQUNF
X0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNlX2lkKTsKKyAgICAgICAg
ICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9u
YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItcHJlLXp2LWZhY2Ui
KSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZl
X2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9pZCk7CisgICAgICAg
ICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRw
dXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdyb3VuZCk7Cisg
ICAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBm
LT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfcmVnaW9uX2VuZF9mYWNl
LT5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWN0
aXZlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlwaC0+Y2hhcnBv
cyA+IHJlZ2lvbl9iZWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGN1cnNvcl9nbHlw
aC0+Y2hhcnBvcyA8IHJlZ2lvbl9lbmQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9m
YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1
cnNvci1pbi1yZWdpb24tcHJlLXp2LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGZhY2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2JldHdlZW5fZmFjZSA9IEZBQ0Vf
RlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fYmV0d2Vlbl9mYWNlX2lkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNlX2lkID0gbG9v
a3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNvci1wcmUtenYt
ZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93
X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQpOwor
ICAgICAgICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYp
LCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGhvbGxvd19hY3RpdmVfZmFjZS0+Zm9yZWdy
b3VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElT
UExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9yZWdp
b25fYmV0d2Vlbl9mYWNlLT5mb3JlZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3RpdmVfcCkKKyAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9m
YWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1
cnNvci1wcmUtenYtZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBmYWNlICpob2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3Rp
dmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJB
TUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0
aXZlX2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgICAgICAgICAgWFNldEJhY2tn
cm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywg
aG9sbG93X2FjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9s
bG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgi
Ky1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZlLXByZS16di1mYWNlIiksIHRydWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9sbG93X2luYWN0aXZlX2ZhY2UgPSBG
QUNFX0ZST01fSUQgKGYsIGhvbGxvd19pbmFjdGl2ZV9mYWNlX2lkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1
dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2luYWN0aXZlX2ZhY2UtPmZvcmVncm91bmQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9ESVNQTEFZ
IChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfaW5hY3RpdmVfZmFjZS0+
YmFja2dyb3VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJs
b2NrX2lucHV0ICgpOworICAgICAgICAgICAgICAvKiBGb3JjZSBgbWNfeF9zZXRfY3Vyc29yX2dj
JyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYycuICovCisgICAgICAgICAg
ICAgIGJvb2wgY3Vyc29yX2djX3AgPSB0cnVlOworICAgICAgICAgICAgICBtY19kcmF3X2N1cnNv
cl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNsLCBnbHlwaF9mbGF2b3IsIGN1cnNv
cl90eXBlLCB3ZCwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJ
U1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIHhnY3YuZm9yZWdyb3VuZCk7
CisgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5v
dXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIHhnY3YuYmFja2dyb3VuZCk7CisgICAgICAgICAgICAg
IHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgICAgIC8qIERyYXcgdGhlIGZyYW1lIGFyb3Vu
ZCB0aGUgYm94LiAqLworICAgICAgICAgICAgICBtY194X2RyYXdfaG9sbG93X2N1cnNvciAodywg
bWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgpOworICAgICAgICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTUNfSE9MTE9XX0JPWDoKKyAgICB7
CisgICAgICBpZiAobHNsLnJlZCA+PSAwICYmIGxzbC5ncmVlbiA+PSAwICYmIGxzbC5ibHVlID49
IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1
dF9kYXRhLngtPmN1cnNvcl9waXhlbCcuICovCisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+
Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgbWNfeF9kcmF3X2hvbGxvd19j
dXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLCBoKTsK
KyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJz
b3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIG1jX3hfZHJhd19o
b2xsb3dfY3Vyc29yICh3LCBtYXRyaXgsIHJvdywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCB3
ZCwgaCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNQ19GSUxMRURfQk9YOgorICAg
IHsKKyAgICAgIGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUg
Pj0gMCkKKyAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5j
dXJzb3JfZ2MnIGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9t
YWtlX2djJyBpbiB4Zm5zLmMuICovCisgICAgICAgIHsKKyAgICAgICAgICBibG9ja19pbnB1dCAo
KTsKKyAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0
cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChmKSk7CisgICAg
ICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRh
LngtPmN1cnNvcl9nYywgY29sb3IucGl4ZWwpOworICAgICAgICAgIC8qIEZvcmNlIGBtY194X3Nl
dF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJy4gKi8K
KyAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0gdHJ1ZTsKKyAgICAgICAgICBtY19kcmF3X2N1
cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBocG9zLCB2cG9zLCBs
c2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2ZsYXZvciwgY3Vyc29y
X3R5cGUsIHdkLCBhY3RpdmVfcCwgY3Vyc29yX2djX3ApOworICAgICAgICAgIFhTZXRGb3JlZ3Jv
dW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIHhn
Y3YuZm9yZWdyb3VuZCk7CisgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExB
WSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgeGdjdi5iYWNrZ3JvdW5kKTsKKyAg
ICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICB7CisgICAgICAgICAgICBib29sIGN1cnNvcl9nY19wID0gZmFsc2U7CisgICAgICAgICAg
ICBtY19kcmF3X2N1cnNvcl9nbHlwaCAodywgbWF0cml4LCByb3csIERSQVdfQ1VSU09SLCB4LCBo
cG9zLCB2cG9zLCBsc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhf
Zmxhdm9yLCBjdXJzb3JfdHlwZSwgd2QsIGFjdGl2ZV9wLCBjdXJzb3JfZ2NfcCk7CisgICAgICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTUNfQkFSOgorICAgIHsKKyAgICAg
IGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0gMCkKKyAg
ICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEu
eC0+Y3Vyc29yX3BpeGVsJy4gKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3Jf
cGl4ZWwgPSBjb2xvci5waXhlbDsKKyAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVf
b2theV9wID0gdHJ1ZTsKKyAgICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4
LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgTUNfQkFSLCBjdXJzb3JfZ2NfaW52aXNpYmxl
X29rYXlfcCk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gb3Jp
Z2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7
CisgICAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wID0gZmFsc2U7Cisg
ICAgICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywgbWF0cml4LCByb3csIHgsIGZ4LCB5
LCBmeSwgaHBvcywgdnBvcywgd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aCwgY3Vyc29yX3dpZHRoLCBNQ19CQVIsIGN1cnNvcl9nY19pbnZpc2libGVfb2theV9wKTsKKyAg
ICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNQ19IQkFSOgorICAgIHsK
KyAgICAgIGlmIChsc2wucmVkID49IDAgJiYgbHNsLmdyZWVuID49IDAgJiYgbHNsLmJsdWUgPj0g
MCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0
X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5j
dXJzb3JfcGl4ZWwgPSBjb2xvci5waXhlbDsKKyAgICAgICAgICBib29sIGN1cnNvcl9nY19pbnZp
c2libGVfb2theV9wID0gdHJ1ZTsKKyAgICAgICAgICBtY194X2RyYXdfYmFyX2N1cnNvciAodywg
bWF0cml4LCByb3csIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgd2QsIGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgTUNfSEJBUiwgY3Vyc29yX2djX2lu
dmlzaWJsZV9va2F5X3ApOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhl
bCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgICAgeworICAgICAgICAgICAgYm9vbCBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXlfcCA9IGZh
bHNlOworICAgICAgICAgICAgbWNfeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIG1hdHJpeCwgcm93LCB4
LCBmeCwgeSwgZnksIGhwb3MsIHZwb3MsIHdkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGgsIGN1cnNvcl93aWR0aCwgTUNfSEJBUiwgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5
X3ApOworICAgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgZW1hY3NfYWJvcnQgKCk7CisgIH0KKyAgICAgICAgfQorI2lmZGVmIEhBVkVfWF9JMThOCisg
IGlmICh3ID09IFhXSU5ET1cgKGYtPnNlbGVjdGVkX3dpbmRvdykpCisgICAgaWYgKEZSQU1FX1hJ
QyAoZikgJiYgKEZSQU1FX1hJQ19TVFlMRSAoZikgJiBYSU1QcmVlZGl0UG9zaXRpb24pKQorICAg
ICAgeGljX3NldF9wcmVlZGl0YXJlYSAodywgeCwgeSk7CisjZW5kaWYKKyAgICB9CisgIFhGbHVz
aCAoRlJBTUVfWF9ESVNQTEFZIChmKSk7Cit9CisKKy8qIERyYXcgc3RyZXRjaCBnbHlwaCBzdHJp
bmcgUy4gKi8KK3N0YXRpYyB2b2lkCittY194X2RyYXdfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHN0
cnVjdCBnbHlwaF9zdHJpbmcgKnMpCit7CisgIGVhc3NlcnQgKHMtPmZpcnN0X2dseXBoLT50eXBl
ID09IFNUUkVUQ0hfR0xZUEgpOworICBpZiAocy0+aGwgPT0gRFJBV19DVVJTT1IKKyAgICAgICYm
ICF4X3N0cmV0Y2hfY3Vyc29yX3ApCisgICAgeworICAgICAgLyogSWYgYHgtc3RyZXRjaC1jdXJz
b3InIGlzIG5pbCwgZG9uJ3QgZHJhdyBhIGJsb2NrIGN1cnNvciBhcyB3aWRlIGFzIHRoZQorICAg
ICAgc3RyZXRjaCBnbHlwaC4gKi8KKyAgICAgIGludCB3aWR0aCwgYmFja2dyb3VuZF93aWR0aCA9
IHMtPmJhY2tncm91bmRfd2lkdGg7CisgICAgICBpbnQgeCA9IHMtPng7CisgICAgICBpZiAoIXMt
PnJvdy0+cmV2ZXJzZWRfcCkKKyAgICAgICAgeworICAgICAgICAgIGludCBsZWZ0X3ggPSB3aW5k
b3dfYm94X2xlZnRfb2Zmc2V0IChzLT53LCBURVhUX0FSRUEpOworICAgICAgICAgIGlmICh4IDwg
bGVmdF94KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBiYWNrZ3JvdW5kX3dpZHRoIC09
IGxlZnRfeCAtIHg7CisgICAgICAgICAgICAgIHggPSBsZWZ0X3g7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluIFIy
TCByb3dzLCBkcmF3IHRoZSBjdXJzb3Igb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCisgICAgICAg
ICAgICAgICBzdHJldGNoIGdseXBoLiAqLworICAgICAgICAgICAgaW50IHJpZ2h0X3ggPSB3aW5k
b3dfYm94X3JpZ2h0IChzLT53LCBURVhUX0FSRUEpOworICAgICAgICAgICAgaWYgKHggKyBiYWNr
Z3JvdW5kX3dpZHRoID4gcmlnaHRfeCkKKyAgICAgICAgICAgICAgYmFja2dyb3VuZF93aWR0aCAt
PSB4IC0gcmlnaHRfeDsKKyAgICAgICAgICAgIHggKz0gYmFja2dyb3VuZF93aWR0aDsKKyAgICAg
ICAgICB9CisgICAgICB3aWR0aCA9IG1pbiAoRlJBTUVfQ09MVU1OX1dJRFRIIChzLT5mKSwgYmFj
a2dyb3VuZF93aWR0aCk7CisgICAgICBpZiAocy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAgICB4
IC09IHdpZHRoOworICAgICAgLyogRHJhdyBjdXJzb3IuICovCisgICAgICB4X2RyYXdfZ2x5cGhf
c3RyaW5nX2JnX3JlY3QgKHMsIHgsIHMtPnksIHdpZHRoLCBzLT5oZWlnaHQpOworICAgICAgLyog
Q2xlYXIgcmVzdCB1c2luZyB0aGUgR0Mgb2YgdGhlIG9yaWdpbmFsIG5vbi1jdXJzb3IgZmFjZS4g
Ki8KKyAgICAgIGlmICh3aWR0aCA8IGJhY2tncm91bmRfd2lkdGgpCisgICAgICAgIHsKKyAgICAg
ICAgICBpbnQgeSA9IHMtPnk7CisgICAgICAgICAgaW50IHcgPSBiYWNrZ3JvdW5kX3dpZHRoIC0g
d2lkdGgsIGggPSBzLT5oZWlnaHQ7CisgICAgICAgICAgWFJlY3RhbmdsZSByOworICAgICAgICAg
IEdDIGdjOworICAgICAgICAgIGlmICghcy0+cm93LT5yZXZlcnNlZF9wKQorICAgICAgICAgICAg
eCArPSB3aWR0aDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gcy0+eDsKKyAgICAg
ICAgICBpZiAocy0+cm93LT5tb3VzZV9mYWNlX3AKKyAgICAgICAgICAgICAgJiYgY3Vyc29yX2lu
X21vdXNlX2ZhY2VfcCAocy0+dykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHhfc2V0
X21vdXNlX2ZhY2VfZ2MgKHMpOworICAgICAgICAgICAgICBnYyA9IHMtPmdjOworICAgICAgICAg
ICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdjID0gcy0+ZmFjZS0+Z2M7CisgICAg
ICAgICAgZ2V0X2dseXBoX3N0cmluZ19jbGlwX3JlY3QgKHMsICZyKTsKKyAgICAgICAgICB4X3Nl
dF9jbGlwX3JlY3RhbmdsZXMgKHMtPmYsIGdjLCAmciwgMSk7CisgICAgICAgICAgaWYgKHMtPmZh
Y2UtPnN0aXBwbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIEZpbGwgYmFja2dy
b3VuZCB3aXRoIGEgc3RpcHBsZSBwYXR0ZXJuLiAqLworICAgICAgICAgICAgICBYU2V0RmlsbFN0
eWxlIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBnYywgRmlsbE9wYXF1ZVN0aXBwbGVkKTsKKyAg
ICAgICAgICAgICAgeF9maWxsX3JlY3RhbmdsZSAocy0+ZiwgZ2MsIHgsIHksIHcsIGgpOworICAg
ICAgICAgICAgICBYU2V0RmlsbFN0eWxlIChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBnYywgRmls
bFNvbGlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgICAgICAgICBYR2V0R0NWYWx1ZXMg
KEZSQU1FX1hfRElTUExBWSAocy0+ZiksIGdjLCBHQ0ZvcmVncm91bmQgfCBHQ0JhY2tncm91bmQs
ICZ4Z2N2KTsKKyAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAo
cy0+ZiksIGdjLCB4Z2N2LmJhY2tncm91bmQpOworICAgICAgICAgICAgICB4X2ZpbGxfcmVjdGFu
Z2xlIChzLT5mLCBnYywgeCwgeSwgdywgaCk7CisgICAgICAgICAgICAgIFhTZXRGb3JlZ3JvdW5k
IChGUkFNRV9YX0RJU1BMQVkgKHMtPmYpLCBnYywgeGdjdi5mb3JlZ3JvdW5kKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB4X3Jlc2V0X2NsaXBfcmVjdGFuZ2xlcyAocy0+ZiwgZ2MpOworICAg
ICAgICB9CisgICAgfQorICBlbHNlIGlmICghcy0+YmFja2dyb3VuZF9maWxsZWRfcCkKKyAgICB7
CisgICAgICBpbnQgYmFja2dyb3VuZF93aWR0aCA9IHMtPmJhY2tncm91bmRfd2lkdGg7CisgICAg
ICBpbnQgeCA9IHMtPngsIGxlZnRfeCA9IHdpbmRvd19ib3hfbGVmdF9vZmZzZXQgKHMtPncsIFRF
WFRfQVJFQSk7CisgICAgICAvKiBEb24ndCBkcmF3IGludG8gbGVmdCBtYXJnaW4sIGZyaW5nZSBv
ciBzY3JvbGxiYXIgYXJlYQorICAgICAgICAgZXhjZXB0IGZvciBoZWFkZXIgbGluZSBhbmQgbW9k
ZSBsaW5lLiAqLworICAgICAgaWYgKHggPCBsZWZ0X3ggJiYgIXMtPnJvdy0+bW9kZV9saW5lX3Ap
CisgICAgICAgIHsKKyAgICAgICAgICBiYWNrZ3JvdW5kX3dpZHRoIC09IGxlZnRfeCAtIHg7Cisg
ICAgICAgICAgeCA9IGxlZnRfeDsKKyAgICAgICAgfQorICAgICAgaWYgKGJhY2tncm91bmRfd2lk
dGggPiAwKQorICAgICAgICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JnX3JlY3QgKHMsIHgsIHMtPnks
IGJhY2tncm91bmRfd2lkdGgsIHMtPmhlaWdodCk7CisgICAgfQorICBzLT5iYWNrZ3JvdW5kX2Zp
bGxlZF9wID0gdHJ1ZTsKK30KKworLyogRHJhdyBnbHlwaCBzdHJpbmcgUy4gIFRoZSBgbWNfbWF0
cml4YCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aGVuIGVyYXNpbmcKKyAgIGZha2UgY3Vy
c29ycyBkdXJpbmcgYG1jX3VwZGF0ZV93aW5kb3dfZXJhc2UnIGFuZCByZWRyYXdpbmcgZmFrZSBj
dXJzb3JzIG9uCisgICBsZWZ0L3JpZ2h0IG92ZXJ3cml0dGVuIGdseXBocy4gKi8KK3N0YXRpYyB2
b2lkCittY194X2RyYXdfZ2x5cGhfc3RyaW5nIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBzdHJ1
Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
Z2x5cGhfcm93ICpyb3csIHN0cnVjdCBtY19tYXRyaXggbWNfbWF0cml4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IG1jX1JHQiBsc2wsIGVudW0gbWNfZmxhdm9yIGdseXBoX2ZsYXZv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWNfY3Vyc29yX3R5cGUgY3Vyc29yX3R5
cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdGl2
ZV9wLCBib29sIGN1cnNvcl9nY19wKQoreworICBib29sIHJlbGllZl9kcmF3bl9wID0gZmFsc2U7
CisgIC8qIElmIFMgZHJhd3MgaW50byB0aGUgYmFja2dyb3VuZCBvZiBpdHMgc3VjY2Vzc29ycywg
ZHJhdyB0aGUKKyAgICAgYmFja2dyb3VuZCBvZiB0aGUgc3VjY2Vzc29ycyBmaXJzdCBzbyB0aGF0
IFMgY2FuIGRyYXcgaW50byBpdC4KKyAgICAgVGhpcyBtYWtlcyBTLT5uZXh0IHVzZSBYRHJhd1N0
cmluZyBpbnN0ZWFkIG9mIFhEcmF3SW1hZ2VTdHJpbmcuICovCisgIGlmIChzLT5uZXh0ICYmIHMt
PnJpZ2h0X292ZXJoYW5nICYmICFzLT5mb3Jfb3ZlcmxhcHMpCisgICAgeworICAgICAgaW50IHdp
ZHRoOworICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqbmV4dDsKKyAgICAgIGZvciAod2lkdGgg
PSAwLCBuZXh0ID0gcy0+bmV4dDsKKyAgICAgICAgICAgbmV4dCAmJiB3aWR0aCA8IHMtPnJpZ2h0
X292ZXJoYW5nOworICAgICAgICAgICB3aWR0aCArPSBuZXh0LT53aWR0aCwgbmV4dCA9IG5leHQt
Pm5leHQpCisgICAgICAgIGlmIChuZXh0LT5maXJzdF9nbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQ
SCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBtY194X3NldF9nbHlwaF9zdHJpbmdfZ2MgKG5l
eHQsIGN1cnNvcl9nY19wKTsKKyAgICAgICAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19jbGlwcGlu
ZyAobmV4dCk7CisgICAgICAgICAgICBpZiAobmV4dC0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gU1RS
RVRDSF9HTFlQSCkKKyAgICAgICAgICAgICAgbWNfeF9kcmF3X3N0cmV0Y2hfZ2x5cGhfc3RyaW5n
IChuZXh0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeF9kcmF3X2dseXBoX3N0
cmluZ19iYWNrZ3JvdW5kIChuZXh0LCB0cnVlKTsKKyAgICAgICAgICAgIG5leHQtPm51bV9jbGlw
cyA9IDA7CisgICAgICAgICAgfQorICAgIH0KKyAgLyogU2V0IHVwIFMtPmdjLCBzZXQgY2xpcHBp
bmcgYW5kIGRyYXcgUy4gKi8KKyAgbWNfeF9zZXRfZ2x5cGhfc3RyaW5nX2djIChzLCBjdXJzb3Jf
Z2NfcCk7CisgIC8qIERyYXcgcmVsaWVmIChpZiBhbnkpIGluIGFkdmFuY2UgZm9yIGNoYXIvY29t
cG9zaXRpb24gc28gdGhhdCB0aGUKKyAgICAgZ2x5cGggc3RyaW5nIGNhbiBiZSBkcmF3biBvdmVy
IGl0LiAqLworICBpZiAoIXMtPmZvcl9vdmVybGFwcworICAgICAgJiYgcy0+ZmFjZS0+Ym94ICE9
IEZBQ0VfTk9fQk9YCisgICAgICAmJiAocy0+Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQ
SAorICAgICAgICAgIHx8IHMtPmZpcnN0X2dseXBoLT50eXBlID09IENPTVBPU0lURV9HTFlQSCkp
CisgICAgeworICAgICAgeF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgICAgIHhf
ZHJhd19nbHlwaF9zdHJpbmdfYmFja2dyb3VuZCAocywgdHJ1ZSk7CisgICAgICB4X2RyYXdfZ2x5
cGhfc3RyaW5nX2JveCAocyk7CisgICAgICB4X3NldF9nbHlwaF9zdHJpbmdfY2xpcHBpbmcgKHMp
OworICAgICAgcmVsaWVmX2RyYXduX3AgPSB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmICghcy0+
Y2xpcF9oZWFkIC8qIGRyYXdfZ2x5cGhzIGRpZG4ndCBzcGVjaWZ5IGEgY2xpcCBtYXNrLiAqLwor
ICAgICAgICAgICAgICYmICFzLT5jbGlwX3RhaWwKKyAgICAgICAgICAgICAmJiAoKHMtPnByZXYg
JiYgcy0+cHJldi0+aGwgIT0gcy0+aGwgJiYgcy0+bGVmdF9vdmVyaGFuZykKKyAgICAgICAgICAg
ICAgICAgfHwgKHMtPm5leHQgJiYgcy0+bmV4dC0+aGwgIT0gcy0+aGwgJiYgcy0+cmlnaHRfb3Zl
cmhhbmcpKSkKKyAgICAgIC8qIFdlIG11c3QgY2xpcCBqdXN0IHRoaXMgZ2x5cGguICBsZWZ0X292
ZXJoYW5nIHBhcnQgaGFzIGFscmVhZHkKKyAgICAgICAgIGRyYXduIHdoZW4gcy0+cHJldiB3YXMg
ZHJhd24sIGFuZCByaWdodF9vdmVyaGFuZyBwYXJ0IHdpbGwgYmUKKyAgICAgICAgIGRyYXduIGxh
dGVyIHdoZW4gcy0+bmV4dCBpcyBkcmF3bi4gKi8KKyAgICAgIHhfc2V0X2dseXBoX3N0cmluZ19j
bGlwcGluZ19leGFjdGx5IChzLCBzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeF9zZXRfZ2x5cGhf
c3RyaW5nX2NsaXBwaW5nIChzKTsKKyAgc3dpdGNoIChzLT5maXJzdF9nbHlwaC0+dHlwZSkKKyAg
ICB7CisgICAgY2FzZSBJTUFHRV9HTFlQSDoKKyAgICAgIHhfZHJhd19pbWFnZV9nbHlwaF9zdHJp
bmcgKHMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBYV0lER0VUX0dMWVBIOgorICAgICAgeF9k
cmF3X3h3aWRnZXRfZ2x5cGhfc3RyaW5nIChzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU1RS
RVRDSF9HTFlQSDoKKyAgICAgIG1jX3hfZHJhd19zdHJldGNoX2dseXBoX3N0cmluZyAocyk7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIENIQVJfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJs
YXBzKQorICAgICAgICBzLT5iYWNrZ3JvdW5kX2ZpbGxlZF9wID0gdHJ1ZTsKKyAgICAgIGVsc2UK
KyAgICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kIChzLCBmYWxzZSk7CisgICAg
ICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2ZvcmVncm91bmQgKHMpOworICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDT01QT1NJVEVfR0xZUEg6CisgICAgICBpZiAocy0+Zm9yX292ZXJsYXBzIHx8IChzLT5j
bXBfZnJvbSA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEgcy0+Zmlyc3Rf
Z2x5cGgtPnUuY21wLmF1dG9tYXRpYykpCisgICAgICAgIHMtPmJhY2tncm91bmRfZmlsbGVkX3Ag
PSB0cnVlOworICAgICAgZWxzZQorICAgICAgICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91
bmQgKHMsIHRydWUpOworICAgICAgeF9kcmF3X2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmdfZm9yZWdy
b3VuZCAocyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdMWVBITEVTU19HTFlQSDoKKyAgICAg
IGlmIChzLT5mb3Jfb3ZlcmxhcHMpCisgICAgICAgIHMtPmJhY2tncm91bmRfZmlsbGVkX3AgPSB0
cnVlOworICAgICAgZWxzZQorICAgICAgICB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JhY2tncm91bmQg
KHMsIHRydWUpOworICAgICAgeF9kcmF3X2dseXBobGVzc19nbHlwaF9zdHJpbmdfZm9yZWdyb3Vu
ZCAocyk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZW1hY3NfYWJvcnQgKCk7
CisgICAgfQorICBpZiAoIXMtPmZvcl9vdmVybGFwcykKKyAgICB7CisgICAgICAvKiBEcmF3IHVu
ZGVybGluZS4gKi8KKyAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfcCkKKyAgICAgICAgewor
ICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfdHlwZSA9PSBGQUNFX1VOREVSX1dBVkUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChzLT5mYWNlLT51bmRlcmxpbmVfZGVm
YXVsdGVkX3ApCisgICAgICAgICAgICAgICAgeF9kcmF3X3VuZGVyd2F2ZSAocyk7CisgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBYR0NWYWx1
ZXMgeGdjdjsKKyAgICAgICAgICAgICAgICAgIFhHZXRHQ1ZhbHVlcyAoRlJBTUVfWF9ESVNQTEFZ
IChzLT5mKSwgcy0+Z2MsIEdDRm9yZWdyb3VuZCwgJnhnY3YpOworICAgICAgICAgICAgICAgICAg
WFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBzLT5mYWNlLT51
bmRlcmxpbmVfY29sb3IpOworICAgICAgICAgICAgICAgICAgeF9kcmF3X3VuZGVyd2F2ZSAocyk7
CisgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChzLT5m
KSwgcy0+Z2MsIHhnY3YuZm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgIGVsc2UgaWYgKHMtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0Vf
VU5ERVJfTElORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0
aGlja25lc3MsIHBvc2l0aW9uOworICAgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICAgICAg
aWYgKHMtPnByZXYgJiYgcy0+cHJldi0+ZmFjZS0+dW5kZXJsaW5lX3AKKyAgICAgICAgICAgICAg
ICAgICYmIHMtPnByZXYtPmZhY2UtPnVuZGVybGluZV90eXBlID09IEZBQ0VfVU5ERVJfTElORSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBXZSB1c2UgdGhlIHNhbWUg
dW5kZXJsaW5lIHN0eWxlIGFzIHRoZSBwcmV2aW91cyBvbmUuICovCisgICAgICAgICAgICAgICAg
ICB0aGlja25lc3MgPSBzLT5wcmV2LT51bmRlcmxpbmVfdGhpY2tuZXNzOworICAgICAgICAgICAg
ICAgICAgcG9zaXRpb24gPSBzLT5wcmV2LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgLyogR2V0IHRoZSB1bmRlcmxpbmUgdGhpY2tuZXNzLiAgRGVmYXVsdCBpcyAxIHBp
eGVsLiAqLworICAgICAgICAgICAgICAgICAgaWYgKHMtPmZvbnQgJiYgcy0+Zm9udC0+dW5kZXJs
aW5lX3RoaWNrbmVzcyA+IDApCisgICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcyA9IHMtPmZv
bnQtPnVuZGVybGluZV90aGlja25lc3M7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHRoaWNrbmVzcyA9IDE7CisgICAgICAgICAgICAgICAgICBpZiAoeF91bmRl
cmxpbmVfYXRfZGVzY2VudF9saW5lKQorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IChz
LT5oZWlnaHQgLSB0aGlja25lc3MpIC0gKHMtPnliYXNlIC0gcy0+eSk7CisgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAv
KiBHZXQgdGhlIHVuZGVybGluZSBwb3NpdGlvbi4gIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRo
ZSBiYXNlbGluZSB0byB0aGUgdG9wIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHVu
ZGVybGluZS4gIFRoaXMgaXMgYSBzaWduZWQgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWNzLCBhbmQgaXRzIGRlZmF1bHQgaXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBST1VORCAoKG1heGltdW0gZGVzY2VudCkgLyAyKSwgd2l0aAorICAgICAg
ICAgICAgICAgICAgICAgICAgIFJPVU5EKHgpID0gZmxvb3IgKHggKyAwLjUpICAqLworICAgICAg
ICAgICAgICAgICAgICAgIGlmICh4X3VzZV91bmRlcmxpbmVfcG9zaXRpb25fcHJvcGVydGllcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzLT5mb250ICYmIHMtPmZvbnQtPnVuZGVybGlu
ZV9wb3NpdGlvbiA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzLT5m
b250LT51bmRlcmxpbmVfcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
cy0+Zm9udCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKHMtPmZvbnQtPmRl
c2NlbnQgKyAxKSAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zaXRpb24gPSB1bmRlcmxpbmVfbWluaW11bV9vZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gbWF4IChwb3NpdGlv
biwgdW5kZXJsaW5lX21pbmltdW1fb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIC8qIENoZWNrIHRoZSBzYW5pdHkgb2YgdGhpY2tuZXNzIGFuZCBwb3NpdGlvbi4gIFdl
IHNob3VsZAorICAgICAgICAgICAgICAgICBhdm9pZCBkcmF3aW5nIHVuZGVybGluZSBvdXQgb2Yg
dGhlIGN1cnJlbnQgbGluZSBhcmVhLiAqLworICAgICAgICAgICAgICBpZiAocy0+eSArIHMtPmhl
aWdodCA8PSBzLT55YmFzZSArIHBvc2l0aW9uKQorICAgICAgICAgICAgICAgIHBvc2l0aW9uID0g
KHMtPmhlaWdodCAtIDEpIC0gKHMtPnliYXNlIC0gcy0+eSk7CisgICAgICAgICAgICAgIGlmIChz
LT55ICsgcy0+aGVpZ2h0IDwgcy0+eWJhc2UgKyBwb3NpdGlvbiArIHRoaWNrbmVzcykKKyAgICAg
ICAgICAgICAgICB0aGlja25lc3MgPSAocy0+eSArIHMtPmhlaWdodCkgLSAocy0+eWJhc2UgKyBw
b3NpdGlvbik7CisgICAgICAgICAgICAgIHMtPnVuZGVybGluZV90aGlja25lc3MgPSB0aGlja25l
c3M7CisgICAgICAgICAgICAgIHMtPnVuZGVybGluZV9wb3NpdGlvbiA9IHBvc2l0aW9uOworICAg
ICAgICAgICAgICB5ID0gcy0+eWJhc2UgKyBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgaWYgKHMt
PmZhY2UtPnVuZGVybGluZV9kZWZhdWx0ZWRfcCkKKyAgICAgICAgICAgICAgICB4X2ZpbGxfcmVj
dGFuZ2xlIChzLT5mLCBzLT5nYywgcy0+eCwgeSwgcy0+d2lkdGgsIHRoaWNrbmVzcyk7CisgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBYR0NW
YWx1ZXMgeGdjdjsKKyAgICAgICAgICAgICAgICAgIFhHZXRHQ1ZhbHVlcyAoRlJBTUVfWF9ESVNQ
TEFZIChzLT5mKSwgcy0+Z2MsIEdDRm9yZWdyb3VuZCwgJnhnY3YpOworICAgICAgICAgICAgICAg
ICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBzLT5mYWNl
LT51bmRlcmxpbmVfY29sb3IpOworICAgICAgICAgICAgICAgICAgeF9maWxsX3JlY3RhbmdsZSAo
cy0+Ziwgcy0+Z2MsIHMtPngsIHksIHMtPndpZHRoLCB0aGlja25lc3MpOworICAgICAgICAgICAg
ICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCB4Z2N2
LmZvcmVncm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgLyogRHJhdyBvdmVybGluZS4gKi8KKyAgICAgIGlmIChzLT5mYWNlLT5vdmVybGlu
ZV9wKQorICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBkeSA9IDAsIGggPSAxOwor
ICAgICAgICAgIGlmIChzLT5mYWNlLT5vdmVybGluZV9jb2xvcl9kZWZhdWx0ZWRfcCkKKyAgICAg
ICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMtPmdjLCBzLT54LCBzLT55ICsgZHksIHMt
PndpZHRoLCBoKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgICAgICAgICBYR2V0R0NWYWx1ZXMgKEZSQU1FX1hfRElT
UExBWSAocy0+ZiksIHMtPmdjLCBHQ0ZvcmVncm91bmQsICZ4Z2N2KTsKKyAgICAgICAgICAgICAg
WFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBzLT5mYWNlLT5v
dmVybGluZV9jb2xvcik7CisgICAgICAgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMt
PmdjLCBzLT54LCBzLT55ICsgZHksIHMtPndpZHRoLCBoKTsKKyAgICAgICAgICAgICAgWFNldEZv
cmVncm91bmQgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCB4Z2N2LmZvcmVncm91bmQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAvKiBEcmF3IHN0cmlrZS10aHJvdWdo
LiAqLworICAgICAgaWYgKHMtPmZhY2UtPnN0cmlrZV90aHJvdWdoX3ApCisgICAgICAgIHsKKyAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGggPSAxOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHkg
PSAocy0+aGVpZ2h0IC0gaCkgLyAyOworICAgICAgICAgIGlmIChzLT5mYWNlLT5zdHJpa2VfdGhy
b3VnaF9jb2xvcl9kZWZhdWx0ZWRfcCkKKyAgICAgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMt
PmYsIHMtPmdjLCBzLT54LCBzLT55ICsgZHksIHMtPndpZHRoLCBoKTsKKyAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFhHQ1ZhbHVlcyB4Z2N2OworICAgICAgICAg
ICAgICBYR2V0R0NWYWx1ZXMgKEZSQU1FX1hfRElTUExBWSAocy0+ZiksIHMtPmdjLCBHQ0ZvcmVn
cm91bmQsICZ4Z2N2KTsKKyAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElT
UExBWSAocy0+ZiksIHMtPmdjLCBzLT5mYWNlLT5zdHJpa2VfdGhyb3VnaF9jb2xvcik7CisgICAg
ICAgICAgICAgIHhfZmlsbF9yZWN0YW5nbGUgKHMtPmYsIHMtPmdjLCBzLT54LCBzLT55ICsgZHks
IHMtPndpZHRoLCBoKTsKKyAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQgKEZSQU1FX1hfRElT
UExBWSAocy0+ZiksIHMtPmdjLCB4Z2N2LmZvcmVncm91bmQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAvKiBEcmF3IHJlbGllZiBpZiBub3QgeWV0IGRyYXduLiAqLworICAgICAg
aWYgKCFyZWxpZWZfZHJhd25fcCAmJiBzLT5mYWNlLT5ib3ggIT0gRkFDRV9OT19CT1gpCisgICAg
ICAgICAgeF9kcmF3X2dseXBoX3N0cmluZ19ib3ggKHMpOworICAgICAgaWYgKHMtPnByZXYpCisg
ICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpwcmV2OworICAgICAgICAg
IGZvciAocHJldiA9IHMtPnByZXY7IHByZXY7IHByZXYgPSBwcmV2LT5wcmV2KQorICAgICAgICAg
ICAgaWYgKHByZXYtPmhsICE9IHMtPmhsCisgICAgICAgICAgICAgICAgJiYgcHJldi0+eCArIHBy
ZXYtPndpZHRoICsgcHJldi0+cmlnaHRfb3ZlcmhhbmcgPiBzLT54KQorICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLyogQXMgcHJldiB3YXMgZHJhd24gd2hpbGUgY2xpcHBlZCB0byBp
dHMgb3duIGFyZWEsIHdlCisgICAgICAgICAgICAgICAgICAgbXVzdCBkcmF3IHRoZSByaWdodF9v
dmVyaGFuZyBwYXJ0IHVzaW5nIHMtPmhsIG5vdy4gKi8KKyAgICAgICAgICAgICAgICBlbnVtIGRy
YXdfZ2x5cGhzX2ZhY2Ugc2F2ZSA9IHByZXYtPmhsOworICAgICAgICAgICAgICAgIHByZXYtPmhs
ID0gcy0+aGw7CisgICAgICAgICAgICAgICAgbWNfeF9zZXRfZ2x5cGhfc3RyaW5nX2djIChwcmV2
LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICAgICAgeF9zZXRfZ2x5cGhfc3RyaW5nX2NsaXBw
aW5nX2V4YWN0bHkgKHMsIHByZXYpOworICAgICAgICAgICAgICAgIGlmIChwcmV2LT5maXJzdF9n
bHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBIKQorICAgICAgICAgICAgICAgICAgeF9kcmF3X2dseXBo
X3N0cmluZ19mb3JlZ3JvdW5kIChwcmV2KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICB4X2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChwcmV2
KTsKKyAgICAgICAgICAgICAgICB4X3Jlc2V0X2NsaXBfcmVjdGFuZ2xlcyAocHJldi0+ZiwgcHJl
di0+Z2MpOworICAgICAgICAgICAgICAgIHByZXYtPmhsID0gc2F2ZTsKKyAgICAgICAgICAgICAg
ICBwcmV2LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IGlmIChzLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGdseXBoX3N0cmluZyAq
bmV4dDsKKyAgICAgICAgICBmb3IgKG5leHQgPSBzLT5uZXh0OyBuZXh0OyBuZXh0ID0gbmV4dC0+
bmV4dCkKKyAgICAgICAgICAgIGlmIChuZXh0LT5obCAhPSBzLT5obAorICAgICAgICAgICAgICAg
ICYmIG5leHQtPnggLSBuZXh0LT5sZWZ0X292ZXJoYW5nIDwgcy0+eCArIHMtPndpZHRoKQorICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQXMgbmV4dCB3aWxsIGJlIGRyYXduIHdo
aWxlIGNsaXBwZWQgdG8gaXRzIG93biBhcmVhLAorICAgICAgICAgICAgICAgICAgIHdlIG11c3Qg
ZHJhdyB0aGUgbGVmdF9vdmVyaGFuZyBwYXJ0IHVzaW5nIHMtPmhsIG5vdy4gKi8KKyAgICAgICAg
ICAgICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2Ugc2F2ZSA9IG5leHQtPmhsOworICAgICAgICAg
ICAgICAgIG5leHQtPmhsID0gcy0+aGw7CisgICAgICAgICAgICAgICAgbWNfeF9zZXRfZ2x5cGhf
c3RyaW5nX2djIChuZXh0LCBjdXJzb3JfZ2NfcCk7CisgICAgICAgICAgICAgICAgeF9zZXRfZ2x5
cGhfc3RyaW5nX2NsaXBwaW5nX2V4YWN0bHkgKHMsIG5leHQpOworICAgICAgICAgICAgICAgIGlm
IChuZXh0LT5maXJzdF9nbHlwaC0+dHlwZSA9PSBDSEFSX0dMWVBIKQorICAgICAgICAgICAgICAg
ICAgeF9kcmF3X2dseXBoX3N0cmluZ19mb3JlZ3JvdW5kIChuZXh0KTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICB4X2RyYXdfY29tcG9zaXRlX2dseXBoX3N0cmluZ19m
b3JlZ3JvdW5kIChuZXh0KTsKKyAgICAgICAgICAgICAgICB4X3Jlc2V0X2NsaXBfcmVjdGFuZ2xl
cyAobmV4dC0+ZiwgbmV4dC0+Z2MpOworICAgICAgICAgICAgICAgIG5leHQtPmhsID0gc2F2ZTsK
KyAgICAgICAgICAgICAgICBuZXh0LT5udW1fY2xpcHMgPSAwOworICAgICAgICAgICAgICAgIG5l
eHQtPmNsaXBfaGVhZCA9IHMtPm5leHQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgLyogUmVzZXQgY2xpcHBpbmcuICovCisgIHhfcmVzZXRfY2xpcF9yZWN0YW5nbGVzIChz
LT5mLCBzLT5nYyk7CisgIHMtPm51bV9jbGlwcyA9IDA7Cit9CisKKy8qIGVuZCBNVUxUSVBMRS1D
VVJTT1JTICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAvKiBEZWZhdWx0IHRvIHVz
aW5nIFhJTSBpZiBhdmFpbGFibGUuICAqLwogI2lmZGVmIFVTRV9YSU0KIGJvb2wgdXNlX3hpbSA9
IHRydWU7CkBAIC0xMTA5LDYgKzIwMTAsMTYgQEAgc3RhdGljIHZvaWQKIHhfdXBkYXRlX2JlZ2lu
IChzdHJ1Y3QgZnJhbWUgKmYpCiB7CiAgIC8qIE5vdGhpbmcgdG8gZG8uICAqLworCisKKy8qICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGYtPm1jX3Vw
ZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAv
KiBEcmF3IGEgdmVydGljYWwgd2luZG93IGJvcmRlciBmcm9tICh4LHkwKSB0byAoeCx5MSkgICov
CkBAIC0xMjU0LDYgKzIxNjUsMTYgQEAgeF91cGRhdGVfZW5kIChzdHJ1Y3QgZnJhbWUgKmYpCiAg
IFhGbHVzaCAoRlJBTUVfWF9ESVNQTEFZIChmKSk7CiAgIHVuYmxvY2tfaW5wdXQgKCk7CiAjZW5k
aWYKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8K
KworICBmLT5tY191cGRhdGluZ19mcmFtZSA9IE5VTEw7CisKKy8qICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiAqLworCisKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB2YXJpb3VzIHBs
YWNlcyBpbiB4ZGlzcC5jCkBAIC0xMzIzOCw2ICsxNDE1OSwyMCBAQCBleHRlcm4gZnJhbWVfcGFy
bV9oYW5kbGVyIHhfZnJhbWVfcGFybV9oYW5kbGVyc1tdOwogCiBzdGF0aWMgc3RydWN0IHJlZGlz
cGxheV9pbnRlcmZhY2UgeF9yZWRpc3BsYXlfaW50ZXJmYWNlID0KICAgeworCisKKy8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisvKiBgcmVkaXNwbGF5
X2ludGVyZmFjZScgaW4gYHh0ZXJtLmNgIG11c3QgYmUgaW4gdGhlIGV4YWN0IHNhbWUgb3JkZXIg
YXMgdGhlCitgcmVkaXNwbGF5X2ludGVyZmFjZScgaW4gYGRpc3BleHRlcm4uaGAhICovCisKKyAg
bWNfeF9kcmF3X3dpbmRvd19jdXJzb3IsCisgIG1jX3hfZHJhd19nbHlwaF9zdHJpbmcsCisKKy8q
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICB4X2ZyYW1lX3Bhcm1faGFuZGxlcnMsCiAg
ICAgZ3VpX3Byb2R1Y2VfZ2x5cGhzLAogICAgIGd1aV93cml0ZV9nbHlwaHMsCg==

--Multipart_Sat_May__2_13:50:18_2020-1--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#22873; Package emacs. Full text available.

Message received at 22873 <at> debbugs.gnu.org:


Received: (at 22873) by debbugs.gnu.org; 4 Mar 2020 09:03:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 04 04:03:19 2020
Received: from localhost ([127.0.0.1]:40344 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1j9Pvy-0007Tp-SA
	for submit <at> debbugs.gnu.org; Wed, 04 Mar 2020 04:03:18 -0500
Received: from gateway24.websitewelcome.com ([192.185.50.252]:24007)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <esq@HIDDEN>) id 1j9Pvw-0007TZ-KJ
 for 22873 <at> debbugs.gnu.org; Wed, 04 Mar 2020 04:03:17 -0500
Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7])
 by gateway24.websitewelcome.com (Postfix) with ESMTP id 2685B1993A
 for <22873 <at> debbugs.gnu.org>; Wed,  4 Mar 2020 03:03:16 -0600 (CST)
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==;
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 <esq@HIDDEN>)
 id 1j9Pvr-000YYW-HH; Wed, 04 Mar 2020 03:03:14 -0600
Date: Wed, 04 Mar 2020 01:03:10 -0800
Message-ID: <m2o8tcjxv5.wl%esq@HIDDEN>
From: Keith David Bershatsky <esq@HIDDEN>
To: 22873 <at> debbugs.gnu.org,17684 <at> debbugs.gnu.org
Subject: #22873 (multiple fake cursors);
 and, #17684 (crosshairs / fill-column).
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Multipart_Wed_Mar__4_01:03:10_2020-1"
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: 
X-Source-Args: 
X-Source-Dir: 
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-Debbugs-Envelope-To: 22873
Cc: mbork@HIDDEN, rms@HIDDEN, johnw@HIDDEN, akioburns@HIDDEN,
 eliz@HIDDEN, drew.adams@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--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+dXNlZ