From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: Re: nsterm.m: How to prevent _inactive_ window update from overreaching. Date: Sun, 25 Nov 2018 18:14:19 -0800 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sun_Nov_25_18:14:18_2018-1" X-Trace: blaine.gmane.org 1543200482 25701 195.159.176.226 (26 Nov 2018 02:48:02 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 26 Nov 2018 02:48:02 +0000 (UTC) Cc: emacs-devel@gnu.org To: Alan Third Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Nov 26 03:48:01 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gR6wI-0006YP-Fp for ged-emacs-devel@m.gmane.org; Mon, 26 Nov 2018 03:48:00 +0100 Original-Received: from localhost ([::1]:33909 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gR6yO-0002lV-56 for ged-emacs-devel@m.gmane.org; Sun, 25 Nov 2018 21:50:08 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60587) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gR6Pu-00029v-V5 for emacs-devel@gnu.org; Sun, 25 Nov 2018 21:14:33 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gR6Pr-0004Sj-KN for emacs-devel@gnu.org; Sun, 25 Nov 2018 21:14:30 -0500 Original-Received: from gateway24.websitewelcome.com ([192.185.51.122]:47436) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gR6Pp-0004Ro-Ic for emacs-devel@gnu.org; Sun, 25 Nov 2018 21:14:27 -0500 Original-Received: from cm16.websitewelcome.com (cm16.websitewelcome.com [100.42.49.19]) by gateway24.websitewelcome.com (Postfix) with ESMTP id B48EA62B5 for ; Sun, 25 Nov 2018 20:14:22 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id R6Pmg7xSraSeyR6PmgKzHU; Sun, 25 Nov 2018 20:14:22 -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=bGQmQozAtnFZ7croUAhS3MpGwtKkIjY5PXfjWxohav0=; b=Tr/mf3ocKDgY4IVoxAA2/Ob0mF mMy40VGHN7JLu2KilGaMFhROUZRBiWRtfejOdPCFLzc3ClwRZpbApKvYtOUcs+9RRCH97Rk8xzkGI RwstxCsFEHp4nwdAn/NBM+AWBPs84wrRvsuRXDra55FRDj0J7DpuXTnjaIsENaNZb5+pv6Cu+Gw2X EhoBrAYc8sXkc55EZ7wnUCSa/syuP5H2sQYlYYGXl3UXfiCLqL8u9v4eh7/qJRbBdS9XZqV6PjLu4 cDQGnEo+WaeO9yuashMiZ/yHk38J+q3Swzwi30uy9vDshOdQEF3Eyhl7ytAmxx9+yss+3kQdOLr7y DpfQJH3g==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:49706 helo=server.local) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.91) (envelope-from ) id 1gR6Pj-002Kyx-SA; Sun, 25 Nov 2018 20:14:21 -0600 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - 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: 1gR6Pj-002Kyx-SA 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]:49706 X-Source-Auth: lawlist X-Email-Count: 1 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 192.185.51.122 X-Mailman-Approved-At: Sun, 25 Nov 2018 21:48:55 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:231380 Archived-At: --Multipart_Sun_Nov_25_18:14:18_2018-1 Content-Type: text/plain; charset=US-ASCII I isolated the issue to the following changes within nsterm.m that were made between the dates of 07/07/2018 and 11/16/2018. The additions (+) permit crosshairs to work properly; whereas, the subtractions (-) cause the issue outlined at the beginning of this thread. The crosshairs code (in the attached patch from 11/16/2018) work correctly on all three GUI platforms: NS, NT, X11. Is it possible that something in the changes below is responsible for the issue, rather than the crosshairs code itself? Keith diff --git a/src/nsterm.m b/src/nsterm.m index bcc23ff..eb7b72b 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -278,6 +278,9 @@ - (NSColor *)colorUsingDefaultColorSpace long context_menu_value = 0; /* display update */ +static struct frame *ns_updating_frame; +static NSView *focus_view = NULL; +static BOOL gsaved = NO; static int ns_window_num = 0; static BOOL ns_fake_keydown = NO; #ifdef NS_IMPL_COCOA @@ -1103,6 +1116,9 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen) [toolbar setVisible: tbar_visible]; } + ns_updating_frame = f; + [view lockFocus]; + /* drawRect may have been called for say the minibuffer, and then clip path is for the minibuffer. But the display engine may draw more because we have set the frame as garbaged. So reset clip path to the whole @@ -1206,12 +1222,21 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen) external (RIF) call; for whole frame, called after update_window_end -------------------------------------------------------------------------- */ { + EmacsView *view = FRAME_NS_VIEW (f); + NSTRACE_WHEN (NSTRACE_GROUP_UPDATES, "ns_update_end"); /* if (f == MOUSE_HL_INFO (f)->mouse_face_mouse_frame) */ MOUSE_HL_INFO (f)->mouse_face_defer = 0; -} + block_input (); + + [view unlockFocus]; + [[view window] flushWindow]; + + unblock_input (); + ns_updating_frame = NULL; +} static BOOL ns_clip_to_rect (struct frame *f, NSRect *r, int n) @@ -1226,23 +1261,31 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen) { NSTRACE_RECT ("r", *r); - if ([NSView focusView] == FRAME_NS_VIEW (f)) - { - [[NSGraphicsContext currentContext] saveGraphicsState]; - if (n == 2) - NSRectClipList (r, 2); - else - NSRectClip (*r); - - return YES; - } - else + if (f != ns_updating_frame) { NSView *view = FRAME_NS_VIEW (f); - int i; - for (i = 0 ; i < n ; i++) - [view setNeedsDisplayInRect:r[i]]; + if (view != focus_view) + { + if (focus_view != NULL) + { + [focus_view unlockFocus]; + [[focus_view window] flushWindow]; + /* debug_lock--; */ + return YES; + } + if (view) + [view lockFocus]; + focus_view = view; + /* if (view) debug_lock++; */ + } } + [[NSGraphicsContext currentContext] saveGraphicsState]; + if (n == 2) + NSRectClipList (r, 2); + else + NSRectClip (*r); + gsaved = YES; + return YES; } return NO; @@ -1256,7 +1299,22 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen) { NSTRACE_WHEN (NSTRACE_GROUP_FOCUS, "ns_reset_clipping"); - [[NSGraphicsContext currentContext] restoreGraphicsState]; + if (gsaved) + { + [[NSGraphicsContext currentContext] restoreGraphicsState]; + gsaved = NO; + } + + if (f != ns_updating_frame) + { + if (focus_view != NULL) + { + [focus_view unlockFocus]; + [[focus_view window] flushWindow]; + focus_view = NULL; +/* debug_lock--; */ + } + } } --Multipart_Sun_Nov_25_18:14:18_2018-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="644a308b4e1513e04be9360e1586e14b32ec0159__2018_11_16.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvY3Jvc3NoYWlycy5lbCBiL2xpc3AvY3Jvc3NoYWlycy5lbApuZXcg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWMwNzkwCi0tLSAvZGV2L251bGwKKysr IGIvbGlzcC9jcm9zc2hhaXJzLmVsCkBAIC0wLDAgKzEsMTMwMyBAQAorOzs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Cis7OzsgQkVHSU4gbW9kaWZpY2F0aW9uIG9mIHRoZSBNdWx0aXBsZSBDdXJzb3Jz IGxpYnJhcnkgd3JpdHRlbiBieSAgTWFnbmFyIFN2ZWVuLgorCisoZGVmdmFyIHBhY2thZ2UtYXJj aGl2ZXMpCisKKyhkZWZ2YXIgbWMtLW1heC1jdXJzb3JzLW9yaWdpbmFsKQorKGRlZnZhciBtYy9t YXgtY3Vyc29ycykKKyhkZWZ2YXIgbWMtLW1heC1jdXJzb3JzLW9yaWdpbmFsKQorKGRlZnZhciBt Yy9tYXgtY3Vyc29ycykKKyhkZWZ2YXIgbWMvYWx3YXlzLXJ1bi1mb3ItYWxsKQorKGRlZnZhciBt Yy0tdGhpcy1jb21tYW5kKQorKGRlZnZhciBtYy9jbWRzLXRvLXJ1bi1vbmNlKQorKGRlZnZhciBt Yy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1mb3ItYWxsKQorKGRlZnZhciBtYy9jbWRzLXRvLXJ1bi1m b3ItYWxsKQorKGRlZnZhciBtYy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlKQorKGRlZnZhciBt Yy0tZXhlY3V0aW5nLWNvbW1hbmQtZm9yLWZha2UtY3Vyc29yKQorCisoZGVjbGFyZS1mdW5jdGlv biBtYy9tYWtlLWN1cnNvci1vdmVybGF5LWF0LXBvaW50ICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1j b3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG11bHRpcGxlLWN1cnNvcnMtbW9kZSAiZXh0Om11bHRp cGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9udW0tY3Vyc29ycyAiZXh0 Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9yZW1vdmUtZmFr ZS1jdXJzb3JzICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9u IG1jL2NyZWF0ZS1jdXJzb3ItaWQgImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xh cmUtZnVuY3Rpb24gbWMvc3RvcmUtY3VycmVudC1zdGF0ZS1pbi1vdmVybGF5ICJleHQ6bXVsdGlw bGUtY3Vyc29ycy1jb3JlIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG1jL21ha2UtcmVnaW9uLW92ZXJs YXktYmV0d2Vlbi1wb2ludC1hbmQtbWFyayAiZXh0Om11bHRpcGxlLWN1cnNvcnMtY29yZSIpCiso ZGVjbGFyZS1mdW5jdGlvbiBtYy9leGVjdXRlLWNvbW1hbmQtZm9yLWFsbC1mYWtlLWN1cnNvcnMg ImV4dDptdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvcHJvbXB0 LWZvci1pbmNsdXNpb24taW4td2hpdGVsaXN0ICJleHQ6bXVsdGlwbGUtY3Vyc29ycy1jb3JlIikK KyhkZWNsYXJlLWZ1bmN0aW9uIG1jL2FsbC1mYWtlLWN1cnNvcnMgImV4dDptdWx0aXBsZS1jdXJz b3JzLWNvcmUiKQorKGRlY2xhcmUtZnVuY3Rpb24gbWMvbWFyay1uZXh0LWxpa2UtdGhpcyAiZXh0 Om1jLW1hcmstbW9yZSIpCisoZGVjbGFyZS1mdW5jdGlvbiBtYy9tYXJrLXByZXZpb3VzLWxpa2Ut dGhpcyAgImV4dDptYy1tYXJrLW1vcmUiKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jL2J1 aWx0LWluLWN1cnNvcnMgKCkKKyJMb2FkIHRoZSBtb2RpZmljYXRpb25zIHRoYXQgZW5hYmxlIHRo ZSBtdWx0aXBsZS1jdXJzb3JzIHBhY2thZ2UgKE1hZ25hciBTdmVlbikKK3RvIHRha2UgYWR2YW50 YWdlIG9mIHRoZSBidWlsdC1pbiBmYWtlIGN1cnNvcnMuIgorCisgIChkZWZpbmUta2V5IGdsb2Jh bC1tYXAgW1MtbW91c2UtMV0gJ21jL2FkZC1jdXJzb3Itb24tY2xpY2spCisgIChkZWZpbmUta2V5 IGdsb2JhbC1tYXAgWz9cTS1kXSAnbWMvbWFyay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJk KQorICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIFs/XE0tRF0gJ21jL21hcmstcHJldmlvdXMtbGlr ZS10aGlzLWN5Y2xlLWZvcndhcmQpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgWz9ccy1kXSAn bWMvbWFyay1uZXh0LWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkKQorICAoZGVmaW5lLWtleSBnbG9i YWwtbWFwIFs/XHMtRF0gJ21jL21hcmstcHJldmlvdXMtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQp CisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAiPEMtcy0yNjg2MzIwNzE+IikgJ21jL21h cmstYWxsLWxpa2UtdGhpcykKKyAgKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJDLXMtZyIp ICdtYy9tYXJrLWFsbC1saWtlLXRoaXMpCisgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAi Uy1zLWQiKSAnbWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMtY3ljbGUtZm9yd2FyZCkKKyAgKGRl ZmluZS1rZXkgZ2xvYmFsLW1hcCAoa2JkICJDLWwiKSAnbWMvZWRpdC1lbmRzLW9mLWxpbmVzKQor ICAoZGVmaW5lLWtleSBnbG9iYWwtbWFwIChrYmQgIkMtUy1sIikgJ21jL2VkaXQtYmVnaW5uaW5n cy1vZi1saW5lcykKKworICAoYWRkLWhvb2sgJ211bHRpcGxlLWN1cnNvcnMtbW9kZS1kaXNhYmxl ZC1ob29rCisgICAgICAgICAgICAobGFtYmRhICgpIChraWxsLWxvY2FsLXZhcmlhYmxlICdtdWx0 aXBsZS1jdXJzb3JzLWNvbmYpKSkKKworICAoZGVmdmFyIG1jL3VzZS1idWlsdC1pbi1jdXJzb3Jz IHQKKyAgIldoZXRoZXIgdG8gdXNlIHRoZSBidWlsdC1pbiBmYWtlIGN1cnNvcnMuIikKKworICAo ZGVmdW4gbWMvY3JlYXRlLWZha2UtY3Vyc29yLWF0LXBvaW50ICgmb3B0aW9uYWwgaWQpCisgICAg IkFkZCBhIGZha2UgY3Vyc29yIGFuZCBwb3NzaWJseSBhIGZha2UgYWN0aXZlIHJlZ2lvbiBvdmVy bGF5IGJhc2VkIG9uIHBvaW50IGFuZCBtYXJrLgorICBTYXZlcyB0aGUgY3VycmVudCBzdGF0ZSBp biB0aGUgb3ZlcmxheSB0byBiZSByZXN0b3JlZCBsYXRlci4iCisgICAgKHVubGVzcyBtYy0tbWF4 LWN1cnNvcnMtb3JpZ2luYWwKKyAgICAgIChzZXRxIG1jLS1tYXgtY3Vyc29ycy1vcmlnaW5hbCBt Yy9tYXgtY3Vyc29ycykpCisgICAgKHdoZW4gbWMvbWF4LWN1cnNvcnMKKyAgICAgICh1bmxlc3Mg KDwgKG1jL251bS1jdXJzb3JzKSBtYy9tYXgtY3Vyc29ycykKKyAgICAgICAgKGlmICh5ZXMtb3It bm8tcCAoZm9ybWF0ICIlZCBhY3RpdmUgY3Vyc29ycy4gQ29udGludWU/ICIgKG1jL251bS1jdXJz b3JzKSkpCisgICAgICAgICAgICAoc2V0cSBtYy9tYXgtY3Vyc29ycyAocmVhZC1udW1iZXIgIkVu dGVyIGEgbmV3LCB0ZW1wb3JhcnkgbWF4aW11bTogIikpCisgICAgICAgICAgKG1jL3JlbW92ZS1m YWtlLWN1cnNvcnMpCisgICAgICAgICAgKGVycm9yICJBYm9ydGVkOiB0b28gbWFueSBjdXJzb3Jz IikpKSkKKyAgICAobGV0ICgob3ZlcmxheQorICAgICAgICAgICAgKGlmIG1jL3VzZS1idWlsdC1p bi1jdXJzb3JzCisgICAgICAgICAgICAgIChtYWtlLW92ZXJsYXkgKHBvaW50KSAocG9pbnQpKQor ICAgICAgICAgICAgICAobWMvbWFrZS1jdXJzb3Itb3ZlcmxheS1hdC1wb2ludCkpKSkKKyAgICAg IChvdmVybGF5LXB1dCBvdmVybGF5ICdtYy1pZCAob3IgaWQgKG1jL2NyZWF0ZS1jdXJzb3ItaWQp KSkKKyAgICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICd0eXBlICdmYWtlLWN1cnNvcikKKyAgICAg IChvdmVybGF5LXB1dCBvdmVybGF5ICdwcmlvcml0eSAxMDApCisgICAgICAobWMvc3RvcmUtY3Vy cmVudC1zdGF0ZS1pbi1vdmVybGF5IG92ZXJsYXkpCisgICAgICAod2hlbiAodXNlLXJlZ2lvbi1w KQorICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAncmVnaW9uLW92ZXJsYXkKKyAgICAgICAg ICAgICAgICAgICAgIChtYy9tYWtlLXJlZ2lvbi1vdmVybGF5LWJldHdlZW4tcG9pbnQtYW5kLW1h cmspKSkKKyAgICAgIG92ZXJsYXkpKQorCisgIChkZWZ1biBtYy9leGVjdXRlLXRoaXMtY29tbWFu ZC1mb3ItYWxsLWN1cnNvcnMtMSAoKQorICAgICJVc2VkIHdpdGggcG9zdC1jb21tYW5kLWhvb2sg dG8gZXhlY3V0ZSBzdXBwb3J0ZWQgY29tbWFuZHMgZm9yIGFsbCBjdXJzb3JzLgorICAtICBJdCB1 c2VzIHR3byBsaXN0cyBvZiBjb21tYW5kcyB0byBrbm93IHdoYXQgdG8gZG86IHRoZSBydW4tb25j ZQorICBsaXN0IGFuZCB0aGUgcnVuLWZvci1hbGwgbGlzdC4gSWYgYSBjb21tYW5kIGlzIGluIG5l aXRoZXIgb2YgdGhlc2UgbGlzdHMsCisgIGl0IHdpbGwgcHJvbXB0IGZvciB0aGUgcHJvcGVyIGFj dGlvbiBhbmQgdGhlbiBzYXZlIHRoYXQgcHJlZmVyZW5jZS4KKyAgLSAgU29tZSBjb21tYW5kcyBh cmUgc28gdW5zdXBwb3J0ZWQgdGhhdCB0aGV5IGFyZSBldmVuIHByZXZlbnRlZCBmb3IKKyAgdGhl IG9yaWdpbmFsIGN1cnNvciwgdG8gaW5mb3JtIGFib3V0IHRoZSBsYWNrIG9mIHN1cHBvcnQuIgor ICAgICh1bmxlc3MgbWMtLWV4ZWN1dGluZy1jb21tYW5kLWZvci1mYWtlLWN1cnNvcgorICAgICAg KGlmIChlcSAxIChtYy9udW0tY3Vyc29ycykpIDs7IG5vIGZha2UgY3Vyc29ycz8gZGlzYWJsZSBt Yy1tb2RlCisgICAgICAgICAgKG11bHRpcGxlLWN1cnNvcnMtbW9kZSAwKQorICAgICAgICAod2hl biB0aGlzLW9yaWdpbmFsLWNvbW1hbmQKKyAgICAgICAgICAobGV0ICgob3JpZ2luYWwtY29tbWFu ZCAob3IgbWMtLXRoaXMtY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29tbWFuZC1yZW1hcHBpbmcgdGhpcy1vcmlnaW5hbC1jb21tYW5kKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLW9yaWdpbmFsLWNvbW1hbmQpKSkKKyAg ICAgICAgICAgIDs7IHNraXAga2V5Ym9hcmQgbWFjcm9zLCBzaW5jZSB0aGV5IHdpbGwgZ2VuZXJh dGUgYWN0dWFsIGNvbW1hbmRzIHRoYXQgYXJlCisgICAgICAgICAgICA7OyBhbHNvIHJ1biBpbiB0 aGUgY29tbWFuZCBsb29wIC0gd2UnbGwgaGFuZGxlIHRob3NlIGxhdGVyIGluc3RlYWQuCisgICAg ICAgICAgICAod2hlbiAoZnVuY3Rpb25wIG9yaWdpbmFsLWNvbW1hbmQpCisgICAgICAgICAgICAg IDs7IGlmIGl0J3MgYSBsYW1iZGEsIHdlIGNhbid0IGtub3cgaWYgaXQncyBzdXBwb3J0ZWQgb3Ig bm90CisgICAgICAgICAgICAgIDs7IC0gc28gZ28gYWhlYWQgYW5kIGFzc3VtZSBpdCdzIG9rLCBi ZWNhdXNlIHdlJ3JlIGp1c3Qgb3B0aW1pc3RpYyBsaWtlIHRoYXQKKyAgICAgICAgICAgICAgKGlm IChvciAobm90IChzeW1ib2xwIG9yaWdpbmFsLWNvbW1hbmQpKQorICAgICAgICAgICAgICAgICAg ICAgIDs7IGxhbWJkYSByZWdpc3RlcmVkIGJ5IHNtYXJ0cmVwCisgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1wcmVmaXgtcCAiKCIgKHN5bWJvbC1uYW1lIG9yaWdpbmFsLWNvbW1hbmQpKSkK KyAgICAgICAgICAgICAgICAgIChtYy9leGVjdXRlLWNvbW1hbmQtZm9yLWFsbC1mYWtlLWN1cnNv cnMgb3JpZ2luYWwtY29tbWFuZCkKKyAgICAgICAgICAgICAgICA7OyBzbWFydHJlcCBgaW50ZXJu J3MgY29tbWFuZHMgaW50byBvd24gb2JhcnJheSB0byBoZWxwCisgICAgICAgICAgICAgICAgOzsg YGRlc2NyaWJlLWJpbmRpbmdzJy4gIFNvLCBsZXQncyByZS1gaW50ZXJuJyBoZXJlIHRvCisgICAg ICAgICAgICAgICAgOzsgbWFrZSB0aGUgY29tbWFuZCBjb21wYXJhYmxlIGJ5IGBlcScuCisgICAg ICAgICAgICAgICAgKHNldHEgb3JpZ2luYWwtY29tbWFuZCAoaW50ZXJuIChzeW1ib2wtbmFtZSBv cmlnaW5hbC1jb21tYW5kKSkpCisgICAgICAgICAgICAgICAgOzsgb3RoZXJ3aXNlIGl0J3MgYSBz eW1ib2wsIGFuZCB3ZSBjYW4gYmUgbW9yZSB0aG9yb3VnaAorICAgICAgICAgICAgICAgIChpZiAo Z2V0IG9yaWdpbmFsLWNvbW1hbmQgJ21jLS11bnN1cHBvcnRlZCkKKyAgICAgICAgICAgICAgICAg ICAgKG1lc3NhZ2UgIiVTIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBjdXJzb3JzJXMi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsLWNvbW1hbmQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGdldCBvcmlnaW5hbC1jb21tYW5kICdtYy0tdW5zdXBwb3J0 ZWQpKQorICAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCBvcmlnaW5hbC1jb21tYW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKG1lbXEgb3JpZ2luYWwtY29tbWFuZCBtYy0t ZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG5vdCAobWVtcSBvcmlnaW5hbC1jb21tYW5kIG1jL2NtZHMtdG8tcnVuLW9uY2UpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAob3IgbWMvYWx3YXlzLXJ1bi1mb3ItYWxsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWVtcSBvcmlnaW5hbC1jb21tYW5kIG1jLS1kZWZh dWx0LWNtZHMtdG8tcnVuLWZvci1hbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobWVtcSBvcmlnaW5hbC1jb21tYW5kIG1jL2NtZHMtdG8tcnVuLWZvci1hbGwpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWMvcHJvbXB0LWZvci1pbmNsdXNpb24taW4td2hp dGVsaXN0IG9yaWdpbmFsLWNvbW1hbmQpKSkKKyAgICAgICAgICAgICAgICAgICAgKG1jL2V4ZWN1 dGUtY29tbWFuZC1mb3ItYWxsLWZha2UtY3Vyc29ycyBvcmlnaW5hbC1jb21tYW5kKSkpKQorICAg ICAgICAgICAgICAod2hlbiBtYy91c2UtYnVpbHQtaW4tY3Vyc29ycworICAgICAgICAgICAgICAg IChzZXRxIG11bHRpcGxlLWN1cnNvcnMtY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgKG1h cGNhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICh4KSAobGlzdCAob3Zlcmxh eS1zdGFydCB4KSAiYmFyIiBuaWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAobWMvYWxs LWZha2UtY3Vyc29ycykpKSkpKSkpKSkKKworICAoZGVmdW4gbWMvbWFyay1uZXh0LWxpa2UtdGhp cy1jeWNsZS1mb3J3YXJkICgpCisgICJNYXJrcyBuZXh0IG9jY3VyZW5jZSBvZiB3b3JkIGxpa2Ug dGhpcyBhbmQgYWR2YW5jZXMgY3Vyc29yIHRvIHRoaXMgb2NjdXJyZW5jZSIKKyAgKGludGVyYWN0 aXZlKQorICAgIChtYy9tYXJrLW5leHQtbGlrZS10aGlzIDEpKQorCisgIChkZWZ1biBtYy9tYXJr LXByZXZpb3VzLWxpa2UtdGhpcy1jeWNsZS1mb3J3YXJkICgpCisgICJNYXJrcyBuZXh0IG9jY3Vy cmVuY2Ugb2Ygd29yZCBsaWtlIHRoaXMgYW5kIGFkdmFuY2VzIGN1cnNvciB0byB0aGlzIG9jY3Vy cmVuY2UiCisgIChpbnRlcmFjdGl2ZSkKKyAgICAobWMvbWFyay1wcmV2aW91cy1saWtlLXRoaXMg MSkpCisKKyAgKGFkZC10by1saXN0ICdtYy0tZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlICdtYy9t YXJrLW5leHQtbGlrZS10aGlzLWN5Y2xlLWZvcndhcmQpCisKKyAgKGFkZC10by1saXN0ICdtYy0t ZGVmYXVsdC1jbWRzLXRvLXJ1bi1vbmNlICdtYy9tYXJrLXByZXZpb3VzLWxpa2UtdGhpcy1jeWNs ZS1mb3J3YXJkKSkKKworKGV2YWwtYWZ0ZXItbG9hZCAibXVsdGlwbGUtY3Vyc29ycy1jb3JlIgor ICAnKHByb2duCisgICAgIChtYy9idWlsdC1pbi1jdXJzb3JzKSkpCisKKzs7OyMjI2F1dG9sb2Fk CisoZGVmdW4gbWMtaW5zdGFsbCAoKQorIlRvIHVzZSBtdWx0aXBsZS1jdXJzb3JzIGFmdGVyIHJl c3RhcnRpbmcgRW1hY3MsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgbGluZQorYXBwZWFy cyBzb21ld2hlcmUgaW4gdGhlIC5lbWFjcy9pbml0LmVsOiAgKHBhY2thZ2UtaW5pdGlhbGl6ZSki CisoaW50ZXJhY3RpdmUpCisgIChyZXF1aXJlICdwYWNrYWdlKQorICAoYWRkLXRvLWxpc3QgJ3Bh Y2thZ2UtYXJjaGl2ZXMgJygibWVscGEiIC4gImh0dHA6Ly9tZWxwYS5taWxrYm94Lm5ldC9wYWNr YWdlcy8iKSB0KQorICAocGFja2FnZS1pbml0aWFsaXplKQorICAocGFja2FnZS1yZWZyZXNoLWNv bnRlbnRzKQorICAoaWYgKGxvY2F0ZS1saWJyYXJ5ICJtdWx0aXBsZS1jdXJzb3JzLWNvcmUiKQor ICAgICh1bmxlc3MgKGZlYXR1cmVwICdtdWx0aXBsZS1jdXJzb3JzLWNvcmUpCisgICAgICAocmVx dWlyZSAnbXVsdGlwbGUtY3Vyc29ycy1jb3JlKSkKKyAgICAocGFja2FnZS1pbnN0YWxsICdtdWx0 aXBsZS1jdXJzb3JzKSkKKyAgKG1jL2J1aWx0LWluLWN1cnNvcnMpKQorCis7OzsgRU5EIG1vZGlm aWNhdGlvbiBvZiB0aGUgTXVsdGlwbGUgQ3Vyc29ycyBsaWJyYXJ5IHdyaXR0ZW4gYnkgIE1hZ25h ciBTdmVlbi4KKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgQkVHSU4gY3Jvc3NoYWly cy5lbAorCis7OzsgQlVJTFQtSU4gVkFSSUFCTEVTOgorCis7OzsgVGhlIHZhcmlhYmxlcyBgY3Jv c3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyJyBhbmQgYGNyb3NzaGFpcnMtdmVydGljYWwtcnVsZXIn Cis7OzsgbWF5IGJlIHVzZWQgdG8gc3VwcHJlc3MgZWl0aGVyIG9yIGJvdGggb2YgdGhlIHJ1bGVy cyB0aGF0IGNyZWF0ZSBjcm9zc2hhaXJzLgorOzs7Cis7OzsgKHNldHEgY3Jvc3NoYWlycy1ob3Jp em9udGFsLXJ1bGVyIG5pbCkKKzs7OworOzs7IChzZXRxIGNyb3NzaGFpcnMtdmVydGljYWwtcnVs ZXIgbmlsKQorCis7OzsgVGhlIHZhcmlhYmxlIGBtYy1yZWFsLWZha2UtY3Vyc29yJyBjb250cm9s cyB3aGF0IHR5cGUgb2YgY3Vyc29yIHdpbGwKKzs7OyBiZSBkcmF3biBpbiBsaWV1IG9mIHRoZSBy ZWFsIGN1cnNvciB3aGVuIGNyb3NzaGFpcnMgYXJlIGFjdGl2ZS4gIFRoZSBzdHJpbmcKKzs7OyAi bm8iIHdpbGwgY2F1c2UgdGhlIGNyZWF0aW9uIG9mIGEgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwg YmFyIGZvciBhIHNlYW1sZXNzCis7OzsgYXBwZWFyYW5jZS4KKzs7OworOzs7IChzZXRxIG1jLXJl YWwtZmFrZS1jdXJzb3IgIm5vIikKKworOzs7IFdoZW4gYGNyb3NzaGFpcnMtZHJhdy1mb3J0aHdp dGgnIGlzIG5vbi1uaWwsIGRyYXcgY3Jvc3NoYWlycyB3aGVuZXZlciB0aGUKKzs7OyByZWFsIGN1 cnNvciB3b3VsZCBvcmRpbmFyaWx5IGJlIGRyYXduLCB3aGljaCBpcyBzb21ldGltZXMgbW9yZSB0 aGFuIG9uY2UKKzs7OyBldmVyeSBjb21tYW5kIGxvb3AuICBXaGVuIGBjcm9zc2hhaXJzLWRyYXct Zm9ydGh3aXRoJyBpcyBuaWwsIGNyb3NzaGFpcnMKKzs7OyB3aWxsIGJlIHBsYWNlZCBvbiBhbiBp ZGxlLXRpbWVyLiAgSWYgdGhpcyB2YXJpYWJsZSBpcyByZXNldCB3aGlsZSBgKy1tb2RlJworOzs7 IGlzIGVuYWJsZWQsIHRoZW4gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB0dXJuIG9mZi9vbiBgKy1t b2RlJyB0byByZXNldAorOzs7IGZ1bmN0aW9ucyBhdHRhY2hlZCB0byB0aGUgYHBvc3QtY29tbWFu ZC1ob29rJy4gIFRoZSBkZWZhdWx0IGlzIG5pbC4KKzs7OworOzs7IChzZXRxIGNyb3NzaGFpcnMt ZHJhdy1mb3J0aHdpdGggdCkKKworOzs7IFRoZSB2YXJpYWJsZXMgYG11bHRpcGxlLWN1cnNvcnMt aW5hY3RpdmUtd2luZG93cycgYW5kIGBjcm9zc2hhaXJzLWluYWN0aXZlLXdpbmRvd3MnCis7Ozsg bWF5IGJlIHVzZWQgdG8gZGlzcGxheSBtdWx0aXBsZSBjdXJzb3JzIGFuZC9vciBjcm9zc2hhaXJz IGluIHRoZSBpbmFjdGl2ZQorOzs7IHdpbmRvd3MuICBUaGUgZGVmYXVsdCBpcyBub24tbmlsLiAg QSBub24tbmlsIHZhbHVlIHdpbGwgdHVybiBvbiB0aGlzIGZlYXR1cmUuCis7OzsKKzs7OyAoc2V0 cSBtdWx0aXBsZS1jdXJzb3JzLWluYWN0aXZlLXdpbmRvd3MgbmlsKQorOzs7Cis7OzsgKHNldHEg Y3Jvc3NoYWlycy1pbmFjdGl2ZS13aW5kb3dzIG5pbCkKKworOzs7IFdoZW4gYG11bHRpcGxlLWN1 cnNvcnMtZHJhdy1mb3J0aHdpdGgnIGlzIG5vbi1uaWwsIGRyYXcgY3Jvc3NoYWlycyB3aGVuZXZl ciB0aGUKKzs7OyByZWFsIGN1cnNvciB3b3VsZCBvcmRpbmFyaWx5IGJlIGRyYXduLCB3aGljaCBp cyBzb21ldGltZXMgbW9yZSB0aGFuIG9uY2UKKzs7OyBldmVyeSBjb21tYW5kIGxvb3AuICBXaGVu IGBtdWx0aXBsZS1jdXJzb3JzLWRyYXctZm9ydGh3aXRoJyBpcyBuaWwsIGNyb3NzaGFpcnMKKzs7 OyB3aWxsIGJlIHBsYWNlZCBvbiBhbiBpZGxlLXRpbWVyLiAgSWYgdGhpcyB2YXJpYWJsZSBpcyBy ZXNldCB3aGlsZSBgbXVsdGlwbGUtY3Vyc29ycy1tb2RlJworOzs7IGlzIGVuYWJsZWQsIHRoZW4g aXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB0dXJuIG9mZi9vbiBgbXVsdGlwbGUtY3Vyc29ycy1tb2Rl JyB0byByZXNldAorOzs7IGZ1bmN0aW9ucyBhdHRhY2hlZCB0byB0aGUgYHBvc3QtY29tbWFuZC1o b29rJy4gIFRoZSBkZWZhdWx0IGlzIG5vbi1uaWwuCis7OzsKKzs7OyAoc2V0cSBtdWx0aXBsZS1j dXJzb3JzLWRyYXctZm9ydGh3aXRoIG5pbCkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7 OzsgRkFDRVMKKworKGRlZmdyb3VwICstbW9kZSBuaWwKKyAgIkZhY2VzIGZvciB0aGUgdmVydGlj YWwgcnVsZXIuIgorICA6Z3JvdXAgJ2NvbnZlbmllbmNlKQorCisoZGVmZmFjZSArLWZvcm0tZmVl ZC1mYWNlCisgIChjb25kCisgICAgKChlcSBzeXN0ZW0tdHlwZSAnZGFyd2luKQorICAgICAgJygo dCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpKQorICAgICgoZXEgc3lzdGVtLXR5cGUgJ3dpbmRv d3MtbnQpCisgICAgICAnKCh0ICg6Zm9yZWdyb3VuZCAibWFnZW50YSIpKSkpKQorICAiRmFjZSBm b3IgYCstZm9ybS1mZWVkLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICst bmV3bGluZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICIjNTU1NTU1IikpKQorICAiRmFjZSBm b3IgYCstbmV3bGluZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXNw YWNlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIkRhcmtSZWQiKSkpCisgICJGYWNlIGZvciBg Ky1zcGFjZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXRhYi1mYWNl CisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQorICAiRmFjZSBmb3IgYCstdGFiLWZhY2Un LiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstdGFiLXNwYWNlci1mYWNlCisgICco KHQgKDpiYWNrZ3JvdW5kICJncmV5MjUiKSkpCisgICJGYWNlIGZvciBgKy10YWItc3BhY2VyLWZh Y2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstbGVmdC1mcmluZ2UtY3VycmVu dC1saW5lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQorICAiRmFjZSBmb3Ig YCstbGVmdC1mcmluZ2UtY3VycmVudC1saW5lLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisK KyhkZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC1vbmUtZmFjZQorICAnKCh0ICg6Zm9y ZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkZhY2UgZm9yIGArLWxlZnQtZnJpbmdlLWN1cnNvci1hbHQt b25lLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstbGVmdC1mcmluZ2Ut Y3Vyc29yLWFsdC10d28tZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQorICAiRmFj ZSBmb3IgYCstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC10d28tZmFjZScuIgorICA6Z3JvdXAgJyst bW9kZSkKKworKGRlZmZhY2UgKy1ob2xsb3ctcmVjdGFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVn cm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1ob2xsb3ctcmVjdGFuZ2xlLWZh Y2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstYmFja3NsYXNoLWZhY2UKKyAg JygodCAoOmZvcmVncm91bmQgImdyZXkyNSIpKSkKKyAgIkZhY2UgZm9yIGArLWJhY2tzbGFzaC1m YWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1xdWVzdGlvbi1t YXJrLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQorICAiRmFjZSBmb3IgYCst ZnJpbmdlLXF1ZXN0aW9uLW1hcmstZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZh Y2UgKy1mcmluZ2UtZXhjbGFtYXRpb24tbWFyay1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJj eWFuIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmstZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtbGVmdC1hcnJvdy1mYWNlCisg ICcoKHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtbGVm dC1hcnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1y aWdodC1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJPcmFuZ2VSZWQiKSkpCisgICJG YWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1mcmluZ2UtdXAtYXJyb3ctZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAi Um95YWxCbHVlIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLXVwLWFycm93LWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWRvd24tYXJyb3ctZmFjZQorICAn KCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1kb3duLWFy cm93LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWxlZnQt Y3VybHktYXJyb3ctZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQorICAiRmFj ZSBmb3IgYCstZnJpbmdlLWxlZnQtY3VybHktYXJyb3ctZmFjZScuIgorICA6Z3JvdXAgJystbW9k ZSkKKworKGRlZmZhY2UgKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3ctZmFjZQorICAnKCh0ICg6 Zm9yZWdyb3VuZCAiIzNjM2MzYyIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdodC1jdXJs eS1hcnJvdy1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1s ZWZ0LXRyaWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInJlZCIpKSkKKyAgIkZhY2Ug Zm9yIGArLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisK KyhkZWZmYWNlICstZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgInllbGxvdyIpKSkKKyAgIkZhY2UgZm9yIGArLWZyaW5nZS1yaWdodC10cmlhbmdsZS1mYWNl Jy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS10b3AtbGVmdC1hbmds ZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhIikpKQorICAiRmFjZSBmb3IgYCst ZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstZnJpbmdlLXRvcC1yaWdodC1hbmdsZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJv cmFuZ2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlLWZhY2UnLiIK KyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWJvdHRvbS1sZWZ0LWFuZ2xl LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgKy1m cmluZ2UtYm90dG9tLWxlZnQtYW5nbGUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xlLWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgIm1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtYm90dG9tLXJpZ2h0LWFuZ2xl LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWxlZnQtYnJh Y2tldC1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCisgICJGYWNlIGZvciBg Ky1mcmluZ2UtbGVmdC1icmFja2V0LWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZm YWNlICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3Jl ZW4iKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtYnJhY2tldC1mYWNlJy4iCisgIDpn cm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlLWZhY2UK KyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmlu Z2UtZmlsbGVkLXJlY3RhbmdsZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFj ZSArLWZyaW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0 cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmluZ2UtaG9sbG93LXNxdWFyZS1mYWNlJy4iCisg IDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UK KyAgJygodCAoOmZvcmVncm91bmQgImNoYXJ0cmV1c2UiKSkpCisgICJGYWNlIGZvciBgKy1mcmlu Z2UtZmlsbGVkLXNxdWFyZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSAr LWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjaGFydHJl dXNlIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWhvcml6b250YWwtYmFyLWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstZnJpbmdlLWVtcHR5LWxpbmUtZmFjZQorICAn KCh0ICg6Zm9yZWdyb3VuZCAiRGFya0dyZWVuIikpKQorICAiRmFjZSBmb3IgYCstZnJpbmdlLWVt cHR5LWxpbmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMt b25lLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBg Ky1wYXJlbnMtb25lLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFy ZW5zLXR3by1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJyZWQiKSkpCisgICJGYWNlIGZvciBg Ky1wYXJlbnMtdHdvLWZhY2UnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFy ZW5zLXRocmVlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgInllbGxvdyIpKSkKKyAgIkZhY2Ug Zm9yIGArLXBhcmVucy10aHJlZS1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFj ZSArLXBhcmVucy1mb3VyLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQorICAi RmFjZSBmb3IgYCstcGFyZW5zLWZvdXItZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1wYXJlbnMtZml2ZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5kICJjeWFuIikpKQor ICAiRmFjZSBmb3IgYCstcGFyZW5zLWZpdmUtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKwor KGRlZmZhY2UgKy1wYXJlbnMtc2l4LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIp KSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy1zaXgtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkK KworKGRlZmZhY2UgKy1wYXJlbnMtc2V2ZW4tZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAicHVy cGxlIikpKQorICAiRmFjZSBmb3IgYCstcGFyZW5zLXNldmVuLWZhY2UnLiIKKyAgOmdyb3VwICcr LW1vZGUpCisKKyhkZWZmYWNlICstcGFyZW5zLWVpZ2h0LWZhY2UKKyAgJygodCAoOmZvcmVncm91 bmQgImJsdWUiKSkpCisgICJGYWNlIGZvciBgKy1wYXJlbnMtZWlnaHQtZmFjZScuIgorICA6Z3Jv dXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1wYXJlbnMtbmluZS1mYWNlCisgICcoKHQgKDpmb3Jl Z3JvdW5kICJicm93biIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy1uaW5lLWZhY2UnLiIKKyAg Omdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstcGFyZW5zLXRlbi1mYWNlCisgICcoKHQgKDpm b3JlZ3JvdW5kICJ3aGl0ZSIpKSkKKyAgIkZhY2UgZm9yIGArLXBhcmVucy10ZW4tZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgVkFSSUFC TEVTCisKKyhkZWZ2YXIgKy1tb2RlKQorCisoZGVmdmFyICstZmlsbC1jb2x1bW4gdAorIldoZW4g bm9uLW5pbCwgZGlzcGxheSBhIHZpc2libGUgZmlsbCBjb2x1bW4gaW5kaWNhdG9yLiAgSWYgYG1j LWZpbGwtY29sdW1uLW1vZGUnCitpcyBhY3RpdmF0ZSB3aGVuIGArLW1vZGUnIGlzIHR1cm5lZCBv biwgdGhlIGZvcm1lciB3aWxsIGJlIHR1cm5lZCBvZmYuIikKKworKGRlZnZhciArLWJ1ZmZlci1k aXNwbGF5LXRhYmxlCisgIChsZXQqICgoZmYtY2hhciA/XHUwMDQ2KQorICAgICAgICAgKGRpc3Bs YXktdGFibGUgKG1ha2UtZGlzcGxheS10YWJsZSkpCisgICAgICAgICAoZ2x5cGgtZm9ybS1mZWVk IChtYWtlLWdseXBoLWNvZGUgZmYtY2hhciAnKy1mb3JtLWZlZWQtZmFjZSkpCisgICAgICAgICAo Z2x5cGgtcGlsY3JvdyAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJystbmV3bGluZS1mYWNlKSkK KyAgICAgICAgIChnbHlwaC1zcGFjZSAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjcgJystc3BhY2Ut ZmFjZSkpCisgICAgICAgICAoZ2x5cGgtdGFiIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCQiAnKy10 YWItZmFjZSkpCisgICAgICAgICAoZ2x5cGgtdGFiLXNwYWNlciAobWFrZS1nbHlwaC1jb2RlID9c dCAnKy10YWItc3BhY2VyLWZhY2UpKSkKKyAgICAoYXNldCBkaXNwbGF5LXRhYmxlID9cbiBgWyxn bHlwaC1waWxjcm93ID9cbl0pCisgICAgKGFzZXQgZGlzcGxheS10YWJsZSA/XGYgYFssZ2x5cGgt Zm9ybS1mZWVkICxnbHlwaC1mb3JtLWZlZWRdKQorICAgIDs7OyBtaW5pbXVtIHRhYi13aWR0aCBp cyBgMmAKKyAgICA7OyAoYXNldCBkaXNwbGF5LXRhYmxlID9cdCBgWyxnbHlwaC10YWIgP1x0XSkK KyAgICAoYXNldCBkaXNwbGF5LXRhYmxlID9cdCBgWyxnbHlwaC10YWIgLGdseXBoLXRhYi1zcGFj ZXJdKQorICAgIDs7OyB0YWItd2lkdGggYWx3YXlzIGVxdWFscyBgMWAKKyAgICA7OyAoYXNldCBk aXNwbGF5LXRhYmxlID9cdCBgWyxnbHlwaC10YWJdKQorICAgIChhc2V0IGRpc3BsYXktdGFibGUg P1xzIGBbLGdseXBoLXNwYWNlXSkKKyAgICBkaXNwbGF5LXRhYmxlKQorICAiVGhlIGBidWZmZXIt ZGlzcGxheS10YWJsZScgdGhhdCBpcyB1c2VkIHdoZW4gYCstbW9kZScgaXMgYWN0aXZlLiIpCisK KyhkZWZ2YXIgKy10aW1lci12YXIgbmlsCisiVGltZXIgdXNlZCB0byBoaWdobGlnaHQgY3VycmVu dCBjb2x1bW4gd2hlbmV2ZXIgRW1hY3MgaXMgaWRsZS4iKQorCisoZGVmdmFyICstaWRsZS10aW1l ci1zZWNvbmRzIDAuNQorICAiVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSBk cmF3aW5nIGNyb3NzaGFpcnMgd2hlbiB0aGUgdmFyaWFibGUKK2Bjcm9zc2hhaXJzLWRyYXctZm9y dGh3aXRoJyBoYXMgYSBuaWwgdmFsdWUuIikKKworKGRlZnZhciArLXRydW5jYXRlLWxpbmVzLW1h am9yLW1vZGVzICcoKQorICAiTGlzdCBvZiBtYWpvciBtb2RlcyB3ZXJlIHRydW5jYXRlIGxpbmVz IHNoYWxsIGJlIGVuYWJsZWQuIikKKworKGRlZnZhciArLXRydW5jYXRlLWxpbmVzLWRlcml2ZWQt bW9kZXMgJyhwcm9nLW1vZGUpCisgICJMaXN0IG9mIGRlcml2ZWQgbW9kZXMgd2VyZSB0cnVuY2F0 ZSBsaW5lcyBzaGFsbCBiZSBlbmFibGVkLiIpCisKKyhkZWZ2YXIgKy0tc2F2ZWQtc3RhdGUgbmls CisgICJVc2VkIHRvIHN0b3JlL3Jlc3RvcmUgY2VydGFpbiBidWZmZXItbG9jYWwgdmFyaWFibGVz IHdoZW4gZW5hYmxpbmcvZGlzYWJsaW5nKQorYCstbW9kZScuIikKKworKGRlZnZhciArLXBhcmVu cy1pbmFjdGl2ZS13aW5kb3dzIHQKKyAgIldoZW4gbm9uLW5pbCwgZGlzcGxheSBtYXRjaGluZyBw YXJlbnRoZXNlcyBpbiB0aGUgaW5hY3RpdmUgd2luZG93LiIpCisobWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJystcGFyZW5zLWluYWN0aXZlLXdpbmRvd3MpCisKKyhkZWZ2YXIgKy1wYXJlbnMt ZXhjbHVzaW9ucyAnKG13aGVlbC1zY3JvbGwpCisgICJMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHdp bGwgcHJldmVudCBtYXRjaGluZyBwYXJlbnRoZXNlcyBmcm9tIHVwZGF0aW5nLiIpCisKKyhkZWZ2 YXIgKy1wYXJlbnMtZnJvbS1mbiBuaWwKKyAgIkN1c3RvbSBmdW5jdGlvbiB0byBkZXRlcm1pbmUg aG93IGZhciBiYWNrIHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZQorc2hvdWxkIGAr LXBhcmVucy1mbicgc2VhcmNoIGZvciBtYXRjaGluZyBwYXJlbnRoZXNlcyAtLSB0aGUgcmVzdWx0 IHRocm93biBmcm9tCit0aGlzIGN1c3RvbSBmdW5jdGlvbiBtdXN0IGJlIGEgYnVmZmVyIHBvaW50 LiAgSWYgbm8gY3VzdG9tIGZ1bmN0aW9uIGlzIGRlZmluZWQsCit0aGVuIGArLXBhcmVucy1mbicg d2lsbCB1c2UgYHBvaW50LW1pbicuIikKKworKGRlZnZhciArLXBhcmVucy1vdmVybGF5cy1leGlz dC1wIG5pbAorIlNpbXBsZSB0ZXN0IHRvIHNlZSB3aGV0aGVyIHRoZSBwYXJlbnMgb3ZlcmxheXMg aGF2ZSBiZWVuIHBsYWNlZC4KK1RoaXMgY291bGQgYmUgYSBkaWZmZXJlbnQga2luZCBvZiB0ZXN0 IC0tIGUuZy4sIHNjYW5uaW5nIGZvciB0aGUKK3ByZXNlbmNlIG9mIHNwZWNpZmljIG92ZXJsYXlz LCBidXQgcGVyaGFwcyB0aGF0IGlzIG92ZXJraWxsLiIpCisobWFrZS12YXJpYWJsZS1idWZmZXIt bG9jYWwgJystcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXApCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7OworOzs7IEZVTkNUSU9OUworCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIG1jLXRlc3QgKCkK KyJEcmF3IGZha2UgY3Vyc29ycyBhdCBhbGwgUE9TIGRlZmluZWQgaW4gdGhlIGBtdWx0aXBsZS1j dXJzb3JzLWNvbmYnLiAgTXVsdGlwbGUgZmFrZSBjdXJzb3JzCithcmUgc3VwcG9ydGVkIGJ5IEdV SSB2ZXJzaW9ucyBvZiBFbWFjcyBidWlsdCBmb3IgWCwgV2luZG93cyBhbmQgT1NYLgorUG9wdWxh ciBmb3JtcyBvZiBzcGVjaWZ5aW5nIGNvbG9ycyBzdWNoIGFzIFwicmVkXCIgYW5kIFwiI0ZGMDAw MFwiIGFyZSBub3cKK3N1cHBvcnRlZCwgYXMgd2VsbCBhcyBMU0wgY29sb3IgdmVjdG9ycyBzdWNo IGFzIFsxLjAgMC4wIDAuMF0uICBGb3IgdGhvc2UgdXNlcnMKK3dobyBjaG9vc2UgdGhlIGZvcm1l ciBmYW1pbGlhciBtZXRob2RzIG9mIHNwZWNpZnlpbmcgY29sb3JzIHdpdGggc3RyaW5ncywKK2Bt Y19jb2xvcl92ZWN0b3JfY2FsY3VsYXRlJyB3aWxsIGNvbnZlcnQgdGhvc2Ugc3RyaW5ncyB0byBM U0wgY29sb3IgdmVjdG9ycy4KK1RoZSBjb2xvciB2ZWN0b3JzIGFyZSBjb21tb25seSByZWZlcnJl ZCB0byBhcyBMU0wgKFRoZSBMaW5kZW4gU2NyaXB0aW5nIExhbmd1YWdlKS4KK2Buc3Rlcm0ubScg dXNlcyBgTlNDb2xvcicsIHdoaWNoIHdvcmtzIHdlbGwgd2l0aCBMU0wuICBgdzMydGVybS5jJyB1 c2VzCitgUEFMRVRURVJHQicgb3IgYFJHQicsIGFuZCB0aGUgY29udmVyc2lvbiBmcm9tIExTTCBp cyBkb25lIGludGVybmFsbHkgYnkKK211bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgTFNM IGNvbG9yIHZlY3RvciBieSAyNTUuICBgeHRlcm0uYycgdXNlcworYHhfbWFrZV90cnVlY29sb3Jf cGl4ZWwnLCB3aGljaCB1c2VzIDE2LWJpdCBSR0IgLS0gdGhlIGNvbnZlcnNpb24gZnJvbSBMU0wK K2hhcHBlbnMgaW50ZXJuYWxseSBieSBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIExT TCBjb2xvciB2ZWN0b3IgYnkgNjU1MzUuIgorKGludGVyYWN0aXZlKQorICAobGV0ICgoYnVmZmVy IChnZXQtYnVmZmVyLWNyZWF0ZSAiKk1DLVRFU1QqIikpKQorICAgICh3aXRoLWN1cnJlbnQtYnVm ZmVyIGJ1ZmZlcgorICAgICAgKGVyYXNlLWJ1ZmZlcikKKyAgICAgIChpbnNlcnQgIlRoaXMgaXMg YSB0ZXN0ISIpCisgICAgICAoc2V0cSBtdWx0aXBsZS1jdXJzb3JzLWNvbmYgJygoMSAiaGJhciIg Im1hZ2VudGEiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIgImJhciIg InB1cnBsZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMyAiYm94IiAi IzAwRkYwMCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCAiaG9sbG93 IiAiIzAwMDBGRiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSAoImhi YXIiIDMpIFsxLjAgMC4wIDEuMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoNiAoImJhciIgMykgWzAuMCAxLjAgMS4wXSkpKSkKKyAgICAoc2VsZWN0LXdpbmRvdyAoZGlz cGxheS1idWZmZXIgYnVmZmVyKSkKKyAgICA7OzsgVGhlIHRyaWdnZXIgaW4gYGtleWJvYXJkLmNg IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBleGFtcGxlLCBzbyB3ZQorICAgIDs7OyBmb3JjZSB0 aGUgbXVsdGlwbGUgY3Vyc29ycyB0byBiZSBkcmF3bi4KKyAgICAobWMtYWN0aXZhdGUtbXVsdGlw bGUtY3Vyc29ycyAoc2VsZWN0ZWQtd2luZG93KSkpKQorCisoZGVmdW4gKy10aW1lci1mbiAoKQor IlNpbmNlIHRoaXMgZmlyZXMgZ2xvYmFsbHksIHdlIG11c3QgY29udHJvbCB3aGljaCBidWZmZXJz IGNyb3NzaGFpcnMgYXBwZWFyIGluLiIKKyAgKHdoZW4gKy1tb2RlCisgICAgKHVubGVzcyAobWVt cSBsYXN0LWNvbW1hbmQgKy1wYXJlbnMtZXhjbHVzaW9ucykKKyAgICAgICgrLXBhcmVucy1mbikp CisgICAgKHdoZW4gKy10aW1lci12YXIKKyAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVs cSArLXRpbWVyLXZhciB0aW1lci1pZGxlLWxpc3QpKQorICAgICAgKHNldHEgKy10aW1lci12YXIg bmlsKSkKKyAgICAodW5sZXNzIGNyb3NzaGFpcnMtZHJhdy1mb3J0aHdpdGgKKyAgICAgIChtYy1h Y3RpdmF0ZS1jcm9zc2hhaXJzIChzZWxlY3RlZC13aW5kb3cpKSkKKyAgICAod2hlbiAoYW5kICst ZmlsbC1jb2x1bW4gKG51bGwgbWMtZmlsbC1jb2x1bW4tZHJhdy1mb3J0aHdpdGgpKQorICAgICAg KG1jLWFjdGl2YXRlLWZpbGwtY29sdW1uIChzZWxlY3RlZC13aW5kb3cpKSkpKQorCisoZGVmdW4g Ky1kcmF3LWZvcnRod2l0aCAoKQorICAiRm9yY2UgYm90aCBydWxlcnMgdG8gYmUgZHJhd24vcmVk cmF3bi4iCisgICgrLWRyYXctY3Jvc3NoYWlycyAnZm9yY2UpKQorCisoZGVmdW4gKy1kcmF3LWNy b3NzaGFpcnMgKCZvcHRpb25hbCBmb3JjZSkKKyAgKHdoZW4gKy1tb2RlCisgICAgKHdoZW4gKy10 aW1lci12YXIKKyAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSArLXRpbWVyLXZhciB0 aW1lci1pZGxlLWxpc3QpKQorICAgICAgKHNldHEgKy10aW1lci12YXIgbmlsKSkKKyAgICAodW5s ZXNzIChtZW1xIHRoaXMtY29tbWFuZCArLXBhcmVucy1leGNsdXNpb25zKQorICAgICAgKCstZGVs ZXRlLXBhcmVucy1vdmVybGF5cykpCisgICAgKGlmIGZvcmNlCisgICAgICAocHJvZ24KKyAgICAg ICAgKCstcGFyZW5zLWZuKQorICAgICAgICAodW5sZXNzIGNyb3NzaGFpcnMtZHJhdy1mb3J0aHdp dGgKKyAgICAgICAgICAobWMtYWN0aXZhdGUtY3Jvc3NoYWlycyAoc2VsZWN0ZWQtd2luZG93KSkp CisgICAgICAgICh3aGVuIChhbmQgKy1maWxsLWNvbHVtbiAobnVsbCBtYy1maWxsLWNvbHVtbi1k cmF3LWZvcnRod2l0aCkpCisgICAgICAgICAgKG1jLWFjdGl2YXRlLWZpbGwtY29sdW1uIChzZWxl Y3RlZC13aW5kb3cpKSkpCisgICAgICAoc2V0cSArLXRpbWVyLXZhciAocnVuLXdpdGgtaWRsZS10 aW1lciArLWlkbGUtdGltZXItc2Vjb25kcyBuaWwgIycrLXRpbWVyLWZuKSkpKSkKKworOzs7IyMj YXV0b2xvYWQKKyhkZWZpbmUtbWlub3ItbW9kZSArLW1vZGUKKyJNaW5vciBtb2RlIGZvciBkaXNw bGF5aW5nIGEgaG9yaXpvbnRhbCBydWxlci4iCisgIDppbml0LXZhbHVlIG5pbAorICA6bGlnaHRl ciAiICsiCisgIDprZXltYXAgbmlsCisgIDpnbG9iYWwgbmlsCisgIDpncm91cCAnKy1tb2RlCisg IChjb25kCisgICAgKCstbW9kZQorICAgICAgOzs7IGArLW1vZGUnIGhhcyB0aGUgYWJpbGl0eSB0 byBhbHNvIGRpc3BsYXkgYSBmaWxsIGNvbHVtbiBpbmRpY2F0b3IuCisgICAgICA7OzsgU2VlIHRo ZSB2YXJpYWJsZSBgKy1maWxsLWNvbHVtbicuCisgICAgICAod2hlbiBtYy1maWxsLWNvbHVtbi1t b2RlCisgICAgICAgIChtYy1maWxsLWNvbHVtbi1tb2RlIC0xKSkKKyAgICAgICh3aGVuIChhbmQg Z2xvYmFsLWVsZG9jLW1vZGUKKyAgICAgICAgICAgICAgICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5 LXAgJ2FueSkKKyAgICAgICAgICAgICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQp KSkKKyAgICAgICAgKGdsb2JhbC1lbGRvYy1tb2RlIC0xKSkKKyAgICAgICh3aGVuIChhbmQgaml0 LWxvY2stY29udGV4dC10aW1lcgorICAgICAgICAgICAgICAgICAoY2FsbGVkLWludGVyYWN0aXZl bHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICco NCkpKQorICAgICAgICAod2hlbiAodGltZXJwIGppdC1sb2NrLWNvbnRleHQtdGltZXIpCisgICAg ICAgICAgKGNhbmNlbC10aW1lciBqaXQtbG9jay1jb250ZXh0LXRpbWVyKSkKKyAgICAgICAgOzsg KHNldHEgaml0LWxvY2stY29udGV4dC10aW1lciAocnVuLXdpdGgtaWRsZS10aW1lciA1LjAgJ3Jl cGVhdCAnaml0LWxvY2stY29udGV4dC1mb250aWZ5KSkKKyAgICAgICAgKHNldHEgaml0LWxvY2st Y29udGV4dC10aW1lciBuaWwpKQorICAgICAgKHdoZW4gKGFuZCAoY2FsbGVkLWludGVyYWN0aXZl bHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICco NCkpKQorICAgICAgICAod2hlbiAodGltZXJwIHVuZG8tYXV0by1jdXJyZW50LWJvdW5kYXJ5LXRp bWVyKQorICAgICAgICAgIChjYW5jZWwtdGltZXIgdW5kby1hdXRvLWN1cnJlbnQtYm91bmRhcnkt dGltZXIpKQorICAgICAgICAoZnNldCAndW5kby1hdXRvLS11bmRvYWJsZS1jaGFuZ2UKKyAgICAg ICAgICAgICAgKGxhbWJkYSAoKSAoYWRkLXRvLWxpc3QgJ3VuZG8tYXV0by0tdW5kb2FibHktY2hh bmdlZC1idWZmZXJzIChjdXJyZW50LWJ1ZmZlcikpKSkKKyAgICAgICAgKGZzZXQgJ3VuZG8tYXV0 by1hbWFsZ2FtYXRlICdpZ25vcmUpKQorICAgICAgKHdoZW4gYmxpbmstY3Vyc29yLW1vZGUKKyAg ICAgICAgKGJsaW5rLWN1cnNvci1tb2RlIC0xKQorICAgICAgICAod2hlbiAobWVtcSAnYmxpbmst Y3Vyc29yLWNoZWNrIHBvc3QtY29tbWFuZC1ob29rKQorICAgICAgICAgIChyZW1vdmUtaG9vayAn cG9zdC1jb21tYW5kLWhvb2sgJ2JsaW5rLWN1cnNvci1jaGVjaykpKQorICAgICAgKHdoZW4gKGFu ZCAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAoZXF1YWwg Y3VycmVudC1wcmVmaXgtYXJnICcoNCkpCisgICAgICAgICAgICAgICAgIChudWxsIGNyb3NzaGFp cnMtZHJhdy1mb3J0aHdpdGgpKQorICAgICAgICAoc2V0cSBjcm9zc2hhaXJzLWRyYXctZm9ydGh3 aXRoIHQpKQorICAgICAgKHNldHEgY3Jvc3NoYWlycyB0KQorICAgICAgKHdoZW4gKy1maWxsLWNv bHVtbgorICAgICAgICAoc2V0cSBtYy1maWxsLWNvbHVtbiB0KSkKKyAgICAgIDs7OyBgYXV0by1j b21wb3NpdGlvbi1tb2RlJyBpcyBuZWVkZWQgZm9yIGNyb3NzaGFpcnMgdG8gcHJvcGVybHkgY2Fs Y3VsYXRlCisgICAgICA7OzsgY29vcmRpbmF0ZXMgb2YgY29tcG9zaXRpb24gY2hhcmFjdGVycy4g IEF1dG9tYXRpY2FsbHkgYmVjb21lcyBwZXJtYW5lbnRseQorICAgICAgOzs7IGJ1ZmZlci1sb2Nh bCB3aGVuIHNldC4KKyAgICAgICh1bmxlc3MgYXV0by1jb21wb3NpdGlvbi1tb2RlCisgICAgICAg IChzZXRxIGF1dG8tY29tcG9zaXRpb24tbW9kZSB0KSkKKyAgICAgIDs7OyBAbGF3bGlzdCBpcyBm b2N1c2luZyB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBvZiBmZWF0dXJlIHJlcXVlc3RzICMxNzY4 NAorICAgICAgOzs7IGFuZCAjMjI4NzMgb24gTDJSIGxhbmd1YWdlcy4gIFRoZSBmZWF0dXJlIHRl c3QgZmlsZSB1c2VkIGJ5IEBsYXdsaXN0CisgICAgICA7OzsgYm9ncyBFbWFjcyBkb3duIHVubGVz cyBgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcnIGlzIHNldCB0byBhIG5pbCB2YWx1ZS4KKyAgICAg IDs7OyBIb3dldmVyLCBtb3N0IHVzZXJzIHdpbGwgcHJvYmFibHkgbm90IHdhbnQgdGhpcyBwYXJ0 aWN1bGFyIHNldHRpbmcuCisgICAgICAodW5sZXNzIChudWxsIGJpZGktZGlzcGxheS1yZW9yZGVy aW5nKQorICAgICAgICAoc2V0cSBiaWRpLWRpc3BsYXktcmVvcmRlcmluZyBuaWwpKQorICAgICAg KHVubGVzcyAoYW5kIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAgICAg ICAgICAgKGVxdWFsIGN1cnJlbnQtcHJlZml4LWFyZyAnKDQpKSkKKyAgICAgICAgKHNldCAobWFr ZS1sb2NhbC12YXJpYWJsZSAnKy0tc2F2ZWQtc3RhdGUpIG5pbCkKKyAgICAgICAgKGRvbGlzdCAo dmFyICcoYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgZnJpbmdl LWluZGljYXRvci1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgICB0YWItd2lkdGgKKyAgICAg ICAgICAgICAgICAgICAgICAgbGluZS1tb3ZlLXZpc3VhbAorICAgICAgICAgICAgICAgICAgICAg ICB0cnVuY2F0ZS1saW5lcworICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZS1wYXJ0aWFs LXdpZHRoLXdpbmRvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgd29yZC13cmFwKSkKKyAgICAg ICAgICAod2hlbiAobG9jYWwtdmFyaWFibGUtcCB2YXIpCisgICAgICAgICAgICAocHVzaCAoY29u cyB2YXIgKHN5bWJvbC12YWx1ZSB2YXIpKSArLS1zYXZlZC1zdGF0ZSkpKQorICAgICAgICAoc2V0 cSBmaWxsLWNvbHVtbiA4MCkKKyAgICAgICAgKHNldHEgZGlzcGxheS1saW5lLW51bWJlcnMgdCkK KyAgICAgICAgKHNldHEtbG9jYWwgYXV0by1oc2Nyb2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKKyAg ICAgICAgKHNldHEtbG9jYWwgaHNjcm9sbC1zdGVwIDUpCisgICAgICAgIChzZXRxIGJ1ZmZlci1k aXNwbGF5LXRhYmxlICstYnVmZmVyLWRpc3BsYXktdGFibGUpCisgICAgICAgIChzZXRxIHRhYi13 aWR0aCA0KQorICAgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtdmlz dWFsKSB0KQorICAgICAgICAoc2V0cSB0cnVuY2F0ZS1saW5lcworICAgICAgICAgIChjb25kCisg ICAgICAgICAgICAoKGxldCAoKGxzdCArLXRydW5jYXRlLWxpbmVzLWRlcml2ZWQtbW9kZXMpCisg ICAgICAgICAgICAgICAgICAgIG1vZGUpCisgICAgICAgICAgICAgIChjYXRjaCAnZm91bmQKKyAg ICAgICAgICAgICAgICAod2hpbGUgKHNldHEgbW9kZSAocG9wIGxzdCkpCisgICAgICAgICAgICAg ICAgICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgKHRo cm93ICdmb3VuZCB0KSkpKSkpCisgICAgICAgICAgICAgKChtZW1xIG1ham9yLW1vZGUgKy10cnVu Y2F0ZS1saW5lcy1tYWpvci1tb2RlcykpCisgICAgICAgICAgICAgKHQKKyAgICAgICAgICAgICAg IG5pbCkpKQorICAgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICd0cnVuY2F0ZS1wYXJ0 aWFsLXdpZHRoLXdpbmRvd3MpIG5pbCkKKyAgICAgICAgKHNldHEgd29yZC13cmFwIHQpCisgICAg ICAgIChzZXRxIGluZGljYXRlLWVtcHR5LWxpbmVzIHQpCisgICAgICAgIChzZXRxIGluZGljYXRl LWJ1ZmZlci1ib3VuZGFyaWVzICdsZWZ0KQorICAgICAgICAoc2V0cSBmcmluZ2UtaW5kaWNhdG9y LWFsaXN0CisgICAgICAgICAgICA7OzsgaHNjbF9hbGxfdGVtcF9wIHwgaHNjbF90ZW1wX3AKKyAg ICAgICAgICAnKCgrLWhzY2wtdGVtcCAuICgrLXNpbmdsZS1hbmdsZS1sZWZ0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKy1kb3VibGUtYW5nbGUtbGVmdCkpCisgICAgICAgICAgICA7Ozsg aHNjbF9hbGxfcGVybV8wX3AgfCBoc2NsX2FsbF9wZXJtXzFfcCB8IGhzY2xfYWxsX3Blcm1fMl9w IHwgaHNjbF9wZXJtX3AKKyAgICAgICAgICAgICgrLWhzY2wtcGVybSAuICgrLXNpbmdsZS1hbmds ZS11cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICstZG91YmxlLWFuZ2xlLXVwCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKy10cmlwbGUtYW5nbGUtdXAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICArLXF1YWRydXBsZS1hbmdsZS11cCkpCisgICAgICAgICAgICAoKy1vdmVy bGF5LWFycm93IC4gKCstZnJpbmdlLWxlZnQtYXJyb3cKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKy1mcmluZ2UtcmlnaHQtYXJyb3cpKQorICAgICAgICAgICAgKHRydW5jYXRpb24g LiAoKy1mcmluZ2UtbGVmdC1hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1mcmlu Z2UtcmlnaHQtYXJyb3cpKQorICAgICAgICAgICAgKGNvbnRpbnVhdGlvbiAuICgrLWZyaW5nZS1s ZWZ0LWN1cmx5LWFycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstYmFja3NsYXNo KSkKKyAgICAgICAgICAgIChvdmVybGF5LWFycm93IC4gKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUp CisgICAgICAgICAgICAodXAgLiArLWZyaW5nZS11cC1hcnJvdykKKyAgICAgICAgICAgIChkb3du IC4gKy1mcmluZ2UtZG93bi1hcnJvdykKKyAgICAgICAgICAgICh0b3AgLiArLWZyaW5nZS10b3At bGVmdC1hbmdsZSkKKyAgICAgICAgICAgIChib3R0b20gLiArLWZyaW5nZS1ib3R0b20tcmlnaHQt YW5nbGUpCisgICAgICAgICAgICAodG9wLWJvdHRvbSAuICgrLWZyaW5nZS1sZWZ0LWJyYWNrZXQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXRvcC1yaWdodC1hbmdsZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUpKQorICAgICAgICAgICAg KGVtcHR5LWxpbmUgLiArLWZyaW5nZS1lbXB0eS1saW5lKQorICAgICAgICAgICAgKHVua25vd24g LiArLWZyaW5nZS1xdWVzdGlvbi1tYXJrKSkpCisgICAgICAgIChzZXRxIGZyaW5nZS1jdXJzb3It YWxpc3QgJygoYm94IC4gKy1mcmluZ2UtbGVmdC10cmlhbmdsZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChob2xsb3cgLiArLWhvbGxvdy1yZWN0YW5nbGUpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFyIC4gKy12ZXJ0aWNhbC1iYXIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGJhciAuICstZnJpbmdlLWhvcml6b250 YWwtYmFyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhvbGxvdy1zbWFs bCAuICstZnJpbmdlLWhvbGxvdy1zcXVhcmUpKSkKKyAgICAgICAgKGlmIGNyb3NzaGFpcnMtZHJh dy1mb3J0aHdpdGgKKyAgICAgICAgICAoYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICcrLWRy YXctZm9ydGh3aXRoICdhcHBlbmQgJ2xvY2FsKQorICAgICAgICAgIChhZGQtaG9vayAncG9zdC1j b21tYW5kLWhvb2sgJystZHJhdy1jcm9zc2hhaXJzICdhcHBlbmQgJ2xvY2FsKSkKKyAgICAgICAg KHdoZW4gY3Jvc3NoYWlycy1kcmF3LWZvcnRod2l0aAorICAgICAgICAgIChhZGQtaG9vayAnd2lu ZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sgJystZHJhdy1mb3J0aHdpdGggbmlsICdsb2Nh bCkpCisgICAgICAgIChhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vayAndHVybi1vZmYt Ky1tb2RlIG5pbCAnbG9jYWwpKQorICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAg J2FueSkKKyAgICAgICAgKGlmIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkKKyAgICAg ICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGArLW1vZGUnIC0tIGRlYnVnZ2luZyBtb2RlLiIpCisg ICAgICAgICAgKG1lc3NhZ2UgIlR1cm5lZCBPTiBgKy1tb2RlJy4iKSkpKQorICAgICh0CisgICAg ICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZmlsbC1jb2x1bW4pCisgICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnYXV0by1oc2Nyb2xsLW1vZGUpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAn aHNjcm9sbC1zdGVwKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2Nyb3NzaGFpcnMpCisg ICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbWMtZmlsbC1jb2x1bW4pCisgICAgICAoa2lsbC1s b2NhbC12YXJpYWJsZSAnZGlzcGxheS1saW5lLW51bWJlcnMpCisgICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnZGlzcGxheS1saW5lLW51bWJlcnMtd2lkdGgpCisgICAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAnbXVsdGlwbGUtY3Vyc29ycy1jb25mKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFi bGUgJ2J1ZmZlci1kaXNwbGF5LXRhYmxlKQorICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3Rh Yi13aWR0aCkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtdmlzdWFsKQor ICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLWxpbmVzKQorICAgICAgKGtpbGwt bG9jYWwtdmFyaWFibGUgJ3RydW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykKKyAgICAgIChr aWxsLWxvY2FsLXZhcmlhYmxlICd3b3JkLXdyYXApCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJs ZSAnaW5kaWNhdGUtZW1wdHktbGluZXMpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaW5k aWNhdGUtYnVmZmVyLWJvdW5kYXJpZXMpCisgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZnJp bmdlLWluZGljYXRvci1hbGlzdCkKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdmcmluZ2Ut Y3Vyc29yLWFsaXN0KQorICAgICAgKGRvbGlzdCAoc2F2ZWQgKy0tc2F2ZWQtc3RhdGUpCisgICAg ICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgKGNhciBzYXZlZCkpIChjZHIgc2F2ZWQpKSkK KyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICcrLS1zYXZlZC1zdGF0ZSkKKyAgICAgICgrLWRl bGV0ZS1wYXJlbnMtb3ZlcmxheXMpCisgICAgICAod2hlbiAobWVtcSAnKy1kcmF3LWZvcnRod2l0 aCBwb3N0LWNvbW1hbmQtaG9vaykKKyAgICAgICAgKHJlbW92ZS1ob29rICdwb3N0LWNvbW1hbmQt aG9vayAnKy1kcmF3LWZvcnRod2l0aCAnbG9jYWwpKQorICAgICAgKHdoZW4gKG1lbXEgJystZHJh dy1jcm9zc2hhaXJzIHBvc3QtY29tbWFuZC1ob29rKQorICAgICAgICAocmVtb3ZlLWhvb2sgJ3Bv c3QtY29tbWFuZC1ob29rICcrLWRyYXctY3Jvc3NoYWlycyAnbG9jYWwpKQorICAgICAgKHdoZW4g KG1lbXEgJystZHJhdy1mb3J0aHdpdGggd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sp CisgICAgICAgIChyZW1vdmUtaG9vayAnd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sg JystZHJhdy1mb3J0aHdpdGggJ2xvY2FsKSkKKyAgICAgIChyZW1vdmUtaG9vayAnY2hhbmdlLW1h am9yLW1vZGUtaG9vayAndHVybi1vZmYtKy1tb2RlICdsb2NhbCkKKyAgICAgICh3aGVuICstdGlt ZXItdmFyCisgICAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSArLXRpbWVyLXZhciB0 aW1lci1pZGxlLWxpc3QpKQorICAgICAgICAoc2V0cSArLXRpbWVyLXZhciBuaWwpKQorICAgICAg KHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgKG1lc3NhZ2UgIlR1 cm5lZCBPRkYgYCstbW9kZScuIikpKSkpCisKKyhkZWZ1biB0dXJuLW9mZi0rLW1vZGUgKCkKKyAg KCstbW9kZSAtMSkpCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworCisoZGVmdW4gKy1wYXJl bnMtZm4gKCkKKyAgIkRvYy1zdHJpbmcuIgorICAobGV0KiAoKG9wb2ludCAocG9pbnQpKQorICAg ICAgICAgKGZyb20gKGlmICstcGFyZW5zLWZyb20tZm4KKyAgICAgICAgICAgICAgICAgKGZ1bmNh bGwgKy1wYXJlbnMtZnJvbS1mbikKKyAgICAgICAgICAgICAgICAgKHBvaW50LW1pbikpKQorICAg ICAgICAgKHdpbiAoc2VsZWN0ZWQtd2luZG93KSkKKyAgICAgICAgIChpIDApCisgICAgICAgICAo cHJlY2VkaW5nLWNoYXIgKHByZWNlZGluZy1jaGFyKSkKKyAgICAgICAgIChvY2hhciAoY2hhci1h ZnRlciBvcG9pbnQpKQorICAgICAgICAgKHBvczEKKyAgICAgICAgICAgKGNvbmQKKyAgICAgICAg ICAgICAoKGFuZCBvY2hhcgorICAgICAgICAgICAgICAgICAgIChvciA7OzsgKGNoYXItdG8tc3Ry aW5nIDQwKSA9PiBvcGVuaW5nIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgICAgICAgICg9 IG9jaGFyIDQwKQorICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDkx KSA9PiBvcGVuaW5nIHNxdWFyZSBicmFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICg9IG9j aGFyIDkxKQorICAgICAgICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDEyMykg PT4gb3BlbmluZyB3YXZ5IGJyYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgKD0gb2NoYXIg MTIzKSkpCisgICAgICAgICAgICAgICAgKG1pbiAoMSsgb3BvaW50KSAocG9pbnQtbWF4KSkpCisg ICAgICAgICAgICAgKChvciA7OzsgKGNoYXItdG8tc3RyaW5nIDQxKSA9PiBjbG9zaW5nIHBhcmVu dGhlc2lzCisgICAgICAgICAgICAgICAgICAoPSBwcmVjZWRpbmctY2hhciA0MSkKKyAgICAgICAg ICAgICAgICAgIDs7OyAoY2hhci10by1zdHJpbmcgOTMpID0+IGNsb3Npbmcgc3F1YXJlIGJyYWNr ZXQKKyAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1jaGFyIDkzKQorICAgICAgICAgICAg ICAgICAgOzs7IChjaGFyLXRvLXN0cmluZyAxMjUpID0+IGNsb3Npbmcgd2F2eSBicmFja2V0Cisg ICAgICAgICAgICAgICAgICAoPSBwcmVjZWRpbmctY2hhciAxMjUpKQorICAgICAgICAgICAgICAg IChtYXggKHBvaW50LW1pbikgKDEtIG9wb2ludCkpKQorICAgICAgICAgICAgICh0CisgICAgICAg ICAgICAgICAgb3BvaW50KSkpCisgICAgICAgICBwb3MyCisgICAgICAgICBzZWxlY3RlZC1mYWNl KQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAorICAgICAg ICAod2hpbGUgKHNldHEgcG9zMSAobnRoIDEgKHBhcnNlLXBhcnRpYWwtc2V4cCBmcm9tIHBvczEp KSkKKyAgICAgICAgICAoc2V0cSBwb3MyIChzY2FuLXNleHBzIHBvczEgMSkpCisgICAgICAgICAg KGlmICg9IGkgMTApCisgICAgICAgICAgICAoc2V0cSBpIDEpCisgICAgICAgICAgICAoc2V0cSBp ICgxKyBpKSkpCisgICAgICAgICAgKHNldHEgc2VsZWN0ZWQtZmFjZSAoY29uZAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSAxKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICcrLXBhcmVucy1vbmUtZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCg9IGkgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJl bnMtdHdvLWZhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXRocmVlLWZhY2UpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJystcGFyZW5zLWZvdXItZmFjZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCg9IGkgNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnKy1wYXJlbnMtZml2ZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KD0gaSA2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1zaXgt ZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgNykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtc2V2ZW4tZmFjZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgOCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnKy1wYXJlbnMtZWlnaHQtZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCg9IGkgOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1w YXJlbnMtbmluZS1mYWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSAx MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGVuLWZhY2Up KSkKKyAgICAgICAgICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSBwb3MxICgxKyBwb3MxKSkpKQor ICAgICAgICAgICAgKHVubGVzcyArLXBhcmVucy1pbmFjdGl2ZS13aW5kb3dzCisgICAgICAgICAg ICAgIChvdmVybGF5LXB1dCBvdiAnd2luZG93IHdpbikpCisgICAgICAgICAgICAob3ZlcmxheS1w dXQgb3YgJ2ZhY2Ugc2VsZWN0ZWQtZmFjZSkpCisgICAgICAgICAgKHdoZW4gcG9zMgorICAgICAg ICAgICAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkgKDEtIHBvczIpIHBvczIpKSkKKyAgICAgICAg ICAgICAgKHVubGVzcyArLXBhcmVucy1pbmFjdGl2ZS13aW5kb3dzCisgICAgICAgICAgICAgICAg KG92ZXJsYXktcHV0IG92ICd3aW5kb3cgd2luKSkKKyAgICAgICAgICAgICAgKG92ZXJsYXktcHV0 IG92ICdmYWNlIHNlbGVjdGVkLWZhY2UpKSkpCisgICAgICAgIChlcnJvciBuaWwpKSkKKyAgICAo c2V0cSArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wIHQpKSkKKworKGRlZnVuICstcmVtb3ZlLW92 ZXJsYXlzIChiZWcgZW5kIG5hbWUgdmFsKQorIlJlbW92ZSB0aGUgb3ZlcmxheXMgdGhhdCBhcmUg YGVxdWFsLWluY2x1ZGluZy1wcm9wZXJ0aWVzYC4KK0luY2x1ZGVzIGEgdW5pcXVlIHNpdHVhdGlv biB3aGVuIGFuIG92ZXJsYXkgd2l0aCBhbiBgJ2FmdGVyLXN0cmluZ2AgcHJvcGVydHkKK2lzIGF0 IHRoZSB2ZXJ5IGVuZCBvZiBhIG5hcnJvd2VkLWJ1ZmZlci4iCisgIChsZXQqICgocG9pbnQtbWF4 IChwb2ludC1tYXgpKQorICAgICAgICAgKHBvaW50LW1pbiAocG9pbnQtbWluKSkKKyAgICAgICAg IChuYXJyb3dlZC1wIChidWZmZXItbmFycm93ZWQtcCkpCisgICAgICAgICAoYmVnIChpZiBiZWcg YmVnIHBvaW50LW1pbikpCisgICAgICAgICAoZW5kCisgICAgICAgICAgIChjb25kCisgICAgICAg ICAgICAgKChhbmQKKyAgICAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQorICAgICAgICAg ICAgICAgICBlbmQpCisgICAgICAgICAgICAgICBlbmQpCisgICAgICAgICAgICAgKChhbmQKKyAg ICAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1wKQorICAgICAgICAgICAgICAgICAobnVsbCBl bmQpKQorICAgICAgICAgICAgICAgcG9pbnQtbWF4KQorICAgICAgICAgICAgICgoYW5kCisgICAg ICAgICAgICAgICAgIG5hcnJvd2VkLXAKKyAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg ICAgICAgICg8IGVuZCBwb2ludC1tYXgpKQorICAgICAgICAgICAgICAgZW5kKQorICAgICAgICAg ICAgICgoYW5kCisgICAgICAgICAgICAgICAgIG5hcnJvd2VkLXAKKyAgICAgICAgICAgICAgICAg ZW5kCisgICAgICAgICAgICAgICAgICg9IGVuZCBwb2ludC1tYXgpKQorICAgICAgICAgICAgICAg KDErIGVuZCkpCisgICAgICAgICAgICAgKChhbmQKKyAgICAgICAgICAgICAgICAgbmFycm93ZWQt cAorICAgICAgICAgICAgICAgICAobnVsbCBlbmQpKQorICAgICAgICAgICAgICAgKDErIHBvaW50 LW1heCkpICkpCisgICAgICAgICAob3ZlcmxheXMKKyAgICAgICAgICAgKHByb2duCisgICAgICAg ICAgICAgKG92ZXJsYXktcmVjZW50ZXIgZW5kKQorICAgICAgICAgICAgIChvdmVybGF5cy1pbiBi ZWcgZW5kKSkpKQorICAgICh3aGVuIChhbmQgYmVnIGVuZCBuYW1lIHZhbCkKKyAgICAgIChkb2xp c3QgKG8gb3ZlcmxheXMpCisgICAgICAgIChjb25kCisgICAgICAgICAgKChhbmQgKGVxIG5hbWUg J2ZhY2UpCisgICAgICAgICAgICAgICAgKGVxIChvdmVybGF5LWdldCBvIG5hbWUpIHZhbCkpCisg ICAgICAgICAgICA7OyBFaXRoZXIgcHVzaCB0aGlzIG92ZXJsYXkgb3V0c2lkZSBiZWcuLi5lbmQK KyAgICAgICAgICAgIDs7IG9yIHNwbGl0IGl0IHRvIGV4Y2x1ZGUgYmVnLi4uZW5kCisgICAgICAg ICAgICA7OyBvciBkZWxldGUgaXQgZW50aXJlbHkgKGlmIGl0IGlzIGNvbnRhaW5lZCBpbiBiZWcu Li5lbmQpLgorICAgICAgICAgICAgKGlmICg8IChvdmVybGF5LXN0YXJ0IG8pIGJlZykKKyAgICAg ICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVuZCkKKyAgICAgICAgICAgICAgKHBy b2duCisgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSAoY29weS1vdmVybGF5IG8pCisgICAg ICAgICAgICAgICAgICAob3ZlcmxheS1zdGFydCBvKSBiZWcpCisgICAgICAgICAgICAgICAgKG1v dmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykpKQorICAgICAgICAgICAgICAgICAgKG1v dmUtb3ZlcmxheSBvIChvdmVybGF5LXN0YXJ0IG8pIGJlZykpCisgICAgICAgICAgICAgIChpZiAo PiAob3ZlcmxheS1lbmQgbykgZW5kKQorICAgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBv IGVuZCAob3ZlcmxheS1lbmQgbykpCisgICAgICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8p KSkpCisgICAgICAgICAgKChhbmQgKG5vdCAoZXEgbmFtZSAnZmFjZSkpCisgICAgICAgICAgICAg ICAgKGVxdWFsLWluY2x1ZGluZy1wcm9wZXJ0aWVzIChvdmVybGF5LWdldCBvIG5hbWUpIHZhbCkp CisgICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkgbykpKSkpKSkKKworKGRlZnVuICstZGVsZXRl LXBhcmVucy1vdmVybGF5cyAoKQorICAod2hlbiArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wCisg ICAgKGRvbGlzdCAoZmFjZSAnKCstcGFyZW5zLW9uZS1mYWNlCisgICAgICAgICAgICAgICAgICAg ICstcGFyZW5zLXR3by1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLXRocmVlLWZh Y2UKKyAgICAgICAgICAgICAgICAgICAgKy1wYXJlbnMtZm91ci1mYWNlCisgICAgICAgICAgICAg ICAgICAgICstcGFyZW5zLWZpdmUtZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1z aXgtZmFjZQorICAgICAgICAgICAgICAgICAgICArLXBhcmVucy1zZXZlbi1mYWNlCisgICAgICAg ICAgICAgICAgICAgICstcGFyZW5zLWVpZ2h0LWZhY2UKKyAgICAgICAgICAgICAgICAgICAgKy1w YXJlbnMtbmluZS1mYWNlCisgICAgICAgICAgICAgICAgICAgICstcGFyZW5zLXRlbi1mYWNlKSkK KyAgICAgICgrLXJlbW92ZS1vdmVybGF5cyBuaWwgbmlsICdmYWNlIGZhY2UpKQorICAgIChzZXRx ICstcGFyZW5zLW92ZXJsYXlzLWV4aXN0LXAgbmlsKSkpCisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7OworCis7OzsgQVVUSE9SOiAgTmlrb2xhaiBTY2h1bWFjaGVyIC0tIGh0dHBzOi8vZ2l0aHVi LmNvbS9uc2NodW0vZnJpbmdlLWhlbHBlci5lbAorKGRlZnVuICstZnJpbmdlLWhlbHBlci1kZWNp bWFsICgmcmVzdCBzdHJpbmdzKQorIkNvbnZlcnQgU1RSSU5HUyBpbnRvIGEgdmVjdG9yIHVzYWJs ZSBmb3IgYGRlZmluZS1mcmluZ2UtYml0bWFwJy4KK0VhY2ggc3RyaW5nIGluIFNUUklOR1MgcmVw cmVzZW50cyBhIGxpbmUgb2YgdGhlIGZyaW5nZSBiaXRtYXAuCitQZXJpb2RzICguKSBhcmUgYmFj a2dyb3VuZC1jb2xvcmVkIHBpeGVsOyBYcyBhcmUgZm9yZWdyb3VuZC1jb2xvcmVkLiBUaGUKK2Zy aW5nZSBiaXRtYXAgYWx3YXlzIGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0LiBJZiB0aGUgZnJpbmdl IGhhcyBoYWxmCit3aWR0aCwgb25seSB0aGUgbGVmdCA0IHBpeGVscyBvZiBhbiA4IHBpeGVsIGJp dG1hcCB3aWxsIGJlIHNob3duLgorRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBkZWZp bmVzIGEgZGlhZ29uYWwgbGluZS4KK1woKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKK1wiWFguLi4u Li5cIgorXCIuLlhYLi4uLlwiCitcIi4uLi5YWC4uXCIKK1wiLi4uLi4uWFhcIlwpIgorICAodW5s ZXNzIChjZHIgc3RyaW5ncykKKyAgICAoc2V0cSBzdHJpbmdzIChzcGxpdC1zdHJpbmcgKGNhciBz dHJpbmdzKSAiXG4iKSkpCisgIChhcHBseSAndmVjdG9yCisgICAgKG1hcGNhcgorICAgICAgKGxh bWJkYSAoc3RyKQorICAgICAgICAobGV0ICgobnVtIDApKQorICAgICAgICAgIChkb2xpc3QgKGMg KHN0cmluZy10by1saXN0IHN0cikpCisgICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIp IChpZiAoZXEgYyA/LikgMCAxKSkpKQorICAgICAgICAgIG51bSkpCisgICAgICBzdHJpbmdzKSkp CisKKzs7OyBNb2RpZmljYXRpb24gYnkgQGxhd2xpc3Qgb2YgYCstZnJpbmdlLWhlbHBlci1kZWNp bWFsJyB3cml0dGVuIGJ5Cis7OzsgTmlrb2xhaiBTY2h1bWFjaGVyIC0tIGh0dHBzOi8vZ2l0aHVi LmNvbS9uc2NodW0vZnJpbmdlLWhlbHBlci5lbAorKGRlZnVuICstZnJpbmdlLWhlbHBlci1oZXhh ZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyJDb252ZXJ0IFNUUklOR1MgaW50byBhIHZlY3RvciB1 c2FibGUgZm9yIGBkZWZpbmUtZnJpbmdlLWJpdG1hcCcuCitFYWNoIHN0cmluZyBpbiBTVFJJTkdT IHJlcHJlc2VudHMgYSBsaW5lIG9mIHRoZSBmcmluZ2UgYml0bWFwLgorUGVyaW9kcyAoLikgYXJl IGJhY2tncm91bmQtY29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3JlZC4gVGhl CitmcmluZ2UgYml0bWFwIGFsd2F5cyBpcyBhbGlnbmVkIHRvIHRoZSByaWdodC4gSWYgdGhlIGZy aW5nZSBoYXMgaGFsZgord2lkdGgsIG9ubHkgdGhlIGxlZnQgNCBwaXhlbHMgb2YgYW4gOCBwaXhl bCBiaXRtYXAgd2lsbCBiZSBzaG93bi4KK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUg ZGVmaW5lcyBhIGRpYWdvbmFsIGxpbmUuCitcKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAor XCJYWC4uLi4uLlwiCitcIi4uWFguLi4uXCIKK1wiLi4uLlhYLi5cIgorXCIuLi4uLi5YWFwiXCki CisgICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgIChzZXRxIHN0cmluZ3MgKHNwbGl0LXN0cmlu ZyAoY2FyIHN0cmluZ3MpICJcbiIpKSkKKyAgKG1hcGNvbmNhdCAnaWRlbnRpdHkKKyAgICAobWFw Y2FyCisgICAgICAobGFtYmRhIChzdHIpCisgICAgICAgIChsZXQgKChudW0gMCkKKyAgICAgICAg ICAgICAgcmVzdWx0KQorICAgICAgICAgIChkb2xpc3QgKGMgKHN0cmluZy10by1saXN0IHN0cikp CisgICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/LikgMCAxKSkp KQorICAgICAgICAgIChpZiAoPSBudW0gMCkKKyAgICAgICAgICAgICIweDAwIgorICAgICAgICAg ICAgKGZvcm1hdCAiJSMteCIgbnVtKSkpKQorICAgICAgc3RyaW5ncykKKyAgICAiLCAiKSkKKwor Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OzsgRlJJTkdFIEJJVE1BUFMKKworKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrICgrLWZyaW5nZS1oZWxwZXItZGVj aW1hbAorIi4ueHh4eC4uIgorIi54eHh4eHguIgorInh4Li4uLnh4IgorInh4Li4uLnh4IgorIi4u Li54eC4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLi4uLi4uIgorIi4uLnh4Li4uIgor Ii4uLnh4Li4uIikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJyst ZnJpbmdlLWV4Y2xhbWF0aW9uLW1hcmsgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4uWFgu Li4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iCisiLi4u WFguLi4iCisiLi4uWFguLi4iCisiLi4uLi4uLi4iCisiLi4uWFguLi4iCisiLi4uWFguLi4iKSBu aWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVmdC1h cnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIKKyIuLnh4Li4uLiIKKyIu eHguLi4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyIueHguLi4uLiIKKyIuLnh4Li4uLiIK KyIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcr LWZyaW5nZS1yaWdodC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIuLi54eC4uLiIK KyIuLi4ueHguLiIKKyIuLi4uLnh4LiIKKyIuLnh4eHh4eCIKKyIuLnh4eHh4eCIKKyIuLi4uLnh4 LiIKKyIuLi4ueHguLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS11cC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwK KyIuLi54eC4uLiIKKyIuLnh4eHguLiIKKyIueHh4eHh4LiIKKyJ4eHh4eHh4eCIKKyIuLi54eC4u LiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIKKyIuLi54eC4uLiIpIG5pbCBuaWwgJ3RvcCkKKwor KGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1kb3duLWFycm93ICgrLWZyaW5nZS1oZWxw ZXItZGVjaW1hbAorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4uIgorIi4uLnh4Li4u IgorInh4eHh4eHh4IgorIi54eHh4eHguIgorIi4ueHh4eC4uIgorIi4uLnh4Li4uIikgbmlsIG5p bCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtY3VybHkt YXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLi4ueHh4eC4iCisiLi54eHh4eC4iCisi Lnh4Li4uLi4iCisiLnh4eC4ueC4iCisiLnh4eHh4eC4iCisiLi54eHh4eC4iCisiLi4ueHh4eC4i CisiLi54eHh4eC4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisiLnh4 eHguLi4iCisiLnh4eHh4Li4iCisiLi4uLi54eC4iCisiLnguLnh4eC4iCisiLnh4eHh4eC4iCisi Lnh4eHh4Li4iCisiLnh4eHguLi4iCisiLnh4eHh4Li4iKSBuaWwgbmlsICdjZW50ZXIpCisKKyhk ZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtbGVmdC10cmlhbmdsZSAoKy1mcmluZ2UtaGVs cGVyLWRlY2ltYWwKKyIuLi4uLi54eCIKKyIuLi4ueHh4eCIKKyIuLi54eHh4eCIKKyIuLnh4eHh4 eCIKKyIuLnh4eHh4eCIKKyIuLi54eHh4eCIKKyIuLi4ueHh4eCIKKyIuLi4uLi54eCIpIG5pbCBu aWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC10cmlh bmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eC4uLi4uLiIKKyJ4eHh4Li4uLiIKKyJ4 eHh4eC4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eC4uLiIKKyJ4eHh4Li4uLiIK KyJ4eC4uLi4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcr LWZyaW5nZS10b3AtbGVmdC1hbmdsZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eHh4eHgu LiIKKyJ4eHh4eHguLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4u Li4uLiIKKyJ4eC4uLi4uLiIKKyIuLi4uLi4uLiIpIG5pbCBuaWwgJ3RvcCkKKworKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1k ZWNpbWFsCisiLi54eHh4eHgiCisiLi54eHh4eHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisi Li4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4ueHgiCisiLi4uLi4uLi4iKSBuaWwgbmlsICd0 b3ApCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5nbGUg KCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHguLi4u Li4iCisieHguLi4uLi4iCisieHguLi4uLi4iCisieHh4eHh4Li4iCisieHh4eHh4Li4iKSBuaWwg bmlsICdib3R0b20pCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtYm90dG9tLXJp Z2h0LWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4uLi4uLnh4IgorIi4uLi4uLnh4 IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4ueHh4eHh4IgorIi4ueHh4 eHh4IikgbmlsIG5pbCAnYm90dG9tKQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdl LWxlZnQtYnJhY2tldCAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyJ4eHh4eHguLiIKKyJ4eHh4 eHguLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4 eC4uLi4uLiIKKyJ4eC4uLi4uLiIKKyJ4eHh4eHguLiIKKyJ4eHh4eHguLiIpIG5pbCBuaWwgJ2Nl bnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC1icmFja2V0ICgr LWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi4ueHh4eHh4IgorIi4ueHh4eHh4IgorIi4uLi4uLnh4 IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4uLnh4IgorIi4uLi4u Lnh4IgorIi4ueHh4eHh4IgorIi4ueHh4eHh4IikgbmlsIG5pbCAnY2VudGVyKQorCisoZGVmaW5l LWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWZpbGxlZC1yZWN0YW5nbGUgKCstZnJpbmdlLWhlbHBl ci1kZWNpbWFsCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4i CisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4 eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iCisieHh4eHh4eC4iKSBuaWwg bmlsICdjZW50ZXIpCisKKyhkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtaG9sbG93LXNx dWFyZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKKyIueHh4eHh4LiIKKyIueC4uLi54LiIKKyIu eC4uLi54LiIKKyIueC4uLi54LiIKKyIueC4uLi54LiIKKyIueHh4eHh4LiIpIG5pbCBuaWwgJ2Nl bnRlcikKKworKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlICgr LWZyaW5nZS1oZWxwZXItZGVjaW1hbAorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHgu IgorIi54eHh4eHguIgorIi54eHh4eHguIgorIi54eHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQor CisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWhvcml6b250YWwtYmFyICgrLWZyaW5n ZS1oZWxwZXItZGVjaW1hbAorInh4eHh4eHguIgorInh4eHh4eHguIikgbmlsIG5pbCAnYm90dG9t KQorCisoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWVtcHR5LWxpbmUgKCstZnJpbmdl LWhlbHBlci1kZWNpbWFsCisiLi4uLi4uLi4iCisiLi54eHh4Li4iCisiLi4uLi4uLi4iCisiLi4u Li4uLi4iCisiLi54eHh4Li4iCisiLi4uLi4uLi4iKSBuaWwgbmlsICcodG9wIHQpKQorCis7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBgc2V0LWZyaW5nZS1iaXRtYXAtZmFjZScKKworKHNl dC1mcmluZ2UtYml0bWFwLWZhY2UgJystc21pbGV5LWZhY2UgJystbGVmdC1mcmluZ2UtY3VycmVu dC1saW5lLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWhvbGxvdy1yZWN0YW5n bGUgJystaG9sbG93LXJlY3RhbmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAn Ky1iYWNrc2xhc2ggJystYmFja3NsYXNoLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNl ICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrICcrLWZyaW5nZS1xdWVzdGlvbi1tYXJrLWZhY2UpCisK KyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICcrLWZy aW5nZS1leGNsYW1hdGlvbi1tYXJrLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcr LWZyaW5nZS1sZWZ0LWFycm93ICcrLWZyaW5nZS1sZWZ0LWFycm93LWZhY2UpCisKKyhzZXQtZnJp bmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1hcnJvdyAnKy1mcmluZ2UtcmlnaHQtYXJy b3ctZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXVwLWFycm93ICcr LWZyaW5nZS11cC1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmlu Z2UtZG93bi1hcnJvdyAnKy1mcmluZ2UtZG93bi1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1i aXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVmdC1jdXJseS1hcnJvdyAnKy1mcmluZ2UtbGVmdC1jdXJs eS1hcnJvdy1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtcmlnaHQt Y3VybHktYXJyb3cgJystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UpCisKKyhzZXQtZnJp bmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1sZWZ0LXRyaWFuZ2xlICcrLWZyaW5nZS1sZWZ0LXRy aWFuZ2xlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC10 cmlhbmdsZSAnKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0 bWFwLWZhY2UgJystZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlICcrLWZyaW5nZS10b3AtbGVmdC1hbmds ZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLXJpZ2h0LWFu Z2xlICcrLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUtZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFw LWZhY2UgJystZnJpbmdlLWJvdHRvbS1sZWZ0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20tbGVmdC1h bmdsZS1mYWNlKQorCisoc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtYm90dG9tLXJp Z2h0LWFuZ2xlICcrLWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZSkKKworKHNldC1mcmlu Z2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQtYnJhY2tldCAnKy1mcmluZ2UtbGVmdC1icmFj a2V0LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1icmFj a2V0ICcrLWZyaW5nZS1yaWdodC1icmFja2V0LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1m YWNlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xlICcrLWZyaW5nZS1maWxsZWQtcmVjdGFuZ2xl LWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJl ICcrLWZyaW5nZS1ob2xsb3ctc3F1YXJlLWZhY2UpCisKKyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNl ICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlICcrLWZyaW5nZS1maWxsZWQtc3F1YXJlLWZhY2UpCisK KyhzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhciAnKy1mcmlu Z2UtaG9yaXpvbnRhbC1iYXItZmFjZSkKKworKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJp bmdlLWVtcHR5LWxpbmUgJystZnJpbmdlLWVtcHR5LWxpbmUtZmFjZSkKKworOzs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Cis7OzsgRklMTC1DT0xVTU4tTU9ERQorCisoZGVmdmFyIG1jLWZpbGwtY29s dW1uLW1vZGUpCisKKyhkZWZ2YXIgbWMtZmlsbC1jb2x1bW4tdGltZXItdmFyIG5pbAorIlRpbWVy IHVzZWQgdG8gaGlnaGxpZ2h0IGN1cnJlbnQgY29sdW1uIHdoZW5ldmVyIEVtYWNzIGlzIGlkbGUu IikKKworKGRlZnZhciBtYy1maWxsLWNvbHVtbi1pZGxlLXRpbWVyLXNlY29uZHMgMC41CisgICJU aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gZGVsYXkgYmVmb3JlIGRyYXdpbmcgZmlsbCBjb2x1bW4g d2hlbiB0aGUgdmFyaWFibGUKK2BtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCcgaGFzIGEg bmlsIHZhbHVlLiIpCisKKyhkZWZ1biBtYy1maWxsLWNvbHVtbi10aW1lci1mbiAoKQorIlNpbmNl IHRoaXMgZmlyZXMgZ2xvYmFsbHksIHdlIG11c3QgY29udHJvbCB3aGljaCBidWZmZXJzIGZpbGwg Y29sdW1uIGFwcGVhciBpbi4iCisgICh3aGVuIG1jLWZpbGwtY29sdW1uLW1vZGUKKyAgICAod2hl biBtYy1maWxsLWNvbHVtbi10aW1lci12YXIKKyAgICAgIChzZXRxIHRpbWVyLWlkbGUtbGlzdCAo ZGVscSBtYy1maWxsLWNvbHVtbi10aW1lci12YXIgdGltZXItaWRsZS1saXN0KSkKKyAgICAgIChz ZXRxIG1jLWZpbGwtY29sdW1uLXRpbWVyLXZhciBuaWwpKQorICAgICh3aGVuIChhbmQgKy1maWxs LWNvbHVtbiAobnVsbCBtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCkpCisgICAgICAobWMt YWN0aXZhdGUtZmlsbC1jb2x1bW4gKHNlbGVjdGVkLXdpbmRvdykpKSkpCisKKyhkZWZ1biBtYy1m aWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCAoKQorICAiRm9yY2UgYm90aCBydWxlcnMgdG8gYmUg ZHJhd24vcmVkcmF3bi4iCisgIChtYy1maWxsLWNvbHVtbi1kcmF3ICdmb3JjZSkpCisKKyhkZWZ1 biBtYy1maWxsLWNvbHVtbi1kcmF3ICgmb3B0aW9uYWwgZm9yY2UpCisgICh3aGVuIG1jLWZpbGwt Y29sdW1uLW1vZGUKKyAgICAod2hlbiBtYy1maWxsLWNvbHVtbi10aW1lci12YXIKKyAgICAgIChz ZXRxIHRpbWVyLWlkbGUtbGlzdCAoZGVscSBtYy1maWxsLWNvbHVtbi10aW1lci12YXIgdGltZXIt aWRsZS1saXN0KSkKKyAgICAgIChzZXRxIG1jLWZpbGwtY29sdW1uLXRpbWVyLXZhciBuaWwpKQor ICAgIChpZiBmb3JjZQorICAgICAgKHdoZW4gKGFuZCArLWZpbGwtY29sdW1uIChudWxsIG1jLWZp bGwtY29sdW1uLWRyYXctZm9ydGh3aXRoKSkKKyAgICAgICAgKG1jLWFjdGl2YXRlLWZpbGwtY29s dW1uIChzZWxlY3RlZC13aW5kb3cpKSkKKyAgICAgIChzZXRxIG1jLWZpbGwtY29sdW1uLXRpbWVy LXZhciAocnVuLXdpdGgtaWRsZS10aW1lciBtYy1maWxsLWNvbHVtbi1pZGxlLXRpbWVyLXNlY29u ZHMgbmlsICMnbWMtZmlsbC1jb2x1bW4tdGltZXItZm4pKSkpKQorCis7OzsjIyNhdXRvbG9hZAor KGRlZmluZS1taW5vci1tb2RlIG1jLWZpbGwtY29sdW1uLW1vZGUKKyJNaW5vciBtb2RlIGZvciBk aXNwbGF5aW5nIGEgdmlzdWFsIGZpbGwgY29sdW1uLiIKKyAgOmluaXQtdmFsdWUgbmlsCisgIDps aWdodGVyICIgRkMiCisgIDprZXltYXAgbmlsCisgIDpnbG9iYWwgbmlsCisgIDpncm91cCAnbWMt ZmlsbC1jb2x1bW4tbW9kZQorICAoY29uZAorICAgIDs7OyBgKy1tb2RlJyBoYXMgdGhlIGFiaWxp dHkgdG8gYWxzbyBkaXNwbGF5IGEgZmlsbCBjb2x1bW4gaW5kaWNhdG9yLgorICAgIDs7OyBTZWUg dGhlIHZhcmlhYmxlIGArLWZpbGwtY29sdW1uJy4KKyAgICAoKGFuZCBtYy1maWxsLWNvbHVtbi1t b2RlICstbW9kZSkKKyAgICAgIChzZXRxIG1jLWZpbGwtY29sdW1uLW1vZGUgbmlsKQorICAgICAg KG1lc3NhZ2UgIlR1cm5lZCBPRkYgYG1jLWZpbGwtY29sdW1uLW1vZGUnICglcykgLS0gc2VlIHRo ZSB2YXJpYWJsZSBgKy1maWxsLWNvbHVtbicuIiAoY3VycmVudC1idWZmZXIpKSkKKyAgICAobWMt ZmlsbC1jb2x1bW4tbW9kZQorICAgICAgKHdoZW4gKGFuZCBnbG9iYWwtZWxkb2MtbW9kZQorICAg ICAgICAgICAgICAgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAg ICAgICAoZXF1YWwgY3VycmVudC1wcmVmaXgtYXJnICcoNCkpKQorICAgICAgICAoZ2xvYmFsLWVs ZG9jLW1vZGUgLTEpKQorICAgICAgKHdoZW4gKGFuZCBqaXQtbG9jay1jb250ZXh0LXRpbWVyCisg ICAgICAgICAgICAgICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAg ICAgICAgIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0 aW1lcnAgaml0LWxvY2stY29udGV4dC10aW1lcikKKyAgICAgICAgICAoY2FuY2VsLXRpbWVyIGpp dC1sb2NrLWNvbnRleHQtdGltZXIpKQorICAgICAgICA7OyAoc2V0cSBqaXQtbG9jay1jb250ZXh0 LXRpbWVyIChydW4td2l0aC1pZGxlLXRpbWVyIDUuMCAncmVwZWF0ICdqaXQtbG9jay1jb250ZXh0 LWZvbnRpZnkpKQorICAgICAgICAoc2V0cSBqaXQtbG9jay1jb250ZXh0LXRpbWVyIG5pbCkpCisg ICAgICAod2hlbiAoYW5kIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdhbnkpCisgICAgICAgICAg ICAgICAgIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgICh3aGVuICh0 aW1lcnAgdW5kby1hdXRvLWN1cnJlbnQtYm91bmRhcnktdGltZXIpCisgICAgICAgICAgKGNhbmNl bC10aW1lciB1bmRvLWF1dG8tY3VycmVudC1ib3VuZGFyeS10aW1lcikpCisgICAgICAgIChmc2V0 ICd1bmRvLWF1dG8tLXVuZG9hYmxlLWNoYW5nZQorICAgICAgICAgICAgICAobGFtYmRhICgpIChh ZGQtdG8tbGlzdCAndW5kby1hdXRvLS11bmRvYWJseS1jaGFuZ2VkLWJ1ZmZlcnMgKGN1cnJlbnQt YnVmZmVyKSkpKQorICAgICAgICAoZnNldCAndW5kby1hdXRvLWFtYWxnYW1hdGUgJ2lnbm9yZSkp CisgICAgICAod2hlbiBibGluay1jdXJzb3ItbW9kZQorICAgICAgICAoYmxpbmstY3Vyc29yLW1v ZGUgLTEpCisgICAgICAgICh3aGVuIChtZW1xICdibGluay1jdXJzb3ItY2hlY2sgcG9zdC1jb21t YW5kLWhvb2spCisgICAgICAgICAgKHJlbW92ZS1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAnYmxp bmstY3Vyc29yLWNoZWNrKSkpCisgICAgICAod2hlbiAoYW5kIChjYWxsZWQtaW50ZXJhY3RpdmVs eS1wICdhbnkpCisgICAgICAgICAgICAgICAgIChlcXVhbCBjdXJyZW50LXByZWZpeC1hcmcgJyg0 KSkKKyAgICAgICAgICAgICAgICAgKG51bGwgbWMtZmlsbC1jb2x1bW4tZHJhdy1mb3J0aHdpdGgp KQorICAgICAgICAoc2V0cSBtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCB0KSkKKyAgICAg IChzZXRxIG1jLWZpbGwtY29sdW1uIHQpCisgICAgICA7OzsgYGF1dG8tY29tcG9zaXRpb24tbW9k ZScgaXMgbmVlZGVkIGZvciBjcm9zc2hhaXJzIHRvIHByb3Blcmx5IGNhbGN1bGF0ZQorICAgICAg Ozs7IGNvb3JkaW5hdGVzIG9mIGNvbXBvc2l0aW9uIGNoYXJhY3RlcnMuICBBdXRvbWF0aWNhbGx5 IGJlY29tZXMgcGVybWFuZW50bHkKKyAgICAgIDs7OyBidWZmZXItbG9jYWwgd2hlbiBzZXQuCisg ICAgICAodW5sZXNzIGF1dG8tY29tcG9zaXRpb24tbW9kZQorICAgICAgICAoc2V0cSBhdXRvLWNv bXBvc2l0aW9uLW1vZGUgdCkpCisgICAgICA7OzsgQGxhd2xpc3QgaXMgZm9jdXNpbmcgdGhlIGlu aXRpYWwgZGV2ZWxvcG1lbnQgb2YgZmVhdHVyZSByZXF1ZXN0cyAjMTc2ODQKKyAgICAgIDs7OyBh bmQgIzIyODczIG9uIEwyUiBsYW5ndWFnZXMuICBUaGUgZmVhdHVyZSB0ZXN0IGZpbGUgdXNlZCBi eSBAbGF3bGlzdAorICAgICAgOzs7IGJvZ3MgRW1hY3MgZG93biB1bmxlc3MgYGJpZGktZGlzcGxh eS1yZW9yZGVyaW5nJyBpcyBzZXQgdG8gYSBuaWwgdmFsdWUuCisgICAgICA7OzsgSG93ZXZlciwg bW9zdCB1c2VycyB3aWxsIHByb2JhYmx5IG5vdCB3YW50IHRoaXMgcGFydGljdWxhciBzZXR0aW5n LgorICAgICAgKHVubGVzcyAobnVsbCBiaWRpLWRpc3BsYXktcmVvcmRlcmluZykKKyAgICAgICAg KHNldHEgYmlkaS1kaXNwbGF5LXJlb3JkZXJpbmcgbmlsKSkKKyAgICAgICh1bmxlc3MgKGFuZCAo Y2FsbGVkLWludGVyYWN0aXZlbHktcCAnYW55KQorICAgICAgICAgICAgICAgICAgIChlcXVhbCBj dXJyZW50LXByZWZpeC1hcmcgJyg0KSkpCisgICAgICAgIChzZXRxIGZpbGwtY29sdW1uIDgwKQor ICAgICAgICAoaWYgbWMtZmlsbC1jb2x1bW4tZHJhdy1mb3J0aHdpdGgKKyAgICAgICAgICAoYWRk LWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCAn YXBwZW5kICdsb2NhbCkKKyAgICAgICAgICAoYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdt Yy1maWxsLWNvbHVtbi1kcmF3ICdhcHBlbmQgJ2xvY2FsKSkKKyAgICAgICAgKHdoZW4gbWMtZmls bC1jb2x1bW4tZHJhdy1mb3J0aHdpdGgKKyAgICAgICAgICAoYWRkLWhvb2sgJ3dpbmRvdy1jb25m aWd1cmF0aW9uLWNoYW5nZS1ob29rICdtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCBuaWwg J2xvY2FsKSkKKyAgICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29rICd0dXJu LW9mZi1tYy1maWxsLWNvbHVtbi1tb2RlIG5pbCAnbG9jYWwpKQorICAgICAgKHdoZW4gKGNhbGxl ZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgKGlmIChlcXVhbCBjdXJyZW50LXByZWZp eC1hcmcgJyg0KSkKKyAgICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGBtYy1maWxsLWNvbHVt bi1tb2RlJyAtLSBkZWJ1Z2dpbmcgbW9kZS4iKQorICAgICAgICAgIChtZXNzYWdlICJUdXJuZWQg T04gYG1jLWZpbGwtY29sdW1uLW1vZGUnLiIpKSkpCisgICAgKHQKKyAgICAgIChraWxsLWxvY2Fs LXZhcmlhYmxlICdmaWxsLWNvbHVtbikKKyAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1m aWxsLWNvbHVtbikKKyAgICAgICh3aGVuIChtZW1xICdtYy1maWxsLWNvbHVtbi1kcmF3LWZvcnRo d2l0aCBwb3N0LWNvbW1hbmQtaG9vaykKKyAgICAgICAgKHJlbW92ZS1ob29rICdwb3N0LWNvbW1h bmQtaG9vayAnbWMtZmlsbC1jb2x1bW4tZHJhdy1mb3J0aHdpdGggJ2xvY2FsKSkKKyAgICAgICh3 aGVuIChtZW1xICdtYy1maWxsLWNvbHVtbi1kcmF3LWNyb3NzaGFpcnMgcG9zdC1jb21tYW5kLWhv b2spCisgICAgICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ21jLWZpbGwtY29s dW1uLWRyYXctY3Jvc3NoYWlycyAnbG9jYWwpKQorICAgICAgKHdoZW4gKG1lbXEgJ21jLWZpbGwt Y29sdW1uLWRyYXctZm9ydGh3aXRoIHdpbmRvdy1jb25maWd1cmF0aW9uLWNoYW5nZS1ob29rKQor ICAgICAgICAocmVtb3ZlLWhvb2sgJ3dpbmRvdy1jb25maWd1cmF0aW9uLWNoYW5nZS1ob29rICdt Yy1maWxsLWNvbHVtbi1kcmF3LWZvcnRod2l0aCAnbG9jYWwpKQorICAgICAgKHJlbW92ZS1ob29r ICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29rICd0dXJuLW9mZi1tYy1maWxsLWNvbHVtbi1tb2RlICds b2NhbCkKKyAgICAgICh3aGVuIG1jLWZpbGwtY29sdW1uLXRpbWVyLXZhcgorICAgICAgICAoc2V0 cSB0aW1lci1pZGxlLWxpc3QgKGRlbHEgbWMtZmlsbC1jb2x1bW4tdGltZXItdmFyIHRpbWVyLWlk bGUtbGlzdCkpCisgICAgICAgIChzZXRxIG1jLWZpbGwtY29sdW1uLXRpbWVyLXZhciBuaWwpKQor ICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKKyAgICAgICAgKG1lc3Nh Z2UgIlR1cm5lZCBPRkYgYG1jLWZpbGwtY29sdW1uLW1vZGUnLiIpKSkpKQorCisoZGVmdW4gdHVy bi1vZmYtbWMtZmlsbC1jb2x1bW4tbW9kZSAoKQorICAobWMtZmlsbC1jb2x1bW4tbW9kZSAtMSkp CisKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworCisocHJvdmlkZSAnY3Jvc3NoYWlycykKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saXNwL2ZhY2VzLmVsIGIvbGlz cC9mYWNlcy5lbAppbmRleCBhOGMxNTQ2Li5hNjEyMjdlIDEwMDY0NAotLS0gYS9saXNwL2ZhY2Vz LmVsCisrKyBiL2xpc3AvZmFjZXMuZWwKQEAgLTI1MDIsNiArMjUwMiwyNzAgQEAgdW53YW50ZWQg ZWZmZWN0cy4iCiAgIDpncm91cCAnYmFzaWMtZmFjZXMKICAgOmdyb3VwICdkaXNwbGF5LWxpbmUt bnVtYmVycykKIAorCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKKzs7OyBiZWdpbiBNVUxUSVBM RSBDVVJTT1JTCisKKyhkZWZmYWNlICstdmVydGljYWwtYmFyLWZhY2UKKyAgJygodCAoOmZvcmVn cm91bmQgIm1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgKy12ZXJ0aWNhbC1iYXItZmFjZScuICBV c2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLWV2ZW4t bnVtYmVyZWQtY29sdW1uLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgp IChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAieWVsbG93IikKKyAgICAoKChj bGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBndGsp KQorICAgICA6Zm9yZWdyb3VuZCAiZ3RrX3NlbGVjdGlvbl9mZ19jb2xvciIpCisgICAgKCgoY2xh c3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgbnMpKQor ICAgICA6Zm9yZWdyb3VuZCAicHVycGxlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgInB1cnBsZSIpCisg ICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAg ICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3Jz IDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFuZ2UiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRl IikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0 KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1ldmVuLW51bWJl cmVkLWNvbHVtbi1mYWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUp CisKKyhkZWZmYWNlICstb2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlCisgICcoKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQg InJlZCIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBs aWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQgImd0a19zZWxlY3Rpb25fZmdfY29s b3IiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGln aHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgInJlZCIpCisgICAgKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5k ICJyZWQiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQg ZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAib3Jh bmdlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisgICAgIDpmb3JlZ3Jv dW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVy c2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQorICAiRmFjZSBmb3IgYCst b2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlJy4gIFVzZWQgaW4gYHhkaXNwLmMnLiIKKyAgOmdyb3Vw ICcrLW1vZGUpCisKKyhkZWZmYWNlICstZXZlbi1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFj ZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykp CisgICAgIDpmb3JlZ3JvdW5kICIjZWVlOGFhIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1j b2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBndGspKQorICAgICA6Zm9yZWdyb3Vu ZCAiZ3RrX3NlbGVjdGlvbl9mZ19jb2xvciIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgbnMpKQorICAgICA6Zm9yZWdyb3VuZCAi cHVycGxlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3Vu ZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJwdXJwbGUzIikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAi eWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpIChiYWNrZ3JvdW5k IGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIpCisgICAgKCgoY2xhc3MgY29sb3Ip IChtaW4tY29sb3JzIDgpKQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiKQorICAgICgoKHR5cGUg dHR5KSAoY2xhc3MgbW9ubykpCisgICAgIDppbnZlcnNlLXZpZGVvIHQpCisgICAgKHQgOmZvcmVn cm91bmQgInBpbmsiKSkKKyAgIkZhY2UgZm9yIGArLWV2ZW4tbnVtYmVyZWQtY29sdW1uLWluYWN0 aXZlLWZhY2UnLiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRl ZmZhY2UgKy1vZGQtbnVtYmVyZWQtY29sdW1uLWluYWN0aXZlLWZhY2UKKyAgJygoKChjbGFzcyBj b2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3Vu ZCAiI2ZmNjM0NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQgImd0a19zZWxlY3Rpb25f ZmdfY29sb3IiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91 bmQgbGlnaHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIpCisgICAgKCgo Y2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpm b3JlZ3JvdW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikg KGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKQorICAgICgoKGNs YXNzIGNvbG9yKSAobWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9y ZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgOCkpCisg ICAgIDpmb3JlZ3JvdW5kICJ3aGl0ZSIpCisgICAgKCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkK KyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6Zm9yZWdyb3VuZCAicGluayIpKQorICAi RmFjZSBmb3IgYCstb2RkLW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNlJy4gIFVzZWQgaW4g YHhkaXNwLmMnLiIKKyAgOmdyb3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstYmV5b25kLWZpbGwt Y29sdW1uLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3Jv dW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JlZW4iKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBlIGd0aykpCisgICAgIDpm b3JlZ3JvdW5kICJndGtfc2VsZWN0aW9uX2ZnX2NvbG9yIikKKyAgICAoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpmb3Jl Z3JvdW5kICJncmVlbiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFj a2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJncmVlbiIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91 bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dy b3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0 eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpm b3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNlIGZvciBgKy1iZXlvbmQtZmlsbC1jb2x1bW4tZmFj ZScuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisKKyhkZWZmYWNl ICstYmV5b25kLWZpbGwtY29sdW1uLWluYWN0aXZlLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikg KG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiIzJl OGI1NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBs aWdodCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQgImd0a19zZWxlY3Rpb25fZmdfY29s b3IiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGln aHQpICh0eXBlIG5zKSkKKyAgICAgOmZvcmVncm91bmQgIiMyZThiNTciKQorICAgICgoKGNsYXNz IGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdy b3VuZCAiIzJlOGI1NyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFj a2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIpCisgICAgKCgoY2xhc3Mg Y29sb3IpIChtaW4tY29sb3JzIDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3Jv dW5kICJvcmFuZ2UiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKKyAgICAg OmZvcmVncm91bmQgIndoaXRlIikKKyAgICAoKCh0eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAg ICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpmb3JlZ3JvdW5kICJwaW5rIikpCisgICJGYWNl IGZvciBgKy1iZXlvbmQtZmlsbC1jb2x1bW4taW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlz cC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJlYWwtZmFrZS1jdXJzb3It ZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFy aykpCisgICAgIDpmb3JlZ3JvdW5kICJjeWFuIiA6YmFja2dyb3VuZCAiRGFya0JsdWUiKQorICAg ICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpICh0eXBl IGd0aykpCisgICAgIDpmb3JlZ3JvdW5kICJndGtfc2VsZWN0aW9uX2ZnX2NvbG9yIiA6YmFja2dy b3VuZCAiZ3RrX3NlbGVjdGlvbl9iZ19jb2xvciIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4t Y29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgbnMpKQorICAgICA6Zm9yZWdyb3Vu ZCAiYmxhY2siIDpiYWNrZ3JvdW5kICJMaWdodFNreUJsdWUiKQorICAgICgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAi YmxhY2siIDpiYWNrZ3JvdW5kICJMaWdodFNreUJsdWUiKQorICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxs b3ciIDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3Jz IDE2KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFuZ2UiIDpiYWNr Z3JvdW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9y cyA4KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6YmFja2dyb3VuZCAiYmx1ZSIpCisgICAg KCgodHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAo dCA6Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImdyYXkiKSkKKyAgIkZhY2UgZm9yIGAr LXJlYWwtZmFrZS1jdXJzb3ItZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4KK0FzIHRvIGEgaG9s bG93IHN0eWxlIGN1cnNvciwgdGhlIDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0 aGUgYm9yZGVyIGFuZAordGhlIDpiYWNrZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZvciB0aGUg aW5uZXIgZmlsbGVkIHNoYWRpbmcuICBUaGUgY2hhcmFjdGVyCityZXRhaW5zIGl0cyBvd24gZm9y ZWdyb3VuZCBjb2xvciBhbmQgaXMgdW5hZmZlY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIgZmFjZS4i CisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3Rp dmUtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQg ZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICIjZmYwMGZmIiA6YmFja2dyb3VuZCAiRm9yZXN0R3Jl ZW4iKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGln aHQpICh0eXBlIGd0aykpCisgICAgIDpmb3JlZ3JvdW5kICJndGtfc2VsZWN0aW9uX2ZnX2NvbG9y IiA6YmFja2dyb3VuZCAiZ3RrX3NlbGVjdGlvbl9iZ19jb2xvciIpCisgICAgKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkgKHR5cGUgbnMpKQorICAgICA6 Zm9yZWdyb3VuZCAiYmxhY2siIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3Vu ZCAiYmxhY2siIDpiYWNrZ3JvdW5kICJncmV5NzAiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWlu LWNvbG9ycyAxNikgKGJhY2tncm91bmQgZGFyaykpCisgICAgIDpmb3JlZ3JvdW5kICJ5ZWxsb3ci IDpiYWNrZ3JvdW5kICJibHVlMyIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDE2 KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5kICJvcmFuZ2UiIDpiYWNrZ3Jv dW5kICJsaWdodGdvbGRlbnJvZDIiKQorICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 KSkKKyAgICAgOmZvcmVncm91bmQgIndoaXRlIiA6YmFja2dyb3VuZCAiYmx1ZSIpCisgICAgKCgo dHlwZSB0dHkpIChjbGFzcyBtb25vKSkKKyAgICAgOmludmVyc2UtdmlkZW8gdCkKKyAgICAodCA6 Zm9yZWdyb3VuZCAicGluayIgOmJhY2tncm91bmQgImdyYXkiKSkKKyAgIkZhY2UgZm9yIGArLXJl YWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4KK0FzIHRv IGEgaG9sbG93IHN0eWxlIGN1cnNvciwgdGhlIDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2Vk IGZvciB0aGUgYm9yZGVyIGFuZAordGhlIDpiYWNrZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZv ciB0aGUgaW5uZXIgZmlsbGVkIHNoYWRpbmcuICBUaGUgY2hhcmFjdGVyCityZXRhaW5zIGl0cyBv d24gZm9yZWdyb3VuZCBjb2xvciBhbmQgaXMgdW5hZmZlY3RlZCBieSB0aGlzIHBhcnRpY3VsYXIg ZmFjZS4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLXJlYWwtZmFrZS1jdXJzb3It cmVnaW9uLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3Jv dW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAiZ3JleTE1IiA6YmFja2dyb3VuZCAiIzhiNzk1 ZSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdo dCkgKHR5cGUgZ3RrKSkKKyAgICAgOmZvcmVncm91bmQgImd0a19zZWxlY3Rpb25fZmdfY29sb3Ii IDpiYWNrZ3JvdW5kICJndGtfc2VsZWN0aW9uX2JnX2NvbG9yIikKKyAgICAoKChjbGFzcyBjb2xv cikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSAodHlwZSBucykpCisgICAgIDpm b3JlZ3JvdW5kICJwaW5rIiA6YmFja2dyb3VuZCAiIzhiNzk1ZSIpCisgICAgKCgoY2xhc3MgY29s b3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpCisgICAgIDpmb3JlZ3JvdW5k ICJwaW5rIiA6YmFja2dyb3VuZCAiIzhiNzk1ZSIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4t Y29sb3JzIDE2KSAoYmFja2dyb3VuZCBkYXJrKSkKKyAgICAgOmZvcmVncm91bmQgInllbGxvdyIg OmJhY2tncm91bmQgImJsdWUzIikKKyAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYp IChiYWNrZ3JvdW5kIGxpZ2h0KSkKKyAgICAgOmZvcmVncm91bmQgIm9yYW5nZSIgOmJhY2tncm91 bmQgImxpZ2h0Z29sZGVucm9kMiIpCisgICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgp KQorICAgICA6Zm9yZWdyb3VuZCAid2hpdGUiIDpiYWNrZ3JvdW5kICJibHVlIikKKyAgICAoKCh0 eXBlIHR0eSkgKGNsYXNzIG1vbm8pKQorICAgICA6aW52ZXJzZS12aWRlbyB0KQorICAgICh0IDpm b3JlZ3JvdW5kICJwaW5rIiA6YmFja2dyb3VuZCAiZ3JheSIpKQorICAiRmFjZSBmb3IgYCstcmVh bC1mYWtlLWN1cnNvci1yZWdpb24tZmFjZScuICBVc2VkIGluIGB4ZGlzcC5jJy4KK0FzIHRvIGEg aG9sbG93IHN0eWxlIGN1cnNvciwgdGhlIDpmb3JlZ3JvdW5kIHBhcmFtZXRlciBpcyB1c2VkIGZv ciB0aGUgaW5uZXIKK2ZpbGxlZCBzaGFkaW5nIHdoZW4gUFQgaXMgX25vdF8gd2l0aGluIHRoZSBh Y3RpdmUgcmVnaW9uOyBhbmQsIHRoZSA6YmFja2dyb3VuZAorcGFyYW1ldGVyIGlzIHVzZWQgZm9y IHRoZSBpbm5lciBmaWxsZWQgc2hhZGluZyB3aGVuIFBUIF9pc18gd2l0aGluIHRoZSBhY3RpdmUK K3JlZ2lvbi4gIFRoZSBjaGFyYWN0ZXIgcmV0YWlucyBpdHMgb3duIGZvcmVncm91bmQgY29sb3Ig YW5kIGlzIHVuYWZmZWN0ZWQgYnkgdGhpcworcGFydGljdWxhciBmYWNlLiIKKyAgOmdyb3VwICcr LW1vZGUpCisKKyhkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1mYWNlCisgICcoKHQgKDpmb3JlZ3Jv dW5kICJyZWQiKSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1taW5pbWFsLWZhY2UKKyAg JygodCAoOmZvcmVncm91bmQgImJsdWUiKSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93 LW1pbmltYWwtZmFjZScuIgorICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vdmVybGF5 LWFycm93LWluYWN0aXZlLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIkRhcmtTbGF0ZUdyZXki KSkpCisgICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWluYWN0aXZlLWZhY2UnLiIKKyAgOmdy b3VwICcrLW1vZGUpCisKKyhkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1oc2NsLWZhY2UKKyAgJygo dCAoOmZvcmVncm91bmQgIkRhcmtHcmVlbiIpKSkKKyAgIkZhY2UgZm9yIGArLW92ZXJsYXktYXJy b3ctaHNjbC1mYWNlJy4iCisgIDpncm91cCAnKy1tb2RlKQorCisoZGVmZmFjZSArLW92ZXJsYXkt YXJyb3ctaHNjbC1taW5pbWFsLWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgIlNhZGRsZUJyb3du IikpKQorICAiRmFjZSBmb3IgYCstb3ZlcmxheS1hcnJvdy1oc2NsLW1pbmltYWwtZmFjZScuIgor ICA6Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgKy1vdmVybGF5LWFycm93LWhzY2wtaW5hY3Rp dmUtZmFjZQorICAnKCh0ICg6Zm9yZWdyb3VuZCAiRGFya1NsYXRlR3JleSIpKSkKKyAgIkZhY2Ug Zm9yIGArLW92ZXJsYXktYXJyb3ctaHNjbC1pbmFjdGl2ZS1mYWNlJy4iCisgIDpncm91cCAnKy1t b2RlKQorCisoZGVmZmFjZSBtYy1maWxsLWNvbHVtbi1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5k ICJncmV5MTUiKSkpCisgICJGYWNlIGZvciBgbWMtZmlsbC1jb2x1bW4tZmFjZScgaW4gdGhlIGFj dGl2ZSB3aW5kb3cuICBVc2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCiso ZGVmZmFjZSBtYy1maWxsLWNvbHVtbi1pbmFjdGl2ZS1mYWNlCisgICcoKHQgKDpmb3JlZ3JvdW5k ICJEYXJrQmx1ZSIpKSkKKyAgIkZhY2UgZm9yIGBtYy1maWxsLWNvbHVtbi1pbmFjdGl2ZS1mYWNl JyBpbiB0aGUgaW5hY3RpdmUgd2luZG93LiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6Z3JvdXAg JystbW9kZSkKKworKGRlZmZhY2UgbWMtZmlsbC1jb2x1bW4tb3BvaW50LWZhY2UKKyAgJygodCAo OmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCisgICJGYWNlIGZvciBgbWMtZmlsbC1jb2x1bW4tb3Bv aW50LWZhY2UnIGluIHRoZSBhY3RpdmUgd2luZG93LiAgVXNlZCBpbiBgeGRpc3AuYycuIgorICA6 Z3JvdXAgJystbW9kZSkKKworKGRlZmZhY2UgbWMtZmlsbC1jb2x1bW4tb3BvaW50LWluYWN0aXZl LWZhY2UKKyAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCisgICJGYWNlIGZvciBgbWMtZmls bC1jb2x1bW4tb3BvaW50LWluYWN0aXZlLWZhY2UnIGluIHRoZSBpbmFjdGl2ZSB3aW5kb3cuICBV c2VkIGluIGB4ZGlzcC5jJy4iCisgIDpncm91cCAnKy1tb2RlKQorCis7OzsgZW5kIE1VTFRJUExF IENVUlNPUlMKKzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworCisKIChkZWZmYWNlIGVzY2FwZS1n bHlwaAogICAnKCgoKGJhY2tncm91bmQgZGFyaykpIDpmb3JlZ3JvdW5kICJjeWFuIikKICAgICA7 OyBTZWUgdGhlIGNvbW1lbnQgaW4gbWluaWJ1ZmZlci1wcm9tcHQgZm9yCmRpZmYgLS1naXQgYS9z cmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMKaW5kZXggOTBlZjg4Ni4uNzkxMmU1ZSAxMDA2NDQK LS0tIGEvc3JjL2J1ZmZlci5jCisrKyBiL3NyYy9idWZmZXIuYwpAQCAtNTA5Nyw2ICs1MDk3LDI4 IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAgIGJzZXRfbGFzdF9zZWxlY3RlZF93aW5kb3cg KCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1ha2VfZml4bnVtICgwKSk7CiAKICAgaWR4ID0gMTsKKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBY U0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWNfcmVhbF9mYWtlX2N1cnNv ciksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFn cywgbXVsdGlwbGVfY3Vyc29yc19jb25mKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChC VkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtdWx0aXBsZV9jdXJzb3JzX2RyYXdfZm9ydGh3aXRo KSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdz LCBtdWx0aXBsZV9jdXJzb3JzX2luYWN0aXZlX3dpbmRvd3MpLCBpZHgpOyArK2lkeDsKKyAgWFNF VEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnMpLCBpZHgpOyAr K2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFp cnNfaG9yaXpvbnRhbF9ydWxlciksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAo JmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciksIGlkeCk7ICsr aWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWly c19kcmF3X2ZvcnRod2l0aCksIGlkeCk7ICsraWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1 ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSwgaWR4KTsgKytp ZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBtY19zdGRlcnIp LCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3Ms IG1jX2ZpbGxfY29sdW1uKSwgaWR4KTsgKytpZHg7CisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVm ZmVyX2xvY2FsX2ZsYWdzLCBtY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aCksIGlkeCk7ICsr aWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWNfZmlsbF9j b2x1bW5faW5hY3RpdmVfd2luZG93cyksIGlkeCk7ICsraWR4OworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKworCiAgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdzLCBt b2RlX2xpbmVfZm9ybWF0KSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVm ZmVyX2xvY2FsX2ZsYWdzLCBhYmJyZXZfbW9kZSksIGlkeCk7ICsraWR4OwogICBYU0VURkFTVElO VCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgb3ZlcndyaXRlX21vZGUpLCBpZHgpOyArK2lk eDsKQEAgLTUxNzgsNiArNTIwMCwyOCBAQCBpbml0X2J1ZmZlcl9vbmNlICh2b2lkKQogICAvKiBN dXN0IGRvIHRoZXNlIGJlZm9yZSBtYWtpbmcgdGhlIGZpcnN0IGJ1ZmZlciEgKi8KIAogICAvKiBy ZWFsIHNldHVwIGlzIGRvbmUgaW4gYmluZGluZ3MuZWwgKi8KKworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBic2V0X2Jsdl9tY19yZWFsX2Zh a2VfY3Vyc29yICgmYnVmZmVyX2RlZmF1bHRzLCBRaG9sbG93KTsKKyAgYnNldF9ibHZfbXVsdGlw bGVfY3Vyc29yc19jb25mICgmYnVmZmVyX2RlZmF1bHRzLCBRbmlsKTsKKyAgYnNldF9ibHZfbXVs dGlwbGVfY3Vyc29yc19kcmF3X2ZvcnRod2l0aCAoJmJ1ZmZlcl9kZWZhdWx0cywgUXQpOworICBi c2V0X2Jsdl9tdWx0aXBsZV9jdXJzb3JzX2luYWN0aXZlX3dpbmRvd3MgKCZidWZmZXJfZGVmYXVs dHMsIFF0KTsKKyAgYnNldF9ibHZfY3Jvc3NoYWlycyAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7 CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciAoJmJ1ZmZlcl9kZWZhdWx0 cywgUXQpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyICgmYnVmZmVyX2Rl ZmF1bHRzLCBRdCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnNfZHJhd19mb3J0aHdpdGggKCZidWZm ZXJfZGVmYXVsdHMsIFFuaWwpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRv d3MgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9ibHZfbWNfc3RkZXJyICgmYnVmZmVy X2RlZmF1bHRzLCBRbmlsKTsKKyAgYnNldF9ibHZfbWNfZmlsbF9jb2x1bW4gKCZidWZmZXJfZGVm YXVsdHMsIFFuaWwpOworICBic2V0X2Jsdl9tY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aCAo JmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CisgIGJzZXRfYmx2X21jX2ZpbGxfY29sdW1uX2luYWN0 aXZlX3dpbmRvd3MgKCZidWZmZXJfZGVmYXVsdHMsIFF0KTsKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKKwogICBic2V0X21vZGVfbGluZV9mb3JtYXQgKCZidWZmZXJfZGVmYXVsdHMsIGJ1 aWxkX3B1cmVfY19zdHJpbmcgKCIlLSIpKTsKICAgYnNldF9oZWFkZXJfbGluZV9mb3JtYXQgKCZi dWZmZXJfZGVmYXVsdHMsIFFuaWwpOwogICBic2V0X2FiYnJldl9tb2RlICgmYnVmZmVyX2RlZmF1 bHRzLCBRbmlsKTsKQEAgLTU0MTYsNiArNTQ2MCwyNyBAQCBzeW1zX29mX2J1ZmZlciAodm9pZCkK ICAgc3RhdGljcHJvICgmUVNGdW5kYW1lbnRhbCk7CiAgIHN0YXRpY3BybyAoJlZidWZmZXJfYWxp c3QpOwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAq LworCisgIERFRlNZTSAoUW1jX3JlYWxfZmFrZV9jdXJzb3IsICJtYy1yZWFsLWZha2UtY3Vyc29y Iik7CisgIERFRlNZTSAoUW11bHRpcGxlX2N1cnNvcnNfY29uZiwgIm11bHRpcGxlLWN1cnNvcnMt Y29uZiIpOworICBERUZTWU0gKFFtdWx0aXBsZV9jdXJzb3JzX2RyYXdfZm9ydGh3aXRoLCAibXVs dGlwbGUtY3Vyc29ycy1kcmF3LWZvcnRod2l0aCIpOworICBERUZTWU0gKFFtdWx0aXBsZV9jdXJz b3JzX2luYWN0aXZlX3dpbmRvd3MsICJtdWx0aXBsZS1jdXJzb3JzLWluYWN0aXZlLXdpbmRvd3Mi KTsKKyAgREVGU1lNIChRY3Jvc3NoYWlycywgImNyb3NzaGFpcnMiKTsKKyAgREVGU1lNIChRY3Jv c3NoYWlyc19ob3Jpem9udGFsX3J1bGVyLCAiY3Jvc3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyIik7 CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIsICJjcm9zc2hhaXJzLXZlcnRp Y2FsLXJ1bGVyIik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfZHJhd19mb3J0aHdpdGgsICJjcm9z c2hhaXJzLWRyYXctZm9ydGh3aXRoIik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfaW5hY3RpdmVf d2luZG93cywgImNyb3NzaGFpcnMtaW5hY3RpdmUtd2luZG93cyIpOworICBERUZTWU0gKFFtY19z dGRlcnIsICJtYy1zdGRlcnIiKTsKKyAgREVGU1lNIChRbWNfZmlsbF9jb2x1bW4sICJtYy1maWxs LWNvbHVtbiIpOworICBERUZTWU0gKFFtY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aCwgIm1j LWZpbGwtY29sdW1uLWRyYXctZm9ydGh3aXRoIik7CisgIERFRlNZTSAoUW1jX2ZpbGxfY29sdW1u X2luYWN0aXZlX3dpbmRvdywgIm1jLWZpbGwtY29sdW1uLWluYWN0aXZlLXdpbmRvdyIpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERFRlNZTSAoUWNob2ljZSwgImNob2ljZSIp OwogICBERUZTWU0gKFFsZWZ0LCAibGVmdCIpOwogICBERUZTWU0gKFFyaWdodCwgInJpZ2h0Iik7 CkBAIC01NDUzLDYgKzU1MTgsNjUgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIEZwdXQgKFFw cm90ZWN0ZWRfZmllbGQsIFFlcnJvcl9tZXNzYWdlLAogCWJ1aWxkX3B1cmVfY19zdHJpbmcgKCJB dHRlbXB0IHRvIG1vZGlmeSBhIHByb3RlY3RlZCBmaWVsZCIpKTsKIAorCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBERUZWQVJfUEVSX0JVRkZF UiAoIm1jLXJlYWwtZmFrZS1jdXJzb3IiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3JlYWxf ZmFrZV9jdXJzb3IpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJpYWJsZSB0 byBzZXQgdGhlIGN1cnNvciB0eXBlIG9mIHRoZSByZWFsIGZha2UgY3Vyc29yLiAqLyk7CisKKyAg REVGVkFSX1BFUl9CVUZGRVIgKCJtdWx0aXBsZS1jdXJzb3JzLWNvbmYiLCAmQlZBUiAoY3VycmVu dF9idWZmZXIsIG11bHRpcGxlX2N1cnNvcnNfY29uZiksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1 ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGlwbGUgY3Vy c29ycyB0byBiZSBkaXNwbGF5ZWQKK2R1cmluZyB0aGUgbmV4dCByZWRpc3BsYXkuICovKTsKKwor ICBERUZWQVJfUEVSX0JVRkZFUiAoIm11bHRpcGxlLWN1cnNvcnMtZHJhdy1mb3J0aHdpdGgiLCAm QlZBUiAoY3VycmVudF9idWZmZXIsIG11bHRpcGxlX2N1cnNvcnNfZHJhd19mb3J0aHdpdGgpLCBR bmlsLAorICAgIGRvYzogLyogV2hlbiBub24tbmlsLCBkcmF3IG11bHRpcGxlIGN1cnNvcnMgd2hl bmV2ZXIgdGhlIHJlYWwgY3Vyc29yIHdvdWxkCitvcmRpbmFyaWx5IGJlIGRyYXduLCB3aGljaCBp cyBzb21ldGltZXMgbW9yZSB0aGFuIG9uY2UgZXZlcnkgY29tbWFuZCBsb29wLgorV2hlbiBuaWws IG11bHRpcGxlLWN1cnNvcnMgd2lsbCBiZSBwbGFjZWQgb24gYW4gaWRsZS10aW1lci4gIElmIHRo aXMgdmFyaWFibGUgaXMKK3Jlc2V0IHdoaWxlIGBtdWx0aXBsZS1jdXJzb3JzLW1vZGUnIGlzIGVu YWJsZWQsIHRoZW4gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB0dXJuIG9mZi9vbgorYG11bHRpcGxl LWN1cnNvcnMtbW9kZScgdG8gcmVzZXQgZnVuY3Rpb25zIGF0dGFjaGVkIHRvIHRoZSBgcG9zdC1j b21tYW5kLWhvb2snLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtdWx0aXBsZS1jdXJz b3JzLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG11bHRpcGxlX2N1 cnNvcnNfaW5hY3RpdmVfd2luZG93cyksIFFuaWwsCisgICAgZG9jOiAvKiBXaGVuIG5vbi1uaWws IGRyYXcgbXVsdGlwbGUgY3Vyc29ycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLyk7CisKKyAgREVG VkFSX1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzIiwgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjcm9z c2hhaXJzKSwgUW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gYWN0 aXZhdGUvZGVhY3RpdmF0ZSBjcm9zc2hhaXJzLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIg KCJjcm9zc2hhaXJzLWhvcml6b250YWwtcnVsZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNy b3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxv Y2FsIHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3NzaGFpcnMgaG9yaXpv bnRhbCBydWxlci4gKi8pOworCisgIERFRlZBUl9QRVJfQlVGRkVSICgiY3Jvc3NoYWlycy12ZXJ0 aWNhbC1ydWxlciIsICZCVkFSIChjdXJyZW50X2J1ZmZlciwgY3Jvc3NoYWlyc192ZXJ0aWNhbF9y dWxlciksIFFuaWwsCisgICAgZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2 YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3NzaGFpcnMgdmVydGljYWwgcnVsZXIuICovKTsKKworICBE RUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMtZHJhdy1mb3J0aHdpdGgiLCAmQlZBUiAoY3Vy cmVudF9idWZmZXIsIGNyb3NzaGFpcnNfZHJhd19mb3J0aHdpdGgpLCBRbmlsLAorICAgIGRvYzog LyogV2hlbiBub24tbmlsLCBkcmF3IGNyb3NzaGFpcnMgd2hlbmV2ZXIgdGhlIHJlYWwgY3Vyc29y IHdvdWxkCitvcmRpbmFyaWx5IGJlIGRyYXduLCB3aGljaCBpcyBzb21ldGltZXMgbW9yZSB0aGFu IG9uY2UgZXZlcnkgY29tbWFuZCBsb29wLgorV2hlbiBuaWwsIGNyb3NzaGFpcnMgd2lsbCBiZSBw bGFjZWQgb24gYW4gaWRsZS10aW1lci4gIElmIHRoaXMgdmFyaWFibGUgaXMKK3Jlc2V0IHdoaWxl IGArLW1vZGUnIGlzIGVuYWJsZWQsIHRoZW4gaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB0dXJuIG9m Zi9vbgorYCstbW9kZScgdG8gcmVzZXQgZnVuY3Rpb25zIGF0dGFjaGVkIHRvIHRoZSBgcG9zdC1j b21tYW5kLWhvb2snLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzLWlu YWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFpcnNfaW5hY3Rp dmVfd2luZG93cyksIFFuaWwsCisgICAgZG9jOiAvKiBXaGVuIG5vbi1uaWwsIGRyYXcgY3Jvc3No YWlycyBpbiBpbmFjdGl2ZSB3aW5kb3dzLiAqLyk7CisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJt Yy1zdGRlcnIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3N0ZGVyciksIFFuaWwsCisgICAg ZG9jOiAvKiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgZGVi dWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyci4gKi8pOworCisgIERFRlZBUl9QRVJfQlVGRkVSICgi bWMtZmlsbC1jb2x1bW4iLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX2ZpbGxfY29sdW1uKSwg UW5pbCwKKyAgICBkb2M6IC8qIEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gdHVybiBvbi9vZmYg dGhlIG11bHRpcGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4uICovKTsKKworICBERUZWQVJfUEVSX0JV RkZFUiAoIm1jLWZpbGwtY29sdW1uLWRyYXctZm9ydGh3aXRoIiwgJkJWQVIgKGN1cnJlbnRfYnVm ZmVyLCBtY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aCksIFFuaWwsCisgICAgZG9jOiAvKiBX aGVuIG5vbi1uaWwsIGRyYXcgbXVsdGlwbGUgY3Vyc29ycyBmaWxsIGNvbHVtbiB3aGVuZXZlciB0 aGUgcmVhbCBjdXJzb3Igd291bGQKK29yZGluYXJpbHkgYmUgZHJhd24sIHdoaWNoIGlzIHNvbWV0 aW1lcyBtb3JlIHRoYW4gb25jZSBldmVyeSBjb21tYW5kIGxvb3AuCitXaGVuIG5pbCwgdGhlIG11 bHRpcGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4gd2lsbCBiZSBwbGFjZWQgb24gYW4gaWRsZS10aW1l ci4gIElmIHRoaXMgdmFyaWFibGUKK2lzIHJlc2V0IHdoaWxlIGBtYy1maWxsLWNvbHVtbi1tb2Rl JyBpcyBlbmFibGVkLCB0aGVuIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdHVybiBvZmYvb24KK2Bt Yy1maWxsLWNvbHVtbi1tb2RlJyB0byByZXNldCBmdW5jdGlvbnMgYXR0YWNoZWQgdG8gdGhlIGBw b3N0LWNvbW1hbmQtaG9vaycuICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoIm1jLWZpbGwt Y29sdW1uLWluYWN0aXZlLXdpbmRvd3MiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX2ZpbGxf Y29sdW1uX2luYWN0aXZlX3dpbmRvd3MpLCBRbmlsLAorICAgIGRvYzogLyogV2hlbiBub24tbmls LCBkcmF3IG11bHRpcGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4gaW4gaW5hY3RpdmUgd2luZG93cy4g Ki8pOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERFRlZBUl9QRVJfQlVGRkVS ICgiaGVhZGVyLWxpbmUtZm9ybWF0IiwKIAkJICAgICAmQlZBUiAoY3VycmVudF9idWZmZXIsIGhl YWRlcl9saW5lX2Zvcm1hdCksCiAJCSAgICAgUW5pbCwKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIu aCBiL3NyYy9idWZmZXIuaAppbmRleCA0ZWE3ZmE2Li4yMzA1ZjQ3IDEwMDY0NAotLS0gYS9zcmMv YnVmZmVyLmgKKysrIGIvc3JjL2J1ZmZlci5oCkBAIC02MzYsNiArNjM2LDUyIEBAIHN0cnVjdCBi dWZmZXIKICAgICAgY2FjaGUgYXJlIGVuYWJsZWQuICBTZWUgc2VhcmNoLmMsIGluZGVudC5jIGFu ZCBiaWRpLmMgZm9yIGRldGFpbHMuICAqLwogICBMaXNwX09iamVjdCBjYWNoZV9sb25nX3NjYW5z XzsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8K KworICAvKiBUaGUgY3Vyc29yIHR5cGUgb2YgdGhlIHJlYWwgZmFrZSBjdXJzb3IuICovCisgIExp c3BfT2JqZWN0IG1jX3JlYWxfZmFrZV9jdXJzb3JfOworCisgIC8qIFRoZSBuYW1lIG9mIGxpc3Qg dXNlZCBieSBtdWx0aXBsZSBjdXJzb3JzIGZvciBuZXh0IHJlZGlzcGxheS4gKi8KKyAgTGlzcF9P YmplY3QgbXVsdGlwbGVfY3Vyc29yc19jb25mXzsKKworICAvKiBXaGV0aGVyIHRvIGRyYXcgbXVs dGlwbGUgY3Vyc29ycyBpbW1lZGlhdGVseSwgb3Igb24gYW4gaWRsZS10aW1lci4gKi8KKyAgTGlz cF9PYmplY3QgbXVsdGlwbGVfY3Vyc29yc19kcmF3X2ZvcnRod2l0aF87CisKKyAgLyogV2hldGhl ciB0byBkcmF3IG11bHRpcGxlIGN1cnNvcnMgaW4gaW5hY3RpdmUgd2luZG93cy4gKi8KKyAgTGlz cF9PYmplY3QgbXVsdGlwbGVfY3Vyc29yc19pbmFjdGl2ZV93aW5kb3dzXzsKKworICAvKiBUaGUg bmFtZSBvZiB0aGUgYnVmZmVyLWxvY2FsIHZhcmlhYmxlLiAqLworICBMaXNwX09iamVjdCBjcm9z c2hhaXJzXzsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgY3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1 bGVyLiAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXJfOworCisg IC8qIFRoZSBuYW1lIG9mIHRoZSBjcm9zc2hhaXJzIHZlcnRpY2FsIHJ1bGVyLiAqLworICBMaXNw X09iamVjdCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyXzsKKworICAvKiBXaGV0aGVyIHRvIGRy YXcgY3Jvc3NoYWlycyBpbW1lZGlhdGVseSwgb3Igb24gYW4gaWRsZS10aW1lci4gKi8KKyAgTGlz cF9PYmplY3QgY3Jvc3NoYWlyc19kcmF3X2ZvcnRod2l0aF87CisKKyAgLyogV2hldGhlciB0byBk cmF3IGNyb3NzaGFpcnMgaW4gaW5hY3RpdmUgd2luZG93cy4gKi8KKyAgTGlzcF9PYmplY3QgY3Jv c3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzXzsKKworICAvKiBVc2VkIGluIGNvbmp1bmN0aW9uIHdp dGggZ2VuZXJhdGluZyBzdGRlcnIgZGVidWdnaW5nIG1lc3NhZ2UuICovCisgIExpc3BfT2JqZWN0 IG1jX3N0ZGVycl87CisKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJs ZS4gKi8KKyAgTGlzcF9PYmplY3QgbWNfZmlsbF9jb2x1bW5fOworCisgIC8qIFdoZXRoZXIgdG8g ZHJhdyBtdWx0aXBsZSBjdXJzb3JzIGZpbGwgY29sdW1uIGltbWVkaWF0ZWx5LCBvciBvbiBhbiBp ZGxlLXRpbWVyLiAqLworICBMaXNwX09iamVjdCBtY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0 aF87CisKKyAgLyogV2hldGhlciB0byBkcmF3IG11bHRpcGxlIGN1cnNvcnMgZmlsbCBjb2x1bW4g aW4gaW5hY3RpdmUgd2luZG93cy4gKi8KKyAgTGlzcF9PYmplY3QgbWNfZmlsbF9jb2x1bW5faW5h Y3RpdmVfd2luZG93c187CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogSWYg dGhlIHdpZHRoIHJ1biBjYWNoZSBpcyBlbmFibGVkLCB0aGlzIHRhYmxlIGNvbnRhaW5zIHRoZQog ICAgICBjaGFyYWN0ZXIgd2lkdGhzIHdpZHRoX3J1bl9jYWNoZSAoc2VlIGFib3ZlKSBhc3N1bWVz LiAgV2hlbiB3ZQogICAgICBkbyBhIHRob3JvdWdoIHJlZGlzcGxheSwgd2UgY29tcGFyZSB0aGlz IGFnYWluc3QgdGhlIGJ1ZmZlcidzCkBAIC03OTIsOSArODM4LDE3IEBAIHN0cnVjdCBidWZmZXIK ICAgICAgZm9yIGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlIGlzIHN0b3JlZCBpbiB0aGF0IHZhcmlh YmxlJ3Mgc2xvdAogICAgICBpbiBidWZmZXJfbG9jYWxfZmxhZ3MgYXMgYSBMaXNwIGludGVnZXIu ICBJZiB0aGUgaW5kZXggaXMgLTEsCiAgICAgIHRoaXMgbWVhbnMgdGhlIHZhcmlhYmxlIGlzIGFs d2F5cyBsb2NhbCBpbiBhbGwgYnVmZmVycy4gICovCi0jZGVmaW5lIE1BWF9QRVJfQlVGRkVSX1ZB UlMgNTAKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMg Ki8KKworI2RlZmluZSBNQVhfUEVSX0JVRkZFUl9WQVJTIDYwCiAgIGNoYXIgbG9jYWxfZmxhZ3Nb TUFYX1BFUl9CVUZGRVJfVkFSU107CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAg LyogU2V0IHRvIHRoZSBtb2R0aW1lIG9mIHRoZSB2aXNpdGVkIGZpbGUgd2hlbiByZWFkIG9yIHdy aXR0ZW4uCiAgICAgIG1vZHRpbWUudHZfbnNlYyA9PSBOT05FWElTVEVOVF9NT0RUSU1FX05TRUNT IG1lYW5zCiAgICAgIHZpc2l0ZWQgZmlsZSB3YXMgbm9uZXhpc3RlbnQuICBtb2R0aW1lLnR2X25z ZWMgPT0KQEAgLTg5Niw2ICs5NTAsOTIgQEAgWEJVRkZFUiAoTGlzcF9PYmplY3QgYSkKIC8qIE1v c3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcCBmaWVsZHMgaW4g c3RydWN0CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJzIHRoYXQgYXJlIHByaXZhdGUgdG8gYSBz aW5nbGUgLmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMgc3RhdGljIGluIHRob3NlIGZpbGVzLikg ICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICov CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9tY19yZWFsX2Zha2VfY3Vyc29yIChzdHJ1Y3QgYnVm ZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm1jX3JlYWxfZmFrZV9jdXJzb3JfID0g dmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbXVsdGlwbGVfY3Vyc29yc19jb25mIChz dHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm11bHRpcGxlX2N1cnNv cnNfY29uZl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9tdWx0aXBsZV9jdXJz b3JzX2RyYXdfZm9ydGh3aXRoIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7 CisgIGItPm11bHRpcGxlX2N1cnNvcnNfZHJhd19mb3J0aHdpdGhfID0gdmFsOworfQorCitJTkxJ TkUgdm9pZAorYnNldF9ibHZfbXVsdGlwbGVfY3Vyc29yc19pbmFjdGl2ZV93aW5kb3dzIChzdHJ1 Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm11bHRpcGxlX2N1cnNvcnNf aW5hY3RpdmVfd2luZG93c18gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jcm9z c2hhaXJzIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPmNyb3Nz aGFpcnNfID0gdmFsOworfQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY3Jvc3NoYWlyc19ob3Jp em9udGFsX3J1bGVyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGIt PmNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlcl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCiti c2V0X2Jsdl9jcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNw X09iamVjdCB2YWwpCit7CisgIGItPmNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXJfID0gdmFsOwor fQorCitJTkxJTkUgdm9pZAorYnNldF9ibHZfY3Jvc3NoYWlyc19kcmF3X2ZvcnRod2l0aCAoc3Ry dWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5jcm9zc2hhaXJzX2RyYXdf Zm9ydGh3aXRoXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2Nyb3NzaGFpcnNf aW5hY3RpdmVfd2luZG93cyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQorewor ICBiLT5jcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCitJTkxJTkUgdm9p ZAorYnNldF9ibHZfbWNfc3RkZXJyIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwp Cit7CisgIGItPm1jX3N0ZGVycl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9t Y19maWxsX2NvbHVtbiAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBi LT5tY19maWxsX2NvbHVtbl8gPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9tY19m aWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aCAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3Qg dmFsKQoreworICBiLT5tY19maWxsX2NvbHVtbl9kcmF3X2ZvcnRod2l0aF8gPSB2YWw7Cit9CisK K0lOTElORSB2b2lkCitic2V0X2Jsdl9tY19maWxsX2NvbHVtbl9pbmFjdGl2ZV93aW5kb3dzIChz dHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCit7CisgIGItPm1jX2ZpbGxfY29sdW1u X2luYWN0aXZlX3dpbmRvd3NfID0gdmFsOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K KworCiBJTkxJTkUgdm9pZAogYnNldF9iaWRpX3BhcmFncmFwaF9kaXJlY3Rpb24gKHN0cnVjdCBi dWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJu LmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDU3OTY2NWMuLmI1ZWUxMzUgMTAwNjQ0Ci0tLSBh L3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3JjL2Rpc3BleHRlcm4uaApAQCAtOTQsNiArOTQsMjgg QEAgdHlwZWRlZiBpbnQgQ3Vyc29yOwogI2RlZmluZSBOYXRpdmVSZWN0YW5nbGUgaW50CiAjZW5k aWYKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8K KworZW51bSBtY190eXBlcworeworICBOT19GTEFWT1IsCisgIE1DX0dMWVBILAorICBNQ19HTFlQ SExFU1MsCisgIE1DX0dMWVBIX1RBQiwKKyAgTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAsCisgIE1D X1BJTENST1csCisgIE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1csCisgIE1DX0hPTExP V19SRUNUQU5HTEUsCisgIE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVywKKyAgTUNfVkVSVElD QUxfQkFSLAorICBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICit9OworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAvKiBUZXh0IGN1cnNvciB0eXBlcy4gICovCiAKIGVudW0gdGV4dF9j dXJzb3Jfa2luZHMKQEAgLTM3Niw2ICszOTgsMTggQEAgc3RydWN0IGdseXBoX3NsaWNlCiAKIHN0 cnVjdCBnbHlwaAogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUg Q1VSU09SUyAqLworCisgIGludCB4LCB5LCBocG9zLCB2cG9zOworCisgIGJvb2xfYmYgenZfcCA6 IDE7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogUG9zaXRpb24gZnJvbSB3 aGljaCB0aGlzIGdseXBoIHdhcyBkcmF3bi4gIElmIGBvYmplY3QnIGJlbG93IGlzIGEKICAgICAg TGlzcCBzdHJpbmcsIHRoaXMgaXMgYW4gaW5kZXggaW50byB0aGF0IHN0cmluZy4gIElmIGl0IGlz IGEKICAgICAgYnVmZmVyLCB0aGlzIGlzIGEgcG9zaXRpb24gaW4gdGhhdCBidWZmZXIuICBJbiBh ZGRpdGlvbiwgc29tZQpAQCAtMjIxMCw2ICsyMjQ0LDE2IEBAIHN0cnVjdCBjb21wb3NpdGlvbl9p dAogCiBzdHJ1Y3QgaXQKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJ UExFIENVUlNPUlMgKi8KKworICBib29sX2JmIHp2X3AgOiAxOworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKworCiAgIC8qIFRoZSB3aW5kb3cgaW4gd2hpY2ggd2UgaXRlcmF0ZSBvdmVyIGN1 cnJlbnRfYnVmZmVyIChvciBhIHN0cmluZykuICAqLwogICBMaXNwX09iamVjdCB3aW5kb3c7CiAg IHN0cnVjdCB3aW5kb3cgKnc7CmRpZmYgLS1naXQgYS9zcmMvZnJhbWUuaCBiL3NyYy9mcmFtZS5o CmluZGV4IGFkNzM3NmEuLjMxZDk1MjcgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZS5oCisrKyBiL3Ny Yy9mcmFtZS5oCkBAIC0yMDIsNiArMjAyLDE2IEBAIHN0cnVjdCBmcmFtZQogCiAgIC8qIEJleW9u ZCBoZXJlLCB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSBMaXNwX09iamVjdCBjb21wb25lbnRzLiAg Ki8KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8K KworICAvKiBOb24tbmlsIHdoZW4gdGhlIGZyYW1lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5n IHVwZGF0ZWQuICovCisgIHN0cnVjdCBmcmFtZSAqbWNfdXBkYXRpbmdfZnJhbWU7CisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworCisKICAgLyogQ2FjaGUgb2YgcmVhbGl6ZWQgZmFjZXMuICAq LwogICBzdHJ1Y3QgZmFjZV9jYWNoZSAqZmFjZV9jYWNoZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Zy aW5nZS5jIGIvc3JjL2ZyaW5nZS5jCmluZGV4IGExMDE2YWQuLjJhNTU3M2EgMTAwNjQ0Ci0tLSBh L3NyYy9mcmluZ2UuYworKysgYi9zcmMvZnJpbmdlLmMKQEAgLTQzMyw2ICs0MzMsNDAyIEBAIHN0 YXRpYyB1bnNpZ25lZCBzaG9ydCBlbXB0eV9saW5lX2JpdHNbXSA9IHsKICAgMHgwMCwgMHgzYywg MHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgzYywgMHgwMH07CiAKIAorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBiZWdpbiBNVUxUSVBMRSBDVVJTT1JTICovCisKKy8qIGArLWZy aW5nZS1oZWxwZXItZGVjaW1hbCcgZGVmaW5lZCBpbiBgY3Jvc3NoYWlycy5lbGAgKi8KKworLyog MjQKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieC4uLi4uLi4iCisg ICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4ueHguLi4iCisgICAg ICAieC4uLnh4Li4iCisgICAgICAieC4uLi54eC4iCisgICAgICAieC54eHh4eHgiCisgICAgICAi eC54eHh4eHgiCisgICAgICAieC4uLi54eC4iCisgICAgICAieC4uLnh4Li4iCisgICAgICAieC4u eHguLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4uLi4iCisgICAgICAieC4uLi4u Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYXJy b3dfYml0c1tdID17CisgIDB4ODAsIDB4ODAsIDB4ODAsIDB4OTgsIDB4OGMsIDB4ODYsIDB4YmYs CisgIDB4YmYsIDB4ODYsIDB4OGMsIDB4OTgsIDB4ODAsIDB4ODAsIDB4ODB9OworCisvKiAyNQor ICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eHh4eHh4eCIKKyAgICAg ICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li54eC4ueCIKKyAgICAgICJ4 Li4ueHgueCIKKyAgICAgICJ4Li4uLnh4eCIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Lnh4 eHh4eCIKKyAgICAgICJ4Li4uLnh4eCIKKyAgICAgICJ4Li4ueHgueCIKKyAgICAgICJ4Li54eC4u eCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4eHh4eHh4eCIp CisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJy b3dfYml0c1tdID17CisgIDB4ZmYsIDB4ODEsIDB4ODEsIDB4OTksIDB4OGQsIDB4ODcsIDB4YmYs CisgIDB4YmYsIDB4ODcsIDB4OGQsIDB4OTksIDB4ODEsIDB4ODEsIDB4ZmZ9OworCisvKiAyNgor ICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eHh4eHh4eCIKKyAgICAg ICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4 Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4u Li4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4u eCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4Li4uLi4ueCIKKyAgICAgICJ4eHh4eHh4eCIp CisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2hvbGxvd19yZWN0YW5nbGVfYml0c1tdID17 CisgIDB4ZmYsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsCisgIDB4ODEsIDB4 ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ODEsIDB4ZmZ9OworCisvKiAyNworICAgICgrLWZyaW5n ZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIK KyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAg ICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAg ICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4 Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIpCisqLworc3RhdGlj IHVuc2lnbmVkIHNob3J0IG1jX3ZlcnRpY2FsX2Jhcl9iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwg MHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKKyAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwg MHg4MCwgMHg4MCwgMHg4MH07CisKKy8qIDI4CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgIiB4eC4uLi4u IgorICAgICAgIi54eC4uLi4uIgorICAgICAgIi4ueHguLi4uIgorICAgICAgIi4ueHguLi4uIgor ICAgICAgIi4uLnh4Li4uIgorICAgICAgIi4uLnh4Li4uIgorICAgICAgIi4uLi54eC4uIgorICAg ICAgIi4uLi54eC4uIgorICAgICAgIi4uLi4ueHguIgorICAgICAgIi4uLi4ueHguIgorICAgICAg Ii4uLi4uLnh4IgorICAgICAgIi4uLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQg bWNfYmFja3NsYXNoX2JpdHNbXSA9eworICAweGMwLCAweGMwLCAweGUwLCAweDYwLCAweDMwLCAw eDMwLCAweDE4LCAweDE4LCAweGMsIDB4YywgMHg2LCAweDYsIDB4MywgMHgzfTsKKworLyogMjkK KyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHguLi4uLi4iCisgICAg ICAieHguLi4uLi4iCisgICAgICAieHh4Li4uLi4iCisgICAgICAieHh4Li4uLi4iCisgICAgICAi eC54eC4uLi4iCisgICAgICAieC54eC4uLi4iCisgICAgICAieC4ueHguLi4iCisgICAgICAieC4u eHguLi4iCisgICAgICAieC4uLnh4Li4iCisgICAgICAieC4uLnh4Li4iCisgICAgICAieC4uLi54 eC4iCisgICAgICAieC4uLi54eC4iCisgICAgICAieC4uLi4ueHgiCisgICAgICAieC4uLi4ueHgi KQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoX2Jp dHNbXSA9eworICAweGMwLCAweGMwLCAweGUwLCAweGUwLCAweGIwLCAweGIwLCAweDk4LAorICAw eDk4LCAweDhjLCAweDhjLCAweDg2LCAweDg2LCAweDgzLCAweDgzfTsKKworLyogMzAKKyAgICAo Ky1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLnh4eHh4eC4iCisgICAgICAieHh4 eC54Li4iCisgICAgICAieHh4eC54Li4iCisgICAgICAieHh4eC54Li4iCisgICAgICAiLnh4eC54 Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4i CisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iCisgICAgICAiLi4ueC54Li4iKQor Ki8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19waWxjcm93X2JpdHNbXSA9eworICAweDdlLCAw eGY0LCAweGY0LCAweGY0LCAweDc0LCAweDE0LCAweDE0LCAweDE0LCAweDE0LCAweDE0LCAweDE0 fTsKKworLyogMzEKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi54 eHh4Li4iCisgICAgICAiLnh4eHh4eC4iCisgICAgICAieC4ueHguLngiCisgICAgICAieC4ueHgu LngiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHguLi4ueHgiCisgICAgICAieHh4Li54eHgi CisgICAgICAiLnh4eHh4eC4iCisgICAgICAiLi54eHh4Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25l ZCBzaG9ydCBtY19zbWlsZXlfZmFjZV9iaXRzW10gPXsKKyAgMHgzYywgMHg3ZSwgMHg5OSwgMHg5 OSwgMHhmZiwgMHhjMywgMHhlNywgMHg3ZSwgMHgzY307CisKKy8qIDMyCisgICAgKCstZnJpbmdl LWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIi4ueC4uLi4uIgorICAgICAgIi4uLnguLi4uIgor ICAgICAgIi4uLi54Li4uIgorICAgICAgIi4uLi4ueC4uIgorICAgICAgIi4uLi54Li4uIgorICAg ICAgIi4uLnguLi4uIgorICAgICAgIi4ueC4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWNfc2luZ2xlX2FuZ2xlX3JpZ2h0X2JpdHNbXSA9eworICAweDIwLCAweDEwLCAweDgsIDB4 NCwgMHg4LCAweDEwLCAweDIwfTsKKworLyogMzMKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFk ZWNpbWFsCisgICAgICAiLi4uLi54Li4iCisgICAgICAiLi4uLnguLi4iCisgICAgICAiLi4ueC4u Li4iCisgICAgICAiLi54Li4uLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi4uLnguLi4i CisgICAgICAiLi4uLi54Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zaW5nbGVf YW5nbGVfbGVmdF9iaXRzW10gPXsKKyAgMHg0LCAweDgsIDB4MTAsIDB4MjAsIDB4MTAsIDB4OCwg MHg0fTsKKworLyogMzQKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAi eHgueHguLi4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAiLi54eC54eC4iCisgICAgICAiLi4u eHgueHgiCisgICAgICAiLi54eC54eC4iCisgICAgICAiLnh4Lnh4Li4iCisgICAgICAieHgueHgu Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfcmlnaHRfYml0 c1tdID17CisgIDB4ZDgsIDB4NmMsIDB4MzYsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDh9OworCisv KiAzNQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi54eC54eCIK KyAgICAgICIuLnh4Lnh4LiIKKyAgICAgICIueHgueHguLiIKKyAgICAgICJ4eC54eC4uLiIKKyAg ICAgICIueHgueHguLiIKKyAgICAgICIuLnh4Lnh4LiIKKyAgICAgICIuLi54eC54eCIpCisqLwor c3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2RvdWJsZV9hbmdsZV9sZWZ0X2JpdHNbXSA9eworICAw eDFiLCAweDM2LCAweDZjLCAweGQ4LCAweDZjLCAweDM2LCAweDFifTsKKworLyogMzYKKyAgICAo Ky1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieC54LnguLi4iCisgICAgICAiLngu eC54Li4iCisgICAgICAiLi54LngueC4iCisgICAgICAiLi4ueC54LngiCisgICAgICAiLi54Lngu eC4iCisgICAgICAiLngueC54Li4iCisgICAgICAieC54LnguLi4iKQorKi8KK3N0YXRpYyB1bnNp Z25lZCBzaG9ydCBtY190cmlwbGVfYW5nbGVfcmlnaHRfYml0c1tdID17CisgIDB4YTgsIDB4NTQs IDB4MmEsIDB4MTUsIDB4MmEsIDB4NTQsIDB4YTh9OworCisvKiAzNworICAgICgrLWZyaW5nZS1o ZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi54LngueCIKKyAgICAgICIuLngueC54LiIKKyAg ICAgICIueC54LnguLiIKKyAgICAgICJ4LngueC4uLiIKKyAgICAgICIueC54LnguLiIKKyAgICAg ICIuLngueC54LiIKKyAgICAgICIuLi54LngueCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0 IG1jX3RyaXBsZV9hbmdsZV9sZWZ0X2JpdHNbXSA9eworICAweDE1LCAweDJhLCAweDU0LCAweGE4 LCAweDU0LCAweDJhLCAweDE1fTsKKworLyogMzgKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFk ZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4u Li4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54LnguLi4i CisgICAgICAiLnguLi54Li4iCisgICAgICAieC4uLi4ueC4iCisgICAgICAiLi4uLi4uLi4iCisg ICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iKQorKi8K K3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zaW5nbGVfYW5nbGVfdXBfYml0c1tdID17CisgIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4ODIsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDB9OworCisvKiAzOQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwK KyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAg ICAgICIuLi4uLi4uLiIKKyAgICAgICJ4Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAg ICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIu Li4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIpCisqLworc3RhdGlj IHVuc2lnbmVkIHNob3J0IG1jX3NpbmdsZV9hbmdsZV9kb3duX2JpdHNbXSA9eworICAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDgyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwLCAweDAwLCAweDAw LCAweDAwfTsKKworLyogNDAKKyAgICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAg ICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAi Li4ueC4uLi4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4u eC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4uLi4u eC4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4iCisgICAgICAiLi4uLi4uLi4i KQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19kb3VibGVfYW5nbGVfdXBfYml0c1tdID17 CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQs IDB4ODIsIDB4MDAsIDB4MDAsIDB4MDB9OworCisvKiA0MQorICAgICgrLWZyaW5nZS1oZWxwZXIt aGV4YWRlY2ltYWwKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIu Li4uLi4uLiIKKyAgICAgICJ4Li4uLi54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngu eC4uLiIKKyAgICAgICJ4Li54Li54LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4u LiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICIuLi4uLi4uLiIK KyAgICAgICIuLi4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2RvdWJsZV9h bmdsZV9kb3duX2JpdHNbXSA9eworICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDQ0LCAweDI4 LCAweDkyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwLCAweDAwLCAweDAwfTsKKworLyogNDIKKyAg ICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4uLi4uLi4iCisgICAgICAi Li4ueC4uLi4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4u eC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4u eC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAiLnguLi54Li4iCisgICAgICAieC4uLi4ueC4i CisgICAgICAiLi4uLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY190cmlwbGVf YW5nbGVfdXBfYml0c1tdID17CisgIDB4MDAsIDB4MTAsIDB4MjgsIDB4NDQsIDB4OTIsIDB4Mjgs IDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4ODIsIDB4MDB9OworCisvKiA0MworICAgICgrLWZy aW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICIuLi4uLi4uLiIKKyAgICAgICJ4Li4uLi54 LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIK KyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIKKyAg ICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIKKyAgICAg ICIuLi4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX3F1YWRydXBsZV9hbmds ZV9kb3duX2JpdHNbXSA9eworICAweDAwLCAweDgyLCAweDQ0LCAweDI4LCAweDkyLCAweDQ0LCAw eDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDEwLCAweDAwfTsKKworLyogNDQKKyAgICAoKy1mcmlu Z2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAiLi4ueC4uLi4iCisgICAgICAiLi54LnguLi4i CisgICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisg ICAgICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAg ICAiLnguLi54Li4iCisgICAgICAieC4ueC4ueC4iCisgICAgICAiLi54LnguLi4iCisgICAgICAi LnguLi54Li4iCisgICAgICAieC4uLi4ueC4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBt Y19xdWFkcnVwbGVfYW5nbGVfdXBfYml0c1tdID17CisgIDB4MTAsIDB4MjgsIDB4NDQsIDB4OTIs IDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4OTIsIDB4MjgsIDB4NDQsIDB4ODJ9Owor CisvKiA0NQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4Li4uLi54 LiIKKyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIK KyAgICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIKKyAg ICAgICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICJ4Li54Li54LiIKKyAgICAg ICIueC4uLnguLiIKKyAgICAgICIuLngueC4uLiIKKyAgICAgICIuLi54Li4uLiIpCisqLworc3Rh dGljIHVuc2lnbmVkIHNob3J0IG1jX3RyaXBsZV9hbmdsZV9kb3duX2JpdHNbXSA9eworICAweDgy LCAweDQ0LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDkyLCAweDQ0LCAweDI4LCAweDkyLCAw eDQ0LCAweDI4LCAweDEwfTsKKworLyogVE9ETzogIEFkZCB0aGUgZm9sbG93aW5nIGJpdG1hcHM6 CisgIChkZWZpbmUtZnJpbmdlLWJpdG1hcCAnYnJlYWtwb2ludCAiXHgzY1x4N2VceGZmXHhmZlx4 ZmZceGZmXHg3ZVx4M2MiKQorICAoZGVmaW5lLWZyaW5nZS1iaXRtYXAgJ2hvbGxvdy1yaWdodC10 cmlhbmdsZSAiXHhlMFx4OTBceDg4XHg4NFx4ODRceDg4XHg5MFx4ZTAiKSAqLworCisvKiBlbmQg TVVMVElQTEUgQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogI2RlZmlu ZSBCWVRFU19QRVJfQklUTUFQX1JPVyAgKHNpemVvZiAodW5zaWduZWQgc2hvcnQpKQogI2RlZmlu ZSBTVEFOREFSRF9CSVRNQVBfSEVJR0hUKGJpdHMpIChzaXplb2YgKGJpdHMpL0JZVEVTX1BFUl9C SVRNQVBfUk9XKQogI2RlZmluZSBGUkJJVFMoYml0cykgIGJpdHMsIFNUQU5EQVJEX0JJVE1BUF9I RUlHSFQgKGJpdHMpCkBAIC00NjYsNiArODYyLDU5IEBAIHN0YXRpYyBzdHJ1Y3QgZnJpbmdlX2Jp dG1hcCBzdGFuZGFyZF9iaXRtYXBzW10gPQogICB7IEZSQklUUyAodmVydGljYWxfYmFyX2JpdHMp LCAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCiAgIHsgRlJCSVRTIChob3Jp em9udGFsX2Jhcl9iaXRzKSwgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9CT1RUT00sIDAgfSwKICAg eyBGUkJJVFMgKGVtcHR5X2xpbmVfYml0cyksICAgICAgICAgOCwgMywgQUxJR05fQklUTUFQX1RP UCwgICAgMCB9LAorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VS U09SUyAqLworCisgIC8qIDI0ICovCisgIHsgRlJCSVRTIChtY192ZXJ0aWNhbF9iYXJfcmlnaHRf YXJyb3dfYml0cyksICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDI1 ICovCisgIHsgRlJCSVRTIChtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0X2Fycm93X2JpdHMpLCA4 LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDI2ICovCisgIHsgRlJCSVRTICht Y19ob2xsb3dfcmVjdGFuZ2xlX2JpdHMpLCAgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBf Q0VOVEVSLCAwIH0sCisgIC8qIDI3ICovCisgIHsgRlJCSVRTIChtY192ZXJ0aWNhbF9iYXJfYml0 cyksICAgICAgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8q IDI4ICovCisgIHsgRlJCSVRTIChtY19iYWNrc2xhc2hfYml0cyksICAgICAgICAgICAgICAgICAg ICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDI5ICovCisgIHsgRlJCSVRT IChtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoX2JpdHMpLCAgICAgICA4LCAwLCBBTElHTl9CSVRN QVBfQ0VOVEVSLCAwIH0sCisgIC8qIDMwICovCisgIHsgRlJCSVRTIChtY19waWxjcm93X2JpdHMp LCAgICAgICAgICAgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisg IC8qIDMxICovCisgIHsgRlJCSVRTIChtY19zbWlsZXlfZmFjZV9iaXRzKSwgICAgICAgICAgICAg ICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDMyICovCisgIHsgRlJC SVRTIChtY19zaW5nbGVfYW5nbGVfcmlnaHRfYml0cyksICAgICAgICAgICA4LCAwLCBBTElHTl9C SVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDMzICovCisgIHsgRlJCSVRTIChtY19zaW5nbGVfYW5n bGVfbGVmdF9iaXRzKSwgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0s CisgIC8qIDM0ICovCisgIHsgRlJCSVRTIChtY19kb3VibGVfYW5nbGVfcmlnaHRfYml0cyksICAg ICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDM1ICovCisgIHsg RlJCSVRTIChtY19kb3VibGVfYW5nbGVfbGVmdF9iaXRzKSwgICAgICAgICAgICA4LCAwLCBBTElH Tl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDM2ICovCisgIHsgRlJCSVRTIChtY190cmlwbGVf YW5nbGVfcmlnaHRfYml0cyksICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAw IH0sCisgIC8qIDM3ICovCisgIHsgRlJCSVRTIChtY190cmlwbGVfYW5nbGVfbGVmdF9iaXRzKSwg ICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDM4ICovCisg IHsgRlJCSVRTIChtY19zaW5nbGVfYW5nbGVfdXBfYml0cyksICAgICAgICAgICAgICA4LCAwLCBB TElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDM5ICovCisgIHsgRlJCSVRTIChtY19zaW5n bGVfYW5nbGVfZG93bl9iaXRzKSwgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVS LCAwIH0sCisgIC8qIDQwICovCisgIHsgRlJCSVRTIChtY19kb3VibGVfYW5nbGVfdXBfYml0cyks ICAgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDQxICov CisgIHsgRlJCSVRTIChtY19kb3VibGVfYW5nbGVfZG93bl9iaXRzKSwgICAgICAgICAgICA4LCAw LCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDQyICovCisgIHsgRlJCSVRTIChtY190 cmlwbGVfYW5nbGVfdXBfYml0cyksICAgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VO VEVSLCAwIH0sCisgIC8qIDQzICovCisgIHsgRlJCSVRTIChtY190cmlwbGVfYW5nbGVfZG93bl9i aXRzKSwgICAgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDQ0 ICovCisgIHsgRlJCSVRTIChtY19xdWFkcnVwbGVfYW5nbGVfdXBfYml0cyksICAgICAgICAgICA4 LCAwLCBBTElHTl9CSVRNQVBfQ0VOVEVSLCAwIH0sCisgIC8qIDQ1ICovCisgIHsgRlJCSVRTICht Y19xdWFkcnVwbGVfYW5nbGVfZG93bl9iaXRzKSwgICAgICAgICA4LCAwLCBBTElHTl9CSVRNQVBf Q0VOVEVSLCAwIH0sCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIH07CiAKICNkZWZp bmUgTk9fRlJJTkdFX0JJVE1BUCAwCkBAIC0xNzIzLDYgKzIxNzIsMTUwIEBAIElmIG5pbCwgYWxz byBjb250aW51ZSBsaW5lcyB3aGljaCBhcmUgZXhhY3RseSBhcyB3aWRlIGFzIHRoZSB3aW5kb3cu ICAqLyk7CiAgIERFRlZBUl9MSVNQICgiZnJpbmdlLWJpdG1hcHMiLCBWZnJpbmdlX2JpdG1hcHMs CiAgICAgZG9jOiAvKiBMaXN0IG9mIGZyaW5nZSBiaXRtYXAgc3ltYm9scy4gICovKTsKICAgVmZy aW5nZV9iaXRtYXBzID0gUW5pbDsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJl Z2luIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAvKiAoZ2V0ICdlbXB0eS1saW5lICdmcmluZ2Up ID0+IDIzID0+IHRoZSBsYXN0IHN0YW5kYXJkLWJpdG1hcCBiZWZvcmUgdGhpcyBvbmUuCisgIFNl ZSBgZnJpbmdlLmVsYC4gKi8KKworICAvKiAyNCAqLworICBERUZTWU0gKFFtY192ZXJ0aWNhbF9i YXJfcmlnaHRfYXJyb3csICIrLXZlcnRpY2FsLWJhci1yaWdodC1hcnJvdyIpOworICBWZnJpbmdl X2JpdG1hcHMgPSBGY29ucyAoUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvdywgVmZyaW5nZV9i aXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hcnJvdywgUWZyaW5nZSwg bWFrZV9maXhudW0gKDI0KSk7CisgIC8qIChnZXQgJystdmVydGljYWwtYmFyLXJpZ2h0LWFycm93 ICdmcmluZ2UpID0+IDI0ICovCisKKyAgLyogMjUgKi8KKyAgREVGU1lNIChRbWNfaG9sbG93X3Jl Y3RhbmdsZV9yaWdodF9hcnJvdywgIistaG9sbG93LXJlY3RhbmdsZS1yaWdodC1hcnJvdyIpOwor ICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX2hvbGxvd19yZWN0YW5nbGVfcmlnaHRfYXJy b3csIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19ob2xsb3dfcmVjdGFuZ2xlX3JpZ2h0 X2Fycm93LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMjUpKTsKKyAgLyogKGdldCAnKy1ob2xsb3ct cmVjdGFuZ2xlLXJpZ2h0LWFycm93ICdmcmluZ2UpID0+IDI1ICovCisKKyAgLyogMjYgKi8KKyAg REVGU1lNIChRbWNfaG9sbG93X3JlY3RhbmdsZSwgIistaG9sbG93LXJlY3RhbmdsZSIpOworICBW ZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX2hvbGxvd19yZWN0YW5nbGUsIFZmcmluZ2VfYml0 bWFwcyk7CisgIEZwdXQgKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCBRZnJpbmdlLCBtYWtlX2ZpeG51 bSAoMjYpKTsKKyAgLyogKGdldCAnKy1ob2xsb3ctcmVjdGFuZ2xlICdmcmluZ2UpID0+IDI2ICov CisKKyAgLyogMjcgKi8KKyAgREVGU1lNIChRbWNfdmVydGljYWxfYmFyLCAiKy12ZXJ0aWNhbC1i YXIiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXIsIFZmcmlu Z2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXIsIFFmcmluZ2UsIG1ha2VfZml4 bnVtICgyNykpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhciAnZnJpbmdlKSA9PiAyNyAqLwor CisgIC8qIDI4ICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIistYmFja3NsYXNoIik7Cisg IFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBWZnJpbmdlX2JpdG1hcHMp OworICBGcHV0IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMjgpKTsKKyAg LyogKGdldCAnKy1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMjggKi8KKworICAvKiAyOSAqLworICBE RUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0aWNhbC1iYXItYmFja3Ns YXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFyX2JhY2tz bGFzaCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xh c2gsIFFmcmluZ2UsIG1ha2VfZml4bnVtICgyOSkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJh ci1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMjkgKi8KKworICAvKiAzMCAqLworICBERUZTWU0gKFFt Y19waWxjcm93LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNf cGlsY3JvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3BpbGNyb3csIFFmcmluZ2Us IG1ha2VfZml4bnVtICgzMCkpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cgJ2ZyaW5nZSkgPT4gMzAg Ki8KKworICAvKiAzMSAqLworICBERUZTWU0gKFFtY19zbWlsZXlfZmFjZSwgIistc21pbGV5LWZh Y2UiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zbWlsZXlfZmFjZSwgVmZyaW5n ZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NtaWxleV9mYWNlLCBRZnJpbmdlLCBtYWtlX2ZpeG51 bSAoMzEpKTsKKyAgLyogKGdldCAnKy1zbWlsZXktZmFjZSAnZnJpbmdlKSA9PiAzMSAqLworCisg IC8qIDMyICovCisgIERFRlNZTSAoUW1jX3NpbmdsZV9hbmdsZV9yaWdodCwgIistc2luZ2xlLWFu Z2xlLXJpZ2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfc2luZ2xlX2FuZ2xl X3JpZ2h0LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX3JpZ2h0 LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzIpKTsKKyAgLyogKGdldCAnKy1yaWdodC1zaW5nbGUt YW5nbGUgJ2ZyaW5nZSkgPT4gMzIgKi8KKworICAvKiAzMyAqLworICBERUZTWU0gKFFtY19zaW5n bGVfYW5nbGVfbGVmdCwgIistc2luZ2xlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRtYXBz ID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1 dCAoUW1jX3NpbmdsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzMpKTsKKyAg LyogKGdldCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzMyAqLworCisgIC8qIDM0 ICovCisgIERFRlNZTSAoUW1jX2RvdWJsZV9hbmdsZV9yaWdodCwgIistZG91YmxlLWFuZ2xlLXJp Z2h0Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfZG91YmxlX2FuZ2xlX3JpZ2h0 LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfZG91YmxlX2FuZ2xlX3JpZ2h0LCBRZnJp bmdlLCBtYWtlX2ZpeG51bSAoMzQpKTsKKyAgLyogKGdldCAnKy1yaWdodC1kb3VibGUtYW5nbGUg J2ZyaW5nZSkgPT4gMzQgKi8KKworICAvKiAzNSAqLworICBERUZTWU0gKFFtY19kb3VibGVfYW5n bGVfbGVmdCwgIistZG91YmxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNv bnMgKFFtY19kb3VibGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1j X2RvdWJsZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzUpKTsKKyAgLyogKGdl dCAnKy1sZWZ0LWRvdWJsZS1hbmdsZSAnZnJpbmdlKSA9PiAzNSAqLworCisgIC8qIDM2ICovCisg IERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV9yaWdodCwgIistdHJpcGxlLWFuZ2xlLXJpZ2h0Iik7 CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0LCBWZnJp bmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3JpZ2h0LCBRZnJpbmdlLCBt YWtlX2ZpeG51bSAoMzYpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUtcmlnaHQgJ2ZyaW5n ZSkgPT4gMzYgKi8KKworICAvKiAzNyAqLworICBERUZTWU0gKFFtY190cmlwbGVfYW5nbGVfbGVm dCwgIistdHJpcGxlLWFuZ2xlLWxlZnQiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFt Y190cmlwbGVfYW5nbGVfbGVmdCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3RyaXBs ZV9hbmdsZV9sZWZ0LCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzcpKTsKKyAgLyogKGdldCAnKy10 cmlwbGUtYW5nbGUtbGVmdCAnZnJpbmdlKSA9PiAzNyAqLworCisgIC8qIDM4ICovCisgIERFRlNZ TSAoUW1jX3NpbmdsZV9hbmdsZV91cCwgIistc2luZ2xlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2Vf Yml0bWFwcyA9IEZjb25zIChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMpOwor ICBGcHV0IChRbWNfc2luZ2xlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoMzgpKTsK KyAgLyogKGdldCAnKy1zaW5nbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4gMzggKi8KKworICAvKiAz OSAqLworICBERUZTWU0gKFFtY19zaW5nbGVfYW5nbGVfZG93biwgIistc2luZ2xlLWFuZ2xlLWRv d24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19zaW5nbGVfYW5nbGVfZG93biwg VmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3NpbmdsZV9hbmdsZV9kb3duLCBRZnJpbmdl LCBtYWtlX2ZpeG51bSAoMzkpKTsKKyAgLyogKGdldCAnKy1zaW5nbGUtYW5nbGUtZG93biAnZnJp bmdlKSA9PiAzOSAqLworCisgIC8qIDQwICovCisgIERFRlNZTSAoUW1jX2RvdWJsZV9hbmdsZV91 cCwgIistZG91YmxlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNf ZG91YmxlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfZG91YmxlX2Fu Z2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDApKTsKKyAgLyogKGdldCAnKy1kb3VibGUt YW5nbGUtdXAgJ2ZyaW5nZSkgPT4gNDAgKi8KKworICAvKiA0MSAqLworICBERUZTWU0gKFFtY19k b3VibGVfYW5nbGVfZG93biwgIistZG91YmxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRt YXBzID0gRmNvbnMgKFFtY19kb3VibGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAg RnB1dCAoUW1jX2RvdWJsZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDEpKTsK KyAgLyogKGdldCAnKy1kb3VibGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0MSAqLworCisgIC8q IDQyICovCisgIERFRlNZTSAoUW1jX3RyaXBsZV9hbmdsZV91cCwgIistdHJpcGxlLWFuZ2xlLXVw Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdHJpcGxlX2FuZ2xlX3VwLCBWZnJp bmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdHJpcGxlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtl X2ZpeG51bSAoNDIpKTsKKyAgLyogKGdldCAnKy10cmlwbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4g NDIgKi8KKworICAvKiA0MyAqLworICBERUZTWU0gKFFtY190cmlwbGVfYW5nbGVfZG93biwgIist dHJpcGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY190cmlw bGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3RyaXBsZV9hbmds ZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDMpKTsKKyAgLyogKGdldCAnKy10cmlwbGUt YW5nbGUtZG93biAnZnJpbmdlKSA9PiA0MyAqLworCisgIC8qIDQ0ICovCisgIERFRlNZTSAoUW1j X3F1YWRydXBsZV9hbmdsZV91cCwgIistcXVhZHJ1cGxlLWFuZ2xlLXVwIik7CisgIFZmcmluZ2Vf Yml0bWFwcyA9IEZjb25zIChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBWZnJpbmdlX2JpdG1hcHMp OworICBGcHV0IChRbWNfcXVhZHJ1cGxlX2FuZ2xlX3VwLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAo NDQpKTsKKyAgLyogKGdldCAnKy1xdWFkcnVwbGUtYW5nbGUtdXAgJ2ZyaW5nZSkgPT4gNDQgKi8K KworICAvKiA0NSAqLworICBERUZTWU0gKFFtY19xdWFkcnVwbGVfYW5nbGVfZG93biwgIistcXVh ZHJ1cGxlLWFuZ2xlLWRvd24iKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19xdWFk cnVwbGVfYW5nbGVfZG93biwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3F1YWRydXBs ZV9hbmdsZV9kb3duLCBRZnJpbmdlLCBtYWtlX2ZpeG51bSAoNDUpKTsKKyAgLyogKGdldCAnKy1x dWFkcnVwbGUtYW5nbGUtZG93biAnZnJpbmdlKSA9PiA0NSAqLworCisvKiBlbmQgTVVMVElQTEUg Q1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAvKiBHYXJiYWdl IGNvbGxlY3Rpb24gaG9vayAqLwpkaWZmIC0tZ2l0IGEvc3JjL2tleWJvYXJkLmMgYi9zcmMva2V5 Ym9hcmQuYwppbmRleCBiZTcyN2E2Li4wMTgwZDFhIDEwMDY0NAotLS0gYS9zcmMva2V5Ym9hcmQu YworKysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtMTIyNCw2ICsxMjI0LDgwIEBAIHN0YXRpYyBpbnQg cmVhZF9rZXlfc2VxdWVuY2UgKExpc3BfT2JqZWN0ICosIExpc3BfT2JqZWN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7CiBzdGF0aWMgdm9p ZCBhZGp1c3RfcG9pbnRfZm9yX3Byb3BlcnR5IChwdHJkaWZmX3QsIGJvb2wpOwogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCitzdGF0aWMgdm9p ZAorbWNfc3dpdGNoZXNfbXVsdGlwbGVfY3Vyc29ycyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCB0 cnVlX29yX2ZhbHNlX3ApCit7CisjaWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlz cGxheV9wICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgKCFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAg fHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAg ICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfZmlsbF9jb2x1 bW4pKSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRP VyAod2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFf dG9fc3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RB VEEgKHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5tY19zd2l0Y2hl c19tdWx0aXBsZV9jdXJzb3JzICglcyk6ICAlc1xuIiwKKyAgICAgICAgICAgICAgIHdpbmRvd19j aGFyLCB0cnVlX29yX2ZhbHNlX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICB9CisjZW5kaWYK KyAgdy0+bWMuZHJhd19tdWx0aXBsZV9jdXJzb3JzID0gdHJ1ZV9vcl9mYWxzZV9wOworICB3LT5t Yy5lcmFzZV9tdWx0aXBsZV9jdXJzb3JzID0gdHJ1ZV9vcl9mYWxzZV9wOworfQorCitzdGF0aWMg dm9pZAorbWNfc3dpdGNoZXNfY3Jvc3NoYWlycyAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCB0cnVl X29yX2ZhbHNlX3ApCit7CisjaWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxh eV9wICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVG RkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAgICAgICAgfHwg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAg ICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfZmlsbF9jb2x1bW4p KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5tY19zd2l0Y2hlc19j cm9zc2hhaXJzICglcyk6ICAlc1xuIiwKKyAgICAgICAgICAgICAgIHdpbmRvd19jaGFyLCB0cnVl X29yX2ZhbHNlX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICB9CisjZW5kaWYKKyAgdy0+bWMu ZHJhd19jcm9zc2hhaXJzID0gdHJ1ZV9vcl9mYWxzZV9wOworICB3LT5tYy5lcmFzZV9jcm9zc2hh aXJzID0gdHJ1ZV9vcl9mYWxzZV9wOworICBpZiAodHJ1ZV9vcl9mYWxzZV9wKQorICAgIHctPm11 c3RfYmVfdXBkYXRlZF9wID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK21jX3N3aXRjaGVzX2Zp bGxfY29sdW1uIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIHRydWVfb3JfZmFsc2VfcCkKK3sKKyNp ZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AgJiYgQlVGRkVSUCAody0+ Y29udGVudHMpCisgICAgICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg bXVsdGlwbGVfY3Vyc29yc19jb25mKSkKKyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAo WEJVRkZFUiAody0+Y29udGVudHMpLCBtY19maWxsX2NvbHVtbikpKSkKKyAgICB7CisgICAgICBM aXNwX09iamVjdCB3aW5kb3c7CisgICAgICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAg TGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5p bCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7Cisg ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbm1jX3N3aXRjaGVzX2ZpbGxfY29sdW1uICglcyk6ICAl c1xuIiwKKyAgICAgICAgICAgICAgIHdpbmRvd19jaGFyLCB0cnVlX29yX2ZhbHNlX3AgPyAidHJ1 ZSIgOiAiZmFsc2UiKTsKKyAgICB9CisjZW5kaWYKKyAgdy0+bWMuZHJhd19maWxsX2NvbHVtbiA9 IHRydWVfb3JfZmFsc2VfcDsKKyAgdy0+bWMuZXJhc2VfZmlsbF9jb2x1bW4gPSB0cnVlX29yX2Zh bHNlX3A7CisgIGlmICh0cnVlX29yX2ZhbHNlX3ApCisgICAgdy0+bXVzdF9iZV91cGRhdGVkX3Ag PSB0cnVlOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiBMaXNwX09iamVjdAog Y29tbWFuZF9sb29wXzEgKHZvaWQpCiB7CkBAIC0xNDE5LDYgKzE0OTMsMTYgQEAgY29tbWFuZF9s b29wXzEgKHZvaWQpCiAgICAgICBWcmVhbF90aGlzX2NvbW1hbmQgPSBjbWQ7CiAgICAgICBzYWZl X3J1bl9ob29rcyAoUXByZV9jb21tYW5kX2hvb2spOwogCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgICBzdHJ1Y3Qgd2luZG93ICp3ID0g WFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgICAgIG1jX3N3aXRjaGVzX211bHRpcGxlX2N1 cnNvcnMgKHcsIHRydWUpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICBh bHJlYWR5X2FkanVzdGVkID0gMDsKIAogICAgICAgaWYgKE5JTFAgKFZ0aGlzX2NvbW1hbmQpKQpA QCAtMTU2NSw2ICsxNjQ5LDE4IEBAIGNvbW1hbmRfbG9vcF8xICh2b2lkKQogICAgICAgaWYgKCFO SUxQIChLVkFSIChjdXJyZW50X2tib2FyZCwgZGVmaW5pbmdfa2JkX21hY3JvKSkKIAkgICYmIE5J TFAgKEtWQVIgKGN1cnJlbnRfa2JvYXJkLCBWcHJlZml4X2FyZykpKQogCWZpbmFsaXplX2tiZF9t YWNyb19jaGFycyAoKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExF IENVUlNPUlMgKi8KKworICAgICAgbWNfc3dpdGNoZXNfbXVsdGlwbGVfY3Vyc29ycyAodywgZmFs c2UpOworICAgICAgbWNfc3dpdGNoZXNfY3Jvc3NoYWlycyAodywgZmFsc2UpOworICAgICAgbWNf c3dpdGNoZXNfZmlsbF9jb2x1bW4gKHcsIGZhbHNlKTsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogICAgIH0KIH0KIApAQCAtMjQ0OCw3ICsyNTQ0LDE1IEBAIHJlYWRfY2hhciAoaW50 IGNvbW1hbmRmbGFnLCBMaXNwX09iamVjdCBtYXAsCiAJICBpZiAoaGVscF9lY2hvX3Nob3dpbmdf cCAmJiAhRVEgKHNlbGVjdGVkX3dpbmRvdywgbWluaWJ1Zl93aW5kb3cpKQogCSAgICByZWRpc3Bs YXlfcHJlc2VydmVfZWNob19hcmVhICg1KTsKIAkgIGVsc2UKLQkgICAgcmVkaXNwbGF5ICgpOwor CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisJ ICAgIHJlZGlzcGxheSAoMSk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAKIAkgIGlm ICghaW5wdXRfcGVuZGluZykKIAkgICAgLyogTm9ybWFsIGNhc2U6IG5vIGlucHV0IGFycml2ZWQg ZHVyaW5nIHJlZGlzcGxheS4gICovCkBAIC0yNjI4LDcgKzI3MzIsMTYgQEAgcmVhZF9jaGFyIChp bnQgY29tbWFuZGZsYWcsIExpc3BfT2JqZWN0IG1hcCwKICAgICB7CiAgICAgICBGZG9fYXV0b19z YXZlIChhdXRvX3NhdmVfbm9fbWVzc2FnZSA/IFF0IDogUW5pbCwgUW5pbCk7CiAgICAgICAvKiBI b29rcyBjYW4gYWN0dWFsbHkgY2hhbmdlIHNvbWUgYnVmZmVycyBpbiBhdXRvIHNhdmUuICAqLwot ICAgICAgcmVkaXNwbGF5ICgpOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVM VElQTEUgQ1VSU09SUyAqLworCisgICAgICByZWRpc3BsYXkgKDIpOworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgICAgfQogCiAgIC8qIFRyeSByZWFkaW5nIHVzaW5nIGFuIFggbWVu dS4KQEAgLTI2OTIsNyArMjgwNSwxNiBAQCByZWFkX2NoYXIgKGludCBjb21tYW5kZmxhZywgTGlz cF9PYmplY3QgbWFwLAogCSAgICAgICYmICEgQ09OU1AgKFZ1bnJlYWRfY29tbWFuZF9ldmVudHMp KQogCSAgICB7CiAJICAgICAgRmRvX2F1dG9fc2F2ZSAoYXV0b19zYXZlX25vX21lc3NhZ2UgPyBR dCA6IFFuaWwsIFFuaWwpOwotCSAgICAgIHJlZGlzcGxheSAoKTsKKworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworCSAgICAgIHJlZGlzcGxheSAo Myk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgICAgfQogCX0KIApAQCAtMjc5 NSw3ICsyOTE3LDE1IEBAIHJlYWRfY2hhciAoaW50IGNvbW1hbmRmbGFnLCBMaXNwX09iamVjdCBt YXAsCiAgICAgewogICAgICAgaWYgKGNvbW1hbmRmbGFnID49IDAKIAkgICYmICFpbnB1dF9wZW5k aW5nICYmICFkZXRlY3RfaW5wdXRfcGVuZGluZ19ydW5fdGltZXJzICgwKSkKLQlyZWRpc3BsYXkg KCk7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICov CisKKwlyZWRpc3BsYXkgKDQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAgICAg ICBnb3RvIHdyb25nX2tib2FyZDsKICAgICB9CkBAIC0zMDkzLDcgKzMyMjMsMTUgQEAgcmVhZF9j aGFyIChpbnQgY29tbWFuZGZsYWcsIExpc3BfT2JqZWN0IG1hcCwKICAgICAgIC8qIFJlbW92ZSB0 aGUgaGVscCBmcm9tIHRoZSBmcmFtZS4gICovCiAgICAgICB1bmJpbmRfdG8gKGNvdW50LCBRbmls KTsKIAotICAgICAgcmVkaXNwbGF5ICgpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAgcmVkaXNwbGF5ICg1KTsKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogICAgICAgaWYgKEVRIChjLCBtYWtlX2ZpeG51bSAoMDQwKSkp CiAJewogCSAgY2FuY2VsX2VjaG9pbmcgKCk7CmRpZmYgLS1naXQgYS9zcmMvbGlzcC5oIGIvc3Jj L2xpc3AuaAppbmRleCA3ZTdkYmE2Li40NmQ5MjMxIDEwMDY0NAotLS0gYS9zcmMvbGlzcC5oCisr KyBiL3NyYy9saXNwLmgKQEAgLTM1NzksNyArMzU3OSwxNSBAQCBleHRlcm4gdm9pZCBtZXNzYWdl X3dpdGhfc3RyaW5nIChjb25zdCBjaGFyICosIExpc3BfT2JqZWN0LCBib29sKTsKIGV4dGVybiB2 b2lkIG1lc3NhZ2VfbG9nX21heWJlX25ld2xpbmUgKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXBkYXRl X2VjaG9fYXJlYSAodm9pZCk7CiBleHRlcm4gdm9pZCB0cnVuY2F0ZV9lY2hvX2FyZWEgKHB0cmRp ZmZfdCk7Ci1leHRlcm4gdm9pZCByZWRpc3BsYXkgKHZvaWQpOworCisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCitleHRlcm4gdm9pZCByZWRpc3Bs YXkgKGludCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAKIHZvaWQgc2V0X2ZyYW1l X2N1cnNvcl90eXBlcyAoc3RydWN0IGZyYW1lICosIExpc3BfT2JqZWN0KTsKIGV4dGVybiB2b2lk IHN5bXNfb2ZfeGRpc3AgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5tIGIvc3JjL25z dGVybS5tCmluZGV4IGJjYzIzZmYuLmViN2I3MmIgMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0ubQor KysgYi9zcmMvbnN0ZXJtLm0KQEAgLTI3OCw2ICsyNzgsOSBAQCAtIChOU0NvbG9yICopY29sb3JV c2luZ0RlZmF1bHRDb2xvclNwYWNlCiBsb25nIGNvbnRleHRfbWVudV92YWx1ZSA9IDA7CiAKIC8q IGRpc3BsYXkgdXBkYXRlICovCitzdGF0aWMgc3RydWN0IGZyYW1lICpuc191cGRhdGluZ19mcmFt ZTsKK3N0YXRpYyBOU1ZpZXcgKmZvY3VzX3ZpZXcgPSBOVUxMOworc3RhdGljIEJPT0wgZ3NhdmVk ID0gTk87CiBzdGF0aWMgaW50IG5zX3dpbmRvd19udW0gPSAwOwogc3RhdGljIEJPT0wgbnNfZmFr ZV9rZXlkb3duID0gTk87CiAjaWZkZWYgTlNfSU1QTF9DT0NPQQpAQCAtMTA4Nyw2ICsxMDkwLDE2 IEBAIHN0YXRpYyBOU1JlY3QgY29uc3RyYWluX2ZyYW1lX3JlY3QoTlNSZWN0IGZyYW1lUmVjdCwg Ym9vbCBpc0Z1bGxzY3JlZW4pCiAgICBleHRlcm5hbCAoUklGKSBjYWxsOyB3aG9sZSBmcmFtZSwg Y2FsbGVkIGJlZm9yZSB1cGRhdGVfd2luZG93X2JlZ2luCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwogeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAq LworCisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogI2lmZGVmIE5TX0lNUExfQ09DT0EKICAgRW1hY3NWaWV3ICp2aWV3ID0gRlJBTUVf TlNfVklFVyAoZik7CiAKQEAgLTExMDMsNiArMTExNiw5IEBAIHN0YXRpYyBOU1JlY3QgY29uc3Ry YWluX2ZyYW1lX3JlY3QoTlNSZWN0IGZyYW1lUmVjdCwgYm9vbCBpc0Z1bGxzY3JlZW4pCiAgICAg ICBbdG9vbGJhciBzZXRWaXNpYmxlOiB0YmFyX3Zpc2libGVdOwogICB9CiAKKyAgbnNfdXBkYXRp bmdfZnJhbWUgPSBmOworICBbdmlldyBsb2NrRm9jdXNdOworCiAgIC8qIGRyYXdSZWN0IG1heSBo YXZlIGJlZW4gY2FsbGVkIGZvciBzYXkgdGhlIG1pbmlidWZmZXIsIGFuZCB0aGVuIGNsaXAgcGF0 aAogICAgICBpcyBmb3IgdGhlIG1pbmlidWZmZXIuICBCdXQgdGhlIGRpc3BsYXkgZW5naW5lIG1h eSBkcmF3IG1vcmUgYmVjYXVzZQogICAgICB3ZSBoYXZlIHNldCB0aGUgZnJhbWUgYXMgZ2FyYmFn ZWQuICBTbyByZXNldCBjbGlwIHBhdGggdG8gdGhlIHdob2xlCkBAIC0xMjA2LDEyICsxMjIyLDMx IEBAIHN0YXRpYyBOU1JlY3QgY29uc3RyYWluX2ZyYW1lX3JlY3QoTlNSZWN0IGZyYW1lUmVjdCwg Ym9vbCBpc0Z1bGxzY3JlZW4pCiAgICBleHRlcm5hbCAoUklGKSBjYWxsOyBmb3Igd2hvbGUgZnJh bWUsIGNhbGxlZCBhZnRlciB1cGRhdGVfd2luZG93X2VuZAogICAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KIHsKKyAgRW1hY3NWaWV3ICp2aWV3ID0gRlJBTUVfTlNfVklFVyAoZik7CisKICAgTlNUUkFD RV9XSEVOIChOU1RSQUNFX0dST1VQX1VQREFURVMsICJuc191cGRhdGVfZW5kIik7CiAKIC8qICAg aWYgKGYgPT0gTU9VU0VfSExfSU5GTyAoZiktPm1vdXNlX2ZhY2VfbW91c2VfZnJhbWUpICovCiAg IE1PVVNFX0hMX0lORk8gKGYpLT5tb3VzZV9mYWNlX2RlZmVyID0gMDsKLX0KIAorICBibG9ja19p bnB1dCAoKTsKKworICBbdmlldyB1bmxvY2tGb2N1c107CisgIFtbdmlldyB3aW5kb3ddIGZsdXNo V2luZG93XTsKKworICB1bmJsb2NrX2lucHV0ICgpOworICBuc191cGRhdGluZ19mcmFtZSA9IE5V TEw7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICov CisKKyAgZi0+bWNfdXBkYXRpbmdfZnJhbWUgPSBOVUxMOworCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKworCit9CiAKIHN0YXRpYyBCT09MCiBuc19jbGlwX3RvX3JlY3QgKHN0cnVjdCBmcmFt ZSAqZiwgTlNSZWN0ICpyLCBpbnQgbikKQEAgLTEyMjYsMjMgKzEyNjEsMzEgQEAgc3RhdGljIE5T UmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChOU1JlY3QgZnJhbWVSZWN0LCBib29sIGlzRnVsbHNj cmVlbikKICAgICB7CiAgICAgICBOU1RSQUNFX1JFQ1QgKCJyIiwgKnIpOwogCi0gICAgICBpZiAo W05TVmlldyBmb2N1c1ZpZXddID09IEZSQU1FX05TX1ZJRVcgKGYpKQotICAgICAgICB7Ci0gICAg ICAgICAgW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gc2F2ZUdyYXBoaWNzU3Rh dGVdOwotICAgICAgICAgIGlmIChuID09IDIpCi0gICAgICAgICAgICBOU1JlY3RDbGlwTGlzdCAo ciwgMik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgTlNSZWN0Q2xpcCAoKnIpOwotCi0g ICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgfQotICAgICAgZWxzZQorICAgICAgaWYgKGYg IT0gbnNfdXBkYXRpbmdfZnJhbWUpCiAgICAgICAgIHsKICAgICAgICAgICBOU1ZpZXcgKnZpZXcg PSBGUkFNRV9OU19WSUVXIChmKTsKLSAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICBmb3IgKGkg PSAwIDsgaSA8IG4gOyBpKyspCi0gICAgICAgICAgICBbdmlldyBzZXROZWVkc0Rpc3BsYXlJblJl Y3Q6cltpXV07CisgICAgICAgICAgaWYgKHZpZXcgIT0gZm9jdXNfdmlldykKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgaWYgKGZvY3VzX3ZpZXcgIT0gTlVMTCkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICBbZm9jdXNfdmlldyB1bmxvY2tGb2N1c107CisgICAgICAg ICAgICAgICAgICBbW2ZvY3VzX3ZpZXcgd2luZG93XSBmbHVzaFdpbmRvd107CisgICAgICAgICAg ICAgIC8qIGRlYnVnX2xvY2stLTsgKi8KKyAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICh2aWV3KQorICAgICAgICAgICAgICAgIFt2 aWV3IGxvY2tGb2N1c107CisgICAgICAgICAgICAgIGZvY3VzX3ZpZXcgPSB2aWV3OworICAgICAg ICAgICAgICAvKiBpZiAodmlldykgZGVidWdfbG9jaysrOyAqLworICAgICAgICAgICAgfQogICAg ICAgICB9CisgICAgICBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBzYXZlR3Jh cGhpY3NTdGF0ZV07CisgICAgICBpZiAobiA9PSAyKQorICAgICAgICBOU1JlY3RDbGlwTGlzdCAo ciwgMik7CisgICAgICBlbHNlCisgICAgICAgIE5TUmVjdENsaXAgKCpyKTsKKyAgICAgIGdzYXZl ZCA9IFlFUzsKKyAgICAgIHJldHVybiBZRVM7CiAgICAgfQogCiAgIHJldHVybiBOTzsKQEAgLTEy NTYsNyArMTI5OSwyMiBAQCBzdGF0aWMgTlNSZWN0IGNvbnN0cmFpbl9mcmFtZV9yZWN0KE5TUmVj dCBmcmFtZVJlY3QsIGJvb2wgaXNGdWxsc2NyZWVuKQogewogICBOU1RSQUNFX1dIRU4gKE5TVFJB Q0VfR1JPVVBfRk9DVVMsICJuc19yZXNldF9jbGlwcGluZyIpOwogCi0gIFtbTlNHcmFwaGljc0Nv bnRleHQgY3VycmVudENvbnRleHRdIHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKyAgaWYgKGdzYXZl ZCkKKyAgICB7CisgICAgICBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSByZXN0 b3JlR3JhcGhpY3NTdGF0ZV07CisgICAgICBnc2F2ZWQgPSBOTzsKKyAgICB9CisKKyAgaWYgKGYg IT0gbnNfdXBkYXRpbmdfZnJhbWUpCisgICAgeworICAgICAgaWYgKGZvY3VzX3ZpZXcgIT0gTlVM TCkKKyAgICAgICAgeworICAgICAgICAgIFtmb2N1c192aWV3IHVubG9ja0ZvY3VzXTsKKyAgICAg ICAgICBbW2ZvY3VzX3ZpZXcgd2luZG93XSBmbHVzaFdpbmRvd107CisgICAgICAgICAgZm9jdXNf dmlldyA9IE5VTEw7CisvKiBkZWJ1Z19sb2NrLS07ICovCisgICAgICAgIH0KKyAgICB9CiB9CiAK IApAQCAtMzIxMCw1NiArMzI2OCwxNzggQEAgTm90ZSB0aGF0IENVUlNPUl9XSURUSCBpcyBtZWFu aW5nZnVsIG9ubHkgZm9yIChoKWJhciBjdXJzb3JzLgogICAgICAgaCA9IGN1cnNvcl9oZWlnaHQ7 CiAgICAgfQogCi0gIHIub3JpZ2luLnggPSBmeCwgci5vcmlnaW4ueSA9IGZ5OwotICByLnNpemUu aGVpZ2h0ID0gaDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJT T1JTICovCisKKyAgci5vcmlnaW4ueCA9ICh3LT5tYy5meCA+IDApCisgICAgICAgICAgICAgICA/ IHctPm1jLmZ4CisgICAgICAgICAgICAgICA6IGZ4OworICByLm9yaWdpbi55ID0gKHctPm1jLmZ5 ID4gMCkKKyAgICAgICAgICAgICAgID8gdy0+bWMuZnkKKyAgICAgICAgICAgICAgIDogZnk7Cisg IHIuc2l6ZS5oZWlnaHQgPSAody0+bWMuaCA+IDApCisgICAgICAgICAgICAgICAgICA/IHctPm1j LmgKKyAgICAgICAgICAgICAgICAgIDogaDsKICAgci5zaXplLndpZHRoID0gdy0+cGh5c19jdXJz b3Jfd2lkdGg7CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogUHJldmVudCB0 aGUgY3Vyc29yIGZyb20gYmVpbmcgZHJhd24gb3V0c2lkZSB0aGUgdGV4dCBhcmVhLiAgKi8KICAg aWYgKG5zX2NsaXBfdG9fcm93ICh3LCBnbHlwaF9yb3csIFRFWFRfQVJFQSwgTk8pKQogICAgIHsK ICAgICAgIGZhY2UgPSBGQUNFX0ZST01fSURfT1JfTlVMTCAoZiwgcGh5c19jdXJzb3JfZ2x5cGgt PmZhY2VfaWQpOwotICAgICAgaWYgKGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKQot ICAgICAgICAgID09IG5zX2luZGV4X2NvbG9yIChGUkFNRV9DVVJTT1JfQ09MT1IgKGYpLCBmKSkK KworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMg Ki8KKworLyogRVhBTVBMRSBPRiBIT1cgVE8gTE9PSy1VUCBBIENPTE9SOgorICBlbnVtIGZhY2Vf aWQgZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXZlcnRpY2Fs LWJhci1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAo ZiwgZmFjZV9pZCk7CisgIE5TQ29sb3IgKmNvbG9yID0gbnNfbG9va3VwX2luZGV4ZWRfY29sb3Ig KE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIGYpOworCisgIEVYQU1QTEUgT0YgSE9XIFRPIFBS SU5UIEEgQ09MT1IgVE8gU1RERVJSOgorICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kID0gZmFjZS0+ bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmQg PSBmYWNlLT5sZmFjZVtMRkFDRV9CQUNLR1JPVU5EX0lOREVYXTsKKyAgZnByaW50ZiAoc3RkZXJy LCAiXG5mb3JlZ3JvdW5kICglcykgfCBiYWNrZ3JvdW5kICglcylcbiIsCisgICAgICAgICAgICAg ICAgICAgKCFOSUxQIChmb3JlZ3JvdW5kKSA/IFNTREFUQSAoZm9yZWdyb3VuZCkgOiAiTklMUCIp LAorICAgICAgICAgICAgICAgICAgICghTklMUCAoYmFja2dyb3VuZCkgPyBTU0RBVEEgKGJhY2tn cm91bmQpIDogIk5JTFAiKSk7CisKKyAgRVhBTVBMRSBPRiBIT1cgVE8gQ1JFQVRFIEEgQ09MT1Ig V0lUSCBSR0IvTFNMIGZsb2F0IHZhbHVlczoKKyAgTlNDb2xvciAqbXlfY29sb3IgPSBbTlNDb2xv ciBjb2xvcldpdGhDYWxpYnJhdGVkUmVkOiBzLT53LT5tYy5yZWQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVuOiBzLT53LT5tYy5ncmVlbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWU6IHMtPnct Pm1jLmJsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFscGhhOiAxLjBdOyAqLworCisgIGlmICh3LT5tYy5nbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEgK KyAgICAgIHx8IHctPm1jLmdseXBoX2ZsYXZvciA9PSBNQ19HTFlQSExFU1MKKyAgICAgIHx8IHct Pm1jLmdseXBoX2ZsYXZvciA9PSBNQ19HTFlQSF9UQUIpCisgICAgeworICAgICAgW1tOU0NvbG9y IGNvbG9yV2l0aENhbGlicmF0ZWRSZWQ6IHctPm1jLnJlZCBncmVlbjogdy0+bWMuZ3JlZW4gYmx1 ZTogdy0+bWMuYmx1ZSBhbHBoYTogMS4wXSBzZXRdOworICAgICAgTGlzcF9PYmplY3QgYnVmID0g dy0+Y29udGVudHM7CisgICAgICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgICAgICBzdHJ1Y3QgYnVm ZmVyICpiID0gWEJVRkZFUiAoYnVmKTsKKyAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFO SUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmICFOSUxQIChCVkFSIChiLCBtYXJrX2FjdGl2ZSkpKTsKKyAgICAgIHB0cmRpZmZfdCByZWdp b25fYmVnaW5uaW5nID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBYRklYTlVNIChGcmVnaW9uX2JlZ2lu bmluZyAoKSkgOiAtMTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3Rp dmVfcCkgPyBYRklYTlVNIChGcmVnaW9uX2VuZCAoKSkgOiAtMTsKKyAgICAgIGJvb2wgcmVnaW9u X2luX2JvdW5kc19wID0gKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgdy0+bWMucG9zaW50ID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1jLnBvc2ludCA8IHJlZ2lvbl9lbmQpOworICAg ICAgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICYmIHJlZ2lvbl9pbl9ib3VuZHNfcAor ICAgICAgICAgICYmIGFjdGl2ZV9wKQogICAgICAgICB7Ci0gICAgICAgICAgW25zX2xvb2t1cF9p bmRleGVkX2NvbG9yIChOU19GQUNFX0ZPUkVHUk9VTkQgKGZhY2UpLCBmKSBzZXRdOwotICAgICAg ICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xPUiAoZik7CisgICAgICAgICAgZW51 bSBmYWNlX2lkIGhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFj ZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUp OworICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlID0gRkFD RV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlX2lkKTsKKyAgICAgICAgICBO U0NvbG9yICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9jb2xvciA9IG5zX2xvb2t1cF9pbmRleGVkX2Nv bG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2UpLCBmKTsK KyAgICAgICAgICBob2xsb3dfY29sb3IgPSBob2xsb3dfYWN0aXZlX3JlZ2lvbl9jb2xvcjsKICAg ICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAgICAg ICAgJiYgIXJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICAgICAgICAmJiBhY3RpdmVfcCkK KyAgICAgICAgICB7CisgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdp b25fb3V0X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFs LWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgc3RydWN0IGZh Y2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX291dF9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xs b3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZV9pZCk7CisgICAgICAgICAgICBOU0NvbG9yICpob2xs b3dfYWN0aXZlX3JlZ2lvbl9vdXRfY29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNf RkFDRV9GT1JFR1JPVU5EIChob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZSksIGYpOworICAg ICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2NvbG9yOwor ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICghcmVnaW9uX2FjdGl2ZV9wICYmIGFjdGl2 ZV9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2Fj dGl2ZV9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m YWtlLWN1cnNvci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICBzdHJ1Y3QgZmFjZSAqaG9s bG93X2FjdGl2ZV9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0aXZlX2ZhY2VfaWQp OworICAgICAgICAgICAgICBOU0NvbG9yICpob2xsb3dfYWN0aXZlX2NvbG9yID0gbnNfbG9va3Vw X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoaG9sbG93X2FjdGl2ZV9mYWNlKSwg Zik7CisgICAgICAgICAgICAgIGhvbGxvd19jb2xvciA9IGhvbGxvd19hY3RpdmVfY29sb3I7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGlzIF9ub3RfIHZpc2libGUg aW4gdGhlIGluYWN0aXZlIHdpbmRvdyBiZWNhdXNlIHRoZSBvdmVybGF5IHdpbmRvdyBwcm9wZXJ0 eSBpcyB1c2VkLiAqLworICAgICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19pbmFjdGl2ZV9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1pbmFjdGl2ZS1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpo b2xsb3dfaW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2luYWN0aXZlX2Zh Y2VfaWQpOworICAgICAgICAgICAgICAgIE5TQ29sb3IgKmhvbGxvd19pbmFjdGl2ZV9jb2xvciA9 IG5zX2xvb2t1cF9pbmRleGVkX2NvbG9yIChOU19GQUNFX0JBQ0tHUk9VTkQgKGhvbGxvd19pbmFj dGl2ZV9mYWNlKSwgZik7CisgICAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gaG9sbG93X2lu YWN0aXZlX2NvbG9yOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKGZh Y2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKSA9PSBuc19pbmRleF9jb2xvciAoRlJBTUVf Q1VSU09SX0NPTE9SIChmKSwgZikpCisgICAgICAgICAgICAgICAgaG9sbG93X2NvbG9yID0gRlJB TUVfQ1VSU09SX0NPTE9SIChmKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpkZWZhdWx0X2JnX2ZhY2Ug PSBGQUNFX0ZST01fSUQgKGYsIERFRkFVTFRfRkFDRV9JRCk7CisgICAgICAgICAgICAgICAgICAg IFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9CQUNLR1JPVU5EIChkZWZhdWx0X2Jn X2ZhY2UpLCBmKSBzZXRdOworICAgICAgICAgICAgICAgICAgICBob2xsb3dfY29sb3IgPSBGUkFN RV9DVVJTT1JfQ09MT1IgKGYpOworICAgICAgICAgICAgICAgICAgfQorICAgIH0KKyAgICBlbHNl IGlmIChmYWNlICYmIE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkgPT0gbnNfaW5kZXhfY29sb3Ig KEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorICAgICAgeworICAgICAgICBbbnNfbG9va3Vw X2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfRk9SRUdST1VORCAoZmFjZSksIGYpIHNldF07CisgICAg ICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xPUiAoZik7CisgICAgICB9CiAgICAg ICBlbHNlCiAgICAgICAgIFtGUkFNRV9DVVJTT1JfQ09MT1IgKGYpIHNldF07CiAKLSAgICAgIHN3 aXRjaCAoY3Vyc29yX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBERUZBVUxUX0NVUlNP UjoKLSAgICAgICAgY2FzZSBOT19DVVJTT1I6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh c2UgRklMTEVEX0JPWF9DVVJTT1I6Ci0gICAgICAgICAgTlNSZWN0RmlsbCAocik7Ci0gICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSE9MTE9XX0JPWF9DVVJTT1I6Ci0gICAgICAgICAgTlNS ZWN0RmlsbCAocik7Ci0gICAgICAgICAgW2hvbGxvd19jb2xvciBzZXRdOwotICAgICAgICAgIE5T UmVjdEZpbGwgKE5TSW5zZXRSZWN0IChyLCAxLCAxKSk7Ci0gICAgICAgICAgW0ZSQU1FX0NVUlNP Ul9DT0xPUiAoZikgc2V0XTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBIQkFSX0NV UlNPUjoKLSAgICAgICAgICBOU1JlY3RGaWxsIChyKTsKLSAgICAgICAgICBicmVhazsKLSAgICAg ICAgY2FzZSBCQVJfQ1VSU09SOgotICAgICAgICAgIHMgPSByOwotICAgICAgICAgIC8qIElmIHRo ZSBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yIGlzIFIyTCwgZHJhdyB0aGUgYmFyIGN1cnNvcgotICAg ICAgICAgICAgIG9uIHRoZSByaWdodCBvZiBpdHMgZ2x5cGgsIHJhdGhlciB0aGFuIG9uIHRoZSBs ZWZ0LiAgKi8KLSAgICAgICAgICBjdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3JfZ2x5cGgg KHcpOwotICAgICAgICAgIGlmICgoY3Vyc29yX2dseXBoLT5yZXNvbHZlZF9sZXZlbCAmIDEpICE9 IDApCi0gICAgICAgICAgICBzLm9yaWdpbi54ICs9IGN1cnNvcl9nbHlwaC0+cGl4ZWxfd2lkdGgg LSBzLnNpemUud2lkdGg7Ci0KLSAgICAgICAgICBOU1JlY3RGaWxsIChzKTsKLSAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotICAgICAgbnNfcmVzZXRfY2xpcHBpbmcgKGYpOworLyogZW5kIE1V TFRJUExFIENVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKKyAgc3dpdGNo IChjdXJzb3JfdHlwZSkKKyAgICB7CisgICAgY2FzZSBERUZBVUxUX0NVUlNPUjoKKyAgICBjYXNl IE5PX0NVUlNPUjoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRklMTEVEX0JPWF9DVVJTT1I6Cisg ICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSE9MTE9XX0JPWF9D VVJTT1I6CisgICAgICBOU1JlY3RGaWxsIChyKTsKKyAgICAgIFtob2xsb3dfY29sb3Igc2V0XTsK KyAgICAgIE5TUmVjdEZpbGwgKE5TSW5zZXRSZWN0IChyLCAxLCAxKSk7CisgICAgICBbRlJBTUVf Q1VSU09SX0NPTE9SIChmKSBzZXRdOworICAgICAgYnJlYWs7CisgICAgY2FzZSBIQkFSX0NVUlNP UjoKKyAgICAgIE5TUmVjdEZpbGwgKHIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBCQVJfQ1VS U09SOgorICAgICAgcyA9IHI7CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRSBDVVJTT1JTICovCisKKyAgICAvKiBAbGF3bGlzdCBpcyBmb2N1c2luZyB0aGUgaW5pdGlh bCBkZXZlbG9wbWVudCBvZiBmZWF0dXJlIHJlcXVlc3RzICMxNzY4NAorICAgIGFuZCAjMjI4NzMg b24gTDJSIGxhbmd1YWdlcy4gKi8KKyAgICBpZiAody0+bWMuZ2x5cGhfZmxhdm9yICE9IE1DX0dM WVBICisgICAgICAgICYmIHctPm1jLmdseXBoX2ZsYXZvciAhPSBNQ19HTFlQSExFU1MKKyAgICAg ICAgJiYgdy0+bWMuZ2x5cGhfZmxhdm9yICE9IE1DX0dMWVBIX1RBQikKKyAgICAgIHsKKyAgICAg IC8qIElmIHRoZSBjaGFyYWN0ZXIgdW5kZXIgY3Vyc29yIGlzIFIyTCwgZHJhdyB0aGUgYmFyIGN1 cnNvcgorICAgICAgICAgb24gdGhlIHJpZ2h0IG9mIGl0cyBnbHlwaCwgcmF0aGVyIHRoYW4gb24g dGhlIGxlZnQuICAqLworICAgICAgY3Vyc29yX2dseXBoID0gZ2V0X3BoeXNfY3Vyc29yX2dseXBo ICh3KTsKKyAgICAgIGlmICgoY3Vyc29yX2dseXBoLT5yZXNvbHZlZF9sZXZlbCAmIDEpICE9IDAp CisgICAgICAgIHMub3JpZ2luLnggKz0gY3Vyc29yX2dseXBoLT5waXhlbF93aWR0aCAtIHMuc2l6 ZS53aWR0aDsKKyAgICAgIH0KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKworICAgICAg TlNSZWN0RmlsbCAocyk7CisgICAgICBicmVhazsKKyAgICB9CisgIG5zX3Jlc2V0X2NsaXBwaW5n IChmKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMg Ki8KKworICAvKiBkcmF3IHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAqLworICBpZiAo Y3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09SCisgICAgICAmJiB3LT5tYy5nbHlwaF9mbGF2b3IgIT0g TUNfR0xZUEhMRVNTCisgICAgICAmJiB3LT5tYy5nbHlwaF9mbGF2b3IgIT0gTUNfR0xZUEhfVEFC KQorICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJBV19DVVJTT1Ip OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCi0gICAgICAvKiBkcmF3IHRoZSBjaGFy YWN0ZXIgdW5kZXIgdGhlIGN1cnNvciAqLwotICAgICAgaWYgKGN1cnNvcl90eXBlICE9IE5PX0NV UlNPUikKLSAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFX X0NVUlNPUik7CiAgICAgfQogfQogCkBAIC0zOTI2LDcgKzQxMDYsMjcgQEAgRnVuY3Rpb24gbW9k ZWxlZCBhZnRlciB4X2RyYXdfZ2x5cGhfc3RyaW5nX2JveCAoKS4KICAgICB7CiAgICAgICBpbnQg dGhpY2tuZXNzID0gYWJzIChzLT5pbWctPnJlbGllZik7CiAgICAgICBpZiAodGhpY2tuZXNzID09 IDApIHRoaWNrbmVzcyA9IDE7Ci0gICAgICBuc19kcmF3X2JveCAoYnIsIHRoaWNrbmVzcywgRlJB TUVfQ1VSU09SX0NPTE9SIChzLT5mKSwgMSwgMSk7CisKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICBpZiAocy0+dy0+bWMuZ2x5cGhfZmxh dm9yID09IE1DX0dMWVBICisgICAgICAgIHx8IHMtPnctPm1jLmdseXBoX2ZsYXZvciA9PSBNQ19H TFlQSExFU1MKKyAgICAgICAgfHwgcy0+dy0+bWMuZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBIX1RB QikKKyAgICAgIHsKKyAgICAgICAgTlNDb2xvciAqYm9yZGVyX2NvbG9yID0gW05TQ29sb3IgY29s b3JXaXRoQ2FsaWJyYXRlZFJlZDogcy0+dy0+bWMucmVkCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZW46IHMtPnctPm1jLmdyZWVu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJsdWU6IHMtPnctPm1jLmJsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogMS4wXTsKKyAgICAgICAgbnNfZHJhd19i b3ggKGJyLCB0aGlja25lc3MsIGJvcmRlcl9jb2xvciwgMSwgMSk7CisgICAgICB9CisgICAgICBl bHNlCisgICAgICAgIG5zX2RyYXdfYm94IChiciwgdGhpY2tuZXNzLCBGUkFNRV9DVVJTT1JfQ09M T1IgKHMtPmYpLCAxLCAxKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgIH0K IH0KIApkaWZmIC0tZ2l0IGEvc3JjL3czMnRlcm0uYyBiL3NyYy93MzJ0ZXJtLmMKaW5kZXggOGQx ODlhZS4uZTdmYjhhMyAxMDA2NDQKLS0tIGEvc3JjL3czMnRlcm0uYworKysgYi9zcmMvdzMydGVy bS5jCkBAIC01NDUsNiArNTQ1LDE1IEBAIHhfdXBkYXRlX2JlZ2luIChzdHJ1Y3QgZnJhbWUgKmYp CiAgIGlmICghIEZSQU1FX1czMl9QIChmKSkKICAgICByZXR1cm47CiAKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgZi0+bWNfdXBkYXRpbmdf ZnJhbWUgPSBmOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIC8qIFJlZ2VuZXJh dGUgZGlzcGxheSBwYWxldHRlIGJlZm9yZSBkcmF3aW5nIGlmIGxpc3Qgb2YgcmVxdWVzdGVkCiAg ICAgIGNvbG9ycyBoYXMgY2hhbmdlZC4gKi8KICAgaWYgKGRpc3BsYXlfaW5mby0+cmVnZW5fcGFs ZXR0ZSkKQEAgLTc1NCw2ICs3NjMsMTYgQEAgeF91cGRhdGVfZW5kIChzdHJ1Y3QgZnJhbWUgKmYp CiAKICAgLyogTW91c2UgaGlnaGxpZ2h0IG1heSBiZSBkaXNwbGF5ZWQgYWdhaW4uICAqLwogICBN T1VTRV9ITF9JTkZPIChmKS0+bW91c2VfZmFjZV9kZWZlciA9IGZhbHNlOworCisKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIGYtPm1jX3VwZGF0 aW5nX2ZyYW1lID0gTlVMTDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAK QEAgLTk3Myw2ICs5OTIsMjAgQEAgc3RhdGljIHZvaWQgdzMyX2RyYXdfYm94X3JlY3QgKHN0cnVj dCBnbHlwaF9zdHJpbmcgKiwgaW50LCBpbnQsIGludCwgaW50LAogc3RhdGljIHZvaWQKIHhfc2V0 X2N1cnNvcl9nYyAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIHsKKworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICBpZiAocy0+dy0+bWMuY3Vy c29yX2djX2RlZmF1bHQpCisgICAgeworICAgICAgcy0+Z2MgPSBzLT5mLT5vdXRwdXRfZGF0YS53 MzItPmN1cnNvcl9nYzsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCisKICAgaWYgKHMtPmZvbnQgPT0gRlJBTUVfRk9OVCAocy0+ZikKICAgICAgICYm IHMtPmZhY2UtPmJhY2tncm91bmQgPT0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAocy0+ZikKICAg ICAgICYmIHMtPmZhY2UtPmZvcmVncm91bmQgPT0gRlJBTUVfRk9SRUdST1VORF9QSVhFTCAocy0+ ZikKQEAgLTU2OTAsNiArNTcyMywyNiBAQCB4X2RyYXdfaG9sbG93X2N1cnNvciAoc3RydWN0IHdp bmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqcm93KQogCiAgIC8qIENvbXB1dGUgZnJhbWUtcmVs YXRpdmUgY29vcmRpbmF0ZXMgZm9yIHBoeXMgY3Vyc29yLiAgKi8KICAgZ2V0X3BoeXNfY3Vyc29y X2dlb21ldHJ5ICh3LCByb3csIGN1cnNvcl9nbHlwaCwgJmxlZnQsICZ0b3AsICZoKTsKKworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTEVH RU5EOgorCistICB0b3AgeSA9PSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgcm93LT55KQor CistICBib3R0b20geSA9PSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgcm93LT55KSAtIHJv dy0+aGVpZ2h0CisKKy0gIGggb2YgSE9MTE9XX0JPWF9DVVJTT1IgPT0gcm93LT5oZWlnaHQKKyAg IFtUaGlzIGF2b2lkcyBhIHZpc2libGUgZ2FwIGFib3ZlL2JlbG93Ll0gKi8KKworICBpZiAody0+ bWMuaCA+IDApCisgICAgaCA9IHJvdy0+aGVpZ2h0OworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKworCiAgIHJlY3QubGVmdCA9IGxlZnQ7CiAgIC8qIFdoZW4gb24gUjJMIGNoYXJhY3Rlciwg c2hvdyBjdXJzb3IgYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlCiAgICAgIGdseXBoLCB1bmxlc3Mg dGhlIGN1cnNvciBib3ggaXMgYXMgd2lkZSBhcyB0aGUgZ2x5cGggb3Igd2lkZXIKQEAgLTU3NTMs NyArNTgwNiwxNyBAQCB4X2RyYXdfYmFyX2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0 IGdseXBoX3JvdyAqcm93LAogCSBpbnZpc2libGUuICBVc2UgdGhlIGdseXBoJ3MgZm9yZWdyb3Vu ZCBjb2xvciBpbnN0ZWFkIGluIHRoaXMKIAkgY2FzZSwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0 aGUgZ2x5cGgncyBjb2xvcnMgYXJlIGNob3NlbiBzbwogCSB0aGF0IHRoZSBnbHlwaCBpcyBsZWdp YmxlLiAgKi8KLSAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGN1cnNvcl9jb2xvcikKKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAg ICAgaWYgKGZhY2UtPmJhY2tncm91bmQgPT0gY3Vyc29yX2NvbG9yCisgICAgICAgICAgJiYgIXct Pm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSkKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogCWN1cnNvcl9jb2xvciA9IGZhY2UtPmZvcmVncm91bmQ7CiAKICAgICAgIHggPSBXSU5E T1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB3LT5waHlzX2N1cnNvci54KTsKQEAgLTU3NzQs NiArNTgzNywxNyBAQCB4X2RyYXdfYmFyX2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0 IGdseXBoX3JvdyAqcm93LAogCSAgaWYgKChjdXJzb3JfZ2x5cGgtPnJlc29sdmVkX2xldmVsICYg MSkgIT0gMCkKIAkgICAgeCArPSBjdXJzb3JfZ2x5cGgtPnBpeGVsX3dpZHRoIC0gd2lkdGg7CiAK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAg ICAvKiBBbGlnbiBhbGwgZmFrZSBCQVJfQ1VSU09SIG9mIHRoZSBWRVJUSUNBTF9SVUxFUiB3aXRo IGBvcG9pbnRfeCcuICovCisgICAgaWYgKHctPm1jLmZ4ID4gMCkKKyAgICAgIHggPSB3LT5tYy5m eDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgdzMyX2ZpbGxfYXJlYSAoZiwg aGRjLCBjdXJzb3JfY29sb3IsIHgsCiAJCQkgV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcsIHct PnBoeXNfY3Vyc29yLnkpLAogCQkJIHdpZHRoLCByb3ctPmhlaWdodCk7CkBAIC01ODk1LDMxICs1 OTY5LDE2OSBAQCB3MzJfZHJhd193aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1 Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCiAJICByZXR1cm47CiAJfQogCi0gICAgICBzd2l0Y2gg KGN1cnNvcl90eXBlKQotCXsKLQljYXNlIEhPTExPV19CT1hfQ1VSU09SOgotCSAgeF9kcmF3X2hv bGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7Ci0JICBicmVhazsKIAotCWNhc2UgRklMTEVEX0JP WF9DVVJTT1I6Ci0JICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3csIERSQVdf Q1VSU09SKTsKLQkgIGJyZWFrOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdpbiBN VUxUSVBMRSBDVVJTT1JTICovCiAKLQljYXNlIEJBUl9DVVJTT1I6Ci0JICB4X2RyYXdfYmFyX2N1 cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOwotCSAgYnJlYWs7 CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgIENPTE9S UkVGIG9yaWdpbmFsX2N1cnNvcl9waXhlbCA9IGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3Bp eGVsOworICAvKiB4dGVybS5jL3h0ZXJtLmggdXNlIEdDOyB3aGVyZWFzLCB3MzJ0ZXJtLmMvdzMy dGVybS5oIHVzZSBYR0NWYWx1ZXMgKiAqLworICBYR0NWYWx1ZXMgKm9yaWdpbmFsX2N1cnNvcl9n YyA9IGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djOworICBkb3VibGUgYmFzZSA9IDI1NS4w OworICBkb3VibGUgdGVybV9yZWQgPSBiYXNlICogdy0+bWMucmVkOworICBkb3VibGUgdGVybV9n cmVlbiA9IGJhc2UgKiB3LT5tYy5ncmVlbjsKKyAgZG91YmxlIHRlcm1fYmx1ZSA9IGJhc2UgKiB3 LT5tYy5ibHVlOworICBpbnQgaW50X3JlZCA9IFhGSVhOVU0gKEZ0cnVuY2F0ZSAobWFrZV9mbG9h dCAodGVybV9yZWQpLCBRbmlsKSk7CisgIGludCBpbnRfZ3JlZW4gPSBYRklYTlVNIChGdHJ1bmNh dGUgKG1ha2VfZmxvYXQgKHRlcm1fZ3JlZW4pLCBRbmlsKSk7OworICBpbnQgaW50X2JsdWUgPSBY RklYTlVNIChGdHJ1bmNhdGUgKG1ha2VfZmxvYXQgKHRlcm1fYmx1ZSksIFFuaWwpKTs7CisgIENP TE9SUkVGIGNvbG9yX3BpeGVsID0gUEFMRVRURVJHQiAoaW50X3JlZCwgaW50X2dyZWVuLCBpbnRf Ymx1ZSk7CisgIHN3aXRjaCAoY3Vyc29yX3R5cGUpCisgIHsKKyAgICBjYXNlIEhPTExPV19CT1hf Q1VSU09SOgorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSBnZXRfcGh5c19jdXJz b3JfZ2x5cGggKHcpOworICAgICAgaWYgKGdseXBoID09IE5VTEwpCisgICAgICAgIHJldHVybjsK KyAgICAgIGlmIChnbHlwaC0+dHlwZSAhPSBJTUFHRV9HTFlQSCAmJiB3LT5tYy5yZWQgPj0gMCAm JiB3LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAg ICAgIFhHQ1ZhbHVlcyBnY192YWx1ZXM7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0g R0NGb250IHwgR0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kOworICAgICAgICAgIGdjX3ZhbHVl cy5mb250ID0gRlJBTUVfRk9OVCAoZik7CisgICAgICAgICAgc3RydWN0IGZhY2UgKmRlZmF1bHRf ZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgREVGQVVMVF9GQUNFX0lEKTsKKyAgICAgICAgICBMaXNw X09iamVjdCBidWYgPSB3LT5jb250ZW50czsKKyAgICAgICAgICBDSEVDS19CVUZGRVIgKGJ1Zik7 CisgICAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisgICAgICAgICAg Ym9vbCByZWdpb25fYWN0aXZlX3AgPSAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2RlKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBtYXJrX2Fj dGl2ZSkpKTsKKyAgICAgICAgICBwdHJkaWZmX3QgcmVnaW9uX2JlZ2lubmluZyA9IChyZWdpb25f YWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9iZWdpbm5pbmcgKCkpIDogLTE7CisgICAgICAg ICAgcHRyZGlmZl90IHJlZ2lvbl9lbmQgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhGSVhOVU0gKEZy ZWdpb25fZW5kICgpKSA6IC0xOworICAgICAgICAgIGJvb2wgcmVnaW9uX2luX2JvdW5kc19wID0g KHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IHctPm1jLnBvc2ludCA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgdy0+bWMucG9zaW50IDwgcmVnaW9uX2VuZCk7CisgICAgICAgICAg LyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYycgYnkg Ym9ycm93aW5nIHRoZQorICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4g dzMyZm5zLmMuICAqLworICAgICAgICAgIGlmIChyZWdpb25fYWN0aXZlX3AKKyAgICAgICAgICAg ICAgJiYgcmVnaW9uX2luX2JvdW5kc19wCisgICAgICAgICAgICAgICYmIGFjdGl2ZV9wKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdp b25fZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr ZS1jdXJzb3ItcmVnaW9uLWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgIHN0cnVjdCBmYWNl ICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBob2xsb3dfYWN0 aXZlX3JlZ2lvbl9mYWNlX2lkKTsKKyAgICAgICAgICAgICAgZ2NfdmFsdWVzLmZvcmVncm91bmQg PSBkZWZhdWx0X2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNr Z3JvdW5kID0gaG9sbG93X2FjdGl2ZV9yZWdpb25fZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAg ICAgICAgICAgJiYgIXJlZ2lvbl9pbl9ib3VuZHNfcAorICAgICAgICAgICAgICAgICAgICAgJiYg YWN0aXZlX3ApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQg aG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywg ZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAg ICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZSA9 IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2VfaWQpOworICAg ICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gZGVmYXVsdF9mYWNlLT5mb3JlZ3Jv dW5kOworICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5iYWNrZ3JvdW5kID0gaG9sbG93X2FjdGl2 ZV9yZWdpb25fb3V0X2ZhY2UtPmZvcmVncm91bmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgZWxzZSBpZiAoIXJlZ2lvbl9hY3RpdmVfcCAmJiBhY3RpdmVfcCkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9mYWNl X2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1mYWtlLWN1cnNv ci1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19h Y3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2FjdGl2ZV9mYWNlX2lkKTsKKyAg ICAgICAgICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gZGVmYXVsdF9mYWNlLT5mb3Jl Z3JvdW5kOworICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBob2xsb3df YWN0aXZlX2ZhY2UtPmJhY2tncm91bmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIC8qIFRoZSByZWdpb24gaXMgX25vdF8gdmlzaWJsZSBpbiB0aGUgaW5hY3RpdmUgd2luZG93 IGJlY2F1c2UgdGhlIG92ZXJsYXkgd2luZG93IHByb3BlcnR5IGlzIHVzZWQuICovCisgICAgICAg ICAgICAgICAgZWxzZSBpZiAoIWFjdGl2ZV9wKQorICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQgPSBsb29r dXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vyc29yLWluYWN0aXZl LWZhY2UiKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpob2xsb3df aW5hY3RpdmVfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93X2luYWN0aXZlX2ZhY2VfaWQp OworICAgICAgICAgICAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IGRlZmF1bHRfZmFj ZS0+Zm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQg PSBob2xsb3dfaW5hY3RpdmVfZmFjZS0+YmFja2dyb3VuZDsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IFhDcmVhdGVHQyAoTlVM TCwgRlJBTUVfVzMyX1dJTkRPVyAoZiksIG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAgIGJs b2NrX2lucHV0ICgpOworICAgICAgICAgIC8qIEZvcmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVz ZSBgcy0+Zi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICB3LT5t Yy5jdXJzb3JfZ2NfZGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9n bHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29y X2djX2RlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNv cl9nYyA9IG9yaWdpbmFsX2N1cnNvcl9nYzsKKyAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOwor ICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJz b3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhl bCA9IGNvbG9yX3BpeGVsOworICAgICAgICAgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlw aF9yb3cpOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3Jp Z2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGdseXBoLT50 eXBlID09IElNQUdFX0dMWVBIICYmIHctPm1jLnJlZCA+PSAwICYmIHctPm1jLmJsdWUgPj0gMCAm JiB3LT5tYy5ncmVlbiA+PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRlbXBvcmFy aWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAg ICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4ZWw7Cisg ICAgICAgICAgICB4X2RyYXdfaG9sbG93X2N1cnNvciAodywgZ2x5cGhfcm93KTsKKyAgICAgICAg ICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3Bp eGVsOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB4X2RyYXdfaG9s bG93X2N1cnNvciAodywgZ2x5cGhfcm93KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IEZJTExFRF9CT1hfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3 LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAg IC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MnIGJ5 IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21ha2VfZ2MnIGlu IHczMmZucy5jLiAgKi8KKyAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICBYR0NW YWx1ZXMgZ2NfdmFsdWVzOworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IEdDRm9udCB8 IEdDRm9yZWdyb3VuZCB8IEdDQmFja2dyb3VuZDsKKyAgICAgICAgICBnY192YWx1ZXMuZm9udCA9 IEZSQU1FX0ZPTlQgKGYpOworICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gRlJBTUVf QkFDS0dST1VORF9QSVhFTCAoZik7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSBj b2xvcl9waXhlbDsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IFhD cmVhdGVHQyAoTlVMTCwgRlJBTUVfVzMyX1dJTkRPVyAoZiksIG1hc2ssICZnY192YWx1ZXMpOwor ICAgICAgICAgIC8qIEZvcmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0 X2RhdGEudzMyLT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVm YXVsdCA9IHRydWU7CisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhf cm93LCBEUkFXX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSBm YWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9nYyA9IG9yaWdpbmFs X2N1cnNvcl9nYzsKKyAgICAgICAgICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICB9CisgICAg ICAgIGVsc2UKKyAgICAgICAgICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3cs IERSQVdfQ1VSU09SKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEJBUl9DVVJTT1I6 CisgICAgeworICAgICAgaWYgKHctPm1jLnJlZCA+PSAwICYmIHctPm1jLmJsdWUgPj0gMCAmJiB3 LT5tYy5ncmVlbiA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlq YWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCcuICAqLworICAgICAgICAgIGYt Pm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAg dy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5ID0gdHJ1ZTsKKyAgICAgICAgICB4X2RyYXdf YmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOworICAg ICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IGZhbHNlOworICAgICAgICAg IGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVs OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNvciAo dywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7Cisg ICAgfQorICAgIGNhc2UgSEJBUl9DVVJTT1I6CisgICAgeworICAgICAgaWYgKHctPm1jLnJlZCA+ PSAwICYmIHctPm1jLmJsdWUgPj0gMCAmJiB3LT5tYy5ncmVlbiA+PSAwKQorICAgICAgICB7Cisg ICAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNv cl9waXhlbCcuICAqLworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVs ID0gY29sb3JfcGl4ZWw7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5 ID0gdHJ1ZTsKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJz b3Jfd2lkdGgsIEhCQVJfQ1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNp YmxlX29rYXkgPSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9w aXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg ICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBI QkFSX0NVUlNPUik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOT19DVVJTT1I6Cisg ICAgICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IDA7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0 OgorICAgICAgZW1hY3NfYWJvcnQgKCk7CisgIH0KIAotCWNhc2UgSEJBUl9DVVJTT1I6Ci0JICB4 X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VSU09S KTsKLQkgIGJyZWFrOworLyogZW5kIE1VTFRJUExFIENVUlNPUlMgKi8KKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLwogCi0JY2FzZSBOT19DVVJTT1I6Ci0JICB3LT5waHlzX2N1cnNvcl93aWR0aCA9 IDA7Ci0JICBicmVhazsKIAotCWRlZmF1bHQ6Ci0JICBlbWFjc19hYm9ydCAoKTsKLQl9CiAgICAg fQogfQogCmRpZmYgLS1naXQgYS9zcmMvd2luZG93LmggYi9zcmMvd2luZG93LmgKaW5kZXggY2Mw YjZiNi4uNDBmOGE4NSAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisrKyBiL3NyYy93aW5kb3cu aApAQCAtNzYsNiArNzYsNjIgQEAgb25lIGFuZCB0aGUgc2FtZSwgc28gaXRzIHByZXYgYW5kIG5l eHQgbWVtYmVycyBhcmUgbmlsLgogCiBBIGRlYWQgd2luZG93IGhhcyBpdHMgY29udGVudHMgZmll bGQgc2V0IHRvIG5pbC4gICovCiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBiZWdp biBNVUxUSVBMRSBDVVJTT1JTICovCisKKy8qIFN1ZmZpeGVzIGZvciB0aGUgYG1jYCB3aW5kb3cg cG9pbnRlciBwcmVmaXguICovCitzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29ycworeworICAvKiBWYWx1 ZXMgZm9yIHByZXZpb3VzIGFuZCBjdXJyZW50IGB3aW5kb3ctc3RhcnQnIGFuZCBgd2luZG93LWVu ZCcuICovCisgIEVNQUNTX0lOVCBjdXJyZW50X3N0YXJ0LCBjdXJyZW50X2VuZCwgcHJldmlvdXNf c3RhcnQsIHByZXZpb3VzX2VuZCwgY3VycmVudF94LCBwcmV2aW91c194OworCisgIC8qIFRydWUg bWVhbnMgdG8gZm9yY2UgYHhfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0 YS53MzItPmN1cnNvcl9nYycKKyAgaW4gdzMydGVybS5jIG9yIGBzLT5mLT5vdXRwdXRfZGF0YS54 LT5jdXJzb3JfZ2MnIGluIHh0ZXJtLmMuICovCisgIGJvb2xfYmYgY3Vyc29yX2djX2RlZmF1bHQg OiAxOworCisgIC8qIFRydWUgbWVhbnMgYHhfc2V0X2N1cnNvcl9nYycgc2hvdWxkIHBlcm1pdCB0 aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZAorICBjb2xvcnMgdG8gYmUgdGhlIHNhbWUuICBU aGUgZGVmYXVsdCBiZWhhdmlvciBkaXNhbGxvd3MgYW4gaW52aXNpYmxlIHJlc3VsdC4gKi8KKyAg Ym9vbF9iZiBjdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgOiAxOworCisgIC8qIFRydWUgbWVhbnMg YG1jX2RyYXdfbXVsdGlwbGVfY3Vyc29ycycgaGFzIG5vdCBydW4geWV0IGRyYXduIGdseXBoIGZh a2UgY3Vyc29ycy4gKi8KKyAgYm9vbF9iZiBkcmF3X211bHRpcGxlX2N1cnNvcnMgOiAxOworCisg IC8qIFRydWUgbWVhbnMgYG1jX2VyYXNlX211bHRpcGxlX2N1cnNvcnMnIGhhcyBub3QgcnVuIHll dCBlcmFzZWQgZ2x5cGggZmFrZSBjdXJzb3JzLiAqLworICBib29sX2JmIGVyYXNlX211bHRpcGxl X2N1cnNvcnMgOiAxOworCisgIC8qIFRydWUgbWVhbnMgY3Jvc3NoYWlycyBoYXZlIG5vdCB5ZXQg YmVlbiBkcmF3bi4gKi8KKyAgYm9vbF9iZiBkcmF3X2Nyb3NzaGFpcnMgOiAxOworCisgIC8qIFRy dWUgbWVhbnMgY3Jvc3NoYWlycyBoYXZlIG5vdCB5ZXQgYmVlbiBlcmFzZWQuICovCisgIGJvb2xf YmYgZXJhc2VfY3Jvc3NoYWlycyA6IDE7CisKKyAgLyogVGhlIGZsYXZvciBvZiB0aGUgZ2x5cGgg dXNlZCBieSBgZHJhd193aW5kb3dfY3Vyc29yJy4gKi8KKyAgaW50IGdseXBoX2ZsYXZvcjsKKwor ICAvKiBMLlMuTC4gY29sb3JzLiAqLworICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZTsKKworICAv KiBUaGUgYnVmZmVyIHBvc2l0aW9uIHBvaW50IG9mIGEgZmFrZSBjdXJzb3IuICovCisgIGludCBw b3NpbnQ7CisKKyAgLyogUGl4ZWwgcG9zaXRpb24gKHdpbmRvdyByZWxhdGl2ZSkgb2YgaG9yaXpv bnRhbC92ZXJ0aWNhbCBydWxlcnMuICovCisgIGludCBmeCwgZnksIGg7CisKKyAgLyogUmVjb3Jk IEZST01fV0hFUkUgd2hlbiBgcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYScgaXMgY2FsbGVk LiAqLworICBpbnQgcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYTsKKworICAvKiBUcnVlIG1l YW5zIHRoZSB2aXNpYmxlIGZpbGwgY29sdW1uIGhhcyBub3QgeWV0IGJlZW4gZHJhd24uICovCisg IGJvb2xfYmYgZHJhd19maWxsX2NvbHVtbiA6IDE7CisKKyAgLyogVHJ1ZSBtZWFucyB0aGUgdmlz aWJsZSBmaWxsIGNvbHVtbiBoYXMgbm90IHlldCBiZWVuIGVyYXNlZC4gKi8KKyAgYm9vbF9iZiBl cmFzZV9maWxsX2NvbHVtbiA6IDE7Cit9OworCisvKiBlbmQgTVVMVElQTEUgQ1VSU09SUyAqLwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogc3RydWN0IGN1cnNvcl9wb3MKIHsKICAgLyog UGl4ZWwgcG9zaXRpb24uICBUaGVzZSBhcmUgYWx3YXlzIHdpbmRvdyByZWxhdGl2ZS4gICovCkBA IC0xODEsNiArMjM3LDI4IEBAIHN0cnVjdCB3aW5kb3cKICAgICAvKiBUaGUgaGVscCBlY2hvIHRl eHQgZm9yIHRoaXMgd2luZG93LiAgUW5pbCBpZiB0aGVyZSdzIG5vbmUuICAqLwogICAgIExpc3Bf T2JqZWN0IG1vZGVfbGluZV9oZWxwX2VjaG87CiAKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAvKiBUaGUgY2FjaGUgZm9yIG11bHRpcGxl IGdseXBoIGN1cnNvcnMuICBGb3IgYW4gZXhhbXBsZSBvZiB0aGUgc3RydWN0dXJlIG9mCisgICAg dGhlIGxpc3QsIHNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBgbWNfZHJhd19t dWx0aXBsZV9jdXJzb3JzJyBpbgorICAgIHhkaXNwLmMuICAqLworICAgIExpc3BfT2JqZWN0IG11 bHRpcGxlX2N1cnNvcnNfY2FjaGU7CisKKyAgICAvKiBUaGUgY2FjaGUgZm9yIG11bHRpcGxlIGds eXBoL2dseXBobGVzcyBjdXJzb3JzIHRoYXQgZm9ybSBjcm9zc2hhaXJzLiAgRm9yIGFuCisgICAg ZXhhbXBsZSBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBsaXN0LCBzZWUgdGhlIGNvbW1lbnRzIGF0 IHRoZSBiZWdpbm5pbmcgb2YKKyAgICBgbWNfZHJhd19tdWx0aXBsZV9jdXJzb3JzJyBpbiB4ZGlz cC5jLiAgKi8KKyAgICBMaXNwX09iamVjdCBjcm9zc2hhaXJzX2NhY2hlOworCisgICAgLyogVGhl IGNhY2hlIGZvciBtdWx0aXBsZSBnbHlwaC9nbHlwaGxlc3MgY3Vyc29ycyB0aGF0IGZvcm0gdGhl IHZpc2libGUgZmlsbAorICAgIGNvbHVtbi4gIEZvciBhbiBleGFtcGxlIG9mIHRoZSBzdHJ1Y3R1 cmUgb2YgdGhlIGxpc3QsIHNlZSB0aGUgY29tbWVudHMgYXQgdGhlCisgICAgYmVnaW5uaW5nIG9m IGBtY19kcmF3X211bHRpcGxlX2N1cnNvcnMnIGluIHhkaXNwLmMuICAqLworICAgIExpc3BfT2Jq ZWN0IG1jX2ZpbGxfY29sdW1uX2NhY2hlOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAgICAgLyogTm8gTGlzcCBkYXRhIG1heSBmb2xsb3cgYmVsb3cgdGhpcyBwb2ludCB3aXRob3V0 IGNoYW5naW5nCiAgICAgICAgbWFya19vYmplY3QgaW4gYWxsb2MuYy4gIFRoZSBtZW1iZXIgY3Vy cmVudF9tYXRyaXggbXVzdCBiZSB0aGUKICAgICAgICBmaXJzdCBub24tTGlzcCBtZW1iZXIuICAq LwpAQCAtMjgzLDYgKzM2MSwxNiBAQCBzdHJ1Y3Qgd2luZG93CiAKICNpZmRlZiBIQVZFX1dJTkRP V19TWVNURU0KIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNP UlMgKi8KKworICAgIC8qIFRoZSBwcmVmaXggZm9yIHdpbmRvdyBwb2ludGVycyByZWxhdGluZyB0 byBtdWx0aXBsZSBjdXJzb3JzLiAgKi8KKyAgICBzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29ycyBtYzsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgIC8qIEN1cnNvciB0eXBlIG9mIGxh c3QgY3Vyc29yIGRyYXduIG9uIHRoZSB3aW5kb3cuICAqLwogICAgIGVudW0gdGV4dF9jdXJzb3Jf a2luZHMgcGh5c19jdXJzb3JfdHlwZTsKIApAQCAtNDIxLDYgKzUwOSwzMSBAQCBYV0lORE9XIChM aXNwX09iamVjdCBhKQogICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UsIHN0cnVj dCB3aW5kb3cpOwogfQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUg Q1VSU09SUyAqLworCitJTkxJTkUgdm9pZAord3NldF9tdWx0aXBsZV9jdXJzb3JzX2NhY2hlIChz dHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCit7CisgIHctPm11bHRpcGxlX2N1cnNv cnNfY2FjaGUgPSB2YWw7Cit9CisKK0lOTElORSB2b2lkCit3c2V0X2Nyb3NzaGFpcnNfY2FjaGUg KHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgdy0+Y3Jvc3NoYWlyc19j YWNoZSA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK3dzZXRfbWNfZmlsbF9jb2x1bW5fY2FjaGUg KHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgdy0+bWNfZmlsbF9jb2x1 bW5fY2FjaGUgPSB2YWw7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIC8qIE1v c3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcCBmaWVsZHMgaW4g c3RydWN0CiAgICB3aW5kb3cuICAqLwogSU5MSU5FIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy94ZGlz cC5jIGIvc3JjL3hkaXNwLmMKaW5kZXggZmE3NjkxYy4uYWVjZjNlNCAxMDA2NDQKLS0tIGEvc3Jj L3hkaXNwLmMKKysrIGIvc3JjL3hkaXNwLmMKQEAgLTgzMCw3ICs4MzAsMTYgQEAgc3RhdGljIGlu dG1heF90IG1lc3NhZ2VfbG9nX2NoZWNrX2R1cGxpY2F0ZSAocHRyZGlmZl90LCBwdHJkaWZmX3Qp Owogc3RhdGljIHZvaWQgcHVzaF9pdCAoc3RydWN0IGl0ICosIHN0cnVjdCB0ZXh0X3BvcyAqKTsK IHN0YXRpYyB2b2lkIGl0ZXJhdGVfb3V0X29mX2Rpc3BsYXlfcHJvcGVydHkgKHN0cnVjdCBpdCAq KTsKIHN0YXRpYyB2b2lkIHBvcF9pdCAoc3RydWN0IGl0ICopOwotc3RhdGljIHZvaWQgcmVkaXNw bGF5X2ludGVybmFsICh2b2lkKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1V TFRJUExFIENVUlNPUlMgKi8KKworc3RhdGljIHZvaWQgcmVkaXNwbGF5X2ludGVybmFsIChpbnQp OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiBzdGF0aWMgdm9pZCBlY2hvX2FyZWFf ZGlzcGxheSAoYm9vbCk7CiBzdGF0aWMgdm9pZCBibG9ja19idWZmZXJfZmxpcHMgKHZvaWQpOwog c3RhdGljIHZvaWQgdW5ibG9ja19idWZmZXJfZmxpcHMgKHZvaWQpOwpAQCAtOTIxLDYgKzkzMCw1 MTAwIEBAIHN0YXRpYyB2b2lkIHNob3dfbW91c2VfZmFjZSAoTW91c2VfSExJbmZvICosIGVudW0g ZHJhd19nbHlwaHNfZmFjZSk7CiBzdGF0aWMgYm9vbCBjb29yZHNfaW5fbW91c2VfZmFjZV9wIChz dHJ1Y3Qgd2luZG93ICosIGludCwgaW50KTsKIAogCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTVVMVElQTEUgQ1VSU09SUzogIEVt YWNzIEJ1ZyAjMjI4NzMgKGZlYXR1cmUgcmVxdWVzdCkKKworICAgQ1JPU1NIQUlSUzogIEVtYWNz IEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVxdWVzdCkKKworCitQQVRDSCBWRVJTSU9OOiAgMDE0LjAw MCBbMDgvMjgvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDAxIFswOS8wMS8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMDIgWzA5LzAyLzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAw MyBbMDkvMDUvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDA0IFswOS8wOC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMDUgWzA5LzA5LzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAw NiBbMDkvMDkvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDA3IFswOS8xMC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMDggWzA5LzEwLzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAw OSBbMDkvMTEvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDEwIFswOS8xMy8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMTEgWzA5LzE0LzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAx MiBbMDkvMTcvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDEzIFswOS8xOC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMTQgWzA5LzE5LzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAx NSBbMDkvMjMvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDE2IFswOS8yNC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMTcgWzA5LzI1LzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAx OCBbMDkvMjYvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDE5IFsxMC8wMS8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMjAgWzEwLzAyLzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAy MSBbMTAvMDkvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDIyIFsxMC8xMC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNC4wMjMgWzEwLzEwLzIwMThdCisgICAgICAgICAgICAgICAgMDE0LjAy NCBbMTAvMTMvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTQuMDI1IFsxMS8xMC8yMDE4XQorICAg ICAgICAgICAgICAgIDAxNS4wMDAgWzExLzEwLzIwMThdCisgICAgICAgICAgICAgICAgMDE1LjAw MSBbMTEvMTEvMjAxOF0KKyAgICAgICAgICAgICAgICAwMTYuMDAwIFsxMS8yMC8yMDE4XQorCitB cHBseSBwYXRjaCB0byBtYXN0ZXIgYnJhbmNoOiAgU2F0IEp1bCA3IDA5OjU5OjUzIDIwMTggLTA3 MDAKK2dpdCByZXNldCAtLWhhcmQgOTg0NjNiZWQwN2VjYzkwNTcwOTQ5MjhmZmRjMjMyMWVhYWYz YWI1MgorCitMYXN0IENvbW1pdCA6IFNhdCBKdWwgNyAwOTo1OTo1MyAyMDE4IC0wNzAwCisgICAg ICAgICAgICA6IEdsZW5uIE1vcnJpcyA8cmdtQGdudS5vcmc+CisgICAgICAgICAgICA6IDk4NDYz YmVkMDdlY2M5MDU3MDk0OTI4ZmZkYzIzMjFlYWFmM2FiNTIKKyAgICAgICAgICAgIDogKiBsaXNw L2ltZW51LmVsOiBSZXF1aXJlIGNsLWxpYiwgbm90IGludGVybmFsIGNvbXBvbmVudHMgb2Ygc2Ft ZS4KKworCitTRVRVUDoKKworU3RlcCAxOiAgZ2l0IGNsb25lIC1iIG1hc3RlciBnaXQ6Ly9naXQu c3YuZ251Lm9yZy9lbWFjcy5naXQKKworU3RlcCAyOiAgSW4gdGhlIG5ldyBlbWFjcyBmb2xkZXIs IGdvIGJhY2sgdG8gYW4gRW1hY3MgdmVyc2lvbiBmcm9tIDExLzE2LzIwMTg6CisKK2dpdCByZXNl dCAtLWhhcmQgNjQ0YTMwOGI0ZTE1MTNlMDRiZTkzNjBlMTU4NmUxNGIzMmVjMDE1OQorCitTdGVw IDM6ICBGcm9tIHdpdGhpbiB0aGUgbmV3IGVtYWNzIGZvbGRlciBjcmVhdGVkIGluIFN0ZXAgMSwg YXBwbHkgdGhlIHBhdGNoOgorCitnaXQgYXBwbHkgL3BhdGgvdG8vdGhlL2F0dGFjaGVkLmRpZmYK KworW1RoZXJlIHNob3VsZCBub3QgYmUgYW55IGVycm9yIG1lc3NhZ2VzIGF0IHRoaXMgcG9pbnQ7 IGkuZSwgeW91IHNob3VsZCBiZSByZXR1cm5lZCB0byBhIG5ldyBjb21tYW5kIHByb21wdC5dCisK K1N0ZXAgNDogIC4vYXV0b2dlbi5zaAorCitTdGVwIDU6ICAuL2NvbmZpZ3VyZSAuLi4gW3lvdXIg Y3VzdG9tIG9wdGlvbnNdCisKK1N0ZXAgNjogIG1ha2UKKworU3RlcCA3OiAgbWFrZSBpbnN0YWxs CisKKy0gIFRvIHRyeSBvdXQgYnVpbHQtaW4gZmFrZSBjdXJzb3JzIHdpdGggTWFnbmFyIFN2ZWVu J3MgbGlicmFyeSAobXVsdGlwbGUtY3Vyc29ycyksIGluc3RhbGwgdGhhdCBwYWNrYWdlIGZpcnN0 LiAgW0lmIHRoZSBtdWx0aXBsZS1jdXJzb3JzIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCBhbiBldmFs LWFmdGVyLWxvYWQgIm11bHRpcGxlLWN1cnNvcnMtY29yZSIgc3RhdGVtZW50IHdpdGhpbiBjcm9z c2hhaXJzLmVsIHdpbGwgcmVkZWZpbmUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGFuZCBzZXQgdXAg YSBmZXcga2V5Ym9hcmQgc2hvcnRjdXRzLl0gIElmIHRoZSBtdWx0aXBsZS1jdXJzb3JzIHBhY2th Z2UgYnkgTWFnbmFyIFN2ZWVuIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCwgdGhlbiB0aGVyZSBh cmUgdHdvIGVhc3kgd2F5cyB0byBpbnN0YWxsIHRoYXQgcGFja2FnZToKKworICAgVHlwZTogIE0t eCBtYy1pbnN0YWxsCisKKyAgIE9SLCBldmFsdWF0ZSB0aGUgZm9sbG93aW5nIHNuaXBwZXQ6CisK KyAgKHByb2duCisgICAgKHJlcXVpcmUgJ3BhY2thZ2UpCisgICAgKGFkZC10by1saXN0ICdwYWNr YWdlLWFyY2hpdmVzICcoIm1lbHBhIiAuICJodHRwOi8vbWVscGEubWlsa2JveC5uZXQvcGFja2Fn ZXMvIikgdCkKKyAgICAocGFja2FnZS1pbml0aWFsaXplKQorICAgIChwYWNrYWdlLXJlZnJlc2gt Y29udGVudHMpCisgICAgKHBhY2thZ2UtaW5zdGFsbCAnbXVsdGlwbGUtY3Vyc29ycykpCisKKy0g IFRvIHRyeSBvdXQgY3Jvc3NoYWlycyBhbmQgdGhlIHZpc2libGUgZmlsbCBjb2x1bW4sIHR5cGU6 ICBNLXggKy1tb2RlCisKKy0gIFRvIHRyeSBvdXQgb25seSB0aGUgdmlzaWJsZSBmaWxsIGNvbHVt biwgdHlwZTogIE0teCBtYy1maWxsLWNvbHVtbi1tb2RlCisKKy0gIFRvIGxlYXJuIGhvdyB0byB1 c2UgdGhlIG11bHRpcGxlIGZha2UgY3Vyc29ycyBmZWF0dXJlLCBleGFtaW5lIHRoZQorICAgaW50 ZXJhY3RpdmUgZnVuY3Rpb24gYG1jLXRlc3QnLgorCistICBFWEFNUExFIE9GIEhPVyBUTyBVU0Ug TVVMVElQTEUgRkFLRSBDVVJTT1JTOgorCisgIDs7OyAoQlVGRkVSLVBPU0lUSU9OIENVUlNPUi1U WVBFIENVUlNPUi1DT0xPUikKKyAgOzs7CisgIChzZXRxIG11bHRpcGxlLWN1cnNvcnMtY29uZiAn KCgxICJoYmFyIiAibWFnZW50YSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgy ICJiYXIiICJwdXJwbGUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMyAiYm94 IiAiIzAwRkYwMCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0ICJob2xsb3ci ICIjMDAwMEZGIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUgKCJoYmFyIiAz KSBbMS4wIDAuMCAxLjBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiAoImJh ciIgMykgWzAuMCAxLjAgMS4wXSkpKQorCisgIDs7OyBUVVJOIE9GRi4KKyAgOzs7CisgIChzZXRx IG11bHRpcGxlLWN1cnNvcnMtY29uZiBuaWwpCisKKworQ0hBTkdFTE9HOgorCistICBUaGUgYXJl YSBvZiBjb2RlIHRoYXQgcHJldmVudGVkIGNyb3NzaGFpcnMgYW5kIG90aGVyIGZha2UgY3Vyc29y cyBmcm9tCisgICB3b3JraW5nIG9uIE1hY09TIE1vamF2ZSBoYXMgYmVlbiBmaXhlZC4KKworLSAg TmV3IEZlYXR1cmU6ICBUaGlzIGlzIHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBhIHZpc2li bGUgZmlsbCBjb2x1bW4KKyAgIHVzaW5nIGZha2UgY3Vyc29ycywgd2hpY2ggaGFzIHNpbWlsYXIg YWJpbGl0aWVzIHRvIGNyb3NzaGFpcnM7IGUuZy4sCisgICBkcmF3IGZvcnRod2l0aCB3aGVuZXZl ciB0aGUgcmVhbCBjdXJzb3IgZ2V0cyBkcmF3bjsgZHJhdyBvbiBhbiBpZGxlCisgICB0aW1lcjsg ZmlsbCBjb2x1bW4gaW5kaWNhdG9yIGluIGluYWN0aXZlL2FjdGl2ZSB3aW5kb3dzIGhhdmUgZGlm ZmVyZW50CisgICBjb2xvcnM7IHN1cHByZXNzIGRpc3BsYXkgb2YgZmlsbCBjb2x1bW4gaW5kaWNh dG9yIGluIGluYWN0aXZlIHdpbmRvd3MKKyAgIChpZiBzbyBkZXNpcmVkKTsgY29sb3Igb2YgdGhl IGZpbGwgY29sdW1uIGluZGljYXRvciBpbiBhY3RpdmUvaW5hY3RpdmUKKyAgIHdpbmRvd3MgaXMg YSBkaWZmZXJlbnQgY29sb3Igd2hlbiB0aGUgY3Vyc29yIGlzIGxpbmVkIHVwIHdpdGggdGhlIGZp bGwKKyAgIGNvbHVtbiBhbmQgY3Jvc3NoYWlycyBpcyBhY3RpdmUuICBDcm9zc2hhaXJzIGluY29y cG9yYXRlcyB0aGUgZmlsbAorICAgY29sdW1uIGluZGljYXRvciBpZiB0aGUgdmFyaWFibGUgYCst ZmlsbC1jb2x1bW4nIGlzIG5vbi1uaWw7IG9yLCB0aGVyZQorICAgaXMgYSBzZXBhcmF0ZSBtaW5v ci1tb2RlIGNhbGxlZCBgbWMtZmlsbC1jb2x1bW4tbW9kZScgKGlmIHNvIGRlc2lyZWQpLgorCist ICBGbG9hdGluZyBob3Jpem9udGFsIHJ1bGVyIG5vdyBpbmNyZW1lbnRzIGJ5IGdseXBoLT5waXhl bF93aWR0aCBpbnN0ZWFkCisgICBvZiBmcmFtZS1jaGFyLXdpZHRoLiAgW1RoaXMgYXZvaWRzIHZp c2libGUgZ2Fwcy5dCisKKy0gIE11bHRpcGxlIGZha2UgY3Vyc29ycyBjYW4gbm93IGJlIHBsYWNl ZCBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGVuIHRoZXJlCisgICBpcyBubyBgYnVmZmVyLWRpc3Bs YXktdGFibGUnIGVudHJ5IGZvciBhIHZpc2libGUgRU9MIGdseXBoLgorCistICBDcm9zc2hhaXJz IG5vdyB1c2UgdGhlIGxpbmUgaGVpZ2h0IGluc3RlYWQgb2YgdGhlIGdseXBoIGhlaWdodC4gIFtU aGlzCisgICBhdm9pZHMgdmlzaWJsZSBnYXBzIGluIHRoZSB2ZXJ0aWNhbCBydWxlciBvZiBjcm9z c2hhaXJzLl0KKworLSAgVGhlIGJvcmRlciBjb2xvciBmb3IgaW1hZ2VzIHdpdGggYSBmYWtlIGN1 cnNvciBub3cgbWF0Y2ggdGhlIGZha2UKKyAgIGN1cnNvciBjb2xvci4KKworLSAgV2l0aCB0aGUg Z3JhY2lvdXMgYXNzaXN0YW5jZSBvZiBFbGkgWi4sIGEgdGVzdCBub3cgZXhpc3RzIGZvciB0aGUg c2l0dWF0aW9uCisgICB3aGVuIGBkcmF3X2dseXBocycgcmVkcmF3cyBhIHRhYiBzdHJldGNoIGR1 ZSB0byBhIHN1YnNlcXVlbnQgY2hhcmFjdGVyCisgICB3aXRoIGEgbGVmdCBvdmVyaGFuZy4gIEFk ZGl0aW9uYWwgd29yayBuZWVkcyB0byBiZSBkb25lIC4uLiBbaW5mcmFdLgorCistICBPbmx5IGNh bGwgYHVwZGF0ZV9iZWdpbicgLyBgdXBkYXRlX2VuZCcgd2hlbiB0aGUgZnJhbWUgd2FzIG5vdCBh bHJlYWR5CisgICBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkLgorCistICBNaXNjZWxs YW5lb3VzIGJ1ZyBmaXhlcy4KKworCitUT0RPOgorCistICBDcm9zc2hhaXJzIGluIHRoZSBpbmFj dGl2ZSB3aW5kb3dzIGlzIGNhdXNpbmcgY3Vyc29ycyBpbiB0aGUgYWN0aXZlCisgICB3aW5kb3dz IHRvIGJlIGVyYXNlZCAod2hlbiB0aGUgYWN0aXZlIHdpbmRvdyBkcmV3IHByaW9yIHRoZXJldG8p LgorCistICBGYWNlIG9mIHRhYiBzdHJldGNoIGdldHMgZXh0ZW5kZWQgdG8gd2luZG93IGVkZ2Ug b24gTlMsIGJ1dCBub3Qgb24gWDExCisgICBvciBOVCBwbGF0Zm9ybXM6CisgICBodHRwczovL2xp c3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMTgtMTEvbXNnMDAzMTYuaHRt bAorCistICBDb250aW51ZSB3b3JraW5nIG9uIHRoZSBzZWN0aW9uIG9mIGNvZGUgd2l0aGluIGBk cmF3X2dseXBocycgdGhhdCBpcworICAgcmVzcG9uc2libGUgZm9yIHJlZHJhd2luZyBhIHN0cmV0 Y2ggdGFiIChlcmFzaW5nIGEgZmFrZSBjdXJzb3IpIHdoZW4gdGhlIG5leHQKKyAgIGNoYXJhY3Rl ciBoYXMgYSBsZWZ0IG92ZXJoYW5nLiAgIglBIi4gIEEgdGVtcG9yYXJ5IGZpeCBoYXMgYmVlbiBp bnN0aXR1dGVkCisgICB0aGF0IHNpbXBseSBieXBhc3NlcyB0aGUgc2VjdGlvbiBvZiBjb2RlIGF0 IGlzc3VlOyBob3dldmVyLCB0aGUgb3B0aW1hbAorICAgc29sdXRpb24gd2lsbCBiZSB0byBsZXQg YGRyYXdfZ2x5cGhzJyBkbyBpdHMgdGhpbmcgYW5kIHRoZW4gcmVkcmF3IHRoZQorICAgZmFrZSBj dXJzb3JzIGFsb25nIHRoZSBzdHJldGNoIHRhYiBzdWJzZXF1ZW50IHRoZXJldG8uCisKKy0gIE11 bHRpcGxlIEN1cnNvcnM6ICBJZiBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgY29tcG9zaXRl IGNoYXJhY3RlciwgdGhlbgorICAgc2VsZWN0IGEgZnVsbHkgY29tcG9zZWQgY2hhcmFjdGVyIHNv IHRoYXQgdGhlIGZha2UgY3Vyc29yIGlzIHZpc2libGUuCisKKy0gIEZha2UgY3Vyc29ycyBhcmUg YmVpbmcgcmVkcmF3biB0b28gb2Z0ZW4gd2hlbiBub24tc2VsZWN0ZWQgdmlzaWJsZSB3aW5kb3dz CisgICBoYXZlIGFuIG9uZ29pbmcgcHJvY2VzcyB0aGF0IHJlcXVpcmUgZnJlcXVlbnQgcmVkaXNw bGF5IHVwZGF0ZXMgKGUuZy4sCisgICBhbiBlc2hlbGwgYnVmZmVyLiAgQGxhd2xpc3QgbWF5IGhh dmUgYWxyZWFkeSBjb3JyZWN0ZWQgdGhlIGZyZXF1ZW50IHJlZGlzcGxheQorICAgaXNzdWUgYXMg dG8gbW91c2Utb3ZlcnMsIGJ1dCB3aWxsIG5lZWQgdG8gY2hlY2sgdGhpcyBvbmNlIGFnYWluIHRv IGJlIHN1cmUuCisKKy0gIFNldCB1cCBzb21lIHRlc3RzIHRvIHNlZSB3aGF0IChpZiBhbnl0aGlu ZykgbmVlZHMgdG8gYmUgZG9uZSBzbyB0aGF0CisgICB0aGVzZSBmZWF0dXJlcyBwbGF5IG5pY2Vs eSB3aXRoIGNlcnRhaW4gb3ZlcmxheXMgYW5kIHRleHQgcHJvcGVydGllcy4KKworLSAgSW1wbGVt ZW50IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byB0aGUgbXVsdGlwbGUtY3Vyc29ycyBsaWJyYXJ5 IGJ5IE1hZ25hciBTdmVlbi4KKworLSAgQ3JlYXRlIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGl0 ZW1zIHRvIHRlc3Qgd2hlbiBtb2RpZnlpbmcgdGhlc2UgZmVhdHVyZXM7IGFuZCwKKyAgIGFkZCBh IHRlc3QgZmlsZS4KKworLSAgRm9sbG93IHVwIHdpdGggdGhlIEVtYWNzIHRlYW0gcmUgYnVnIzMy MTc3OyBpLmUuLCAoQ3VycmVudCBsaW5lIG51bWJlciBzaGlmdHMKKyAgIG9uZSBjb2x1bW4gdG8g dGhlIGxlZnQuKQorCistICBGb2xsb3cgdXAgd2l0aCB0aGUgRW1hY3MgdGVhbSByZSBidWcjMzIw NjA7IGkuZS4sIChIb3Jpem9udGFsIFNjcm9sbGluZworICAgKEN1cnJlbnQgTGluZSk6ICBXcm9u ZyBsaW5lIGdldHMgaC1zY3JvbGxlZC4pCisKKy0gIERldGVybWluZSBpZiBidWcgIzI4OTM2IG5l ZWRzIHRvIGJlIGZpeGVkIGFuZCBoZWxwIHRoZSBFbWFjcyB0ZWFtIHJlIHNhbWUuCisKKworVEVT VElORzogIFNpdHVhdGlvbnMgdGhhdCBhbHdheXMgbmVlZCB0byBiZSB0ZXN0ZWQgd2hlbiB3b3Jr aW5nIG9uIHRoZXNlIGZlYXR1cmVzLgorCistICBNdWx0aXBsZSBGYWtlIEN1cnNvcnM6ICBMaW5l IGVuZGluZ3MuCisKKy0gIENyb3NzaGFpcnM6ICBMaW5lIGVuZGluZ3MuCisKKy0gIGl0LT5saW5l X3dyYXAgPT0gVFJVTkNBVEUKKworLSAgaXQtPmxpbmVfd3JhcCA9PSBXT1JEX1dSQVAKKworLSAg aXQtPmxpbmVfd3JhcCA9PSBXSU5ET1dfV1JBUAorCistICBIb3Jpem9udGFsIFNjcm9sbGluZyAt LSBUZW1wb3Jhcnk6ICAoc2Nyb2xsLWxlZnQgMSkKKworICAgKHNldHEtbG9jYWwgYXV0by1oc2Ny b2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKKworLSAgSG9yaXpvbnRhbCBTY3JvbGxpbmcgLS0gUGVy bWFuZW50OiAgKHNjcm9sbC1sZWZ0IDEgdCkKKworICAgKHNldHEtbG9jYWwgYXV0by1oc2Nyb2xs LW1vZGUgJ2N1cnJlbnQtbGluZSkKKworLSAgKGZ1bmRhbWVudGFsLW1vZGUpCisgICAoc2V0cSBk aXNwbGF5LWxpbmUtbnVtYmVycyB0KQorICAgKHNldHEgYnVmZmVyLWRpc3BsYXktdGFibGUgKG1h a2UtZGlzcGxheS10YWJsZSkpCisgICAoYXNldCBidWZmZXItZGlzcGxheS10YWJsZQorICAgICAg ICAgP1x0CisgICAgICAgICAodmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCQiAnZm9udC1s b2NrLXdhcm5pbmctZmFjZSkKKyAgICAgICAgICAgICAgICAgKG1ha2UtZ2x5cGgtY29kZSA/XHQg J2hpZ2hsaWdodCkpKQorICAgKGFzZXQgYnVmZmVyLWRpc3BsYXktdGFibGUKKyAgICAgICAgID9c bgorICAgICAgICAgKHZlY3RvciAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJ2ZvbnQtbG9jay1j b21tZW50LWZhY2UpCisgICAgICAgICAgICAgICAgID9cbikpCisgICAoc2V0cSB0YWItd2lkdGgg OCkKKyAgIChzZXRxLWxvY2FsIGF1dG8taHNjcm9sbC1tb2RlICdjdXJyZW50LWxpbmUpCisKKy0g IE5vIExpbmUgTnVtYmVycworCisKK0NSRUFUSU9OIE9GIFJFUE9TSVRPUlk6CisKKyAgbWtkaXIg RElSRUNUT1JZCisKKyAgY2QgRElSRUNUT1JZCisKKyAgZ2l0IGluaXQKKworICBnaXQgcmVtb3Rl IGFkZCBvcmlnaW4gaHR0cHM6Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRfMjI4NzMuZ2l0CisK KyAgIyMjIEhhdmUgYSBsb29rIGF0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICMjIyAg IG9yaWdpbiBodHRwczovL2dpdGh1Yi5jb20vbGF3bGlzdC8xNzY4NF8yMjg3My5naXQgKGZldGNo KQorICAjIyMgICBvcmlnaW4gaHR0cHM6Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRfMjI4NzMu Z2l0IChwdXNoKQorICBnaXQgcmVtb3RlIC12CisKKyAgZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0g aHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXQvZW1hY3MuZ2l0CisKKyAgIyMjIFZlcmlm eSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCisgICMjIyAgIG9yaWdpbiBodHRwczovL2dpdGh1Yi5j b20vbGF3bGlzdC8xNzY4NF8yMjg3My5naXQgKGZldGNoKQorICAjIyMgICBvcmlnaW4gaHR0cHM6 Ly9naXRodWIuY29tL2xhd2xpc3QvMTc2ODRfMjI4NzMuZ2l0IChwdXNoKQorICAjIyMgICB1cHN0 cmVhbSBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdC9lbWFjcy5naXQgKGZldGNoKQor ICAjIyMgICB1cHN0cmVhbSBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdC9lbWFjcy5n aXQgKHB1c2gpCisgIGdpdCByZW1vdGUgLXYKKworICBnaXQgZmV0Y2ggdXBzdHJlYW0KKworICAj IyMgQ3JlYXRlIGEgbmV3IGJyYW5jaCBgMTc2ODRfMjI4NzNgIHNvIHlvdSBkb24ndCBoYXZlIHRv IG92ZXJyaWRlIHRoZSB1cHN0cmVhbSBgbWFzdGVyYC4KKyAgZ2l0IGNoZWNrb3V0IC1iIDE3Njg0 XzIyODczIDk4NDYzYmVkMDdlY2M5MDU3MDk0OTI4ZmZkYzIzMjFlYWFmM2FiNTIKKworICAjIyMg Q3JlYXRlIHRoZSBvbmxpbmUgR2l0aHViIHJlcG9zaXRvcnkgaWYgbm90IGFscmVhZHkgaW4gZXhp c3RlbmNlLgorICBjdXJsIC11IFVTRVJOQU1FOlBBU1NXT1JEIGh0dHBzOi8vYXBpLmdpdGh1Yi5j b20vdXNlci9yZXBvcyAtZCAneyJuYW1lIjoiMTc2ODRfMjI4NzMuZ2l0In0nCisKKyAgZ2l0IHB1 c2ggLXUgb3JpZ2luIDE3Njg0XzIyODczCisKKyAgIyMjIEFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0 Y2g6ICAwMTQuMDAwIFswOC8yOC8yMDE4XQorICAjIyMgYWRkL2NvbW1pdC9wdXNoCisKKyAgIyMj IEFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0Y2g6ICAwMTQuMDAxIFswOS8wMS8yMDE4XQorICAjIyMg YWRkL2NvbW1pdC9wdXNoCisKKyAgIyMjIEFwcGx5IHRoZSBmb2xsb3dpbmcgcGF0Y2g6ICAwMTQu MDAyIFswOS8wMi8yMDE4XQorICAjIyMgYWRkL2NvbW1pdC9wdXNoCisKKworVVBEQVRFIFRIRSBS RVBPU0lUT1JZOgorCisgIGdpdCBhcHBseSAvcGF0aC90by90aGUvZW1hY3MvcGF0Y2guZGlmZgor ICBnaXQgYWRkIC4KKyAgZ2l0IGNvbW1pdCAtbSAiSU5TRVJUIENPTU1JVCBNRVNTQUdFLiIKKyAg Z2l0IHB1c2ggLXUgb3JpZ2luIDE3Njg0XzIyODczCisKK0NSRUFURSBQQVRDSEVTOiAgZ2l0IGZv cm1hdC1wYXRjaCAtMSBTSEEKKyAgICAgICAgICAgICAgICAgZ2l0IGZvcm1hdC1wYXRjaCAtMSAt byAvcGF0aC90by9vdXRwdXQvZGlyZWN0b3J5IFNIQQorCitMRUdFTkQ6CisKK21ha2VfbnVtYmVy ID0+IG1ha2VfZml4bnVtCisKK1hJTlQgPT4gWEZJWE5VTQorCitSQU5HRURfSU5URUdFUlAgPT4g UkFOR0VEX0ZJWE5VTVAKKworVFlQRV9SQU5HRURfSU5URUdFUlAgPT4gVFlQRV9SQU5HRURfRklY TlVNUAorCitYRkFTVElOVCA9PiBYRklYTkFUCisKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAo dHJhY2VfcmVkaXNwbGF5X3AgJiYgQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAmJiAoIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkK KyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hh aXJzKSkKKyAgICAgICAgICB8fCAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBt Y19maWxsX2NvbHVtbikpKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7CisgICAg ICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmlu ZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3df Y2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJc bndpbmRvdyAoJXMpXG4iLCB3aW5kb3dfY2hhcik7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBH TFlQSF9ERUJVRworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgaW50 IHRlbXBfZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB3LT5waHlzX2N1cnNv ci54KTsKKyAgaW50IHRlbXBfZnkgPSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgdy0+cGh5 c19jdXJzb3IueSk7CisgIGVudW0gd2luZG93X3BhcnQgcGFydCA9IE9OX05PVEhJTkc7CisgIExp c3BfT2JqZWN0IHdpbmRvdyA9IHdpbmRvd19mcm9tX2Nvb3JkaW5hdGVzIChmLCB0ZW1wX2Z4LCB0 ZW1wX2Z5LCAmcGFydCwgZmFsc2UpOworICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnBy aW4xX3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIndp bmRvdyAoJXMpIiwgU1NEQVRBICh3aW5kb3dfc3RyaW5nKSk7CisjZW5kaWYKKworY2hhciAqd19j b250ZW50cyA9IChCVUZGRVJQICh3LT5jb250ZW50cykgJiYgU1RSSU5HUCAoQlZBUiAoWEJVRkZF UiAody0+Y29udGVudHMpLCBuYW1lKSkpCisgICAgICAgICAgICAgICAgICAgPyBTU0RBVEEgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgOiAi bmlsIjsKK2ZwcmludGYgKHN0ZGVyciwgIlxuQnVmZmVyICglcylcbiIsIHdfY29udGVudHMpOwor CitzdHJ1Y3QgZmFjZSAqZmFjZSA9IG1jX2xvb2t1cF9mYWNlIChpdCk7CitMaXNwX09iamVjdCBm b3JlZ3JvdW5kID0gZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CitMaXNwX09i amVjdCBiYWNrZ3JvdW5kID0gZmFjZS0+bGZhY2VbTEZBQ0VfQkFDS0dST1VORF9JTkRFWF07Citm cHJpbnRmIChzdGRlcnIsICJcbmZvcmVncm91bmQgKCVzKSB8IGJhY2tncm91bmQgKCVzKVxuIiwK KyAgICAgICAgICAgICAgICAgKCFOSUxQIChmb3JlZ3JvdW5kKSA/IFNTREFUQSAoZm9yZWdyb3Vu ZCkgOiAiTklMUCIpLAorICAgICAgICAgICAgICAgICAoIU5JTFAgKGJhY2tncm91bmQpID8gU1NE QVRBIChiYWNrZ3JvdW5kKSA6ICJOSUxQIikpOworCitmcHJpbnRmIChzdGRlcnIsICJNeSBsaXNw IG9iamVjdDogICVzXG4iLCBTU0RBVEEgKEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhudW0gKDEw MSkpKSk7CisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVkXG4iLCBTU0RB VEEgKGJ1aWxkX3N0cmluZyAoImZvbyIpKSwgNjkpOworCitpZiAoQlVGRkVSUCAody0+Y29udGVu dHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQorICBm cHJpbnRmIChzdGRlcnIsICJuc191cGRhdGVfd2luZG93X2VuZDogICVzXG4iLCBTU0RBVEEgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKTsKKworQVVUT19TVFJJTkcgKG15X3N0 cmluZ19vbmUsICJUaGlzIGlzIHRoZSB2YWx1ZSBvZiBgbXlfb2JqZWN0X29uZSc6ICAlcyIpOwor TGlzcF9PYmplY3QgbXlfb2JqZWN0X29uZSA9IG1ha2VfZmxvYXQgKDAuMSk7CitDQUxMTiAoRm1l c3NhZ2UsIG15X3N0cmluZ19vbmUsIG15X29iamVjdF9vbmUpOworCitBVVRPX1NUUklORyAobXlf c3RyaW5nX3R3bywgIlRoaXMgaXMgdGhlIHZhbHVlIG9mIGBteV9vYmplY3RfdHdvJzogICVzIik7 CitMaXNwX09iamVjdCBteV9vYmplY3RfdHdvID0gbWFrZV9maXhudW0gKDc3Nyk7CitDQUxMTiAo Rm1lc3NhZ2UsIG15X3N0cmluZ190d28sIG15X29iamVjdF90d28pOworCitXSU5ET1c6ICB3LT5j b250ZW50cworCitCVUZGRVI6ICBYQlVGRkVSICh3LT5jb250ZW50cykKKworQlVGRkVSIExPQ0FM IFZBUklBQkxFOiAgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCB2YXJpYWJsZV9uYW1lKQor CitOTyBOQVJST1dJTkc6CisKK0JFRyA9PSBCZWdpbm5pbmcgb2YgQnVmZmVyICh3aW5kb3cgZGlz cGxheXMgY3VycmVudCBidWZmZXIpCisKK1pWID09IEVuZCBvZiBCdWZmZXIgKHdpbmRvdyBkaXNw bGF5cyBjdXJyZW50IGJ1ZmZlcikKKworQkVHX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUgb2YgQnVm ZmVyCisKK1pfQllURSA9PSBFbmRpbmcgQnl0ZSBvZiBCdWZmZXIKKworTkFSUk9XRUQgLS0gIlYi OgorCitCRUdWID09IEJlZ2lubmluZyBvZiBOQVJST1dFRCBCdWZmZXIgKHdpbmRvdyBkaXNwbGF5 cyBjdXJyZW50IGJ1ZmZlcikKKworWlYgPT0gRW5kIG9mIE5BUlJPV0VEIEJ1ZmZlciAod2luZG93 IGRpc3BsYXlzIGN1cnJlbnQgYnVmZmVyKQorCitCRUdWX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUg b2YgTkFSUk9XRUQgQnVmZmVyCisKK1pWX0JZVEUgPT0gRW5kaW5nIEJ5dGUgb2YgTkFSUk9XRUQg YnVmZmVyCisKK1dJTkRPVyBET0VTIE5PVCBORUNFU1NBUklMWSBESVNQTEFZIEJVRkZFUjoKKwor Ym9iX2Rpc3JlZ2FyZF9uYXJyb3cgPSBCVUZfQkVHIChidWZmZXIpCitlb2JfZGlzcmVnYXJkX25h cnJvdyA9IEJVRl9aIChidWZmZXIpCisKK2JvYl9yZXNwZWN0X25hcnJvdyA9IEJVRl9CRUdWIChi dWZmZXIpCitlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKGJ1ZmZlcikKKword2luZG93X3N0 YXJ0ID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCkKK3dpbmRvd19lbmQgPSBlb2JfZGlzcmVn YXJkX25hcnJvdyAtIHctPndpbmRvd19lbmRfcG9zCisKK2J1ZmZlcl9zaXplID0gZW9iX2Rpc3Jl Z2FyZF9uYXJyb3cgLSBib2JfZGlzcmVnYXJkX25hcnJvdworCitidWZmZXJfbmFycm93ZWRfcCA9 IChlb2JfcmVzcGVjdF9uYXJyb3cgLSBib2JfcmVzcGVjdF9uYXJyb3cgIT0gYnVmZmVyX3NpemUp CisKK3dpbmRvd19jb250ZW50c192aXNpYmxlX3AgPSAoYm9iX3Jlc3BlY3RfbmFycm93ID09IHdp bmRvd19zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlb2JfcmVzcGVjdF9u YXJyb3cgPT0gd2luZG93X2VuZCkKKworVGhpcyBpcyB0aGUgQyBbdGVybmFyeSBvcGVyYXRvcl1b MV0gKE9iamVjdGl2ZS1DIGlzIGEgc3VwZXJzZXQgb2YgQyk6CisKKyAgICBsYWJlbC5mcmFtZSA9 IChpblBzZXVkb0VkaXRNb2RlKSA/IGtMYWJlbEluZGVudGVkUmVjdCA6IGtMYWJlbFJlY3Q7CisK K2lzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvCisKKyAgICBpZihpblBzZXVkb0VkaXRNb2Rl KSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsSW5kZW50ZWRSZWN0OworICAgIH0gZWxzZSB7 CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsUmVjdDsKKyAgICB9CisKK1RoZSB0ZXJuYXJ5IHdp dGggbm8gZmlyc3QgZWxlbWVudCAoZS5nLiBgdmFyaWFibGUgPzogYW5vdGhlclZhcmlhYmxlYCkg bWVhbnMgdGhlIHNhbWUgYXMgYCh2YWxPclZhciAhPSAwKSA/IHZhbE9yVmFyIDogYW5vdGhlclZh bE9yVmFyYAorCitFQVNTRVJUOgorCisgIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9IGNoYXJwb3Mg JiYgY2hhcnBvcyA8PSBCVUZfWiAoYikpOworICBib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAo YikgPD0gY2hhcnBvcyAmJiBjaGFycG9zIDw9IEJVRl9aIChiKSkgPyBmYWxzZSA6IHRydWU7ICov CisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZnRvYXN0ci5oPgorCisjZGVmaW5lIE5P X0ZSSU5HRV9CSVRNQVAgMAorCisjZGVmaW5lIExFRlRfRlJJTkdFX0JJVE1BUCAtMworCisjZGVm aW5lIFJJR0hUX0ZSSU5HRV9CSVRNQVAgLTQKKworLyogVGV4dCBjdXJzb3IgdHlwZXMuICAqLwor CitlbnVtIHR5cGVfb2ZfYWN0aW9uCit7CisgIE1VTFRJUExFX0NVUlNPUlMsCisgIEhPUklaT05U QUxfUlVMRVIsCisgIFZFUlRJQ0FMX1JVTEVSLAorICBGSUxMX0NPTFVNTgorfTsKKworLyogRnVu Y3Rpb24gcHJvdG90eXBlcy4gICovCisKK3N0YXRpYyB2b2lkIGRlYnVnX21ldGhvZF9hZGQgKHN0 cnVjdCB3aW5kb3cgKiwgY2hhciBjb25zdCAqLCAuLi4pOworCitzdGF0aWMgaW50IHdpbmRvd19o c2Nyb2xsX2xpbWl0ZWQgKHN0cnVjdCB3aW5kb3cgKiwgc3RydWN0IGZyYW1lICopOworCisvKiBS ZWNvcmQgRlJPTV9XSEVSRSB3aGVuIGByZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVhJyBpcyBj YWxsZWQuICovCitzdGF0aWMgaW50IG1jX3JlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWE7CisK Ky8qIFJlY29yZCBGUk9NX1dIRVJFIHdoZW4gYHJlZGlzcGxheScgaXMgY2FsbGVkLiAqLworc3Rh dGljIGludCBtY19yZWRpc3BsYXk7CisKKy8qIFJlY29yZCBGUk9NX1dIRVJFIHdoZW4gYHJlZGlz cGxheV9pbnRlcm5hbCcgaXMgY2FsbGVkLiAqLworc3RhdGljIGludCBtY19yZWRpc3BsYXlfaW50 ZXJuYWw7CisKKy8qIFVzZWQgZm9yIGRlYnVnZ2luZy4gKi8KK3N0YXRpYyBib29sIG1jX2RlYnVn X3A7CisKKy8qIFNldCB2YXJpYWJsZXMgV0lEVEggYW5kIEJZVEVTIGZvciBhIG11bHRpYnl0ZSBz ZXF1ZW5jZSBzdGFydGluZyBhdCBQLgorICAgRFAgaXMgYSBkaXNwbGF5IHRhYmxlIG9yIE5VTEwu ICovCisKKyNkZWZpbmUgTUNfTVVMVElCWVRFX0JZVEVTX1dJRFRIKHAsIGRwLCBieXRlcywgd2lk dGgpCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIGludCBjaDsJCQkJCQkJCVwKKwkJCQkJCQkJ CQlcCisgICAgY2ggPSBTVFJJTkdfQ0hBUl9BTkRfTEVOR1RIIChwLCBieXRlcyk7CQkJCVwKKyAg ICBpZiAoQllURVNfQllfQ0hBUl9IRUFEICgqcCkgIT0gYnl0ZXMpCQkJCVwKKyAgICAgIHdpZHRo ID0gYnl0ZXMgKiA0OwkJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJ XAorCWlmIChkcCAhPSAwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1IgKGRwLCBjaCkpKQkJ XAorCSAgd2lkdGggPSBzYW5pdGl6ZV9jaGFyX3dpZHRoIChBU0laRSAoRElTUF9DSEFSX1ZFQ1RP UiAoZHAsIGNoKSkpOyBcCisJZWxzZQkJCQkJCQkJXAorCSAgd2lkdGggPSBDSEFSQUNURVJfV0lE VEggKGNoKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIENo ZWNrIHRoZSBwcmVzZW5jZSBvZiBhIGRpc3BsYXkgcHJvcGVydHkgYW5kIGNvbXB1dGUgaXRzIHdp ZHRoLgorICAgSWYgYSBwcm9wZXJ0eSB3YXMgZm91bmQgYW5kIGl0cyB3aWR0aCB3YXMgZm91bmQg YXMgd2VsbCwgcmV0dXJuCisgICBpdHMgd2lkdGggKD49IDApIGFuZCBzZXQgdGhlIHBvc2l0aW9u IG9mIHRoZSBlbmQgb2YgdGhlIHByb3BlcnR5CisgICBpbiBFTkRQT1MuCisgICBPdGhlcndpc2Ug anVzdCByZXR1cm4gLTEuICAqLworc3RhdGljIGludAorbWNfY2hlY2tfZGlzcGxheV93aWR0aCAo cHRyZGlmZl90IHBvcywgcHRyZGlmZl90IGNvbCwgcHRyZGlmZl90ICplbmRwb3MpCit7CisgIExp c3BfT2JqZWN0IHZhbCwgb3ZlcmxheTsKKyAgaWYgKENPTlNQICh2YWwgPSBnZXRfY2hhcl9wcm9w ZXJ0eV9hbmRfb3ZlcmxheQorICAgICAgIChtYWtlX2ZpeG51bSAocG9zKSwgUWRpc3BsYXksIFFu aWwsICZvdmVybGF5KSkKKyAgICAgICYmIEVRIChRc3BhY2UsIFhDQVIgKHZhbCkpKQorICAgIHsg LyogRklYTUU6IFVzZSBjYWxjX3BpeGVsX3dpZHRoX29yX2hlaWdodC4gICovCisgICAgICBMaXNw X09iamVjdCBwbGlzdCA9IFhDRFIgKHZhbCksIHByb3A7CisgICAgICBpbnQgd2lkdGggPSAtMTsK KyAgICAgIEVNQUNTX0lOVCBhbGlnbl90b19tYXggPQorICAoY29sIDwgTU9TVF9QT1NJVElWRV9G SVhOVU0gLSBJTlRfTUFYCisgICA/IChFTUFDU19JTlQpIElOVF9NQVggKyBjb2wKKyAgIDogTU9T VF9QT1NJVElWRV9GSVhOVU0pOworICAgICAgaWYgKChwcm9wID0gRnBsaXN0X2dldCAocGxpc3Qs IFFDd2lkdGgpLAorICAgICBSQU5HRURfRklYTlVNUCAoMCwgcHJvcCwgSU5UX01BWCkpCisgICAg fHwgKHByb3AgPSBGcGxpc3RfZ2V0IChwbGlzdCwgUUNyZWxhdGl2ZV93aWR0aCksCisgICAgICAg IFJBTkdFRF9GSVhOVU1QICgwLCBwcm9wLCBJTlRfTUFYKSkpCisgIHdpZHRoID0gWEZJWE5VTSAo cHJvcCk7CisgICAgICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIDAgPD0gWEZMT0FUX0RBVEEg KHByb3ApCisgICAgICAgICAmJiBYRkxPQVRfREFUQSAocHJvcCkgPD0gSU5UX01BWCkKKyAgd2lk dGggPSAoaW50KShYRkxPQVRfREFUQSAocHJvcCkgKyAwLjUpOworICAgICAgZWxzZSBpZiAoKHBy b3AgPSBGcGxpc3RfZ2V0IChwbGlzdCwgUUNhbGlnbl90byksCisgICAgUkFOR0VEX0ZJWE5VTVAg KGNvbCwgcHJvcCwgYWxpZ25fdG9fbWF4KSkpCisgIHdpZHRoID0gWEZJWE5VTSAocHJvcCkgLSBj b2w7CisgICAgICBlbHNlIGlmIChGTE9BVFAgKHByb3ApICYmIGNvbCA8PSBYRkxPQVRfREFUQSAo cHJvcCkKKyAgICAgICAgICYmIChYRkxPQVRfREFUQSAocHJvcCkgPD0gYWxpZ25fdG9fbWF4KSkK KyAgd2lkdGggPSAoaW50KShYRkxPQVRfREFUQSAocHJvcCkgKyAwLjUpIC0gY29sOworICAgICAg aWYgKHdpZHRoID49IDApCisgIHsKKyAgICBwdHJkaWZmX3Qgc3RhcnQ7CisgICAgaWYgKE9WRVJM QVlQIChvdmVybGF5KSkKKyAgICAgICplbmRwb3MgPSBPVkVSTEFZX1BPU0lUSU9OIChPVkVSTEFZ X0VORCAob3ZlcmxheSkpOworICAgIGVsc2UKKyAgICAgIGdldF9wcm9wZXJ0eV9hbmRfcmFuZ2Ug KHBvcywgUWRpc3BsYXksICZ2YWwsICZzdGFydCwgZW5kcG9zLCBRbmlsKTsKKyAgICAvKiBGb3Ig OnJlbGF0aXZlLXdpZHRoLCB3ZSBuZWVkIHRvIG11bHRpcGx5IGJ5IHRoZSBjb2x1bW4KKyAgICAg ICB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIGF0IFBPUywgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEu ICAqLworICAgIGlmICghTklMUCAoRnBsaXN0X2dldCAocGxpc3QsIFFDcmVsYXRpdmVfd2lkdGgp KQorICAgICAgICAmJiAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5 dGVfY2hhcmFjdGVycykpKQorICAgICAgeworICAgICAgICBpbnQgYiwgd2Q7CisgICAgICAgIHVu c2lnbmVkIGNoYXIgKnAgPSBCWVRFX1BPU19BRERSIChDSEFSX1RPX0JZVEUgKHBvcykpOworICAg ICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHAsIGJ1ZmZlcl9kaXNwbGF5X3RhYmxlICgp LCBiLCB3ZCk7CisgICAgICAgIHdpZHRoICo9IHdkOworICAgICAgfQorICAgIHJldHVybiB3aWR0 aDsKKyAgfQorICAgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKiBTY2FubmluZyBmcm9tIHRoZSBi ZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgYnVmZmVyCisgICBwb3Np dGlvbiBFTkRQT1Mgb3IgYXQgdGhlIGNvbHVtbiBHT0FMQ09MIG9yIGF0IHRoZSBlbmQgb2YgbGlu ZSwgd2hpY2hldmVyCisgICBjb21lcyBmaXJzdC4KKyAgIFJldHVybiB0aGUgcmVzdWx0aW5nIGJ1 ZmZlciBwb3NpdGlvbiBhbmQgY29sdW1uIGluIEVORFBPUyBhbmQgR09BTENPTC4KKyAgIFBSRVZD T0wgZ2V0cyBzZXQgdG8gdGhlIGNvbHVtbiBvZiB0aGUgcHJldmlvdXMgcG9zaXRpb24gKGl0J3Mg YWx3YXlzCisgICBzdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGdvYWwgY29sdW1uKS4gICovCit2 b2lkCittY19zY2FuX2Zvcl9jb2x1bW4gKHB0cmRpZmZfdCAqZW5kcG9zLCBFTUFDU19JTlQgKmdv YWxjb2wsIHB0cmRpZmZfdCAqcHJldmNvbCwgcHRyZGlmZl90IHB0KQoreworICBFTUFDU19JTlQg bGFzdF9rbm93bl9jb2x1bW5fbW9kaWZpZWQgPSAwOworICBwdHJkaWZmX3QgbGFzdF9rbm93bl9j b2x1bW4gPSAwOworICBpbnQgdGFiX3dpZHRoID0gU0FORV9UQUJfV0lEVEggKGN1cnJlbnRfYnVm ZmVyKTsKKyAgYm9vbCBjdGxfYXJyb3cgPSAhTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGN0 bF9hcnJvdykpOworICBzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICpkcCA9IGJ1ZmZlcl9kaXNwbGF5 X3RhYmxlICgpOworICBib29sIG11bHRpYnl0ZSA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZl ciwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSk7CisgIHN0cnVjdCBjb21wb3NpdGlvbl9p dCBjbXBfaXQ7CisgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgc3RydWN0IHdpbmRvdyAqdzsKKyAg LyogU3RhcnQgdGhlIHNjYW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGxpbmUgd2l0aCBjb2x1 bW4gbnVtYmVyIDAuICAqLworICByZWdpc3RlciBwdHJkaWZmX3QgY29sID0gMCwgcHJldl9jb2wg PSAwOworICBFTUFDU19JTlQgZ29hbCA9IGdvYWxjb2wgPyAqZ29hbGNvbCA6IE1PU1RfUE9TSVRJ VkVfRklYTlVNOworICBwdHJkaWZmX3QgZW5kID0gZW5kcG9zID8gKmVuZHBvcyA6IHB0OworICBw dHJkaWZmX3Qgc2Nhbiwgc2Nhbl9ieXRlLCBuZXh0X2JvdW5kYXJ5OworICBzY2FuID0gZmluZF9u ZXdsaW5lIChwdCwgQ0hBUl9UT19CWVRFIChwdCksIEJFR1YsIEJFR1ZfQllURSwgLTEsIE5VTEws ICZzY2FuX2J5dGUsIDEpOworICBuZXh0X2JvdW5kYXJ5ID0gc2NhbjsKKyAgd2luZG93ID0gRmdl dF9idWZmZXJfd2luZG93IChGY3VycmVudF9idWZmZXIgKCksIFFuaWwpOworICB3ID0gISBOSUxQ ICh3aW5kb3cpID8gWFdJTkRPVyAod2luZG93KSA6IE5VTEw7CisgIG1lbXNldCAoJmNtcF9pdCwg MCwgc2l6ZW9mIGNtcF9pdCk7CisgIGNtcF9pdC5pZCA9IC0xOworICBjb21wb3NpdGlvbl9jb21w dXRlX3N0b3BfcG9zICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIGVuZCwgUW5pbCk7CisgIC8q IFNjYW4gZm9yd2FyZCB0byB0aGUgdGFyZ2V0IHBvc2l0aW9uLiAgKi8KKyAgd2hpbGUgKHNjYW4g PCBlbmQpCisgICAgeworICAgICAgaW50IGM7CisgICAgICAvKiBPY2Nhc2lvbmFsbHkgd2UgbWF5 IG5lZWQgdG8gc2tpcCBpbnZpc2libGUgdGV4dC4gICovCisgICAgICB3aGlsZSAoc2NhbiA9PSBu ZXh0X2JvdW5kYXJ5KQorICB7CisgICAgcHRyZGlmZl90IG9sZF9zY2FuID0gc2NhbjsKKyAgICAv KiBUaGlzIHVwZGF0ZXMgTkVYVF9CT1VOREFSWSB0byB0aGUgbmV4dCBwbGFjZQorICAgICAgIHdo ZXJlIHdlIG1pZ2h0IG5lZWQgdG8gc2tpcCBtb3JlIGludmlzaWJsZSB0ZXh0LiAgKi8KKyAgICBz Y2FuID0gc2tpcF9pbnZpc2libGUgKHNjYW4sICZuZXh0X2JvdW5kYXJ5LCBlbmQsIFFuaWwpOwor ICAgIGlmIChzY2FuICE9IG9sZF9zY2FuKQorICAgICAgc2Nhbl9ieXRlID0gQ0hBUl9UT19CWVRF IChzY2FuKTsKKyAgICBpZiAoc2NhbiA+PSBlbmQpCisgICAgICBnb3RvIGVuZGxvb3A7CisgIH0K KyAgICAgIC8qIFRlc3QgcmVhY2hpbmcgdGhlIGdvYWwgY29sdW1uLiAgV2UgZG8gdGhpcyBhZnRl ciBza2lwcGluZworICAgaW52aXNpYmxlIGNoYXJhY3RlcnMsIHNvIHRoYXQgd2UgcHV0IHBvaW50 IGJlZm9yZSB0aGUKKyAgIGNoYXJhY3RlciBvbiB3aGljaCB0aGUgY3Vyc29yIHdpbGwgYXBwZWFy LiAgKi8KKyAgICAgIGlmIChjb2wgPj0gZ29hbCkKKyAgYnJlYWs7CisgICAgICBwcmV2X2NvbCA9 IGNvbDsKKyAgICAgIHsgLyogQ2hlY2sgZGlzcGxheSBwcm9wZXJ0eS4gICovCisgIHB0cmRpZmZf dCBlbmRwOworICBpbnQgd2lkdGggPSBtY19jaGVja19kaXNwbGF5X3dpZHRoIChzY2FuLCBjb2ws ICZlbmRwKTsKKyAgaWYgKHdpZHRoID49IDApCisgICAgeworICAgICAgY29sICs9IHdpZHRoOwor ICAgICAgaWYgKGVuZHAgPiBzY2FuKSAvKiBBdm9pZCBpbmZpbml0ZSBsb29wcyB3aXRoIDAtd2lk dGggb3ZlcmxheXMuICAqLworICAgICAgICB7CisgICAgc2NhbiA9IGVuZHA7CisgICAgc2Nhbl9i eXRlID0gQ0hBUl9UT19CWVRFIChzY2FuKTsKKyAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg IH0KKyAgICAgIH0KKyAgICAgIC8qIENoZWNrIGNvbXBvc2l0aW9uIHNlcXVlbmNlLiAgKi8KKyAg ICAgIGlmIChjbXBfaXQuaWQgPj0gMAorICAgIHx8IChzY2FuID09IGNtcF9pdC5zdG9wX3Bvcwor ICAgICAgICAmJiBjb21wb3NpdGlvbl9yZXNlYXRfaXQgKCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0 ZSwgZW5kLAorICAgICAgICAgIHcsIE5VTEwsIFFuaWwpKSkKKyAgY29tcG9zaXRpb25fdXBkYXRl X2l0ICgmY21wX2l0LCBzY2FuLCBzY2FuX2J5dGUsIFFuaWwpOworICAgICAgaWYgKGNtcF9pdC5p ZCA+PSAwKQorICB7CisgICAgc2NhbiArPSBjbXBfaXQubmNoYXJzOworICAgIHNjYW5fYnl0ZSAr PSBjbXBfaXQubmJ5dGVzOworICAgIGlmIChzY2FuIDw9IGVuZCkKKyAgICAgIGNvbCArPSBjbXBf aXQud2lkdGg7CisgICAgaWYgKGNtcF9pdC50byA9PSBjbXBfaXQubmdseXBocykKKyAgICAgIHsK KyAgICAgICAgY21wX2l0LmlkID0gLTE7CisgICAgICAgIGNvbXBvc2l0aW9uX2NvbXB1dGVfc3Rv cF9wb3MgKCZjbXBfaXQsIHNjYW4sIHNjYW5fYnl0ZSwgZW5kLAorICAgICAgICAgICAgICBRbmls KTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBjbXBfaXQuZnJvbSA9IGNtcF9pdC50bzsKKyAg ICBjb250aW51ZTsKKyAgfQorICAgICAgYyA9IEZFVENIX0JZVEUgKHNjYW5fYnl0ZSk7CisgICAg ICAvKiBTZWUgaWYgdGhlcmUgaXMgYSBkaXNwbGF5IHRhYmxlIGFuZCBpdCByZWxhdGVzCisgICB0 byB0aGlzIGNoYXJhY3Rlci4gICovCisgICAgICBpZiAoZHAgIT0gMAorICAgICYmICEgKG11bHRp Ynl0ZSAmJiBMRUFESU5HX0NPREVfUCAoYykpCisgICAgJiYgVkVDVE9SUCAoRElTUF9DSEFSX1ZF Q1RPUiAoZHAsIGMpKSkKKyAgeworICAgIExpc3BfT2JqZWN0IGNoYXJ2ZWM7CisgICAgcHRyZGlm Zl90IGksIG47CisgICAgLyogVGhpcyBjaGFyYWN0ZXIgaXMgZGlzcGxheWVkIHVzaW5nIGEgdmVj dG9yIG9mIGdseXBocy4KKyAgICAgICBVcGRhdGUgdGhlIGNvbHVtbi9wb3NpdGlvbiBiYXNlZCBv biB0aG9zZSBnbHlwaHMuICAqLworICAgIGNoYXJ2ZWMgPSBESVNQX0NIQVJfVkVDVE9SIChkcCwg Yyk7CisgICAgbiA9IEFTSVpFIChjaGFydmVjKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KQorICAgICAgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIHRoZSBzYW1lIGFz CisgICAgIG5leHRfZWxlbWVudF9mcm9tX2Rpc3BsYXlfdmVjdG9yIGRvZXMgaXQuICAqLworICAg ICAgICBMaXNwX09iamVjdCBlbnRyeSA9IEFSRUYgKGNoYXJ2ZWMsIGkpOworICAgICAgICBpZiAo R0xZUEhfQ09ERV9QIChlbnRyeSkpCisgICAgYyA9IEdMWVBIX0NPREVfQ0hBUiAoZW50cnkpOwor ICAgICAgICBlbHNlCisgICAgYyA9ICcgJzsKKyAgICAgICAgaWYgKGMgPT0gJ1xuJykKKyAgICBn b3RvIGVuZGxvb3A7CisgICAgICAgIGlmIChjID09ICdccicgJiYgRVEgKEJWQVIgKGN1cnJlbnRf YnVmZmVyLCBzZWxlY3RpdmVfZGlzcGxheSksIFF0KSkKKyAgICBnb3RvIGVuZGxvb3A7CisgICAg ICAgIGlmIChjID09ICdcdCcpCisgICAgeworICAgICAgY29sICs9IHRhYl93aWR0aDsKKyAgICAg IGNvbCA9IGNvbCAvIHRhYl93aWR0aCAqIHRhYl93aWR0aDsKKyAgICB9CisgICAgICAgIGVsc2UK KyAgICArK2NvbDsKKyAgICAgIH0KKyAgfQorICAgICAgZWxzZQorICB7CisgICAgLyogVGhlIGRp c3BsYXkgdGFibGUgZG9lc24ndCBhZmZlY3QgdGhpcyBjaGFyYWN0ZXI7CisgICAgICAgaXQgZGlz cGxheXMgYXMgaXRzZWxmLiAgKi8KKyAgICBpZiAoYyA9PSAnXG4nKQorICAgICAgZ290byBlbmRs b29wOworICAgIGlmIChjID09ICdccicgJiYgRVEgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBzZWxl Y3RpdmVfZGlzcGxheSksIFF0KSkKKyAgICAgIGdvdG8gZW5kbG9vcDsKKyAgICBpZiAoYyA9PSAn XHQnKQorICAgICAgeworICAgICAgICBjb2wgKz0gdGFiX3dpZHRoOworICAgICAgICBjb2wgPSBj b2wgLyB0YWJfd2lkdGggKiB0YWJfd2lkdGg7CisgICAgICB9CisgICAgZWxzZSBpZiAobXVsdGli eXRlICYmIExFQURJTkdfQ09ERV9QIChjKSkKKyAgICAgIHsKKyAgICAgICAgLyogU3RhcnQgb2Yg bXVsdGktYnl0ZSBmb3JtLiAgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAqcHRyOworICAgICAg ICBpbnQgYnl0ZXMsIHdpZHRoOworICAgICAgICBwdHIgPSBCWVRFX1BPU19BRERSIChzY2FuX2J5 dGUpOworICAgICAgICBNQ19NVUxUSUJZVEVfQllURVNfV0lEVEggKHB0ciwgZHAsIGJ5dGVzLCB3 aWR0aCk7CisgICAgICAgIC8qIFN1YnRyYWN0IG9uZSB0byBjb21wZW5zYXRlIGZvciB0aGUgaW5j cmVtZW50CisgICAgIHRoYXQgaXMgZ29pbmcgdG8gaGFwcGVuIGJlbG93LiAgKi8KKyAgICAgICAg c2Nhbl9ieXRlICs9IGJ5dGVzIC0gMTsKKyAgICAgICAgY29sICs9IHdpZHRoOworICAgICAgfQor ICAgIGVsc2UgaWYgKGN0bF9hcnJvdyAmJiAoYyA8IDA0MCB8fCBjID09IDAxNzcpKQorICAgICAg Y29sICs9IDI7CisgICAgZWxzZSBpZiAoYyA8IDA0MCB8fCBjID49IDAxNzcpCisgICAgICBjb2wg Kz0gNDsKKyAgICBlbHNlCisgICAgICBjb2wrKzsKKyAgfQorICAgICAgc2NhbisrOworICAgICAg c2Nhbl9ieXRlKys7CisgICAgfQorIGVuZGxvb3A6CisgIGxhc3Rfa25vd25fY29sdW1uID0gY29s OworICBsYXN0X2tub3duX2NvbHVtbl9wb2ludCA9IHB0OworICBsYXN0X2tub3duX2NvbHVtbl9t b2RpZmllZCA9IE1PRElGRjsKKyAgaWYgKGdvYWxjb2wpCisgICAgKmdvYWxjb2wgPSBjb2w7Cisg IGlmIChlbmRwb3MpCisgICAgKmVuZHBvcyA9IHNjYW47CisgIGlmIChwcmV2Y29sKQorICAgICpw cmV2Y29sID0gcHJldl9jb2w7Cit9CisKK3B0cmRpZmZfdAorbWNfY3VycmVudF9jb2x1bW4gKHN0 cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCBwdCkKK3sKKyAgLyogYGJ1Zl9jaGFycG9zX3RvX2J5 dGVwb3MnOiAgZWFzc2VydCAoQlVGX0JFRyAoYikgPD0gY2hhcnBvcyAmJiBjaGFycG9zIDw9IEJV Rl9aIChiKSk7ICovCisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19C VUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBib29s IGJhcmZfY3Jhc2ggPSAoQlVGX0JFRyAoYikgPD0gcHQgJiYgcHQgPD0gQlVGX1ogKGIpKSA/IGZh bHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2gpCisgICAgcmV0dXJuIDA7CisgIEVNQUNTX0lO VCBsYXN0X2tub3duX2NvbHVtbl9tb2RpZmllZCA9IDA7CisgIHB0cmRpZmZfdCBsYXN0X2tub3du X2NvbHVtbiA9IDA7CisgIHB0cmRpZmZfdCBjb2w7CisgIHVuc2lnbmVkIGNoYXIgKnB0ciwgKnN0 b3A7CisgIGJvb2wgdGFiX3NlZW47CisgIHB0cmRpZmZfdCBwb3N0X3RhYjsKKyAgaW50IGM7Cisg IGludCB0YWJfd2lkdGggPSBTQU5FX1RBQl9XSURUSCAoY3VycmVudF9idWZmZXIpOworICBib29s IGN0bF9hcnJvdyA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgY3RsX2Fycm93KSk7Cisg IHN0cnVjdCBMaXNwX0NoYXJfVGFibGUgKmRwID0gYnVmZmVyX2Rpc3BsYXlfdGFibGUgKCk7Cisg IGlmIChwdCA9PSBsYXN0X2tub3duX2NvbHVtbl9wb2ludAorICAgICAgJiYgTU9ESUZGID09IGxh c3Rfa25vd25fY29sdW1uX21vZGlmaWVkKQorICAgIHJldHVybiBsYXN0X2tub3duX2NvbHVtbjsK KyAgLyogSWYgdGhlIGJ1ZmZlciBoYXMgb3ZlcmxheXMsIHRleHQgcHJvcGVydGllcywKKyAgICAg b3IgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHVzZSBhIG1vcmUgZ2VuZXJhbCBhbGdvcml0aG0uICAq LworICBpZiAoYnVmZmVyX2ludGVydmFscyAoY3VycmVudF9idWZmZXIpCisgICAgICB8fCBidWZm ZXJfaGFzX292ZXJsYXlzICgpCisgICAgICB8fCBaICE9IFpfQllURSkKKyAgICB7CisgICAgICBF TUFDU19JTlQgY29sID0gTU9TVF9QT1NJVElWRV9GSVhOVU07CisgICAgICBtY19zY2FuX2Zvcl9j b2x1bW4gKCZwdCwgJmNvbCwgTlVMTCwgcHQpOworICAgICAgcmV0dXJuIGNvbDsKKyAgICB9Cisg IC8qIFNjYW4gYmFja3dhcmRzIGZyb20gcG9pbnQgdG8gdGhlIHByZXZpb3VzIG5ld2xpbmUsCisg ICAgIGNvdW50aW5nIHdpZHRoLiAgVGFiIGNoYXJhY3RlcnMgYXJlIHRoZSBvbmx5IGNvbXBsaWNh dGVkIGNhc2UuICAqLworICAvKiBNYWtlIGEgcG9pbnRlciBmb3IgZGVjcmVtZW50aW5nIHRocm91 Z2ggdGhlIGNoYXJzIGJlZm9yZSBwb2ludC4gICovCisgIHB0ciA9IEJZVEVfUE9TX0FERFIgKENI QVJfVE9fQllURSAocHQpIC0gMSkgKyAxOworICAvKiBNYWtlIGEgcG9pbnRlciB0byB3aGVyZSBj b25zZWN1dGl2ZSBjaGFycyBsZWF2ZSBvZmYsCisgICAgIGdvaW5nIGJhY2t3YXJkcyBmcm9tIHBv aW50LiAgKi8KKyAgaWYgKHB0ID09IEJFR1YpCisgICAgc3RvcCA9IHB0cjsKKyAgZWxzZSBpZiAo cHQgPD0gR1BUIHx8IEJFR1YgPiBHUFQpCisgICAgc3RvcCA9IEJFR1ZfQUREUjsKKyAgZWxzZQor ICAgIHN0b3AgPSBHQVBfRU5EX0FERFI7CisgIGNvbCA9IDAsIHRhYl9zZWVuID0gMCwgcG9zdF90 YWIgPSAwOworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBwdHJkaWZmX3QgaSwgbjsKKyAgICAg IExpc3BfT2JqZWN0IGNoYXJ2ZWM7CisgICAgICBpZiAocHRyID09IHN0b3ApCisgIHsKKyAgICAv KiBXZSBzdG9wcGVkIGVpdGhlciBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyCisgICAg ICAgb3IgZm9yIHRoZSBnYXAuICAqLworICAgIGlmIChwdHIgPT0gQkVHVl9BRERSKQorICAgICAg YnJlYWs7CisgICAgLyogSXQgd2FzIHRoZSBnYXAuICBKdW1wIGJhY2sgb3ZlciBpdC4gICovCisg ICAgc3RvcCA9IEJFR1ZfQUREUjsKKyAgICBwdHIgPSBHUFRfQUREUjsKKyAgICAvKiBDaGVjayB3 aGV0aGVyIHRoYXQgYnJpbmdzIHVzIHRvIGJlZ2lubmluZyBvZiBidWZmZXIuICAqLworICAgIGlm IChCRUdWID49IEdQVCkKKyAgICAgIGJyZWFrOworICB9CisgICAgICBjID0gKi0tcHRyOworICAg ICAgaWYgKGRwICYmIFZFQ1RPUlAgKERJU1BfQ0hBUl9WRUNUT1IgKGRwLCBjKSkpCisgIHsKKyAg ICBjaGFydmVjID0gRElTUF9DSEFSX1ZFQ1RPUiAoZHAsIGMpOworICAgIG4gPSBBU0laRSAoY2hh cnZlYyk7CisgIH0KKyAgICAgIGVsc2UKKyAgeworICAgIGNoYXJ2ZWMgPSBRbmlsOworICAgIG4g PSAxOworICB9CisgICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpCisgIHsKKyAgICBp ZiAoVkVDVE9SUCAoY2hhcnZlYykpCisgICAgICB7CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIGJl IGhhbmRsZWQgdGhlIHNhbWUgYXMKKyAgICAgbmV4dF9lbGVtZW50X2Zyb21fZGlzcGxheV92ZWN0 b3IgZG9lcyBpdC4gICovCisgICAgICAgIExpc3BfT2JqZWN0IGVudHJ5ID0gQVJFRiAoY2hhcnZl YywgaSk7CisgICAgICAgIGlmIChHTFlQSF9DT0RFX1AgKGVudHJ5KSkKKyAgICBjID0gR0xZUEhf Q09ERV9DSEFSIChlbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICBjID0gJyAnOworICAgICAgfQor ICAgIGlmIChjID49IDA0MCAmJiBjIDwgMDE3NykKKyAgICAgIGNvbCsrOworICAgIGVsc2UgaWYg KGMgPT0gJ1xuJworICAgICAgIHx8IChjID09ICdccicKKyAgICAgICAgICAgJiYgRVEgKEJWQVIg KGN1cnJlbnRfYnVmZmVyLCBzZWxlY3RpdmVfZGlzcGxheSksIFF0KSkpCisgICAgICB7CisgICAg ICAgIHB0cisrOworICAgICAgICBnb3RvIHN0YXJ0X29mX2xpbmVfZm91bmQ7CisgICAgICB9Cisg ICAgZWxzZSBpZiAoYyA9PSAnXHQnKQorICAgICAgeworICAgICAgICBpZiAodGFiX3NlZW4pCisg ICAgY29sID0gKChjb2wgKyB0YWJfd2lkdGgpIC8gdGFiX3dpZHRoKSAqIHRhYl93aWR0aDsKKyAg ICAgICAgcG9zdF90YWIgKz0gY29sOworICAgICAgICBjb2wgPSAwOworICAgICAgICB0YWJfc2Vl biA9IDE7CisgICAgICB9CisgICAgZWxzZSBpZiAoVkVDVE9SUCAoY2hhcnZlYykpCisgICAgICAv KiBXaXRoIGEgZGlzcGxheSB0YWJsZSBlbnRyeSwgQyBpcyBkaXNwbGF5ZWQgYXMgaXMsIGFuZAor ICAgICAgICAgbm90IGRpc3BsYXllZCBhcyBcTk5OIG9yIGFzIF5OLiAgSWYgQyBpcyBhIHNpbmds ZS1ieXRlCisgICAgICAgICBjaGFyYWN0ZXIsIGl0IHRha2VzIG9uZSBjb2x1bW4uICBJZiBDIGlz IG11bHRpLWJ5dGUgaW4KKyAgICAgICAgIGEgdW5pYnl0ZSBidWZmZXIsIGl0J3MgdHJhbnNsYXRl ZCB0byB1bmlieXRlLCBzbyBpdAorICAgICAgICAgYWxzbyB0YWtlcyBvbmUgY29sdW1uLiAgKi8K KyAgICAgICsrY29sOworICAgIGVsc2UKKyAgICAgIGNvbCArPSAoY3RsX2Fycm93ICYmIGMgPCAw MjAwKSA/IDIgOiA0OworICB9CisgICAgfQorIHN0YXJ0X29mX2xpbmVfZm91bmQ6CisgIGlmICh0 YWJfc2VlbikKKyAgICB7CisgICAgICBjb2wgPSAoKGNvbCArIHRhYl93aWR0aCkgLyB0YWJfd2lk dGgpICogdGFiX3dpZHRoOworICAgICAgY29sICs9IHBvc3RfdGFiOworICAgIH0KKyAgbGFzdF9r bm93bl9jb2x1bW4gPSBjb2w7CisgIGxhc3Rfa25vd25fY29sdW1uX3BvaW50ID0gcHQ7CisgIGxh c3Rfa25vd25fY29sdW1uX21vZGlmaWVkID0gTU9ESUZGOworICByZXR1cm4gY29sOworfQorCitz dGF0aWMgaW50CittY19saXNwX3RvX2N1cnNvcl90eXBlIChMaXNwX09iamVjdCBhcmcpCit7Cisg IGNoYXIgKnN0cjsKKyAgaWYgKFhUWVBFIChhcmcpID09IExpc3BfU3RyaW5nKQorICAgIHN0ciA9 IFNTREFUQSAoYXJnKTsKKyAgZWxzZSBpZiAoWFRZUEUgKGFyZykgPT0gTGlzcF9TeW1ib2wpCisg ICAgc3RyID0gU1NEQVRBIChTWU1CT0xfTkFNRSAoYXJnKSk7CisgIGVsc2UgcmV0dXJuIC0xOwor ICBpZiAoIXN0cmNtcCAoc3RyLCAiYm94IikpCisgICAgcmV0dXJuIEZJTExFRF9CT1hfQ1VSU09S OworICBpZiAoIXN0cmNtcCAoc3RyLCAiaG9sbG93IikpCisgICAgcmV0dXJuIEhPTExPV19CT1hf Q1VSU09SOworICBpZiAoIXN0cmNtcCAoc3RyLCAiaGJhciIpKQorICAgIHJldHVybiBIQkFSX0NV UlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImJhciIpKQorICAgIHJldHVybiBCQVJfQ1VSU09S OworICBpZiAoIXN0cmNtcCAoc3RyLCAibGVmdC1mcmluZ2UtYml0bWFwIikpCisgICAgcmV0dXJu IExFRlRfRlJJTkdFX0JJVE1BUDsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgInJpZ2h0LWZyaW5nZS1i aXRtYXAiKSkKKyAgICByZXR1cm4gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgaWYgKCFzdHJjbXAg KHN0ciwgIm5vIikpCisgICAgcmV0dXJuIE5PX0NVUlNPUjsKKyAgcmV0dXJuIC0xOworfQorCitz dGF0aWMgTGlzcF9PYmplY3QKK21jX2N1cnNvcl90eXBlX3RvX2xpc3AgKGludCBhcmcpCit7Cisg IHN3aXRjaCAoYXJnKQorICAgIHsKKyAgICBjYXNlIEZJTExFRF9CT1hfQ1VSU09SOiByZXR1cm4g UWJveDsKKyAgICBjYXNlIEhPTExPV19CT1hfQ1VSU09SOiByZXR1cm4gUWhvbGxvdzsKKyAgICBj YXNlIEhCQVJfQ1VSU09SOiByZXR1cm4gUWhiYXI7CisgICAgY2FzZSBCQVJfQ1VSU09SOiByZXR1 cm4gUWJhcjsKKyAgICBjYXNlIExFRlRfRlJJTkdFX0JJVE1BUDogcmV0dXJuIGludGVybiAoImxl ZnQtZnJpbmdlLWJpdG1hcCIpOworICAgIGNhc2UgUklHSFRfRlJJTkdFX0JJVE1BUDogcmV0dXJu IGludGVybiAoInJpZ2h0LWZyaW5nZS1iaXRtYXAiKTsKKyAgICBjYXNlIE5PX0NVUlNPUjoKKyAg ICBkZWZhdWx0OiByZXR1cm4gaW50ZXJuICgibm8iKTsKKyAgICB9Cit9CisKK3N0YXRpYyBMaXNw X09iamVjdAorbWNfY29sb3JfdmVjdG9yX2NhbGMgKHN0cnVjdCB3aW5kb3cgKncsIExpc3BfT2Jq ZWN0IGNvbG9yKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgTGlzcF9PYmplY3QgdGFy Z2V0X2ZyYW1lID0gdy0+ZnJhbWU7CisgIExpc3BfT2JqZWN0IGNvbG9yX3ZhbHVlczsKKyAgZG91 YmxlIHZhbG1heCA9IFhGSVhOVU0gKFhDQVIgKEZ4d19jb2xvcl92YWx1ZXMgKGJ1aWxkX3N0cmlu ZyAoIiNmZmZmZmYiKSwgdGFyZ2V0X2ZyYW1lKSkpOworICBMaXNwX09iamVjdCB2bGlzdDsKKyAg cHRyZGlmZl90IHg7CisgIGludCBpID0gMDsKKyAgTGlzcF9PYmplY3QgdGVtcCA9IFFuaWw7Cisg IExpc3BfT2JqZWN0IHZlY3RvciA9IChGbWFrZV92ZWN0b3IgKG1ha2VfZml4bnVtICgzKSwgUW5p bCkpOworICBpZiAoIU5JTFAgKEZtZW1xICgoRmZyYW1lcCAodGFyZ2V0X2ZyYW1lKSksIGxpc3Ru IChDT05TVFlQRV9IRUFQLCAzLCBpbnRlcm4gKCJ4IiksIGludGVybiAoInczMiIpLCBpbnRlcm4g KCJucyIpKSkpKQorICAgIHsKKyAgICAgIGNvbG9yX3ZhbHVlcyA9IChGeHdfY29sb3JfdmFsdWVz IChjb2xvciwgdGFyZ2V0X2ZyYW1lKSk7CisgICAgICBmb3IgKHZsaXN0ID0gY29sb3JfdmFsdWVz OworICAgICAgICAgICBDT05TUCAodmxpc3QpOworICAgICAgICAgICB2bGlzdCA9IFhDRFIgKHZs aXN0KSkKKyAgICAgICAgeworICAgICAgICAgIHggPSBYRklYTlVNIChYQ0FSICh2bGlzdCkpOwor ICAgICAgICAgIHRlbXAgPSBtYWtlX2Zsb2F0ICh4IC8gdmFsbWF4KTsKKyAgICAgICAgICBBU0VU ICh2ZWN0b3IsIGksIHRlbXApOworICAgICAgICAgIGkgPSBpICsgMTsKKyAgICAgICAgfQorICAg IH0KKyAgcmV0dXJuIHZlY3RvcjsKK30KKworc3RhdGljIExpc3BfT2JqZWN0CittY19iZ19sc2wg KHN0cnVjdCB3aW5kb3cgKncsIGVudW0gZmFjZV9pZCBmYWNlX2lkKQoreworICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgc3RydWN0IGZhY2UgKmZhY2U7CisgIExpc3Bf T2JqZWN0IGNvbG9yLCBjb2xvcl92ZWN0b3I7CisgIGlmICghTklMUCAoVmZhY2VfcmVtYXBwaW5n X2FsaXN0KQorICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVMVF9GQUNFX0lEIC8qIFFkZWZhdWx0 ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9JRCAvKiBRbW9kZV9s aW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5BQ1RJVkVfRkFDRV9J RCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBIRUFE RVJfTElORV9GQUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQg PT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lk ID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFNDUk9MTF9CQVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAqLworICAgICAgICAgIHx8IGZhY2Vf aWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQg PT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g TU9VU0VfRkFDRV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1FTlVf RkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklE RVJfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2Zp cnN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9MQVNU X1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2ZXJ0aWNhbF9ib3Jk ZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IElOVEVSTkFMX0JPUkRFUl9GQUNFX0lEKSkg LyogUWludGVybmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGxvb2t1 cF9iYXNpY19mYWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAgZWxzZQorICAgICAgZmFjZSA9IEZB Q0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIGNvbG9yID0gZmFjZS0+bGZhY2VbTEZBQ0VfQkFD S0dST1VORF9JTkRFWF07CisgIENIRUNLX1NUUklORyAoY29sb3IpOworICBjb2xvcl92ZWN0b3Ig PSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgY29sb3IpOworICByZXR1cm4gY29sb3JfdmVjdG9y OworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2ZnX2xzbCAoc3RydWN0IHdpbmRvdyAqdywg ZW51bSBmYWNlX2lkIGZhY2VfaWQpCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ ZnJhbWUpOworICBzdHJ1Y3QgZmFjZSAqZmFjZTsKKyAgTGlzcF9PYmplY3QgY29sb3IsIGNvbG9y X3ZlY3RvcjsKKyAgaWYgKCFOSUxQIChWZmFjZV9yZW1hcHBpbmdfYWxpc3QpCisgICAgICAmJiAo ZmFjZV9pZCA9PSBERUZBVUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8KKyAgICAgICAgICB8fCBm YWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IE1PREVfTElORV9JTkFDVElWRV9GQUNFX0lEIC8qIFFtb2RlX2xpbmVfaW5h Y3RpdmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEhFQURFUl9MSU5FX0ZBQ0VfSUQgLyog UWhlYWRlcl9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBUT09MX0JBUl9GQUNFX0lE IC8qIFF0b29sX2JhciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gRlJJTkdFX0ZBQ0VfSUQg LyogUWZyaW5nZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gU0NST0xMX0JBUl9GQUNFX0lE IC8qIFFzY3JvbGxfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBCT1JERVJfRkFDRV9J RCAvKiBRYm9yZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBDVVJTT1JfRkFDRV9JRCAv KiBRY3Vyc29yICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT1VTRV9GQUNFX0lEIC8qIFFt b3VzZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTUVOVV9GQUNFX0lEIC8qIFFtZW51ICov CisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GQUNFX0lEIC8qIFF3aW5k b3dfZGl2aWRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRklS U1RfUElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4ZWwgKi8KKyAgICAg ICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElYRUxfRkFDRV9JRCAvKiBR d2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gVkVS VElDQUxfQk9SREVSX0ZBQ0VfSUQgLyogUXZlcnRpY2FsX2JvcmRlciAqLworICAgICAgICAgIHx8 IGZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBRaW50ZXJuYWxfYm9yZGVy ICovCisgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgbG9va3VwX2Jhc2ljX2ZhY2UgKHcsIGYs IGZhY2VfaWQpKTsKKyAgICBlbHNlCisgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNl X2lkKTsKKyAgY29sb3IgPSBmYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAg Q0hFQ0tfU1RSSU5HIChjb2xvcik7CisgIGNvbG9yX3ZlY3RvciA9IG1jX2NvbG9yX3ZlY3Rvcl9j YWxjICh3LCBjb2xvcik7CisgIHJldHVybiBjb2xvcl92ZWN0b3I7Cit9CisKK3N0YXRpYyBMaXNw X09iamVjdAorbWNfZmdfZmFjZSAoc3RydWN0IHdpbmRvdyAqdywgZW51bSBmYWNlX2lkIGZhY2Vf aWQpCit7CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBzdHJ1Y3Qg ZmFjZSAqZmFjZTsKKyAgaWYgKCFOSUxQIChWZmFjZV9yZW1hcHBpbmdfYWxpc3QpCisgICAgICAm JiAoZmFjZV9pZCA9PSBERUZBVUxUX0ZBQ0VfSUQgLyogUWRlZmF1bHQgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IE1PREVfTElORV9JTkFDVElWRV9GQUNFX0lEIC8qIFFtb2RlX2xpbmVf aW5hY3RpdmUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IEhFQURFUl9MSU5FX0ZBQ0VfSUQg LyogUWhlYWRlcl9saW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBUT09MX0JBUl9GQUNF X0lEIC8qIFF0b29sX2JhciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gRlJJTkdFX0ZBQ0Vf SUQgLyogUWZyaW5nZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gU0NST0xMX0JBUl9GQUNF X0lEIC8qIFFzY3JvbGxfYmFyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBCT1JERVJfRkFD RV9JRCAvKiBRYm9yZGVyICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBDVVJTT1JfRkFDRV9J RCAvKiBRY3Vyc29yICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT1VTRV9GQUNFX0lEIC8q IFFtb3VzZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTUVOVV9GQUNFX0lEIC8qIFFtZW51 ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GQUNFX0lEIC8qIFF3 aW5kb3dfZGl2aWRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJf RklSU1RfUElYRUxfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4ZWwgKi8KKyAg ICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElYRUxfRkFDRV9JRCAv KiBRd2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g VkVSVElDQUxfQk9SREVSX0ZBQ0VfSUQgLyogUXZlcnRpY2FsX2JvcmRlciAqLworICAgICAgICAg IHx8IGZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpKSAvKiBRaW50ZXJuYWxfYm9y ZGVyICovCisgICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgbG9va3VwX2Jhc2ljX2ZhY2UgKHcs IGYsIGZhY2VfaWQpKTsKKyAgICBlbHNlCisgICAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBm YWNlX2lkKTsKKyAgcmV0dXJuIGZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOwor fQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2JnX2ZhY2UgKHN0cnVjdCB3aW5kb3cgKncsIGVu dW0gZmFjZV9pZCBmYWNlX2lkKQoreworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZy YW1lKTsKKyAgc3RydWN0IGZhY2UgKmZhY2U7CisgIGlmICghTklMUCAoVmZhY2VfcmVtYXBwaW5n X2FsaXN0KQorICAgICAgJiYgKGZhY2VfaWQgPT0gREVGQVVMVF9GQUNFX0lEIC8qIFFkZWZhdWx0 ICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfRkFDRV9JRCAvKiBRbW9kZV9s aW5lICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5BQ1RJVkVfRkFDRV9J RCAvKiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBIRUFE RVJfTElORV9GQUNFX0lEIC8qIFFoZWFkZXJfbGluZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQg PT0gVE9PTF9CQVJfRkFDRV9JRCAvKiBRdG9vbF9iYXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lk ID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFNDUk9MTF9CQVJfRkFDRV9JRCAvKiBRc2Nyb2xsX2JhciAqLworICAgICAgICAgIHx8IGZhY2Vf aWQgPT0gQk9SREVSX0ZBQ0VfSUQgLyogUWJvcmRlciAqLworICAgICAgICAgIHx8IGZhY2VfaWQg PT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0g TU9VU0VfRkFDRV9JRCAvKiBRbW91c2UgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IE1FTlVf RkFDRV9JRCAvKiBRbWVudSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklE RVJfRkFDRV9JRCAvKiBRd2luZG93X2RpdmlkZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09 IFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2Zp cnN0X3BpeGVsICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9MQVNU X1BJWEVMX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyX2xhc3RfcGl4ZWwgKi8KKyAgICAgICAg ICB8fCBmYWNlX2lkID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2ZXJ0aWNhbF9ib3Jk ZXIgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IElOVEVSTkFMX0JPUkRFUl9GQUNFX0lEKSkg LyogUWludGVybmFsX2JvcmRlciAqLworICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGxvb2t1 cF9iYXNpY19mYWNlICh3LCBmLCBmYWNlX2lkKSk7CisgICAgZWxzZQorICAgICAgZmFjZSA9IEZB Q0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CisgIHJldHVybiBmYWNlLT5sZmFjZVtMRkFDRV9CQUNL R1JPVU5EX0lOREVYXTsKK30KKworc3RydWN0IGZhY2UgKgorbWNfbG9va3VwX2ZhY2UgKHN0cnVj dCBpdCAqaXQpCit7CisgIGlmICghTklMUCAoVmZhY2VfcmVtYXBwaW5nX2FsaXN0KQorICAgICAg JiYgKGl0LT5mYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBRZGVmYXVsdCAqLworICAgICAg ICAgIHx8IGl0LT5mYWNlX2lkID09IE1PREVfTElORV9GQUNFX0lEIC8qIFFtb2RlX2xpbmUgKi8K KyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBNT0RFX0xJTkVfSU5BQ1RJVkVfRkFDRV9JRCAv KiBRbW9kZV9saW5lX2luYWN0aXZlICovCisgICAgICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gSEVB REVSX0xJTkVfRkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFj ZV9pZCA9PSBUT09MX0JBUl9GQUNFX0lEIC8qIFF0b29sX2JhciAqLworICAgICAgICAgIHx8IGl0 LT5mYWNlX2lkID09IEZSSU5HRV9GQUNFX0lEIC8qIFFmcmluZ2UgKi8KKyAgICAgICAgICB8fCBp dC0+ZmFjZV9pZCA9PSBTQ1JPTExfQkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9iYXIgKi8KKyAgICAg ICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBCT1JERVJfRkFDRV9JRCAvKiBRYm9yZGVyICovCisgICAg ICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gQ1VSU09SX0ZBQ0VfSUQgLyogUWN1cnNvciAqLworICAg ICAgICAgIHx8IGl0LT5mYWNlX2lkID09IE1PVVNFX0ZBQ0VfSUQgLyogUW1vdXNlICovCisgICAg ICAgICAgfHwgaXQtPmZhY2VfaWQgPT0gTUVOVV9GQUNFX0lEIC8qIFFtZW51ICovCisgICAgICAg ICAgfHwgaXQtPmZhY2VfaWQgPT0gV0lORE9XX0RJVklERVJfRkFDRV9JRCAvKiBRd2luZG93X2Rp dmlkZXIgKi8KKyAgICAgICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GSVJT VF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9maXJzdF9waXhlbCAqLworICAgICAg ICAgIHx8IGl0LT5mYWNlX2lkID09IFdJTkRPV19ESVZJREVSX0xBU1RfUElYRUxfRkFDRV9JRCAv KiBRd2luZG93X2RpdmlkZXJfbGFzdF9waXhlbCAqLworICAgICAgICAgIHx8IGl0LT5mYWNlX2lk ID09IFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEIC8qIFF2ZXJ0aWNhbF9ib3JkZXIgKi8KKyAgICAg ICAgICB8fCBpdC0+ZmFjZV9pZCA9PSBJTlRFUk5BTF9CT1JERVJfRkFDRV9JRCkpIC8qIFFpbnRl cm5hbF9ib3JkZXIgKi8KKyAgICByZXR1cm4gRkFDRV9GUk9NX0lEIChpdC0+ZiwgbG9va3VwX2Jh c2ljX2ZhY2UgKGl0LT53LCBpdC0+ZiwgaXQtPmZhY2VfaWQpKTsKKyAgICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuIEZBQ0VfRlJPTV9JRCAoaXQtPmYsIGl0LT5mYWNlX2lkKTsKK30KKworLyogbnRo IDAgPT4gZmFsc2UsIGZhbHNlCisgICBudGggMSA9PiB0cnVlLCBmYWxzZQorICAgbnRoIDIgPT4g ZmFsc2UsIHRydWUKKyAgIG50aCAzID0+IHRydWUsIHRydWUKKyAgTG9va3VwIGluIGJ1ZmZlci1s b2NhbCBmcmluZ2UtaW5kaWNhdG9yLWFsaXN0IGJlZm9yZSBnbG9iYWwgYWxpc3QuCisgICAgIEVs ZW1lbnRzIGFyZToKKyAgQklUTUFQICAgIC0tIHVzZSBmb3IgYWxsCisgIChMIFIpICAgIC0tIHVz ZSBmb3IgbGVmdCByaWdodCAod2hldGhlciBwYXJ0aWFsIG9yIG5vdCkKKyAgKEwgUiBQTCBQUikg IC0tIHVzZSBmb3IgbGVmdCByaWdodCBwYXJ0aWFsLWxlZnQgcGFydGlhbC1yaWdodAorICBJZiBh bnkgdmFsdWUgaW4gbG9jYWwgYmluZGluZyBpcyBub3QgcHJlc2VudCBvciB0LCB1c2UgZ2xvYmFs IHZhbHVlLgorICAgICBJZiBwYXJ0aWFsLCBsb29rdXAgcGFydGlhbCBiaXRtYXAgaW4gZGVmYXVs dCB2YWx1ZSBpZiBub3QgZm91bmQgaGVyZS4KKyAgICAgSWYgbm90IHBhcnRpYWwsIG9yIG5vIHBh cnRpYWwgc3BlYyBpcyBwcmVzZW50LCB1c2Ugbm9uLXBhcnRpYWwgYml0bWFwLiAgKi8KKworc3Rh dGljIGludAorbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAoc3RydWN0IHdpbmRvdyAqdywg TGlzcF9PYmplY3QgYml0bWFwLCBpbnQgcmlnaHRfcCwgaW50IHBhcnRpYWxfcCkKK3sKKyAgTGlz cF9PYmplY3QgY21hcCwgYm0xID0gUW5pbCwgYm0yID0gUW5pbCwgYm07CisgIEVNQUNTX0lOVCBs bjEgPSAwLCBsbjIgPSAwOworICBpbnQgaXgxID0gcmlnaHRfcDsKKyAgaW50IGl4MiA9IGl4MSAr IChwYXJ0aWFsX3AgPyAyIDogMCk7CisgIGlmICgoY21hcCA9IEJWQVIgKFhCVUZGRVIgKHctPmNv bnRlbnRzKSwgZnJpbmdlX2luZGljYXRvcl9hbGlzdCkpLCAhTklMUCAoY21hcCkpCisgICAgewor ICAgICAgYm0xID0gRmFzc3EgKGJpdG1hcCwgY21hcCk7CisgICAgICBpZiAoQ09OU1AgKGJtMSkp CisgIHsKKyAgICBpZiAoKGJtMSA9IFhDRFIgKGJtMSkpLCBOSUxQIChibTEpKQorICAgICAgcmV0 dXJuIE5PX0ZSSU5HRV9CSVRNQVA7CisgICAgaWYgKENPTlNQIChibTEpKQorICAgICAgeworICAg ICAgICBsbjEgPSBYRklYTlVNIChGbGVuZ3RoIChibTEpKTsKKyAgICAgICAgaWYgKHBhcnRpYWxf cCkKKyAgICB7CisgICAgICBpZiAobG4xID4gaXgyKQorICAgICAgICB7CisgICAgICAgICAgYm0g PSBGbnRoIChtYWtlX2ZpeG51bSAoaXgyKSwgYm0xKTsKKyAgICAgICAgICBpZiAoIUVRIChibSwg UXQpKQorICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgZWxzZQor ICAgIHsKKyAgICAgIGlmIChsbjEgPiBpeDEpCisgICAgICAgIHsKKyAgICAgICAgICBibSA9IEZu dGggKG1ha2VfZml4bnVtIChpeDEpLCBibTEpOworICAgICAgICAgIGlmICghRVEgKGJtLCBRdCkp CisgICAgICBnb3RvIGZvdW5kOworICAgICAgICB9CisgICAgfQorICAgICAgfQorICAgIGVsc2Ug aWYgKChibSA9IGJtMSwgIUVRIChibSwgUXQpKSkKKyAgICAgIGdvdG8gZm91bmQ7CisgIH0KKyAg ICB9CisgIGlmICghRVEgKGNtYXAsIEJWQVIgKCZidWZmZXJfZGVmYXVsdHMsIGZyaW5nZV9pbmRp Y2F0b3JfYWxpc3QpKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKCZidWZmZXJfZGVmYXVsdHMsIGZy aW5nZV9pbmRpY2F0b3JfYWxpc3QpKSkKKyAgICB7CisgICAgICBibTIgPSBGYXNzcSAoYml0bWFw LCBCVkFSICgmYnVmZmVyX2RlZmF1bHRzLCBmcmluZ2VfaW5kaWNhdG9yX2FsaXN0KSk7CisgICAg ICBpZiAoQ09OU1AgKGJtMikpCisgIHsKKyAgICBpZiAoKGJtMiA9IFhDRFIgKGJtMikpLCAhTklM UCAoYm0yKSkKKyAgICAgIHsKKyAgICAgICAgaWYgKENPTlNQIChibTIpKQorICAgIHsKKyAgICAg IGxuMiA9IFhGSVhOVU0gKEZsZW5ndGggKGJtMikpOworICAgICAgaWYgKHBhcnRpYWxfcCkKKyAg ICAgICAgeworICAgICAgICAgIGlmIChsbjIgPiBpeDIpCisgICAgICB7CisgICAgICAgIGJtID0g Rm50aCAobWFrZV9maXhudW0gKGl4MiksIGJtMik7CisgICAgICAgIGlmICghRVEgKGJtLCBRdCkp CisgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAg IH0KKyAgfQorICAgIH0KKyAgaWYgKGxuMSA+IGl4MSkKKyAgICB7CisgICAgICBibSA9IEZudGgg KG1ha2VfZml4bnVtIChpeDEpLCBibTEpOworICAgICAgaWYgKCFFUSAoYm0sIFF0KSkKKyAgZ290 byBmb3VuZDsKKyAgICB9CisgIGlmIChsbjIgPiBpeDEpCisgICAgeworICAgICAgYm0gPSBGbnRo IChtYWtlX2ZpeG51bSAoaXgxKSwgYm0yKTsKKyAgICAgIGlmICghRVEgKGJtLCBRdCkpCisgIGdv dG8gZm91bmQ7CisgICAgICByZXR1cm4gTk9fRlJJTkdFX0JJVE1BUDsKKyAgICB9CisgIGVsc2Ug aWYgKChibSA9IGJtMiwgTklMUCAoYm0pKSkKKyAgICByZXR1cm4gTk9fRlJJTkdFX0JJVE1BUDsK KyBmb3VuZDoKKyAgcmV0dXJuIGxvb2t1cF9mcmluZ2VfYml0bWFwIChibSk7Cit9CisKK3ZvaWQK K21jX2VyYXNlX3BoeXNfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgZmxhdm9yKQorewor ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgTW91c2VfSExJbmZvICpo bGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsKKyAgaW50IGhwb3MgPSB3LT5waHlzX2N1cnNvci5o cG9zOworICBpbnQgdnBvcyA9IHctPnBoeXNfY3Vyc29yLnZwb3M7CisgIGJvb2wgbW91c2VfZmFj ZV9oZXJlX3AgPSBmYWxzZTsKKyAgc3RydWN0IGdseXBoX21hdHJpeCAqYWN0aXZlX2dseXBocyA9 IHctPmN1cnJlbnRfbWF0cml4OworICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJzb3Jfcm93OworICBz dHJ1Y3QgZ2x5cGggKmN1cnNvcl9nbHlwaDsKKyAgZW51bSBkcmF3X2dseXBoc19mYWNlIGhsOwor ICAvKiBObyBjdXJzb3IgZGlzcGxheWVkIG9yIHJvdyBpbnZhbGlkYXRlZCA9PiBub3RoaW5nIHRv IGRvIG9uIHRoZQorICAgICBzY3JlZW4uICAqLworICBpZiAody0+cGh5c19jdXJzb3JfdHlwZSA9 PSBOT19DVVJTT1IpCisgICAgZ290byBtYXJrX2N1cnNvcl9vZmY7CisgIC8qIFZQT1MgPj0gYWN0 aXZlX2dseXBocy0+bnJvd3MgbWVhbnMgdGhhdCB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZC4KKyAg ICAgRG9uJ3QgYm90aGVyIHRvIGVyYXNlIHRoZSBjdXJzb3IuICAqLworICBpZiAodnBvcyA+PSBh Y3RpdmVfZ2x5cGhzLT5ucm93cykKKyAgICBnb3RvIG1hcmtfY3Vyc29yX29mZjsKKyAgLyogSWYg cm93IGNvbnRhaW5pbmcgY3Vyc29yIGlzIG1hcmtlZCBpbnZhbGlkLCB0aGVyZSBpcyBub3RoaW5n IHdlCisgICAgIGNhbiBkby4gICovCisgIGN1cnNvcl9yb3cgPSBNQVRSSVhfUk9XIChhY3RpdmVf Z2x5cGhzLCB2cG9zKTsKKyAgaWYgKCFjdXJzb3Jfcm93LT5lbmFibGVkX3ApCisgICAgZ290byBt YXJrX2N1cnNvcl9vZmY7CisgIC8qIElmIGxpbmUgc3BhY2luZyBpcyA+IDAsIG9sZCBjdXJzb3Ig bWF5IG9ubHkgYmUgcGFydGlhbGx5IHZpc2libGUgaW4KKyAgICAgd2luZG93IGFmdGVyIHNwbGl0 LXdpbmRvdy4gIFNvIGFkanVzdCB2aXNpYmxlIGhlaWdodC4gICovCisgIGN1cnNvcl9yb3ctPnZp c2libGVfaGVpZ2h0ID0gbWluIChjdXJzb3Jfcm93LT52aXNpYmxlX2hlaWdodCwKKyAgICAgICAg ICAgIHdpbmRvd190ZXh0X2JvdHRvbV95ICh3KSAtIGN1cnNvcl9yb3ctPnkpOworICAvKiBJZiBy b3cgaXMgY29tcGxldGVseSBpbnZpc2libGUsIGRvbid0IGF0dGVtcHQgdG8gZGVsZXRlIGEgY3Vy c29yIHdoaWNoCisgICAgIGlzbid0IHRoZXJlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIGN1cnNvciBp cyBhdCB0b3Agb2YgYSB3aW5kb3csIGFuZAorICAgICB3ZSBzd2l0Y2ggdG8gYSBidWZmZXIgd2l0 aCBhIGhlYWRlciBsaW5lIGluIHRoYXQgd2luZG93LiAgKi8KKyAgaWYgKGN1cnNvcl9yb3ctPnZp c2libGVfaGVpZ2h0IDw9IDApCisgICAgZ290byBtYXJrX2N1cnNvcl9vZmY7CisgIC8qIElmIGN1 cnNvciBpcyBpbiB0aGUgZnJpbmdlLCBlcmFzZSBieSBkcmF3aW5nIGFjdHVhbCBiaXRtYXAgdGhl cmUuICAqLworICBpZiAoY3Vyc29yX3Jvdy0+Y3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAmJiBm bGF2b3IgIT0gTUNfR0xZUEgpCisgICAgeworICAgICAgY3Vyc29yX3Jvdy0+Y3Vyc29yX2luX2Zy aW5nZV9wID0gZmFsc2U7CisgICAgICBkcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIGN1cnNvcl9yb3cs IGN1cnNvcl9yb3ctPnJldmVyc2VkX3ApOworICAgICAgZ290byBtYXJrX2N1cnNvcl9vZmY7Cisg ICAgfQorICAvKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgbmV3IHJvdyBpcyBzaG9ydGVyIHRo YW4gdGhlIG9sZCBvbmUuCisgICAgIEluIHRoaXMgY2FzZSwgZWl0aGVyIGRyYXdfZ2x5cGhzIG9y IGNsZWFyX2VuZF9vZl9saW5lCisgICAgIHNob3VsZCBoYXZlIGNsZWFyZWQgdGhlIGN1cnNvci4g IE5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZQorICAgICBhYmxlIHRvIGVyYXNlIHRoZSBjdXJzb3Ig aW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhCisgICAgIGN1cnNvciBnbHlwaCBh dCBoYW5kLiAgKi8KKyAgaWYgKChjdXJzb3Jfcm93LT5yZXZlcnNlZF9wCisgICAgICAgPyAody0+ cGh5c19jdXJzb3IuaHBvcyA8IDApCisgICAgICAgOiAody0+cGh5c19jdXJzb3IuaHBvcyA+PSBj dXJzb3Jfcm93LT51c2VkW1RFWFRfQVJFQV0pKSkKKyAgICBnb3RvIG1hcmtfY3Vyc29yX29mZjsK KyAgLyogV2hlbiB0aGUgd2luZG93IGlzIGhzY3JvbGxlZCwgY3Vyc29yIGhwb3MgY2FuIGxlZ2l0 aW1hdGVseSBiZSBvdXQKKyAgICAgb2YgYm91bmRzLCBidXQgd2UgZHJhdyB0aGUgY3Vyc29yIGF0 IHRoZSBjb3JyZXNwb25kaW5nIHdpbmRvdworICAgICBtYXJnaW4gaW4gdGhhdCBjYXNlLiAgKi8K KyAgaWYgKCFjdXJzb3Jfcm93LT5yZXZlcnNlZF9wICYmIGhwb3MgPCAwKQorICAgIGhwb3MgPSAw OworICBpZiAoY3Vyc29yX3Jvdy0+cmV2ZXJzZWRfcCAmJiBocG9zID49IGN1cnNvcl9yb3ctPnVz ZWRbVEVYVF9BUkVBXSkKKyAgICBocG9zID0gY3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FSRUFdIC0g MTsKKyAgLyogSWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgbW91c2UgZmFjZSBhcmVhLCByZWRpc3Bs YXkgdGhhdCB3aGVuCisgICAgIHdlIGNsZWFyIHRoZSBjdXJzb3IuICAqLworICBpZiAoISBOSUxQ IChobGluZm8tPm1vdXNlX2ZhY2Vfd2luZG93KQorICAgICAgJiYgY29vcmRzX2luX21vdXNlX2Zh Y2VfcCAodywgaHBvcywgdnBvcykKKyAgICAgIC8qIERvbid0IHJlZHJhdyB0aGUgY3Vyc29yJ3Mg c3BvdCBpbiBtb3VzZSBmYWNlIGlmIGl0IGlzIGF0IHRoZQorICAgZW5kIG9mIGEgbGluZSAob24g YSBuZXdsaW5lKS4gIFRoZSBjdXJzb3IgYXBwZWFycyB0aGVyZSwgYnV0CisgICBtb3VzZSBoaWdo bGlnaHRpbmcgZG9lcyBub3QuICAqLworICAgICAgJiYgY3Vyc29yX3Jvdy0+dXNlZFtURVhUX0FS RUFdID4gaHBvcyAmJiBocG9zID49IDApCisgICAgbW91c2VfZmFjZV9oZXJlX3AgPSB0cnVlOwor ICAvKiBNYXliZSBjbGVhciB0aGUgZGlzcGxheSB1bmRlciB0aGUgY3Vyc29yLiAgKi8KKyAgaWYg KHctPnBoeXNfY3Vyc29yX3R5cGUgPT0gSE9MTE9XX0JPWF9DVVJTT1IpCisgICAgeworICAgICAg aW50IHgsIHk7CisgICAgICBpbnQgaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hFQURFUl9M SU5FX0hFSUdIVCAodyk7CisgICAgICBpbnQgd2lkdGg7CisgICAgICBjdXJzb3JfZ2x5cGggPSBn ZXRfcGh5c19jdXJzb3JfZ2x5cGggKHcpOworICAgICAgaWYgKGN1cnNvcl9nbHlwaCA9PSBOVUxM KQorICAgICAgICBnb3RvIG1hcmtfY3Vyc29yX29mZjsKKyAgICAgIHdpZHRoID0gY3Vyc29yX2ds eXBoLT5waXhlbF93aWR0aDsKKyAgICAgIHggPSB3LT5waHlzX2N1cnNvci54OworICAgICAgaWYg KHggPCAwKQorICAgICAgICB7CisgICAgICAgICAgd2lkdGggKz0geDsKKyAgICAgICAgICB4ID0g MDsKKyAgICAgICAgfQorICAgICAgd2lkdGggPSBtaW4gKHdpZHRoLCB3aW5kb3dfYm94X3dpZHRo ICh3LCBURVhUX0FSRUEpIC0geCk7CisgICAgICB5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kg KHcsIG1heCAoaGVhZGVyX2xpbmVfaGVpZ2h0LCBjdXJzb3Jfcm93LT55KSk7CisgICAgICB4ID0g V0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgeCk7CisgICAgICBpZiAod2lkdGggPiAw KQorICBGUkFNRV9SSUYgKGYpLT5jbGVhcl9mcmFtZV9hcmVhIChmLCB4LCB5LCB3aWR0aCwgY3Vy c29yX3Jvdy0+dmlzaWJsZV9oZWlnaHQpOworICAgIH0KKyAgLyogRXJhc2UgdGhlIGN1cnNvciBi eSByZWRyYXdpbmcgdGhlIGNoYXJhY3RlciB1bmRlcm5lYXRoIGl0LiAgKi8KKyAgaWYgKG1vdXNl X2ZhY2VfaGVyZV9wKQorICAgIGhsID0gRFJBV19NT1VTRV9GQUNFOworICBlbHNlCisgICAgaGwg PSBEUkFXX05PUk1BTF9URVhUOworICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBjdXJzb3Jf cm93LCBobCk7CisgbWFya19jdXJzb3Jfb2ZmOgorICB3LT5waHlzX2N1cnNvcl9vbl9wID0gZmFs c2U7CisgIHctPnBoeXNfY3Vyc29yX3R5cGUgPSBOT19DVVJTT1I7Cit9CisKK3N0YXRpYyB2b2lk CittY19lcmFzZV9nbHlwaF9jdXJzb3JzIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgeCwgaW50IHks IGludCBocG9zLCBpbnQgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdGV4dF9j dXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZmxhdm9yKQoreworICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcu Y2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2VydCAobWF0cml4ICYmIG1h dHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJvd3Mp OyAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKHctPmN1cnJlbnRfbWF0cml4ICYmIHctPmN1 cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfb25l KQorICAgIHJldHVybjsKKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9ICh2cG9zID49IDAgJiYgdnBv cyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJm X2NyYXNoX3R3bykKKyAgICByZXR1cm47CisgIGlmICh4IDwgMAorICAgICAgfHwgeSA8IDAKKyAg ICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2cG9zIDwgMCkKKyAgICByZXR1cm47CisgIC8qIFJl Y29yZCBzb21lIG9mIHRoZSBjdXJyZW50IHZhbHVlcyBmb3IgdGhlIGN1cnNvciBhbmQgZ2x5cGhf cm93LiAqLworICBib29sIHBoeXNfY3Vyc29yX29uX3AgPSB3LT5waHlzX2N1cnNvcl9vbl9wOwor ICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21h dHJpeCwgdnBvcyk7CisgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gZ2x5cGhfcm93LT5jdXJz b3JfaW5fZnJpbmdlX3A7CisgIGJvb2wgcmV2ZXJzZWRfcCA9IGdseXBoX3Jvdy0+cmV2ZXJzZWRf cDsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX3ggPSB3LT5waHlzX2N1cnNvci54OworICBwdHJk aWZmX3QgcGh5c19jdXJzb3JfeSA9IHctPnBoeXNfY3Vyc29yLnk7CisgIHB0cmRpZmZfdCBwaHlz X2N1cnNvcl9ocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKKyAgcHRyZGlmZl90IHBoeXNfY3Vy c29yX3Zwb3MgPSB3LT5waHlzX2N1cnNvci52cG9zOworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf YXNjZW50ID0gdy0+cGh5c19jdXJzb3JfYXNjZW50OworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf aGVpZ2h0ID0gdy0+cGh5c19jdXJzb3JfaGVpZ2h0OworICBwdHJkaWZmX3QgcGh5c19jdXJzb3Jf d2lkdGggPSB3LT5waHlzX2N1cnNvcl93aWR0aDsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBw aHlzX2N1cnNvcl90eXBlID0gdy0+cGh5c19jdXJzb3JfdHlwZTsKKyAgLyogSGlqYWNrIHctPnBo eXNfY3Vyc29yLiAqLworICB3LT5waHlzX2N1cnNvci54ID0geDsKKyAgdy0+cGh5c19jdXJzb3Iu eSA9IHk7CisgIHctPnBoeXNfY3Vyc29yLmhwb3MgPSBocG9zOworICB3LT5waHlzX2N1cnNvci52 cG9zID0gdnBvczsKKyAgdy0+cGh5c19jdXJzb3JfdHlwZSA9IGN1cnNvcl90eXBlOworICB3LT5w aHlzX2N1cnNvcl9hc2NlbnQgPSBnbHlwaF9yb3ctPmFzY2VudDsKKyAgdy0+cGh5c19jdXJzb3Jf aGVpZ2h0ID0gZ2x5cGhfcm93LT5oZWlnaHQ7CisgIHctPnBoeXNfY3Vyc29yX3dpZHRoID0gY3Vy c29yX3dpZHRoOworICBtY19lcmFzZV9waHlzX2N1cnNvciAodywgZmxhdm9yKTsKKyAgLyogUmVz dG9yZSB0aGUgcHJldmlvdXMgdmFsdWVzIGZvciB3LT5waHlzX2N1cnNvciBhbmQgZ2x5cGhfcm93 LiAqLworICB3LT5waHlzX2N1cnNvcl9vbl9wID0gcGh5c19jdXJzb3Jfb25fcDsKKyAgdy0+cGh5 c19jdXJzb3IueCA9IHBoeXNfY3Vyc29yX3g7CisgIHctPnBoeXNfY3Vyc29yLnkgPSBwaHlzX2N1 cnNvcl95OworICB3LT5waHlzX2N1cnNvci5ocG9zID0gcGh5c19jdXJzb3JfaHBvczsKKyAgdy0+ cGh5c19jdXJzb3IudnBvcyA9IHBoeXNfY3Vyc29yX3Zwb3M7CisgIHctPnBoeXNfY3Vyc29yX3R5 cGUgPSBwaHlzX2N1cnNvcl90eXBlOworICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9 IGN1cnNvcl9pbl9mcmluZ2VfcDsKKyAgZ2x5cGhfcm93LT5yZXZlcnNlZF9wID0gcmV2ZXJzZWRf cDsKKyAgdy0+cGh5c19jdXJzb3JfYXNjZW50ID0gcGh5c19jdXJzb3JfYXNjZW50OworICB3LT5w aHlzX2N1cnNvcl9oZWlnaHQgPSBwaHlzX2N1cnNvcl9oZWlnaHQ7CisgIHctPnBoeXNfY3Vyc29y X3dpZHRoID0gcGh5c19jdXJzb3Jfd2lkdGg7Cit9CisKKy8qIFdlIGNhbGwgdGhpcyBhIGRyYXcv ZXJhc2UgaHlicmlkIGJlY2F1c2UgaXQgZG9lcyBhbGwgb2YgdGhlIGZvbGxvd2luZzoKKy0gIERy YXcgYWxsIGdseXBoIGN1cnNvcnMsIGJ1dCBlcmFzZSB3aXRoIGBtY19lcmFzZV9nbHlwaF9jdXJz b3JzJy4KKy0gIERyYXcvZXJhc2UgYWxsIGZyaW5nZSBiaXRtYXBzIHJlbGF0aW5nIHRvIGNyb3Nz aGFpcnMuCistICBEcmF3L2VyYXNlIGFsbCBnbHlwaGxlc3MgY3Vyc29ycy4gKi8KKworc3RhdGlj IHZvaWQKK21jX2RyYXdfZXJhc2VfaHlicmlkIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgeCwgaW50 IGZ4LCBpbnQgeSwgaW50IGZ5LCBpbnQgaHBvcywgaW50IHZwb3MsCisgICAgICAgICAgICAgICAg ICAgICAgaW50IGgsIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsIGludCBjdXJz b3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9y LCBib29sIGFjdGl2ZV9wLCBib29sIG1pbmltYWxfcCwKKyAgICAgICAgICAgICAgICAgICAgICBp bnQgZmxhdm9yLCBpbnQgcG9zaW50LCBib29sIHJlbW92ZV9wKQoreworICAvKiBgbWF0cml4X3Jv dycgaW4gYGRpc3BuZXcuY2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2Vy dCAobWF0cml4ICYmIG1hdHJpeC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8 IG1hdHJpeC0+bnJvd3MpOyAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKHctPmN1cnJlbnRf bWF0cml4ICYmIHctPmN1cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYg KGJhcmZfY3Jhc2hfb25lKQorICAgIHJldHVybjsKKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9ICh2 cG9zID49IDAgJiYgdnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykgPyBmYWxzZSA6IHRy dWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICByZXR1cm47CisgIGlmICh4IDwgMAorICAg ICAgfHwgeSA8IDAKKyAgICAgIHx8IGhwb3MgPCAwCisgICAgICB8fCB2cG9zIDwgMCkKKyAgICBy ZXR1cm47CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIg KGJ1Zik7CisgIGJvb2wgYXV0b19oc2Nyb2xsX21vZGVfcCA9IEVRIChGYnVmZmVyX2xvY2FsX3Zh bHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIGJ1ZiksIFFjdXJyZW50X2xpbmUpOworICAvKiBFWEFN UExFOiAgKHNjcm9sbC1sZWZ0IDUpICovCisgIGJvb2wgaHNjbF9hbGxfdGVtcF9wID0gKHctPnN1 c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNj cm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWluX2hzY3JvbGwgPT0gMCk7CisgIC8q IEVYQU1QTEU6ICBDLXUgQy14IDwgYW5kIGRvIG5vdGhpbmcuICovCisgIGJvb2wgaHNjbF9hbGxf cGVybV8wX3AgPSAody0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5t aW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNj cm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXggPCBhbmQgZG8gc29t ZXRoaW5nIGVsc2UgYmVzaWRlcyBob3Jpem9udGFsbHkgc2Nyb2xsaW5nIHRoZQorICAgICAgICAg ICAgICAgY3VycmVudCBsaW5lIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBs aW5lIGlzIF9ub3RfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4gKi8KKyAgYm9v bCBoc2NsX2FsbF9wZXJtXzFfcCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBhdXRvX2hzY3JvbGxfbW9kZV9wCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmJiB3LT5taW5faHNjcm9sbCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiB3LT5taW5faHNjcm9sbCA9PSB3LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIEMtdSBDLXgg PCBhbmQgLi4uCisgICAgICAgICAgICAgICBDdXJyZW50IGxpbmUgaXMgX25vdF8gaG9yaXpvbnRh bGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfYWxsX3Blcm1fMl9wID0g KCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5o c2Nyb2xsID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9s bCA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5taW5faHNjcm9sbCAhPSB3 LT5oc2Nyb2xsKTsKKyAgLyogRVhBTVBMRTogIChzY3JvbGwtbGVmdCA1KTsgYW5kLCB0aGVuIHBy ZXNzIHRoZSBsZWZ0IGFycm93IGtleSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgIEN1cnJlbnQg bGluZSBfaXNfIGhvcml6b250YWxseSBzY3JvbGxlZCBkaWZmZXJlbnRseS4qLworICBib29sIGhz Y2xfdGVtcF9wID0gKCF3LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAg ICAgICYmIGF1dG9faHNjcm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5o c2Nyb2xsID4gMAorICAgICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID09IDAp OworICAvKiBFWEFNUExFOiAgQy11IEMteCA8IGFuZCBkbyBzb21ldGhpbmcgdGhhdCBjYXVzZXMg dGhlIGN1cnJlbnQgbGluZSB0byBiZQorICAgICAgICAgICAgICAgaG9yaXpvbnRhbGx5IHNjcm9s bGVkIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgQ3VycmVudCBsaW5lIF9pc18gaG9yaXpv bnRhbGx5IHNjcm9sbGVkIGRpZmZlcmVudGx5LiAqLworICBib29sIGhzY2xfcGVybV9wID0gKCF3 LT5zdXNwZW5kX2F1dG9faHNjcm9sbAorICAgICAgICAgICAgICAgICAgICAgICYmIGF1dG9faHNj cm9sbF9tb2RlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMAorICAg ICAgICAgICAgICAgICAgICAgICYmIHctPm1pbl9oc2Nyb2xsID4gMAorICAgICAgICAgICAgICAg ICAgICAgICYmIHctPm1pbl9oc2Nyb2xsICE9IHctPmhzY3JvbGwpOworICBzdHJ1Y3QgZnJhbWUg KmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKKyAgLyogUmVjb3JkIHNvbWUgb2YgdGhlIGN1cnJlbnQg dmFsdWVzIGZvciB0aGUgY3Vyc29yIGFuZCBnbHlwaF9yb3cuICovCisgIGJvb2wgcGh5c19jdXJz b3Jfb25fcCA9IHctPnBoeXNfY3Vyc29yX29uX3A7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBo X3JvdyA9IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgYm9vbCBjdXJz b3JfaW5fZnJpbmdlX3AgPSBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcDsKKyAgYm9vbCBy ZXZlcnNlZF9wID0gZ2x5cGhfcm93LT5yZXZlcnNlZF9wOworICBwdHJkaWZmX3QgcGh5c19jdXJz b3JfeCA9IHctPnBoeXNfY3Vyc29yLng7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl95ID0gdy0+ cGh5c19jdXJzb3IueTsKKyAgcHRyZGlmZl90IHBoeXNfY3Vyc29yX2hwb3MgPSB3LT5waHlzX2N1 cnNvci5ocG9zOworICBwdHJkaWZmX3QgcGh5c19jdXJzb3JfdnBvcyA9IHctPnBoeXNfY3Vyc29y LnZwb3M7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl9hc2NlbnQgPSB3LT5waHlzX2N1cnNvcl9h c2NlbnQ7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl9oZWlnaHQgPSB3LT5waHlzX2N1cnNvcl9o ZWlnaHQ7CisgIHB0cmRpZmZfdCBwaHlzX2N1cnNvcl93aWR0aCA9IHctPnBoeXNfY3Vyc29yX3dp ZHRoOworICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIHBoeXNfY3Vyc29yX3R5cGUgPSB3LT5waHlz X2N1cnNvcl90eXBlOworICAvKiBIaWphY2sgdy0+cGh5c19jdXJzb3IuICovCisgIHctPnBoeXNf Y3Vyc29yLnggPSB4OworICB3LT5waHlzX2N1cnNvci55ID0gZ2x5cGhfcm93LT55OworICB3LT5w aHlzX2N1cnNvci5ocG9zID0gaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7Cisg IHctPnBoeXNfY3Vyc29yX3R5cGUgPSBjdXJzb3JfdHlwZTsKKyAgdy0+cGh5c19jdXJzb3JfYXNj ZW50ID0gZ2x5cGhfcm93LT5hc2NlbnQ7CisgIHctPnBoeXNfY3Vyc29yX2hlaWdodCA9IGdseXBo X3Jvdy0+aGVpZ2h0OworICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IGN1cnNvcl93aWR0aDsKKyAg aW50IGZyaW5nZV9iaXRtYXAgPSBOT19GUklOR0VfQklUTUFQOworICBpbnQgZmFjZV9pZCA9IERF RkFVTFRfRkFDRV9JRDsKKyAgaWYgKCFyZW1vdmVfcAorICAgICAgJiYgZmxhdm9yID09IE1DX09W RVJMQVlfQVJST1dfQklUTUFQCisgICAgICAmJiAhaHNjbF9hbGxfdGVtcF9wCisgICAgICAmJiAh aHNjbF90ZW1wX3AKKyAgICAgICYmICFoc2NsX3Blcm1fcAorICAgICAgJiYgIWhzY2xfYWxsX3Bl cm1fMF9wCisgICAgICAmJiAhaHNjbF9hbGxfcGVybV8xX3AKKyAgICAgICYmICFoc2NsX2FsbF9w ZXJtXzJfcCkKKyAgICB7CisgICAgICBlbnVtIGZhY2VfaWQgb3ZlcmxheV9hcnJvd19mYWNlX2lk ID0KKyAgICAgICAgKCFhY3RpdmVfcAorICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAgID8g bG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1pbmFjdGl2 ZS1mYWNlIiksIHRydWUpCisgICAgICAgIDogKGFjdGl2ZV9wCisgICAgICAgICAgICYmIG1pbmlt YWxfcCkKKyAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW92 ZXJsYXktYXJyb3ctbWluaW1hbC1mYWNlIiksIHRydWUpCisgICAgICAgIDogKGFjdGl2ZV9wCisg ICAgICAgICAgICYmICFtaW5pbWFsX3ApCisgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAo dywgZiwgaW50ZXJuICgiKy1vdmVybGF5LWFycm93LWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgOiBE RUZBVUxUX0ZBQ0VfSUQ7CisgICAgICBmYWNlX2lkID0gKGN1cnNvcl90eXBlID09IExFRlRfRlJJ TkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICA/IG92ZXJsYXlfYXJyb3dfZmFjZV9pZAorICAg ICAgICAgICAgICAgIDogREVGQVVMVF9GQUNFX0lEOworICAgICAgZ2x5cGhfcm93LT5sZWZ0X2Zy aW5nZV9mYWNlX2lkID0gZmFjZV9pZDsKKyAgICAgIC8qIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRf bG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBRb3ZlcmxheV9hcnJvdywgZmFsc2UsIGZhbHNlKTsg Ki8KKyAgICAgIGlmICh3LT5oc2Nyb2xsICE9IDApCisgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBt Y19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLW92ZXJsYXktYXJyb3ci KSwgZmFsc2UsIHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9 IG1jX2dldF9sb2dpY2FsX2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistb3ZlcmxheS1hcnJv dyIpLCB0cnVlLCB0cnVlKTsKKyAgICAgIC8qIEFzIHRvIGBnbHlwaF9yb3ctPm92ZXJsYXlfYXJy b3dfYml0bWFwYCwgdGhlIGZhY2UgbWF5IGJlIGNoYW5nZWQgdXNpbmcKKyAgICAgIHRoZSBgZmFj ZS1yZW1hcHBpbmctYWxpc3QnIHNvIGxvbmcgYXMgd2UgaGF2ZSBhIExpc3Agc2V0dGluZyBvZjoK KyAgICAgICAgKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LWFycm93ICcr LW92ZXJsYXktYXJyb3ctZmFjZSkKKyAgICAgIElmIHdlIHVzZSBgZ2x5cGhfcm93LT5sZWZ0X2Zy aW5nZV9iaXRtYXBgLCB0aGVuIHRoZSBmYWNlIG1heSBiZSBzZXQgdXNpbmcKKyAgICAgIEJPVEgg dGhlIGBmYWNlLXJlbWFwcGluZy1hbGlzdCcgYW5kIGBnbHlwaF9yb3ctPmxlZnRfZnJpbmdlX2Zh Y2VfaWRgLiAgSW4KKyAgICAgIHRoYXQgc2l0dWF0aW9uLCBhIExpc3Agc2V0dGluZyBvZiBgc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZScgaXMgbm90IG5lZWRlZC4KKyAgICAgIGBkcmF3X2ZyaW5nZV9i aXRtYXBfMScgaXMgc29tZXdoYXQgY29uZnVzaW5nIGFuZCByZXF1aXJlZCBzdGRlcnIgbWVzc2Fn ZXMKKyAgICAgIHRvIHNlZSB0aGF0IGBnbHlwaF9yb3ctPm92ZXJsYXlfYXJyb3dfYml0bWFwYCBz YXRpc2ZpZXMgdGhlIGZpcnN0IGNvbmRpdGlvbgorICAgICAgb2YgKHdoaWNoICE9IE5PX0ZSSU5H RV9CSVRNQVApLiAgQXQgdGhpcyB0aW1lLCBAbGF3bGlzdCBwcmVmZXJzIG5vdCB0bworICAgICAg cmVseSB1cG9uIGEgTGlzcCBzZXR0aW5nIHVzaW5nIGBzZXQtZnJpbmdlLWJpdG1hcC1mYWNlJy4g Ki8KKyAgICAgIGdseXBoX3Jvdy0+bGVmdF9mcmluZ2VfYml0bWFwID0gKGN1cnNvcl90eXBlID09 IExFRlRfRlJJTkdFX0JJVE1BUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IGZyaW5nZV9iaXRtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IE5PX0ZSSU5HRV9CSVRNQVA7CisgICAgICBnbHlwaF9yb3ctPmxlZnRfZnJpbmdlX29m ZnNldCA9IDA7CisgICAgICBkcmF3X2ZyaW5nZV9iaXRtYXAgKHcsIGdseXBoX3JvdywgdHJ1ZSk7 CisgICAgfQorICAgIGVsc2UgaWYgKCFyZW1vdmVfcAorICAgICAgICAgICAgICYmIGZsYXZvciA9 PSBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUAorICAgICAgICAgICAgICYmIChoc2NsX2FsbF90ZW1w X3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVybV8wX3AKKyAgICAgICAgICAgICAg ICAgfHwgaHNjbF9hbGxfcGVybV8xX3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF9hbGxfcGVy bV8yX3AKKyAgICAgICAgICAgICAgICAgfHwgaHNjbF90ZW1wX3AKKyAgICAgICAgICAgICAgICAg fHwgaHNjbF9wZXJtX3ApKQorICAgICAgeworICAgICAgICBlbnVtIGZhY2VfaWQgb3ZlcmxheV9h cnJvd19mYWNlX2lkID0KKyAgICAgICAgICAoIWFjdGl2ZV9wCisgICAgICAgICAgICYmICFOSUxQ IChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnNfaW5hY3RpdmVfd2luZG93 cykpKQorICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3Zl cmxheS1hcnJvdy1oc2NsLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgICA6IChhY3Rp dmVfcAorICAgICAgICAgICAgICYmIG1pbmltYWxfcCkKKyAgICAgICAgICAgID8gbG9va3VwX25h bWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb3ZlcmxheS1hcnJvdy1oc2NsLW1pbmltYWwtZmFj ZSIpLCB0cnVlKQorICAgICAgICAgIDogKGFjdGl2ZV9wCisgICAgICAgICAgICAgJiYgIW1pbmlt YWxfcCkKKyAgICAgICAgICAgID8gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist b3ZlcmxheS1hcnJvdy1oc2NsLWZhY2UiKSwgdHJ1ZSkKKyAgICAgICAgICA6IERFRkFVTFRfRkFD RV9JRDsKKyAgICAgICAgZmFjZV9pZCA9IChjdXJzb3JfdHlwZSA9PSBMRUZUX0ZSSU5HRV9CSVRN QVApCisgICAgICAgICAgICAgICAgICA/IG92ZXJsYXlfYXJyb3dfZmFjZV9pZAorICAgICAgICAg ICAgICAgICAgOiBERUZBVUxUX0ZBQ0VfSUQ7CisgICAgICAgIGdseXBoX3Jvdy0+bGVmdF9mcmlu Z2VfZmFjZV9pZCA9IGZhY2VfaWQ7CisgICAgICAgIGlmIChoc2NsX2FsbF9wZXJtXzBfcCkKKyAg ICAgICAgICBmcmluZ2VfYml0bWFwID0gbWNfZ2V0X2xvZ2ljYWxfZnJpbmdlX2JpdG1hcCAodywg aW50ZXJuICgiKy1oc2NsLXBlcm0iKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICBlbHNlIGlm IChoc2NsX2FsbF9wZXJtXzFfcCkKKyAgICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRf bG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtcGVybSIpLCB0cnVlLCBm YWxzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChoc2NsX2FsbF9wZXJtXzJfcCkKKyAgICAgICAg ICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9sb2dpY2FsX2ZyaW5nZV9iaXRtYXAgKHcsIGlu dGVybiAoIistaHNjbC1wZXJtIiksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgZWxzZSBp ZiAoaHNjbF9wZXJtX3ApCisgICAgICAgICAgICAgICAgZnJpbmdlX2JpdG1hcCA9IG1jX2dldF9s b2dpY2FsX2ZyaW5nZV9iaXRtYXAgKHcsIGludGVybiAoIistaHNjbC1wZXJtIiksIHRydWUsIHRy dWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhzY2xfYWxsX3RlbXBfcCkKKyAgICAgICAg ICAgICAgICAgIGZyaW5nZV9iaXRtYXAgPSBtY19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3 LCBpbnRlcm4gKCIrLWhzY2wtdGVtcCIpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoaHNjbF90ZW1wX3ApCisgICAgICAgICAgICAgICAgICAgIGZyaW5nZV9iaXRt YXAgPSBtY19nZXRfbG9naWNhbF9mcmluZ2VfYml0bWFwICh3LCBpbnRlcm4gKCIrLWhzY2wtdGVt cCIpLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIC8qIEFzIHRvIGBnbHlwaF9yb3ctPm92ZXJsYXlf YXJyb3dfYml0bWFwYCwgdGhlIGZhY2UgbWF5IGJlIGNoYW5nZWQgdXNpbmcKKyAgICAgICAgdGhl IGBmYWNlLXJlbWFwcGluZy1hbGlzdCcgc28gbG9uZyBhcyB3ZSBoYXZlIGEgTGlzcCBzZXR0aW5n IG9mOgorICAgICAgICAgIChzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1h cnJvdyAnKy1vdmVybGF5LWFycm93LWZhY2UpCisgICAgICAgIElmIHdlIHVzZSBgZ2x5cGhfcm93 LT5sZWZ0X2ZyaW5nZV9iaXRtYXBgLCB0aGVuIHRoZSBmYWNlIG1heSBiZSBzZXQgdXNpbmcKKyAg ICAgICAgQk9USCB0aGUgYGZhY2UtcmVtYXBwaW5nLWFsaXN0JyBhbmQgYGdseXBoX3Jvdy0+bGVm dF9mcmluZ2VfZmFjZV9pZGAuICBJbgorICAgICAgICB0aGF0IHNpdHVhdGlvbiwgYSBMaXNwIHNl dHRpbmcgb2YgYHNldC1mcmluZ2UtYml0bWFwLWZhY2UnIGlzIG5vdCBuZWVkZWQuCisgICAgICAg IGBkcmF3X2ZyaW5nZV9iaXRtYXBfMScgaXMgc29tZXdoYXQgY29uZnVzaW5nIGFuZCByZXF1aXJl ZCBzdGRlcnIgbWVzc2FnZXMKKyAgICAgICAgdG8gc2VlIHRoYXQgYGdseXBoX3Jvdy0+b3Zlcmxh eV9hcnJvd19iaXRtYXBgIHNhdGlzZmllcyB0aGUgZmlyc3QgY29uZGl0aW9uCisgICAgICAgIG9m ICh3aGljaCAhPSBOT19GUklOR0VfQklUTUFQKS4gIEF0IHRoaXMgdGltZSwgQGxhd2xpc3QgcHJl ZmVycyBub3QgdG8KKyAgICAgICAgcmVseSB1cG9uIGEgTGlzcCBzZXR0aW5nIHVzaW5nIGBzZXQt ZnJpbmdlLWJpdG1hcC1mYWNlJy4gKi8KKyAgICAgICAgZ2x5cGhfcm93LT5sZWZ0X2ZyaW5nZV9i aXRtYXAgPSAoY3Vyc29yX3R5cGUgPT0gTEVGVF9GUklOR0VfQklUTUFQKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmcmluZ2VfYml0bWFwCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5PX0ZSSU5HRV9CSVRNQVA7CisgICAg ICAgIGdseXBoX3Jvdy0+bGVmdF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAgICAgZHJhd19mcmlu Z2VfYml0bWFwICh3LCBnbHlwaF9yb3csIHRydWUpOworICAgICAgfQorICAgICAgZWxzZSBpZiAo IXJlbW92ZV9wCisgICAgICAgICAgICAgICAmJiAoZmxhdm9yID09IE1DX0hPTExPV19SRUNUQU5H TEVfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfSE9MTE9X X1JFQ1RBTkdMRQorICAgICAgICAgICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9C QVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElD QUxfQkFSCisgICAgICAgICAgICAgICAgICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9C QUNLU0xBU0gpKQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3QgYml0bWFwX2ZsYXZv ciA9IChmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RBTkdMRV9SSUdIVF9BUlJPVykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdo dF9hcnJvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChmbGF2b3Ig PT0gTUNfSE9MTE9XX1JFQ1RBTkdMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA/IFFtY19ob2xsb3dfcmVjdGFuZ2xlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFy X3JpZ2h0X2Fycm93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGZs YXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPyBRbWNfdmVydGljYWxfYmFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNIKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUW1jX3ZlcnRpY2FsX2Jhcl9iYWNr c2xhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBRbmlsOworICAg ICAgICAgIGZyaW5nZV9iaXRtYXAgPSAoY3Vyc29yX3R5cGUgPT0gUklHSFRfRlJJTkdFX0JJVE1B UCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBfZnJpbmdlX2JpdG1hcCAoYml0 bWFwX2ZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOT19GUklOR0VfQklUTUFQ OworICAgICAgICAgIGZhY2VfaWQgPSAoY3Vyc29yX3R5cGUgPT0gUklHSFRfRlJJTkdFX0JJVE1B UCkKKyAgICAgICAgICAgICAgICAgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu ICgiKy12ZXJ0aWNhbC1iYXItZmFjZSIpLCB0cnVlKQorICAgICAgICAgICAgICAgICAgICA6IERF RkFVTFRfRkFDRV9JRDsKKyAgICAgICAgICBnbHlwaF9yb3ctPmN1cnNvcl9pbl9mcmluZ2VfcCA9 IGZhbHNlOworICAgICAgICAgIGdseXBoX3Jvdy0+ZnJpbmdlX2JpdG1hcF9wZXJpb2RpY19wID0g MDsKKyAgICAgICAgICBnbHlwaF9yb3ctPnJpZ2h0X2ZyaW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0 bWFwOworICAgICAgICAgIGdseXBoX3Jvdy0+cmlnaHRfZnJpbmdlX2ZhY2VfaWQgPSBmYWNlX2lk OworICAgICAgICAgIGdseXBoX3Jvdy0+cmlnaHRfZnJpbmdlX29mZnNldCA9IDA7CisgICAgICAg ICAgZHJhd19mcmluZ2VfYml0bWFwICh3LCBnbHlwaF9yb3csIGZhbHNlKTsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmIChmbGF2b3IgPT0gTUNfR0xZUEgKKyAgICAgICAgICAgICAgICAgfHwg Zmxhdm9yID09IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNf R0xZUEhfVEFCKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHctPm1jLmggPSBoOworICAgICAg ICAgICAgdy0+bWMuZnggPSBmeDsKKyAgICAgICAgICAgIHctPm1jLmZ5ID0gZnk7CisgICAgICAg ICAgICB3LT5tYy5nbHlwaF9mbGF2b3IgPSBmbGF2b3I7CisgICAgICAgICAgICB3LT5tYy5yZWQg PSBYRkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAwKSk7CisgICAgICAgICAgICB3LT5t Yy5ncmVlbiA9IFhGTE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDEpKTsKKyAgICAgICAg ICAgIHctPm1jLmJsdWUgPSBYRkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAyKSk7Cisg ICAgICAgICAgICB3LT5tYy5wb3NpbnQgPSBwb3NpbnQ7CisgICAgICAgICAgICAvKiBTb21lIG9m IHRoZXNlIHZhbHVlcyBjb21lIHRocm91Z2ggYXMgMS4wMDM5MDYsIHdoaWNoIGNhdXNlcyBhIGJy ZWFrYWdlCisgICAgICAgICAgICBvZiB0aGUgY29sb3JzIGluIHRoYXQgbXVsdGlwbGljYXRpb24g YnkgdGhlIGJhc2Ugd2lsbCBleGNlZWQgdGhlIGJhc2UuICovCisgICAgICAgICAgICBpZiAody0+ bWMucmVkID4gMS4wKQorICAgICAgICAgICAgICB3LT5tYy5yZWQgPSAxLjA7CisgICAgICAgICAg ICBpZiAody0+bWMuZ3JlZW4gPiAxLjApCisgICAgICAgICAgICAgIHctPm1jLmdyZWVuID0gMS4w OworICAgICAgICAgICAgaWYgKHctPm1jLmJsdWUgPiAxLjApCisgICAgICAgICAgICAgIHctPm1j LmJsdWUgPSAxLjA7CisgICAgICAgICAgICBGUkFNRV9SSUYgKGYpLT5kcmF3X3dpbmRvd19jdXJz b3IgKHcsIGdseXBoX3JvdywgeCwgeSwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgdHJ1ZSwgYWN0aXZlX3Ap OworICAgICAgICAgICAgdy0+bWMuaCA9IC0xOworICAgICAgICAgICAgdy0+bWMuZnggPSAtMTsK KyAgICAgICAgICAgIHctPm1jLmZ5ID0gLTE7CisgICAgICAgICAgICB3LT5tYy5nbHlwaF9mbGF2 b3IgPSBOT19GTEFWT1I7CisgICAgICAgICAgICB3LT5tYy5yZWQgPSAtMS4wOworICAgICAgICAg ICAgdy0+bWMuZ3JlZW4gPSAtMS4wOworICAgICAgICAgICAgdy0+bWMuYmx1ZSA9IC0xLjA7Cisg ICAgICAgICAgICB3LT5tYy5wb3NpbnQgPSAtMTsKKyAgICAgICAgICB9CisgIC8qIFJlc3RvcmUg dGhlIHByZXZpb3VzIHZhbHVlcyBmb3Igdy0+cGh5c19jdXJzb3IgYW5kIGdseXBoX3Jvdy4gKi8K KyAgdy0+cGh5c19jdXJzb3Jfb25fcCA9IHBoeXNfY3Vyc29yX29uX3A7CisgIHctPnBoeXNfY3Vy c29yLnggPSBwaHlzX2N1cnNvcl94OworICB3LT5waHlzX2N1cnNvci55ID0gcGh5c19jdXJzb3Jf eTsKKyAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IHBoeXNfY3Vyc29yX2hwb3M7CisgIHctPnBoeXNf Y3Vyc29yLnZwb3MgPSBwaHlzX2N1cnNvcl92cG9zOworICB3LT5waHlzX2N1cnNvcl90eXBlID0g cGh5c19jdXJzb3JfdHlwZTsKKyAgZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSBjdXJz b3JfaW5fZnJpbmdlX3A7CisgIGdseXBoX3Jvdy0+cmV2ZXJzZWRfcCA9IHJldmVyc2VkX3A7Cisg IHctPnBoeXNfY3Vyc29yX2FzY2VudCA9IHBoeXNfY3Vyc29yX2FzY2VudDsKKyAgdy0+cGh5c19j dXJzb3JfaGVpZ2h0ID0gcGh5c19jdXJzb3JfaGVpZ2h0OworICB3LT5waHlzX2N1cnNvcl93aWR0 aCA9IHBoeXNfY3Vyc29yX3dpZHRoOworfQorCisvKiBEdW1wIGNvbnRlbnRzIG9mIGdseXBoIEdM WVBIIHRvIHN0ZGVyci4gIFJPVyBhbmQgQVJFQSBhcmUKKyAgIHRoZSBnbHlwaCByb3cgYW5kIGFy ZWEgd2hlcmUgdGhlIGdseXBoIGNvbWVzIGZyb20uICAqLworCit2b2lkCittY19kdW1wX2dseXBo IChzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csIHN0cnVjdCBnbHlwaCAqZ2x5cGgsIGludCBhcmVhLCBp bnQgcmVsYXRpdmVfeCkKK3sKKyAgTGlzcF9PYmplY3QgY2hhcmFjdGVyID0gKENIQVJBQ1RFUlAg KG1ha2VfZml4bnVtIChnbHlwaC0+dS5jaCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/ IEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhudW0gKGdseXBoLT51LmNoKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBRbmlsOworICBpZiAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAor ICAgICAgfHwgZ2x5cGgtPnR5cGUgPT0gR0xZUEhMRVNTX0dMWVBIKQorICAgIHsKKyAgICAgIGZw cmludGYgKHN0ZGVyciwKKyAgICAgICAgIiAlNSJwRCJkLyUtNWQgJTVkICVjICU5InBEImQgJWMg JTNkIDB4JTA2eCAlNGQgJTEuMWQlMS4xZCAlNWQgJTRkICAlM2QgICUzZCAlcyAlc1xuIiwKKyAg ICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNl ZFthcmVhXSA9PSAwKSA/IDAgOiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRp dmVfeCwKKyAgICAgICAgKGdseXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgICAgID8gJ0Mn CisgICAgICAgICA6ICdHJyksCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAoQlVG RkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgID8gJ0InCisgICAgICAgICA6IChTVFJJTkdQ IChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICAgIDogKE5JTFAg KGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAgOiAn LScpKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgZ2x5cGgtPnUuY2gs CisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9w LAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPngsIGds eXBoLT55LCBnbHlwaC0+aHBvcywgZ2x5cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICIt LSIsCisgICAgICAgICgoIU5JTFAgKGNoYXJhY3RlcikKKyAgICAgICAgICYmIGdseXBoLT51LmNo ID09IDkpCisgICAgICAgICAgID8gIlxcdCIKKyAgICAgICAgIDogKCFOSUxQIChjaGFyYWN0ZXIp CisgICAgICAgICAgICAmJiBnbHlwaC0+dS5jaCA9PSAxMCkKKyAgICAgICAgICAgPyAiXFxuIgor ICAgICAgICAgOiAoIU5JTFAgKGNoYXJhY3RlcikKKyAgICAgICAgICAgICYmIGdseXBoLT51LmNo ID09IDMyKQorICAgICAgICAgICA/ICJcXHMiCisgICAgICAgICA6ICghTklMUCAoY2hhcmFjdGVy KQorICAgICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggIT0gOQorICAgICAgICAgICAgJiYgZ2x5cGgt PnUuY2ggIT0gMTAKKyAgICAgICAgICAgICYmIGdseXBoLT51LmNoICE9IDMyKQorICAgICAgICAg ICA/IFNTREFUQSAoY2hhcmFjdGVyKQorICAgICAgICAgOiAiXFw/IikpOworICAgIH0KKyAgZWxz ZSBpZiAoZ2x5cGgtPnR5cGUgPT0gU1RSRVRDSF9HTFlQSCkKKyAgICB7CisgICAgICBmcHJpbnRm IChzdGRlcnIsCisgICAgICAgICIgJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAw eCUwNnggJTRkICUxLjFkJTEuMWQgJTVkICU0ZCAgJTNkICAlM2QgJXMgJXNcbiIsCisgICAgICAg IGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJl YV0gPT0gMCkgPyAwIDogcm93LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gs CisgICAgICAgICdTJywKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQ IChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnQicKKyAgICAgICAgICA6IChTVFJJTkdQ IChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICA6IChOSUxQIChn bHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnMCcKKyAgICAgICAgICA6ICctJykpKSwKKyAg ICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAgICAwdSwKKyAgICAgICAgZ2x5cGgtPmZh Y2VfaWQsCisgICAgICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5y aWdodF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+eCwgZ2x5cGgtPnksIGdseXBoLT5ocG9z LCBnbHlwaC0+dnBvcywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgIlxcUyIp OworICAgIH0KKyAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEgpCisgICAgewor ICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiICU1InBEImQvJS01ZCAlNWQgJWMgJTki cEQiZCAlYyAlM2QgMHglMDZ4ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUzZCAgJTNkICVzICVj XG4iLAorICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgo cm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAg ICByZWxhdGl2ZV94LAorICAgICAgICAnSScsCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAg ICAgICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ0InCisgICAgICAg ICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJ1MnCisgICAgICAg ICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgID8gJzAnCisgICAgICAgICAg OiAnLScpKSksCisgICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgKHVuc2lnbmVk IGludCkgZ2x5cGgtPnUuaW1nX2lkLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAg Z2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3As CisgICAgICAgIGdseXBoLT54LCBnbHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBn bHlwaC0+enZfcCA/ICJaViIgOiAiLS0iLAorICAgICAgICAnLicpOworICAgIH0KKyAgZWxzZSBp ZiAoZ2x5cGgtPnR5cGUgPT0gQ09NUE9TSVRFX0dMWVBIKQorICAgIHsKKyAgICAgIGZwcmludGYg KHN0ZGVyciwKKyAgICAgICAgIiAlNSJwRCJkLyUtNWQgJTVkICVjICU5InBEImQgJWMgJTNkIDB4 JTA2eCIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSwKKyAgICAgICAg KChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93LT51c2VkW2FyZWFdIC0gMSksCisgICAg ICAgIHJlbGF0aXZlX3gsCisgICAgICAgICcrJywKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3MsCisg ICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnQicKKyAgICAg ICAgICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAg ICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAgICAgICAgICAgPyAnMCcKKyAgICAgICAg ICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAgICAodW5zaWdu ZWQgaW50KSBnbHlwaC0+dS5jbXAuaWQpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICU0ZCAl MS4xZCUxLjFkIiwKKyAgICAgICAgZ2x5cGgtPmZhY2VfaWQsCisgICAgICAgIGdseXBoLT5sZWZ0 X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGluZV9wKTsKKyAgICAgIGlm IChnbHlwaC0+dS5jbXAuYXV0b21hdGljKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgJTVk ICU0ZCAgJTNkICAlM2QgJXMgLiBbJWQtJWRdXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg IGdseXBoLT54LCBnbHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBnbHlwaC0+enZf cCA/ICJaViIgOiAiLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5zbGljZS5j bXAuZnJvbSwgZ2x5cGgtPnNsaWNlLmNtcC50byk7CisgICAgICAgIGVsc2UKKyAgICAgICAgZnBy aW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisgIGVsc2UgaWYgKGdseXBoLT50eXBlID09IFhX SURHRVRfR0xZUEgpCisgICAgeworI2lmbmRlZiBIQVZFX1hXSURHRVRTCisgICAgICBlYXNzdW1l IChmYWxzZSk7CisjZWxzZQorICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAiICAlNWQv JS01ZCAlNWQgJTRjICU2ZCAlYyAlM2QgMHglMDV4ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUz ZCAgJTNkICVzICVjXG4iLAorICAgICAgICBnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0s CisgICAgICAgICgocm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAt IDEpLAorICAgICAgICByZWxhdGl2ZV94LAorICAgICAgICAnWCcsCisgICAgICAgIGdseXBoLT5j aGFycG9zLAorICAgICAgICAoQlVGRkVSUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAgICAgICAgPyAn QicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAgICAgICAgICA/ICdT JworICAgICAgICAgOiAnLScpKSwKKyAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAg ICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRfYm94X2xpbmVfcCwKKyAgICAg ICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT51Lnh3aWRnZXQsCisg ICAgICAgIGdseXBoLT54LCBnbHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBnbHlw aC0+enZfcCA/ICJaViIgOiAiLS0iLAorICAgICAgICAnLicpOworI2VuZGlmCisgICAgfQorfQor CisvKiBEdW1wIHRoZSBjb250ZW50cyBvZiBnbHlwaCByb3cgYXQgVlBPUyBpbiBNQVRSSVggdG8g c3RkZXJyLgorICAgR0xZUEhTIDAgbWVhbnMgZG9uJ3Qgc2hvdyBnbHlwaCBjb250ZW50cy4KKyAg IEdMWVBIUyAxIG1lYW5zIHNob3cgZ2x5cGhzIGluIHNob3J0IGZvcm0KKyAgIEdMWVBIUyA+IDEg bWVhbnMgc2hvdyBnbHlwaHMgaW4gbG9uZyBmb3JtLiAgKi8KKwordm9pZAorbWNfZHVtcF9nbHlw aF9yb3cgKHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHZwb3MsIGludCBnbHlwaHMpCit7Cisg IGludCByZWxhdGl2ZV94ID0gMDsKKyAgaWYgKGdseXBocyAhPSAxKQorICAgIHsKKyAgICAgIGZw cmludGYgKHN0ZGVyciwgIlxuRFVNUCBHTFlQSCBST1dcbiIpOworICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiUm93ICAgICBTdGFydCAgICAgICBFbmQgVXNlZCBvRT48XFxDVFpGZXNtICAgICBYICAg IFkgICAgVyAgICBIICAgIFYgICAgQSAgICBQXG4iKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwg Ij09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIlM2Qg JTkicEQiZCAlOSJwRCJkICU0ZCAlMS4xZCUxLjFkJTEuMWQlMS4xZFwKKyUxLjFkJTEuMWQlMS4x ZCUxLjFkJTEuMWQlMS4xZCUxLjFkJTEuMWQgICU0ZCAlNGQgJTRkICU0ZCAlNGQgJTRkICU0ZFxu IiwKKyAgICAgICAgIHZwb3MsCisgICAgICAgICBNQVRSSVhfUk9XX1NUQVJUX0NIQVJQT1MgKHJv dyksCisgICAgICAgICBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpLAorICAgICAgICAgcm93 LT51c2VkW1RFWFRfQVJFQV0sCisgICAgICAgICByb3ctPmNvbnRhaW5zX292ZXJsYXBwaW5nX2ds eXBoc19wLAorICAgICAgICAgcm93LT5lbmFibGVkX3AsCisgICAgICAgICByb3ctPnRydW5jYXRl ZF9vbl9sZWZ0X3AsCisgICAgICAgICByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wLAorICAgICAg ICAgcm93LT5jb250aW51ZWRfcCwKKyAgICAgICAgIE1BVFJJWF9ST1dfQ09OVElOVUFUSU9OX0xJ TkVfUCAocm93KSwKKyAgICAgICAgIE1BVFJJWF9ST1dfRElTUExBWVNfVEVYVF9QIChyb3cpLAor ICAgICAgICAgcm93LT5lbmRzX2F0X3p2X3AsCisgICAgICAgICByb3ctPmZpbGxfbGluZV9wLAor ICAgICAgICAgcm93LT5lbmRzX2luX21pZGRsZV9vZl9jaGFyX3AsCisgICAgICAgICByb3ctPnN0 YXJ0c19pbl9taWRkbGVfb2ZfY2hhcl9wLAorICAgICAgICAgcm93LT5tb3VzZV9mYWNlX3AsCisg ICAgICAgICByb3ctPngsCisgICAgICAgICByb3ctPnksCisgICAgICAgICByb3ctPnBpeGVsX3dp ZHRoLAorICAgICAgICAgcm93LT5oZWlnaHQsCisgICAgICAgICByb3ctPnZpc2libGVfaGVpZ2h0 LAorICAgICAgICAgcm93LT5hc2NlbnQsCisgICAgICAgICByb3ctPnBoeXNfYXNjZW50KTsKKyAg ICAgIC8qIFRoZSBuZXh0IDMgbGluZXMgc2hvdWxkIGFsaWduIHRvICJTdGFydCIgaW4gdGhlIGhl YWRlci4gICovCisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgJTkicEQiZCAlOSJwRCJkXHQl NWRcbiIsIHJvdy0+c3RhcnQub3ZlcmxheV9zdHJpbmdfaW5kZXgsCisgICAgICAgICByb3ctPmVu ZC5vdmVybGF5X3N0cmluZ19pbmRleCwKKyAgICAgICAgIHJvdy0+Y29udGludWF0aW9uX2xpbmVz X3dpZHRoKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICAlOSJwRCJkICU5InBEImRcbiIs CisgICAgICAgICBDSEFSUE9TIChyb3ctPnN0YXJ0LnN0cmluZ19wb3MpLAorICAgICAgICAgQ0hB UlBPUyAocm93LT5lbmQuc3RyaW5nX3BvcykpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICAg ICU5ZCAlOWRcbiIsIHJvdy0+c3RhcnQuZHB2ZWNfaW5kZXgsCisgICAgICAgICByb3ctPmVuZC5k cHZlY19pbmRleCk7CisgICAgfQorICBpZiAoZ2x5cGhzID4gMSkKKyAgICB7CisgICAgICBpbnQg YXJlYTsKKyAgICAgIGZvciAoYXJlYSA9IExFRlRfTUFSR0lOX0FSRUE7IGFyZWEgPCBMQVNUX0FS RUE7ICsrYXJlYSkKKyAgeworICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBoc1th cmVhXTsKKyAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoX2VuZCA9IGdseXBoICsgcm93LT51c2VkW2Fy ZWFdOworICAgIC8qIEdseXBoIGZvciBhIGxpbmUgZW5kIGluIHRleHQuICAqLworICAgIGlmIChh cmVhID09IFRFWFRfQVJFQSAmJiBnbHlwaCA9PSBnbHlwaF9lbmQgJiYgZ2x5cGgtPmNoYXJwb3Mg PiAwKQorICAgICAgKytnbHlwaF9lbmQ7CisgICAgaWYgKGdseXBoIDwgZ2x5cGhfZW5kKQorICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiR2x5cGgjL1RvdGFsIFJlbC5YIFQgICAgICAgUG9zIE8gICBX ICAgICBDb2RlIEZhY2UgTFIgICAgIFggICAgWSBIUE9TIFZQT1MgWlYgQ1xuIik7CisgICAgZm9y ICg7IGdseXBoIDwgZ2x5cGhfZW5kOyArK2dseXBoKQorICAgICAgeworICAgICAgICBtY19kdW1w X2dseXBoIChyb3csIGdseXBoLCBhcmVhLCByZWxhdGl2ZV94KTsKKyAgICAgICAgcmVsYXRpdmVf eCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAgICB9CisgIH0KKyAgICB9CisgIGVsc2UgaWYg KGdseXBocyA9PSAxKQorICAgIHsKKyAgICAgIGludCBhcmVhOworICAgICAgY2hhciBzW1NIUlRf TUFYICsgNF07CisgICAgICBmb3IgKGFyZWEgPSBMRUZUX01BUkdJTl9BUkVBOyBhcmVhIDwgTEFT VF9BUkVBOyArK2FyZWEpCisgIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcm93 LT51c2VkW2FyZWFdOyArK2kpCisgICAgICB7CisgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGgg PSByb3ctPmdseXBoc1thcmVhXSArIGk7CisgICAgICAgIGlmIChpID09IHJvdy0+dXNlZFthcmVh XSAtIDEKKyAgICAgICYmIGFyZWEgPT0gVEVYVF9BUkVBCisgICAgICAmJiBOSUxQIChnbHlwaC0+ b2JqZWN0KQorICAgICAgJiYgZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgJiYgZ2x5 cGgtPnUuY2ggPT0gJyAnKQorICAgIHsKKyAgICAgIHN0cmNweSAoJnNbaV0sICJbXFxuXSIpOwor ICAgICAgaSArPSA0OworICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0gQ0hB Ul9HTFlQSAorICAgICAgICAgICAmJiBnbHlwaC0+dS5jaCA8IDB4ODAKKyAgICAgICAgICAgJiYg Z2x5cGgtPnUuY2ggPj0gJyAnKQorICAgIHNbaV0gPSBnbHlwaC0+dS5jaDsKKyAgICAgICAgZWxz ZQorICAgIHNbaV0gPSAnLic7CisgICAgICB9CisgICAgc1tpXSA9ICdcMCc7CisgICAgZnByaW50 ZiAoc3RkZXJyLCAiJTNkOiAoJWQpICclcydcbiIsIHZwb3MsIHJvdy0+ZW5hYmxlZF9wLCBzKTsK KyAgfQorICAgIH0KK30KKworREVGVU4gKCJtYy1kdW1wLWdseXBoLXJvdyIsIEZtY19kdW1wX2ds eXBoX3JvdywgU21jX2R1bXBfZ2x5cGhfcm93LCAxLCAyLCAiUCIsCisgICAgICAgZG9jOiAvKiBE dW1wIGdseXBoIHJvdyBST1cgdG8gc3RkZXJyLgorSW50ZXJhY3RpdmVseSwgUk9XIGlzIHRoZSBw cmVmaXggbnVtZXJpYyBhcmd1bWVudCBhbmQgZGVmYXVsdHMgdG8KK3RoZSByb3cgd2hpY2ggZGlz cGxheXMgcG9pbnQuCitPcHRpb25hbCBhcmd1bWVudCBHTFlQSFMgMCBtZWFucyBkb24ndCBkdW1w IGdseXBocy4KK0dMWVBIUyAxIG1lYW5zIGR1bXAgZ2x5cGhzIGluIHNob3J0IGZvcm0uCitHTFlQ SFMgPiAxIG9yIG9taXR0ZWQgbWVhbnMgZHVtcCBnbHlwaHMgaW4gbG9uZyBmb3JtLiAgKi8pCisg IChMaXNwX09iamVjdCByb3csIExpc3BfT2JqZWN0IGdseXBocykKK3sKKyAgc3RydWN0IHdpbmRv dyAqdyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7CisgIHN0cnVjdCBnbHlwaF9tYXRyaXgg Km1hdHJpeDsKKyAgRU1BQ1NfSU5UIHZwb3M7CisgIGlmIChOSUxQIChyb3cpKQorICAgIHsKKyAg ICAgIGludCBkMSwgZDIsIGQzLCBkNCwgZDUsIHlwb3M7CisgICAgICBib29sIHZpc2libGVfcCA9 IHBvc192aXNpYmxlX3AgKHcsIFBULCAmZDEsICZkMiwgJmQzLCAmZDQsICZkNSwgJnlwb3MpOwor ICAgICAgaW50IGhlYWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQg KHcpOworICAgICAgaW50IHZvZmZzZXQgPSAoaGVhZGVyX2xpbmVfaGVpZ2h0ID4gMAorICAgICAg ICAgICAgICAgICAgICAgJiYgeXBvcyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgPyB5cG9z ICsgMQorICAgICAgICAgICAgICAgICAgICAgIDogeXBvczsKKyAgICAgIGlmICh2aXNpYmxlX3Ap CisgICAgICAgIHZwb3MgPSB2b2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgdnBvcyA9 IDA7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgQ0hFQ0tfTlVNQkVSIChyb3cp OworICAgICAgICB2cG9zID0gWEZJWE5VTSAocm93KTsKKyAgICAgIH0KKyAgbWF0cml4ID0gdy0+ Y3VycmVudF9tYXRyaXg7CisgIGlmICh2cG9zID49IDAgJiYgdnBvcyA8IG1hdHJpeC0+bnJvd3Mp CisgICAgbWNfZHVtcF9nbHlwaF9yb3cgKE1BVFJJWF9ST1cgKG1hdHJpeCwgdnBvcyksCisgICAg ICAgIHZwb3MsCisgICAgICAgIFRZUEVfUkFOR0VEX0ZJWE5VTVAgKGludCwgZ2x5cGhzKSA/IFhG SVhOVU0gKGdseXBocykgOiAyKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK3ZvaWQKK21jX2R1bXBf Z2x5cGhfbWF0cml4IChzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXgsIGludCBnbHlwaHMpCit7 CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgbWF0cml4LT5ucm93czsgKytpKQorICAgIG1j X2R1bXBfZ2x5cGhfcm93IChNQVRSSVhfUk9XIChtYXRyaXgsIGkpLCBpLCBnbHlwaHMpOworfQor CitERUZVTiAoIm1jLWR1bXAtZ2x5cGgtbWF0cml4IiwgRm1jX2R1bXBfZ2x5cGhfbWF0cml4LAor ICAgICAgIFNtY19kdW1wX2dseXBoX21hdHJpeCwgMCwgMSwgInAiLAorICAgICAgIGRvYzogLyog RHVtcCB0aGUgY3VycmVudCBtYXRyaXggb2YgdGhlIHNlbGVjdGVkIHdpbmRvdyB0byBzdGRlcnIu CitTaG93cyBjb250ZW50cyBvZiBnbHlwaCByb3cgc3RydWN0dXJlcy4gIFdpdGggbm9uLW5pbAor cGFyYW1ldGVyIEdMWVBIUywgZHVtcCBnbHlwaHMgYXMgd2VsbC4gIElmIEdMWVBIUyBpcyAxIHNo b3cKK2dseXBocyBpbiBzaG9ydCBmb3JtLCBvdGhlcndpc2Ugc2hvdyBnbHlwaHMgaW4gbG9uZyBm b3JtLgorCitJbnRlcmFjdGl2ZWx5LCBubyBhcmd1bWVudCBtZWFucyBzaG93IGdseXBocyBpbiBz aG9ydCBmb3JtOword2l0aCBudW1lcmljIGFyZ3VtZW50LCBpdHMgdmFsdWUgaXMgcGFzc2VkIGFz IHRoZSBHTFlQSFMgZmxhZy4gICovKQorICAoTGlzcF9PYmplY3QgZ2x5cGhzKQoreworICBzdHJ1 Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgc3RydWN0IGJ1ZmZl ciAqYnVmZmVyID0gWEJVRkZFUiAody0+Y29udGVudHMpOworCisgIGZwcmludGYgKHN0ZGVyciwg IlBUID0gJSJwRCJkLCBCRUdWID0gJSJwRCJkLiBaViA9ICUicEQiZFxuIiwKKwkgICBCVUZfUFQg KGJ1ZmZlciksIEJVRl9CRUdWIChidWZmZXIpLCBCVUZfWlYgKGJ1ZmZlcikpOworICBmcHJpbnRm IChzdGRlcnIsICJDdXJzb3IgeCA9ICVkLCB5ID0gJWQsIGhwb3MgPSAlZCwgdnBvcyA9ICVkXG4i LAorCSAgIHctPmN1cnNvci54LCB3LT5jdXJzb3IueSwgdy0+Y3Vyc29yLmhwb3MsIHctPmN1cnNv ci52cG9zKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgbWNfZHVtcF9nbHlwaF9tYXRyaXggKHctPmN1cnJl bnRfbWF0cml4LAorCQkgICAgIFRZUEVfUkFOR0VEX0ZJWE5VTVAgKGludCwgZ2x5cGhzKSA/IFhG SVhOVU0gKGdseXBocykgOiAwKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK3N0YXRpYyB2b2lkCitt Y19oZWxwZXIgKHN0cnVjdCB3aW5kb3cgKncsIGludCB4LCBpbnQgZngsIGludCB5LCBpbnQgZnks IGludCBocG9zLAorICAgICAgICAgICBpbnQgdnBvcywgaW50IGgsIGVudW0gdGV4dF9jdXJzb3Jf a2luZHMgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgIExpc3BfT2Jq ZWN0IGZvcmVncm91bmQsIExpc3BfT2JqZWN0IGJhY2tncm91bmQsIGJvb2wgYWN0aXZlX3AsCisg ICAgICAgICAgIGJvb2wgbWluaW1hbF9wLCBpbnQgZmxhdm9yLCBpbnQgcG9zaW50LCBMaXNwX09i amVjdCAqcmVzdWx0KQoreworICBib29sIG1jX3N0ZGVycl9wID0gIU5JTFAgKEJWQVIgKGN1cnJl bnRfYnVmZmVyLCBtY19zdGRlcnIpKTsKKyAgTGlzcF9PYmplY3Qgd2luZG93OworICBYU0VUV0lO RE9XICh3aW5kb3csIHcpOworICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3Rv X3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdp bmRvd19zdHJpbmcpOworICBkb3VibGUgcmVkX2ZnID0gWEZMT0FUX0RBVEEgKEFSRUYgKGZvcmVn cm91bmQsIDApKTsKKyAgZG91YmxlIGdyZWVuX2ZnID0gWEZMT0FUX0RBVEEgKEFSRUYgKGZvcmVn cm91bmQsIDEpKTsKKyAgZG91YmxlIGJsdWVfZmcgPSBYRkxPQVRfREFUQSAoQVJFRiAoZm9yZWdy b3VuZCwgMikpOworICBpZiAocmVkX2ZnID4gMS4wKQorICAgIHJlZF9mZyA9IDEuMDsKKyAgaWYg KGdyZWVuX2ZnID4gMS4wKQorICAgIGdyZWVuX2ZnID0gMS4wOworICBpZiAoYmx1ZV9mZyA+IDEu MCkKKyAgICBibHVlX2ZnID0gMS4wOworICBkb3VibGUgcmVkX2JnID0gWEZMT0FUX0RBVEEgKEFS RUYgKGJhY2tncm91bmQsIDApKTsKKyAgZG91YmxlIGdyZWVuX2JnID0gWEZMT0FUX0RBVEEgKEFS RUYgKGJhY2tncm91bmQsIDEpKTsKKyAgZG91YmxlIGJsdWVfYmcgPSBYRkxPQVRfREFUQSAoQVJF RiAoYmFja2dyb3VuZCwgMikpOworICBpZiAocmVkX2JnID4gMS4wKQorICAgIHJlZF9iZyA9IDEu MDsKKyAgaWYgKGdyZWVuX2JnID4gMS4wKQorICAgIGdyZWVuX2JnID0gMS4wOworICBpZiAoYmx1 ZV9iZyA+IDEuMCkKKyAgICBibHVlX2JnID0gMS4wOworICBpZiAobWNfc3RkZXJyX3ApCisgICAg ZnByaW50ZiAoc3RkZXJyLCAiXG5tY19oZWxwZXIgKCVzKTpcblwKKyAgeCAoJWQpIHwgZnggKCVk KSB8IHkgKCVkKSB8IGZ5ICglZCkgfCBocG9zICglZCkgfCB2cG9zICglZCkgfCBoICglZClcblwK KyAgY3Vyc29yX3R5cGUgKCVzKSB8IGN1cnNvcl93aWR0aCAoJWQpIHwgYWN0aXZlX3AgKCVzKVxu XAorICBtaW5pbWFsX3AgKCVzKSB8IGZsYXZvciAoJXMpIHwgcG9zaW50ICglZClcblwKKyAgRkct UkdCICglZi8lZi8lZikgfCBCRy1SR0IgKCVmLyVmLyVmKVxuIiwKKyAgd2luZG93X2NoYXIsCisg IHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgaCwKKyAgU1NEQVRBIChGcHJpbjFfdG9fc3RyaW5n IChtY19jdXJzb3JfdHlwZV90b19saXNwIChjdXJzb3JfdHlwZSksIFFuaWwpKSwKKyAgY3Vyc29y X3dpZHRoLAorICAoYWN0aXZlX3AgPyAidHJ1ZSIgOiAiZmFsc2UiKSwKKyAgKG1pbmltYWxfcCA/ ICJ0cnVlIiA6ICJmYWxzZSIpLAorICAoZmxhdm9yID09IE5PX0ZMQVZPUgorICAgICAgPyAiTk9f RkxBVk9SIgorICAgIDogZmxhdm9yID09IE1DX0dMWVBICisgICAgICA/ICJNQ19HTFlQSCIKKyAg ICA6IGZsYXZvciA9PSBNQ19HTFlQSExFU1MKKyAgICAgID8gIk1DX0dMWVBITEVTUyIKKyAgICA6 IGZsYXZvciA9PSBNQ19HTFlQSF9UQUIKKyAgICAgID8gIk1DX0dMWVBIX1RBQiIKKyAgICA6IGZs YXZvciA9PSBNQ19PVkVSTEFZX0FSUk9XX0JJVE1BUAorICAgICAgPyAiTUNfT1ZFUkxBWV9BUlJP V19CSVRNQVAiCisgICAgOiBmbGF2b3IgPT0gTUNfUElMQ1JPVworICAgICAgPyAiTUNfUElMQ1JP VyIKKyAgICA6IGZsYXZvciA9PSBNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAg ICA/ICJNQ19IT0xMT1dfUkVDVEFOR0xFX1JJR0hUX0FSUk9XIgorICAgIDogZmxhdm9yID09IE1D X0hPTExPV19SRUNUQU5HTEUKKyAgICAgID8gIk1DX0hPTExPV19SRUNUQU5HTEUiCisgICAgOiBm bGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICA/ICJNQ19WRVJUSUNB TF9CQVJfUklHSFRfQVJST1ciCisgICAgOiBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSCisgICAg ICA/ICJNQ19WRVJUSUNBTF9CQVIiCisgICAgOiBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JB Q0tTTEFTSAorICAgICAgPyAiTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSCIKKyAgICA6ICJPT1BT IiksCisgIHBvc2ludCwKKyAgcmVkX2ZnLCBncmVlbl9mZywgYmx1ZV9mZywgcmVkX2JnLCBncmVl bl9iZywgYmx1ZV9iZyk7CisgIGJvb2wgcmVtb3ZlX3AgPSBmYWxzZTsKKyAgbWNfZHJhd19lcmFz ZV9oeWJyaWQgKHcsIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgaCwgY3Vyc29yX3R5cGUsCisg ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGFjdGl2ZV9w LCBtaW5pbWFsX3AsCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF2b3IsIHBvc2ludCwgcmVt b3ZlX3ApOworICBMaXNwX09iamVjdCBmaWZ0ZWVuX2VsZW1lbnRzID0gbGlzdG4gKENPTlNUWVBF X0hFQVAsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl X2ZpeG51bSAoeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VfZml4bnVtIChmeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VfZml4bnVtICh5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZV9maXhudW0gKGZ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZV9maXhudW0gKGhwb3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlX2ZpeG51bSAodnBvcyksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtIChoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWNfY3Vyc29yX3R5cGVfdG9fbGlzcCAoY3Vyc29yX3R5cGUpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAoY3Vy c29yX3dpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y ZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dy b3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhu dW0gKGFjdGl2ZV9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFrZV9maXhudW0gKG1pbmltYWxfcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2VfZml4bnVtIChmbGF2b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAocG9zaW50KSk7CisgICpyZXN1bHQgPSBGY29u cyAoZmlmdGVlbl9lbGVtZW50cywgKnJlc3VsdCk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIg dG8gdGhlIGdseXBoIFcncyBwaHlzaWNhbCBjdXJzb3IgaXMgb24uICBWYWx1ZSBpcworICAgbnVs bCBpZiBXJ3MgY3VycmVudCBtYXRyaXggaXMgaW52YWxpZCwgc28gdGhhdCBubyBtZWFuaW5nZnVs IGdseXBoCisgICBjYW4gYmUgcmV0dXJuZWQuICAqLworCitzdHJ1Y3QgZ2x5cGggKgorbWNfZ2V0 X3BoeXNfY3Vyc29yX2dseXBoIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgeCwgaW50IGhwb3MsIGlu dCB2cG9zKQoreworICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7CisgIHN0cnVjdCBnbHlwaCAqZ2x5 cGg7CisgIGlmICghKHZwb3MgPj0gMAorICAgICAgICAmJiB2cG9zIDwgdy0+Y3VycmVudF9tYXRy aXgtPm5yb3dzKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcm93ID0gTUFUUklYX1JPVyAody0+Y3Vy cmVudF9tYXRyaXgsIHZwb3MpOworICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgIHJldHVybiBO VUxMOworICBpZiAody0+aHNjcm9sbCkKKyAgICB7CisgICAgICAvKiBXaGVuIHRoZSB3aW5kb3cg aXMgaHNjcm9sbGVkLCBjdXJzb3IgaHBvcyBjYW4gbGVnaXRpbWF0ZWx5IGJlCisgICAgICBvdXQg b2YgYm91bmRzLCBidXQgd2UgZHJhdyB0aGUgY3Vyc29yIGF0IHRoZSBjb3JyZXNwb25kaW5nCisg ICAgICB3aW5kb3cgbWFyZ2luIGluIHRoYXQgY2FzZS4gICovCisgICAgICBpZiAoIXJvdy0+cmV2 ZXJzZWRfcCAmJiBocG9zIDwgMCkKKyAgICAgICAgaHBvcyA9IDA7CisgICAgICBpZiAocm93LT5y ZXZlcnNlZF9wICYmIGhwb3MgPj0gcm93LT51c2VkW1RFWFRfQVJFQV0pCisgICAgICAgIGhwb3Mg PSByb3ctPnVzZWRbVEVYVF9BUkVBXSAtIDE7CisgICAgfQorICBpZiAoMCA8PSBocG9zICYmIGhw b3MgPCByb3ctPnVzZWRbVEVYVF9BUkVBXSkKKyAgICBnbHlwaCA9IHJvdy0+Z2x5cGhzW1RFWFRf QVJFQV0gKyBocG9zOworICAgIGVsc2UKKyAgICAgIGdseXBoID0gTlVMTDsKKyAgcmV0dXJuIGds eXBoOworfQorCisvKiBNVUxUSVBMRV9DVVJTT1JTOiAgV2UgZG8gbm90IHVzZSB0aGlzIGZ1bmN0 aW9uLgorICAgSE9SSVpPTlRBTF9SVUxFUjogIFdlIHdhbnQgYSB1bml2ZXJzYWwgZnkgY29vcmRp bmF0ZSBmb3IgYSBsZXZlbCBydWxlci4KKyAgIFZFUlRJQ0FMX1JVTEVSOiAgV2Ugd2FudCBhbiBo IHRoYXQgZW5zdXJlcyBubyBnYXAgYmV0d2VlbiBwcmV2aW91cy9uZXh0IGxpbmUuCisgICAgICAg ICAgICAgICAgICAgIFRoZSBmeCBjb29yZGluYXRlIGlzIHNldCBlbHNld2hlcmUgYmFzZWQgdXBv biBvcG9pbnRfeC4gKi8KKwordm9pZAorbWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5IChzdHJ1 Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCB4LCBpbnQgKmZ4LCBpbnQgeSwgaW50ICpmeSwgaW50IGhwb3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2cG9zLCBpbnQgKmgsIGVudW0gdGV4 dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjdXJzb3Jfd2lkdGgsIGludCAqd2QpCit7CisgIHN0cnVjdCBnbHlwaCAqZmFrZV9waHlz X2N1cnNvcl9nbHlwaCA9IG1jX2dldF9waHlzX2N1cnNvcl9nbHlwaCAodywgeCwgaHBvcywgdnBv cyk7CisgIGlmIChmYWtlX3BoeXNfY3Vyc29yX2dseXBoICE9IE5VTEwpCisgICAgeworICAgICAg c3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgICAgIGludCBo X3RlbXAsIGgwLCB5MCwgYXNjZW50OworICAgICAgLyogQ29tcHV0ZSB0aGUgd2lkdGggb2YgdGhl IHJlY3RhbmdsZSB0byBkcmF3LiAgSWYgb24gYSBzdHJldGNoCisgICAgICAgICBnbHlwaCwgYW5k IGB4LXN0cmV0Y2gtYmxvY2stY3Vyc29yJyBpcyBuaWwsIGRvbid0IGRyYXcgYQorICAgICAgICAg cmVjdGFuZ2xlIGFzIHdpZGUgYXMgdGhlIGdseXBoLCBidXQgdXNlIGEgY2Fub25pY2FsIGNoYXJh Y3RlcgorICAgICAgICAgd2lkdGggaW5zdGVhZC4gICovCisgICAgICAqd2QgPSBzY3JhdGNoX2ds eXBocy0+cGl4ZWxfd2lkdGg7CisgICAgICBpZiAoeCA8IDApCisgICAgICAgIHsKKyAgICAgICAg ICAqd2QgKz0geDsKKyAgICAgICAgICB4ID0gMDsKKyAgICAgICAgfQorICAgICAgaWYgKHNjcmF0 Y2hfZ2x5cGhzLT50eXBlID09IFNUUkVUQ0hfR0xZUEgKKyAgICAgICAgICAmJiAheF9zdHJldGNo X2N1cnNvcl9wKQorICAgICAgICAqd2QgPSBtaW4gKEZSQU1FX0NPTFVNTl9XSURUSCAoZiksICp3 ZCk7CisgICAgICAvKiBEb24ndCBsZXQgdGhlIGhvbGxvdyBjdXJzb3IgZ2x5cGggZGVzY2VuZCBi ZWxvdyB0aGUgZ2x5cGggcm93J3MKKyAgICAgICAgIGFzY2VudCB2YWx1ZSwgbGVzdCB0aGUgaG9s bG93IGN1cnNvciBsb29rcyBmdW5ueS4gICovCisgICAgICBhc2NlbnQgPSBnbHlwaF9yb3ctPmFz Y2VudDsKKyAgICAgIGlmIChnbHlwaF9yb3ctPmFzY2VudCA8IHNjcmF0Y2hfZ2x5cGhzLT5hc2Nl bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5IC09IHNjcmF0Y2hfZ2x5cGhzLT5hc2NlbnQgLSBn bHlwaF9yb3ctPmFzY2VudDsKKyAgICAgICAgICBhc2NlbnQgPSBzY3JhdGNoX2dseXBocy0+YXNj ZW50OworICAgICAgICB9CisgICAgICAvKiBJZiB5IGlzIGJlbG93IHdpbmRvdyBib3R0b20sIGVu c3VyZSB0aGF0IHdlIHN0aWxsIHNlZSBhIGN1cnNvci4KKyAgICAgIEFzIHRvIEZSQU1FX0xJTkVf SEVJR0hUIHZlcnN1cyBnbHlwaF9yb3ctPnZpc2libGVfaGVpZ2h0LCBwcmVmZXIgdGhlIE1BWC4g Ki8KKyAgICAgIGgwID0gbWF4IChGUkFNRV9MSU5FX0hFSUdIVCAoZiksIGdseXBoX3Jvdy0+dmlz aWJsZV9oZWlnaHQpOworICAgICAgaF90ZW1wID0gbWF4IChoMCwgYXNjZW50ICsgc2NyYXRjaF9n bHlwaHMtPmRlc2NlbnQpOworICAgICAgaDAgPSBtaW4gKGgwLCBhc2NlbnQgKyBzY3JhdGNoX2ds eXBocy0+ZGVzY2VudCk7CisgICAgICB5MCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcp OworICAgICAgaWYgKHkgPCB5MCkKKyAgICAgICAgeworICAgICAgICAgIGhfdGVtcCA9IG1heCAo aF90ZW1wIC0gKHkwIC0geSkgKyAxLCBoMCk7CisgICAgICAgICAgeSA9IHkwIC0gMTsKKyAgICAg ICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgeTAgPSB3aW5kb3dfdGV4dF9i b3R0b21feSAodykgLSBoMDsKKyAgICAgICAgICBpZiAoeSA+IHkwKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBoX3RlbXAgKz0geSAtIHkwOworICAgICAgICAgICAgICB5ID0geTA7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICpmeCA9IFdJTkRPV19URVhUX1RPX0ZSQU1F X1BJWEVMX1ggKHcsIHgpOworICAgICAgKmZ5ID0gV0lORE9XX1RPX0ZSQU1FX1BJWEVMX1kgKHcs IHkpOworICAgICAgKmggPSBoX3RlbXA7CisgICAgICBpZiAoY3Vyc29yX3R5cGUgPT0gSEJBUl9D VVJTT1IpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgY3Vyc29yX2hlaWdodCA9IChjdXJzb3Jf d2lkdGggPCAxKSA/IGxyaW50ICgwLjI1ICogKmgpIDogY3Vyc29yX3dpZHRoOworICAgICAgICAg IGlmIChjdXJzb3JfaGVpZ2h0ID4gZ2x5cGhfcm93LT5oZWlnaHQpCisgICAgICAgICAgICBjdXJz b3JfaGVpZ2h0ID0gZ2x5cGhfcm93LT5oZWlnaHQ7CisgICAgICAgICAgaWYgKCpoID4gY3Vyc29y X2hlaWdodCkKKyAgICAgICAgICAgICpmeSArPSAqaCAtIGN1cnNvcl9oZWlnaHQ7CisgICAgICAg ICAgKmggPSBjdXJzb3JfaGVpZ2h0OworICAgICAgICB9CisgICAgfQorfQorCisvKiBSZXR1cm4g dGhlIHN0YXJ0IG9yIGVuZCBwb3NpdGlvbiBvZiB0aGUgcmVnaW9uLgorICAgQkVHSU5OSU5HUCBt ZWFucyByZXR1cm4gdGhlIHN0YXJ0LgorICAgSWYgdGhlcmUgaXMgbm8gcmVnaW9uIGFjdGl2ZSwg c2lnbmFsIGFuIGVycm9yLgorICAgRVhBTVBMRSAocmVnaW9uLWJlZ2lubmluZyk6ICByZWdpb25f bGltaXQgKDEpCisgICBFWEFNUExFIChyZWdpb24tZW5kKTogIHJlZ2lvbl9saW1pdCAoMCkgKi8K Kworc3RhdGljIExpc3BfT2JqZWN0CittY19yZWdpb25fbGltaXQgKGJvb2wgYmVnaW5uaW5ncCkK K3sKKyAgTGlzcF9PYmplY3QgbTsKKyAgaWYgKCFOSUxQIChWdHJhbnNpZW50X21hcmtfbW9kZSkK KyAgICAgICYmIE5JTFAgKFZtYXJrX2V2ZW5faWZfaW5hY3RpdmUpCisgICAgICAmJiBOSUxQIChC VkFSIChjdXJyZW50X2J1ZmZlciwgbWFya19hY3RpdmUpKSkKKyAgICByZXR1cm4gUW5pbDsKKyAg bSA9IEZtYXJrZXJfcG9zaXRpb24gKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtYXJrKSk7CisgIGlm IChOSUxQIChtKSkKKyAgICByZXR1cm4gUW5pbDsKKyAgLyogU2VlIGByZWdpb24tYWN0aXZlLXAn IGFuZCBgcmVkaXNwbGF5LS11cGRhdGUtcmVnaW9uLWhpZ2hsaWdodCcuICovCisgIGlmICghTklM UCAoVnRyYW5zaWVudF9tYXJrX21vZGUpCisgICAgICAmJiAhTklMUCAoQlZBUiAoY3VycmVudF9i dWZmZXIsIG1hcmtfYWN0aXZlKSkKKyAgICAgICYmICFOSUxQIChtKSkKKyAgICByZXR1cm4gbWFr ZV9maXhudW0gKChQVCA8IFhGSVhOQVQgKG0pKSA9PSBiZWdpbm5pbmdwCisgICAgICAgICAgICAg ICAgICAgICAgICA/IFBUCisgICAgICAgICAgICAgICAgICAgICAgICA6IGNsaXBfdG9fYm91bmRz IChCRUdWLCBYRklYTkFUIChtKSwgWlYpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFFu aWw7Cit9CisKK3ZvaWQKK21jX2VuZ2luZSAoc3RydWN0IGdseXBoX3JvdyAqcm93LCBzdHJ1Y3Qg Z2x5cGggKmdseXBoLCBpbnQgYXJlYSwgaW50IHJlbGF0aXZlX3gsCisgICAgICAgICAgICBzdHJ1 Y3Qgd2luZG93ICp3LCBwdHJkaWZmX3QgcG9zaW50LCBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1 cnNvcl90eXBlLAorICAgICAgICAgICAgaW50IGN1cnNvcl93aWR0aCwgTGlzcF9PYmplY3QgZm9y ZWdyb3VuZCwgYm9vbCBhY3RpdmVfcCwKKyAgICAgICAgICAgIGJvb2wgbWluaW1hbF9wLCBlbnVt IHR5cGVfb2ZfYWN0aW9uIGFjdGlvbl90eXBlLCBMaXNwX09iamVjdCAqcmVzdWx0KQoreworICBi b29sIG1jX3N0ZGVycl9wID0gIU5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtY19zdGRlcnIp KTsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54OworICBpbnQgb3BvaW50X3kg PSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IHctPm91dHB1dF9jdXJz b3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0X2N1cnNvci52cG9zOworICBM aXNwX09iamVjdCBjaGFyYWN0ZXIgPSAoQ0hBUkFDVEVSUCAobWFrZV9maXhudW0gKGdseXBoLT51 LmNoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgID8gRmNoYXJfdG9fc3RyaW5nIChtYWtl X2ZpeG51bSAoZ2x5cGgtPnUuY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFuaWw7 CisgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBMaXNwX09iamVjdCBi dWYgPSB3LT5jb250ZW50czsKKyAgQ0hFQ0tfQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVy ICpiID0gWEJVRkZFUiAoYnVmKTsKKyAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hf d2lkdGggKHcsIFRFWFRfQVJFQSk7CisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09M VU1OX1dJRFRIIChmKTsKKyAgYm9vbCBmaWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZp bGxfY29sdW1uKSk7CisgIGludCBmaWxsX2NvbCA9IFhGSVhOVU0gKEJWQVIgKGIsIGZpbGxfY29s dW1uKSk7CisgIGludCBmaWxsX2NvbHVtbl94ID0gKGZpbGxfY29sdW1uX3ApCisgICAgICAgICAg ICAgICAgICAgICAgPyBmaWxsX2NvbCAqIGZyYW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAg ICAgICAgICA6IDA7CisgIGludCB0ZW1wX3ggPSByZWxhdGl2ZV94OworICBpbnQgdGVtcF95ID0g cm93LT55OworICBpbnQgdGVtcF9ocG9zID0gZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFd OworICBpbnQgdGVtcF92cG9zID0gTUFUUklYX1JPV19WUE9TIChyb3csIHctPmN1cnJlbnRfbWF0 cml4KTsKKyAgaW50IHRlbXBfZmFjZV9pZCA9IGdseXBoLT5mYWNlX2lkOworICBpbnQgdGVtcF9j aGFycG9zID0gZ2x5cGgtPmNoYXJwb3M7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyog ICAgICAgICAgICAgICAgICAgICAgIEJFR0lOOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQ SCAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgaWYgKGds eXBoLT50eXBlID09IENIQVJfR0xZUEgKKyAgICAgIHx8IGdseXBoLT50eXBlID09IEdMWVBITEVT U19HTFlQSCkKKyAgeworICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVy ciwKKyAgICAgICAgIlxuICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4 ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUzZCAgJTNkICVzICVzXG4iLAorICAgICAgICBnbHlw aCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgocm93LT51c2VkW2FyZWFdID09 IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICByZWxhdGl2ZV94LAorICAg ICAgICAoZ2x5cGgtPnR5cGUgPT0gQ0hBUl9HTFlQSAorICAgICAgICAgPyAnQycKKyAgICAgICAg IDogJ0cnKSwKKyAgICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlw aC0+b2JqZWN0KQorICAgICAgICAgPyAnQicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5v YmplY3QpCisgICAgICAgICAgICA/ICdTJworICAgICAgICAgICAgOiAoTklMUCAoZ2x5cGgtPm9i amVjdCkKKyAgICAgICAgICAgICAgID8gJzAnCisgICAgICAgICAgICAgICA6ICctJykpKSwKKyAg ICAgICAgICAgICAgZ2x5cGgtPnBpeGVsX3dpZHRoLAorICAgICAgICBnbHlwaC0+dS5jaCwKKyAg ICAgICAgZ2x5cGgtPmZhY2VfaWQsCisgICAgICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3AsCisg ICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+eCwgZ2x5cGgt PnksIGdseXBoLT5ocG9zLCBnbHlwaC0+dnBvcywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0tIiwK KyAgICAgICAgKCghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggPT0g OSkKKyAgICAgICAgICAgPyAiXFx0IgorICAgICAgICAgOiAoIU5JTFAgKGNoYXJhY3RlcikKKyAg ICAgICAgICAgICYmIGdseXBoLT51LmNoID09IDEwKQorICAgICAgICAgICA/ICJcXG4iCisgICAg ICAgICA6ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggPT0g MzIpCisgICAgICAgICAgID8gIlxccyIKKyAgICAgICAgIDogKCFOSUxQIChjaGFyYWN0ZXIpCisg ICAgICAgICAgICAmJiBnbHlwaC0+dS5jaCAhPSA5CisgICAgICAgICAgICAmJiBnbHlwaC0+dS5j aCAhPSAxMAorICAgICAgICAgICAgJiYgZ2x5cGgtPnUuY2ggIT0gMzIpCisgICAgICAgICAgID8g U1NEQVRBIChjaGFyYWN0ZXIpCisgICAgICAgICA6ICJcXD8iKSk7CisgIHN3aXRjaCAoYWN0aW9u X3R5cGUpCisgIHsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICBN VUxUSVBMRV9DVVJTT1JTOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAg ICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIE1VTFRJUExFX0NVUlNP UlM6CisgICAgeworICAgICAgbWNfaGVscGVyICh3LCB0ZW1wX3gsIC0xLCB0ZW1wX3ksIC0xLCB0 ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90eXBlLCBj dXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywg dGVtcF9mYWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgTUNf R0xZUEgsIHRlbXBfY2hhcnBvcywgcmVzdWx0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSOiAg Q0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIEhPUklaT05UQUxfUlVMRVI6CisgICAgeworICAgICAg Ym9vbCByZWFsX2Zha2VfY3Vyc29yX3AgPSAob3BvaW50X3ggPT0gcmVsYXRpdmVfeAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X2hwb3MgPT0gdGVtcF9ocG9zCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeSA9PSBnbHlwaC0+eQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3Zwb3MgPT0gdGVtcF92 cG9zKTsKKyAgICAgIGludCBfZngsIGZ5LCBfaCwgX3dkOworICAgICAgbWNfZ2V0X3BoeXNfY3Vy c29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBfeCwgJl9meCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGVtcF95LCAmZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX2gsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lk dGgsICZfd2QpOworICAgICAgaWYgKHRlbXBfeCA8PSB0ZXh0X2FyZWFfd2lkdGgKKyAgICAgICAg ICAmJiAhcmVhbF9mYWtlX2N1cnNvcl9wKQorICAgICAgICBtY19oZWxwZXIgKHcsIHRlbXBfeCwg LTEsIHRlbXBfeSwgZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAg IC0xLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAg ICAgICAgIG1jX2JnX2xzbCAodywgdGVtcF9mYWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAg ICAgICAgICAgbWluaW1hbF9wLCBNQ19HTFlQSCwgdGVtcF9jaGFycG9zLCByZXN1bHQpOworICAg ICAgLyogSXQgaXMgcG9zc2libGUgdG8gdXNlIE1DX0dMWVBIIGFuZCBhZGp1c3QgdGhlIGZ4IGNv b3JkaW5hdGU7IGhvd2V2ZXIsCisgICAgICB0aGUgbWlkZGxlLWRvdCAvIHNwYWNlIGdseXBoIG9u IGEgd29yZC13cmFwcGVkIGxpbmUgd2lsbCBiZSBvdmVyd3JpdHRlbgorICAgICAgbnVtZXJvdXMg dGltZXMgYW5kIGlzIHVuc2lnaHRseS4gKi8KKyAgICAgIGlmIChnbHlwaCAtIHJvdy0+Z2x5cGhz W1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMSkKKyAgICAgICAgeworICAgICAgICAg IGludCBfZngsIGZ5LCBfaCwgX3dkOworICAgICAgICAgIG1jX2dldF9waHlzX2N1cnNvcl9nZW9t ZXRyeSAodywgcm93LCB0ZW1wX3gsICZfZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZW1wX3ksICZmeSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX2gsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lk dGgsICZfd2QpOworICAgICAgICAgIHRlbXBfeCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7CisgICAg ICAgICAgd2hpbGUgKHRlbXBfeCA8PSB0ZXh0X2FyZWFfd2lkdGgpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIG1jX2hlbHBlciAodywgdGVtcF94LCAtMSwgdGVtcF95LCBmeSwgdGVtcF9o cG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90eXBl LCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWNf YmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBtaW5pbWFsX3AsIE1DX0dMWVBITEVTUywgdGVtcF9jaGFycG9zLCByZXN1bHQpOworICAg ICAgICAgICAgICAvKiBgdy0+cGh5c19jdXJzb3Jfd2lkdGhgIGlzIGRldGVybWluZWQgYnkgYGds eXBoLT5waXhlbF93aWR0aGAsCisgICAgICAgICAgICAgIGFuZCB0aGUgc3BhY2UgYXBwZW5kZWQg dG8gYSBsaW5lIGVuZGluZyBpbiBFT0wgaXMgbm90IG5lY2Vzc2FyaWx5CisgICAgICAgICAgICAg IHRoZSBzYW1lIGFzIHRoZSBmcmFtZS1jaGFyLXdpZHRoOyBlLmcuLCB2YXJpYWJsZSB3aXRoIGZv bnQuICBUaHVzLAorICAgICAgICAgICAgICB3ZSBtdXN0IHVzZSB0aGUgYGdseXBoLT5waXhlbF93 aWR0aGAgdG8gYXZvaWQgYmxhbmsgc3BhY2VzIGJldHdlZW4KKyAgICAgICAgICAgICAgdGhlIGZs b2F0aW5nIGhiYXIgZmFrZSBjdXJzb3JzLiAqLworICAgICAgICAgICAgICB0ZW1wX3ggKz0gZ2x5 cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsK KyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgVkVSVElD QUxfUlVMRVI6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAg ICB7CisgICAgICAvKiBgZ2x5cGgtPmNoYXJwb3NgIGlzIHVucmVsaWFibGUgd2hlbiB0ZXN0aW5n IGZvciBaViAtLSB3aXRob3V0IGxpbmUKKyAgICAgIG51bWJlcnMsIHRoZSB2YWx1ZSBpcyAtMTsg d2l0aCBsaW5lIG51bWJlcnMsIHRoZSB2YWx1ZSBpcyBfc29tZXRpbWVzXyBaVi4KKyAgICAgIGBn bHlwaC0+enZfcGAgaXMgcmVsaWFibGUsIGJ1dCByZWxpZXMgdXBvbiBhIGZldyBjb3JlIG1vZGlm aWNhdGlvbi4KKyAgICAgIGB6dl9wYCBlbmNvbXBhc3NlcyBhIGNvdXBsZSBvZiBzaXR1YXRpb25z OiAgYSBsaW5lIGVuZGluZyBpbiBaViwgYnV0CisgICAgICAgY29udGFpbmluZyBvbmUgb3IgbW9y ZSBjaGFyYWN0ZXJzIGJlZm9yZSBaVjsgYW5kLCBhIGxpbmUgYmV5b25kIFpWIHRoYXQKKyAgICAg ICBtYXkgY29uc2lzdCBvZiBzcGFjZXMgZXF1YWwgdG8gYGl0LT5sbnVtX3BpeGVsX3dpZHRoYCAv IGZyYW1lX2NoYXJfd2lkdGgsCisgICAgICAgb3IganVzdCBvbmUgc3BhY2UgaWYgdGhlcmUgYXJl IG5vIGxpbmUgbnVtYmVycy4gKi8KKyAgICAgIGJvb2wgenZfcCA9IChnbHlwaCAtIHJvdy0+Z2x5 cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAg ICYmIE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgPT0gWlYpOworICAgICAgYm9vbCBjdXJz b3JfaW5fZnJpbmdlX3AgPSBvcG9pbnRfeCArIGdseXBoLT5waXhlbF93aWR0aCA+PSB0ZXh0X2Fy ZWFfd2lkdGg7CisgICAgICBpbnQgZmxhdm9yID0gKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAg ICAgICAgICAgICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAg ICAgICAgICAgPyBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAg ICA6IChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNv bnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19WRVJUSUNBTF9CQVJfQkFDS1NM QVNICisgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAg ICAgICAgICAgICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAg ICAgICAgICAmJiAhcm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNf VkVSVElDQUxfQkFSCisgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBoc1tU RVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAm JiBvcG9pbnRfeCA+IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBI TEVTUworICAgICAgICAgICAgICAgICAgIDogKHp2X3ApCisgICAgICAgICAgICAgICAgICAgICA/ IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICBpbnQg dGVtcF94ID0gKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJl YV0gLSAxCisgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID4gcmVsYXRpdmVfeCkKKyAg ICAgICAgICAgICAgICAgICAgPyBvcG9pbnRfeAorICAgICAgICAgICAgICAgICAgICA6IHJlbGF0 aXZlX3g7CisgICAgICBpZiAoZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVwor ICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAg ICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUgPSBS SUdIVF9GUklOR0VfQklUTUFQOworICAgICAgaW50IF9meCwgX2Z5LCBoLCBfd2Q7CisgICAgICBt Y19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIHJvdywgdGVtcF94LCAmX2Z4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3ksICZfZnksIHRlbXBfaHBvcywgdGVt cF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaCwgY3Vyc29yX3R5 cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICBpbnQgZnggPSBXSU5ET1dfVEVYVF9UT19G UkFNRV9QSVhFTF9YICh3LCBvcG9pbnRfeCk7CisgICAgICBtY19oZWxwZXIgKHcsIHRlbXBfeCwg ZngsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICBo LCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAg ICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAg ICBtaW5pbWFsX3AsIGZsYXZvciwgdGVtcF9jaGFycG9zLCByZXN1bHQpOworICAgICAgYnJlYWs7 CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgIEZJTExf Q09MVU1OOiAgQ0hBUl9HTFlQSCB8IEdMWVBITEVTU19HTFlQSCAgICAgICAgICAgICAgICAgKi8K Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgewor ICAgICAgLyogYGdseXBoLT5jaGFycG9zYCBpcyB1bnJlbGlhYmxlIHdoZW4gdGVzdGluZyBmb3Ig WlYgLS0gd2l0aG91dCBsaW5lCisgICAgICBudW1iZXJzLCB0aGUgdmFsdWUgaXMgLTE7IHdpdGgg bGluZSBudW1iZXJzLCB0aGUgdmFsdWUgaXMgX3NvbWV0aW1lc18gWlYuCisgICAgICBgZ2x5cGgt Pnp2X3BgIGlzIHJlbGlhYmxlLCBidXQgcmVsaWVzIHVwb24gYSBmZXcgY29yZSBtb2RpZmljYXRp b24uCisgICAgICBgenZfcGAgZW5jb21wYXNzZXMgYSBjb3VwbGUgb2Ygc2l0dWF0aW9uczogIGEg bGluZSBlbmRpbmcgaW4gWlYsIGJ1dAorICAgICAgIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgY2hh cmFjdGVycyBiZWZvcmUgWlY7IGFuZCwgYSBsaW5lIGJleW9uZCBaViB0aGF0CisgICAgICAgbWF5 IGNvbnNpc3Qgb2Ygc3BhY2VzIGVxdWFsIHRvIGBpdC0+bG51bV9waXhlbF93aWR0aGAgLyBmcmFt ZV9jaGFyX3dpZHRoLAorICAgICAgIG9yIGp1c3Qgb25lIHNwYWNlIGlmIHRoZXJlIGFyZSBubyBs aW5lIG51bWJlcnMuICovCisgICAgICBib29sIHp2X3AgPSAoZ2x5cGggLSByb3ctPmdseXBoc1tU RVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAmJiBN QVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cpID09IFpWKTsKKyAgICAgIGJvb2wgY3Vyc29yX2lu X2ZyaW5nZV9wID0gb3BvaW50X3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGggPj0gdGV4dF9hcmVhX3dp ZHRoOworICAgICAgaW50IGZsYXZvciA9IChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAg ICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAg ICAgID8gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgICAgICAgICAgOiAo Y3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgJiYgcm93LT5jb250aW51 ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAor ICAgICAgICAgICAgICAgICAgIDogKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAg ICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wCisgICAgICAgICAgICAgICAgICAg ICAgJiYgIXJvdy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJ Q0FMX0JBUgorICAgICAgICAgICAgICAgICAgIDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9B UkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAgICAgJiYgZmls bF9jb2x1bW5feCA+IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBI TEVTUworICAgICAgICAgICAgICAgICAgIDogKHp2X3ApCisgICAgICAgICAgICAgICAgICAgICA/ IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgIDogKCFOSUxQIChCVkFSIChiLCBjcm9z c2hhaXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAg ICAgICAgICAmJiBvcG9pbnRfeSA9PSB0ZW1wX3kKKyAgICAgICAgICAgICAgICAgICAgICAmJiBv cG9pbnRfdnBvcyA9PSB0ZW1wX3Zwb3MpCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBI TEVTUworICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICBpbnQgdGVtcF94ID0g KGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisg ICAgICAgICAgICAgICAgICAgICYmIGZpbGxfY29sdW1uX3ggPiByZWxhdGl2ZV94KQorICAgICAg ICAgICAgICAgICAgICA/IGZpbGxfY29sdW1uX3gKKyAgICAgICAgICAgICAgICAgICAgOiByZWxh dGl2ZV94OworICAgICAgaWYgKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cK KyAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAg ICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90eXBlID0g UklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgICAgIGludCBfZngsIF9meSwgaCwgX3dkOworICAgICAg bWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBfeCwgJl9meCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF95LCAmX2Z5LCB0ZW1wX2hwb3MsIHRl bXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgsIGN1cnNvcl90 eXBlLCBjdXJzb3Jfd2lkdGgsICZfd2QpOworICAgICAgaW50IGZ4ID0gV0lORE9XX1RFWFRfVE9f RlJBTUVfUElYRUxfWCAodywgZmlsbF9jb2x1bW5feCk7CisgICAgICBtY19oZWxwZXIgKHcsIHRl bXBfeCwgZngsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAg ICAgICBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAg ICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9wLAorICAgICAgICAg ICAgICAgICBtaW5pbWFsX3AsIGZsYXZvciwgdGVtcF9jaGFycG9zLCByZXN1bHQpOworICAgICAg YnJlYWs7CisgICAgfQorICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAg ICAgICAgICAgICAgICAgICAgICBFTkQ6ICBDSEFSX0dMWVBIIHwgR0xZUEhMRVNTX0dMWVBIICAg ICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVHSU46ICBT VFJFVENIX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBTVFJFVENIX0dMWVBIKQorICB7 CisgICAgaWYgKG1jX3N0ZGVycl9wKQorICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAi XG4gJTUicEQiZC8lLTVkICU1ZCAlYyAlOSJwRCJkICVjICUzZCAweCUwNnggJTRkICUxLjFkJTEu MWQgJTVkICU0ZCAgJTNkICAlM2QgJXMgJXNcbiIsCisgICAgICAgIGdseXBoIC0gcm93LT5nbHlw aHNbVEVYVF9BUkVBXSwKKyAgICAgICAgKChyb3ctPnVzZWRbYXJlYV0gPT0gMCkgPyAwIDogcm93 LT51c2VkW2FyZWFdIC0gMSksCisgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICdTJywKKyAg ICAgICAgZ2x5cGgtPmNoYXJwb3MsCisgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQor ICAgICAgICAgPyAnQicKKyAgICAgICAgIDogKFNUUklOR1AgKGdseXBoLT5vYmplY3QpCisgICAg ICAgICAgICA/ICdTJworICAgICAgICAgICAgOiAoTklMUCAoZ2x5cGgtPm9iamVjdCkKKyAgICAg ICAgICAgICAgID8gJzAnCisgICAgICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAgZ2x5cGgt PnBpeGVsX3dpZHRoLAorICAgICAgICAwdSwKKyAgICAgICAgZ2x5cGgtPmZhY2VfaWQsCisgICAg ICAgIGdseXBoLT5sZWZ0X2JveF9saW5lX3AsCisgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGlu ZV9wLAorICAgICAgICBnbHlwaC0+eCwgZ2x5cGgtPnksIGdseXBoLT5ocG9zLCBnbHlwaC0+dnBv cywgZ2x5cGgtPnp2X3AgPyAiWlYiIDogIi0tIiwKKyAgICAgICAgIlxcUyIpOworICBzd2l0Y2gg KGFjdGlvbl90eXBlKQorICB7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAg ICAgICAgICAgICAgICAgTVVMVElQTEVfQ1VSU09SUzogIFNUUkVUQ0hfR0xZUEggICAgICAgICAg ICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBNVUxUSVBM RV9DVVJTT1JTOgorICAgIHsKKyAgICAgIG1jX2hlbHBlciAodywgdGVtcF94LCAtMSwgdGVtcF95 LCAtMSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgIC0xLCBjdXJzb3Jf dHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBtY19iZ19s c2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICBtaW5pbWFs X3AsIE1DX0dMWVBILCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICBicmVhazsKKyAgICB9 CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgSE9S SVpPTlRBTF9SVUxFUjogIFNUUkVUQ0hfR0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsK KyAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKG9wb2ludF94ID09IHJlbGF0aXZlX3gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IHRlbXBf aHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gZ2x5 cGgtPnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF92cG9zID09 IHRlbXBfdnBvcyk7CisgICAgICBpbnQgX2Z4LCBmeSwgX2gsIF93ZDsKKyAgICAgIG1jX2dldF9w aHlzX2N1cnNvcl9nZW9tZXRyeSAodywgcm93LCB0ZW1wX3gsICZfZngsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRlbXBfeSwgJmZ5LCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9oLCBjdXJzb3JfdHlwZSwgY3Vy c29yX3dpZHRoLCAmX3dkKTsKKyAgICAgIGlmICh0ZW1wX3ggPD0gdGV4dF9hcmVhX3dpZHRoCisg ICAgICAgICAgJiYgIXJlYWxfZmFrZV9jdXJzb3JfcCkKKyAgICAgICAgd2hpbGUgKHRlbXBfeCA8 IHJlbGF0aXZlX3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGgpCisgICAgICAgICAgeworICAgICAgICAg ICAgbWNfaGVscGVyICh3LCB0ZW1wX3gsIC0xLCB0ZW1wX3ksIGZ5LCB0ZW1wX2hwb3MsIHRlbXBf dnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lk dGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgdGVt cF9mYWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwg TUNfR0xZUEhfVEFCLCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICAgICAgICB0ZW1wX3gg Kz0gZnJhbWVfY2hhcl93aWR0aDsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRlbXBf eCArIGdseXBoLT5waXhlbF93aWR0aCA8IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICAgICAg ICAmJiByZWFsX2Zha2VfY3Vyc29yX3AKKyAgICAgICAgICAgICAgICAgJiYgZ2x5cGgtPnBpeGVs X3dpZHRoID4gZnJhbWVfY2hhcl93aWR0aCkKKyAgICAgICAgICB7CisgICAgICAgICAgICB0ZW1w X3ggKz0gZnJhbWVfY2hhcl93aWR0aDsKKyAgICAgICAgICAgIHdoaWxlICh0ZW1wX3ggPCByZWxh dGl2ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgbWNfaGVscGVyICh3LCB0ZW1wX3gsIC0xLCB0ZW1wX3ksIGZ5LCB0ZW1wX2hwb3MsIHRl bXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vy c29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNfYmdf bHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1pbmltYWxfcCwgTUNfR0xZUEhfVEFCLCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAg ICAgICAgICAgICAgdGVtcF94ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICB9CisgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgTUNfR0xZUEggYW5k IGFkanVzdCB0aGUgZnggY29vcmRpbmF0ZTsgaG93ZXZlciwKKyAgICAgIHRoZSBtaWRkbGUtZG90 IC8gc3BhY2UgZ2x5cGggb24gYSB3b3JkLXdyYXBwZWQgbGluZSB3aWxsIGJlIG92ZXJ3cml0dGVu CisgICAgICBudW1lcm91cyB0aW1lcyBhbmQgaXMgdW5zaWdodGx5LiAqLworICAgICAgaWYgKGds eXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxKQorICAg ICAgICB7CisgICAgICAgICAgaW50IF9meCwgZnksIF9oLCBfd2Q7CisgICAgICAgICAgbWNfZ2V0 X3BoeXNfY3Vyc29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBfeCwgJl9meCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfeSwgJmZ5LCB0ZW1wX2hwb3MsIHRlbXBf dnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfaCwgY3Vyc29y X3R5cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICAgICAgLyogdGVtcF94ICs9IGdseXBo LT5waXhlbF93aWR0aDsgKi8KKyAgICAgICAgICB3aGlsZSAodGVtcF94IDw9IHRleHRfYXJlYV93 aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNfaGVscGVyICh3LCB0ZW1wX3gs IC0xLCB0ZW1wX3ksIGZ5LCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAtMSwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9w LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgTUNfR0xZUEhMRVNTLCB0ZW1w X2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICAgICAgICAgIHRlbXBfeCArPSBmcmFtZV9jaGFyX3dp ZHRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJUSUNB TF9SVUxFUjogIFNUUkVUQ0hfR0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7CisgICAgICAv KiBgZ2x5cGgtPmNoYXJwb3NgIGlzIHVucmVsaWFibGUgd2hlbiB0ZXN0aW5nIGZvciBaViAtLSB3 aXRob3V0IGxpbmUKKyAgICAgIG51bWJlcnMsIHRoZSB2YWx1ZSBpcyAtMTsgd2l0aCBsaW5lIG51 bWJlcnMsIHRoZSB2YWx1ZSBpcyBfc29tZXRpbWVzXyBaVi4KKyAgICAgIGBnbHlwaC0+enZfcGAg aXMgcmVsaWFibGUsIGJ1dCByZWxpZXMgdXBvbiBhIGZldyBjb3JlIG1vZGlmaWNhdGlvbi4KKyAg ICAgIGB6dl9wYCBlbmNvbXBhc3NlcyBhIGNvdXBsZSBvZiBzaXR1YXRpb25zOiAgYSBsaW5lIGVu ZGluZyBpbiBaViwgYnV0CisgICAgICAgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJz IGJlZm9yZSBaVjsgYW5kLCBhIGxpbmUgYmV5b25kIFpWIHRoYXQKKyAgICAgICBtYXkgY29uc2lz dCBvZiBzcGFjZXMgZXF1YWwgdG8gYGl0LT5sbnVtX3BpeGVsX3dpZHRoYCAvIGZyYW1lX2NoYXJf d2lkdGgsCisgICAgICAgb3IganVzdCBvbmUgc3BhY2UgaWYgdGhlcmUgYXJlIG5vIGxpbmUgbnVt YmVycy4gKi8KKyAgICAgIGJvb2wgenZfcCA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJF QV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICYmIE1BVFJJWF9S T1dfRU5EX0NIQVJQT1MgKHJvdykgPT0gWlYpOworICAgICAgYm9vbCBjdXJzb3JfaW5fZnJpbmdl X3AgPSBvcG9pbnRfeCArIGdseXBoLT5waXhlbF93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7Cisg ICAgICBpbnQgZmxhdm9yID0gKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAg ICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgPyBN Q19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICA6IChjdXJzb3Jf aW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9wKQor ICAgICAgICAgICAgICAgICAgICAgPyBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAg ICAgICAgICAgICAgOiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAg JiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiAh cm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFS CisgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09 IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeCA+ IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAg ICAgICAgICAgICAgIDogKHp2X3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVT UworICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEhfVEFCOworICAgICAgaW50IHRlbXBfeCA9 IG9wb2ludF94OworICAgICAgaWYgKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJS T1cKKyAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAg ICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAgIGN1cnNvcl90eXBl ID0gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgICAgIGludCBfZngsIF9meSwgaCwgX3dkOworICAg ICAgbWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBfeCwgJl9meCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF95LCAmX2Z5LCB0ZW1wX2hwb3Ms IHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgsIGN1cnNv cl90eXBlLCBjdXJzb3Jfd2lkdGgsICZfd2QpOworICAgICAgaW50IGZ4ID0gV0lORE9XX1RFWFRf VE9fRlJBTUVfUElYRUxfWCAodywgb3BvaW50X3gpOworICAgICAgbWNfaGVscGVyICh3LCB0ZW1w X3gsIGZ4LCB0ZW1wX3ksIC0xLCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAg ICAgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAg ICAgICAgbWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAg ICAgICAgbWluaW1hbF9wLCBmbGF2b3IsIHRlbXBfY2hhcnBvcywgcmVzdWx0KTsKKyAgICAgIGJy ZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAg ICAgICAgICAgIEZJTExfQ09MVU1OOiAgU1RSRVRDSF9HTFlQSCAgICAgICAgICAgICAgICAgICAg ICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIEZJTExfQ09MVU1OOgorICAg IHsKKyAgICAgIC8qIGBnbHlwaC0+Y2hhcnBvc2AgaXMgdW5yZWxpYWJsZSB3aGVuIHRlc3Rpbmcg Zm9yIFpWIC0tIHdpdGhvdXQgbGluZQorICAgICAgbnVtYmVycywgdGhlIHZhbHVlIGlzIC0xOyB3 aXRoIGxpbmUgbnVtYmVycywgdGhlIHZhbHVlIGlzIF9zb21ldGltZXNfIFpWLgorICAgICAgYGds eXBoLT56dl9wYCBpcyByZWxpYWJsZSwgYnV0IHJlbGllcyB1cG9uIGEgZmV3IGNvcmUgbW9kaWZp Y2F0aW9uLgorICAgICAgYHp2X3BgIGVuY29tcGFzc2VzIGEgY291cGxlIG9mIHNpdHVhdGlvbnM6 ICBhIGxpbmUgZW5kaW5nIGluIFpWLCBidXQKKyAgICAgICBjb250YWluaW5nIG9uZSBvciBtb3Jl IGNoYXJhY3RlcnMgYmVmb3JlIFpWOyBhbmQsIGEgbGluZSBiZXlvbmQgWlYgdGhhdAorICAgICAg IG1heSBjb25zaXN0IG9mIHNwYWNlcyBlcXVhbCB0byBgaXQtPmxudW1fcGl4ZWxfd2lkdGhgIC8g ZnJhbWVfY2hhcl93aWR0aCwKKyAgICAgICBvciBqdXN0IG9uZSBzcGFjZSBpZiB0aGVyZSBhcmUg bm8gbGluZSBudW1iZXJzLiAqLworICAgICAgYm9vbCB6dl9wID0gKGdseXBoIC0gcm93LT5nbHlw aHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAgICAgICAg JiYgTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSA9PSBaVik7CisgICAgICBib29sIGN1cnNv cl9pbl9mcmluZ2VfcCA9IG9wb2ludF94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoID49IHRleHRfYXJl YV93aWR0aDsKKyAgICAgIGludCBmbGF2b3IgPSAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAg ICAgICAgICAgICAgICYmIHJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAgICAgICAg ICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAgICAgICAg IDogKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICYmIHJvdy0+Y29u dGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xB U0gKKyAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAg ICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcAorICAgICAgICAgICAgICAg ICAgICAgICYmICFyb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19W RVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICA6IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RF WFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICAgICYm IGZpbGxfY29sdW1uX3ggPiByZWxhdGl2ZV94KQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19H TFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6ICh6dl9wKQorICAgICAgICAgICAgICAgICAg ICAgPyBNQ19HTFlQSExFU1MKKyAgICAgICAgICAgICAgICAgICA6ICghTklMUCAoQlZBUiAoYiwg Y3Jvc3NoYWlycykpCisgICAgICAgICAgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAg ICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gdGVtcF95CisgICAgICAgICAgICAgICAgICAgICAg JiYgb3BvaW50X3Zwb3MgPT0gdGVtcF92cG9zKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19H TFlQSF9UQUIKKyAgICAgICAgICAgICAgICAgICA6IE1DX0dMWVBIX1RBQjsKKyAgICAgIGludCB0 ZW1wX3ggPSBmaWxsX2NvbHVtbl94OworICAgICAgaWYgKGZsYXZvciA9PSBNQ19WRVJUSUNBTF9C QVJfUklHSFRfQVJST1cKKyAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX0JB Q0tTTEFTSAorICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVIpCisgICAgICAg IGN1cnNvcl90eXBlID0gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgICAgIGludCBfZngsIF9meSwg aCwgX3dkOworICAgICAgbWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBf eCwgJl9meCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF95LCAmX2Z5 LCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsICZfd2QpOworICAgICAgaW50IGZ4ID0g V0lORE9XX1RFWFRfVE9fRlJBTUVfUElYRUxfWCAodywgZmlsbF9jb2x1bW5feCk7CisgICAgICBt Y19oZWxwZXIgKHcsIHRlbXBfeCwgZngsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9z LAorICAgICAgICAgICAgICAgICBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3Jv dW5kLAorICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2 ZV9wLAorICAgICAgICAgICAgICAgICBtaW5pbWFsX3AsIGZsYXZvciwgdGVtcF9jaGFycG9zLCBy ZXN1bHQpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIH0KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgU1RSRVRDSF9H TFlQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJFR0lOOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBlbHNlIGlmIChnbHlwaC0+dHlwZSA9PSBJTUFH RV9HTFlQSCkKKyAgeworICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIGZwcmludGYgKHN0ZGVy ciwKKyAgICAgICAgIlxuICU1InBEImQvJS01ZCAlNWQgJWMgJTkicEQiZCAlYyAlM2QgMHglMDZ4 ICU0ZCAlMS4xZCUxLjFkICU1ZCAlNGQgICUzZCAgJTNkICVzICVjXG4iLAorICAgICAgICBnbHlw aCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0sCisgICAgICAgICgocm93LT51c2VkW2FyZWFdID09 IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAtIDEpLAorICAgICAgICByZWxhdGl2ZV94LAorICAg ICAgICAnSScsCisgICAgICAgIGdseXBoLT5jaGFycG9zLAorICAgICAgICAoQlVGRkVSUCAoZ2x5 cGgtPm9iamVjdCkKKyAgICAgICAgID8gJ0InCisgICAgICAgICA6IChTVFJJTkdQIChnbHlwaC0+ b2JqZWN0KQorICAgICAgICAgICAgPyAnUycKKyAgICAgICAgICAgIDogKE5JTFAgKGdseXBoLT5v YmplY3QpCisgICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAgOiAnLScpKSksCisg ICAgICAgIGdseXBoLT5waXhlbF93aWR0aCwKKyAgICAgICAgKHVuc2lnbmVkIGludCkgZ2x5cGgt PnUuaW1nX2lkLAorICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgZ2x5cGgtPmxlZnRf Ym94X2xpbmVfcCwKKyAgICAgICAgZ2x5cGgtPnJpZ2h0X2JveF9saW5lX3AsCisgICAgICAgIGds eXBoLT54LCBnbHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBnbHlwaC0+enZfcCA/ ICJaViIgOiAiLS0iLAorICAgICAgICAnLicpOworICBzd2l0Y2ggKGFjdGlvbl90eXBlKQorICB7 CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIE1V TFRJUExFX0NVUlNPUlM6ICBJTUFHRV9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAqLworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBNVUxUSVBMRV9DVVJTT1JTOgorICAgIHsK KyAgICAgIGN1cnNvcl90eXBlID0gSE9MTE9XX0JPWF9DVVJTT1I7CisgICAgICBtY19oZWxwZXIg KHcsIHRlbXBfeCwgLTEsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAg ICAgICAgICAgICAtMSwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAg ICAgICAgICAgICAgICAgbWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAg ICAgICAgICAgICAgICAgbWluaW1hbF9wLCBNQ19HTFlQSCwgdGVtcF9jaGFycG9zLCByZXN1bHQp OworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAg ICAgICAgICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSOiAgSU1BR0VfR0xZUEggICAgICAg ICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9S SVpPTlRBTF9SVUxFUjoKKyAgICB7CisgICAgICBjdXJzb3JfdHlwZSA9IEhPTExPV19CT1hfQ1VS U09SOworICAgICAgbWNfaGVscGVyICh3LCB0ZW1wX3gsIC0xLCB0ZW1wX3ksIC0xLCB0ZW1wX2hw b3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90eXBlLCBjdXJzb3Jf d2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgdGVtcF9m YWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgTUNfR0xZUEgs IHRlbXBfY2hhcnBvcywgcmVzdWx0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJUSUNBTF9SVUxF UjogIElNQUdFX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVSOgorICAgIHsKKyAgICAgIGN1cnNvcl90 eXBlID0gSE9MTE9XX0JPWF9DVVJTT1I7CisgICAgICBtY19oZWxwZXIgKHcsIHRlbXBfeCwgLTEs IHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAtMSwg Y3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAg bWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAg bWluaW1hbF9wLCBNQ19HTFlQSCwgdGVtcF9jaGFycG9zLCByZXN1bHQpOworICAgICAgYnJlYWs7 CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZJTExfQ09MVU1OOiAgSU1BR0VfR0xZUEggICAgICAgICAgICAgICAgICAgICAgKi8K Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgewor ICAgICAgY3Vyc29yX3R5cGUgPSBIT0xMT1dfQk9YX0NVUlNPUjsKKyAgICAgIG1jX2hlbHBlciAo dywgdGVtcF94LCAtMSwgdGVtcF95LCAtMSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAg ICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLAorICAg ICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9wLAorICAg ICAgICAgICAgICAgICBtaW5pbWFsX3AsIE1DX0dMWVBILCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7 CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgSU1BR0VfR0xZUEggICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJF R0lOOiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCisgIGVsc2UgaWYgKGdseXBoLT50eXBlID09IENPTVBPU0lURV9H TFlQSCkKKyAgeworICAgIGlmIChtY19zdGRlcnJfcCkKKyAgICAgIHsKKyAgICAgICAgZnByaW50 ZiAoc3RkZXJyLAorICAgICAgICAgICJcbiAlNSJwRCJkLyUtNWQgJTVkICVjICU5InBEImQgJWMg JTNkIDB4JTA2eCIsCisgICAgICAgICAgZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdLAor ICAgICAgICAgICgocm93LT51c2VkW2FyZWFdID09IDApID8gMCA6IHJvdy0+dXNlZFthcmVhXSAt IDEpLAorICAgICAgICAgIHJlbGF0aXZlX3gsCisgICAgICAgICAgJysnLAorICAgICAgICAgIGds eXBoLT5jaGFycG9zLAorICAgICAgICAgIChCVUZGRVJQIChnbHlwaC0+b2JqZWN0KQorICAgICAg ICAgICA/ICdCJworICAgICAgICAgICA6IChTVFJJTkdQIChnbHlwaC0+b2JqZWN0KQorICAgICAg ICAgICAgICA/ICdTJworICAgICAgICAgICAgICA6IChOSUxQIChnbHlwaC0+b2JqZWN0KQorICAg ICAgICAgICAgICAgICA/ICcwJworICAgICAgICAgICAgICAgICA6ICctJykpKSwKKyAgICAgICAg ICBnbHlwaC0+cGl4ZWxfd2lkdGgsCisgICAgICAgICAgKHVuc2lnbmVkIGludCkgZ2x5cGgtPnUu Y21wLmlkKTsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICU0ZCAlMS4xZCUxLjFkIiwKKyAg ICAgICAgICBnbHlwaC0+ZmFjZV9pZCwKKyAgICAgICAgICBnbHlwaC0+bGVmdF9ib3hfbGluZV9w LAorICAgICAgICAgIGdseXBoLT5yaWdodF9ib3hfbGluZV9wKTsKKyAgICAgIGlmIChnbHlwaC0+ dS5jbXAuYXV0b21hdGljKQorICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgJTVkICU0ZCAgJTNk ICAlM2QgJXMgLiBbJWQtJWRdXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT54 LCBnbHlwaC0+eSwgZ2x5cGgtPmhwb3MsIGdseXBoLT52cG9zLCBnbHlwaC0+enZfcCA/ICJaViIg OiAiLS0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5zbGljZS5jbXAuZnJvbSwg Z2x5cGgtPnNsaWNlLmNtcC50byk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcHJpbnRmIChz dGRlcnIsICJcbiIpOworICAgICAgfQorICBzd2l0Y2ggKGFjdGlvbl90eXBlKQorICB7CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRV9D VVJTT1JTOiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBNVUxUSVBMRV9DVVJTT1JTOgorICAgIHsKKyAgICAg IG1jX2hlbHBlciAodywgdGVtcF94LCAtMSwgdGVtcF95LCAtMSwgdGVtcF9ocG9zLCB0ZW1wX3Zw b3MsCisgICAgICAgICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3Jl Z3JvdW5kLAorICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFj dGl2ZV9wLAorICAgICAgICAgICAgICAgICBtaW5pbWFsX3AsIE1DX0dMWVBILCB0ZW1wX2NoYXJw b3MsIHJlc3VsdCk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICBIT1JJWk9OVEFMX1JVTEVSOiAgQ09NUE9TSVRF X0dMWVBIICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisg ICAgY2FzZSBIT1JJWk9OVEFMX1JVTEVSOgorICAgIHsKKyAgICAgIGJvb2wgcmVhbF9mYWtlX2N1 cnNvcl9wID0gKG9wb2ludF94ID09IHJlbGF0aXZlX3gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIG9wb2ludF9ocG9zID09IHRlbXBfaHBvcworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgb3BvaW50X3kgPT0gZ2x5cGgtPnkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG9wb2ludF92cG9zID09IHRlbXBfdnBvcyk7CisgICAgICBpbnQg X2Z4LCBmeSwgX2gsIF93ZDsKKyAgICAgIG1jX2dldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywg cm93LCB0ZW1wX3gsICZfZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl bXBfeSwgJmZ5LCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJl9oLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCAmX3dkKTsKKyAgICAg IGlmICh0ZW1wX3ggPD0gdGV4dF9hcmVhX3dpZHRoCisgICAgICAgICAgJiYgIXJlYWxfZmFrZV9j dXJzb3JfcCkKKyAgICAgICAgbWNfaGVscGVyICh3LCB0ZW1wX3gsIC0xLCB0ZW1wX3ksIGZ5LCB0 ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAtMSwgY3Vyc29yX3R5cGUs IGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICAgICBtY19iZ19sc2wg KHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICAgIG1pbmltYWxf cCwgTUNfR0xZUEgsIHRlbXBfY2hhcnBvcywgcmVzdWx0KTsKKyAgICAgIC8qIEl0IGlzIHBvc3Np YmxlIHRvIHVzZSBNQ19HTFlQSCBhbmQgYWRqdXN0IHRoZSBmeCBjb29yZGluYXRlOyBob3dldmVy LAorICAgICAgdGhlIG1pZGRsZS1kb3QgLyBzcGFjZSBnbHlwaCBvbiBhIHdvcmQtd3JhcHBlZCBs aW5lIHdpbGwgYmUgb3ZlcndyaXR0ZW4KKyAgICAgIG51bWVyb3VzIHRpbWVzIGFuZCBpcyB1bnNp Z2h0bHkuICovCisgICAgICBpZiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJv dy0+dXNlZFthcmVhXSAtIDEpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgX2Z4LCBmeSwgX2gs IF93ZDsKKyAgICAgICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIHJvdywgdGVt cF94LCAmX2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF95 LCAmZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJl9oLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCAmX3dkKTsKKyAgICAg ICAgICB0ZW1wX3ggKz0gZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgIHdoaWxlICh0ZW1w X3ggPD0gdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBtY19o ZWxwZXIgKHcsIHRlbXBfeCwgLTEsIHRlbXBfeSwgZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAor ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBm b3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgdGVtcF9m YWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbF9wLCBN Q19HTFlQSExFU1MsIHRlbXBfY2hhcnBvcywgcmVzdWx0KTsKKyAgICAgICAgICAgICAgdGVtcF94 ICs9IGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJy ZWFrOworICAgIH0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAg ICAgICAgICAgVkVSVElDQUxfUlVMRVI6ICBDT01QT1NJVEVfR0xZUEggICAgICAgICAgICAgICAg ICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICBjYXNlIFZFUlRJQ0FMX1JVTEVS OgorICAgIHsKKyAgICAgIC8qIGBnbHlwaC0+Y2hhcnBvc2AgaXMgdW5yZWxpYWJsZSB3aGVuIHRl c3RpbmcgZm9yIFpWIC0tIHdpdGhvdXQgbGluZQorICAgICAgbnVtYmVycywgdGhlIHZhbHVlIGlz IC0xOyB3aXRoIGxpbmUgbnVtYmVycywgdGhlIHZhbHVlIGlzIF9zb21ldGltZXNfIFpWLgorICAg ICAgYGdseXBoLT56dl9wYCBpcyByZWxpYWJsZSwgYnV0IHJlbGllcyB1cG9uIGEgZmV3IGNvcmUg bW9kaWZpY2F0aW9uLgorICAgICAgYHp2X3BgIGVuY29tcGFzc2VzIGEgY291cGxlIG9mIHNpdHVh dGlvbnM6ICBhIGxpbmUgZW5kaW5nIGluIFpWLCBidXQKKyAgICAgICBjb250YWluaW5nIG9uZSBv ciBtb3JlIGNoYXJhY3RlcnMgYmVmb3JlIFpWOyBhbmQsIGEgbGluZSBiZXlvbmQgWlYgdGhhdAor ICAgICAgIG1heSBjb25zaXN0IG9mIHNwYWNlcyBlcXVhbCB0byBgaXQtPmxudW1fcGl4ZWxfd2lk dGhgIC8gZnJhbWVfY2hhcl93aWR0aCwKKyAgICAgICBvciBqdXN0IG9uZSBzcGFjZSBpZiB0aGVy ZSBhcmUgbm8gbGluZSBudW1iZXJzLiAqLworICAgICAgYm9vbCB6dl9wID0gKGdseXBoIC0gcm93 LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAxCisgICAgICAgICAgICAg ICAgICAgJiYgTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93KSA9PSBaVik7CisgICAgICBib29s IGN1cnNvcl9pbl9mcmluZ2VfcCA9IG9wb2ludF94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoID49IHRl eHRfYXJlYV93aWR0aDsKKyAgICAgIGludCBmbGF2b3IgPSAoY3Vyc29yX2luX2ZyaW5nZV9wCisg ICAgICAgICAgICAgICAgICAgICYmIHJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisgICAgICAg ICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgICAg ICAgICAgIDogKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICYmIHJv dy0+Y29udGludWVkX3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUl9C QUNLU0xBU0gKKyAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfaW5fZnJpbmdlX3AKKyAgICAg ICAgICAgICAgICAgICAgICAmJiAhcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcAorICAgICAgICAg ICAgICAgICAgICAgICYmICFyb3ctPmNvbnRpbnVlZF9wKQorICAgICAgICAgICAgICAgICAgICAg PyBNQ19WRVJUSUNBTF9CQVIKKyAgICAgICAgICAgICAgICAgICA6IChnbHlwaCAtIHJvdy0+Z2x5 cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAg ICAgICYmIG9wb2ludF94ID4gcmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNf R0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgOiAoenZfcCkKKyAgICAgICAgICAgICAgICAg ICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAgICAgICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAg IGlmIChmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwg Zmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9CQUNLU0xBU0gKKyAgICAgICAgICB8fCBmbGF2b3Ig PT0gTUNfVkVSVElDQUxfQkFSKQorICAgICAgICBjdXJzb3JfdHlwZSA9IFJJR0hUX0ZSSU5HRV9C SVRNQVA7CisgICAgICBpbnQgX2Z4LCBfZnksIGgsIF93ZDsKKyAgICAgIG1jX2dldF9waHlzX2N1 cnNvcl9nZW9tZXRyeSAodywgcm93LCB0ZW1wX3gsICZfZngsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRlbXBfeSwgJl9meSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dp ZHRoLCAmX3dkKTsKKyAgICAgIGludCBmeCA9IFdJTkRPV19URVhUX1RPX0ZSQU1FX1BJWEVMX1gg KHcsIG9wb2ludF94KTsKKyAgICAgIG1jX2hlbHBlciAodywgdGVtcF94LCBmeCwgdGVtcF95LCAt MSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgIGgsIGN1cnNvcl90eXBl LCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAo dywgdGVtcF9mYWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwg Zmxhdm9yLCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICBicmVhazsKKyAgICB9CisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIEZJTExfQ09M VU1OOiAgQ09NUE9TSVRFX0dMWVBIICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisgICAgY2FzZSBGSUxMX0NPTFVNTjoKKyAgICB7CisgICAgICAvKiBgZ2x5 cGgtPmNoYXJwb3NgIGlzIHVucmVsaWFibGUgd2hlbiB0ZXN0aW5nIGZvciBaViAtLSB3aXRob3V0 IGxpbmUKKyAgICAgIG51bWJlcnMsIHRoZSB2YWx1ZSBpcyAtMTsgd2l0aCBsaW5lIG51bWJlcnMs IHRoZSB2YWx1ZSBpcyBfc29tZXRpbWVzXyBaVi4KKyAgICAgIGBnbHlwaC0+enZfcGAgaXMgcmVs aWFibGUsIGJ1dCByZWxpZXMgdXBvbiBhIGZldyBjb3JlIG1vZGlmaWNhdGlvbi4KKyAgICAgIGB6 dl9wYCBlbmNvbXBhc3NlcyBhIGNvdXBsZSBvZiBzaXR1YXRpb25zOiAgYSBsaW5lIGVuZGluZyBp biBaViwgYnV0CisgICAgICAgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJlZm9y ZSBaVjsgYW5kLCBhIGxpbmUgYmV5b25kIFpWIHRoYXQKKyAgICAgICBtYXkgY29uc2lzdCBvZiBz cGFjZXMgZXF1YWwgdG8gYGl0LT5sbnVtX3BpeGVsX3dpZHRoYCAvIGZyYW1lX2NoYXJfd2lkdGgs CisgICAgICAgb3IganVzdCBvbmUgc3BhY2UgaWYgdGhlcmUgYXJlIG5vIGxpbmUgbnVtYmVycy4g Ki8KKyAgICAgIGJvb2wgenZfcCA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV0gPT0g cm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICYmIE1BVFJJWF9ST1dfRU5E X0NIQVJQT1MgKHJvdykgPT0gWlYpOworICAgICAgYm9vbCBjdXJzb3JfaW5fZnJpbmdlX3AgPSBv cG9pbnRfeCArIGdseXBoLT5waXhlbF93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7CisgICAgICBp bnQgZmxhdm9yID0gKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAmJiBy b3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19WRVJU SUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICA6IChjdXJzb3JfaW5fZnJp bmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9wKQorICAgICAg ICAgICAgICAgICAgICAgPyBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgICAg ICAgICAgOiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAgICAgJiYgIXJv dy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiAhcm93LT5j b250aW51ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSCisgICAg ICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+ dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAmJiBmaWxsX2NvbHVtbl94ID4g cmVsYXRpdmVfeCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAg ICAgICAgICAgICAgOiAoenZfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNT CisgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnMpKQorICAg ICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKQorICAgICAgICAgICAgICAgICAgICAgICYmIG9w b2ludF95ID09IHRlbXBfeQorICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF92cG9zID09 IHRlbXBfdnBvcykKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfR0xZUEhMRVNTCisgICAgICAg ICAgICAgICAgICAgOiBNQ19HTFlQSDsKKyAgICAgIGlmIChmbGF2b3IgPT0gTUNfVkVSVElDQUxf QkFSX1JJR0hUX0FSUk9XCisgICAgICAgICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9C QUNLU0xBU0gKKyAgICAgICAgICB8fCBmbGF2b3IgPT0gTUNfVkVSVElDQUxfQkFSKQorICAgICAg ICBjdXJzb3JfdHlwZSA9IFJJR0hUX0ZSSU5HRV9CSVRNQVA7CisgICAgICBpbnQgX2Z4LCBfZnks IGgsIF93ZDsKKyAgICAgIG1jX2dldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywgcm93LCB0ZW1w X3gsICZfZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfeSwgJl9m eSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCAmX3dkKTsKKyAgICAgIGludCBmeCA9 IFdJTkRPV19URVhUX1RPX0ZSQU1FX1BJWEVMX1ggKHcsIGZpbGxfY29sdW1uX3gpOworICAgICAg bWNfaGVscGVyICh3LCB0ZW1wX3gsIGZ4LCB0ZW1wX3ksIC0xLCB0ZW1wX2hwb3MsIHRlbXBfdnBv cywKKyAgICAgICAgICAgICAgICAgaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdy b3VuZCwKKyAgICAgICAgICAgICAgICAgbWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3Rp dmVfcCwKKyAgICAgICAgICAgICAgICAgbWluaW1hbF9wLCBmbGF2b3IsIHRlbXBfY2hhcnBvcywg cmVzdWx0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICB9CisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EOiAgQ09NUE9TSVRF X0dMWVBIICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJFR0lOOiAgWFdJREdFVF9HTFlQSCAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgZWxzZSBpZiAoZ2x5cGgtPnR5cGUgPT0gWFdJ REdFVF9HTFlQSCkKKyAgeworI2lmbmRlZiBIQVZFX1hXSURHRVRTCisgICAgZWFzc3VtZSAoZmFs c2UpOworI2Vsc2UKKyAgICBpZiAobWNfc3RkZXJyX3ApCisgICAgICBmcHJpbnRmIChzdGRlcnIs CisgICAgICAgICJcbiAgJTVkLyUtNWQgJTVkICU0YyAlNmQgJWMgJTNkIDB4JTA1eCAlNGQgJTEu MWQlMS4xZCAlNWQgJTRkICAlM2QgICUzZCAlcyAlY1xuIiwKKyAgICAgICAgZ2x5cGggLSByb3ct PmdseXBoc1tURVhUX0FSRUFdLAorICAgICAgICAoKHJvdy0+dXNlZFthcmVhXSA9PSAwKSA/IDAg OiByb3ctPnVzZWRbYXJlYV0gLSAxKSwKKyAgICAgICAgcmVsYXRpdmVfeCwKKyAgICAgICAgJ1gn LAorICAgICAgICBnbHlwaC0+Y2hhcnBvcywKKyAgICAgICAgKEJVRkZFUlAgKGdseXBoLT5vYmpl Y3QpCisgICAgICAgICA/ICdCJworICAgICAgICAgOiAoU1RSSU5HUCAoZ2x5cGgtPm9iamVjdCkK KyAgICAgICAgICAgID8gJ1MnCisgICAgICAgICAgICA6ICctJykpLAorICAgICAgICBnbHlwaC0+ cGl4ZWxfd2lkdGgsCisgICAgICAgIGdseXBoLT5mYWNlX2lkLAorICAgICAgICBnbHlwaC0+bGVm dF9ib3hfbGluZV9wLAorICAgICAgICBnbHlwaC0+cmlnaHRfYm94X2xpbmVfcCwKKyAgICAgICAg Z2x5cGgtPnUueHdpZGdldCwKKyAgICAgICAgZ2x5cGgtPngsIGdseXBoLT55LCBnbHlwaC0+aHBv cywgZ2x5cGgtPnZwb3MsIGdseXBoLT56dl9wID8gIlpWIiA6ICItLSIsCisgICAgICAgICcuJyk7 CisjZW5kaWYKKyAgc3dpdGNoIChhY3Rpb25fdHlwZSkKKyAgeworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJUExFX0NVUlNPUlM6ICBYV0lE R0VUX0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LworICAgIGNhc2UgTVVMVElQTEVfQ1VSU09SUzoKKyAgICB7CisgICAgICBtY19oZWxwZXIgKHcs IHRlbXBfeCwgLTEsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAg ICAgICAgICAtMSwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAgICAg ICAgICAgICAgICAgbWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2VfaWQpLCBhY3RpdmVfcCwKKyAgICAg ICAgICAgICAgICAgbWluaW1hbF9wLCBNQ19HTFlQSCwgdGVtcF9jaGFycG9zLCByZXN1bHQpOwor ICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAg ICAgICAgICAgICAgICAgIEhPUklaT05UQUxfUlVMRVI6ICBYV0lER0VUX0dMWVBIICAgICAgICAg ICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGNhc2UgSE9SSVpP TlRBTF9SVUxFUjoKKyAgICB7CisgICAgICBib29sIHJlYWxfZmFrZV9jdXJzb3JfcCA9IChvcG9p bnRfeCA9PSByZWxhdGl2ZV94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBv cG9pbnRfaHBvcyA9PSB0ZW1wX2hwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIG9wb2ludF95ID09IGdseXBoLT55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBvcG9pbnRfdnBvcyA9PSB0ZW1wX3Zwb3MpOworICAgICAgaW50IF9meCwgZnksIF9oLCBf d2Q7CisgICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIHJvdywgdGVtcF94LCAm X2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3ksICZmeSwgdGVt cF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZf aCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICBpZiAodGVtcF94IDw9 IHRleHRfYXJlYV93aWR0aAorICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAg ICAgIG1jX2hlbHBlciAodywgdGVtcF94LCAtMSwgdGVtcF95LCBmeSwgdGVtcF9ocG9zLCB0ZW1w X3Zwb3MsCisgICAgICAgICAgICAgICAgICAgLTEsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgs IGZvcmVncm91bmQsCisgICAgICAgICAgICAgICAgICAgbWNfYmdfbHNsICh3LCB0ZW1wX2ZhY2Vf aWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICBtaW5pbWFsX3AsIE1DX0dMWVBILCB0 ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgTUNf R0xZUEggYW5kIGFkanVzdCB0aGUgZnggY29vcmRpbmF0ZTsgaG93ZXZlciwKKyAgICAgIHRoZSBt aWRkbGUtZG90IC8gc3BhY2UgZ2x5cGggb24gYSB3b3JkLXdyYXBwZWQgbGluZSB3aWxsIGJlIG92 ZXJ3cml0dGVuCisgICAgICBudW1lcm91cyB0aW1lcyBhbmQgaXMgdW5zaWdodGx5LiAqLworICAg ICAgaWYgKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0g LSAxKQorICAgICAgICB7CisgICAgICAgICAgaW50IF9meCwgZnksIF9oLCBfd2Q7CisgICAgICAg ICAgbWNfZ2V0X3BoeXNfY3Vyc29yX2dlb21ldHJ5ICh3LCByb3csIHRlbXBfeCwgJl9meCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfeSwgJmZ5LCB0ZW1wX2hw b3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZf aCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICAgICAgdGVtcF94ICs9 IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICB3aGlsZSAodGVtcF94IDw9IHRleHRfYXJl YV93aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNfaGVscGVyICh3LCB0ZW1w X3gsIC0xLCB0ZW1wX3ksIGZ5LCB0ZW1wX2hwb3MsIHRlbXBfdnBvcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAtMSwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9pZCksIGFjdGl2 ZV9wLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgTUNfR0xZUEhMRVNTLCB0 ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAgICAgICAgICAgIHRlbXBfeCArPSBmcmFtZV9jaGFy X3dpZHRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKyAgICB9Cisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJU SUNBTF9SVUxFUjogIFhXSURHRVRfR0xZUEggICAgICAgICAgICAgICAgICAgICAqLworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCisgICAgY2FzZSBWRVJUSUNBTF9SVUxFUjoKKyAgICB7CisgICAg ICAvKiBgZ2x5cGgtPmNoYXJwb3NgIGlzIHVucmVsaWFibGUgd2hlbiB0ZXN0aW5nIGZvciBaViAt LSB3aXRob3V0IGxpbmUKKyAgICAgIG51bWJlcnMsIHRoZSB2YWx1ZSBpcyAtMTsgd2l0aCBsaW5l IG51bWJlcnMsIHRoZSB2YWx1ZSBpcyBfc29tZXRpbWVzXyBaVi4KKyAgICAgIGBnbHlwaC0+enZf cGAgaXMgcmVsaWFibGUsIGJ1dCByZWxpZXMgdXBvbiBhIGZldyBjb3JlIG1vZGlmaWNhdGlvbi4K KyAgICAgIGB6dl9wYCBlbmNvbXBhc3NlcyBhIGNvdXBsZSBvZiBzaXR1YXRpb25zOiAgYSBsaW5l IGVuZGluZyBpbiBaViwgYnV0CisgICAgICAgY29udGFpbmluZyBvbmUgb3IgbW9yZSBjaGFyYWN0 ZXJzIGJlZm9yZSBaVjsgYW5kLCBhIGxpbmUgYmV5b25kIFpWIHRoYXQKKyAgICAgICBtYXkgY29u c2lzdCBvZiBzcGFjZXMgZXF1YWwgdG8gYGl0LT5sbnVtX3BpeGVsX3dpZHRoYCAvIGZyYW1lX2No YXJfd2lkdGgsCisgICAgICAgb3IganVzdCBvbmUgc3BhY2UgaWYgdGhlcmUgYXJlIG5vIGxpbmUg bnVtYmVycy4gKi8KKyAgICAgIGJvb2wgenZfcCA9IChnbHlwaCAtIHJvdy0+Z2x5cGhzW1RFWFRf QVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAgICAgICYmIE1BVFJJ WF9ST1dfRU5EX0NIQVJQT1MgKHJvdykgPT0gWlYpOworICAgICAgYm9vbCBjdXJzb3JfaW5fZnJp bmdlX3AgPSBvcG9pbnRfeCArIGdseXBoLT5waXhlbF93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7 CisgICAgICBpbnQgZmxhdm9yID0gKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAg ICAgICAmJiByb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgICAgICAgICAgICAg PyBNQ19WRVJUSUNBTF9CQVJfUklHSFRfQVJST1cKKyAgICAgICAgICAgICAgICAgICA6IChjdXJz b3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgICAmJiByb3ctPmNvbnRpbnVlZF9w KQorICAgICAgICAgICAgICAgICAgICAgPyBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAg ICAgICAgICAgICAgICAgOiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICAg ICAgJiYgIXJvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAgICAgICAgICAm JiAhcm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxf QkFSCisgICAgICAgICAgICAgICAgICAgOiAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFd ID09IHJvdy0+dXNlZFthcmVhXSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRf eCA+IHJlbGF0aXZlX3gpCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAg ICAgICAgICAgICAgICAgIDogKHp2X3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBI TEVTUworICAgICAgICAgICAgICAgICAgIDogTUNfR0xZUEg7CisgICAgICBpZiAoZmxhdm9yID09 IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJPVworICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19W RVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAgICAgICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FM X0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUgPSBSSUdIVF9GUklOR0VfQklUTUFQOworICAgICAg aW50IF9meCwgX2Z5LCBoLCBfd2Q7CisgICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkg KHcsIHJvdywgdGVtcF94LCAmX2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZW1wX3ksICZfZnksIHRlbXBfaHBvcywgdGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmaCwgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7Cisg ICAgICBpbnQgZnggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCBvcG9pbnRfeCk7 CisgICAgICBtY19oZWxwZXIgKHcsIHRlbXBfeCwgZngsIHRlbXBfeSwgLTEsIHRlbXBfaHBvcywg dGVtcF92cG9zLAorICAgICAgICAgICAgICAgICBoLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRo LCBmb3JlZ3JvdW5kLAorICAgICAgICAgICAgICAgICBtY19iZ19sc2wgKHcsIHRlbXBfZmFjZV9p ZCksIGFjdGl2ZV9wLAorICAgICAgICAgICAgICAgICBtaW5pbWFsX3AsIGZsYXZvciwgdGVtcF9j aGFycG9zLCByZXN1bHQpOworICAgICAgYnJlYWs7CisgICAgfQorLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgRklMTF9DT0xVTU46ICBYV0lER0VU X0dMWVBIICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor ICAgIGNhc2UgRklMTF9DT0xVTU46CisgICAgeworICAgICAgLyogYGdseXBoLT5jaGFycG9zYCBp cyB1bnJlbGlhYmxlIHdoZW4gdGVzdGluZyBmb3IgWlYgLS0gd2l0aG91dCBsaW5lCisgICAgICBu dW1iZXJzLCB0aGUgdmFsdWUgaXMgLTE7IHdpdGggbGluZSBudW1iZXJzLCB0aGUgdmFsdWUgaXMg X3NvbWV0aW1lc18gWlYuCisgICAgICBgZ2x5cGgtPnp2X3BgIGlzIHJlbGlhYmxlLCBidXQgcmVs aWVzIHVwb24gYSBmZXcgY29yZSBtb2RpZmljYXRpb24uCisgICAgICBgenZfcGAgZW5jb21wYXNz ZXMgYSBjb3VwbGUgb2Ygc2l0dWF0aW9uczogIGEgbGluZSBlbmRpbmcgaW4gWlYsIGJ1dAorICAg ICAgIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgWlY7IGFuZCwgYSBs aW5lIGJleW9uZCBaViB0aGF0CisgICAgICAgbWF5IGNvbnNpc3Qgb2Ygc3BhY2VzIGVxdWFsIHRv IGBpdC0+bG51bV9waXhlbF93aWR0aGAgLyBmcmFtZV9jaGFyX3dpZHRoLAorICAgICAgIG9yIGp1 c3Qgb25lIHNwYWNlIGlmIHRoZXJlIGFyZSBubyBsaW5lIG51bWJlcnMuICovCisgICAgICBib29s IHp2X3AgPSAoZ2x5cGggLSByb3ctPmdseXBoc1tURVhUX0FSRUFdID09IHJvdy0+dXNlZFthcmVh XSAtIDEKKyAgICAgICAgICAgICAgICAgICAmJiBNQVRSSVhfUk9XX0VORF9DSEFSUE9TIChyb3cp ID09IFpWKTsKKyAgICAgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gb3BvaW50X3ggKyBnbHlw aC0+cGl4ZWxfd2lkdGggPj0gdGV4dF9hcmVhX3dpZHRoOworICAgICAgaW50IGZsYXZvciA9IChj dXJzb3JfaW5fZnJpbmdlX3AKKyAgICAgICAgICAgICAgICAgICAgJiYgcm93LT50cnVuY2F0ZWRf b25fcmlnaHRfcCkKKyAgICAgICAgICAgICAgICAgICAgID8gTUNfVkVSVElDQUxfQkFSX1JJR0hU X0FSUk9XCisgICAgICAgICAgICAgICAgICAgOiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAg ICAgICAgICAgICAgICAgJiYgcm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICAgICAgICAgICAg ID8gTUNfVkVSVElDQUxfQkFSX0JBQ0tTTEFTSAorICAgICAgICAgICAgICAgICAgIDogKGN1cnNv cl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAgICAgICYmICFyb3ctPnRydW5jYXRlZF9v bl9yaWdodF9wCisgICAgICAgICAgICAgICAgICAgICAgJiYgIXJvdy0+Y29udGludWVkX3ApCisg ICAgICAgICAgICAgICAgICAgICA/IE1DX1ZFUlRJQ0FMX0JBUgorICAgICAgICAgICAgICAgICAg IDogKGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXSA9PSByb3ctPnVzZWRbYXJlYV0gLSAx CisgICAgICAgICAgICAgICAgICAgICAgJiYgZmlsbF9jb2x1bW5feCA+IHJlbGF0aXZlX3gpCisg ICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgIDog KHp2X3ApCisgICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAg ICAgICAgIDogKCFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzX3Zl cnRpY2FsX3J1bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfeSA9PSB0ZW1w X3kKKyAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB0ZW1wX3Zwb3MpCisg ICAgICAgICAgICAgICAgICAgICA/IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICAgICAgIDog TUNfR0xZUEg7CisgICAgICBpZiAoZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUl9SSUdIVF9BUlJP VworICAgICAgICAgIHx8IGZsYXZvciA9PSBNQ19WRVJUSUNBTF9CQVJfQkFDS1NMQVNICisgICAg ICAgICAgfHwgZmxhdm9yID09IE1DX1ZFUlRJQ0FMX0JBUikKKyAgICAgICAgY3Vyc29yX3R5cGUg PSBSSUdIVF9GUklOR0VfQklUTUFQOworICAgICAgaW50IF9meCwgX2Z5LCBoLCBfd2Q7CisgICAg ICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIHJvdywgdGVtcF94LCAmX2Z4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3ksICZfZnksIHRlbXBfaHBvcywg dGVtcF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaCwgY3Vyc29y X3R5cGUsIGN1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICBpbnQgZnggPSBXSU5ET1dfVEVYVF9U T19GUkFNRV9QSVhFTF9YICh3LCBmaWxsX2NvbHVtbl94KTsKKyAgICAgIG1jX2hlbHBlciAodywg dGVtcF94LCBmeCwgdGVtcF95LCAtMSwgdGVtcF9ocG9zLCB0ZW1wX3Zwb3MsCisgICAgICAgICAg ICAgICAgIGgsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsCisgICAgICAg ICAgICAgICAgIG1jX2JnX2xzbCAodywgdGVtcF9mYWNlX2lkKSwgYWN0aXZlX3AsCisgICAgICAg ICAgICAgICAgIG1pbmltYWxfcCwgZmxhdm9yLCB0ZW1wX2NoYXJwb3MsIHJlc3VsdCk7CisgICAg ICBicmVhazsKKyAgICB9CisgIH0KKyAgfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQ6ICBYV0lER0VUX0dMWVBIICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworfQorCisvKiBN VUxUSVBMRV9DVVJTT1JTX0NBQ0hFOgorLSAgVGhlIGZpcnN0IGVsZW1lbnQgaXMgY29tcGFyZWQg dG8gdGhlIGBtdWx0aXBsZS1jdXJzb3JzLWNvbmYnIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5l ZWQgdG8KKyAgIHJlY2FsY3VsYXRlIGNvb3JkaW5hdGVzLiAgW1dlIGFsc28gY2hlY2sgd2hldGhl ciB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBjaGFuZ2VkLl0KKy0gIFRoZSBzZWNvbmQgZWxlbWVu dCBjb250YWlucyBhbGwgcHJldmlvdXNseSBjYWxjdWxhdGVkIGNvb3JkaW5hdGVzLgorLSAgVGhl IHRoaXJkIGVsZW1lbnQgaXMgdGhlIGJ1ZmZlciB3aGVyZSB0aGUgYHctPm11bHRpcGxlX2N1cnNv cnNfY2FjaGUnIHdhcyBzZXQuICBCZWNhdXNlIHRoZQorICAgYHctPm11bHRpcGxlX2N1cnNvcnNf Y2FjaGUnIGlzIHdpbmRvdy1sb2NhbCwgd2UgbmVlZCB0byBjaGVjayBib3RoIHRoZSB3aW5kb3cg YW5kIHRoZSBidWZmZXIuCisgICAgICgoKDIyIDIwIDIgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lk dGggZm9yZWdyb3VuZCBiYWNrZ3JvdW5kIGFjdGl2ZV9wIGZsYXZvciBwb3NpbnQpCisgICAgICAg KDMzIDIwIDMgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBiYWNrZ3JvdW5k IGFjdGl2ZV9wIGZsYXZvciBwb3NpbnQpCisgICAgICAgKDQ0IDIwIDQgMCBjdXJzb3JfdHlwZSBj dXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBiYWNrZ3JvdW5kIGFjdGl2ZV9wIGZsYXZvciBwb3NpbnQp CisgICAgICAgKDU1IDIwIDUgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBi YWNrZ3JvdW5kIGFjdGl2ZV9wIGZsYXZvciBwb3NpbnQpCisgICAgICAgKDY2IDIwIDYgMCBjdXJz b3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9yZWdyb3VuZCBiYWNrZ3JvdW5kIGFjdGl2ZV9wIGZsYXZv ciBwb3NpbnQpCisgICAgICAgKDc3IDIwIDcgMCBjdXJzb3JfdHlwZSBjdXJzb3Jfd2lkdGggZm9y ZWdyb3VuZCBiYWNrZ3JvdW5kIGFjdGl2ZV9wIGZsYXZvciBwb3NpbnQpKQorICAgICAgKFdJTkRP VyB3aGVyZSBgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZScgd2FzIHNldC4pCisgICAgICAoQlVG RkVSIHdoZXJlIGB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlJyB3YXMgc2V0LikpICovCisvKiBJ ZiBSRU1PVkUgaXMgMCwgdGhlbiBkcmF3IGZha2UgY3Vyc29ycy4gIElmIFJFTU9WRSBpcyAxLCB0 aGVuIGVyYXNlIGZha2UgY3Vyc29ycy4gKi8KKwordm9pZAorbWNfZHJhd19tdWx0aXBsZV9jdXJz b3JzIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGFjdGl2ZV9wLCBib29sIG1pbmltYWxfcCkKK3sK Ky8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBkb3VibGUg Y3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07CisgIHN0 YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJh Y2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25m KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19tdWx0aXBs ZV9jdXJzb3JzICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9CisjZW5kaWYKKyAgYm9vbCBt Y19zdGRlcnJfcCA9ICFOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZlciwgbWNfc3RkZXJyKSk7Cisg IHB0cmRpZmZfdCBvcG9pbnRfcHQgPSBQVDsKKyAgaW50IG9wb2ludF94ID0gdy0+cGh5c19jdXJz b3IueDsKKyAgaW50IG9wb2ludF95ID0gdy0+cGh5c19jdXJzb3IueTsKKyAgaW50IG9wb2ludF9o cG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+cGh5c19j dXJzb3IudnBvczsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIExp c3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgIHN0 cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpvbGRfYnVm ZmVyID0gTlVMTDsKKyAgTGlzcF9PYmplY3Qgd2luZG93OworICBYU0VUV0lORE9XICh3aW5kb3cs IHcpOworICAvKiBXaGVuIHN3aWNoaW5nIHRvIGFub3RoZXIgYnVmZmVyIChlLmcuLCBhIG5ldyBi dWZmZXIpLCBgdy0+Y29udGVudHNgIG1heSBub3QKKyAgbmVjZXNzYXJpbHkgYmUgdGhlIGBjdXJy ZW50X2J1ZmZlcmAuICBJbiBzdWNoIGEgY2FzZSwgYWxsIGNhbGN1bGF0aW9ucyB3b3VsZAorICBi ZSB3cm9uZyB1bmxlc3MgYHctPmNvbnRlbnRzYCBpcyBzZXQgYXMgdGhlIGBjdXJyZW50X2J1ZmZl cmAuICBUaGlzIGF2b2lkcworICBlcnJvcnMgdGhhdCBhcmUgdGltZSBjb25zdW1pbmcgdG8gZGVi dWc6ICBicmVhayBhcmdzX291dF9vZl9yYW5nZSAqLworICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZl cikKKyAgICB7CisgICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7CisgICAgICBzZXRf YnVmZmVyX2ludGVybmFsIChiKTsKKyAgICB9CisgIC8qIGBzdGFydF9kaXNwbGF5JyBjYWxscyBg aW5pdF9pdGVyYXRvcicgd2hpY2ggY3Jhc2hlcyBFbWFjcyBpZjoKKyAgZWFzc2VydCAoY2hhcnBv cyA8IDAgfHwgKGNoYXJwb3MgPj0gQlVGX0JFRyAoY3VycmVudF9idWZmZXIpICYmIGNoYXJwb3Mg PD0gWlYpKQorICBlYXNzZXJ0IChjaGFycG9zID09IEJZVEVfVE9fQ0hBUiAoYnl0ZXBvcykpCisg IFRoaXMgaGFwcGVucyB3aGVuIG11bHRpcGxlIGZha2UgY3Vyc29ycyBhcmUgYWN0aXZlIGFuZCB0 aGUgdXNlciB0eXBlczogIE0teCAuLi4uICovCisgIHB0cmRpZmZfdCBjaGFycG9zID0gbWFya2Vy X3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0 aW9uOworICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0X3RleHRfcG9zaXRpb24sIHct PnN0YXJ0KTsKKyAgcHRyZGlmZl90IGJ5dGVwb3MgPSBCWVRFUE9TIChzdGFydF90ZXh0X3Bvc2l0 aW9uKTsKKyAgYm9vbCBiYXJmX2NyYXNoX29uZSA9IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+ PSBCVUZfQkVHIChjdXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpID8gZmFsc2UgOiB0 cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIp CisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJu OworICAgIH0KKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9IChjaGFycG9zID09IEJZVEVfVE9fQ0hB UiAoYnl0ZXBvcykpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90d28pCisgICAg eworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJuYWwgKG9s ZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogYG1hdHJpeF9yb3cnIGluIGBk aXNwbmV3LmNgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdHMsCisgIGVhc3NlcnQgKG1hdHJp eCAmJiBtYXRyaXgtPnJvd3MpOworICBlYXNzZXJ0IChyb3cgPj0gMCAmJiByb3cgPCBtYXRyaXgt Pm5yb3dzKTsgKi8KKyAgYm9vbCBiYXJmX2NyYXNoX3RocmVlID0gKHctPmN1cnJlbnRfbWF0cml4 ICYmIHctPmN1cnJlbnRfbWF0cml4LT5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZf Y3Jhc2hfdGhyZWUpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9i dWZmZXJfaW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgYm9v bCBiYXJmX2NyYXNoX2ZvdXIgPSAob3BvaW50X3Zwb3MgPj0gMCAmJiBvcG9pbnRfdnBvcyA8IHct PmN1cnJlbnRfbWF0cml4LT5ucm93cykgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNo X2ZvdXIpCisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJf aW50ZXJuYWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcHRyZGlmZl90 IHBvc2ludCA9IC0xOworICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBp bnQgY3Vyc29yX3dpZHRoID0gMTsKKyAgTGlzcF9PYmplY3Qgc3BlY3MsIGxpc3BfdHlwZSwgZm9y ZWdyb3VuZCwgdmxpc3Q7CisgIExpc3BfT2JqZWN0IHJlc3VsdCA9IFFuaWw7CisgIGludCBoZWFk ZXJfbGluZV9mb3JtYXQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KTsKKyAgYm9vbCB1 cGRhdGluZ19mcmFtZV9wID0gZmFsc2U7CisgIGlmIChYRlJBTUUgKHctPmZyYW1lKSAhPSBYRlJB TUUgKHctPmZyYW1lKS0+bWNfdXBkYXRpbmdfZnJhbWUpCisgICAgeworICAgICAgdXBkYXRpbmdf ZnJhbWVfcCA9IHRydWU7CisgICAgICB1cGRhdGVfYmVnaW4gKFhGUkFNRSAody0+ZnJhbWUpKTsK KyAgICB9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAg ICAgICAgRVJBU0UgVEhFIFJFQUwgQ1VSU09SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgIC8qIGBkaXNwbGF5X2FuZF9zZXRfY3Vyc29y JyBwcm9wZXJseSBzZXRzIGB3LT5waHlzX2N1cnNvci54L3kvaHBvcy92cG9zYCB3aGVuCisgIHRo ZSBjdXJzb3IgaXMgT04uICovCisvKiBgdy0+cGh5c19jdXJzb3IueC95L2hwb3MvdnBvc2AgYXJl IGluY29ycmVjdCBhZnRlciBldmFsdWF0aW5nIChzY3JvbGwtbGVmdCAxKQorYSBjb3VwbGUgb2Yg dGltZXMuICBSZWRpc3BsYXkgZXJhc2VzIHRoZSByZWFsIGN1cnNvciBhbG1vc3QgaW1tZWRpYXRl bHkgYWZ0ZXIKK2BtY19kcmF3X2Nyb3NzaGFpcnMnIHJ1bnMgaXRzIGNvdXJzZSAtLSBhbG1vc3Qg dG9vIHF1aWNrbHkgdG8gc2VlIGl0IGhhcHBlbmluZy4KK1RoZSBjaGFyYWN0ZXIgd2hlcmUgRW1h Y3MgdGhpbmtzIHRoZSByZWFsIGN1cnNvciBpcyBsb2NhdGVkIGdldHMgcmVkcmF3biwgYWxiaWV0 Cit3aXRob3V0IHRoZSByZWFsIGN1cnNvci4gIEVtYWNzIHRoaW5rcyB0aGUgcmVhbCBjdXJzb3Ig aXMgb25lIGNoYXJhY3RlciB0byB0aGUKK3JpZ2h0IG9mIHdoZXJlIGl0IHNob3VsZCBiZSAtLSB0 aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBpbmNvcnJlY3QgSFBPUy4KK1RoaXMgcGhlbm9t ZW5hIGRvZXMgbm90IG9jY3VyIHdoZW4gKHNjcm9sbC1sZWZ0IDEpIGlzIGNhbGxlZCBpbnRlcmFj dGl2ZWx5OyBlLmcuLAoraG9yaXpvbnRhbCBzY3JvbGwgd2hlZWwuICBJbmFzbXVjaCBhcyBgZXJh c2VfcGh5c19jdXJzb3InIHVwZGF0ZXMgbW9yZSB0aGFuCittZXJlbHkgdGhlIGFmb3JlbWVudGlv bmVkIGNvb3JkaW5hdGVzLCByZXNldHRpbmcgdGhvc2UgY29vcmRpbmF0ZXMgYWZ0ZXIgdGhlIGZh Y3QKK2lzIGluc3VmZmljaWVudCB0byBmaXggdGhlIHByb2JsZW0uICBXZSB1c2UgYHctPm91dHB1 dF9jdXJzb3IueC95L2hwb3MvdnBvc2AKK2JlY2F1c2UgdGhvc2UgY29vcmRpbmF0ZXMgYXJlIGNv cnJlY3QuICBXZSBmaXggYHctPnBoeXNfY3Vyc29yLngveS9ocG9zL3Zwb3NgCitCRUZPUkUgY2Fs bGluZyBgZXJhc2VfcGh5c19jdXJzb3InIHNvIHRoYXQgb3RoZXIgZ29vZGllcyBhcmUgdXBkYXRl ZC4gKi8KKyAgaWYgKHctPmhzY3JvbGwgPiAwKQorICAgIHsKKyAgICAgIHctPnBoeXNfY3Vyc29y LnggPSB3LT5vdXRwdXRfY3Vyc29yLng7CisgICAgICB3LT5waHlzX2N1cnNvci55ID0gdy0+b3V0 cHV0X2N1cnNvci55OworICAgICAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IHctPm91dHB1dF9jdXJz b3IuaHBvczsKKyAgICAgIHctPnBoeXNfY3Vyc29yLnZwb3MgPSB3LT5vdXRwdXRfY3Vyc29yLnZw b3M7CisgICAgfQorICBlcmFzZV9waHlzX2N1cnNvciAodyk7CisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJT T1IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov CisgIHB0cmRpZmZfdCBjdXJyZW50X2NvbDsKKyAgYm9vbCBmaWxsX2NvbHVtbl9wID0gIU5JTFAg KEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIGludCBmaWxsX2NvbCA9IFhGSVhOVU0gKEJWQVIg KGIsIGZpbGxfY29sdW1uKSk7CisgIGVudW0gZmFjZV9pZCBldmVuX2ZhY2VfaWQgPQorICAgICgh YWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jv c3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywg ZiwgaW50ZXJuICgiKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNlIiksIHRydWUp CisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLW51bWJlcmVk LWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9mYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBldmVuX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBldmVuX2NvbG9yID0gZXZl bl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChl dmVuX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9jb2xvcl92ZWN0b3IgPSBtY19jb2xvcl92 ZWN0b3JfY2FsYyAodywgZXZlbl9jb2xvcik7CisgIGVudW0gZmFjZV9pZCBvZGRfZmFjZV9pZCA9 CisgICAgKCFhY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUtZmFjZSIp LCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistb2RkLW51 bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqb2RkX2ZhY2UgPSBG QUNFX0ZST01fSUQgKGYsIG9kZF9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qgb2RkX2NvbG9yID0g b2RkX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBDSEVDS19TVFJJTkcg KG9kZF9jb2xvcik7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvcl92ZWN0b3IgPSBtY19jb2xvcl92 ZWN0b3JfY2FsYyAodywgb2RkX2NvbG9yKTsKKyAgZW51bSBmYWNlX2lkIGZpbGxfZmFjZV9pZCA9 CisgICAgKCFhY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVu dHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9uYW1lZF9m YWNlICh3LCBmLCBpbnRlcm4gKCIrLWJleW9uZC1maWxsLWNvbHVtbi1pbmFjdGl2ZS1mYWNlIiks IHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1iZXlvbmQt ZmlsbC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZpbGxfZmFjZSA9IEZB Q0VfRlJPTV9JRCAoZiwgZmlsbF9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9jb2xvciA9 IGZpbGxfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIENIRUNLX1NUUklO RyAoZmlsbF9jb2xvcik7CisgIExpc3BfT2JqZWN0IGZpbGxfY29sb3JfdmVjdG9yID0gbWNfY29s b3JfdmVjdG9yX2NhbGMgKHcsIGZpbGxfY29sb3IpOworICAvKiBGSVhNRTogIFB1dCBpbiBzb21l IGNvZGUgdG8gZGVmYXVsdCB0byBIT0xMT1dfQk9YX0NVUlNPUiBpZiB0aGUgdXNlciBoYXMKKyAg dW53aXR0aW5nbHkgY29tZSB1cCB3aXRoIHNvbWUgdW5hY2NlcHRhYmxlIGZvcm0gb2YgdW5yZWNv Z25pemVkIGN1cnNvciB0eXBlLiAqLworICBMaXNwX09iamVjdCBjdXJzb3JfbGlzcF90eXBlID0g QlZBUiAoYiwgbWNfcmVhbF9mYWtlX2N1cnNvcik7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMg dGVtcF9jdXJzb3JfdHlwZSA9IChDT05TUCAoY3Vyc29yX2xpc3BfdHlwZSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1jX2xpc3BfdG9fY3Vyc29yX3R5 cGUgKFhDQVIgKGN1cnNvcl9saXNwX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBtY19saXNwX3RvX2N1cnNvcl90eXBlIChjdXJzb3JfbGlzcF90 eXBlKTsKKyAgaW50IHRlbXBfY3Vyc29yX3dpZHRoID0gKENPTlNQIChjdXJzb3JfbGlzcF90eXBl KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWEZJWE5VTSAoWENBUiAoWENEUiAoY3Vy c29yX2xpc3BfdHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworICBlbnVt IGZhY2VfaWQgY3Vyc29yX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX3AKKyAgICAgJiYgIU5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dz KSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut Y3Vyc29yLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3 LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0 IGZhY2UgKmN1cnNvcl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBjdXJzb3JfZmFjZV9pZCk7Cisg IExpc3BfT2JqZWN0IGN1cnNvcl9jb2xvciA9IGN1cnNvcl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JF R1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChjdXJzb3JfY29sb3IpOworICBjdXJyZW50 X2NvbCA9IG1jX2N1cnJlbnRfY29sdW1uICh3LCBvcG9pbnRfcHQpOworICAvKiByZWQgKi8KKyAg aWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAgICBm b3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93ICovCisgIGlmIChjdXJy ZW50X2NvbCAlIDIgPT0gMAorICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgZm9yZWdyb3Vu ZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAvKiByZWQgKi8KKyAgaWYgKGN1cnJlbnRfY29sICUg MiAhPSAwCisgICAgICAmJiBmaWxsX2NvbHVtbl9wCisgICAgICAmJiBjdXJyZW50X2NvbCA8PSBm aWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93 ICovCisgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAorICAgICAgJiYgZmlsbF9jb2x1bW5fcAor ICAgICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wpCisgICAgZm9yZWdyb3VuZCA9IGV2ZW5f Y29sb3JfdmVjdG9yOworICAvKiBncmVlbiAqLworICBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAg JiYgY3VycmVudF9jb2wgPiBmaWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gZmlsbF9jb2xvcl92 ZWN0b3I7CisgIExpc3BfT2JqZWN0IGN1cnNvcl9mZyA9IChhY3RpdmVfcCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgPyBmb3JlZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIDog bWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGN1cnNvcl9jb2xvcik7CisgIHN0cnVjdCBnbHlwaCAq Y3Vyc29yX2dseXBoID0KKyAgICAgICAgICAgIG1jX2dldF9waHlzX2N1cnNvcl9nbHlwaCAodywg b3BvaW50X3gsIG9wb2ludF9ocG9zLCBvcG9pbnRfdnBvcyk7CisgIGN1cnNvcl9mYWNlX2lkID0g KGN1cnNvcl9nbHlwaCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICA/IERFRkFVTFRfRkFD RV9JRAorICAgICAgICAgICAgICAgICAgICA6IGN1cnNvcl9nbHlwaC0+ZmFjZV9pZDsKKyAgbWNf aGVscGVyICh3LCBvcG9pbnRfeCwgLTEsIG9wb2ludF95LCAtMSwgb3BvaW50X2hwb3MsIG9wb2lu dF92cG9zLAorICAgICAgICAgICAgIC0xLCB0ZW1wX2N1cnNvcl90eXBlLCB0ZW1wX2N1cnNvcl93 aWR0aCwgY3Vyc29yX2ZnLAorICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgY3Vyc29yX2ZhY2Vf aWQpLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICBtaW5pbWFsX3AsIE1DX0dMWVBILCBvcG9pbnRf cHQsICZyZXN1bHQpOworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgICAg ICAgICAgICAgIERSQVcgLyBSRUNPUkQgTVVMVElQTEUgQ1VSU09SUyAgICAgICAgICAgICAgICAg ICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBmb3IgKHZsaXN0ID0gQlZBUiAo YiwgbXVsdGlwbGVfY3Vyc29yc19jb25mKTsKKyAgICAgICBDT05TUCAodmxpc3QpOworICAgICAg IHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIHNwZWNzID0gWENBUiAodmxpc3Qp OworICAgICAgcG9zaW50ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBzcGVjcykp OworICAgICAgbGlzcF90eXBlID0gRm50aCAobWFrZV9maXhudW0gKDEpLCBzcGVjcyk7CisgICAg ICBpZiAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90 b19jdXJzb3JfdHlwZSAoWENBUiAobGlzcF90eXBlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKGxpc3BfdHlwZSk7CisgICAg ICBpZiAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgIGN1cnNvcl93aWR0aCA9IFhGSVhOVU0g KFhDQVIgKFhDRFIgKGxpc3BfdHlwZSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGN1cnNv cl93aWR0aCA9IDE7CisgICAgICBmb3JlZ3JvdW5kID0gRm50aCAobWFrZV9maXhudW0gKDIpLCBz cGVjcyk7CisgICAgICBpZiAoU1RSSU5HUCAoZm9yZWdyb3VuZCkpCisgICAgICAgIGZvcmVncm91 bmQgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgZm9yZWdyb3VuZCk7CisgICAgICBzdHJ1Y3Qg Z2x5cGhfbWF0cml4ICptYXRyaXggPSB3LT5jdXJyZW50X21hdHJpeDsKKyAgICAgIGludCByb3df c3RhcnQsIHJvd19lbmQsIHdpbmRvd19yb3dfc3RhcnQsIHdpbmRvd19yb3dfZW5kOworICAgICAg aW50IGk7CisgICAgICBMaXNwX09iamVjdCB0ZW1wID0gUW5pbDsKKyAgICAgIExpc3BfT2JqZWN0 IHZzcGVjcyA9IFFuaWw7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF0cml4LT5ucm93czsgKytp KQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gTUFUUklYX1JP VyAobWF0cml4LCBpKTsKKyAgICAgICAgICByb3dfc3RhcnQgPSBNQVRSSVhfUk9XX1NUQVJUX0NI QVJQT1MgKHJvdyk7CisgICAgICAgICAgaWYgKChoZWFkZXJfbGluZV9mb3JtYXQgPiAwICYmIGkg PT0gMSkKKyAgICAgICAgICAgICAgIHx8IChoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCAmJiBpID09 IDApKQorICAgICAgICAgICAgd2luZG93X3Jvd19zdGFydCA9IHJvd19zdGFydDsKKyAgICAgICAg ICBpZiAoIXJvdy0+ZW5hYmxlZF9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aW5k b3dfcm93X2VuZCA9IHJvd19lbmQ7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcm93 X2VuZCA9IE1BVFJJWF9ST1dfRU5EX0NIQVJQT1MgKHJvdyk7CisgICAgICAgICAgICAgICAgdGVt cCA9IGxpc3RuIChDT05TVFlQRV9IRUFQLCAzLCBtYWtlX2ZpeG51bSAoaSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAocm93X3N0 YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VfZml4bnVtIChyb3dfZW5kKSk7CisgICAgICAgICAgICAgICAgdnNwZWNzID0gRmNvbnMgKHRl bXAsIHZzcGVjcyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgaWYgKHBvc2lu dCA+PSB3aW5kb3dfcm93X3N0YXJ0CisgICAgICAgICAgJiYgcG9zaW50IDw9IHdpbmRvd19yb3df ZW5kKQorICAgICAgICB7CisgICAgICAgIExpc3BfT2JqZWN0IHZsaXN0OworICAgICAgICBmb3Ig KHZsaXN0ID0gRm5yZXZlcnNlICh2c3BlY3MpOworICAgICAgICAgICAgIENPTlNQICh2bGlzdCk7 CisgICAgICAgICAgICAgdmxpc3QgPSBYQ0RSICh2bGlzdCkpCisgICAgICAgICAgeworICAgICAg ICAgICAgaW50IGNvdW50ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBYQ0FSICh2 bGlzdCkpKTsKKyAgICAgICAgICAgIGludCBwb3Nfc3RhcnQgPSBYRklYTlVNIChGbnRoIChtYWtl X2ZpeG51bSAoMSksIFhDQVIgKHZsaXN0KSkpOworICAgICAgICAgICAgaW50IHBvc19lbmQgPSBY RklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMiksIFhDQVIgKHZsaXN0KSkpOworICAgICAgICAg ICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgs IGNvdW50KTsKKyAgICAgICAgICAgIGludCBhcmVhOworICAgICAgICAgICAgaW50IHJlbGF0aXZl X3ggPSAwOworICAgICAgICAgICAgZm9yIChhcmVhID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8 IExBU1RfQVJFQTsgKythcmVhKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Ry dWN0IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5cGhzW2FyZWFdOworICAgICAgICAgICAgICAgIHN0 cnVjdCBnbHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyByb3ctPnVzZWRbYXJlYV07CisgICAgICAg ICAgICAgICAgaWYgKGFyZWEgPT0gVEVYVF9BUkVBICYmIGdseXBoID09IGdseXBoX2VuZCAmJiBn bHlwaC0+Y2hhcnBvcyA+IDApCisgICAgICAgICAgICAgICAgICArK2dseXBoX2VuZDsKKyAgICAg ICAgICAgICAgICBpZiAobWNfc3RkZXJyX3AKKyAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgg PCBnbHlwaF9lbmQpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisiXG5jb3Vu dCAoJWQpIHwgd2luZG93X3Jvd19zdGFydC9lbmQgKCVkLyVkKSB8IHJvd19zdGFydC9lbmQgKCVk LyVkKVxuXAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBNVUxUSVBMRSBDVVJTT1JTID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXAorR2x5cGgjL1RvdGFsIFJlbC5YIFQg ICAgICAgUG9zIE8gICBXICAgICBDb2RlIEZhY2UgTFIgICAgIFggICAgWSBIUE9TIFZQT1MgWlYg Q1xuIiwKK2NvdW50LCB3aW5kb3dfcm93X3N0YXJ0LCB3aW5kb3dfcm93X2VuZCwgcG9zX3N0YXJ0 LCBwb3NfZW5kKTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgZ2x5cGggPCBnbHlwaF9lbmQ7ICsr Z2x5cGgpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKGhl YWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgY291bnQgPiAwKQorICAgICAgICAgICAgICAgICAgICAg ICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAg JiYgKGdseXBoLT5jaGFycG9zID09IHBvc2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRoZSBzcGFjZSBhcHBlbmRlZCB0byBhIHJvdyBlbmRpbmcgd2l0aCBhIG5ldyBsaW5lCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgaGF2ZSBhIGBnbHlwaC0+Y2hhcnBv c2AgKC0xLCAwKSB0aGF0IHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBm b3IgdGhpcyBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLiAgV2hlbiB0aGVyZSBpcyBhCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYGJ1ZmZlci1kaXNwbGF5LXRhYmxlJyBlbnRyeSB0aGF0IGFz c2lnbnMgYSB2aXNpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGggdG8gYSBu ZXcgbGluZSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBiZWNhdXNlIHRoYXQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnbHlwaCBoYXMgYSBgZ2x5cGgtPmNoYXJwb3MnIHRoYXQgd2UgY2FuIHVz ZS4gIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyB2aXNpYmxlIEVPTCBnbHlw aCBleGlzdHMsIHdlIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGVzdDogIHRoZSBhcHBlbmRlZCBzcGFjZSBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9uZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgZW5kIG9mIHRoZSBtYXRy aXggcm93LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChnbHlwaCAtIHJvdy0+ Z2x5cGhzW1RFWFRfQVJFQV0gPT0gcm93LT51c2VkW2FyZWFdIC0gMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBwb3NpbnQgPT0gTUFUUklYX1JPV19FTkRfQ0hBUlBPUyAocm93 KSAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgtPnkgPD0gd2luZG93X3Rl eHRfYm90dG9tX3kgKHcpKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGN1cnJlbnRfY29sID0gbWNfY3VycmVudF9jb2x1bW4gKHcsIHBvc2ludCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoTklMUCAoZm9yZWdyb3VuZCkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9jb2wgJSAyICE9IDAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB5ZWxsb3cgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY3VycmVudF9jb2wgJSAyID09IDAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3JlZ3JvdW5kID0gZXZlbl9jb2xvcl92ZWN0b3I7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogcmVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJl bnRfY29sICUgMiAhPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZpbGxf Y29sdW1uX3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3VycmVudF9jb2wg PD0gZmlsbF9jb2wpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kID0g b2RkX2NvbG9yX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB5ZWxsb3cg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9jb2wgJSAyID09IDAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQgPSBldmVuX2NvbG9yX3ZlY3Rv cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBncmVlbiAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChmaWxsX2NvbHVtbl9wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYmIGN1cnJlbnRfY29sID4gZmlsbF9jb2wpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3JlZ3JvdW5kID0gZmlsbF9jb2xvcl92ZWN0b3I7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1jX2VuZ2luZSAocm93LCBn bHlwaCwgYXJlYSwgcmVsYXRpdmVfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdywgcG9zaW50LCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5kLCBhY3Rp dmVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbF9wLCBNVUxU SVBMRV9DVVJTT1JTLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICht Y19zdGRlcnJfcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1jX2R1bXBfZ2x5cGggKHJvdywg Z2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gpOworICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZV94 ICs9IGdseXBoLT5waXhlbF93aWR0aDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgaWYgKHVwZGF0aW5nX2ZyYW1l X3ApCisgICAgdXBkYXRlX2VuZCAoWEZSQU1FICh3LT5mcmFtZSkpOworLyogYHctPm11bHRpcGxl X2N1cnNvcnNfY2FjaGUnIGlzIHNldCBmb3IgdGhlIHdpbmRvdywgbm90IGJ1ZmZlcit3aW5kb3cg LS0gaS5lLiwgYWxsIGJ1ZmZlcnMgYXBwZWFyaW5nCitpbiB0aGUgc2FtZSB3aW5kb3cgdmlhIGBz d2l0Y2gtdG8tYnVmZmVyJyB3aWxsIGhhdmUgYHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUnLiAg VGhpcyBiZWhhdmlvcgoraXMgY29uc2lzdGVudCB3aXRoIGZ1bmN0aW9ucyBzdWNoIGFzIGBzZXQt d2luZG93LWRpc3BsYXktdGFibGUnLiAgV2UgZGVhbCB3aXRoIHRoaXMgaW4KK2Buc3Rlcm0ubScg LyBgdzMydGVybS5jJyAvIGB4dGVybS5jJyBieSBjb21wYXJpbmcgYHctPmNvbnRlbnRzJyB0byB0 aGUgdmFsdWUgb2YgdGhlIGBidWYnCitzdG9yZWQgaW4gYHctPm11bHRpcGxlX2N1cnNvcnNfY2Fj aGUnLiAqLworICBpZiAoIU5JTFAgKHJlc3VsdCkpCisgICAgd3NldF9tdWx0aXBsZV9jdXJzb3Jz X2NhY2hlICh3LCBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZyZXZlcnNlIChyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmNvbnMgKHdpbmRvdywgUW5pbCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGY29ucyAody0+Y29udGVudHMsIFFuaWwpKSk7CisgIHctPm1jLmRyYXdfbXVsdGlw bGVfY3Vyc29ycyA9IGZhbHNlOworICBpZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2lu dGVybmFsIChvbGRfYnVmZmVyKTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0gY2xv Y2soKTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENMT0NL U19QRVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAwLCBj cHVfdGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2RyYXdfbXVsdGlwbGVf Y3Vyc29yczogIFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAor bWNfZHJhd19jcm9zc2hhaXJzIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGFjdGl2ZV9wLCBib29s IG1pbmltYWxfcCkKK3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwg ZW5kOworICBkb3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0la RV9CT1VORF07CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9E RUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRl bnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3No YWlycykpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5E T1cgKHdpbmRvdywgdyk7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4x X3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NE QVRBICh3aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2RyYXdfY3Jv c3NoYWlycyAoJXMpOiAgYWN0aXZlX3AgKCVkKSB8IG1pbmltYWxfcCAoJWQpXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgd2luZG93X2NoYXIsIGFjdGl2ZV9wLCBtaW5pbWFsX3ApOworICAg IH0KKyNlbmRpZgorICBib29sIG1jX3N0ZGVycl9wID0gIU5JTFAgKEJWQVIgKGN1cnJlbnRfYnVm ZmVyLCBtY19zdGRlcnIpKTsKKyAgcHRyZGlmZl90IG9wb2ludF9wdCA9ICh3ID09IFhXSU5ET1cg KHNlbGVjdGVkX3dpbmRvdykpCisgICAgICAgICAgICAgICAgICAgICAgICA/IFBUCisgICAgICAg ICAgICAgICAgICAgICAgICA6IFhGSVhOVU0gKEZtYXJrZXJfcG9zaXRpb24gKHctPnBvaW50bSkp OworICBpbnQgb3BvaW50X3ggPSB3LT5waHlzX2N1cnNvci54OworICBpbnQgb3BvaW50X3kgPSB3 LT5waHlzX2N1cnNvci55OworICBpbnQgb3BvaW50X2hwb3MgPSB3LT5waHlzX2N1cnNvci5ocG9z OworICBpbnQgb3BvaW50X3Zwb3MgPSB3LT5waHlzX2N1cnNvci52cG9zOworICBzdHJ1Y3QgZ2x5 cGggKnJlYWxfcGh5c19jdXJzb3JfZ2x5cGggPQorICAgIG1jX2dldF9waHlzX2N1cnNvcl9nbHlw aCAodywgb3BvaW50X3gsIG9wb2ludF9ocG9zLCBvcG9pbnRfdnBvcyk7CisgIHN0cnVjdCBmcmFt ZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBMaXNwX09iamVjdCBidWYgPSB3LT5jb250ZW50 czsKKyAgQ0hFQ0tfQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAo YnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlciA9IE5VTEw7CisgIExpc3BfT2JqZWN0 IHdpbmRvdzsKKyAgWFNFVFdJTkRPVyAod2luZG93LCB3KTsKKyAgLyogV2hlbiBzd2ljaGluZyB0 byBhbm90aGVyIGJ1ZmZlciAoZS5nLiwgYSBuZXcgYnVmZmVyKSwgYHctPmNvbnRlbnRzYCBtYXkg bm90CisgIG5lY2Vzc2FyaWx5IGJlIHRoZSBgY3VycmVudF9idWZmZXJgLiAgSW4gc3VjaCBhIGNh c2UsIGFsbCBjYWxjdWxhdGlvbnMgd291bGQKKyAgYmUgd3JvbmcgdW5sZXNzIGB3LT5jb250ZW50 c2AgaXMgc2V0IGFzIHRoZSBgY3VycmVudF9idWZmZXJgLiAgVGhpcyBhdm9pZHMKKyAgZXJyb3Jz IHRoYXQgYXJlIHRpbWUgY29uc3VtaW5nIHRvIGRlYnVnOiAgYnJlYWsgYXJnc19vdXRfb2ZfcmFu Z2UgKi8KKyAgaWYgKGIgIT0gY3VycmVudF9idWZmZXIpCisgICAgeworICAgICAgb2xkX2J1ZmZl ciA9IGN1cnJlbnRfYnVmZmVyOworICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYik7CisgICAg fQorLyogZWFzc2VydCAoQ0hBUlBPUyAocG9zKSA+PSBCRUdWICYmIENIQVJQT1MgKHBvcykgPD0g WlYpOworICAgZWFzc2VydCAoY2hhcnBvcyA9PSBCWVRFX1RPX0NIQVIgKGJ5dGVwb3MpKTsKKyAg IGVhc3NlcnQgKEJVRl9CRUdfQllURSAoYikgPD0gYnl0ZXBvcyAmJiBieXRlcG9zIDw9IEJVRl9a X0JZVEUgKGIpKTsgKi8KKyAgcHRyZGlmZl90IGNoYXJwb3MgPSBtYXJrZXJfcG9zaXRpb24gKHct PnN0YXJ0KTsKKyAgcHRyZGlmZl90IGJ5dGVwb3MgPSBtYXJrZXJfYnl0ZV9wb3NpdGlvbiAody0+ c3RhcnQpOworICAvKiBFbGkgWi46ICBJZiB3aW5kb3cncyBzdGFydCBwb2ludCBpcyBpbnZhbGlk LCBpdCBtZWFucyB0aGUgd2luZG93IG5lZWRzIHRvIGJlCisgIHJlZGlzcGxheWVkLiAgQWdhaW4s IEknbSBub3Qgc3VyZSBJIHVuZGVyc3RhbmQgaG93IGRvIHlvdSBnZXQgaW50byB0aGlzIHNpdHVh dGlvbgorICBpbiB0aGUgbWlkZGxlIG9mIHJlZGlzcGxheS4gKi8KKyAgYm9vbCBiYXJmX2NyYXNo X29uZSA9IChjaGFycG9zID49IEJFR1YgJiYgY2hhcnBvcyA8PSBaVikgPyBmYWxzZSA6IHRydWU7 CisgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAg ICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47Cisg ICAgfQorICAvKiBFbGkgWi46ICBMaWtld2lzZS4gIE1hcmtlcnMgYXJlIHVwZGF0ZWQgd2hlbiBh IGJ1ZmZlciBpcyBtb2RpZmllZCwgc28gdGhpcworICBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqLwor ICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKGNoYXJwb3MgPT0gQllURV9UT19DSEFSIChieXRlcG9z KSkgPyBmYWxzZSA6IHRydWU7CisgIGlmIChiYXJmX2NyYXNoX3R3bykKKyAgICB7CisgICAgICBp ZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7 CisgICAgICByZXR1cm47CisgICAgfQorICAvKiBgbWF0cml4X3JvdycgaW4gYGRpc3BuZXcuY2Ag Y29udGFpbnMgdGhlIGZvbGxvd2luZyB0ZXN0cywKKyAgZWFzc2VydCAobWF0cml4ICYmIG1hdHJp eC0+cm93cyk7CisgIGVhc3NlcnQgKHJvdyA+PSAwICYmIHJvdyA8IG1hdHJpeC0+bnJvd3MpOyAq LworICBib29sIGJhcmZfY3Jhc2hfdGhyZWUgPSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3Vy cmVudF9tYXRyaXgtPnJvd3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90aHJl ZSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRl cm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICBib29sIGJhcmZfY3Jh c2hfZm91ciA9IChvcG9pbnRfdnBvcyA+PSAwICYmIG9wb2ludF92cG9zIDwgdy0+Y3VycmVudF9t YXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfZm91cikKKyAg ICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAo b2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICBpZiAoIUJVRkZFUlAgKGJ1Zikp CisgICAgeworICAgICAgaWYgKG9sZF9idWZmZXIpCisgICAgICAgIHNldF9idWZmZXJfaW50ZXJu YWwgKG9sZF9idWZmZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKE5JTFAgKEJWQVIg KGIsIGNyb3NzaGFpcnMpKSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAg c2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQor ICBpZiAoTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyKSkKKyAgICAg ICYmIE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKSkKKyAgICB7Cisg ICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1 ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTiBKT1VSTkVZIC4uLgorKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJ RFRIIChmKTsKKyAgaW50IHRleHRfYXJlYV93aWR0aCA9IHdpbmRvd19ib3hfd2lkdGggKHcsIFRF WFRfQVJFQSk7CisgIGJvb2wgY3Vyc29yX2luX2ZyaW5nZV9wID0gdy0+b3V0cHV0X2N1cnNvci54 ICsgZnJhbWVfY2hhcl93aWR0aCA+PSB0ZXh0X2FyZWFfd2lkdGg7CisgIHN0cnVjdCBnbHlwaF9y b3cgKmdseXBoX3JvdzsKKyAgaW50IGN1cnNvcl93aWR0aCA9IDE7CisgIHB0cmRpZmZfdCBwb3Np bnQgPSAtMTsKKyAgcHRyZGlmZl90IGN1cnJlbnRfY29sID0gbWNfY3VycmVudF9jb2x1bW4gKHcs IG9wb2ludF9wdCk7CisgIGJvb2wgZmlsbF9jb2x1bW5fcCA9ICFOSUxQIChCVkFSIChiLCBmaWxs X2NvbHVtbikpOworICBpbnQgZmlsbF9jb2wgPSBYRklYTlVNIChCVkFSIChiLCBmaWxsX2NvbHVt bikpOworICBpbnQgZmlsbF9jb2x1bW5feCA9IChmaWxsX2NvbHVtbl9wKQorICAgICAgICAgICAg ICAgICAgICAgID8gZmlsbF9jb2wgKiBmcmFtZV9jaGFyX3dpZHRoCisgICAgICAgICAgICAgICAg ICAgICAgOiAwOworICBMaXNwX09iamVjdCByZXN1bHQgPSBRbmlsOworICBpbnQgZmxhdm9yOwor ICAvKiBWYWx1ZXMgZm9yIHRoZSBjdXJyZW50IGNvbHVtbiBvZiB0aGUgdmVydGljYWwgbGluZS4g Ki8KKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IEZtYWtlX3ZlY3RvciAobWFrZV9maXhudW0g KDMpLCBRbmlsKTsKKyAgZW51bSBmYWNlX2lkIGZhY2VfaWQ7CisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09MT1IgT0YgQ1JPU1NIQUlSUwor KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisgIGVudW0gZmFjZV9pZCBldmVuX2ZhY2VfaWQgPQor ICAgICghYWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgPyBsb29rdXBfbmFtZWRfZmFj ZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1pbmFjdGl2ZS1mYWNlIiks IHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1ldmVuLW51 bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqZXZlbl9mYWNlID0g RkFDRV9GUk9NX0lEIChmLCBldmVuX2ZhY2VfaWQpOworICBMaXNwX09iamVjdCBldmVuX2NvbG9y ID0gZXZlbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RS SU5HIChldmVuX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9jb2xvcl92ZWN0b3IgPSBtY19j b2xvcl92ZWN0b3JfY2FsYyAodywgZXZlbl9jb2xvcik7CisgIGVudW0gZmFjZV9pZCBvZGRfZmFj ZV9pZCA9CisgICAgKCFhY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9u YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLW9kZC1udW1iZXJlZC1jb2x1bW4taW5hY3RpdmUt ZmFjZSIpLCB0cnVlKQorICAgIDogbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIist b2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAqb2RkX2Zh Y2UgPSBGQUNFX0ZST01fSUQgKGYsIG9kZF9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3Qgb2RkX2Nv bG9yID0gb2RkX2ZhY2UtPmxmYWNlW0xGQUNFX0ZPUkVHUk9VTkRfSU5ERVhdOworICBDSEVDS19T VFJJTkcgKG9kZF9jb2xvcik7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvcl92ZWN0b3IgPSBtY19j b2xvcl92ZWN0b3JfY2FsYyAodywgb2RkX2NvbG9yKTsKKyAgZW51bSBmYWNlX2lkIGZpbGxfZmFj ZV9pZCA9CisgICAgKCFhY3RpdmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+ Y29udGVudHMpLCBjcm9zc2hhaXJzX2luYWN0aXZlX3dpbmRvd3MpKSkKKyAgICA/IGxvb2t1cF9u YW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLWJleW9uZC1maWxsLWNvbHVtbi1pbmFjdGl2ZS1m YWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1i ZXlvbmQtZmlsbC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZpbGxfZmFj ZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmlsbF9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9j b2xvciA9IGZpbGxfZmFjZS0+bGZhY2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIENIRUNL X1NUUklORyAoZmlsbF9jb2xvcik7CisgIExpc3BfT2JqZWN0IGZpbGxfY29sb3JfdmVjdG9yID0g bWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGZpbGxfY29sb3IpOworICAvKiByZWQgKi8KKyAgaWYg KGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAgICBmb3Jl Z3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93ICovCisgIGlmIChjdXJyZW50 X2NvbCAlIDIgPT0gMAorICAgICAgJiYgIWZpbGxfY29sdW1uX3ApCisgICAgZm9yZWdyb3VuZCA9 IGV2ZW5fY29sb3JfdmVjdG9yOworICAvKiByZWQgKi8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiAh PSAwCisgICAgICAmJiBmaWxsX2NvbHVtbl9wCisgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxs X2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93ICov CisgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAorICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAg ICAgJiYgY3VycmVudF9jb2wgPD0gZmlsbF9jb2wpCisgICAgZm9yZWdyb3VuZCA9IGV2ZW5fY29s b3JfdmVjdG9yOworICAvKiBncmVlbiAqLworICBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAgJiYg Y3VycmVudF9jb2wgPiBmaWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5kID0gZmlsbF9jb2xvcl92ZWN0 b3I7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEVSQVNFIFRIRSBSRUFMIENVUlNPUgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBgdy0+ cGh5c19jdXJzb3IueC95L2hwb3MvdnBvc2AgYXJlIGluY29ycmVjdCBhZnRlciBldmFsdWF0aW5n IChzY3JvbGwtbGVmdCAxKQorYSBjb3VwbGUgb2YgdGltZXMuICBSZWRpc3BsYXkgZXJhc2VzIHRo ZSByZWFsIGN1cnNvciBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIKK2BtY19kcmF3X2Nyb3NzaGFp cnMnIHJ1bnMgaXRzIGNvdXJzZSAtLSBhbG1vc3QgdG9vIHF1aWNrbHkgdG8gc2VlIGl0IGhhcHBl bmluZy4KK1RoZSBjaGFyYWN0ZXIgd2hlcmUgRW1hY3MgdGhpbmtzIHRoZSByZWFsIGN1cnNvciBp cyBsb2NhdGVkIGdldHMgcmVkcmF3biwgYWxiaWV0Cit3aXRob3V0IHRoZSByZWFsIGN1cnNvci4g IEVtYWNzIHRoaW5rcyB0aGUgcmVhbCBjdXJzb3IgaXMgb25lIGNoYXJhY3RlciB0byB0aGUKK3Jp Z2h0IG9mIHdoZXJlIGl0IHNob3VsZCBiZSAtLSB0aGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBh biBpbmNvcnJlY3QgSFBPUy4KK1RoaXMgcGhlbm9tZW5hIGRvZXMgbm90IG9jY3VyIHdoZW4gKHNj cm9sbC1sZWZ0IDEpIGlzIGNhbGxlZCBpbnRlcmFjdGl2ZWx5OyBlLmcuLAoraG9yaXpvbnRhbCBz Y3JvbGwgd2hlZWwuICBJbmFzbXVjaCBhcyBgZXJhc2VfcGh5c19jdXJzb3InIHVwZGF0ZXMgbW9y ZSB0aGFuCittZXJlbHkgdGhlIGFmb3JlbWVudGlvbmVkIGNvb3JkaW5hdGVzLCByZXNldHRpbmcg dGhvc2UgY29vcmRpbmF0ZXMgYWZ0ZXIgdGhlIGZhY3QKK2lzIGluc3VmZmljaWVudCB0byBmaXgg dGhlIHByb2JsZW0uICBXZSB1c2UgYHctPm91dHB1dF9jdXJzb3IueC95L2hwb3MvdnBvc2AKK2Jl Y2F1c2UgdGhvc2UgY29vcmRpbmF0ZXMgYXJlIGNvcnJlY3QuICBXZSBmaXggYHctPnBoeXNfY3Vy c29yLngveS9ocG9zL3Zwb3NgCitCRUZPUkUgY2FsbGluZyBgZXJhc2VfcGh5c19jdXJzb3InIHNv IHRoYXQgb3RoZXIgZ29vZGllcyBhcmUgdXBkYXRlZC4gKi8KKyAgaWYgKHctPmhzY3JvbGwgPiAw KQorICAgIHsKKyAgICAgIHctPnBoeXNfY3Vyc29yLnggPSB3LT5vdXRwdXRfY3Vyc29yLng7Cisg ICAgICB3LT5waHlzX2N1cnNvci55ID0gdy0+b3V0cHV0X2N1cnNvci55OworICAgICAgdy0+cGh5 c19jdXJzb3IuaHBvcyA9IHctPm91dHB1dF9jdXJzb3IuaHBvczsKKyAgICAgIHctPnBoeXNfY3Vy c29yLnZwb3MgPSB3LT5vdXRwdXRfY3Vyc29yLnZwb3M7CisgICAgfQorICBpZiAoIW1pbmltYWxf cCkKKyAgICBlcmFzZV9waHlzX2N1cnNvciAodyk7CisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworICBnbHlwaF9yb3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50 X21hdHJpeCwgb3BvaW50X3Zwb3MpOworICBpZiAoIWN1cnNvcl9pbl9mcmluZ2VfcCkKKyAgICBm bGF2b3IgPSBNQ19HTFlQSDsKKyAgICAvKiBUaGlzIGNvbmRpdGlvbiBwcm9iYWJseSBkb2VzIG5v dCBleGlzdCBmb3IgdGhlIHJlYWwgZmFrZSBjdXJzb3IuICovCisgICAgZWxzZSBpZiAoY3Vyc29y X2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgJiYgZ2x5cGhfcm93LT5jb250aW51ZWRfcCkKKyAg ICAgIGZsYXZvciA9IE1DX1BJTENST1c7CisgICAgICBlbHNlIGlmIChjdXJzb3JfaW5fZnJpbmdl X3AKKyAgICAgICAgICAgICAgICYmIGdseXBoX3Jvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3ApCisg ICAgICAgIGZsYXZvciA9IE1DX0hPTExPV19SRUNUQU5HTEVfUklHSFRfQVJST1c7CisgICAgICAg IGVsc2UgaWYgKGN1cnNvcl9pbl9mcmluZ2VfcAorICAgICAgICAgICAgICAgICAmJiAhZ2x5cGhf cm93LT5jb250aW51ZWRfcAorICAgICAgICAgICAgICAgICAmJiAhZ2x5cGhfcm93LT50cnVuY2F0 ZWRfb25fcmlnaHRfcCkKKyAgICAgICAgICBmbGF2b3IgPSBNQ19IT0xMT1dfUkVDVEFOR0xFOwor ICBmYWNlX2lkID0gKHJlYWxfcGh5c19jdXJzb3JfZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgICAg ICAgPyBERUZBVUxUX0ZBQ0VfSUQKKyAgICAgICAgICAgICAgOiByZWFsX3BoeXNfY3Vyc29yX2ds eXBoLT5mYWNlX2lkOworICBpbnQgb3BvaW50X2Z4ID0gLTE7CisgIGludCBvcG9pbnRfZnkgPSAt MTsKKyAgaW50IG9wb2ludF9oID0gLTE7CisgIC8qIEZJWE1FOiAgUHV0IGluIHNvbWUgY29kZSB0 byBkZWZhdWx0IHRvIEhPTExPV19CT1hfQ1VSU09SIGlmIHRoZSB1c2VyIGhhcworICB1bndpdHRp bmdseSBjb21lIHVwIHdpdGggc29tZSB1bmFjY2VwdGFibGUgZm9ybSBvZiB1bnJlY29nbml6ZWQg Y3Vyc29yIHR5cGUuICovCisgIExpc3BfT2JqZWN0IGN1cnNvcl9saXNwX3R5cGUgPSBCVkFSIChi LCBtY19yZWFsX2Zha2VfY3Vyc29yKTsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyB0ZW1wX2N1 cnNvcl90eXBlID0gKENPTlNQIChjdXJzb3JfbGlzcF90eXBlKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoWENB UiAoY3Vyc29yX2xpc3BfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKGN1cnNvcl9saXNwX3R5cGUpOwor ICBpZiAoZmxhdm9yID09IE1DX1BJTENST1cKKyAgICAgIHx8IGZsYXZvciA9PSBNQ19IT0xMT1df UkVDVEFOR0xFX1JJR0hUX0FSUk9XCisgICAgICB8fCBmbGF2b3IgPT0gTUNfSE9MTE9XX1JFQ1RB TkdMRSkKKyAgICB0ZW1wX2N1cnNvcl90eXBlID0gUklHSFRfRlJJTkdFX0JJVE1BUDsKKyAgaW50 IGluaXRpYWxfY3Vyc29yX3dpZHRoID0gKENPTlNQIChjdXJzb3JfbGlzcF90eXBlKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gWEZJWE5VTSAoWENBUiAoWENEUiAoY3Vyc29yX2xp c3BfdHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOworICBlbnVtIGZh Y2VfaWQgY3Vyc29yX2ZhY2VfaWQgPQorICAgICghYWN0aXZlX3AKKyAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkp CisgICAgPyBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2UtY3Vy c29yLWluYWN0aXZlLWZhY2UiKSwgdHJ1ZSkKKyAgICA6IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZh Y2UgKmN1cnNvcl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBjdXJzb3JfZmFjZV9pZCk7CisgIExp c3BfT2JqZWN0IGN1cnNvcl9jb2xvciA9IGN1cnNvcl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JP VU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5HIChjdXJzb3JfY29sb3IpOworICBMaXNwX09iamVj dCBjdXJzb3JfZmcgPSAodGVtcF9jdXJzb3JfdHlwZSA9PSBOT19DVVJTT1IpCisgICAgICAgICAg ICAgICAgICAgICAgICAgID8gZm9yZWdyb3VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICA6 IG1jX2NvbG9yX3ZlY3Rvcl9jYWxjICh3LCBjdXJzb3JfY29sb3IpOworICAvKiBGSVhNRTogIFRo aXMgY3JlYXRlcyB0d28gTUNfR0xZUEggYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG5lZWRzIHRv IGJlCisgIHJlZHVjZWQgdG8ganVzdCBvbmUgTUNfR0xZUEgsIG9uZSB2ZXJ0aWNhbCBiYXIsIGFu ZCBvbmUgaG9yaXpvbnRhbCBiYXIuICBUaGUKKyAgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB0 aGUgbGV0dGVyIGF0IHBvaW50IGdldHMgd3JpdHRlbiB0d2ljZSBhbmQgd2lsbCBiZQorICBqdXN0 IGEgbGl0dGxlIHRoaWNrZXIgdGhhbiBhcyB3b3VsZCBub3JtYWxseSBiZSB0aGUgY2FzZS4gKi8K KyAgYm9vbCBmaWxsX2NvbHVtbl90cnVtcHNfcCA9ICghTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWly c192ZXJ0aWNhbF9ydWxlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfZmlsbF9jb2x1bW4pKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF94ID09IGZpbGxfY29sdW1uX3gpOwor ICAvKiBmcmluZ2UgYml0bWFwcyB1c2UgZmFjZV9pZCB0byBzZXQgdGhlIGZvcmVncm91bmQgY29s b3IuICBUaGUgb3ZlcmxheS1hcnJvdworICBpcyBwcmVzZW50bHkgdGhlIG9ubHkgc2l0dWF0aW9u IHdoZXJlIHRoZSBgYWN0aXZlX3BgIGFuZCBgbWluaW1hbF9wYCBhcmUKKyAgdXNlZCB0byBkZXRl cm1pbmUgdGhlIGFwcGxpY2FibGUgZmFjZV9pZC4gKi8KKyAgTGlzcF9PYmplY3QgZm9yZWdyb3Vu ZF9sc2wgPSAoRm1ha2VfdmVjdG9yIChtYWtlX2ZpeG51bSAoMyksIFFuaWwpKTsKKyAgQVNFVCAo Zm9yZWdyb3VuZF9sc2wsIDAsIG1ha2VfZmxvYXQgKC0xLjApKTsKKyAgQVNFVCAoZm9yZWdyb3Vu ZF9sc2wsIDEsIG1ha2VfZmxvYXQgKC0xLjApKTsKKyAgQVNFVCAoZm9yZWdyb3VuZF9sc2wsIDIs IG1ha2VfZmxvYXQgKC0xLjApKTsKKyAgbWNfaGVscGVyICh3LCBvcG9pbnRfeCwgb3BvaW50X2Z4 LCBvcG9pbnRfeSwgb3BvaW50X2Z5LCBvcG9pbnRfaHBvcywKKyAgICAgICAgICAgICBvcG9pbnRf dnBvcywgb3BvaW50X2gsIExFRlRfRlJJTkdFX0JJVE1BUCwgaW5pdGlhbF9jdXJzb3Jfd2lkdGgs CisgICAgICAgICAgICAgZm9yZWdyb3VuZF9sc2wsIG1jX2JnX2xzbCAodywgZmFjZV9pZCksIGFj dGl2ZV9wLCBtaW5pbWFsX3AsCisgICAgICAgICAgICAgTUNfT1ZFUkxBWV9BUlJPV19CSVRNQVAs IG9wb2ludF9wdCwgJnJlc3VsdCk7CisgIGJvb2wgdXBkYXRpbmdfZnJhbWVfcCA9IGZhbHNlOwor ICBpZiAobWluaW1hbF9wKQorICAgIGdvdG8gY3Jvc3NoYWlyc19maW5pc2g7CisgICAgZWxzZSBp ZiAoWEZSQU1FICh3LT5mcmFtZSkgIT0gWEZSQU1FICh3LT5mcmFtZSktPm1jX3VwZGF0aW5nX2Zy YW1lKQorICAgIHsKKyAgICAgIHVwZGF0aW5nX2ZyYW1lX3AgPSB0cnVlOworICAgICAgdXBkYXRl X2JlZ2luIChYRlJBTUUgKHctPmZyYW1lKSk7CisgICAgfQorICBpZiAodGVtcF9jdXJzb3JfdHlw ZSA9PSBOT19DVVJTT1IKKyAgICAgICYmICFtaW5pbWFsX3ApCisgICAgeworICAgICAgaW50IF93 ZDsKKyAgICAgIGlmIChmbGF2b3IgPT0gTUNfR0xZUEgpCisgICAgICAgIG1jX2dldF9waHlzX2N1 cnNvcl9nZW9tZXRyeSAodywgZ2x5cGhfcm93LCBvcG9pbnRfeCwgJm9wb2ludF9meCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcG9pbnRfeSwgJm9wb2ludF9meSwgb3Bv aW50X2hwb3MsIG9wb2ludF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZvcG9pbnRfaCwgSEJBUl9DVVJTT1IsIGluaXRpYWxfY3Vyc29yX3dpZHRoLCAmX3dkKTsK KyAgICAgIG1jX2hlbHBlciAodywgb3BvaW50X3gsIG9wb2ludF9meCwgb3BvaW50X3ksIG9wb2lu dF9meSwgb3BvaW50X2hwb3MsCisgICAgICAgICAgICAgICAgIG9wb2ludF92cG9zLCBvcG9pbnRf aCwgSEJBUl9DVVJTT1IsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2ZnLAorICAgICAgICAgICAgICAg ICBtY19iZ19sc2wgKHcsIGZhY2VfaWQpLCBhY3RpdmVfcCwgbWluaW1hbF9wLCBmbGF2b3IsCisg ICAgICAgICAgICAgICAgIG9wb2ludF9wdCwgJnJlc3VsdCk7CisgICAgICBpZiAoZmxhdm9yID09 IE1DX0dMWVBIKQorICAgICAgICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIGdseXBo X3Jvdywgb3BvaW50X3gsICZvcG9pbnRfZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3BvaW50X3ksICZvcG9pbnRfZnksIG9wb2ludF9ocG9zLCBvcG9pbnRfdnBvcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BvaW50X2gsIEJBUl9DVVJT T1IsIGluaXRpYWxfY3Vyc29yX3dpZHRoLCAmX3dkKTsKKyAgICAgIG1jX2hlbHBlciAodywgb3Bv aW50X3gsIG9wb2ludF9meCwgb3BvaW50X3ksIG9wb2ludF9meSwgb3BvaW50X2hwb3MsCisgICAg ICAgICAgICAgICAgIG9wb2ludF92cG9zLCBvcG9pbnRfaCwgQkFSX0NVUlNPUiwgY3Vyc29yX3dp ZHRoLCBjdXJzb3JfZmcsCisgICAgICAgICAgICAgICAgIG1jX2JnX2xzbCAodywgZmFjZV9pZCks IGFjdGl2ZV9wLCBtaW5pbWFsX3AsIGZsYXZvciwKKyAgICAgICAgICAgICAgICAgb3BvaW50X3B0 LCAmcmVzdWx0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoIW1pbmltYWxfcCkKKyAgICAgIHsKKyAg ICAgICAgaW50IF93ZDsKKyAgICAgICAgaWYgKGZsYXZvciA9PSBNQ19HTFlQSCkKKyAgICAgICAg ICBtY19nZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHcsIGdseXBoX3Jvdywgb3BvaW50X3gsICZv cG9pbnRfZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcG9pbnRf eSwgJm9wb2ludF9meSwgb3BvaW50X2hwb3MsIG9wb2ludF92cG9zLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm9wb2ludF9oLCB0ZW1wX2N1cnNvcl90eXBlLCBpbml0 aWFsX2N1cnNvcl93aWR0aCwgJl93ZCk7CisgICAgICAgIG1jX2hlbHBlciAodywgb3BvaW50X3gs IG9wb2ludF9meCwgb3BvaW50X3ksIG9wb2ludF9meSwgb3BvaW50X2hwb3MsCisgICAgICAgICAg ICAgICAgICAgb3BvaW50X3Zwb3MsIG9wb2ludF9oLCB0ZW1wX2N1cnNvcl90eXBlLCBjdXJzb3Jf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgY3Vyc29yX2ZnLCBtY19iZ19sc2wgKHcsIGZhY2Vf aWQpLCBhY3RpdmVfcCwgbWluaW1hbF9wLAorICAgICAgICAgICAgICAgICAgIGZsYXZvciwgb3Bv aW50X3B0LCAmcmVzdWx0KTsKKyAgICAgIH0KKyAgaWYgKE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFp cnNfaG9yaXpvbnRhbF9ydWxlcikpKQorICAgIGdvdG8gdmVydGljYWxfcnVsZXI7CisgICAgZWxz ZQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgSE9SSVpPTlRBTCBS VUxFUjogIEZJUlNUIFggPT4gRU9MCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu ZAorICAgICAgIEhPUklaT05UQUwgUlVMRVI6ICBEUkFXIEZMT0FUSU5HIEdMWVBITEVTUyBMSU5F IChFT0wgVE8gRlJJTkdFKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgICAgeworICAgICAg c3RydWN0IGdseXBoX3JvdyAqcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIG9w b2ludF92cG9zKTsKKyAgICAgIGludCBhcmVhOworICAgICAgaW50IHJlbGF0aXZlX3ggPSAwOwor ICAgICAgZm9yIChhcmVhID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8IExBU1RfQVJFQTsgKyth cmVhKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5 cGhzW2FyZWFdOworICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGhfZW5kID0gZ2x5cGggKyBy b3ctPnVzZWRbYXJlYV07CisgICAgICAgICAgLyogR2x5cGggZm9yIGEgbGluZSBlbmQgaW4gdGV4 dC4gICovCisgICAgICAgICAgaWYgKGFyZWEgPT0gVEVYVF9BUkVBICYmIGdseXBoID09IGdseXBo X2VuZCAmJiBnbHlwaC0+Y2hhcnBvcyA+IDApCisgICAgICAgICAgICArK2dseXBoX2VuZDsKKyAg ICAgICAgICBpZiAobWNfc3RkZXJyX3AKKyAgICAgICAgICAgICAgJiYgZ2x5cGggPCBnbHlwaF9l bmQpCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisiXG49PT09PT09PT09PT09PT09PT09 PT09PT09PT09IEhPUklaT05UQUwgUlVMRVIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PVxuXAorR2x5cGgjL1RvdGFsIFJlbC5YIFQgICAgICAgUG9zIE8gICBXICAgICBDb2RlIEZh Y2UgTFIgICAgIFggICAgWSBIUE9TIFZQT1MgWlYgQ1xuIik7CisgICAgICAgICAgZm9yICg7IGds eXBoIDwgZ2x5cGhfZW5kOyArK2dseXBoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBt Y19lbmdpbmUgKHJvdywgZ2x5cGgsIGFyZWEsIHJlbGF0aXZlX3gsCisgICAgICAgICAgICAgICAg ICAgICAgICAgdywgcG9zaW50LCBIQkFSX0NVUlNPUiwgY3Vyc29yX3dpZHRoLCBmb3JlZ3JvdW5k LCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWFsX3AsIEhPUklaT05U QUxfUlVMRVIsICZyZXN1bHQpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5w aXhlbF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICAgICAgICAgICBWRVJUSUNBTCBSVUxFUjogIENPTUJJTkFUSU9OIE9G IEdMWVBIICYgR0xZUEhMRVNTIENVUlNPUlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICB2 ZXJ0aWNhbF9ydWxlcjoKKyAgaWYgKE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxf cnVsZXIpKQorICAgICAgfHwgZmlsbF9jb2x1bW5fdHJ1bXBzX3ApCisgICAgZ290byBjcm9zc2hh aXJzX2ZpbmlzaDsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBoZWFkZXJfbGluZV9m b3JtYXQgPSBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KTsKKyAgICAgICAgc3RydWN0IGds eXBoX21hdHJpeCAqbWF0cml4ID0gdy0+Y3VycmVudF9tYXRyaXg7CisgICAgICAgIGludCByb3df c3RhcnQsIHJvd19lbmQsIHdpbmRvd19yb3dfc3RhcnQsIHdpbmRvd19yb3dfZW5kOworICAgICAg ICBpbnQgaTsKKyAgICAgICAgTGlzcF9PYmplY3QgdGVtcCA9IFFuaWw7CisgICAgICAgIExpc3Bf T2JqZWN0IHZzcGVjcyA9IFFuaWw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXRyaXgtPm5y b3dzOyArK2kpCisgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93 ID0gTUFUUklYX1JPVyAobWF0cml4LCBpKTsKKyAgICAgICAgICAgIHJvd19zdGFydCA9IE1BVFJJ WF9ST1dfU1RBUlRfQ0hBUlBPUyAocm93KTsKKyAgICAgICAgICAgIGlmICgoaGVhZGVyX2xpbmVf Zm9ybWF0ID4gMCAmJiBpID09IDEpCisgICAgICAgICAgICAgICAgIHx8IChoZWFkZXJfbGluZV9m b3JtYXQgPT0gMCAmJiBpID09IDApKQorICAgICAgICAgICAgICB3aW5kb3dfcm93X3N0YXJ0ID0g cm93X3N0YXJ0OworICAgICAgICAgICAgaWYgKCFyb3ctPmVuYWJsZWRfcCkKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHdpbmRvd19yb3dfZW5kID0gcm93X2VuZDsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgcm93X2VuZCA9IE1BVFJJWF9ST1dfRU5E X0NIQVJQT1MgKHJvdyk7CisgICAgICAgICAgICAgICAgICB0ZW1wID0gbGlzdG4gKENPTlNUWVBF X0hFQVAsIDMsIG1ha2VfZml4bnVtIChpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZV9maXhudW0gKHJvd19zdGFydCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfZml4bnVtIChyb3df ZW5kKSk7CisgICAgICAgICAgICAgICAgICB2c3BlY3MgPSBGY29ucyAodGVtcCwgdnNwZWNzKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBMaXNwX09iamVjdCB2bGlz dDsKKyAgICAgICAgZm9yICh2bGlzdCA9IEZucmV2ZXJzZSAodnNwZWNzKTsKKyAgICAgICAgICAg ICBDT05TUCAodmxpc3QpOworICAgICAgICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAg ICAgICAgIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4 bnVtICgwKSwgWENBUiAodmxpc3QpKSk7CisgICAgICAgICAgICBpbnQgcG9zX3N0YXJ0ID0gWEZJ WE5VTSAoRm50aCAobWFrZV9maXhudW0gKDEpLCBYQ0FSICh2bGlzdCkpKTsKKyAgICAgICAgICAg IGludCBwb3NfZW5kID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDIpLCBYQ0FSICh2bGlz dCkpKTsKKyAgICAgICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKHct PmN1cnJlbnRfbWF0cml4LCBjb3VudCk7CisgICAgICAgICAgICBpbnQgdGVtcF92cG9zID0gTUFU UklYX1JPV19WUE9TIChyb3csIHctPmN1cnJlbnRfbWF0cml4KTsKKyAgICAgICAgICAgIGludCBh cmVhOworICAgICAgICAgICAgaW50IHJlbGF0aXZlX3ggPSAwOworICAgICAgICAgICAgZm9yIChh cmVhID0gTEVGVF9NQVJHSU5fQVJFQTsgYXJlYSA8IExBU1RfQVJFQTsgKythcmVhKQorICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IGdseXBoICpnbHlwaCA9IHJvdy0+Z2x5 cGhzW2FyZWFdOworICAgICAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGhfZW5kID0gZ2x5 cGggKyByb3ctPnVzZWRbYXJlYV07CisgICAgICAgICAgICAgICAgaWYgKGFyZWEgPT0gVEVYVF9B UkVBICYmIGdseXBoID09IGdseXBoX2VuZCAmJiBnbHlwaC0+Y2hhcnBvcyA+IDApCisgICAgICAg ICAgICAgICAgICArK2dseXBoX2VuZDsKKyAgICAgICAgICAgICAgICBpZiAobWNfc3RkZXJyX3AK KyAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGggPCBnbHlwaF9lbmQpCisgICAgICAgICAgICAg ICAgICBmcHJpbnRmIChzdGRlcnIsCisiXG5jb3VudCAoJWQpIHwgd2luZG93X3Jvd19zdGFydC9l bmQgKCVkLyVkKSB8IHJvd19zdGFydC9lbmQgKCVkLyVkKVxuXAorPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gVkVSVElDQUwgUlVMRVIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PVxuXAorR2x5cGgjL1RvdGFsIFJlbC5YIFQgICAgICAgUG9zIE8gICBXICAgICBDb2RlIEZh Y2UgTFIgICAgIFggICAgWSBIUE9TIFZQT1MgWlYgQ1xuIiwKK2NvdW50LCB3aW5kb3dfcm93X3N0 YXJ0LCB3aW5kb3dfcm93X2VuZCwgcG9zX3N0YXJ0LCBwb3NfZW5kKTsKKyAgICAgICAgICAgICAg ICBmb3IgKDsgZ2x5cGggPCBnbHlwaF9lbmQ7ICsrZ2x5cGgpCisgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKG9wb2ludF95 ID09IGdseXBoLT55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIG9wb2ludF92cG9zID09IHRlbXBfdnBvcyk7CisgICAgICAgICAgICAgICAgICAgIGlm ICgoKGhlYWRlcl9saW5lX2Zvcm1hdCA+IDAgJiYgY291bnQgPiAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgJiYgKHJlbGF0aXZlX3ggKyBnbHlwaC0+cGl4ZWxfd2lkdGggPiBvcG9pbnRfeAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoID09IGdseXBoX2VuZCAtIDEpCisgICAg ICAgICAgICAgICAgICAgICAgICAmJiBnbHlwaC0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21feSAo dykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWNfZW5naW5lIChy b3csIGdseXBoLCBhcmVhLCByZWxhdGl2ZV94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3LCBwb3NpbnQsIEJBUl9DVVJTT1IsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwg YWN0aXZlX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwg VkVSVElDQUxfUlVMRVIsICZyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KG1jX3N0ZGVycl9wKQorICAgICAgICAgICAgICAgICAgICAgICAgbWNfZHVtcF9nbHlwaCAocm93 LCBnbHlwaCwgYXJlYSwgcmVsYXRpdmVfeCk7CisgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZl X3ggKz0gZ2x5cGgtPnBpeGVsX3dpZHRoOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBUSEUgQ0FDSEUKKyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworICBjcm9zc2hhaXJzX2ZpbmlzaDoKKyAgaWYgKCFtaW5pbWFsX3AKKyAg ICAgICYmIHVwZGF0aW5nX2ZyYW1lX3ApCisgICAgdXBkYXRlX2VuZCAoWEZSQU1FICh3LT5mcmFt ZSkpOworICBpZiAoIU5JTFAgKHJlc3VsdCkpCisgICAgd3NldF9jcm9zc2hhaXJzX2NhY2hlICh3 LCBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGcmV2ZXJzZSAocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGY29ucyAod2luZG93LCBRbmlsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGY29ucyAody0+Y29udGVudHMsIFFuaWwpKSk7CisgIHctPm1jLmRyYXdfY3Jv c3NoYWlycyA9IGZhbHNlOworICBpZiAob2xkX2J1ZmZlcikKKyAgICBzZXRfYnVmZmVyX2ludGVy bmFsIChvbGRfYnVmZmVyKTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0gY2xvY2so KTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENMT0NLU19Q RVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAwLCBjcHVf dGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2RyYXdfY3Jvc3NoYWlyczog IFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfZHJhd19m aWxsX2NvbHVtbiAoc3RydWN0IHdpbmRvdyAqdywgYm9vbCBhY3RpdmVfcCwgYm9vbCBtaW5pbWFs X3ApCit7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGNsb2NrX3Qgc3RhcnQsIGVuZDsKKyAg ZG91YmxlIGNwdV90aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3RpbWVbREJMX0JVRlNJWkVfQk9VTkRd OworICBzdGFydCA9IGNsb2NrKCk7CisjZW5kaWYKKyovCisjaWZkZWYgR0xZUEhfREVCVUcKKyAg aWYgKHRyYWNlX3JlZGlzcGxheV9wCisgICAgICAmJiBCVUZGRVJQICh3LT5jb250ZW50cykKKyAg ICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG1jX2ZpbGxfY29sdW1u KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZHJhd19maWxsX2Nv bHVtbiAoJXMpOiAgYWN0aXZlX3AgKCVkKSB8IG1pbmltYWxfcCAoJWQpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgd2luZG93X2NoYXIsIGFjdGl2ZV9wLCBtaW5pbWFsX3ApOworICAgIH0K KyNlbmRpZgorICBib29sIG1jX3N0ZGVycl9wID0gIU5JTFAgKEJWQVIgKGN1cnJlbnRfYnVmZmVy LCBtY19zdGRlcnIpKTsKKyAgaW50IG9wb2ludF94ID0gdy0+cGh5c19jdXJzb3IueDsKKyAgaW50 IG9wb2ludF95ID0gdy0+cGh5c19jdXJzb3IueTsKKyAgaW50IG9wb2ludF9ocG9zID0gdy0+cGh5 c19jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+cGh5c19jdXJzb3IudnBvczsK KyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIExpc3BfT2JqZWN0IGJ1 ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIg KmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgYnVmZmVyICpvbGRfYnVmZmVyID0gTlVMTDsK KyAgTGlzcF9PYmplY3Qgd2luZG93OworICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAvKiBX aGVuIHN3aWNoaW5nIHRvIGFub3RoZXIgYnVmZmVyIChlLmcuLCBhIG5ldyBidWZmZXIpLCBgdy0+ Y29udGVudHNgIG1heSBub3QKKyAgbmVjZXNzYXJpbHkgYmUgdGhlIGBjdXJyZW50X2J1ZmZlcmAu ICBJbiBzdWNoIGEgY2FzZSwgYWxsIGNhbGN1bGF0aW9ucyB3b3VsZAorICBiZSB3cm9uZyB1bmxl c3MgYHctPmNvbnRlbnRzYCBpcyBzZXQgYXMgdGhlIGBjdXJyZW50X2J1ZmZlcmAuICBUaGlzIGF2 b2lkcworICBlcnJvcnMgdGhhdCBhcmUgdGltZSBjb25zdW1pbmcgdG8gZGVidWc6ICBicmVhayBh cmdzX291dF9vZl9yYW5nZSAqLworICBpZiAoYiAhPSBjdXJyZW50X2J1ZmZlcikKKyAgICB7Cisg ICAgICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7CisgICAgICBzZXRfYnVmZmVyX2ludGVy bmFsIChiKTsKKyAgICB9CisvKiBlYXNzZXJ0IChDSEFSUE9TIChwb3MpID49IEJFR1YgJiYgQ0hB UlBPUyAocG9zKSA8PSBaVik7CisgICBlYXNzZXJ0IChjaGFycG9zID09IEJZVEVfVE9fQ0hBUiAo Ynl0ZXBvcykpOworICAgZWFzc2VydCAoQlVGX0JFR19CWVRFIChiKSA8PSBieXRlcG9zICYmIGJ5 dGVwb3MgPD0gQlVGX1pfQllURSAoYikpOyAqLworICBwdHJkaWZmX3QgY2hhcnBvcyA9IG1hcmtl cl9wb3NpdGlvbiAody0+c3RhcnQpOworICBwdHJkaWZmX3QgYnl0ZXBvcyA9IG1hcmtlcl9ieXRl X3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIC8qIEVsaSBaLjogIElmIHdpbmRvdydzIHN0YXJ0IHBv aW50IGlzIGludmFsaWQsIGl0IG1lYW5zIHRoZSB3aW5kb3cgbmVlZHMgdG8gYmUKKyAgcmVkaXNw bGF5ZWQuICBBZ2FpbiwgSSdtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCBob3cgZG8geW91IGdldCBp bnRvIHRoaXMgc2l0dWF0aW9uCisgIGluIHRoZSBtaWRkbGUgb2YgcmVkaXNwbGF5LiAqLworICBi b29sIGJhcmZfY3Jhc2hfb25lID0gKGNoYXJwb3MgPj0gQkVHViAmJiBjaGFycG9zIDw9IFpWKSA/ IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfb25lKQorICAgIHsKKyAgICAgIGlmIChv bGRfYnVmZmVyKQorICAgICAgICBzZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAg ICAgIHJldHVybjsKKyAgICB9CisgIC8qIEVsaSBaLjogIExpa2V3aXNlLiAgTWFya2VycyBhcmUg dXBkYXRlZCB3aGVuIGEgYnVmZmVyIGlzIG1vZGlmaWVkLCBzbyB0aGlzCisgIHNob3VsZCBuZXZl ciBoYXBwZW4uICovCisgIGJvb2wgYmFyZl9jcmFzaF90d28gPSAoY2hhcnBvcyA9PSBCWVRFX1RP X0NIQVIgKGJ5dGVwb3MpKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfdHdvKQor ICAgIHsKKyAgICAgIGlmIChvbGRfYnVmZmVyKQorICAgICAgICBzZXRfYnVmZmVyX2ludGVybmFs IChvbGRfYnVmZmVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIC8qIGBtYXRyaXhfcm93JyBp biBgZGlzcG5ldy5jYCBjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3RzLAorICBlYXNzZXJ0ICht YXRyaXggJiYgbWF0cml4LT5yb3dzKTsKKyAgZWFzc2VydCAocm93ID49IDAgJiYgcm93IDwgbWF0 cml4LT5ucm93cyk7ICovCisgIGJvb2wgYmFyZl9jcmFzaF90aHJlZSA9ICh3LT5jdXJyZW50X21h dHJpeCAmJiB3LT5jdXJyZW50X21hdHJpeC0+cm93cykgPyBmYWxzZSA6IHRydWU7CisgIGlmIChi YXJmX2NyYXNoX3RocmVlKQorICAgIHsKKyAgICAgIGlmIChvbGRfYnVmZmVyKQorICAgICAgICBz ZXRfYnVmZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg IGJvb2wgYmFyZl9jcmFzaF9mb3VyID0gKG9wb2ludF92cG9zID49IDAgJiYgb3BvaW50X3Zwb3Mg PCB3LT5jdXJyZW50X21hdHJpeC0+bnJvd3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9j cmFzaF9mb3VyKQorICAgIHsKKyAgICAgIGlmIChvbGRfYnVmZmVyKQorICAgICAgICBzZXRfYnVm ZmVyX2ludGVybmFsIChvbGRfYnVmZmVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGlmICgh QlVGRkVSUCAoYnVmKSkKKyAgICB7CisgICAgICBpZiAob2xkX2J1ZmZlcikKKyAgICAgICAgc2V0 X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAgICByZXR1cm47CisgICAgfQorICBp ZiAoTklMUCAoQlZBUiAoYiwgbWNfZmlsbF9jb2x1bW4pKSkKKyAgICB7CisgICAgICBpZiAob2xk X2J1ZmZlcikKKyAgICAgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisgICAg ICByZXR1cm47CisgICAgfQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCRUdJTiBKT1VSTkVZIC4uLgorKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisgIGludCBmcmFtZV9jaGFyX3dpZHRoID0gRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKKyAg aW50IGN1cnNvcl93aWR0aCA9IDE7CisgIHB0cmRpZmZfdCBwb3NpbnQgPSAtMTsKKyAgYm9vbCBm aWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIGludCBmaWxs X2NvbCA9IFhGSVhOVU0gKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7CisgIGludCBmaWxsX2NvbHVt bl94ID0gKGZpbGxfY29sdW1uX3ApCisgICAgICAgICAgICAgICAgICAgICAgPyBmaWxsX2NvbCAq IGZyYW1lX2NoYXJfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgIExpc3BfT2Jq ZWN0IHJlc3VsdCA9IFFuaWw7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ09MT1IgT0YgRklMTCBDT0xVTU4KKyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworICBlbnVtIGZhY2VfaWQgZmlsbF9jb2x1bW5fZmFjZV9pZCA9CisgICAgKCFhY3Rp dmVfcAorICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19maWxs X2NvbHVtbl9pbmFjdGl2ZV93aW5kb3dzKSkKKyAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3 LCBmLCBpbnRlcm4gKCJtYy1maWxsLWNvbHVtbi1pbmFjdGl2ZS1mYWNlIiksIHRydWUpCisgICAg OiAoIWFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgbWNfZmlsbF9jb2x1bW5faW5hY3RpdmVfd2luZG93cykpCisgICAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAg KEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIG9wb2ludF94 ID09IGZpbGxfY29sdW1uX3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRl cm4gKCJtYy1maWxsLWNvbHVtbi1vcG9pbnQtaW5hY3RpdmUtZmFjZSIpLCB0cnVlKQorICAgIDog KGFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg Y3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGlj YWxfcnVsZXIpKQorICAgICAgICYmIG9wb2ludF94ID09IGZpbGxfY29sdW1uX3gpCisgICAgICA/ IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJtYy1maWxsLWNvbHVtbi1vcG9pbnQt ZmFjZSIpLCB0cnVlKQorICAgIDogKCFhY3RpdmVfcAorICAgICAgICYmICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIG1jX2ZpbGxfY29sdW1uX2luYWN0aXZlX3dpbmRvd3MpKQor ICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNyb3NzaGFpcnMp KQorICAgICAgICYmICFOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzX3ZlcnRpY2FsX3J1bGVyKSkK KyAgICAgICAmJiBvcG9pbnRfeCAhPSBmaWxsX2NvbHVtbl94KQorICAgICAgPyBsb29rdXBfbmFt ZWRfZmFjZSAodywgZiwgaW50ZXJuICgibWMtZmlsbC1jb2x1bW4taW5hY3RpdmUtZmFjZSIpLCB0 cnVlKQorICAgIDogKGFjdGl2ZV9wCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIGNyb3Nz aGFpcnNfdmVydGljYWxfcnVsZXIpKQorICAgICAgICYmIG9wb2ludF94ICE9IGZpbGxfY29sdW1u X3gpCisgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCJtYy1maWxsLWNv bHVtbi1mYWNlIiksIHRydWUpCisgICAgOiBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJu ICgibWMtZmlsbC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZpbGxfY29s dW1uX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZpbGxfY29sdW1uX2ZhY2VfaWQpOworICBMaXNw X09iamVjdCBmaWxsX2NvbHVtbl9jb2xvciA9IGZpbGxfY29sdW1uX2ZhY2UtPmxmYWNlW0xGQUNF X0ZPUkVHUk9VTkRfSU5ERVhdOworICBDSEVDS19TVFJJTkcgKGZpbGxfY29sdW1uX2NvbG9yKTsK KyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IG1jX2NvbG9yX3ZlY3Rvcl9jYWxjICh3LCBmaWxs X2NvbHVtbl9jb2xvcik7CisgIGJvb2wgdXBkYXRpbmdfZnJhbWVfcCA9IGZhbHNlOworICBpZiAo bWluaW1hbF9wKQorICAgIGdvdG8gbWNfZmlsbF9jb2x1bW5fZmluaXNoOworICAgIGVsc2UgaWYg KFhGUkFNRSAody0+ZnJhbWUpICE9IFhGUkFNRSAody0+ZnJhbWUpLT5tY191cGRhdGluZ19mcmFt ZSkKKyAgICB7CisgICAgICB1cGRhdGluZ19mcmFtZV9wID0gdHJ1ZTsKKyAgICAgIHVwZGF0ZV9i ZWdpbiAoWEZSQU1FICh3LT5mcmFtZSkpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICAgICAgICAgICBGSUxMIENPTFVNTjogIENPTUJJTkFUSU9OIE9GIEdMWVBIICYgR0xZUEhM RVNTIENVUlNPUlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBpbnQgaGVhZGVyX2xpbmVf Zm9ybWF0ID0gV0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyk7CisgIHN0cnVjdCBnbHlwaF9t YXRyaXggKm1hdHJpeCA9IHctPmN1cnJlbnRfbWF0cml4OworICBpbnQgcm93X3N0YXJ0LCByb3df ZW5kLCB3aW5kb3dfcm93X3N0YXJ0LCB3aW5kb3dfcm93X2VuZDsKKyAgaW50IGk7CisgIExpc3Bf T2JqZWN0IHRlbXAgPSBRbmlsOworICBMaXNwX09iamVjdCB2c3BlY3MgPSBRbmlsOworICBmb3Ig KGkgPSAwOyBpIDwgbWF0cml4LT5ucm93czsgKytpKQorICAgIHsKKyAgICAgIHN0cnVjdCBnbHlw aF9yb3cgKnJvdyA9IE1BVFJJWF9ST1cgKG1hdHJpeCwgaSk7CisgICAgICByb3dfc3RhcnQgPSBN QVRSSVhfUk9XX1NUQVJUX0NIQVJQT1MgKHJvdyk7CisgICAgICBpZiAoKGhlYWRlcl9saW5lX2Zv cm1hdCA+IDAgJiYgaSA9PSAxKQorICAgICAgICAgICB8fCAoaGVhZGVyX2xpbmVfZm9ybWF0ID09 IDAgJiYgaSA9PSAwKSkKKyAgICAgICAgd2luZG93X3Jvd19zdGFydCA9IHJvd19zdGFydDsKKyAg ICAgIGlmICghcm93LT5lbmFibGVkX3ApCisgICAgICAgIHsKKyAgICAgICAgICB3aW5kb3dfcm93 X2VuZCA9IHJvd19lbmQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxz ZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJvd19lbmQgPSBNQVRSSVhfUk9XX0VORF9DSEFS UE9TIChyb3cpOworICAgICAgICAgICAgdGVtcCA9IGxpc3RuIChDT05TVFlQRV9IRUFQLCAzLCBt YWtlX2ZpeG51bSAoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2VfZml4bnVtIChyb3dfc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWtlX2ZpeG51bSAocm93X2VuZCkpOworICAgICAgICAgICAgdnNw ZWNzID0gRmNvbnMgKHRlbXAsIHZzcGVjcyk7CisgICAgICAgICAgfQorICAgIH0KKyAgTGlzcF9P YmplY3Qgdmxpc3Q7CisgIGZvciAodmxpc3QgPSBGbnJldmVyc2UgKHZzcGVjcyk7CisgICAgICAg Q09OU1AgKHZsaXN0KTsKKyAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICB7CisgICAg ICBpbnQgY291bnQgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMCksIFhDQVIgKHZsaXN0 KSkpOworICAgICAgaW50IHBvc19zdGFydCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgx KSwgWENBUiAodmxpc3QpKSk7CisgICAgICBpbnQgcG9zX2VuZCA9IFhGSVhOVU0gKEZudGggKG1h a2VfZml4bnVtICgyKSwgWENBUiAodmxpc3QpKSk7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3cgPSBNQVRSSVhfUk9XICh3LT5jdXJyZW50X21hdHJpeCwgY291bnQpOworICAgICAgaW50IHRl bXBfdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAocm93LCB3LT5jdXJyZW50X21hdHJpeCk7CisgICAg ICBpbnQgYXJlYTsKKyAgICAgIGludCByZWxhdGl2ZV94ID0gMDsKKyAgICAgIGZvciAoYXJlYSA9 IExFRlRfTUFSR0lOX0FSRUE7IGFyZWEgPCBMQVNUX0FSRUE7ICsrYXJlYSkKKyAgICAgICAgewor ICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBoc1thcmVhXTsKKyAgICAg ICAgICBzdHJ1Y3QgZ2x5cGggKmdseXBoX2VuZCA9IGdseXBoICsgcm93LT51c2VkW2FyZWFdOwor ICAgICAgICAgIGlmIChhcmVhID09IFRFWFRfQVJFQSAmJiBnbHlwaCA9PSBnbHlwaF9lbmQgJiYg Z2x5cGgtPmNoYXJwb3MgPiAwKQorICAgICAgICAgICAgKytnbHlwaF9lbmQ7CisgICAgICAgICAg aWYgKG1jX3N0ZGVycl9wCisgICAgICAgICAgICAgICYmIGdseXBoIDwgZ2x5cGhfZW5kKQorICAg ICAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorIlxuY291bnQgKCVkKSB8IHdpbmRvd19yb3dfc3Rh cnQvZW5kICglZC8lZCkgfCByb3dfc3RhcnQvZW5kICglZC8lZClcblwKKz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09IEZJTEwgQ09MVU1OID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT1cblwKK0dseXBoIy9Ub3RhbCBSZWwuWCBUICAgICAgIFBvcyBPICAgVyAgICAgQ29k ZSBGYWNlIExSICAgICBYICAgIFkgSFBPUyBWUE9TIFpWIENcbiIsCitjb3VudCwgd2luZG93X3Jv d19zdGFydCwgd2luZG93X3Jvd19lbmQsIHBvc19zdGFydCwgcG9zX2VuZCk7CisgICAgICAgICAg Zm9yICg7IGdseXBoIDwgZ2x5cGhfZW5kOyArK2dseXBoKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBib29sIHJlYWxfZmFrZV9jdXJzb3JfcCA9IChvcG9pbnRfeCA9PSBmaWxsX2NvbHVt bl94CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95 ID09IGdseXBoLT55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IG9wb2ludF9ocG9zID09IGdseXBoIC0gcm93LT5nbHlwaHNbVEVYVF9BUkVBXQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBvcG9pbnRfdnBvcyA9PSB0ZW1wX3Zw b3MpOworICAgICAgICAgICAgICBpZiAoKChoZWFkZXJfbGluZV9mb3JtYXQgPiAwICYmIGNvdW50 ID4gMCkKKyAgICAgICAgICAgICAgICAgICB8fCBoZWFkZXJfbGluZV9mb3JtYXQgPT0gMCkKKyAg ICAgICAgICAgICAgICAgICYmIChyZWxhdGl2ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoID4gZmls bF9jb2x1bW5feAorICAgICAgICAgICAgICAgICAgICAgIHx8IGdseXBoID09IGdseXBoX2VuZCAt IDEpCisgICAgICAgICAgICAgICAgICAmJiBnbHlwaC0+eSA8PSB3aW5kb3dfdGV4dF9ib3R0b21f eSAodykKKyAgICAgICAgICAgICAgICAgICYmICFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbWNfZW5naW5lIChyb3csIGdseXBoLCBhcmVh LCByZWxhdGl2ZV94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LCBwb3NpbnQsIEJB Ul9DVVJTT1IsIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYWN0aXZlX3AsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgRklMTF9DT0xVTU4sICZyZXN1bHQpOworICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGVsc2UgaWYgKCgoaGVhZGVyX2xpbmVfZm9ybWF0ID4gMCAmJiBjb3VudCA+IDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHx8IGhlYWRlcl9saW5lX2Zvcm1hdCA9PSAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgICYmIChyZWxhdGl2ZV94ICsgZ2x5cGgtPnBpeGVsX3dpZHRoID4gZmls bF9jb2x1bW5feAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBnbHlwaCA9PSBnbHlw aF9lbmQgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoLT55IDw9IHdpbmRv d190ZXh0X2JvdHRvbV95ICh3KQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlYWxfZmFr ZV9jdXJzb3JfcCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KG1jX3N0ZGVycl9wKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuUkVBTCBGQUtFIENVUlNPUlxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgICBtY19kdW1wX2dseXBoIChyb3csIGdseXBoLCBhcmVhLCByZWxhdGl2 ZV94KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWNfc3Rk ZXJyX3ApCisgICAgICAgICAgICAgICAgICAgIG1jX2R1bXBfZ2x5cGggKHJvdywgZ2x5cGgsIGFy ZWEsIHJlbGF0aXZlX3gpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ICs9IGdseXBoLT5waXhl bF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgVEhFIENBQ0hF CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgbWNfZmlsbF9jb2x1bW5fZmluaXNoOgorICBp ZiAoIW1pbmltYWxfcAorICAgICAgJiYgdXBkYXRpbmdfZnJhbWVfcCkKKyAgICB1cGRhdGVfZW5k IChYRlJBTUUgKHctPmZyYW1lKSk7CisgIGlmICghTklMUCAocmVzdWx0KSkKKyAgICB3c2V0X21j X2ZpbGxfY29sdW1uX2NhY2hlICh3LCBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmV2ZXJzZSAocmVzdWx0KSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGY29ucyAod2luZG93LCBRbmlsKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGY29ucyAody0+Y29udGVudHMsIFFuaWwp KSk7CisgIHctPm1jLmRyYXdfZmlsbF9jb2x1bW4gPSBmYWxzZTsKKyAgaWYgKG9sZF9idWZmZXIp CisgICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkX2J1ZmZlcik7CisvKgorI2lmZGVmIEdMWVBI X0RFQlVHCisgIGVuZCA9IGNsb2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVu ZCAtIHN0YXJ0KSkgLyBDTE9DS1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVv ZiBidWZfdGltZSwgMCwgMCwgY3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcs ICJtY19kcmF3X2ZpbGxfY29sdW1uOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisq LworfQorCit2b2lkCittY19yZWRyYXdfbXVsdGlwbGVfY3Vyc29ycyAoc3RydWN0IHdpbmRvdyAq dykKK3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBk b3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07 CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJVRworICBp ZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAg ICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29y c19jb25mKSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJ TkRPVyAod2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJp bjFfdG9fc3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBT U0RBVEEgKHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfcmVkcmF3 X211bHRpcGxlX2N1cnNvcnMgKCVzKVxuIiwgd2luZG93X2NoYXIpOworICAgIH0KKyNlbmRpZgor ICBMaXNwX09iamVjdCB2bGlzdCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZpZnRlZW5fZWxlbWVu dHMgPSBRbmlsOworICBpbnQgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoOworICBlbnVtIHRl eHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBpbnQgY3Vyc29yX3dpZHRoOworICBMaXNw X09iamVjdCBmb3JlZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgYmFja2dyb3VuZCA9IFFu aWw7CisgIGJvb2wgYWN0aXZlX3AgPSBmYWxzZTsKKyAgYm9vbCBtaW5pbWFsX3AgPSBmYWxzZTsK KyAgaW50IGZsYXZvcjsKKyAgcHRyZGlmZl90IHBvc2ludDsKKyAgYm9vbCB1cGRhdGluZ19mcmFt ZV9wID0gZmFsc2U7CisgIGlmIChYRlJBTUUgKHctPmZyYW1lKSAhPSBYRlJBTUUgKHctPmZyYW1l KS0+bWNfdXBkYXRpbmdfZnJhbWUpCisgICAgeworICAgICAgdXBkYXRpbmdfZnJhbWVfcCA9IHRy dWU7CisgICAgICB1cGRhdGVfYmVnaW4gKFhGUkFNRSAody0+ZnJhbWUpKTsKKyAgICB9CisgIGZv ciAodmxpc3QgPSBYQ0FSICh3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKTsKKyAgICAgICBDT05T UCAodmxpc3QpOworICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIGZp ZnRlZW5fZWxlbWVudHMgPSBYQ0FSICh2bGlzdCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAo bWFrZV9maXhudW0gKDApLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmeCA9IFhGSVhOVU0g KEZudGggKG1ha2VfZml4bnVtICgxKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhG SVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgyKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAg ZnkgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMyksIGZpZnRlZW5fZWxlbWVudHMpKTsK KyAgICAgIGhwb3MgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNCksIGZpZnRlZW5fZWxl bWVudHMpKTsKKyAgICAgIHZwb3MgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNSksIGZp ZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAo NiksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19j dXJzb3JfdHlwZSAoRm50aCAobWFrZV9maXhudW0gKDcpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7Cisg ICAgICBjdXJzb3Jfd2lkdGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoOCksIGZpZnRl ZW5fZWxlbWVudHMpKTsKKyAgICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSks IGZpZnRlZW5fZWxlbWVudHMpOworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfZml4bnVt ICgxMCksIGZpZnRlZW5fZWxlbWVudHMpOworICAgICAgYWN0aXZlX3AgPSBYRklYTlVNIChGbnRo IChtYWtlX2ZpeG51bSAoMTEpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBtaW5pbWFsX3Ag PSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTIpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7Cisg ICAgICBmbGF2b3IgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTMpLCBmaWZ0ZWVuX2Vs ZW1lbnRzKSk7CisgICAgICBwb3NpbnQgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTQp LCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBib29sIHJlbW92ZV9wID0gZmFsc2U7CisgICAg ICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoLCBj dXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGZv cmVncm91bmQsIGFjdGl2ZV9wLCBtaW5pbWFsX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTUNfR0xZUEgsIHBvc2ludCwgcmVtb3ZlX3ApOworICAgIH0KKyAgaWYgKHVwZGF0aW5nX2Zy YW1lX3ApCisgICAgdXBkYXRlX2VuZCAoWEZSQU1FICh3LT5mcmFtZSkpOworLyoKKyNpZmRlZiBH TFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBjcHVfdGltZV91c2VkID0gKChkb3VibGUp IChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIGR0b2FzdHIgKGJ1Zl90aW1lLCBz aXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3VzZWQpOworICBkZWJ1Z19tZXRob2RfYWRk ICh3LCAibWNfcmVkcmF3X211bHRpcGxlX2N1cnNvcnM6ICBUSU1FICglcykiLCBidWZfdGltZSk7 CisjZW5kaWYKKyovCit9CisKK3ZvaWQKK21jX3JlZHJhd19jcm9zc2hhaXJzIChzdHJ1Y3Qgd2lu ZG93ICp3KQoreworLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBjbG9ja190IHN0YXJ0LCBlbmQ7 CisgIGRvdWJsZSBjcHVfdGltZV91c2VkOworICBjaGFyIGJ1Zl90aW1lW0RCTF9CVUZTSVpFX0JP VU5EXTsKKyAgc3RhcnQgPSBjbG9jaygpOworI2VuZGlmCisqLworI2lmZGVmIEdMWVBIX0RFQlVH CisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgQlVGRkVSUCAody0+Y29udGVudHMp CisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJz KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfcmVkcmF3X2Nyb3Nz aGFpcnMgKCVzKVxuIiwgd2luZG93X2NoYXIpOworICAgIH0KKyNlbmRpZgorICBMaXNwX09iamVj dCB2bGlzdCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZpZnRlZW5fZWxlbWVudHMgPSBRbmlsOwor ICBpbnQgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoOworICBlbnVtIHRleHRfY3Vyc29yX2tp bmRzIGN1cnNvcl90eXBlOworICBpbnQgY3Vyc29yX3dpZHRoOworICBMaXNwX09iamVjdCBmb3Jl Z3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgYmFja2dyb3VuZCA9IFFuaWw7CisgIGJvb2wg YWN0aXZlX3AgPSBmYWxzZTsKKyAgYm9vbCBtaW5pbWFsX3AgPSBmYWxzZTsKKyAgaW50IGZsYXZv cjsKKyAgcHRyZGlmZl90IHBvc2ludDsKKyAgYm9vbCB1cGRhdGluZ19mcmFtZV9wID0gZmFsc2U7 CisgIGlmIChYRlJBTUUgKHctPmZyYW1lKSAhPSBYRlJBTUUgKHctPmZyYW1lKS0+bWNfdXBkYXRp bmdfZnJhbWUpCisgICAgeworICAgICAgdXBkYXRpbmdfZnJhbWVfcCA9IHRydWU7CisgICAgICB1 cGRhdGVfYmVnaW4gKFhGUkFNRSAody0+ZnJhbWUpKTsKKyAgICB9CisgIGZvciAodmxpc3QgPSBY Q0FSICh3LT5jcm9zc2hhaXJzX2NhY2hlKTsKKyAgICAgICBDT05TUCAodmxpc3QpOworICAgICAg IHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIGZpZnRlZW5fZWxlbWVudHMgPSBY Q0FSICh2bGlzdCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBm aWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmeCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVt ICgxKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhGSVhOVU0gKEZudGggKG1ha2Vf Zml4bnVtICgyKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgZnkgPSBYRklYTlVNIChGbnRo IChtYWtlX2ZpeG51bSAoMyksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGhwb3MgPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHZw b3MgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNSksIGZpZnRlZW5fZWxlbWVudHMpKTsK KyAgICAgIGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNiksIGZpZnRlZW5fZWxlbWVu dHMpKTsKKyAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoRm50aCAo bWFrZV9maXhudW0gKDcpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBjdXJzb3Jfd2lkdGgg PSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoOCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAg ICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSksIGZpZnRlZW5fZWxlbWVudHMp OworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfZml4bnVtICgxMCksIGZpZnRlZW5fZWxl bWVudHMpOworICAgICAgYWN0aXZlX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTEp LCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBtaW5pbWFsX3AgPSBYRklYTlVNIChGbnRoICht YWtlX2ZpeG51bSAoMTIpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmbGF2b3IgPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTMpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBw b3NpbnQgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTQpLCBmaWZ0ZWVuX2VsZW1lbnRz KSk7CisgICAgICBib29sIHJlbW92ZV9wID0gZmFsc2U7CisgICAgICBtY19kcmF3X2VyYXNlX2h5 YnJpZCAodywgeCwgZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGZvcmVncm91bmQsIGFjdGl2ZV9w LCBtaW5pbWFsX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdm9yLCBwb3NpbnQs IHJlbW92ZV9wKTsKKyAgICB9CisgIGlmICh1cGRhdGluZ19mcmFtZV9wKQorICAgIHVwZGF0ZV9l bmQgKFhGUkFNRSAody0+ZnJhbWUpKTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0g Y2xvY2soKTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENM T0NLU19QRVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAw LCBjcHVfdGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX3JlZHJhd19jcm9z c2hhaXJzOiAgVElNRSAoJXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisqLworfQorCit2b2lkCitt Y19yZWRyYXdfZmlsbF9jb2x1bW4gKHN0cnVjdCB3aW5kb3cgKncpCit7CisvKgorI2lmZGVmIEdM WVBIX0RFQlVHCisgIGNsb2NrX3Qgc3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90aW1lX3VzZWQ7 CisgIGNoYXIgYnVmX3RpbWVbREJMX0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9IGNsb2NrKCk7 CisjZW5kaWYKKyovCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9w CisgICAgICAmJiBCVUZGRVJQICh3LT5jb250ZW50cykKKyAgICAgICYmICFOSUxQIChCVkFSIChY QlVGRkVSICh3LT5jb250ZW50cyksIG1jX2ZpbGxfY29sdW1uKSkpCisgICAgeworICAgICAgTGlz cF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAod2luZG93LCB3KTsKKyAgICAgIExp c3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nICh3aW5kb3csIFFuaWwp OworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRvd19zdHJpbmcpOworICAg ICAgZnByaW50ZiAoc3RkZXJyLCAibWNfcmVkcmF3X2ZpbGxfY29sdW1uICglcylcbiIsIHdpbmRv d19jaGFyKTsKKyAgICB9CisjZW5kaWYKKyAgTGlzcF9PYmplY3Qgdmxpc3QgPSBRbmlsOworICBM aXNwX09iamVjdCBmaWZ0ZWVuX2VsZW1lbnRzID0gUW5pbDsKKyAgaW50IHgsIGZ4LCB5LCBmeSwg aHBvcywgdnBvcywgaDsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZTsKKyAg aW50IGN1cnNvcl93aWR0aDsKKyAgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCA9IFFuaWw7CisgIExp c3BfT2JqZWN0IGJhY2tncm91bmQgPSBRbmlsOworICBib29sIGFjdGl2ZV9wID0gZmFsc2U7Cisg IGJvb2wgbWluaW1hbF9wID0gZmFsc2U7CisgIGludCBmbGF2b3I7CisgIHB0cmRpZmZfdCBwb3Np bnQ7CisgIGJvb2wgdXBkYXRpbmdfZnJhbWVfcCA9IGZhbHNlOworICBpZiAoWEZSQU1FICh3LT5m cmFtZSkgIT0gWEZSQU1FICh3LT5mcmFtZSktPm1jX3VwZGF0aW5nX2ZyYW1lKQorICAgIHsKKyAg ICAgIHVwZGF0aW5nX2ZyYW1lX3AgPSB0cnVlOworICAgICAgdXBkYXRlX2JlZ2luIChYRlJBTUUg KHctPmZyYW1lKSk7CisgICAgfQorICBmb3IgKHZsaXN0ID0gWENBUiAody0+bWNfZmlsbF9jb2x1 bW5fY2FjaGUpOworICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgdmxpc3QgPSBYQ0RSICh2 bGlzdCkpCisgICAgeworICAgICAgZmlmdGVlbl9lbGVtZW50cyA9IFhDQVIgKHZsaXN0KTsKKyAg ICAgIHggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMCksIGZpZnRlZW5fZWxlbWVudHMp KTsKKyAgICAgIGZ4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDEpLCBmaWZ0ZWVuX2Vs ZW1lbnRzKSk7CisgICAgICB5ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDIpLCBmaWZ0 ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmeSA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgz KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgaHBvcyA9IFhGSVhOVU0gKEZudGggKG1ha2Vf Zml4bnVtICg0KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgdnBvcyA9IFhGSVhOVU0gKEZu dGggKG1ha2VfZml4bnVtICg1KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgaCA9IFhGSVhO VU0gKEZudGggKG1ha2VfZml4bnVtICg2KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgY3Vy c29yX3R5cGUgPSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChGbnRoIChtYWtlX2ZpeG51bSAoNyks IGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGN1cnNvcl93aWR0aCA9IFhGSVhOVU0gKEZudGgg KG1ha2VfZml4bnVtICg4KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgZm9yZWdyb3VuZCA9 IEZudGggKG1ha2VfZml4bnVtICg5KSwgZmlmdGVlbl9lbGVtZW50cyk7CisgICAgICBiYWNrZ3Jv dW5kID0gRm50aCAobWFrZV9maXhudW0gKDEwKSwgZmlmdGVlbl9lbGVtZW50cyk7CisgICAgICBh Y3RpdmVfcCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxMSksIGZpZnRlZW5fZWxlbWVu dHMpKTsKKyAgICAgIG1pbmltYWxfcCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxMiks IGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGZsYXZvciA9IFhGSVhOVU0gKEZudGggKG1ha2Vf Zml4bnVtICgxMyksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHBvc2ludCA9IFhGSVhOVU0g KEZudGggKG1ha2VfZml4bnVtICgxNCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGJvb2wg cmVtb3ZlX3AgPSBmYWxzZTsKKyAgICAgIG1jX2RyYXdfZXJhc2VfaHlicmlkICh3LCB4LCBmeCwg eSwgZnksIGhwb3MsIHZwb3MsIGgsIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnNvcl93aWR0aCwgZm9yZWdyb3VuZCwgYWN0aXZlX3AsIG1pbmltYWxfcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF2b3IsIHBvc2ludCwgcmVtb3ZlX3ApOworICAg IH0KKyAgaWYgKHVwZGF0aW5nX2ZyYW1lX3ApCisgICAgdXBkYXRlX2VuZCAoWEZSQU1FICh3LT5m cmFtZSkpOworLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBjcHVf dGltZV91c2VkID0gKChkb3VibGUpIChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7Cisg IGR0b2FzdHIgKGJ1Zl90aW1lLCBzaXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3VzZWQp OworICBkZWJ1Z19tZXRob2RfYWRkICh3LCAibWNfcmVkcmF3X2ZpbGxfY29sdW1uOiAgVElNRSAo JXMpIiwgYnVmX3RpbWUpOworI2VuZGlmCisqLworfQorCit2b2lkCittY19lcmFzZV9tdWx0aXBs ZV9jdXJzb3JzIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIGRlbGV0ZV9jYWNoZSkKK3sKKy8qCisj aWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBkb3VibGUgY3B1X3Rp bWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07CisgIHN0YXJ0ID0g Y2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVk aXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkpCisg ICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAod2luZG93 LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5n ICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRv d19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfZXJhc2VfbXVsdGlwbGVfY3Vy c29ycyAoJXMpOiAgZGVsZXRlX2NhY2hlICglZClcbiIsIHdpbmRvd19jaGFyLCBkZWxldGVfY2Fj aGUpOworICAgIH0KKyNlbmRpZgorICBMaXNwX09iamVjdCB2bGlzdCA9IFFuaWw7CisgIExpc3Bf T2JqZWN0IGZpZnRlZW5fZWxlbWVudHMgPSBRbmlsOworICBpbnQgeCwgZngsIHksIGZ5LCBocG9z LCB2cG9zLCBoOworICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlOworICBpbnQg Y3Vyc29yX3dpZHRoOworICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9P YmplY3QgYmFja2dyb3VuZCA9IFFuaWw7CisgIGJvb2wgYWN0aXZlX3AgPSBmYWxzZTsKKyAgYm9v bCBtaW5pbWFsX3AgPSBmYWxzZTsKKyAgaW50IGZsYXZvciA9IE5PX0ZMQVZPUjsKKyAgcHRyZGlm Zl90IHBvc2ludDsKKyAgYm9vbCB1cGRhdGluZ19mcmFtZV9wID0gZmFsc2U7CisgIGlmIChYRlJB TUUgKHctPmZyYW1lKSAhPSBYRlJBTUUgKHctPmZyYW1lKS0+bWNfdXBkYXRpbmdfZnJhbWUpCisg ICAgeworICAgICAgdXBkYXRpbmdfZnJhbWVfcCA9IHRydWU7CisgICAgICB1cGRhdGVfYmVnaW4g KFhGUkFNRSAody0+ZnJhbWUpKTsKKyAgICB9CisgIG1jX2VyYXNlX2dseXBoX2N1cnNvcnMgKHcs IHctPnBoeXNfY3Vyc29yLngsIHctPnBoeXNfY3Vyc29yLnksIHctPnBoeXNfY3Vyc29yLmhwb3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgIHctPnBoeXNfY3Vyc29yLnZwb3MsIHctPnBoeXNf Y3Vyc29yX3R5cGUsIHctPnBoeXNfY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBmbGF2b3IpOworICBmb3IgKHZsaXN0ID0gWENBUiAody0+bXVsdGlwbGVfY3Vyc29yc19j YWNoZSk7CisgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0 KSkKKyAgICB7CisgICAgICBmaWZ0ZWVuX2VsZW1lbnRzID0gWENBUiAodmxpc3QpOworICAgICAg eCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgwKSwgZmlmdGVlbl9lbGVtZW50cykpOwor ICAgICAgZnggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIGZpZnRlZW5fZWxlbWVu dHMpKTsKKyAgICAgIHkgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMiksIGZpZnRlZW5f ZWxlbWVudHMpKTsKKyAgICAgIGZ5ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDMpLCBm aWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBocG9zID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhu dW0gKDQpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICB2cG9zID0gWEZJWE5VTSAoRm50aCAo bWFrZV9maXhudW0gKDUpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBoID0gWEZJWE5VTSAo Rm50aCAobWFrZV9maXhudW0gKDYpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBjdXJzb3Jf dHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1ha2VfZml4bnVtICg3KSwgZmlm dGVlbl9lbGVtZW50cykpOworICAgICAgY3Vyc29yX3dpZHRoID0gWEZJWE5VTSAoRm50aCAobWFr ZV9maXhudW0gKDgpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmb3JlZ3JvdW5kID0gRm50 aCAobWFrZV9maXhudW0gKDkpLCBmaWZ0ZWVuX2VsZW1lbnRzKTsKKyAgICAgIGJhY2tncm91bmQg PSBGbnRoIChtYWtlX2ZpeG51bSAoMTApLCBmaWZ0ZWVuX2VsZW1lbnRzKTsKKyAgICAgIGFjdGl2 ZV9wID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDExKSwgZmlmdGVlbl9lbGVtZW50cykp OworICAgICAgbWluaW1hbF9wID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDEyKSwgZmlm dGVlbl9lbGVtZW50cykpOworICAgICAgZmxhdm9yID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhu dW0gKDEzKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgcG9zaW50ID0gWEZJWE5VTSAoRm50 aCAobWFrZV9maXhudW0gKDE0KSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgaWYgKGZsYXZv ciA9PSBNQ19HTFlQSCkKKyAgICAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29ycyAodywgeCwgeSwg aHBvcywgdnBvcywgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgZmxhdm9yKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgcmVtb3ZlX3AgPSB0cnVlOworICAg ICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKHcsIHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBv cywgaCwgY3Vyc29yX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy c29yX3dpZHRoLCBiYWNrZ3JvdW5kLCBhY3RpdmVfcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW5pbWFsX3AsIGZsYXZvciwgcG9zaW50LCByZW1vdmVfcCk7CisgICAgICAg ICAgfQorICAgIH0KKyAgaWYgKHVwZGF0aW5nX2ZyYW1lX3ApCisgICAgdXBkYXRlX2VuZCAoWEZS QU1FICh3LT5mcmFtZSkpOworICBpZiAoZGVsZXRlX2NhY2hlKQorICAgIHdzZXRfbXVsdGlwbGVf Y3Vyc29yc19jYWNoZSAodywgUW5pbCk7CisgIHctPm1jLmVyYXNlX211bHRpcGxlX2N1cnNvcnMg PSBmYWxzZTsKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgZW5kID0gY2xvY2soKTsKKyAgY3B1 X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0gc3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOwor ICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1Zl90aW1lLCAwLCAwLCBjcHVfdGltZV91c2Vk KTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1jX2VyYXNlX211bHRpcGxlX2N1cnNvcnM6ICBU SU1FICglcykiLCBidWZfdGltZSk7CisjZW5kaWYKKyovCit9CisKK3ZvaWQKK21jX2VyYXNlX2Ny b3NzaGFpcnMgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZGVsZXRlX2NhY2hlLCBib29sIG1pbmlt YWxfcCkKK3sKKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOwor ICBkb3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VO RF07CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyNpZmRlZiBHTFlQSF9ERUJVRwor ICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQor ICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykp KQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdp bmRvdywgdyk7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0 cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3 aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2Nyb3NzaGFp cnMgKCVzKTogIGRlbGV0ZV9jYWNoZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICB3 aW5kb3dfY2hhciwgZGVsZXRlX2NhY2hlKTsKKyAgICB9CisjZW5kaWYKKyAgTGlzcF9PYmplY3Qg dmxpc3QgPSBRbmlsOworICBMaXNwX09iamVjdCBmaWZ0ZWVuX2VsZW1lbnRzID0gUW5pbDsKKyAg aW50IHgsIGZ4LCB5LCBmeSwgaHBvcywgdnBvcywgaDsKKyAgZW51bSB0ZXh0X2N1cnNvcl9raW5k cyBjdXJzb3JfdHlwZTsKKyAgaW50IGN1cnNvcl93aWR0aDsKKyAgTGlzcF9PYmplY3QgZm9yZWdy b3VuZCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBRbmlsOworICBib29sIGFj dGl2ZV9wID0gZmFsc2U7CisgIGludCBmbGF2b3IgPSBOT19GTEFWT1I7CisgIHB0cmRpZmZfdCBw b3NpbnQ7CisgIGJvb2wgdXBkYXRpbmdfZnJhbWVfcCA9IGZhbHNlOworICBpZiAoWEZSQU1FICh3 LT5mcmFtZSkgIT0gWEZSQU1FICh3LT5mcmFtZSktPm1jX3VwZGF0aW5nX2ZyYW1lKQorICAgIHsK KyAgICAgIHVwZGF0aW5nX2ZyYW1lX3AgPSB0cnVlOworICAgICAgdXBkYXRlX2JlZ2luIChYRlJB TUUgKHctPmZyYW1lKSk7CisgICAgfQorICBpZiAoIW1pbmltYWxfcCkKKyAgICBtY19lcmFzZV9n bHlwaF9jdXJzb3JzICh3LCB3LT5waHlzX2N1cnNvci54LCB3LT5waHlzX2N1cnNvci55LCB3LT5w aHlzX2N1cnNvci5ocG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPnBoeXNfY3Vy c29yLnZwb3MsIHctPnBoeXNfY3Vyc29yX3R5cGUsIHctPnBoeXNfY3Vyc29yX3dpZHRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvcik7CisgIGZvciAodmxpc3QgPSBYQ0FSICh3 LT5jcm9zc2hhaXJzX2NhY2hlKTsKKyAgICAgICBDT05TUCAodmxpc3QpOworICAgICAgIHZsaXN0 ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIGZpZnRlZW5fZWxlbWVudHMgPSBYQ0FSICh2 bGlzdCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBmaWZ0ZWVu X2VsZW1lbnRzKSk7CisgICAgICBmeCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVtICgxKSwg ZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVt ICgyKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgZnkgPSBYRklYTlVNIChGbnRoIChtYWtl X2ZpeG51bSAoMyksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGhwb3MgPSBYRklYTlVNIChG bnRoIChtYWtlX2ZpeG51bSAoNCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHZwb3MgPSBY RklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNSksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAg IGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNiksIGZpZnRlZW5fZWxlbWVudHMpKTsK KyAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoRm50aCAobWFrZV9m aXhudW0gKDcpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBjdXJzb3Jfd2lkdGggPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoOCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGZv cmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSksIGZpZnRlZW5fZWxlbWVudHMpOworICAg ICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfZml4bnVtICgxMCksIGZpZnRlZW5fZWxlbWVudHMp OworICAgICAgYWN0aXZlX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTEpLCBmaWZ0 ZWVuX2VsZW1lbnRzKSk7CisgICAgICBtaW5pbWFsX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2Zp eG51bSAoMTIpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmbGF2b3IgPSBYRklYTlVNIChG bnRoIChtYWtlX2ZpeG51bSAoMTMpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBwb3NpbnQg PSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTQpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7Cisg ICAgICBpZiAoZmxhdm9yID09IE1DX0dMWVBIKQorICAgICAgICBtY19lcmFzZV9nbHlwaF9jdXJz b3JzICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRoLCBmbGF2 b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCByZW1vdmVf cCA9IHRydWU7CisgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgZngsIHks IGZ5LCBocG9zLCB2cG9zLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGJhY2tncm91bmQsIGFjdGl2ZV9wLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgZmxhdm9yLCBwb3NpbnQsIHJlbW92 ZV9wKTsKKyAgICAgICAgICB9CisgICAgfQorICBpZiAodXBkYXRpbmdfZnJhbWVfcCkKKyAgICB1 cGRhdGVfZW5kIChYRlJBTUUgKHctPmZyYW1lKSk7CisgIGlmIChkZWxldGVfY2FjaGUpCisgICAg d3NldF9jcm9zc2hhaXJzX2NhY2hlICh3LCBRbmlsKTsKKyAgdy0+bWMuZXJhc2VfY3Jvc3NoYWly cyA9IGZhbHNlOworLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBj cHVfdGltZV91c2VkID0gKChkb3VibGUpIChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7 CisgIGR0b2FzdHIgKGJ1Zl90aW1lLCBzaXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3Vz ZWQpOworICBkZWJ1Z19tZXRob2RfYWRkICh3LCAibWNfZXJhc2VfY3Jvc3NoYWlyczogIFRJTUUg KCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfZXJhc2VfZmlsbF9j b2x1bW4gKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZGVsZXRlX2NhY2hlKQoreworLyoKKyNpZmRl ZiBHTFlQSF9ERUJVRworICBjbG9ja190IHN0YXJ0LCBlbmQ7CisgIGRvdWJsZSBjcHVfdGltZV91 c2VkOworICBjaGFyIGJ1Zl90aW1lW0RCTF9CVUZTSVpFX0JPVU5EXTsKKyAgc3RhcnQgPSBjbG9j aygpOworI2VuZGlmCisqLworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3Bs YXlfcAorICAgICAgJiYgQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAmJiAhTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19maWxsX2NvbHVtbikpKQorICAgIHsKKyAgICAg IExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgICAg ICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93LCBR bmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5nKTsK KyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2VyYXNlX2ZpbGxfY29sdW1uICglcyk6ICBkZWxl dGVfY2FjaGUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X2NoYXIsIGRl bGV0ZV9jYWNoZSk7CisgICAgfQorI2VuZGlmCisgIExpc3BfT2JqZWN0IHZsaXN0ID0gUW5pbDsK KyAgTGlzcF9PYmplY3QgZmlmdGVlbl9lbGVtZW50cyA9IFFuaWw7CisgIGludCB4LCBmeCwgeSwg ZnksIGhwb3MsIHZwb3MsIGg7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7 CisgIGludCBjdXJzb3Jfd2lkdGg7CisgIExpc3BfT2JqZWN0IGZvcmVncm91bmQgPSBRbmlsOwor ICBMaXNwX09iamVjdCBiYWNrZ3JvdW5kID0gUW5pbDsKKyAgYm9vbCBhY3RpdmVfcCA9IGZhbHNl OworICBib29sIG1pbmltYWxfcCA9IGZhbHNlOworICBpbnQgZmxhdm9yID0gTk9fRkxBVk9SOwor ICBwdHJkaWZmX3QgcG9zaW50OworICBib29sIHVwZGF0aW5nX2ZyYW1lX3AgPSBmYWxzZTsKKyAg aWYgKFhGUkFNRSAody0+ZnJhbWUpICE9IFhGUkFNRSAody0+ZnJhbWUpLT5tY191cGRhdGluZ19m cmFtZSkKKyAgICB7CisgICAgICB1cGRhdGluZ19mcmFtZV9wID0gdHJ1ZTsKKyAgICAgIHVwZGF0 ZV9iZWdpbiAoWEZSQU1FICh3LT5mcmFtZSkpOworICAgIH0KKyAgZm9yICh2bGlzdCA9IFhDQVIg KHctPm1jX2ZpbGxfY29sdW1uX2NhY2hlKTsKKyAgICAgICBDT05TUCAodmxpc3QpOworICAgICAg IHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIGZpZnRlZW5fZWxlbWVudHMgPSBY Q0FSICh2bGlzdCk7CisgICAgICB4ID0gWEZJWE5VTSAoRm50aCAobWFrZV9maXhudW0gKDApLCBm aWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmeCA9IFhGSVhOVU0gKEZudGggKG1ha2VfZml4bnVt ICgxKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgeSA9IFhGSVhOVU0gKEZudGggKG1ha2Vf Zml4bnVtICgyKSwgZmlmdGVlbl9lbGVtZW50cykpOworICAgICAgZnkgPSBYRklYTlVNIChGbnRo IChtYWtlX2ZpeG51bSAoMyksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIGhwb3MgPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAgICAgIHZw b3MgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNSksIGZpZnRlZW5fZWxlbWVudHMpKTsK KyAgICAgIGggPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoNiksIGZpZnRlZW5fZWxlbWVu dHMpKTsKKyAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoRm50aCAo bWFrZV9maXhudW0gKDcpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBjdXJzb3Jfd2lkdGgg PSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoOCksIGZpZnRlZW5fZWxlbWVudHMpKTsKKyAg ICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtlX2ZpeG51bSAoOSksIGZpZnRlZW5fZWxlbWVudHMp OworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfZml4bnVtICgxMCksIGZpZnRlZW5fZWxl bWVudHMpOworICAgICAgYWN0aXZlX3AgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTEp LCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBtaW5pbWFsX3AgPSBYRklYTlVNIChGbnRoICht YWtlX2ZpeG51bSAoMTIpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBmbGF2b3IgPSBYRklY TlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTMpLCBmaWZ0ZWVuX2VsZW1lbnRzKSk7CisgICAgICBw b3NpbnQgPSBYRklYTlVNIChGbnRoIChtYWtlX2ZpeG51bSAoMTQpLCBmaWZ0ZWVuX2VsZW1lbnRz KSk7CisgICAgICBpZiAoZmxhdm9yID09IE1DX0dMWVBIKQorICAgICAgICBtY19lcmFzZV9nbHlw aF9jdXJzb3JzICh3LCB4LCB5LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlwZSwgY3Vyc29yX3dpZHRo LCBmbGF2b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgYm9vbCBy ZW1vdmVfcCA9IHRydWU7CisgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwg ZngsIHksIGZ5LCBocG9zLCB2cG9zLCBoLCBjdXJzb3JfdHlwZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGgsIGJhY2tncm91bmQsIGFjdGl2ZV9wLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWxfcCwgZmxhdm9yLCBwb3NpbnQs IHJlbW92ZV9wKTsKKyAgICAgICAgICB9CisgICAgfQorICBpZiAodXBkYXRpbmdfZnJhbWVfcCkK KyAgICB1cGRhdGVfZW5kIChYRlJBTUUgKHctPmZyYW1lKSk7CisgIGlmIChkZWxldGVfY2FjaGUp CisgICAgd3NldF9tY19maWxsX2NvbHVtbl9jYWNoZSAodywgUW5pbCk7CisgIHctPm1jLmVyYXNl X2ZpbGxfY29sdW1uID0gZmFsc2U7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGVuZCA9IGNs b2NrKCk7CisgIGNwdV90aW1lX3VzZWQgPSAoKGRvdWJsZSkgKGVuZCAtIHN0YXJ0KSkgLyBDTE9D S1NfUEVSX1NFQzsKKyAgZHRvYXN0ciAoYnVmX3RpbWUsIHNpemVvZiBidWZfdGltZSwgMCwgMCwg Y3B1X3RpbWVfdXNlZCk7CisgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJtY19lcmFzZV9maWxsX2Nv bHVtbjogIFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNf cmVtb3ZlX211bHRpcGxlX2N1cnNvcnMgKHN0cnVjdCB3aW5kb3cgKncpCit7CisgIGJvb2wgZGVs ZXRlX2NhY2hlID0gKHctPm1jLnJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgPT0gOAorICAg ICAgICAgICAgICAgICAgICAgICB8fCBtY19yZWRpc3BsYXkgPT0gMykKKyAgICAgICAgICAgICAg ICAgICAgICA/IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgOiB0cnVlOworI2lmZGVmIEdM WVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRpc3BsYXlfcAorICAgICAgJiYgQlVGRkVSUCAody0+ Y29udGVudHMpCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBt dWx0aXBsZV9jdXJzb3JzX2NvbmYpKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7 CisgICAgICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93 X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3 aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRl cnIsICJtY19yZW1vdmVfbXVsdGlwbGVfY3Vyc29ycyAoJXMpOiAgZGVsZXRlX2NhY2hlICglZClc biIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfY2hhciwgZGVsZXRlX2NhY2hlKTsK KyAgICB9CisjZW5kaWYKKyAgLyogUmVtb3ZlIGZha2UgY3Vyc29ycy4gIElmIHdlIHJlbHkgdXBv biBgdXBkYXRlX2ZyYW1lJyB0byByZW1vdmUgZmFrZSBjdXJzb3JzLAorICB0aGVuIGl0IHdvdWxk IGJlIHRvbyBsYXRlIHRvIHJlbW92ZSBmYWtlIGN1cnNvcnMgZnJvbSBhbGwgYXJlYXMgb2YgdGhl IHZpc2libGUKKyAgd2luZG93IHdoZW4gY3V0dGluZy9wYXN0aW5nIHRleHQgYW5kIHBlcmhhcHMg YSBmZXcgb3RoZXIgc2l0dWF0aW9ucy4gKi8KKyAgaWYgKCF3LT5wc2V1ZG9fd2luZG93X3AKKyAg ICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPm11bHRpcGxlX2N1 cnNvcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAo MSksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAo WENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkp CisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgyKSwg dy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkpKSkKKyAgICBtY19lcmFzZV9tdWx0aXBsZV9jdXJz b3JzICh3LCBkZWxldGVfY2FjaGUpOworfQorCit2b2lkCittY19yZW1vdmVfY3Jvc3NoYWlycyAo c3RydWN0IHdpbmRvdyAqdykKK3sKKyAgYm9vbCBkZWxldGVfY2FjaGUgPSAoKHctPm1jLnJlZGlz cGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgPT0gOAorICAgICAgICAgICAgICAgICAgICAgICAgfHwg bWNfcmVkaXNwbGF5ID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICYmICF3LT5tYy5kcmF3 X2Nyb3NzaGFpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgIXctPm1jLmVyYXNlX2Nyb3Nz aGFpcnMpCisgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZQorICAgICAgICAgICAgICAgICAg ICAgIDogdHJ1ZTsKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AK KyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhC VUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgIHsKKyAgICAgIExpc3BfT2Jq ZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgICAgICBMaXNwX09i amVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAg ICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZw cmludGYgKHN0ZGVyciwgIm1jX3JlbW92ZV9jcm9zc2hhaXJzICglcyk6ICBkZWxldGVfY2FjaGUg KCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd19jaGFyLCBkZWxldGVfY2Fj aGUpOworICAgIH0KKyNlbmRpZgorICAvKiBSZW1vdmUgZmFrZSBjdXJzb3JzLiAgSWYgd2UgcmVs eSB1cG9uIGB1cGRhdGVfZnJhbWUnIHRvIHJlbW92ZSBmYWtlIGN1cnNvcnMsCisgIHRoZW4gaXQg d291bGQgYmUgdG9vIGxhdGUgdG8gcmVtb3ZlIGZha2UgY3Vyc29ycyBmcm9tIGFsbCBhcmVhcyBv ZiB0aGUgdmlzaWJsZQorICB3aW5kb3cgd2hlbiBjdXR0aW5nL3Bhc3RpbmcgdGV4dCBhbmQgcGVy aGFwcyBhIGZldyBvdGhlciBzaXR1YXRpb25zLiAqLworICBpZiAoIXctPnBzZXVkb193aW5kb3df cAorICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAhTklMUCAody0+Y3Jvc3No YWlyc19jYWNoZSkKKyAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgx KSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChG bnRoIChtYWtlX2ZpeG51bSAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICYmIEVR ICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIpLCB3LT5jcm9zc2hhaXJz X2NhY2hlKSkpKQorICAgIHsKKyAgICAgIGJvb2wgbWluaW1hbF9wID0gZmFsc2U7CisgICAgICBt Y19lcmFzZV9jcm9zc2hhaXJzICh3LCBkZWxldGVfY2FjaGUsIG1pbmltYWxfcCk7CisgICAgfQor fQorCit2b2lkCittY19yZW1vdmVfZmlsbF9jb2x1bW4gKHN0cnVjdCB3aW5kb3cgKncpCit7Cisg IGJvb2wgZGVsZXRlX2NhY2hlID0gKCh3LT5tYy5yZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVh ID09IDgKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1jX3JlZGlzcGxheSA9PSAzKQorICAg ICAgICAgICAgICAgICAgICAgICAmJiAhdy0+bWMuZHJhd19maWxsX2NvbHVtbgorICAgICAgICAg ICAgICAgICAgICAgICAmJiAhdy0+bWMuZXJhc2VfZmlsbF9jb2x1bW4pCisgICAgICAgICAgICAg ICAgICAgICAgPyBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgIDogdHJ1ZTsKKyNpZmRlZiBH TFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHct PmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwg bWNfZmlsbF9jb2x1bW4pKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3c7CisgICAg ICBYU0VUV0lORE9XICh3aW5kb3csIHcpOworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmlu ZyA9IEZwcmluMV90b19zdHJpbmcgKHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3df Y2hhciA9IFNTREFUQSAod2luZG93X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJt Y19yZW1vdmVfZmlsbF9jb2x1bW4gKCVzKTogIGRlbGV0ZV9jYWNoZSAoJWQpXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgd2luZG93X2NoYXIsIGRlbGV0ZV9jYWNoZSk7CisgICAgfQorI2Vu ZGlmCisgIC8qIFJlbW92ZSBmYWtlIGN1cnNvcnMuICBJZiB3ZSByZWx5IHVwb24gYHVwZGF0ZV9m cmFtZScgdG8gcmVtb3ZlIGZha2UgY3Vyc29ycywKKyAgdGhlbiBpdCB3b3VsZCBiZSB0b28gbGF0 ZSB0byByZW1vdmUgZmFrZSBjdXJzb3JzIGZyb20gYWxsIGFyZWFzIG9mIHRoZSB2aXNpYmxlCisg IHdpbmRvdyB3aGVuIGN1dHRpbmcvcGFzdGluZyB0ZXh0IGFuZCBwZXJoYXBzIGEgZmV3IG90aGVy IHNpdHVhdGlvbnMuICovCisgIGlmICghdy0+cHNldWRvX3dpbmRvd19wCisgICAgICAmJiAhTUlO SV9XSU5ET1dfUCAodykKKyAgICAgICYmICFOSUxQICh3LT5tY19maWxsX2NvbHVtbl9jYWNoZSkK KyAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgxKSwgdy0+bWNfZmls bF9jb2x1bW5fY2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFr ZV9maXhudW0gKDEpLCB3LT5tY19maWxsX2NvbHVtbl9jYWNoZSkpKQorICAgICAgJiYgRVEgKHct PmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMiksIHctPm1jX2ZpbGxfY29sdW1u X2NhY2hlKSkpKQorICAgIG1jX2VyYXNlX2ZpbGxfY29sdW1uICh3LCBkZWxldGVfY2FjaGUpOwor fQorCit2b2lkCittY19tdWx0aXBsZV9jdXJzb3JzX3BvcnRhbCAoc3RydWN0IHdpbmRvdyAqdywg Ym9vbCBvbiwgYm9vbCBhY3RpdmVfcCkKK3sKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJh Y2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYg IU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25m KSkpCisgICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93OworICAgICAgWFNFVFdJTkRPVyAo d2luZG93LCB3KTsKKyAgICAgIExpc3BfT2JqZWN0IHdpbmRvd19zdHJpbmcgPSBGcHJpbjFfdG9f c3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hhciAqd2luZG93X2NoYXIgPSBTU0RBVEEg KHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAibWNfbXVsdGlwbGVfY3Vy c29yc19wb3J0YWwgKCVzKTogIG9uICglZCkgfCBhY3RpdmVfcCAoJWQpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgd2luZG93X2NoYXIsIG9uLCBhY3RpdmVfcCk7CisgICAgfQorI2VuZGlm CisgIGJvb2wgbWluaW1hbF9wID0gKCF3LT5tYy5kcmF3X211bHRpcGxlX2N1cnNvcnMKKyAgICAg ICAgICAgICAgICAgICAgJiYgbWNfcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSAhPSA4Cisg ICAgICAgICAgICAgICAgICAgICYmIG1jX3JlZGlzcGxheSAhPSAzCisgICAgICAgICAgICAgICAg ICAgICYmIHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KQorICAgICAgICAgICAgICAgICAg ICAmJiBOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNf ZHJhd19mb3J0aHdpdGgpKSk7CisgIGlmICh3LT5tYy5lcmFzZV9tdWx0aXBsZV9jdXJzb3JzICYm IHctPm1jLmRyYXdfbXVsdGlwbGVfY3Vyc29ycworICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcp CisgICAgICAmJiAhTklMUCAody0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkKKyAgICAgICYmIFdJ TkRPV1AgKFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgxKSwgdy0+bXVsdGlwbGVfY3Vyc29yc19j YWNoZSkpKQorICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAo MSksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAgICAgICYmIEVRICh3LT5jb250ZW50 cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIpLCB3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hl KSkpKQorICAgIG1jX2VyYXNlX211bHRpcGxlX2N1cnNvcnMgKHcsIHRydWUpOworICAvKiBgdy0+ bXVsdGlwbGVfY3Vyc29yc19jYWNoZWAgYmVsb25ncyB0byB0aGUgd2luZG93LCBub3QgdGhlIGJ1 ZmZlci4gIFN3aXRjaGluZworICBidWZmZXJzIHdpdGhpbiB0aGUgc2FtZSB3aW5kb3cgcmVuZGVy cyB0aGUgY2FjaGUgdXNlbGVzcy4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAg JiYgIU5JTFAgKHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChY Q0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkK KyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5t dWx0aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAgICAmJiAhRVEgKHctPmNvbnRlbnRzLCBYQ0FS IChGbnRoIChtYWtlX2ZpeG51bSAoMiksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkpCisg ICAgeworICAgICAgd3NldF9tdWx0aXBsZV9jdXJzb3JzX2NhY2hlICh3LCBRbmlsKTsKKyAgICAg IHctPm1jLmVyYXNlX211bHRpcGxlX2N1cnNvcnMgPSBmYWxzZTsKKyAgICB9CisgIGlmIChvbgor ICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAodyA9PSBYV0lORE9XIChzZWxl Y3RlZF93aW5kb3cpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgbXVsdGlwbGVfY3Vyc29yc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAmJiBOSUxQ ICh3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkpCisgICAgbWNfZHJhd19t dWx0aXBsZV9jdXJzb3JzICh3LCBhY3RpdmVfcCwgbWluaW1hbF9wKTsKKyAgICBlbHNlIGlmIChv bgorICAgICAgICAgICAgICYmICFNSU5JX1dJTkRPV19QICh3KQorICAgICAgICAgICAgICYmICFO SUxQICh3LT5tdWx0aXBsZV9jdXJzb3JzX2NhY2hlKQorICAgICAgICAgICAgICYmICFOSUxQIChC VkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIG11bHRpcGxlX2N1cnNvcnNfY29uZikpCisgICAg ICAgICAgICAgJiYgV0lORE9XUCAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5tdWx0 aXBsZV9jdXJzb3JzX2NhY2hlKSkpCisgICAgICAgICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FS IChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPm11bHRpcGxlX2N1cnNvcnNfY2FjaGUpKSkKKyAg ICAgICAgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgy KSwgdy0+bXVsdGlwbGVfY3Vyc29yc19jYWNoZSkpKSkKKyAgICAgIHsKKyAgICAgICAgbWNfZXJh c2VfbXVsdGlwbGVfY3Vyc29ycyAodywgZmFsc2UpOworICAgICAgICBtY19yZWRyYXdfbXVsdGlw bGVfY3Vyc29ycyAodyk7CisgICAgICB9Cit9CisKK3ZvaWQKK21jX2Nyb3NzaGFpcnNfcG9ydGFs IChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIG9uLCBib29sIGFjdGl2ZV9wKQoreworICAvKiBSZW1v dmUgY3Jvc3NoYWlycyBhbmQgZGVsZXRlIHRoZSBjYWNoZSwgYnV0IE9OTFkgaWYgd2UgcGxhbiBv biByZWRyYXdpbmcgdGhlbS4KKyAgSW4gYSB0aW1lciBzaXR1YXRpb24sIHdlIHdhbnQgdG8gZXJh c2UgYW5kIHJlZHJhdyAtLSB3ZSBnbyBmcm9tIGBjaGVja3BvaW50XzInCisgIGluIGByZWRpc3Bs YXlfaW50ZXJuYWwnIGFuZCBmb3JjZSBvdXIgd2F5IG92ZXIgdG8gYHVwZGF0ZV9mcmFtZScgMiBv ZiAzLgorICBFbWFjcyByZWZyZXNoZXMgdGhlIHNlbGVjdGVkIHdpbmRvdyBhZnRlciBhYm91dCAx IHRvIDIgbWludXRlcyBvZiBubyBhY3Rpdml0eQorICBldmVuIHRob3VnaCB0aGVyZSBpcyBub3Ro aW5nIGF0dGFjaGVkIHRvIHRoZSBgdGltZV9saXN0Jy9gaWRsZV90aW1lcl9saXN0Jy4KKyAgSW4g dGhhdCByZWZyZXNoIG5vLXRpbWVyIHNpdHVhdGlvbiwgd2Ugd2FudCB0byBlcmFzZS9kcmF3IHVz aW5nIHRoZSBjYWNoZS4gKi8KKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNw bGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJW QVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgIHsKKyAgICAgIExp c3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7CisgICAgICBM aXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93LCBRbmls KTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5nKTsKKyAg ICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2Nyb3NzaGFpcnNfcG9ydGFsICglcyk6ICBvbiAoJWQp IHwgYWN0aXZlX3AgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd19jaGFy LCBvbiwgYWN0aXZlX3ApOworICAgIH0KKyNlbmRpZgorICBib29sIG1pbmltYWxfcCA9ICghdy0+ bWMuZHJhd19jcm9zc2hhaXJzCisgICAgICAgICAgICAgICAgICAgICYmIG1jX3JlZGlzcGxheV9w cmVzZXJ2ZV9lY2hvX2FyZWEgIT0gOAorICAgICAgICAgICAgICAgICAgICAmJiBtY19yZWRpc3Bs YXkgIT0gMworICAgICAgICAgICAgICAgICAgICAmJiB3ID09IFhXSU5ET1cgKHNlbGVjdGVkX3dp bmRvdykKKyAgICAgICAgICAgICAgICAgICAgJiYgTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29u dGVudHMpLCBjcm9zc2hhaXJzX2RyYXdfZm9ydGh3aXRoKSkpOworICBpZiAody0+bWMuZXJhc2Vf Y3Jvc3NoYWlycyAmJiB3LT5tYy5kcmF3X2Nyb3NzaGFpcnMKKyAgICAgICYmICFNSU5JX1dJTkRP V19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAmJiBX SU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHctPmNyb3NzaGFpcnNfY2FjaGUp KSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3 LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZu dGggKG1ha2VfZml4bnVtICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkKKyAgICBtY19lcmFz ZV9jcm9zc2hhaXJzICh3LCB0cnVlLCBtaW5pbWFsX3ApOworICAvKiBgdy0+Y3Jvc3NoYWlyc19j YWNoZWAgYmVsb25ncyB0byB0aGUgd2luZG93LCBub3QgdGhlIGJ1ZmZlci4gIFN3aXRjaGluZwor ICBidWZmZXJzIHdpdGhpbiB0aGUgc2FtZSB3aW5kb3cgcmVuZGVycyB0aGUgY2FjaGUgdXNlbGVz cy4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgIU5JTFAgKHctPmNyb3Nz aGFpcnNfY2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAo MSksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAo Rm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiAh RVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMiksIHctPmNyb3NzaGFp cnNfY2FjaGUpKSkpCisgICAgeworICAgICAgd3NldF9jcm9zc2hhaXJzX2NhY2hlICh3LCBRbmls KTsKKyAgICAgIHctPm1jLmVyYXNlX2Nyb3NzaGFpcnMgPSBmYWxzZTsKKyAgICB9CisgIGlmIChv bgorICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAodyA9PSBYV0lORE9XIChz ZWxlY3RlZF93aW5kb3cpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNv bnRlbnRzKSwgY3Jvc3NoYWlyc19pbmFjdGl2ZV93aW5kb3dzKSkpCisgICAgICAmJiBOSUxQICh3 LT5jcm9zc2hhaXJzX2NhY2hlKQorICAgICAgJiYgKCFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5j b250ZW50cyksIGNyb3NzaGFpcnMpKSkpCisgICAgbWNfZHJhd19jcm9zc2hhaXJzICh3LCBhY3Rp dmVfcCwgbWluaW1hbF9wKTsKKyAgICBlbHNlIGlmIChvbgorICAgICAgICAgICAgICYmICFNSU5J X1dJTkRPV19QICh3KQorICAgICAgICAgICAgICYmICFOSUxQICh3LT5jcm9zc2hhaXJzX2NhY2hl KQorICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyksIGNy b3NzaGFpcnMpKQorICAgICAgICAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZudGggKG1ha2VfZml4 bnVtICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgICAgICAgICYmIHcgPT0gWFdJ TkRPVyAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkp CisgICAgICAgICAgICAgJiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX2ZpeG51 bSAoMiksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkpCisgICAgICB7CisgICAgICAgIG1jX2VyYXNl X2Nyb3NzaGFpcnMgKHcsIGZhbHNlLCBtaW5pbWFsX3ApOworICAgICAgICBtY19yZWRyYXdfY3Jv c3NoYWlycyAodyk7CisgICAgICB9Cit9CisKK3ZvaWQKK21jX2ZpbGxfY29sdW1uX3BvcnRhbCAo c3RydWN0IHdpbmRvdyAqdywgYm9vbCBvbiwgYm9vbCBhY3RpdmVfcCkKK3sKKyAgLyogUmVtb3Zl IG1jX2ZpbGxfY29sdW1uIGFuZCBkZWxldGUgdGhlIGNhY2hlLCBidXQgT05MWSBpZiB3ZSBwbGFu IG9uIHJlZHJhd2luZyB0aGVtLgorICBJbiBhIHRpbWVyIHNpdHVhdGlvbiwgd2Ugd2FudCB0byBl cmFzZSBhbmQgcmVkcmF3IC0tIHdlIGdvIGZyb20gYGNoZWNrcG9pbnRfMicKKyAgaW4gYHJlZGlz cGxheV9pbnRlcm5hbCcgYW5kIGZvcmNlIG91ciB3YXkgb3ZlciB0byBgdXBkYXRlX2ZyYW1lJyAy IG9mIDMuCisgIEVtYWNzIHJlZnJlc2hlcyB0aGUgc2VsZWN0ZWQgd2luZG93IGFmdGVyIGFib3V0 IDEgdG8gMiBtaW51dGVzIG9mIG5vIGFjdGl2aXR5CisgIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5v dGhpbmcgYXR0YWNoZWQgdG8gdGhlIGB0aW1lX2xpc3QnL2BpZGxlX3RpbWVyX2xpc3QnLgorICBJ biB0aGF0IHJlZnJlc2ggbm8tdGltZXIgc2l0dWF0aW9uLCB3ZSB3YW50IHRvIGVyYXNlL2RyYXcg dXNpbmcgdGhlIGNhY2hlLiAqLworI2lmZGVmIEdMWVBIX0RFQlVHCisgIGlmICh0cmFjZV9yZWRp c3BsYXlfcAorICAgICAgJiYgQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAmJiAhTklMUCAo QlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19maWxsX2NvbHVtbikpKQorICAgIHsKKyAg ICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKKyAgICAgIFhTRVRXSU5ET1cgKHdpbmRvdywgdyk7Cisg ICAgICBMaXNwX09iamVjdCB3aW5kb3dfc3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93 LCBRbmlsKTsKKyAgICAgIGNoYXIgKndpbmRvd19jaGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5n KTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIm1jX2ZpbGxfY29sdW1uX3BvcnRhbCAoJXMpOiAg b24gKCVkKSB8IGFjdGl2ZV9wICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aW5k b3dfY2hhciwgb24sIGFjdGl2ZV9wKTsKKyAgICB9CisjZW5kaWYKKyAgYm9vbCBtaW5pbWFsX3Ag PSAoIXctPm1jLmRyYXdfZmlsbF9jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgJiYgbWNfcmVk aXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSAhPSA4CisgICAgICAgICAgICAgICAgICAgICYmIG1j X3JlZGlzcGxheSAhPSAzCisgICAgICAgICAgICAgICAgICAgICYmIHcgPT0gWFdJTkRPVyAoc2Vs ZWN0ZWRfd2luZG93KQorICAgICAgICAgICAgICAgICAgICAmJiBOSUxQIChCVkFSIChYQlVGRkVS ICh3LT5jb250ZW50cyksIG1jX2ZpbGxfY29sdW1uX2RyYXdfZm9ydGh3aXRoKSkpOworICBpZiAo dy0+bWMuZXJhc2VfZmlsbF9jb2x1bW4gJiYgdy0+bWMuZHJhd19maWxsX2NvbHVtbgorICAgICAg JiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAhTklMUCAody0+bWNfZmlsbF9jb2x1bW5f Y2FjaGUpCisgICAgICAmJiBXSU5ET1dQIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHct Pm1jX2ZpbGxfY29sdW1uX2NhY2hlKSkpCisgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZu dGggKG1ha2VfZml4bnVtICgxKSwgdy0+bWNfZmlsbF9jb2x1bW5fY2FjaGUpKSkKKyAgICAgICYm IEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9maXhudW0gKDIpLCB3LT5tY19maWxs X2NvbHVtbl9jYWNoZSkpKSkKKyAgICBtY19lcmFzZV9maWxsX2NvbHVtbiAodywgdHJ1ZSk7Cisg IC8qIGB3LT5tY19maWxsX2NvbHVtbl9jYWNoZWAgYmVsb25ncyB0byB0aGUgd2luZG93LCBub3Qg dGhlIGJ1ZmZlci4gIFN3aXRjaGluZworICBidWZmZXJzIHdpdGhpbiB0aGUgc2FtZSB3aW5kb3cg cmVuZGVycyB0aGUgY2FjaGUgdXNlbGVzcy4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQor ICAgICAgJiYgIU5JTFAgKHctPm1jX2ZpbGxfY29sdW1uX2NhY2hlKQorICAgICAgJiYgV0lORE9X UCAoWENBUiAoRm50aCAobWFrZV9maXhudW0gKDEpLCB3LT5tY19maWxsX2NvbHVtbl9jYWNoZSkp KQorICAgICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX2ZpeG51bSAoMSksIHct Pm1jX2ZpbGxfY29sdW1uX2NhY2hlKSkpCisgICAgICAmJiAhRVEgKHctPmNvbnRlbnRzLCBYQ0FS IChGbnRoIChtYWtlX2ZpeG51bSAoMiksIHctPm1jX2ZpbGxfY29sdW1uX2NhY2hlKSkpKQorICAg IHsKKyAgICAgIHdzZXRfbWNfZmlsbF9jb2x1bW5fY2FjaGUgKHcsIFFuaWwpOworICAgICAgdy0+ bWMuZXJhc2VfZmlsbF9jb2x1bW4gPSBmYWxzZTsKKyAgICB9CisgIGlmIChvbgorICAgICAgJiYg IU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAodyA9PSBYV0lORE9XIChzZWxlY3RlZF93aW5k b3cpCisgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNf ZmlsbF9jb2x1bW5faW5hY3RpdmVfd2luZG93cykpKQorICAgICAgJiYgTklMUCAody0+bWNfZmls bF9jb2x1bW5fY2FjaGUpCisgICAgICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgbWNfZmlsbF9jb2x1bW4pKSkpCisgICAgbWNfZHJhd19maWxsX2NvbHVtbiAodywgYWN0 aXZlX3AsIG1pbmltYWxfcCk7CisgICAgZWxzZSBpZiAob24KKyAgICAgICAgICAgICAmJiAhTUlO SV9XSU5ET1dfUCAodykKKyAgICAgICAgICAgICAmJiAhTklMUCAody0+bWNfZmlsbF9jb2x1bW5f Y2FjaGUpCisgICAgICAgICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRz KSwgbWNfZmlsbF9jb2x1bW4pKQorICAgICAgICAgICAgICYmIFdJTkRPV1AgKFhDQVIgKEZudGgg KG1ha2VfZml4bnVtICgxKSwgdy0+bWNfZmlsbF9jb2x1bW5fY2FjaGUpKSkKKyAgICAgICAgICAg ICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZudGggKG1ha2VfZml4bnVtICgxKSwgdy0+bWNfZmls bF9jb2x1bW5fY2FjaGUpKSkKKyAgICAgICAgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIg KEZudGggKG1ha2VfZml4bnVtICgyKSwgdy0+bWNfZmlsbF9jb2x1bW5fY2FjaGUpKSkpCisgICAg ICB7CisgICAgICAgIG1jX2VyYXNlX2ZpbGxfY29sdW1uICh3LCBmYWxzZSk7CisgICAgICAgIG1j X3JlZHJhd19maWxsX2NvbHVtbiAodyk7CisgICAgICB9Cit9CisKK0RFRlVOICgibWMtYWN0aXZh dGUtbXVsdGlwbGUtY3Vyc29ycyIsIEZtY19hY3RpdmF0ZV9tdWx0aXBsZV9jdXJzb3JzLCBTbWNf YWN0aXZhdGVfbXVsdGlwbGVfY3Vyc29ycywgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFdoZW4g dXNpbmcgYSB0aW1lciwgYG1jX3N3aXRjaGVzX211bHRpcGxlX2N1cnNvcnMnIGluIGBrZXlib2Fy ZC5jJyBpcyBub3QgY2FsbGVkLgorVGhlcmUgYXJlIGFsc28gc29tZSBvdGhlciBjaXJjdW1zdGFu Y2VzIHdoZXJlIGBtYy1hY3RpdmF0ZS1tdWx0aXBsZS1jdXJzb3JzJyBpcyBoZWxwZnVsLiAqLykK KyAgKExpc3BfT2JqZWN0IHdpbmRvdykKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9s aXZlX3dpbmRvdyAod2luZG93KTsKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVk aXNwbGF5X3AKKyAgICAgICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbXVsdGlwbGVfY3Vyc29yc19jb25mKSkpCisg ICAgeworICAgICAgTGlzcF9PYmplY3Qgd2luZG93X3N0cmluZyA9IEZwcmluMV90b19zdHJpbmcg KHdpbmRvdywgUW5pbCk7CisgICAgICBjaGFyICp3aW5kb3dfY2hhciA9IFNTREFUQSAod2luZG93 X3N0cmluZyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJtYy1hY3RpdmF0ZS1tdWx0aXBsZS1j dXJzb3JzICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAgICB9CisjZW5kaWYKKyAgdy0+bWMuZHJh d19tdWx0aXBsZV9jdXJzb3JzID0gdHJ1ZTsKKyAgdy0+bWMuZXJhc2VfbXVsdGlwbGVfY3Vyc29y cyA9IHRydWU7CisgIHJldHVybiBRbmlsOworfQorCitERUZVTiAoIm1jLWFjdGl2YXRlLWNyb3Nz aGFpcnMiLCBGbWNfYWN0aXZhdGVfY3Jvc3NoYWlycywgU21jX2FjdGl2YXRlX2Nyb3NzaGFpcnMs IDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBEb2Mtc3RyaW5nLiAqLykKKyAgKExpc3BfT2JqZWN0 IHdpbmRvdykKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAod2lu ZG93KTsKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAg ICYmIEJVRkZFUlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIg KHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IHdp bmRvd19zdHJpbmcgPSBGcHJpbjFfdG9fc3RyaW5nICh3aW5kb3csIFFuaWwpOworICAgICAgY2hh ciAqd2luZG93X2NoYXIgPSBTU0RBVEEgKHdpbmRvd19zdHJpbmcpOworICAgICAgZnByaW50ZiAo c3RkZXJyLCAibWMtYWN0aXZhdGUtY3Jvc3NoYWlycyAoJXMpXG4iLCB3aW5kb3dfY2hhcik7Cisg ICAgfQorI2VuZGlmCisgIHctPm1jLmRyYXdfY3Jvc3NoYWlycyA9IHRydWU7CisgIHctPm1jLmVy YXNlX2Nyb3NzaGFpcnMgPSB0cnVlOworICB3LT5tdXN0X2JlX3VwZGF0ZWRfcCA9IHRydWU7Cisg IHJldHVybiBRbmlsOworfQorCitERUZVTiAoIm1jLWFjdGl2YXRlLWZpbGwtY29sdW1uIiwgRm1j X2FjdGl2YXRlX2ZpbGxfY29sdW1uLCBTbWNfYWN0aXZhdGVfZmlsbF9jb2x1bW4sIDEsIDEsIDAs CisgICAgICAgZG9jOiAvKiBEb2Mtc3RyaW5nLiAqLykKKyAgKExpc3BfT2JqZWN0IHdpbmRvdykK K3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAod2luZG93KTsKKyNp ZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNwbGF5X3AKKyAgICAgICYmIEJVRkZF UlAgKHctPmNvbnRlbnRzKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRl bnRzKSwgbWNfZmlsbF9jb2x1bW4pKSkKKyAgICB7CisgICAgICBMaXNwX09iamVjdCB3aW5kb3df c3RyaW5nID0gRnByaW4xX3RvX3N0cmluZyAod2luZG93LCBRbmlsKTsKKyAgICAgIGNoYXIgKndp bmRvd19jaGFyID0gU1NEQVRBICh3aW5kb3dfc3RyaW5nKTsKKyAgICAgIGZwcmludGYgKHN0ZGVy ciwgIm1jLWFjdGl2YXRlLW1jLWZpbGwtY29sdW1uICglcylcbiIsIHdpbmRvd19jaGFyKTsKKyAg ICB9CisjZW5kaWYKKyAgdy0+bWMuZHJhd19maWxsX2NvbHVtbiA9IHRydWU7CisgIHctPm1jLmVy YXNlX2ZpbGxfY29sdW1uID0gdHJ1ZTsKKyAgdy0+bXVzdF9iZV91cGRhdGVkX3AgPSB0cnVlOwor ICByZXR1cm4gUW5pbDsKK30KKworREVGVU4gKCJtYy1zdGRlcnIiLCBGbWNfc3RkZXJyLCBTbWNf c3RkZXJyLCAwLCAxLCAiUCIsCisgICAgICAgZG9jOiAvKiBUb2dnbGUgdHJhY2luZyBvZiBtdWx0 aXBsZSBmYWtlIGN1cnNvcnMuCitXaXRoIEFSRywgdHVybiB0cmFjaW5nIG9uIGlmIGFuZCBvbmx5 IGlmIEFSRyBpcyBwb3NpdGl2ZS4gKi8pCisgIChMaXNwX09iamVjdCBhcmcpCit7CisgIHN0cnVj dCBidWZmZXIgKmIgPSBjdXJyZW50X2J1ZmZlcjsKKyAgYm9vbCBtY19zdGRlcnJfcCA9ICghTklM UCAoQlZBUiAoY3VycmVudF9idWZmZXIsIG1jX3N0ZGVycikpKQorICAgICAgICAgICAgICAgICAg ID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgIDogZmFsc2U7CisgIGlmIChOSUxQIChhcmcpKQor ICAgIG1jX3N0ZGVycl9wID0gIW1jX3N0ZGVycl9wOworICBlbHNlCisgICAgeworICAgICAgYXJn ID0gRnByZWZpeF9udW1lcmljX3ZhbHVlIChhcmcpOworICAgICAgbWNfc3RkZXJyX3AgPSBYRklY TlVNIChhcmcpID4gMDsKKyAgICB9CisgIGlmIChtY19zdGRlcnJfcCkKKyAgICBic2V0X2Jsdl9t Y19zdGRlcnIgKGIsIFF0KTsKKyAgICBlbHNlCisgICAgICBic2V0X2Jsdl9tY19zdGRlcnIgKGIs IFFuaWwpOworICByZXR1cm4gUW5pbDsKK30KKworLyogIChmdW5kYW1lbnRhbC1tb2RlKQorICAg IChzZXRxIGRpc3BsYXktbGluZS1udW1iZXJzIHQpCisgICAgKHNldHEgYnVmZmVyLWRpc3BsYXkt dGFibGUgKG1ha2UtZGlzcGxheS10YWJsZSkpCisgICAgKGFzZXQgYnVmZmVyLWRpc3BsYXktdGFi bGUKKyAgICAgICAgICA/XHQKKyAgICAgICAgICAodmVjdG9yIChtYWtlLWdseXBoLWNvZGUgP1x1 MDBCQiAnZm9udC1sb2NrLXdhcm5pbmctZmFjZSkKKyAgICAgICAgICAgICAgICAgIChtYWtlLWds eXBoLWNvZGUgP1x0ICdoaWdobGlnaHQpKSkKKyAgICAoYXNldCBidWZmZXItZGlzcGxheS10YWJs ZQorICAgICAgICAgID9cbgorICAgICAgICAgICh2ZWN0b3IgKG1ha2UtZ2x5cGgtY29kZSA/XHUw MEI2ICdmb250LWxvY2stY29tbWVudC1mYWNlKQorICAgICAgICAgICAgICAgICAgP1xuKSkKKyAg ICAoc2V0cSB0YWItd2lkdGggOCkKKyAgICAoc2V0cS1sb2NhbCBhdXRvLWhzY3JvbGwtbW9kZSAn Y3VycmVudC1saW5lKSAqLworCitERUZVTiAoIm1jLWRlYnVnIiwgRm1jX2RlYnVnLCBTbWNfZGVi dWcsIDAsIDAsICIiLAorICAgICAgIGRvYzogLyogVGhpcyBmdW5jdGlvbiB1c2VkIGZvciBkZWJ1 Z2dpbmcuICovKQorICAodm9pZCkKK3sKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAg ICAgICAgICAgICAgICAgIFBSRUxJTUlOQVJZIFNUVUZGCisqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRfd2lu ZG93KTsKKyAgc3RydWN0IGl0IGl0OworICB2b2lkICppdGRhdGEgPSBiaWRpX3NoZWx2ZV9jYWNo ZSAoKTsKKyAgc3RydWN0IGl0IGl0MjsKKyAgdm9pZCAqaXQyZGF0YSA9IE5VTEw7CisgIHN0cnVj dCBpdCBpdDM7CisgIHZvaWQgKml0M2RhdGEgPSBOVUxMOworICBlbnVtIG1vdmVfaXRfcmVzdWx0 IHJjID0gTU9WRV9YX1JFQUNIRUQ7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0 aW9uOworICBpbnQgY291bnQgPSAwOworICBpbnQgbmV3X3ggPSAwOworICBpbnQgcHJldmlvdXNf aXRfYyA9IDA7CisgIGludCBwcmV2aW91c19pdF9mZXRjaGJ5dGUgPSAwOworICBpbnQgcHJldmlv dXNfaXRfY3VycmVudF94ID0gMDsKKyAgaW50IHByZXZpb3VzX2l0X2NoYXJwb3MgPSAwOworICBp bnQgcHJldmlvdXNfaXRfcGl4ZWxfd2lkdGggPSAwOworICBib29sIGZpbmFsX2xvb3BfcCA9IGZh bHNlOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9B UkVBKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgIFNU QVJUIERJU1BMQVkgLS0gdy0+c3RhcnQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICAvKiBC ZWdpbiB0aGUgam91cm5leSBhdCB3LT5zdGFydC4gKi8KKyAgU0VUX1RFWFRfUE9TX0ZST01fTUFS S0VSIChzdGFydF90ZXh0X3Bvc2l0aW9uLCB3LT5zdGFydCk7CisgIHN0YXJ0X2Rpc3BsYXkgKCZp dCwgdywgc3RhcnRfdGV4dF9wb3NpdGlvbik7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAg ICAgICAgICAgICAgICBHTyBUTyBUSEUgQkVHSU5OSU5HIE9GIFRIRSBDVVJSRU5UIExJTkUuCisq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKyAgLyogUGxhY2UgdGhlIElUIG9uIHRoZSBjdXJyZW50 IGxpbmUgY29udGFpbmluZyBQVC4gKi8KKyAgaW50IHZvZmZzZXQgPSAoV0lORE9XX0hFQURFUl9M SU5FX0hFSUdIVCAodykgPiAwCisgICAgICAgICAgICAgICAgICYmIHctPm91dHB1dF9jdXJzb3Iu dnBvcyA+IDApCisgICAgICAgICAgICAgICAgICA/IHctPm91dHB1dF9jdXJzb3IudnBvcyAtIDEK KyAgICAgICAgICAgICAgICAgIDogdy0+b3V0cHV0X2N1cnNvci52cG9zOworICBpZiAodm9mZnNl dCA+IDApCisgICAgbW92ZV9pdF9ieV9saW5lcyAoJml0LCB2b2Zmc2V0KTsKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICBNT1ZFIElUOiAgSU5DUkVNRU5U ID09IDEgcGl4ZWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICBmcHJpbnRmIChzdGRlcnIs ICJcbml0LmZpcnN0X3Zpc2libGVfeCAoJWQpXG4iLCBpdC5maXJzdF92aXNpYmxlX3gpOworICB3 aGlsZSAoIWZpbmFsX2xvb3BfcCkKKyAgICB7CisgICAgICBtY19kZWJ1Z19wID0gdHJ1ZTsKKyAg ICAgIGZpbmFsX2xvb3BfcCA9IChJVF9DSEFSUE9TIChpdCkgPT0gWlYpCisgICAgICAgICAgICAg ICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgOiAoRkVUQ0hfQllURSAoSVRf QllURVBPUyAoaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC5jICE9 IDApCisgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAg OiAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgPyB0 cnVlCisgICAgICAgICAgICAgICAgICAgICA6IChyYyA9PSBNT1ZFX0xJTkVfVFJVTkNBVEVECisg ICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC5jdXJyZW50X3ggLSBpdC5maXJzdF92aXNpYmxl X3ggPiB0ZXh0X2FyZWFfd2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZQorICAg ICAgICAgICAgICAgICAgICAgOiBmYWxzZTsKKyAgICAgIGlmIChpdC5jdXJyZW50X3ggPiBwcmV2 aW91c19pdF9jdXJyZW50X3gKKyAgICAgICAgICB8fCBJVF9DSEFSUE9TIChpdCkgPiBwcmV2aW91 c19pdF9jaGFycG9zCisgICAgICAgICAgfHwgaXQuYyAhPSBwcmV2aW91c19pdF9jCisgICAgICAg ICAgfHwgaXQuYyA9PSAwCisgICAgICAgICAgfHwgaXQuYyA9PSAxMCkKKyAgICAgICAgeworICAg ICAgICAgIExpc3BfT2JqZWN0IGNoYXJhY3RlciA9IEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhu dW0gKGl0LmMpKTsKKyAgICAgICAgICBpbnQgY2hhcnBvcyA9IElUX0NIQVJQT1MgKGl0KTsKKyAg ICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmNoYXJwb3MgKCVkLyVkLyVkKSB8IGZpcnN0X3gg KCVkKSB8IHByZXZpb3VzX3ggKCVkKSB8IHggKCVkKSB8IGMgKCVzKSB8IHB3ICglZCkgfCBocG9z ICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycG9zLCBwcmV2aW91c19p dF9jaGFycG9zLCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXQuZmlyc3RfdmlzaWJsZV94LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJldmlvdXNfaXRfY3VycmVudF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQu Y3VycmVudF94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCghTklMUCAoY2hhcmFjdGVy KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpdC5jID09IDkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyAiXFx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6ICghTklMUCAoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiBpdC5jID09IDEwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIlxcbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKGNoYXJhY3RlcikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXQuYyAhPSA5CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYmIGl0LmMgIT0gMTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyBTU0RBVEEgKGNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAi PyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQucGl4ZWxfd2lkdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBpdC5ocG9zKTsKKyAgICAgICAgICBwcmV2aW91c19pdF9jID0g aXQuYzsKKyAgICAgICAgICBwcmV2aW91c19pdF9jdXJyZW50X3ggPSBpdC5jdXJyZW50X3g7Cisg ICAgICAgICAgcHJldmlvdXNfaXRfY2hhcnBvcyA9IElUX0NIQVJQT1MgKGl0KTsKKyAgICAgICAg ICBwcmV2aW91c19pdF9mZXRjaGJ5dGUgPSBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkpOwor ICAgICAgICAgIHByZXZpb3VzX2l0X3BpeGVsX3dpZHRoID0gaXQucGl4ZWxfd2lkdGg7CisgICAg ICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgfQorICAgICAgbmV3X3ggKz0gMTsKKyAgICAgIFNB VkVfSVQgKGl0MiwgaXQsIGl0MmRhdGEpOworICAgICAgcmMgPSBtb3ZlX2l0X2luX2Rpc3BsYXlf bGluZV90byAoJml0LCBaViwgbmV3X3gsIE1PVkVfVE9fUE9TIHwgTU9WRV9UT19YKTsKKyAgICAg IFNBVkVfSVQgKGl0MywgaXQsIGl0M2RhdGEpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhFIEVORAorKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisgIG1jX2RlYnVnX3AgPSBmYWxzZTsKKyAgYmlkaV91bnNoZWx2ZV9j YWNoZSAoaXRkYXRhLCBmYWxzZSk7CisgIHJldHVybiBRbmlsOworfQorCisvKiBlbmQgTVVMVElQ TEUgQ1VSU09SUyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogDAogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAJCSAgICAgIFdpbmRvdyBkaXNwbGF5IGRpbWVuc2lvbnMKQEAgLTExMjE0LDcgKzE2 MzE3LDE4IEBAIHJlc2l6ZV9lY2hvX2FyZWFfZXhhY3RseSAodm9pZCkKIAl7CiAJICB3aW5kb3dz X29yX2J1ZmZlcnNfY2hhbmdlZCA9IDQyOwogCSAgdXBkYXRlX21vZGVfbGluZXMgPSAzMDsKLQkg IHJlZGlzcGxheV9pbnRlcm5hbCAoKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAgbWNfcmVkaXNwbGF5X2ludGVybmFsID0gMTsK KyAgICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoMSk7CisgICAgICBtY19yZWRpc3BsYXlfaW50ZXJu YWwgPSAwOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJfQogICAgIH0KIH0KQEAg LTExNzAxLDcgKzE2ODE1LDE4IEBAIGVjaG9fYXJlYV9kaXNwbGF5IChib29sIHVwZGF0ZV9mcmFt ZV9wKQogCSAgICAgIHB0cmRpZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAJICAgICAg c3BlY2JpbmQgKFFyZWRpc3BsYXlfZG9udF9wYXVzZSwgUXQpOwogCSAgICAgIGZzZXRfcmVkaXNw bGF5IChmKTsKLQkgICAgICByZWRpc3BsYXlfaW50ZXJuYWwgKCk7CisKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAgICAgICBtY19yZWRp c3BsYXlfaW50ZXJuYWwgPSAyOworICAgICAgICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoMik7Cisg ICAgICAgICAgbWNfcmVkaXNwbGF5X2ludGVybmFsID0gMDsKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKKwogCSAgICAgIHVuYmluZF90byAoY291bnQsIFFuaWwpOwogCSAgICB9CiAJICBl bHNlIGlmIChGUkFNRV9XSU5ET1dfUCAoZikgJiYgbiA9PSAwKQpAQCAtMTMzODAsNiArMTg1MDUs MTkgQEAgaHNjcm9sbF93aW5kb3dfdHJlZSAoTGlzcF9PYmplY3Qgd2luZG93KQogCSAgICAgIGVs c2UKIAkJcHQgPSBjbGlwX3RvX2JvdW5kcyAoQkVHViwgbWFya2VyX3Bvc2l0aW9uICh3LT5wb2lu dG0pLCBaVik7CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJT T1JTICovCisKKyAgc3RydWN0IGRpc3BsYXlfcG9zICpwb3MgPSAmY3Vyc29yX3Jvdy0+c3RhcnQ7 CisgIHB0cmRpZmZfdCBjaGFycG9zID0gQ0hBUlBPUyAocG9zLT5wb3MpOworICBib29sIGJhcmZf Y3Jhc2ggPSAoY2hhcnBvcyA8IDAgfHwgKGNoYXJwb3MgPj0gQlVGX0JFRyAoY3VycmVudF9idWZm ZXIpICYmIGNoYXJwb3MgPD0gWlYpKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2gp CisgICAgcmV0dXJuIGhzY3JvbGxlZF9wOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAJICAgICAgLyogTW92ZSBpdGVyYXRvciB0byBwdCBzdGFydGluZyBhdCBjdXJzb3Jfcm93LT5z dGFydCBpbgogCQkgYSBsaW5lIHdpdGggaW5maW5pdGUgd2lkdGguICAqLwogCSAgICAgIGluaXRf dG9fcm93X3N0YXJ0ICgmaXQsIHcsIGN1cnNvcl9yb3cpOwpAQCAtMTM2MjAsMTIgKzE4NzU4LDI2 IEBAIHRleHRfb3V0c2lkZV9saW5lX3VuY2hhbmdlZF9wIChzdHJ1Y3Qgd2luZG93ICp3LAogICAg aXMgbm8gbG9uZ2VyIHJlcXVlc3RlZCwgd2UgY2xlYXIgdGhlIGVjaG8gYXJlYSBvciBicmluZyBi YWNrIHRoZQogICAgbWluaS1idWZmZXIgaWYgdGhhdCBpcyBpbiB1c2UuICAqLwogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCiB2b2lkCi1yZWRp c3BsYXkgKHZvaWQpCityZWRpc3BsYXkgKGludCBmcm9tX3doZXJlKQogewotICByZWRpc3BsYXlf aW50ZXJuYWwgKCk7CisjaWZkZWYgR0xZUEhfREVCVUcKKyAgaWYgKHRyYWNlX3JlZGlzcGxheV9w KQorICAgIGZwcmludGYgKHN0ZGVyciwgIlxucmVkaXNwbGF5ICglZClcbiIsIGZyb21fd2hlcmUp OworI2VuZGlmCisgIG1jX3JlZGlzcGxheSA9IGZyb21fd2hlcmU7CisgIG1jX3JlZGlzcGxheV9p bnRlcm5hbCA9IDM7CisgIHJlZGlzcGxheV9pbnRlcm5hbCAoMyk7CisgIG1jX3JlZGlzcGxheV9p bnRlcm5hbCA9IDA7CisgIG1jX3JlZGlzcGxheSA9IDA7CiB9CiAKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCiAKIHN0YXRpYyBMaXNwX09iamVjdAogb3ZlcmxheV9hcnJvd19zdHJpbmdfb3Jf cHJvcGVydHkgKExpc3BfT2JqZWN0IHZhcikKQEAgLTEzODkxLDkgKzE5MDQzLDIxIEBAIGRvIHsg aWYgKHBvbGxpbmdfc3RvcHBlZF9oZXJlKSBzdGFydF9wb2xsaW5nICgpOwlcCiAvKiBQZXJoYXBz IGluIHRoZSBmdXR1cmUgYXZvaWQgcmVjZW50ZXJpbmcgd2luZG93cyBpZiBpdAogICAgaXMgbm90 IG5lY2Vzc2FyeTsgY3VycmVudGx5IHRoYXQgY2F1c2VzIHNvbWUgcHJvYmxlbXMuICAqLwogCisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCiBzdGF0 aWMgdm9pZAotcmVkaXNwbGF5X2ludGVybmFsICh2b2lkKQorcmVkaXNwbGF5X2ludGVybmFsIChp bnQgZnJvbV93aGVyZSkKIHsKKyNpZmRlZiBHTFlQSF9ERUJVRworICBpZiAodHJhY2VfcmVkaXNw bGF5X3ApCisgICAgZnByaW50ZiAoc3RkZXJyLCAiXG5yZWRpc3BsYXlfaW50ZXJuYWwgKCVkKVxu IiwgZnJvbV93aGVyZSk7CisjZW5kaWYKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog ICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KTsKICAgc3RydWN0 IHdpbmRvdyAqc3c7CiAgIHN0cnVjdCBmcmFtZSAqZnI7CkBAIC0xNDI5NSw2ICsxOTQ1OSwyNiBA QCByZWRpc3BsYXlfaW50ZXJuYWwgKHZvaWQpCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAJ ICAgICAgdXBkYXRlX3dpbmRvd19mcmluZ2VzICh3LCBmYWxzZSk7CiAjZW5kaWYKKworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9URTog IEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGByZWRp c3BsYXlfd2luZG93Jy4KKyAgIGB3LT5tdXN0X2JlX3VwZGF0ZWRfcCcgaXMgc2V0IHRvIHRydWUg d2l0aGluIGBtYy1hY3RpdmF0ZS1jcm9zc2hhaXJzJy4KKy0gIGBvcHRpbWl6YXRpb24gMWAgKGUu Zy4sIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4gbGluZSku CistICBgb3B0aW1pemF0aW9uIDNgIChlLmcuLCBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBv biBzY3JlZW4gbGluZXMgc3Vic2VxdWVudAorICAgIHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSks IGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgYmxvY2tfaW5wdXQgKCk7CisgIG1j X3JlbW92ZV9tdWx0aXBsZV9jdXJzb3JzICh3KTsKKyAgbWNfcmVtb3ZlX2Nyb3NzaGFpcnMgKHcp OworICBtY19yZW1vdmVfZmlsbF9jb2x1bW4gKHcpOworICB1bmJsb2NrX2lucHV0ICgpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAJICAgICAgZ290byB1cGRhdGU7CiAJICAgIH0K IAkgIGVsc2UKQEAgLTE0MzE3LDYgKzE5NTAxLDIyIEBAIHJlZGlzcGxheV9pbnRlcm5hbCAodm9p ZCkKIAkJICAmJiAodyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdykpICE9IHN3KQogCQlnb3Rv IHJldHJ5OwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09S UyAqLworCisvKiBOT1RFOiAgQW4gaWRsZS10aW1lciBmdW5jdGlvbiBtYXkgbm90IG5lY2Vzc2Fy aWx5IHRyaWdnZXIgYHJlZGlzcGxheV93aW5kb3cnLgorICAgYHctPm11c3RfYmVfdXBkYXRlZF9w JyBpcyBzZXQgdG8gdHJ1ZSB3aXRoaW4gYG1jLWFjdGl2YXRlLWNyb3NzaGFpcnMnLgorLSAgYG9w dGltaXphdGlvbiAxYCAoZS5nLiwgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gdGhlIGZp cnN0IHNjcmVlbiBsaW5lKS4KKy0gIGBvcHRpbWl6YXRpb24gM2AgKGUuZy4sIGxlZnQvcmlnaHQg Y3Vyc29yIG1vdmVtZW50IG9uIHNjcmVlbiBsaW5lcyBzdWJzZXF1ZW50CisgICAgdG8gdGhlIGZp cnN0IHNjcmVlbiBsaW5lKSwgYnlwYXNzIGByZWRpc3BsYXlfd2luZG93Jy4gKi8KKworICAgIGlm ICh3LT5tdXN0X2JlX3VwZGF0ZWRfcCkKKyAgICAgIGdvdG8gdXBkYXRlOworCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiAJICAgICAgLyogV2UgdXNlZCB0byBhbHdheXMgZ290byBlbmRf b2ZfcmVkaXNwbGF5IGhlcmUsIGJ1dCB0aGlzCiAJCSBpc24ndCBlbm91Z2ggaWYgd2UgaGF2ZSBh IGJsaW5raW5nIGN1cnNvci4gICovCiAJICAgICAgaWYgKHctPmN1cnNvcl9vZmZfcCA9PSB3LT5s YXN0X2N1cnNvcl9vZmZfcCkKQEAgLTE0MzU4LDYgKzE5NTU4LDI2IEBAIHJlZGlzcGxheV9pbnRl cm5hbCAodm9pZCkKIAkJICAqdy0+ZGVzaXJlZF9tYXRyaXgtPm1ldGhvZCA9IDA7CiAJCSAgZGVi dWdfbWV0aG9kX2FkZCAodywgIm9wdGltaXphdGlvbiAzIik7CiAjZW5kaWYKKworCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTk9URTogIEFu IGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNlc3NhcmlseSB0cmlnZ2VyIGByZWRpc3Bs YXlfd2luZG93Jy4KKyAgIGB3LT5tdXN0X2JlX3VwZGF0ZWRfcCcgaXMgc2V0IHRvIHRydWUgd2l0 aGluIGBtYy1hY3RpdmF0ZS1jcm9zc2hhaXJzJy4KKy0gIGBvcHRpbWl6YXRpb24gMWAgKGUuZy4s IGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3JlZW4gbGluZSkuCist ICBgb3B0aW1pemF0aW9uIDNgIChlLmcuLCBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBvbiBz Y3JlZW4gbGluZXMgc3Vic2VxdWVudAorICAgIHRvIHRoZSBmaXJzdCBzY3JlZW4gbGluZSksIGJ5 cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgYmxvY2tfaW5wdXQgKCk7CisgIG1jX3Jl bW92ZV9tdWx0aXBsZV9jdXJzb3JzICh3KTsKKyAgbWNfcmVtb3ZlX2Nyb3NzaGFpcnMgKHcpOwor ICBtY19yZW1vdmVfZmlsbF9jb2x1bW4gKHcpOworICB1bmJsb2NrX2lucHV0ICgpOworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAJCSAgZ290byB1cGRhdGU7CiAJCX0KIAkgICAgICBl bHNlCkBAIC0xNDczOCwxNiArMTk5NTgsMzYgQEAgcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJl YSAoaW50IGZyb21fd2hlcmUpCiAgIGJsb2NrX2J1ZmZlcl9mbGlwcyAoKTsKICAgdW5ibG9ja19p bnB1dCAoKTsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNP UlMgKi8KKworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3Rl ZF93aW5kb3cpOworICB3LT5tYy5yZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVhID0gZnJvbV93 aGVyZTsKKyAgbWNfcmVkaXNwbGF5X3ByZXNlcnZlX2VjaG9fYXJlYSA9IGZyb21fd2hlcmU7CisK ICAgaWYgKCFOSUxQIChlY2hvX2FyZWFfYnVmZmVyWzFdKSkKICAgICB7CiAgICAgICAvKiBXZSBo YXZlIGEgcHJldmlvdXNseSBkaXNwbGF5ZWQgbWVzc2FnZSwgYnV0IG5vIGN1cnJlbnQKIAkgbWVz c2FnZS4gIFJlZGlzcGxheSB0aGUgcHJldmlvdXMgbWVzc2FnZS4gICovCiAgICAgICBkaXNwbGF5 X2xhc3RfZGlzcGxheWVkX21lc3NhZ2VfcCA9IHRydWU7Ci0gICAgICByZWRpc3BsYXlfaW50ZXJu YWwgKCk7CisgICAgICBtY19yZWRpc3BsYXlfaW50ZXJuYWwgPSA0OworICAgICAgcmVkaXNwbGF5 X2ludGVybmFsICg0KTsKKyAgICAgIG1jX3JlZGlzcGxheV9pbnRlcm5hbCA9IDA7CiAgICAgICBk aXNwbGF5X2xhc3RfZGlzcGxheWVkX21lc3NhZ2VfcCA9IGZhbHNlOwogICAgIH0KICAgZWxzZQot ICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoKTsKKyAgICB7CisgICAgICBtY19yZWRpc3BsYXlfaW50 ZXJuYWwgPSA1OworICAgICAgcmVkaXNwbGF5X2ludGVybmFsICg1KTsKKyAgICAgIG1jX3JlZGlz cGxheV9pbnRlcm5hbCA9IDA7CisgICAgfQorCisgIHctPm1jLnJlZGlzcGxheV9wcmVzZXJ2ZV9l Y2hvX2FyZWEgPSAwOworICBtY19yZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVhID0gMDsKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKIAogICBmbHVzaF9mcmFtZSAoU0VMRUNURURfRlJB TUUgKCkpOwogICB1bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsKQEAgLTE3MzAyLDYgKzIyNTQyLDI1 IEBAIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0IHdpbmRvdywgYm9vbCBqdXN0X3RoaXNf b25lX3ApCiAgIGRlYnVnX21ldGhvZF9hZGQgKHcsICJyZWNlbnRlciIpOwogI2VuZGlmCiAKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKy8qIE5P VEU6ICBBbiBpZGxlLXRpbWVyIGZ1bmN0aW9uIG1heSBub3QgbmVjZXNzYXJpbHkgdHJpZ2dlciBg cmVkaXNwbGF5X3dpbmRvdycuCisgICBgdy0+bXVzdF9iZV91cGRhdGVkX3AnIGlzIHNldCB0byB0 cnVlIHdpdGhpbiBgbWMtYWN0aXZhdGUtY3Jvc3NoYWlycycuCistICBgb3B0aW1pemF0aW9uIDFg IChlLmcuLCBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBvbiB0aGUgZmlyc3Qgc2NyZWVuIGxp bmUpLgorLSAgYG9wdGltaXphdGlvbiAzYCAoZS5nLiwgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1l bnQgb24gc2NyZWVuIGxpbmVzIHN1YnNlcXVlbnQKKyAgICB0byB0aGUgZmlyc3Qgc2NyZWVuIGxp bmUpLCBieXBhc3MgYHJlZGlzcGxheV93aW5kb3cnLiAqLworCisgIGJsb2NrX2lucHV0ICgpOwor ICBtY19yZW1vdmVfbXVsdGlwbGVfY3Vyc29ycyAodyk7CisgIG1jX3JlbW92ZV9jcm9zc2hhaXJz ICh3KTsKKyAgbWNfcmVtb3ZlX2ZpbGxfY29sdW1uICh3KTsKKyAgdW5ibG9ja19pbnB1dCAoKTsK KworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBGb3JnZXQgYW55IHByZXZpb3Vz bHkgcmVjb3JkZWQgYmFzZSBsaW5lIGZvciBsaW5lIG51bWJlciBkaXNwbGF5LiAgKi8KICAgaWYg KCFidWZmZXJfdW5jaGFuZ2VkX3ApCiAgICAgdy0+YmFzZV9saW5lX251bWJlciA9IDA7CkBAIC0x NzczMiw2ICsyMjk5MSwyNSBAQCByZWRpc3BsYXlfd2luZG93IChMaXNwX09iamVjdCB3aW5kb3cs IGJvb2wganVzdF90aGlzX29uZV9wKQogICBlbHNlCiAgICAgVEVNUF9TRVRfUFRfQk9USCAoQ0hB UlBPUyAob3BvaW50KSwgQllURVBPUyAob3BvaW50KSk7CiAKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKy8qIE5PVEU6ICBBbiBpZGxlLXRpbWVy IGZ1bmN0aW9uIG1heSBub3QgbmVjZXNzYXJpbHkgdHJpZ2dlciBgcmVkaXNwbGF5X3dpbmRvdycu CisgICBgdy0+bXVzdF9iZV91cGRhdGVkX3AnIGlzIHNldCB0byB0cnVlIHdpdGhpbiBgbWMtYWN0 aXZhdGUtY3Jvc3NoYWlycycuCistICBgb3B0aW1pemF0aW9uIDFgIChlLmcuLCBsZWZ0L3JpZ2h0 IGN1cnNvciBtb3ZlbWVudCBvbiB0aGUgZmlyc3Qgc2NyZWVuIGxpbmUpLgorLSAgYG9wdGltaXph dGlvbiAzYCAoZS5nLiwgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gc2NyZWVuIGxpbmVz IHN1YnNlcXVlbnQKKyAgICB0byB0aGUgZmlyc3Qgc2NyZWVuIGxpbmUpLCBieXBhc3MgYHJlZGlz cGxheV93aW5kb3cnLiAqLworCisgIGJsb2NrX2lucHV0ICgpOworICBtY19yZW1vdmVfbXVsdGlw bGVfY3Vyc29ycyAodyk7CisgIG1jX3JlbW92ZV9jcm9zc2hhaXJzICh3KTsKKyAgbWNfcmVtb3Zl X2ZpbGxfY29sdW1uICh3KTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKworLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisKKwogICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKG9sZCk7CiAgIC8qIEF2b2lk IGFuIGFib3J0IGluIFRFTVBfU0VUX1BUX0JPVEggaWYgdGhlIGJ1ZmZlciBoYXMgYmVjb21lCiAg ICAgIHNob3J0ZXIuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgbG9nIHRydW5jYXRpb24gaW4gKk1l c3NhZ2VzKi4gICovCkBAIC0yMDEyMiw2ICsyNTQwMCwxNyBAQCBhcHBlbmRfc3BhY2VfZm9yX25l d2xpbmUgKHN0cnVjdCBpdCAqaXQsIGJvb2wgZGVmYXVsdF9mYWNlX3ApCiAJICBtZW1zZXQgKCZp dC0+cG9zaXRpb24sIDAsIHNpemVvZiBpdC0+cG9zaXRpb24pOwogCSAgaXQtPm9iamVjdCA9IFFu aWw7CiAJICBpdC0+YyA9IGl0LT5jaGFyX3RvX2Rpc3BsYXkgPSAnICc7CisKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgICAgIGlmIChJVF9C WVRFUE9TICgqaXQpID49IFpWX0JZVEUpCisgICAgICAgIGl0LT56dl9wID0gdHJ1ZTsKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisKKwogCSAgaXQtPmxlbiA9IDE7CiAKIAkgIC8qIElmIHRo ZSBkZWZhdWx0IGZhY2Ugd2FzIHJlbWFwcGVkLCBiZSBzdXJlIHRvIHVzZSB0aGUKQEAgLTIxMDg1 LDYgKzI2Mzc0LDIxIEBAIGRpc3BsYXlfY291bnRfbGluZXNfdmlzdWFsbHkgKHN0cnVjdCBpdCAq aXQpCiBzdGF0aWMgdm9pZAogbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoc3RydWN0IGl0ICpp dCkKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMg Ki8KKworICBib29sIGJhcmZfY3Jhc2ggPSAoaXQtPmdseXBoX3JvdyA9PSBOVUxMCisgICAgICAg ICAgICAgICAgICAgICB8fCBpdC0+Z2x5cGhfcm93LT51c2VkW1RFWFRfQVJFQV0gPT0gMCkKKyAg ICAgICAgICAgICAgICAgICAgPyBmYWxzZQorICAgICAgICAgICAgICAgICAgICA6IHRydWU7Cisg IGlmIChiYXJmX2NyYXNoKQorICAgIHJldHVybjsKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogICBwdHJkaWZmX3QgbGFzdF9saW5lID0gaXQtPmxudW07CiAgIHB0cmRpZmZfdCBzdGFy dF9mcm9tLCBieXRlcG9zOwogICBwdHJkaWZmX3QgdGhpc19saW5lOwpAQCAtMjEyNTUsOSArMjY1 NTksMjIgQEAgbWF5YmVfcHJvZHVjZV9saW5lX251bWJlciAoc3RydWN0IGl0ICppdCkKICAgICAg IGVsc2UKIAl0ZW1faXQuYyA9IHRlbV9pdC5jaGFyX3RvX2Rpc3BsYXkgPSAqcDsKICAgICAgIHRl bV9pdC5sZW4gPSAxOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUg Q1VSU09SUyAqLworCisgICAgICBpZiAoYmV5b25kX3p2KQorICAgICAgICB0ZW1faXQuenZfcCA9 IHRydWU7CisgICAgICB0ZW1faXQuY3VycmVudF95ID0gaXQtPmN1cnJlbnRfeTsKKyAgICAgIHRl bV9pdC52cG9zID0gaXQtPnZwb3M7CiAgICAgICAvKiBNYWtlIHN1cmUgdGhlc2UgZ2x5cGhzIHdp bGwgaGF2ZSBhICJwb3NpdGlvbiIgb2YgLTEuICAqLwogICAgICAgU0VUX1RFWFRfUE9TICh0ZW1f aXQucG9zaXRpb24sIC0xLCAtMSk7CiAgICAgICBQUk9EVUNFX0dMWVBIUyAoJnRlbV9pdCk7Cisg ICAgICB0ZW1faXQuaHBvcyArPSAxOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogCiAg ICAgICAvKiBTdG9wIHByb2R1Y2luZyBnbHlwaHMsIGFuZCByZWZyYWluIGZyb20gcHJvZHVjaW5n IHRoZSBsaW5lCiAJIG51bWJlciwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3BhY2Ugb24gdGhp cyBsaW5lLiAgKi8KQEAgLTI2ODQxLDcgKzMyMTU4LDY4IEBAIGRyYXdfZ2x5cGhzIChzdHJ1Y3Qg d2luZG93ICp3LCBpbnQgeCwgc3RydWN0IGdseXBoX3JvdyAqcm93LAogCSBwcmVwZW5kZWQgbXVz dCBiZSBkcmF3biBiZWNhdXNlIHRoZSBmaXJzdCBnbHlwaCBzdHJpbmcKIAkgZHJhd3Mgb3ZlciBp dC4gICovCiAgICAgICBpID0gbGVmdF9vdmVyd3JpdHRlbiAoaGVhZCk7Ci0gICAgICBpZiAoaSA+ PSAwKQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAq LworCisgICAgICBib29sIHNraXBfcCA9IGZhbHNlOworICAgICAgaW50IGJlZyA9IGk7CisKKyAg ICAgIGlmIChpID49IDAKKyAgICAgICAgICAmJiBobCA9PSBEUkFXX0NVUlNPUgorICAgICAgICAg ICYmICh3LT5tYy5nbHlwaF9mbGF2b3IgPT0gTUNfR0xZUEgKKyAgICAgICAgICAgICAgfHwgdy0+ bWMuZ2x5cGhfZmxhdm9yID09IE1DX0dMWVBITEVTUworICAgICAgICAgICAgICB8fCB3LT5tYy5n bHlwaF9mbGF2b3IgPT0gTUNfR0xZUEhfVEFCKSkKKyAgICAgICAgd2hpbGUgKGJlZyA8IHN0YXJ0 KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSAocm93KS0+ Z2x5cGhzW2FyZWFdICsgYmVnOworICAgICAgICAgICAgc3dpdGNoIChnbHlwaC0+dHlwZSkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBDSEFSX0dMWVBIOgorICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIENPTVBPU0lURV9HTFlQSDoKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBTVFJFVENIX0dMWVBIOgorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGNoYXJhY3RlciA9IChD SEFSQUNURVJQIChtYWtlX2ZpeG51bSAoZ2x5cGgtPnUuY2gpKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA/IEZjaGFyX3RvX3N0cmluZyAobWFrZV9maXhudW0g KGdseXBoLT51LmNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IFFuaWw7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbmNoYXJhY3Rl ciAoJWQgfCAlcylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBo LT51LmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFOSUxQIChjaGFy YWN0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgtPnUu Y2ggPT0gMTA0ODU5NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g IlxcVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICghTklMUCAoY2hh cmFjdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBo LT51LmNoID09IDEwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAi XFx0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCFOSUxQIChjaGFy YWN0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2x5cGgt PnUuY2ggPT0gMTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJc XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIU5JTFAgKGNoYXJh Y3RlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnbHlwaC0+ dS5jaCA9PSAzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIlxc cyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICghTklMUCAoY2hhcmFj dGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdseXBoLT51 LmNoICE9IDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnbHlw aC0+dS5jaCAhPSAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IGdseXBoLT51LmNoICE9IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyBTU0RBVEEgKGNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6ICJcXD8iKSk7CisgICAgICAgICAgICAgICAgICBza2lwX3AgPSB0cnVlOworICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBjYXNl IElNQUdFX0dMWVBIOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYmVnICs9IDE7CisgICAgICAgICAgfQorCisgICAgICBpZiAoaSA+PSAwCisgICAg ICAgICAgJiYgIXNraXBfcCkKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCXsKIAkg IGVudW0gZHJhd19nbHlwaHNfZmFjZSBvdmVybGFwX2hsOwogCkBAIC0yNzA2OSw2ICszMjQ0Nywy NCBAQCBhcHBlbmRfZ2x5cGggKHN0cnVjdCBpdCAqaXQpCiAJICAgIGdbMV0gPSAqZzsKIAkgIGds eXBoID0gaXQtPmdseXBoX3Jvdy0+Z2x5cGhzW2FyZWFdOwogCX0KKworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAgZ2x5cGgtPnggPSBp dC0+Y3VycmVudF94OworCisgICAgICBnbHlwaC0+eSA9IGl0LT5jdXJyZW50X3k7CisKKyAgICAg IGdseXBoLT5ocG9zID0gaXQtPmhwb3M7CisKKyAgICAgIGdseXBoLT52cG9zID0gaXQtPnZwb3M7 CisKKyAgICAgIGdseXBoLT56dl9wID0gaXQtPnp2X3A7CisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworCisKICAgICAgIGdseXBoLT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsK ICAgICAgIGdseXBoLT5vYmplY3QgPSBpdC0+b2JqZWN0OwogICAgICAgaWYgKGl0LT5waXhlbF93 aWR0aCA+IDApCkBAIC0yNzE1Miw2ICszMjU0OCwyNCBAQCBhcHBlbmRfY29tcG9zaXRlX2dseXBo IChzdHJ1Y3QgaXQgKml0KQogCSAgICBnWzFdID0gKmc7CiAJICBnbHlwaCA9IGl0LT5nbHlwaF9y b3ctPmdseXBoc1tpdC0+YXJlYV07CiAJfQorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9IGl0LT5jdXJyZW50X3g7 CisKKyAgICAgIGdseXBoLT55ID0gaXQtPmN1cnJlbnRfeTsKKworICAgICAgZ2x5cGgtPmhwb3Mg PSBpdC0+aHBvczsKKworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKworICAgICAgZ2x5 cGgtPnp2X3AgPSBpdC0+enZfcDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAg ICAgZ2x5cGgtPmNoYXJwb3MgPSBpdC0+Y21wX2l0LmNoYXJwb3M7CiAgICAgICBnbHlwaC0+b2Jq ZWN0ID0gaXQtPm9iamVjdDsKICAgICAgIGVhc3NlcnQgKGl0LT5waXhlbF93aWR0aCA8PSBTSFJU X01BWCk7CkBAIC0yNzM2MCw2ICszMjc3NCwyNCBAQCBwcm9kdWNlX2ltYWdlX2dseXBoIChzdHJ1 Y3QgaXQgKml0KQogCX0KICAgICAgIGlmIChnbHlwaCA8IGl0LT5nbHlwaF9yb3ctPmdseXBoc1th cmVhICsgMV0pCiAJeworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUg Q1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9IGl0LT5jdXJyZW50X3g7CisKKyAgICAgIGds eXBoLT55ID0gaXQtPmN1cnJlbnRfeTsKKworICAgICAgZ2x5cGgtPmhwb3MgPSBpdC0+aHBvczsK KworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKworICAgICAgZ2x5cGgtPnp2X3AgPSBp dC0+enZfcDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgZ2x5cGgtPmNoYXJw b3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9iamVjdCA9IGl0LT5vYmpl Y3Q7CiAJICBnbHlwaC0+cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5kcyAoLTEsIGl0LT5waXhl bF93aWR0aCwgU0hSVF9NQVgpOwpAQCAtMjc0NjMsNiArMzI4OTUsMjQgQEAgcHJvZHVjZV94d2lk Z2V0X2dseXBoIChzdHJ1Y3QgaXQgKml0KQogCX0KICAgICAgIGlmIChnbHlwaCA8IGl0LT5nbHlw aF9yb3ctPmdseXBoc1thcmVhICsgMV0pCiAJeworCisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgICBnbHlwaC0+eCA9IGl0LT5jdXJyZW50 X3g7CisKKyAgICAgIGdseXBoLT55ID0gaXQtPmN1cnJlbnRfeTsKKworICAgICAgZ2x5cGgtPmhw b3MgPSBpdC0+aHBvczsKKworICAgICAgZ2x5cGgtPnZwb3MgPSBpdC0+dnBvczsKKworICAgICAg Z2x5cGgtPnp2X3AgPSBpdC0+enZfcDsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwog CSAgZ2x5cGgtPmNoYXJwb3MgPSBDSEFSUE9TIChpdC0+cG9zaXRpb24pOwogCSAgZ2x5cGgtPm9i amVjdCA9IGl0LT5vYmplY3Q7CiAJICBnbHlwaC0+cGl4ZWxfd2lkdGggPSBjbGlwX3RvX2JvdW5k cyAoLTEsIGl0LT5waXhlbF93aWR0aCwgU0hSVF9NQVgpOwpAQCAtMjc1NDksNiArMzI5OTksMjQg QEAgYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIExpc3BfT2JqZWN0IG9iamVj dCwKIAkgICAgd2lkdGggLT0gaXQtPmZpcnN0X3Zpc2libGVfeCAtIGl0LT5jdXJyZW50X3g7CiAJ ICBlYXNzZXJ0ICh3aWR0aCA+IDApOwogCX0KKworCisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K Ky8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworICAgICAgZ2x5cGgtPnggPSBpdC0+Y3VycmVudF94 OworCisgICAgICBnbHlwaC0+eSA9IGl0LT5jdXJyZW50X3k7CisKKyAgICAgIGdseXBoLT5ocG9z ID0gaXQtPmhwb3M7CisKKyAgICAgIGdseXBoLT52cG9zID0gaXQtPnZwb3M7CisKKyAgICAgIGds eXBoLT56dl9wID0gaXQtPnp2X3A7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAg ICAgIGdseXBoLT5jaGFycG9zID0gQ0hBUlBPUyAoaXQtPnBvc2l0aW9uKTsKICAgICAgIGdseXBo LT5vYmplY3QgPSBvYmplY3Q7CiAgICAgICAvKiBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIHRv IHVzZSBUWVBFX01BWCBoZXJlLCBidXQKQEAgLTI4MDAzLDYgKzMzNDcxLDI0IEBAIGFwcGVuZF9n bHlwaGxlc3NfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIGludCBmYWNlX2lkLCBib29sIGZvcl9ub19m b250LCBpbnQgbGVuLAogCSAgICBnWzFdID0gKmc7CiAJICBnbHlwaCA9IGl0LT5nbHlwaF9yb3ct PmdseXBoc1thcmVhXTsKIAl9CisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBNVUxU SVBMRSBDVVJTT1JTICovCisKKyAgICAgIGdseXBoLT54ID0gaXQtPmN1cnJlbnRfeDsKKworICAg ICAgZ2x5cGgtPnkgPSBpdC0+Y3VycmVudF95OworCisgICAgICBnbHlwaC0+aHBvcyA9IGl0LT5o cG9zOworCisgICAgICBnbHlwaC0+dnBvcyA9IGl0LT52cG9zOworCisgICAgICBnbHlwaC0+enZf cCA9IGl0LT56dl9wOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgICAgICBnbHlw aC0+Y2hhcnBvcyA9IENIQVJQT1MgKGl0LT5wb3NpdGlvbik7CiAgICAgICBnbHlwaC0+b2JqZWN0 ID0gaXQtPm9iamVjdDsKICAgICAgIGVhc3NlcnQgKGl0LT5waXhlbF93aWR0aCA8PSBTSFJUX01B WCk7CkBAIC0yOTc2OSw5ICszNTI1NSwzMiBAQCBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yIChzdHJ1 Y3Qgd2luZG93ICp3LCBib29sIG9uLAogICAgICAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7 CiAgICAgfQogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09S UyAqLworCisgIHctPm1jLmggPSAtMTsKKyAgdy0+bWMuZnggPSAtMTsKKyAgdy0+bWMuZnkgPSAt MTsKKyAgdy0+bWMuZ2x5cGhfZmxhdm9yID0gTk9fRkxBVk9SOworICB3LT5tYy5yZWQgPSAtMS4w OworICB3LT5tYy5ncmVlbiA9IC0xLjA7CisgIHctPm1jLmJsdWUgPSAtMS4wOworICB3LT5tYy5w b3NpbnQgPSAtMTsKKwogICBGUkFNRV9SSUYgKGYpLT5kcmF3X3dpbmRvd19jdXJzb3IgKHcsIGds eXBoX3JvdywgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdf Y3Vyc29yX3R5cGUsIG5ld19jdXJzb3Jfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb24sIGFjdGl2ZV9jdXJzb3IpOworCisgIG1jX211bHRpcGxlX2N1cnNvcnNf cG9ydGFsICh3LCBvbiwgYWN0aXZlX2N1cnNvcik7CisKKyAgbWNfY3Jvc3NoYWlyc19wb3J0YWwg KHcsIG9uLCBhY3RpdmVfY3Vyc29yKTsKKworICBtY19maWxsX2NvbHVtbl9wb3J0YWwgKHcsIG9u LCBhY3RpdmVfY3Vyc29yKTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogfQogCiAK QEAgLTMyNTI4LDYgKzM4MDM3LDI4IEBAIHhfaW50ZXJzZWN0X3JlY3RhbmdsZXMgKFhSZWN0YW5n bGUgKnIxLCBYUmVjdGFuZ2xlICpyMiwgWFJlY3RhbmdsZSAqcmVzdWx0KQogdm9pZAogc3ltc19v Zl94ZGlzcCAodm9pZCkKIHsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJ UExFIENVUlNPUlMgKi8KKworICBkZWZzdWJyICgmU21jX2R1bXBfZ2x5cGhfcm93KTsKKworICBk ZWZzdWJyICgmU21jX2R1bXBfZ2x5cGhfbWF0cml4KTsKKworICBkZWZzdWJyICgmU21jX2FjdGl2 YXRlX211bHRpcGxlX2N1cnNvcnMpOworCisgIGRlZnN1YnIgKCZTbWNfYWN0aXZhdGVfY3Jvc3No YWlycyk7CisKKyAgZGVmc3ViciAoJlNtY19zdGRlcnIpOworCisgIGRlZnN1YnIgKCZTbWNfZGVi dWcpOworCisgIGRlZnN1YnIgKCZTbWNfYWN0aXZhdGVfZmlsbF9jb2x1bW4pOworCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKworCiAgIFZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3RvciA9IFFu aWw7CiAgIHN0YXRpY3BybyAoJlZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rvcik7CiAKZGlmZiAt LWdpdCBhL3NyYy94dGVybS5jIGIvc3JjL3h0ZXJtLmMKaW5kZXggM2E3ZTMxZS4uMWU5NDkyYiAx MDA2NDQKLS0tIGEvc3JjL3h0ZXJtLmMKKysrIGIvc3JjL3h0ZXJtLmMKQEAgLTk5Miw2ICs5OTIs MTUgQEAgeF91cGRhdGVfYmVnaW4gKHN0cnVjdCBmcmFtZSAqZikKICAgaWYgKEZSQU1FX1RPT0xU SVBfUCAoZikgJiYgIUZSQU1FX1ZJU0lCTEVfUCAoZikpCiAgICAgcmV0dXJuOwogCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgIGYtPm1jX3Vw ZGF0aW5nX2ZyYW1lID0gZjsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICBpZiAo ISBGUkFNRV9DUl9TVVJGQUNFIChmKSkKICAgICB7CiAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsK QEAgLTEyNTgsNiArMTI2NywxNiBAQCB4X3VwZGF0ZV9lbmQgKHN0cnVjdCBmcmFtZSAqZikKICAg WEZsdXNoIChGUkFNRV9YX0RJU1BMQVkgKGYpKTsKICAgdW5ibG9ja19pbnB1dCAoKTsKICNlbmRp ZgorCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLwor CisgIGYtPm1jX3VwZGF0aW5nX2ZyYW1lID0gTlVMTDsKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCisKKwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHZhcmlvdXMgcGxh Y2VzIGluIHhkaXNwLmMKQEAgLTE1MzAsNiArMTU0OSwyMCBAQCBzdGF0aWMgdm9pZCB4X2NoZWNr X2ZvbnQgKHN0cnVjdCBmcmFtZSAqLCBzdHJ1Y3QgZm9udCAqKTsKIHN0YXRpYyB2b2lkCiB4X3Nl dF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiB7CisKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBNVUxUSVBMRSBDVVJTT1JTICovCisKKyAgaWYgKHMtPnctPm1jLmN1 cnNvcl9nY19kZWZhdWx0KQorICAgIHsKKyAgICAgIHMtPmdjID0gcy0+Zi0+b3V0cHV0X2RhdGEu eC0+Y3Vyc29yX2djOworICAgICAgcmV0dXJuOworICAgIH0KKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKKwogICBpZiAocy0+Zm9udCA9PSBGUkFNRV9GT05UIChzLT5mKQogICAgICAgJiYg cy0+ZmFjZS0+YmFja2dyb3VuZCA9PSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChzLT5mKQogICAg ICAgJiYgcy0+ZmFjZS0+Zm9yZWdyb3VuZCA9PSBGUkFNRV9GT1JFR1JPVU5EX1BJWEVMIChzLT5m KQpAQCAtOTI1Miw2ICs5Mjg1LDI2IEBAIHhfZHJhd19ob2xsb3dfY3Vyc29yIChzdHJ1Y3Qgd2lu ZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cpCiAKICAgLyogQ29tcHV0ZSBmcmFtZS1yZWxh dGl2ZSBjb29yZGluYXRlcyBmb3IgcGh5cyBjdXJzb3IuICAqLwogICBnZXRfcGh5c19jdXJzb3Jf Z2VvbWV0cnkgKHcsIHJvdywgY3Vyc29yX2dseXBoLCAmeCwgJnksICZoKTsKKworCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFIENVUlNPUlMgKi8KKworLyogTEVHRU5EOgor CistICB0b3AgeSA9PSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgcm93LT55KQorCistICBi b3R0b20geSA9PSBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgcm93LT55KSAtIHJvdy0+aGVp Z2h0CisKKy0gIGggb2YgSE9MTE9XX0JPWF9DVVJTT1IgPT0gcm93LT5oZWlnaHQKKyAgIFtUaGlz IGF2b2lkcyBhIHZpc2libGUgZ2FwIGFib3ZlL2JlbG93Ll0gKi8KKworICBpZiAody0+bWMuaCA+ IDApCisgICAgaCA9IHJvdy0+aGVpZ2h0OworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwor CiAgIHdkID0gdy0+cGh5c19jdXJzb3Jfd2lkdGggLSAxOwogCiAgIC8qIFRoZSBmb3JlZ3JvdW5k IG9mIGN1cnNvcl9nYyBpcyB0eXBpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbApAQCAtOTMy OCw3ICs5MzgxLDE3IEBAIHhfZHJhd19iYXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3csIGludCB3aWR0aCwgZW51bSB0ZXh0CiAJIGludmlzaWJsZS4gIFVz ZSB0aGUgZ2x5cGgncyBmb3JlZ3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcwogCSBjYXNlLCBv biB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hvc2VuIHNvCiAJ IHRoYXQgdGhlIGdseXBoIGlzIGxlZ2libGUuICAqLwotICAgICAgaWYgKGZhY2UtPmJhY2tncm91 bmQgPT0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsKQorCisKKy8qICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLworCisgICAgICBpZiAoZmFjZS0+YmFj a2dyb3VuZCA9PSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwKKyAgICAgICAgICAmJiAh dy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5KQorCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KKworCiAJeGdjdi5iYWNrZ3JvdW5kID0geGdjdi5mb3JlZ3JvdW5kID0gZmFjZS0+Zm9yZWdy b3VuZDsKICAgICAgIGVsc2UKIAl4Z2N2LmJhY2tncm91bmQgPSB4Z2N2LmZvcmVncm91bmQgPSBm LT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CkBAIC05MzU5LDYgKzk0MjIsMTcgQEAgeF9k cmF3X2Jhcl9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywg aW50IHdpZHRoLCBlbnVtIHRleHQKIAkgIGlmICgoY3Vyc29yX2dseXBoLT5yZXNvbHZlZF9sZXZl bCAmIDEpICE9IDApCiAJICAgIHggKz0gY3Vyc29yX2dseXBoLT5waXhlbF93aWR0aCAtIHdpZHRo OwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUgQ1VSU09SUyAqLwor CisgICAgLyogQWxpZ24gYWxsIGZha2UgQkFSX0NVUlNPUiBvZiB0aGUgVkVSVElDQUxfUlVMRVIg d2l0aCBgb3BvaW50X3gnLiAqLworICAgIGlmICh3LT5tYy5meCA+IDApCisgICAgICB4ID0gdy0+ bWMuZng7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIAkgIHhfZmlsbF9yZWN0YW5n bGUgKGYsIGdjLCB4LAogCQkJICBXSU5ET1dfVE9fRlJBTUVfUElYRUxfWSAodywgdy0+cGh5c19j dXJzb3IueSksCiAJCQkgIHdpZHRoLCByb3ctPmhlaWdodCk7CkBAIC05NDM1LDMxICs5NTA5LDE3 MyBAQCB4X2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBo X3JvdyAqZ2x5cGhfcm93LCBpbnQgeCwKIAl9CiAgICAgICBlbHNlCiAJewotCSAgc3dpdGNoIChj dXJzb3JfdHlwZSkKLQkgICAgewotCSAgICBjYXNlIEhPTExPV19CT1hfQ1VSU09SOgotCSAgICAg IHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOwotCSAgICAgIGJyZWFrOwogCi0J ICAgIGNhc2UgRklMTEVEX0JPWF9DVVJTT1I6Ci0JICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlw aCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7Ci0JICAgICAgYnJlYWs7CiAKLQkgICAgY2Fz ZSBCQVJfQ1VSU09SOgotCSAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1 cnNvcl93aWR0aCwgQkFSX0NVUlNPUik7Ci0JICAgICAgYnJlYWs7CisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFIENVUlNPUlMgKi8KIAotCSAgICBjYXNlIEhCQVJf Q1VSU09SOgotCSAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93 aWR0aCwgSEJBUl9DVVJTT1IpOwotCSAgICAgIGJyZWFrOworICBzdHJ1Y3QgeF9kaXNwbGF5X2lu Zm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKGYpOworICBDb2xvcm1hcCBjbWFwID0g RlJBTUVfWF9DT0xPUk1BUCAoZik7CisgIHVuc2lnbmVkIGxvbmcgb3JpZ2luYWxfY3Vyc29yX3Bp eGVsID0gZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsOworICAvKiB4dGVybS5jL3h0ZXJt LmggdXNlIEdDOyB3aGVyZWFzLCB3MzJ0ZXJtLmMvdzMydGVybS5oIHVzZSBYR0NWYWx1ZXMgKiAq LworICBHQyBvcmlnaW5hbF9jdXJzb3JfZ2MgPSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2M7 CisgIGRvdWJsZSBiYXNlID0gNjU1MzUuMDsKKyAgZG91YmxlIHRlcm1fcmVkID0gYmFzZSAqIHct Pm1jLnJlZDsKKyAgZG91YmxlIHRlcm1fZ3JlZW4gPSBiYXNlICogdy0+bWMuZ3JlZW47CisgIGRv dWJsZSB0ZXJtX2JsdWUgPSBiYXNlICogdy0+bWMuYmx1ZTsKKyAgaW50IGludF9yZWQgPSBYRklY TlVNIChGdHJ1bmNhdGUgKG1ha2VfZmxvYXQgKHRlcm1fcmVkKSwgUW5pbCkpOworICBpbnQgaW50 X2dyZWVuID0gWEZJWE5VTSAoRnRydW5jYXRlIChtYWtlX2Zsb2F0ICh0ZXJtX2dyZWVuKSwgUW5p bCkpOzsKKyAgaW50IGludF9ibHVlID0gWEZJWE5VTSAoRnRydW5jYXRlIChtYWtlX2Zsb2F0ICh0 ZXJtX2JsdWUpLCBRbmlsKSk7OworICBYQ29sb3IgY29sb3I7CisgIGNvbG9yLnJlZCA9IGludF9y ZWQ7CisgIGNvbG9yLmdyZWVuID0gaW50X2dyZWVuOworICBjb2xvci5ibHVlID0gaW50X2JsdWU7 CisgIC8qIGB4X2FsbG9jX25lYXJlc3RfY29sb3InIHNldHMgdGhlIGBjb2xvci5waXhlbGAuICov CisgIHhfYWxsb2NfbmVhcmVzdF9jb2xvciAoZiwgY21hcCwgJmNvbG9yKTsKKyAgc3dpdGNoIChj dXJzb3JfdHlwZSkKKyAgeworICAgIGNhc2UgSE9MTE9XX0JPWF9DVVJTT1I6CisgICAgeworICAg ICAgc3RydWN0IGdseXBoICpnbHlwaCA9IGdldF9waHlzX2N1cnNvcl9nbHlwaCAodyk7CisgICAg ICBpZiAoZ2x5cGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKGdseXBoLT50 eXBlICE9IElNQUdFX0dMWVBIICYmIHctPm1jLnJlZCA+PSAwICYmIHctPm1jLmJsdWUgPj0gMCAm JiB3LT5tYy5ncmVlbiA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgc3RydWN0IGZhY2UgKmRl ZmF1bHRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgREVGQVVMVF9GQUNFX0lEKTsKKyAgICAgICAg ICBMaXNwX09iamVjdCBidWYgPSB3LT5jb250ZW50czsKKyAgICAgICAgICBDSEVDS19CVUZGRVIg KGJ1Zik7CisgICAgICAgICAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisgICAg ICAgICAgYm9vbCByZWdpb25fYWN0aXZlX3AgPSAoIU5JTFAgKFZ0cmFuc2llbnRfbWFya19tb2Rl KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBt YXJrX2FjdGl2ZSkpKTsKKyAgICAgICAgICBwdHJkaWZmX3QgcmVnaW9uX2JlZ2lubmluZyA9IChy ZWdpb25fYWN0aXZlX3ApID8gWEZJWE5VTSAoRnJlZ2lvbl9iZWdpbm5pbmcgKCkpIDogLTE7Cisg ICAgICAgICAgcHRyZGlmZl90IHJlZ2lvbl9lbmQgPSAocmVnaW9uX2FjdGl2ZV9wKSA/IFhGSVhO VU0gKEZyZWdpb25fZW5kICgpKSA6IC0xOworICAgICAgICAgIGJvb2wgcmVnaW9uX2luX2JvdW5k c19wID0gKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICYmIHctPm1jLnBvc2ludCA+PSByZWdpb25fYmVnaW5uaW5nCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgdy0+bWMucG9zaW50IDwgcmVnaW9uX2VuZCk7CisgICAg ICAgICAgLyogVGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2Mn IGJ5IGJvcnJvd2luZyB0aGUKKyAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGB4X21ha2VfZ2Mn IGluIHhmbnMuYy4gICovCisgICAgICAgICAgaWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAg ICAgICAmJiByZWdpb25faW5fYm91bmRzX3AKKyAgICAgICAgICAgICAgJiYgYWN0aXZlX3ApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVudW0gZmFjZV9pZCBob2xsb3dfYWN0aXZlX3Jl Z2lvbl9mYWNlX2lkID0gbG9va3VwX25hbWVkX2ZhY2UgKHcsIGYsIGludGVybiAoIistcmVhbC1m YWtlLWN1cnNvci1yZWdpb24tZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgc3RydWN0IGZh Y2UgKmhvbGxvd19hY3RpdmVfcmVnaW9uX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19h Y3RpdmVfcmVnaW9uX2ZhY2VfaWQpOworICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJB TUVfWF9ESVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBkZWZhdWx0X2Zh Y2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCAoRlJBTUVfWF9E SVNQTEFZIChmKSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBob2xsb3dfYWN0aXZlX3Jl Z2lvbl9mYWNlLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug aWYgKHJlZ2lvbl9hY3RpdmVfcAorICAgICAgICAgICAgICAgICAgICAgJiYgIXJlZ2lvbl9pbl9i b3VuZHNfcAorICAgICAgICAgICAgICAgICAgICAgJiYgYWN0aXZlX3ApCisgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBlbnVtIGZhY2VfaWQgaG9sbG93X2FjdGl2ZV9yZWdpb25fb3V0 X2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAodywgZiwgaW50ZXJuICgiKy1yZWFsLWZha2Ut Y3Vyc29yLXJlZ2lvbi1mYWNlIiksIHRydWUpOworICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNl ICpob2xsb3dfYWN0aXZlX3JlZ2lvbl9vdXRfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgaG9sbG93 X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2VfaWQpOworICAgICAgICAgICAgICAgIFhTZXRGb3JlZ3Jv dW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MsIGRl ZmF1bHRfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQg KEZSQU1FX1hfRElTUExBWSAoZiksIGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93 X2FjdGl2ZV9yZWdpb25fb3V0X2ZhY2UtPmZvcmVncm91bmQpOworICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIGVsc2UgaWYgKCFyZWdpb25fYWN0aXZlX3AgJiYgYWN0aXZlX3ApCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZW51bSBmYWNlX2lkIGhvbGxvd19hY3Rp dmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBmLCBpbnRlcm4gKCIrLXJlYWwtZmFr ZS1jdXJzb3ItZmFjZSIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYWNlICpo b2xsb3dfYWN0aXZlX2ZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGhvbGxvd19hY3RpdmVfZmFjZV9p ZCk7CisgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCAoRlJBTUVfWF9ESVNQTEFZIChm KSwgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djLCBkZWZhdWx0X2ZhY2UtPmZvcmVncm91bmQp OworICAgICAgICAgICAgICAgICAgWFNldEJhY2tncm91bmQgKEZSQU1FX1hfRElTUExBWSAoZiks IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYywgaG9sbG93X2FjdGl2ZV9mYWNlLT5iYWNrZ3Jv dW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogVGhlIHJlZ2lvbiBp cyBfbm90XyB2aXNpYmxlIGluIHRoZSBpbmFjdGl2ZSB3aW5kb3cgYmVjYXVzZSB0aGUgb3Zlcmxh eSB3aW5kb3cgcHJvcGVydHkgaXMgdXNlZC4gKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgh YWN0aXZlX3ApCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVudW0g ZmFjZV9pZCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlICh3LCBm LCBpbnRlcm4gKCIrLXJlYWwtZmFrZS1jdXJzb3ItaW5hY3RpdmUtZmFjZSIpLCB0cnVlKTsKKyAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGZhY2UgKmhvbGxvd19pbmFjdGl2ZV9mYWNlID0gRkFD RV9GUk9NX0lEIChmLCBob2xsb3dfaW5hY3RpdmVfZmFjZV9pZCk7CisgICAgICAgICAgICAgICAg ICAgIFhTZXRGb3JlZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54 LT5jdXJzb3JfZ2MsIGRlZmF1bHRfZmFjZS0+Zm9yZWdyb3VuZCk7CisgICAgICAgICAgICAgICAg ICAgIFhTZXRCYWNrZ3JvdW5kIChGUkFNRV9YX0RJU1BMQVkgKGYpLCBmLT5vdXRwdXRfZGF0YS54 LT5jdXJzb3JfZ2MsIGhvbGxvd19pbmFjdGl2ZV9mYWNlLT5iYWNrZ3JvdW5kKTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICBibG9ja19pbnB1dCAoKTsKKyAgICAgICAgICAvKiBGb3Jj ZSBgeF9zZXRfY3Vyc29yX2djJyB0byB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9n YycuICAqLworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19kZWZhdWx0ID0gdHJ1ZTsKKyAgICAg ICAgICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3csIERSQVdfQ1VSU09SKTsK KyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IGZhbHNlOworICAgICAgICAgIGYt Pm91dHB1dF9kYXRhLngtPmN1cnNvcl9nYyA9IG9yaWdpbmFsX2N1cnNvcl9nYzsKKyAgICAgICAg ICB1bmJsb2NrX2lucHV0ICgpOworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAgZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgeF9kcmF3X2hvbGxv d19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vy c29yX3BpeGVsID0gb3JpZ2luYWxfY3Vyc29yX3BpeGVsOworICAgICAgICB9CisgICAgICAgIGVs c2UgaWYgKGdseXBoLT50eXBlID09IElNQUdFX0dMWVBIICYmIHctPm1jLnJlZCA+PSAwICYmIHct Pm1jLmJsdWUgPj0gMCAmJiB3LT5tYy5ncmVlbiA+PSAwKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVs Jy4gICovCisgICAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBjb2xv ci5waXhlbDsKKyAgICAgICAgICAgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cp OworICAgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gb3JpZ2luYWxf Y3Vyc29yX3BpeGVsOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB4 X2RyYXdfaG9sbG93X2N1cnNvciAodywgZ2x5cGhfcm93KTsKKyAgICAgIGJyZWFrOworICAgIH0K KyAgICBjYXNlIEZJTExFRF9CT1hfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmICh3LT5tYy5yZWQg Pj0gMCAmJiB3LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgLyog VGVtcG9yYXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MnIGJ5IGJvcnJv d2luZyB0aGUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiBgeF9tYWtlX2djJyBpbiB4Zm5zLmMu ICAqLworICAgICAgICB7CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAgWEdD VmFsdWVzIGdjX3ZhbHVlczsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSBHQ0ZvcmVn cm91bmQgfCBHQ0JhY2tncm91bmQgfCBHQ0ZpbGxTdHlsZSB8IEdDTGluZVdpZHRoOworICAgICAg ICAgIGdjX3ZhbHVlcy5saW5lX3dpZHRoID0gMDsgIC8qIE1lYW5zIDEgdXNpbmcgZmFzdCBhbGdv cml0aG0uICAqLworICAgICAgICAgIGdjX3ZhbHVlcy5mb3JlZ3JvdW5kID0gRlJBTUVfQkFDS0dS T1VORF9QSVhFTCAoZik7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tncm91bmQgPSB4X21ha2Vf dHJ1ZWNvbG9yX3BpeGVsIChkcHlpbmZvLCBpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9ibHVlKTsK KyAgICAgICAgICBnY192YWx1ZXMuZmlsbF9zdHlsZSA9IEZpbGxPcGFxdWVTdGlwcGxlZDsKKyAg ICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MgPSBYQ3JlYXRlR0MgKEZSQU1FX1hf RElTUExBWSAoZiksIEZSQU1FX1hfV0lORE9XIChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAg ICAgICAgLyogRm9yY2UgYHhfc2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0 YS54LT5jdXJzb3JfZ2MnLiAgKi8KKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9 IHRydWU7CisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBE UkFXX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSBmYWxzZTsK KyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MgPSBvcmlnaW5hbF9jdXJzb3Jf Z2M7CisgICAgICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl CisgICAgICAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NV UlNPUik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBCQVJfQ1VSU09SOgorICAgIHsK KyAgICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3LT5tYy5ibHVlID49IDAgJiYgdy0+bWMuZ3Jl ZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+ b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAgICAgICAgZi0+b3V0cHV0X2Rh dGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7CisgICAgICAgICAgdy0+bWMuY3Vyc29y X2djX2ludmlzaWJsZV9va2F5ID0gdHJ1ZTsKKyAgICAgICAgICB4X2RyYXdfYmFyX2N1cnNvciAo dywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOworICAgICAgICAgIHctPm1j LmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IGZhbHNlOworICAgICAgICAgIGYtPm91dHB1dF9k YXRhLngtPmN1cnNvcl9waXhlbCA9IG9yaWdpbmFsX2N1cnNvcl9waXhlbDsKKyAgICAgICAgfQor ICAgICAgICBlbHNlCisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3Jvdywg Y3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl IEhCQVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmICh3LT5tYy5yZWQgPj0gMCAmJiB3LT5tYy5i bHVlID49IDAgJiYgdy0+bWMuZ3JlZW4gPj0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIFRl bXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsJy4gICovCisg ICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsID0gY29sb3IucGl4ZWw7Cisg ICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5ID0gdHJ1ZTsKKyAgICAgICAg ICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VS U09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSBmYWxzZTsK KyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnaW5hbF9jdXJz b3JfcGl4ZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJf Y3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAg YnJlYWs7CisgICAgfQorICAgIGNhc2UgTk9fQ1VSU09SOgorICAgICAgdy0+cGh5c19jdXJzb3Jf d2lkdGggPSAwOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0 ICgpOworICB9CisKKy8qIGVuZCBNVUxUSVBMRSBDVVJTT1JTICovCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KIAotCSAgICBjYXNlIE5PX0NVUlNPUjoKLQkgICAgICB3LT5waHlzX2N1cnNvcl93 aWR0aCA9IDA7Ci0JICAgICAgYnJlYWs7CiAKLQkgICAgZGVmYXVsdDoKLQkgICAgICBlbWFjc19h Ym9ydCAoKTsKLQkgICAgfQogCX0KIAogI2lmZGVmIEhBVkVfWF9JMThOCkBAIC0xMDY0NCw3ICsx MDg2MCw3IEBAIGdldF9jdXJyZW50X3dtX3N0YXRlIChzdHJ1Y3QgZnJhbWUgKmYsCiAgIGludCBy YywgYWN0dWFsX2Zvcm1hdDsKICAgQXRvbSBhY3R1YWxfdHlwZTsKICAgdW5zaWduZWQgY2hhciAq dG1wX2RhdGEgPSBOVUxMOwotICBBdG9tICpyZXBseV9kYXRhIFVOSU5JVDsKKyAgQXRvbSAqcmVw bHlfZGF0YTsKICNlbmRpZgogCiAgICpzdGlja3kgPSBmYWxzZTsK --Multipart_Sun_Nov_25_18:14:18_2018-1--