<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>16482</bug_id>
          
          <creation_ts>2007-12-17 14:34:48 -0800</creation_ts>
          <short_desc>Hook up ICU&apos;s encoding detector and add a boolean param to Settings and WebPreferences</short_desc>
          <delta_ts>2013-12-02 08:32:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>20534</dependson>
          <blocked>21990</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jungshik Shin">jshin</reporter>
          <assigned_to name="Jungshik Shin">jshin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emacemac7</cc>
    
    <cc>hsivonen</cc>
    
    <cc>mal</cc>
    
    <cc>mike</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64571</commentid>
    <comment_count>0</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2007-12-17 14:34:48 -0800</bug_when>
    <thetext>ICU has an character encoding detector. It&apos;s not very well tuned. However, it&apos;s decent enough to &apos;resolve&apos;  bugs like bug 14683 and bug 14500 (in the sense that they&apos;d not be visible to end-users any more).

I have a patch that  :

  1. Hooks up FrameLoader with ICU encoding detector 
  2. Adds a field to Settings (to control whether the detector is used or not)

I&apos;ll upload it so that others can take a look. 

In addition, WebPreference needs to have the corresponding entry and it needs to have a UI so that the end user controls it as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64895</commentid>
    <comment_count>1</comment_count>
      <attachid>18020</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2007-12-20 16:58:24 -0800</bug_when>
    <thetext>Created attachment 18020
incompete patch (fails in linking)

This patch does not work because 1) the version of ICU on Mac OS 10.3.x does not contain the character encoding detector. 2) I don&apos;t know Objective-C and my change to those files may be wrong. 

I added ucsdet.h header to icu header directory hoping that ICU on Mac OS 10.3.x is recent enough (3.6 or later??) to have encoding detectors, but at the link time, it fails. (I could have found that searching for ucsdet in icucore.dylib before trying). 

Anyway, I&apos;m uploading the patch in the hope that it can be used on other platforms (with some conditional compilations added) and perhaps on Mac OS 10.4.x with a newer version of ICU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64916</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-20 21:24:01 -0800</bug_when>
    <thetext>Mac OS X 10.4 has ICU 3.2; 10.5 and Windows have ICU 3.6. On Linux distributions, the versions obviously vary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64957</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-12-21 09:06:14 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; This patch does not work because 1) the version of ICU on Mac OS 10.3.x does
&gt; not contain the character encoding detector. 2) I don&apos;t know Objective-C and my
&gt; change to those files may be wrong. 

Are you actually compiling WebKit on Mac OS X 10.3 Panther!?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65090</commentid>
    <comment_count>4</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2007-12-22 16:17:55 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; This patch does not work because 1) the version of ICU on Mac OS 10.3.x does
&gt; &gt; not contain the character encoding detector. 2) I don&apos;t know Objective-C and my
&gt; &gt; change to those files may be wrong. 
&gt; 
&gt; Are you actually compiling WebKit on Mac OS X 10.3 Panther!?

Sorry my version number was off by one. I meant 10.4.x (tiger).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66704</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-09 18:07:17 -0800</bug_when>
    <thetext>http://ads.people.com.cn/html.ng/channel_range=1/&amp;channel_id=1&amp;PagePos=24&amp;size=txt&amp;site=people
is an example of page which is rendered incorrectly due to lack of charset detection.

This is an ad from http://people.com.cn/  They are displayed in iframes in the upper right hand corner of the page.

Loading the ad frame by itself renders incorrectly in:
Safari
FireFox (with charset decoding off)
IE7

Loading the ad frame as part of people.com.cn renders correctly in:
IE7
Opera

The site is only sending text/html, no charset information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66706</commentid>
    <comment_count>6</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2008-01-09 18:34:34 -0800</bug_when>
    <thetext>In case somebody is wondering why the example given works for Chinese (and there are many sites like that in China, Korea ).   Chinese and Koreans set their browser default encodings to the most widely used legacy encoding (GB2312/GBK, EUC-KR/CP949) and without charset specified, those pages just get rendered fine. 

However, with the default encoding set to one (ISO-8859-1) different from what&apos;s assumed by the site author, pages (iframes) without charset specified get garbled.  


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66725</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-09 21:34:17 -0800</bug_when>
    <thetext>(In reply to comment #5)
I should note that the testing I did was with browsers on an two US-english configured laptops.  One Mac OS X 10.4.11 and one Windows XP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87681</commentid>
    <comment_count>8</comment_count>
      <attachid>22616</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-02 02:47:53 -0700</bug_when>
    <thetext>Created attachment 22616
Updated copy of Jungshik&apos;s patch which compiles on ToT

 WebCore/icu/unicode/ucsdet.h                  |  350 +++++++++++++++++++++++++
 WebCore/loader/FrameLoader.cpp                |    5 +-
 WebCore/loader/TextResourceDecoder.cpp        |   31 ++-
 WebCore/loader/TextResourceDecoder.h          |    8 +-
 WebCore/page/Settings.cpp                     |    6 +
 WebCore/page/Settings.h                       |    4 +
 WebKit/mac/WebView/WebPreferenceKeysPrivate.h |    1 +
 WebKit/mac/WebView/WebPreferences.mm          |    1 +
 WebKit/mac/WebView/WebPreferencesPrivate.h    |    3 +
 WebKit/mac/WebView/WebView.mm                 |    1 +
 10 files changed, 405 insertions(+), 5 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87682</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-02 02:50:18 -0700</bug_when>
    <thetext>What&apos;s left to do here?

1.  Jungshik needs to provide some test cases which show this type of detection in action.
2.  Someone needs to abstract the ICU bits into an ICU-specific file.  I looked at making a TextResourceDecoderICU, but that&apos;s a loader file and not in WebCore/platform (where all the suffixed files should go).  So maybe we need to make a TextEncodingDetector.h and TextEncodingDetectorICU.cpp under platform/ and stick this one function in there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87683</commentid>
    <comment_count>10</comment_count>
      <attachid>22617</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-02 03:39:37 -0700</bug_when>
    <thetext>Created attachment 22617
Updated copy of Jungshik&apos;s patch which compiles and links on ToT

 WebCore/WebCore.base.exp                      |    3 +-
 WebCore/icu/unicode/ucsdet.h                  |  350 +++++++++++++++++++++++++
 WebCore/loader/FrameLoader.cpp                |    5 +-
 WebCore/loader/TextResourceDecoder.cpp        |   31 ++-
 WebCore/loader/TextResourceDecoder.h          |    8 +-
 WebCore/page/Settings.cpp                     |    6 +
 WebCore/page/Settings.h                       |    4 +
 WebKit/mac/WebView/WebPreferenceKeysPrivate.h |    1 +
 WebKit/mac/WebView/WebPreferences.mm          |   11 +
 WebKit/mac/WebView/WebPreferencesPrivate.h    |    3 +
 WebKit/mac/WebView/WebView.mm                 |    1 +
 11 files changed, 417 insertions(+), 6 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89743</commentid>
    <comment_count>11</comment_count>
      <attachid>23070</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2008-08-29 11:08:19 -0700</bug_when>
    <thetext>Created attachment 23070
patch with some heuristics  added to  Eric&apos;s previous patch 

Eric, thank you for updating my patch. 

I added some heuristics to guard against the mis-detection when a rather short chunk is thrown at the ICU detector.

As for making a test, is it possible to control  the webpreference (usesEncodingDetector, which is off by default) for the layout test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89754</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-29 12:23:37 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=23070) [edit]
&gt; As for making a test, is it possible to control  the webpreference
&gt; (usesEncodingDetector, which is off by default) for the layout test?  

Not yet... but Glenn Wilson has posted a patch to add support for such:
https://bugs.webkit.org/show_bug.cgi?id=20534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106364</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-20 12:17:01 -0800</bug_when>
    <thetext>So gwilson has posted a patch for review for toggling preferences in DRT.  I&apos;m supposed to review it, but he and I talked about a revised approach and I was sorta waiting for that, but I really should just r+/r- his current patch.  Will go do that after lunch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108183</commentid>
    <comment_count>14</comment_count>
      <attachid>23070</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-03 15:17:40 -0800</bug_when>
    <thetext>Comment on attachment 23070
patch with some heuristics  added to  Eric&apos;s previous patch 

This patch looks good in general, however we need to split this ICU-specific logic out into its own file, or we&apos;ll break non-ICU ports.  I would suggest creating new files in platform/text named EncodingDectector.h EncodingDectectorNone.cpp EncodingDetectorICU.cpp and adding your logic in the appropriate places, and providing an empty stub in the None case.  qt/gtk builds can use the None, and Mac/Win/Chromium can use the ICU version.  You can also of course call the files whatever would be most correct, I&apos;m not sure if &quot;TextEncodingDetector&quot; makes more sense or not.

Otherwise the patch looks great.  There are a few style issues like foo_bar should be fooBar for variable names.

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109189</commentid>
    <comment_count>15</comment_count>
      <attachid>27539</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-10 14:20:14 -0800</bug_when>
    <thetext>Created attachment 27539
patch with Eric&apos;s comments addressed

I addressed Eric&apos;s comment and made sure that it builds on Mac(Leopard) and Windows. TextEncodingDetection.h was added to platform/text with one actual implementation based on ICU (TextEncodingDetectionICU.cpp) and a stub implementation (TextEncodingDetectionNone.cpp). 

To build on Mac OS X, I manually edited WebCore.base.exp to export two symbols (TextResourceDecoder ctor with a new signature and Settings::setUseEncodingDetector). Is it the right way? 


Besides, there&apos;s still an issue with Mac OS 10.4. It has ICU 3.2.x so that ICU&apos;s encoding detector (added to ICU in 3.6) is not available. So, on Mac OS 10.4, link will fail not being able to find ucsdet. 

I wonder what macro is available to distinguish between different Mac OS versions.[1] When building on Tiger for deployment on Tiger, a stub implementation of detectTextEncoding() should be used in place of the current implementation in platform/text/TextEncodingDetectionICU.cpp (ucsdet.h should not be included). 

[1] Using U_ICU_VERSION_{MAJOR,MINOR}_NUM in uversion.h macros does not work because on Mac OS X, we build with ICU headers in WebKit tree (which has two macros set to 3 and 2, respectively)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109268</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-11 01:42:20 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; To build on Mac OS X, I manually edited WebCore.base.exp to export two symbols
&gt; (TextResourceDecoder ctor with a new signature and
&gt; Settings::setUseEncodingDetector). Is it the right way? 

Yes, that&apos;s correct. We keep this file sorted though.

&gt; I wonder what macro is available to distinguish between different Mac OS
&gt; versions.[1]

#ifdef BUILDING_ON_TIGER

There are multiple coding style violations in this patch, which I&apos;m not calling out, since it wasn&apos;t put for review.

The addition of encoding auto-detection has serious security implications, so I&apos;m CC&apos;in some security folks. In particular, using parent frame&apos;s encoding as a &quot;hint&quot; for subframes looks wrong - there&apos;s a reason for a canAccess() call just below the code you added for setting the hint.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109318</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-02-11 09:59:04 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; The addition of encoding auto-detection has serious security implications, so
&gt; I&apos;m CC&apos;in some security folks. In particular, using parent frame&apos;s encoding as
&gt; a &quot;hint&quot; for subframes looks wrong - there&apos;s a reason for a canAccess() call
&gt; just below the code you added for setting the hint.

Yes.  Do we have a complete understanding of Firefox&apos;s behavior for auto-detecting encodings?  IE&apos;s behavior has led to lots of XSS vulnerabilities in sites.

Is encoding auto-detection specified in HTML 5?  If not, I&apos;d recommend matching Firefox&apos;s behavior precisely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109329</commentid>
    <comment_count>18</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-11 11:01:47 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; The addition of encoding auto-detection has serious security implications, so
&gt; &gt; I&apos;m CC&apos;in some security folks. In particular, using parent frame&apos;s encoding as
&gt; &gt; a &quot;hint&quot; for subframes looks wrong - there&apos;s a reason for a canAccess() call
&gt; &gt; just below the code you added for setting the hint.

Thank you for the comment. I&apos;ll look into that. 
 
&gt; Yes.  Do we have a complete understanding of Firefox&apos;s behavior for
&gt; auto-detecting encodings?  IE&apos;s behavior has led to lots of XSS vulnerabilities
&gt; in sites.

If I understand/remember correctly, those vulnerabilities are due to that IE auto-detects ISO-2022-XX (JP, KR) and UTF-7 (7bit encodings). 

The current implementation does not (Firefox does not auto-detect UTF-7, but I forgot whether it auto-detects ISO-2022-JP or not. I think it does). Perhaps, I should make it explicit. 

Another problem with IE (IIUC) is that autodetection kicks in without an explicit user request, in some cases.
 
&gt; Is encoding auto-detection specified in HTML 5?  If not, I&apos;d recommend matching
&gt; Firefox&apos;s behavior precisely.

 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109334</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-02-11 11:14:23 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; If I understand/remember correctly, those vulnerabilities are due to that IE
&gt; auto-detects ISO-2022-XX (JP, KR) and UTF-7 (7bit encodings). 

I&apos;m not nearly as much of an encoding expert as you, but that matches my understanding.

&gt; The current implementation does not (Firefox does not auto-detect UTF-7, but I
&gt; forgot whether it auto-detects ISO-2022-JP or not. I think it does). Perhaps, I
&gt; should make it explicit. 

Please do make this explicit.  We should also test for this explicitly in a security LayoutTest.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109335</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-11 11:34:33 -0800</bug_when>
    <thetext>&gt; If I understand/remember correctly, those vulnerabilities are due to that IE
&gt; auto-detects ISO-2022-XX (JP, KR) and UTF-7 (7bit encodings).

Are HZ family encodings in the same category that we should explicitly forbid?

I think that besides forbidding encodings that affect ASCII range, we should make the model sufficiently simple to remember and explain, so that we could reasonably deal with compatibility issues and future security attack vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109384</commentid>
    <comment_count>21</comment_count>
      <attachid>27576</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-11 16:02:02 -0800</bug_when>
    <thetext>Created attachment 27576
updated patch 

I updated comments to shouldAutoDetect to make it clear when auto-detection is triggered. Here&apos;s recap:

// We use the encoding detector in two cases:
//   1. Encoding detector is turned ON and no other encoding source is
//      available (that is, it&apos;s DefaultEncoding).
//   2. Encoding detector is turned ON and the encoding is set to
//      the encoding of the parent frame, which is also auto-detected.
//   Note that condition #2 is NOT satisfied unless parent-child frame
//   relationship is compliant to the same-origin policy. If they&apos;re from
//   different domains, |m_source| would not be set to EncodingFromParentFrame
//   in the first place. 

I believe the above and *not* auto-detecting UTF-7 (and ISO-2022-XX) make this rather safe. 

In addition to the above change, I tried to take care of style nits as far as I could find.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110000</commentid>
    <comment_count>22</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-17 13:30:35 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; If I understand/remember correctly, those vulnerabilities are due to that IE
&gt; &gt; auto-detects ISO-2022-XX (JP, KR) and UTF-7 (7bit encodings).
&gt; 
&gt; Are HZ family encodings in the same category that we should explicitly forbid?

Ooops. I missed your question before posting the updated the patch. Yes, it is and the current implementation (ICU&apos;s encoding detector) does not auto-detect HZ, either. For other implementations, shall I add a promiment comment to that effect (do not auto-detect UTF-7, ISO-2022-xx and HZ)? 

&gt; I think that besides forbidding encodings that affect ASCII range, we should
&gt; make the model sufficiently simple to remember and explain, so that we could
&gt; reasonably deal with compatibility issues and future security attack vectors.

Did my additional comment make it clear enough or do you want some more clarification/simplification(?)? 


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110622</commentid>
    <comment_count>23</comment_count>
      <attachid>27576</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-02-23 12:50:28 -0800</bug_when>
    <thetext>Comment on attachment 27576
updated patch 

Additional piece of information: IE suffers (more) from XSS using UTF-7 because it&apos;s UTF-7 decoder did not validate the input (or couldn&apos;t cope with invalid sequence in a safe manner). 

Anyway, can somebody take a look at the patch? Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111434</commentid>
    <comment_count>24</comment_count>
      <attachid>27576</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-27 05:43:47 -0800</bug_when>
    <thetext>Comment on attachment 27576
updated patch 

+         - add TextEncodingDetection* to platform/text.

This class should be named TextEncodingDetector, not TextEncodingDetection.

+           Tiger comes with ICU 3.2 with encoding detector.

&quot;which doesn&apos;t support encoding detection&quot;

+        * WebCore.vcproj/WebCore.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:

Having per-file and per-function comments makes it easier for reviewers and others who will read a patch to understand it. This is particularly important for interesting patches like this one.

Please also edit makefiles for other build systems (GNUmakefile.am, WebCore.pro, WebCore.scons, WebCoreSources.bkl).

+    , m_hintDecoder(NULL)

We use 0, not NULL in C++ code. There are several uses of NULL in the patch, please fix them all.

+    return m_usesEncodingDetector
+        &amp;&amp; (m_source == DefaultEncoding
+        || (m_source == EncodingFromParentFrame &amp;&amp; m_hintDecoder
+        &amp;&amp; m_hintDecoder-&gt;source() == AutoDetectedEncoding)); 

This code is very difficult to read due to indenting. There is no need to make lines that short, and I think that this condition can be made much easier to read if you don&apos;t wrap it at 72 characters).

     // Do the auto-detect if our default encoding is one of the Japanese ones.
     // FIXME: It seems wrong to change our encoding downstream after we have already done some decoding.
-    if (m_source != UserChosenEncoding &amp;&amp; m_source != AutoDetectedEncoding &amp;&amp; encoding().isJapanese())
+    if (m_source != UserChosenEncoding &amp;&amp; m_source != AutoDetectedEncoding &amp;&amp; encoding().isJapanese()) {
         detectJapaneseEncoding(data, len);
+    } else if (shouldAutoDetect()) {
+       TextEncoding detectedEncoding;
+       if (detectTextEncoding(data, len, hintEncodingName(), &amp;detectedEncoding))
+           setEncoding(detectedEncoding, AutoDetectedEncoding);
+   }

Our coding style says that there should be no braces around single-line blocks. The comment before this code no longer matches what it does (it is no longer only about Japanese).

Indenting on the last line here is incorrect.

I think that we should resolve this FIXME before making encoding detection more common. It should be a separate bug blocking this one.

 String TextResourceDecoder::flush()
 {
+   // For HTML and XML document, if we can not find proper encoding even
+   // document is completely loaded, we need to use automatically detect
+   // the encoding of document if other conditions for autodetection is
+   // satisfied.

This comment should explain why HTML and XML are special. What about CSS, for example?

+    void setHintDecoder(const TextResourceDecoder* hintDecoder) {
+        m_hintDecoder = hintDecoder;
+    }

The opening brace should go on the next line.

+    EncodingSource source() const { return m_source; }

I don&apos;t see where this new public method us used outside TextResourceDecoder. Let&apos;s not add it if it is not needed.

+    const char* hintEncodingName() const {
+        return m_hintDecoder ? m_hintDecoder-&gt;encoding().name() : NULL;
+    }

Same comments about opening brace and NULL.

+    const TextResourceDecoder* m_hintDecoder;
+    //RefPtr&lt;TextResourceDecoder&gt; m_hintDecoder;

We don&apos;t commit commented out code. How are you going to manage hint decoder lifetime?

+bool detectTextEncoding(const char* data, size_t len,
+                        const char* hintEncodingName,
+                        TextEncoding* detectedEncoding)
+{
+    *detectedEncoding = TextEncoding();
+#ifdef BUILDING_ON_TIGER
+    // Tiger came with ICU 3.2 and does not have the encoding detector.
+    return false;
+#else

This will cause unused argument warnings when built on Tiger, please add UNUSED_PARAM macros for unused arguments.

Index: WebCore/platform/text/TextEncodingDetectionNone.cpp
===================================================================
--- WebCore/platform/text/TextEncodingDetectionNone.cpp	(revision 0)
+++ WebCore/platform/text/TextEncodingDetectionNone.cpp	(revision 0)
@@ -0,0 +1,11 @@
+namespace WebCore {
+
+bool detectTextEncoding(const char* data, size_t len,
+                        const char* hintEncodingName,
+                        TextEncoding* detectedEncoding)
+{
+    *detectedEncoding = TextEncoding();
+    return false;
+}
+
+}

This file needs copyright comments and includes. Same issue with unused arguments.

         Settings* settings = m_frame-&gt;settings();
-        m_decoder = TextResourceDecoder::create(m_responseMIMEType, settings ? settings-&gt;defaultTextEncodingName() : String());
+        if (settings) {

You can write this in one line as 
         if (Setting* settings = m_frame-&gt;settings()) {

+            if (parentFrame &amp;&amp; parentFrame-&gt;document())
+                m_decoder-&gt;setHintDecoder(parentFrame-&gt;document()-&gt;decoder());

A different origin parent frame shouldn&apos;t affect child frame decoding for security reasons, even through a hint. So, I&apos;m not sure why the hint is needed at all. Am I perhaps missing something?

+	} else {
+            m_decoder = TextResourceDecoder::create(m_responseMIMEType, String());
+        }

There is a tab on &quot;else&quot; line. We don&apos;t use braces around single-line blocks.

This looks good for me for the most part. The biggest issues I see are lack of clarity about hint encoding usage (and its decoder lifetime), and the FIXME I asked to fix in a blocking bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112554</commentid>
    <comment_count>25</comment_count>
      <attachid>28353</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-06 01:25:00 -0800</bug_when>
    <thetext>Created attachment 28353
updated patch with ap&apos;s review comments addressed

Thank you for the review. Can you take another look? 

* Added/fixed copyright/license in newly added files (I copied it from other chrome-contributed files)
* Fixed style nits (NULL, indentation, tab, etc)
* Added more comments to clarify what it does in ChangeLog and source files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112556</commentid>
    <comment_count>26</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-06 01:41:12 -0800</bug_when>
    <thetext>
&gt; I think that we should resolve this FIXME before making encoding detection more
&gt; common. It should be a separate bug blocking this one.

I filed bug 24420. It&apos;s kinda tricky because whether or not to invoke an encoding detection partly depends on what we read (and decode) so far. Would you consider taking this patch first with the premise that I&apos;ll follow it up with bug 24420.

In case of Japanese encoding detection, I think it should be removed altoghther (see bug 21990 [1]) or at least should be invoked only when a newly added settings entry (usesEncodingDetector) is ON. 

As for hintEncoding, I added a check for security origin. Previously, I replied that it&apos;s not necessary because there&apos;s a check in TextResourceDecoder (shouldAutoDetect). It turned out that there are cases the check misses. What is hintEncoding for? TextEncodingDetectorICU.cpp uses it to find a &apos;compatible&apos; (currently its compatibility check is limited to the name match) encoding among candidates. Other implementations can do more sophisticated things. Also, in the future, hintEncodingName may have to be replaced by encodingHint (that can carry more information like TLD, UI language, parent/referrer encoding etc). 

I added TextEncodingDetectorICU.cpp to various build files if there are other FooICU.cpp files. Otherwise, I added TextEncodingDetectorNone.cpp. 

[1] If you need some hard numbers to justify removing that, I can provide that (not immediately). 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112559</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-06 02:12:06 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; I filed bug 24420. It&apos;s kinda tricky because whether or not to invoke an
&gt; encoding detection partly depends on what we read (and decode) so far. Would
&gt; you consider taking this patch first with the premise that I&apos;ll follow it up
&gt; with bug 24420.

I&apos;m just worried that fixing bug 24420 will require re-starting decoding, with all the associated perils of repeated script execution etc. It&apos;s very tricky indeed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112863</commentid>
    <comment_count>28</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-09 11:03:15 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)

&gt; I&apos;m just worried that fixing bug 24420 will require re-starting decoding, with
&gt; all the associated perils of repeated script execution etc. It&apos;s very tricky
&gt; indeed!

You meant &quot;NOT fixing bug 24420 will require re-starting decoding .... etc&quot;, didn&apos;t you? I agree that there is a problem. 

Don&apos;t we have the same problem with &apos;meta charset&apos; declaration (or do we stop search for meta as soon as we see &apos;script tag&apos;? I&apos;m being lazy here not checking the current code)? If we do have the same problem with meta charset search, this one should be less severe than that because it&apos;s off by default, shouldn&apos;t it? 




</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112865</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-09 11:10:07 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; You meant &quot;NOT fixing bug 24420 will require re-starting decoding .... etc&quot;,
&gt; didn&apos;t you? I agree that there is a problem. 

I guess I meant both at once - I&apos;d like to see at least an initial plan for bug 24420 before giving a green light to more encoding detection.

&gt; Don&apos;t we have the same problem with &apos;meta charset&apos; declaration (or do we stop
&gt; search for meta as soon as we see &apos;script tag&apos;?

We do not have this problem with meta charset (we pre-scan until document body or 1024 byte boundary, whichever comes last, and we ignore charset declarations that appear after we started tokenizing input).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113051</commentid>
    <comment_count>30</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-10 13:12:27 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; You meant &quot;NOT fixing bug 24420 will require re-starting decoding .... etc&quot;,
&gt; &gt; didn&apos;t you? I agree that there is a problem. 
&gt; 
&gt; I guess I meant both at once - I&apos;d like to see at least an initial plan for bug
&gt; 24420 before giving a green light to more encoding detection.
...
&gt; We do not have this problem with meta charset (we pre-scan until document body
&gt; or 1024 byte boundary, whichever comes last, and we ignore charset declarations
&gt; that appear after we started tokenizing input).

How about doing a similar &quot;pre-scanning&quot;(?) with auto-detection? We can ask autodetector to  return &quot;an indicator of undeterministic/unknown) until it reaches a confidence level higher than a certain value (that thresold should be internal to each implementation of autodetector). Then,  we can set a flag (similar to m_checkedForHeadCharset). Would it be a good plan for bug 24420? 




</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113133</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-11 01:13:10 -0700</bug_when>
    <thetext>Yes, it may we ll be. Are you well familiar with how Gecko encoding detector works? How much data does it normally need to choose an encoding with confidence (and how much data would you expect our detector to need)?

I&apos;d suggest that we discuss bug 24420 there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113404</commentid>
    <comment_count>32</comment_count>
      <attachid>28353</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-12 10:06:53 -0700</bug_when>
    <thetext>Comment on attachment 28353
updated patch with ap&apos;s review comments addressed

This got bit-rotten due to a recent change (r41551) that got rid of TextDecoder class. I&apos;ll upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114860</commentid>
    <comment_count>33</comment_count>
      <attachid>28869</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-23 14:51:45 -0700</bug_when>
    <thetext>Created attachment 28869
upated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114997</commentid>
    <comment_count>34</comment_count>
      <attachid>28897</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-24 12:25:11 -0700</bug_when>
    <thetext>Created attachment 28897
updated patch (the same as the previous one except for a 1-line chnage)

This is the same as the previous one except that in flush(), I put &apos;shouldAutoDetect()&apos; before other checks to short-circuit  in the default case where auto-detection is OFF.  This was tested in Chromium trunk on Windows (the previous patches have been in Chromium for over a year).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115136</commentid>
    <comment_count>35</comment_count>
      <attachid>28897</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-25 06:00:03 -0700</bug_when>
    <thetext>Comment on attachment 28897
updated patch (the same as the previous one except for a 1-line chnage)

Index: WebCore/GNUmakefile.am
===================================================================

Most of changed project files are not listed in ChangeLog.

+            // Set the hint encoding to the parent frame encoding only if
+            // the parent and the current frames share the security origin.
+            // TODO: We may consider relaxing this later for &apos;relatively
+            // safe&apos; encodings (that is, encodings other than non-ASCII 7bit
+            // encodings). 

We use FIXME, not TODO. I think that the first part of the comment should say why we are doing this, not just what happens below (in which case, the TODO part could probably be omitted altogether).

-        if (m_encoding.isEmpty()) {
...
+        if (m_encoding.isEmpty() &amp;&amp; canReferToParentFrameEncoding(m_frame, parentFrame))
+            m_decoder-&gt;setEncoding(parentFrame-&gt;document()-&gt;inputEncoding(), TextResourceDecoder::EncodingFromParentFrame);
+        else {
             m_decoder-&gt;setEncoding(m_encoding,
                 m_encodingWasChosenByUser ? TextResourceDecoder::UserChosenEncoding : TextResourceDecoder::EncodingFromHTTPHeader);
         }

This looks like an unintended change - the else branch can now be taken even if m_encoding is empty.

+    const TextResourceDecoder* m_hintDecoder;

What guarantees that m_hintDecoder will exist long enough? This decoder is never used as a decoder - all we need from it is an encoding name, and source - and the latter can even be checked in setHintDecoder()! So, m_hintDecoder could be replaced with a single &quot;const char* m_hintEncoding&quot; variable.

+#if ENABLE(MAC_ENCODING)

The changes to TextCodecICU.cpp changes don&apos;t look like they belong to this patch.

r-, because I&apos;m very suspicious of m_hintDecoder lifetime (especially if someone adds other sources for hints in the future), and it looks quite easy to fix resolutely. But this looks mostly ready to go!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115263</commentid>
    <comment_count>36</comment_count>
      <attachid>28952</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-25 16:30:43 -0700</bug_when>
    <thetext>Created attachment 28952
patch addressing ap&apos;s concerns

Thank you for the review. Here&apos;s an updated patch. Please, take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115265</commentid>
    <comment_count>37</comment_count>
      <attachid>28953</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-25 16:34:14 -0700</bug_when>
    <thetext>Created attachment 28953
patch (alternative) with a very minor diff from the previous one

It&apos;s almost identical to attachment 28952 except that it adds m_hintEncodingSource and set it (as well as m_hintEncoding) in setHintEncoding and check it against AutoDetectedEncoding in shouldAutoDetect. With it added, I can omit some comments (because the code becomes self-explanatory). 

Anyway, either this or the previous one is fine with me. 
Alexey, please, choose as you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115302</commentid>
    <comment_count>38</comment_count>
      <attachid>28952</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-25 23:09:56 -0700</bug_when>
    <thetext>Comment on attachment 28952
patch addressing ap&apos;s concerns

r=me

I prefer this version, because it uses less memory (this is not critical, because TextResourceDecoder objects are not too numerous, but a good practice anyway).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115303</commentid>
    <comment_count>39</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-25 23:17:58 -0700</bug_when>
    <thetext>It came to my mind that the const char* hint can be further simplified to a bool - if there is hint that is going to be used, it always matches the decoder&apos;s codec, so all we need to know is whether auto-detect is pending, and reset the bool when appropriate. But I do not want to hold landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115338</commentid>
    <comment_count>40</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-26 09:17:38 -0700</bug_when>
    <thetext>Hurray!!! So, this is good to land?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115358</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-26 11:21:10 -0700</bug_when>
    <thetext>Alexey, I assume you&apos;ll want to land this yourself.  If that&apos;s not the case, just let one of us chromie&apos;s know and we&apos;ll be happy to land this on Jungshik&apos;s behalf.  I&apos;m confused by the two attachments not knowing which to land. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115389</commentid>
    <comment_count>42</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-26 13:24:41 -0700</bug_when>
    <thetext>Please feel free to land the one with r+, as usual :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115438</commentid>
    <comment_count>43</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-26 15:43:35 -0700</bug_when>
    <thetext>I had to add a symbol export to get it to link:

diff --git a/WebCore/WebCore.base.exp b/WebCore/WebCore.base.exp
index b7af344..cae0464 100644
--- a/WebCore/WebCore.base.exp
+++ b/WebCore/WebCore.base.exp
@@ -603,6 +603,7 @@ __ZN7WebCore8Settings22setShowsURLsInToolTipsEb
 __ZN7WebCore8Settings23setDefaultFixedFontSizeEi
 __ZN7WebCore8Settings23setEditableLinkBehaviorENS_20EditableLinkBehaviorE
 __ZN7WebCore8Settings23setNeedsTigerMailQuirksEb
+__ZN7WebCore8Settings23setUsesEncodingDetectorEb
 __ZN7WebCore8Settings24setApplicationChromeModeEb
 __ZN7WebCore8Settings24setTextAreasAreResizableEb
 __ZN7WebCore8Settings25setDeveloperExtrasEnabledEb

But otherwise things seemed to compile fine.  Still running the tests...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115449</commentid>
    <comment_count>44</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-26 17:09:24 -0700</bug_when>
    <thetext>
(In reply to comment #43)
&gt; I had to add a symbol export to get it to link:

&gt;  __ZN7WebCore8Settings23setNeedsTigerMailQuirksEb
&gt; +__ZN7WebCore8Settings23setUsesEncodingDetectorEb

Thanks, Eric, for fixing the patch and landing it. My patch has that symbol added, but it got slightly bit-rotten because __ZN7WebCore8Settings23setNeedsTigerMailQuirksEb was reently added.  
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115473</commentid>
    <comment_count>45</comment_count>
      <attachid>29000</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-26 19:28:35 -0700</bug_when>
    <thetext>Created attachment 29000
tiger/qt build fix

UnusedParam.h should have been included by TextEncodingDetector{ICU,None}.cpp for Tiger and platforms where ICU is not used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115477</commentid>
    <comment_count>46</comment_count>
      <attachid>29001</attachid>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-03-26 19:37:02 -0700</bug_when>
    <thetext>Created attachment 29001
Fix Tiger/Qt build and crash in setHintEncoding

This patch has a crash fix for setHintEncoding in addition to Tiger/Qt build fix in the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115479</commentid>
    <comment_count>47</comment_count>
      <attachid>29001</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-03-26 19:45:47 -0700</bug_when>
    <thetext>Comment on attachment 29001
Fix Tiger/Qt build and crash in setHintEncoding

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115481</commentid>
    <comment_count>48</comment_count>
      <attachid>29001</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-03-26 19:52:52 -0700</bug_when>
    <thetext>Comment on attachment 29001
Fix Tiger/Qt build and crash in setHintEncoding

Clearing review flag because I landed this in r42026. I also made the UnusedParam.h #include unconditional on Mark Rowe&apos;s advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116968</commentid>
    <comment_count>49</comment_count>
      <attachid>28952</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-04-08 17:33:45 -0700</bug_when>
    <thetext>Comment on attachment 28952
patch addressing ap&apos;s concerns

Clearing r+ (to move out of commit queue) since this was landed http://trac.webkit.org/changeset/42022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118546</commentid>
    <comment_count>50</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2009-04-23 15:01:22 -0700</bug_when>
    <thetext>fixed. thanks all. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955340</commentid>
    <comment_count>51</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2013-12-02 04:57:34 -0800</bug_when>
    <thetext>Do I understand correctly that in bug 14500, you saw that the page didn&apos;t work, because WebKit doesn&apos;t support &quot;late meta&quot; and instead of adding &quot;late meta&quot; support, you added heuristic detection support? That seems like an odd choice. Do you run the detector only across the first 1024 bytes in order to avoid introducing the issues that &quot;late meta&quot; support would have introduced?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955383</commentid>
    <comment_count>52</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-02 08:32:55 -0800</bug_when>
    <thetext>&gt; instead of adding &quot;late meta&quot; support, you added heuristic detection support

Many WebKit ports currently don&apos;t enable ICU encoding detection (I&apos;m not even sure if any ports do). That was a Chromium thing. We have some old custom built detection for Japanese only though.

An encoding detector solves an additional issue with pages that don&apos;t have any encoding declaration. So, it&apos;s not just a replacement for re-parsing a page when a meta is seen too late.

Regardless, restarting parsing that already had side effects is not something I want to happen, and I don&apos;t think that it&apos;s necessary in practice.

&gt; Do you run the detector only across the first 1024 bytes in order to avoid introducing the issues that &quot;late meta&quot; support would have introduced?

Meta pre-parser runs over the whole HEAD or 1024 bytes, whichever is larger.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18020</attachid>
            <date>2007-12-20 16:58:24 -0800</date>
            <delta_ts>2008-08-02 02:50:30 -0700</delta_ts>
            <desc>incompete patch (fails in linking)</desc>
            <filename>enc.detector.patch</filename>
            <type>text/plain</type>
            <size>21610</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pY3UvdW5pY29kZS91Y3NkZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaWN1L3VuaWNv
ZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5l
c3MgTWFjaGluZXMKKyAqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorICogICBmaWxlIG5hbWU6ICB1Y3NkZXQuaAorICogICBl
bmNvZGluZzogICBVUy1BU0NJSQorICogICBpbmRlbnRhdGlvbjo0CisgKgorICogICBjcmVhdGVk
IG9uOiAyMDA1QXVnMDQKKyAqICAgY3JlYXRlZCBieTogQW5keSBIZW5pbmdlcgorICoKKyAqICAg
SUNVIENoYXJhY3RlciBTZXQgRGV0ZWN0aW9uLCBBUEkgZm9yIEMKKyAqCisgKiAgIERyYWZ0IHZl
cnNpb24gMTggT2N0IDIwMDUKKyAqCisgKi8KKworI2lmbmRlZiBfX1VDU0RFVF9ICisjZGVmaW5l
IF9fVUNTREVUX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJ
R19OT19DT05WRVJTSU9OCisjaW5jbHVkZSAidW5pY29kZS91ZW51bS5oIgorCisvKioKKyAqIFxm
aWxlIAorICogXGJyaWVmIEMgQVBJOiBDaGFyc2V0IERldGVjdGlvbiBBUEkKKyAqCisgKiBUaGlz
IEFQSSBwcm92aWRlcyBhIGZhY2lsaXR5IGZvciBkZXRlY3RpbmcgdGhlCisgKiBjaGFyc2V0IG9y
IGVuY29kaW5nIG9mIGNoYXJhY3RlciBkYXRhIGluIGFuIHVua25vd24gdGV4dCBmb3JtYXQuCisg
KiBUaGUgaW5wdXQgZGF0YSBjYW4gYmUgZnJvbSBhbiBhcnJheSBvZiBieXRlcy4KKyAqIDxwPgor
ICogQ2hhcmFjdGVyIHNldCBkZXRlY3Rpb24gaXMgYXQgYmVzdCBhbiBpbXByZWNpc2Ugb3BlcmF0
aW9uLiAgVGhlIGRldGVjdGlvbgorICogcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8gaWRlbnRpZnkg
dGhlIGNoYXJzZXQgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGNoYXJhY3RlcmlzdGljcworICogb2Yg
dGhlIGJ5dGUgZGF0YSwgYnV0IHRoZSBwcm9jZXNzIGlzIHBhcnRseSBzdGF0aXN0aWNhbCBpbiBu
YXR1cmUsIGFuZAorICogdGhlIHJlc3VsdHMgY2FuIG5vdCBiZSBndWFyYW50ZWVkIHRvIGFsd2F5
cyBiZSBjb3JyZWN0LgorICogPHA+CisgKiBGb3IgYmVzdCBhY2N1cmFjeSBpbiBjaGFyc2V0IGRl
dGVjdGlvbiwgdGhlIGlucHV0IGRhdGEgc2hvdWxkIGJlIHByaW1hcmlseQorICogaW4gYSBzaW5n
bGUgbGFuZ3VhZ2UsIGFuZCBhIG1pbmltdW0gb2YgYSBmZXcgaHVuZHJlZCBieXRlcyB3b3J0aCBv
ZiBwbGFpbiB0ZXh0CisgKiBpbiB0aGUgbGFuZ3VhZ2UgYXJlIG5lZWRlZC4gIFRoZSBkZXRlY3Rp
b24gcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8KKyAqIGlnbm9yZSBodG1sIG9yIHhtbCBzdHlsZSBt
YXJrdXAgdGhhdCBjb3VsZCBvdGhlcndpc2Ugb2JzY3VyZSB0aGUgY29udGVudC4KKyAqLworIAor
CitzdHJ1Y3QgVUNoYXJzZXREZXRlY3RvcjsKKy8qKgorICAqIFN0cnVjdHVyZSByZXByZXNlbnRp
bmcgYSBjaGFyc2V0IGRldGVjdG9yCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK3R5cGVkZWYg
c3RydWN0IFVDaGFyc2V0RGV0ZWN0b3IgVUNoYXJzZXREZXRlY3RvcjsKKworc3RydWN0IFVDaGFy
c2V0TWF0Y2g7CisvKioKKyAgKiAgT3BhcXVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBtYXRj
aCB0aGF0IHdhcyBpZGVudGlmaWVkCisgICogIGZyb20gYSBjaGFyc2V0IGRldGVjdGlvbiBvcGVy
YXRpb24uCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVmIHN0cnVjdCBVQ2hhcnNl
dE1hdGNoIFVDaGFyc2V0TWF0Y2g7CisKKy8qKgorICAqICBPcGVuIGEgY2hhcnNldCBkZXRlY3Rv
ci4KKyAgKgorICAqICBAcGFyYW0gc3RhdHVzIEFueSBlcnJvciBjb25kaXRpb25zIG9jY3Vycmlu
ZyBkdXJpbmcgdGhlIG9wZW4KKyAgKiAgICAgICAgICAgICAgICBvcGVyYXRpb24gYXJlIHJlcG9y
dGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJldHVybiB0aGUgbmV3bHkgb3BlbmVk
IGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIFVD
aGFyc2V0RGV0ZWN0b3IgKiBVX0VYUE9SVDIKK3Vjc2RldF9vcGVuKFVFcnJvckNvZGUgICAqc3Rh
dHVzKTsKKworLyoqCisgICogQ2xvc2UgYSBjaGFyc2V0IGRldGVjdG9yLiAgQWxsIHN0b3JhZ2Ug
YW5kIGFueSBvdGhlciByZXNvdXJjZXMKKyAgKiAgIG93bmVkIGJ5IHRoaXMgY2hhcnNldCBkZXRl
Y3RvciB3aWxsIGJlIHJlbGVhc2VkLiAgRmFpbHVyZSB0bworICAqICAgY2xvc2UgYSBjaGFyc2V0
IGRldGVjdG9yIHdoZW4gZmluaXNoZWQgd2l0aCBpdCBjYW4gcmVzdWx0IGluCisgICogICBtZW1v
cnkgbGVha3MgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAqCisgICogIEBwYXJhbSB1Y3NkICBUaGUg
Y2hhcnNldCBkZXRlY3RvciB0byBiZSBjbG9zZWQuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICov
CitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfY2xvc2UoVUNoYXJzZXREZXRlY3RvciAq
dWNzZCk7CisKKy8qKgorICAqIFNldCB0aGUgaW5wdXQgYnl0ZSBkYXRhIHdob3NlIGNoYXJzZXQg
aXMgdG8gZGV0ZWN0ZWQuCisgICoKKyAgKiBPd25lcnNoaXAgb2YgdGhlIGlucHV0ICB0ZXh0IGJ5
dGUgYXJyYXkgcmVtYWlucyB3aXRoIHRoZSBjYWxsZXIuCisgICogVGhlIGlucHV0IHN0cmluZyBt
dXN0IG5vdCBiZSBhbHRlcmVkIG9yIGRlbGV0ZWQgdW50aWwgdGhlIGNoYXJzZXQKKyAgKiBkZXRl
Y3RvciBpcyBlaXRoZXIgY2xvc2VkIG9yIHJlc2V0IHRvIHJlZmVyIHRvIGRpZmZlcmVudCBpbnB1
dCB0ZXh0LgorICAqCisgICogQHBhcmFtIHVjc2QgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBi
ZSB1c2VkLgorICAqIEBwYXJhbSB0ZXh0SW4gdGhlIGlucHV0IHRleHQgb2YgdW5rbm93biBlbmNv
ZGluZy4gICAuCisgICogQHBhcmFtIGxlbiAgICB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0
LCBvciAtMSBpZiB0aGUgdGV4dAorICAqICAgICAgICAgICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQu
CisgICogQHBhcmFtIHN0YXR1cyBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFj
ayBpbiB0aGlzIHZhcmlhYmxlLgorICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJB
RlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXRUZXh0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2Qs
IGNvbnN0IGNoYXIgKnRleHRJbiwgaW50MzJfdCBsZW4sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisK
KworLyoqIFNldCB0aGUgZGVjbGFyZWQgZW5jb2RpbmcgZm9yIGNoYXJzZXQgZGV0ZWN0aW9uLgor
ICogIFRoZSBkZWNsYXJlZCBlbmNvZGluZyBvZiBhbiBpbnB1dCB0ZXh0IGlzIGFuIGVuY29kaW5n
IG9idGFpbmVkCisgKiAgYnkgdGhlIHVzZXIgZnJvbSBhbiBodHRwIGhlYWRlciBvciB4bWwgZGVj
bGFyYXRpb24gb3Igc2ltaWxhciBzb3VyY2UgdGhhdAorICogIGNhbiBiZSBwcm92aWRlZCBhcyBh
biBhZGRpdGlvbmFsIGhpbnQgdG8gdGhlIGNoYXJzZXQgZGV0ZWN0b3IuCisgKgorICogIEhvdyBh
bmQgd2hldGhlciB0aGUgZGVjbGFyZWQgZW5jb2Rpbmcgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUK
KyAqICBkZXRlY3Rpb24gcHJvY2VzcyBpcyBUQkQuCisgKgorICogQHBhcmFtIHVjc2QgICAgICB0
aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICogQHBhcmFtIGVuY29kaW5nICBhbiBl
bmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgZGF0YSBvYnRhaW5lZCBmcm9tCisgKiAgICAgICAgICAg
ICAgICAgIGEgaGVhZGVyIG9yIGRlY2xhcmF0aW9uIG9yIG90aGVyIHNvdXJjZSBvdXRzaWRlCisg
KiAgICAgICAgICAgICAgICAgIG9mIHRoZSBieXRlIGRhdGEgaXRzZWxmLgorICogQHBhcmFtIGxl
bmd0aCAgICB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGluZyBuYW1lLCBvciAtMSBpZiB0aGUgbmFt
ZSBzdHJpbmcKKyAqICAgICAgICAgICAgICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQuCisgKiBAcGFy
YW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRo
aXMgdmFyaWFibGUuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCB2b2lkIFVf
RVhQT1JUMgordWNzZGV0X3NldERlY2xhcmVkRW5jb2RpbmcoVUNoYXJzZXREZXRlY3RvciAqdWNz
ZCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0
dXMpOworCisKKy8qKgorICogUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRo
ZSBzdXBwbGllZCBpbnB1dCBkYXRhLgorICogCisgKiBOb3RlIHRob3VnaCwgdGhhdCBiZWNhdXNl
IHRoZSBkZXRlY3Rpb24gCisgKiBvbmx5IGxvb2tzIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQg
ZGF0YSwKKyAqIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgcmV0dXJuZWQgY2hhcnNl
dCB3aWxsIGZhaWwgdG8gaGFuZGxlCisgKiB0aGUgZnVsbCBzZXQgb2YgaW5wdXQgZGF0YS4KKyAq
IDxwPgorICogVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0Y2ggb2JqZWN0IGlzIG93bmVkIGJ5IHRo
ZSBVQ2hhcnNldERldGVjdG9yLgorICogSXQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGRl
dGVjdG9yIGlucHV0IGlzIHJlc2V0LCBvciB1bnRpbAorICogdGhlIGRldGVjdG9yIGlzIGNsb3Nl
ZC4KKyAqIDxwPgorICogVGhlIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZgorICogIDx1bD4KKyAqICAg
IDxsaT5ubyBjaGFyc2V0IGFwcGVhcnMgdG8gbWF0Y2ggdGhlIGRhdGEuPC9saT4KKyAqICAgIDxs
aT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICoKKyAq
IEBwYXJhbSB1Y3NkICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBw
YXJhbSBzdGF0dXMgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4g
dGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAgYSBVQ2hhcnNldE1hdGNoICByZXBy
ZXNlbnRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgY2hhcnNldCwKKyAqICAgICAgICAgICAgICAgICAg
b3IgTlVMTCBpZiBubyBjaGFyc2V0IG1hdGNoZXMgdGhlIGJ5dGUgZGF0YS4KKyAqCisgKiBAZHJh
ZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiBVX0VYUE9SVDIK
K3Vjc2RldF9kZXRlY3QoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgVUVycm9yQ29kZSAqc3RhdHVz
KTsKKyAgICAKKworLyoqCisgKiAgRmluZCBhbGwgY2hhcnNldCBtYXRjaGVzIHRoYXQgYXBwZWFy
IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5wdXQsCisgKiAgcmV0dXJuaW5nIGFuIGFycmF5
IG9mIHJlc3VsdHMuICBUaGUgcmVzdWx0cyBhcmUgb3JkZXJlZCB3aXRoIHRoZQorICogIGJlc3Qg
cXVhbGl0eSBtYXRjaCBmaXJzdC4KKyAqCisgKiAgQmVjYXVzZSB0aGUgZGV0ZWN0aW9uIG9ubHkg
bG9va3MgYXQgYSBsaW1pdGVkIGFtb3VudCBvZiB0aGUKKyAqICBpbnB1dCBieXRlIGRhdGEsIHNv
bWUgb2YgdGhlIHJldHVybmVkIGNoYXJzZXRzIG1heSBmYWlsIHRvIGhhbmRsZQorICogIHRoZSBh
bGwgb2YgaW5wdXQgZGF0YS4KKyAqICA8cD4KKyAqICBUaGUgcmV0dXJuZWQgVUNoYXJzZXRNYXRj
aCBvYmplY3RzIGFyZSBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqICBUaGV5IHdp
bGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9kaWZpZWQK
KyAqICAKKyAqIDxwPgorICogUmV0dXJuIGFuIGVycm9yIGlmIAorICogIDx1bD4KKyAqICAgIDxs
aT5ubyBjaGFyc2V0cyBhcHBlYXIgdG8gbWF0Y2ggdGhlIGlucHV0IGRhdGEuPC9saT4KKyAqICAg
IDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICog
CisgKiBAcGFyYW0gdWNzZCAgICAgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2Vk
LgorICogQHBhcmFtIG1hdGNoZXNGb3VuZCAgcG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgd2ls
bCBiZSBzZXQgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY2hhcnNl
dHMgaWRlbnRpZmllZCB0aGF0IGFyZSBjb25zaXN0ZW50IHdpdGgKKyAqICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBpbnB1dCBkYXRhLiAgT3V0cHV0IG9ubHkuCisgKiBAcGFyYW0gc3RhdHVzICAg
ICAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlh
YmxlLgorICogQHJldHVybiAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHBv
aW50ZXJzIHRvIFVDaGFyU2V0TWF0Y2ggb2JqZWN0cy4KKyAqICAgICAgICAgICAgICAgICAgICAg
IFRoaXMgYXJyYXksIGFuZCB0aGUgVUNoYXJTZXRNYXRjaCBpbnN0YW5jZXMgdG8gd2hpY2ggaXQg
cmVmZXJzLAorICogICAgICAgICAgICAgICAgICAgICAgYXJlIG93bmVkIGJ5IHRoZSBVQ2hhcnNl
dERldGVjdG9yLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwKKyAqICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9kaWZpZWQuCisgKiBAZHJhZnQgSUNV
IDMuNAorICovCitVX0RSQUZUIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiogVV9FWFBPUlQyCit1Y3Nk
ZXRfZGV0ZWN0QWxsKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGludDMyX3QgKm1hdGNoZXNGb3Vu
ZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisKKy8qKgorICogIEdldCB0aGUgbmFtZSBvZiB0
aGUgY2hhcnNldCByZXByZXNlbnRlZCBieSBhIFVDaGFyc2V0TWF0Y2guCisgKgorICogIFRoZSBz
dG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisgKiAg
VUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNldE1h
dGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIFRoZSBuYW1lIHJldHVybmVkIGlzIHN1aXRhYmxl
IGZvciB1c2Ugd2l0aCB0aGUgSUNVIGNvbnZlcnNpb24gQVBJcy4KKyAqCisgKiAgQHBhcmFtIHVj
c20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBl
cnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAg
QHJldHVybiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGNoYXJzZXQuCisgKgorICog
IEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNz
ZGV0X2dldE5hbWUoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVz
KTsKKworLyoqCisgKiAgR2V0IGEgY29uZmlkZW5jZSBudW1iZXIgZm9yIHRoZSBxdWFsaXR5IG9m
IHRoZSBtYXRjaCBvZiB0aGUgYnl0ZQorICogIGRhdGEgd2l0aCB0aGUgY2hhcnNldC4gIENvbmZp
ZGVuY2UgbnVtYmVycyByYW5nZSBmcm9tIHplcm8gdG8gMTAwLAorICogIHdpdGggMTAwIHJlcHJl
c2VudGluZyBjb21wbGV0ZSBjb25maWRlbmNlIGFuZCB6ZXJvIHJlcHJlc2VudGluZworICogIG5v
IGNvbmZpZGVuY2UuCisgKgorICogIFRoZSBjb25maWRlbmNlIHZhbHVlcyBhcmUgc29tZXdoYXQg
YXJiaXRyYXJ5LiAgVGhleSBkZWZpbmUgYW4KKyAqICBhbiBvcmRlcmluZyB3aXRoaW4gdGhlIHJl
c3VsdHMgZm9yIGFueSBzaW5nbGUgZGV0ZWN0aW9uIG9wZXJhdGlvbgorICogIGJ1dCBhcmUgbm90
IGdlbmVyYWxseSBjb21wYXJhYmxlIGJldHdlZW4gdGhlIHJlc3VsdHMgZm9yIGRpZmZlcmVudCBp
bnB1dC4KKyAqCisgKiAgQSBjb25maWRlbmNlIHZhbHVlIG9mIHRlbiBkb2VzIGhhdmUgYSBnZW5l
cmFsIG1lYW5pbmcgLSBpdCBpcyB1c2VkCisgKiAgZm9yIGNoYXJzZXRzIHRoYXQgY2FuIHJlcHJl
c2VudCB0aGUgaW5wdXQgZGF0YSwgYnV0IGZvciB3aGljaCB0aGVyZQorICogIGlzIG5vIG90aGVy
IGluZGljYXRpb24gdGhhdCBzdWdnZXN0cyB0aGF0IHRoZSBjaGFyc2V0IGlzIHRoZSBjb3JyZWN0
IG9uZS4KKyAqICBQdXJlIDcgYml0IEFTQ0lJIGRhdGEsIGZvciBleGFtcGxlLCBpcyBjb21wYXRp
YmxlIHdpdGggYQorICogIGdyZWF0IG1hbnkgY2hhcnNldHMsIG1vc3Qgb2Ygd2hpY2ggd2lsbCBh
cHBlYXIgYXMgcG9zc2libGUgbWF0Y2hlcworICogIHdpdGggYSBjb25maWRlbmNlIG9mIDEwLgor
ICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBh
cmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhp
cyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBBIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0
aGUgY2hhcnNldCBtYXRjaC4KKyAqCisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBp
bnQzMl90IFVfRVhQT1JUMgordWNzZGV0X2dldENvbmZpZGVuY2UoY29uc3QgVUNoYXJzZXRNYXRj
aCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiAgR2V0IHRoZSBSRkMgMzA2
NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGRhdGEuCisgKgorICogIFRoZSBD
aGFyc2V0IERldGVjdGlvbiBzZXJ2aWNlIGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgZGV0ZWN0
aW5nCisgKiAgY2hhcnNldHMsIG5vdCBsYW5ndWFnZS4gIEZvciBzb21lLCBidXQgbm90IGFsbCwg
Y2hhcnNldHMsIGEgbGFuZ3VhZ2UgaXMKKyAqICBpZGVudGlmaWVkIGFzIGEgYnlwcm9kdWN0IG9m
IHRoZSBkZXRlY3Rpb24gcHJvY2VzcywgYW5kIHRoYXQgaXMgd2hhdAorICogIGlzIHJldHVybmVk
IGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogIENBVVRJT046CisgKiAgICAxLiAgTGFuZ3VhZ2Ug
aW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgaW5wdXQgZGF0YSBlbmNvZGVkIGluCisg
KiAgICAgICAgYWxsIGNoYXJzZXRzLiBJbiBwYXJ0aWN1bGFyLCBubyBsYW5ndWFnZSBpcyBpZGVu
dGlmaWVkCisgKiAgICAgICAgZm9yIFVURi04IGlucHV0IGRhdGEuCisgKgorICogICAgMi4gIENs
b3NlbHkgcmVsYXRlZCBsYW5ndWFnZXMgbWF5IHNvbWV0aW1lcyBiZSBjb25mdXNlZC4KKyAqCisg
KiAgSWYgbW9yZSBhY2N1cmF0ZSBsYW5ndWFnZSBkZXRlY3Rpb24gaXMgcmVxdWlyZWQsIGEgbGlu
Z3Vpc3RpYworICogIGFuYWx5c2lzIHBhY2thZ2Ugc2hvdWxkIGJlIHVzZWQuCisgKgorICogIFRo
ZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisg
KiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNl
dE1hdGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0
IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBh
cmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIFRo
ZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGRhdGEsIG9yCisg
KiAgICAgICAgICAgICAgICAgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBsYW5ndWFnZSBjb3VsZCBu
b3QgYmUgZGV0ZXJtaW5lZC4KKyAqCisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBj
b25zdCBjaGFyICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0TGFuZ3VhZ2UoY29uc3QgVUNoYXJzZXRN
YXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAgKiAgR2V0IHRoZSBl
bnRpcmUgaW5wdXQgdGV4dCBhcyBhIFVDaGFyIHN0cmluZywgcGxhY2luZyBpdCBpbnRvCisgICog
IGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZlci4gIEEgdGVybWluYXRpbmcKKyAgKiAgTlVMIGNoYXJh
Y3RlciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBidWZmZXIgaWYgc3BhY2UgaXMgYXZhaWxhYmxl
LgorICAqCisgICogIFRoZSBudW1iZXIgb2YgVUNoYXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLCBu
b3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICAqICBOVUwsIGlzIHJldHVybmVkLiAKKyAg
KgorICAqICBJZiB0aGUgc3VwcGxpZWQgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCB0
byBob2xkIHRoZSBvdXRwdXQsCisgICogIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSB1
bmRlZmluZWQuICBUaGUgZnVsbCBvdXRwdXQgc3RyaW5nIGxlbmd0aAorICAqICAoaW4gVUNoYXJz
KSBpcyByZXR1cm5lZCBhcyBhbHdheXMsIGFuZCBjYW4gYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGJ1
ZmZlcgorICAqICBvZiB0aGUgY29ycmVjdCBzaXplLgorICAqCisgICoKKyAgKiBAcGFyYW0gdWNz
bSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgICogQHBhcmFtIGJ1ZiAgICAgQSBVQ2hh
ciBidWZmZXIgdG8gYmUgZmlsbGVkIHdpdGggdGhlIGNvbnZlcnRlZCB0ZXh0IGRhdGEuCisgICog
QHBhcmFtIGNhcCAgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSBidWZmZXIgaW4gVUNoYXJzLgorICAq
IEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgICogQHJldHVybiAgICAgICAgVGhlIG51bWJlciBvZiBVQ2hhcnMg
aW4gdGhlIG91dHB1dCBzdHJpbmcuCisgICoKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAqLworVV9E
UkFGVCAgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRVQ2hhcnMoY29uc3QgVUNoYXJzZXRN
YXRjaCAqdWNzbSwKKyAgICAgICAgICAgICAgICAgVUNoYXIgKmJ1ZiwgaW50MzJfdCBjYXAsIFVF
cnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAgKiAgR2V0IGFuIGl0ZXJhdG9yIG92ZXIg
dGhlIHNldCBvZiBhbGwgZGV0ZWN0YWJsZSBjaGFyc2V0cyAtIAorICAqICBvdmVyIHRoZSBjaGFy
c2V0cyB0aGF0IGFyZSBrbm93biB0byB0aGUgY2hhcnNldCBkZXRlY3Rpb24KKyAgKiAgc2Vydmlj
ZS4KKyAgKgorICAqICBUaGUgcmV0dXJuZWQgVUVudW1lcmF0aW9uIHByb3ZpZGVzIGFjY2VzcyB0
byB0aGUgbmFtZXMgb2YKKyAgKiAgdGhlIGNoYXJzZXRzLgorICAqCisgICogIFRoZSBzdGF0ZSBv
ZiB0aGUgQ2hhcnNldCBkZXRlY3RvciB0aGF0IGlzIHBhc3NlZCBpbiBkb2VzIG5vdAorICAqICBh
ZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLCBidXQgcmVxdWlyaW5nIGEgdmFsaWQs
IG9wZW4KKyAgKiAgY2hhcnNldCBkZXRlY3RvciBhcyBhIHBhcmFtZXRlciBpbnN1cmVzIHRoYXQg
dGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZpY2UgaGFzIGJlZW4gc2FmZWx5IGluaXRp
YWxpemVkIGFuZCB0aGF0IHRoZSByZXF1aXJlZCBkZXRlY3Rpb24KKyAgKiAgZGF0YSBpcyBhdmFp
bGFibGUuCisgICoKKyAgKiAgQHBhcmFtIHVjc2QgYSBDaGFyc2V0IGRldGVjdG9yLgorICAqICBA
cGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0
aGlzIHZhcmlhYmxlLgorICAqICBAcmV0dXJuIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyBhY2Nlc3Mg
dG8gdGhlIGRldGVjdGFibGUgY2hhcnNldCBuYW1lcy4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAg
Ki8KKworVV9EUkFGVCAgVUVudW1lcmF0aW9uICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0QWxsRGV0
ZWN0YWJsZUNoYXJzZXRzKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsICBVRXJyb3JDb2Rl
ICpzdGF0dXMpOworCisKKy8qKgorICAqICBUZXN0IHdoZXRoZXIgaW5wdXQgZmlsdGVyaW5nIGlz
IGVuYWJsZWQgZm9yIHRoaXMgY2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgSW5wdXQgZmlsdGVyaW5n
IHJlbW92ZXMgdGV4dCB0aGF0IGFwcGVhcnMgdG8gYmUgSFRNTCBvciB4bWwKKyAgKiAgbWFya3Vw
IGZyb20gdGhlIGlucHV0IGJlZm9yZSBhcHBseWluZyB0aGUgY29kZSBwYWdlIGRldGVjdGlvbgor
ICAqICBoZXVyaXN0aWNzLgorICAqCisgICogIEBwYXJhbSB1Y3NkICBUaGUgY2hhcnNldCBkZXRl
Y3RvciB0byBjaGVjay4KKyAgKiAgQHJldHVybiBUUlVFIGlmIGZpbHRlcmluZyBpcyBlbmFibGVk
LgorICAqICBAZHJhZnQgSUNVIDMuNAorICAqLworVV9EUkFGVCAgVUJvb2wgVV9FWFBPUlQyCit1
Y3NkZXRfaXNJbnB1dEZpbHRlckVuYWJsZWQoY29uc3QgVUNoYXJzZXREZXRlY3RvciAqdWNzZCk7
CisKKworLyoqCisgKiBFbmFibGUgZmlsdGVyaW5nIG9mIGlucHV0IHRleHQuIElmIGZpbHRlcmlu
ZyBpcyBlbmFibGVkLAorICogdGV4dCB3aXRoaW4gYW5nbGUgYnJhY2tldHMgKCI8IiBhbmQgIj4i
KSB3aWxsIGJlIHJlbW92ZWQKKyAqIGJlZm9yZSBkZXRlY3Rpb24sIHdoaWNoIHdpbGwgcmVtb3Zl
IG1vc3QgSFRNTCBvciB4bWwgbWFya3VwLgorICoKKyAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJz
ZXQgZGV0ZWN0b3IgdG8gYmUgbW9kaWZpZWQuCisgKiBAcGFyYW0gZmlsdGVyIDxjb2RlPnRydWU8
L2NvZGU+IHRvIGVuYWJsZSBpbnB1dCB0ZXh0IGZpbHRlcmluZy4KKyAqIEByZXR1cm4gVGhlIHBy
ZXZpb3VzIHNldHRpbmcuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCAgVUJv
b2wgVV9FWFBPUlQyCit1Y3NkZXRfZW5hYmxlSW5wdXRGaWx0ZXIoVUNoYXJzZXREZXRlY3RvciAq
dWNzZCwgVUJvb2wgZmlsdGVyKTsKKworI2VuZGlmCisjZW5kaWYgICAvKiBfX1VDU0RFVF9IICov
CisKKwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjg4NzgpCisrKyBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCw3ICs5NjQs
MTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6d3JpdGUoY29uc3QgY2hhciogc3RyLAogICAgIAogICAg
IGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUt
PnNldHRpbmdzKCk7Ci0gICAgICAgIG1fZGVjb2RlciA9IG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVy
KG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKwlpZiAoc2V0dGluZ3MpCisgICAgICAgICAgICBtX2Rl
Y29kZXIgPSBuZXcgVGV4dFJlc291cmNlRGVjb2RlcihtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRp
bmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLCBzZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0
ZWN0b3IoKSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBtX2RlY29kZXIgPSBuZXcgVGV4
dFJlc291cmNlRGVjb2RlcihtX3Jlc3BvbnNlTUlNRVR5cGUsIFN0cmluZygpKTsKICAgICAgICAg
aWYgKCFtX2VuY29kaW5nLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNv
ZGluZyhtX2VuY29kaW5nLAogICAgICAgICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVz
ZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Rl
eHRSZXNvdXJjZURlY29kZXIuY3BwCShyZXZpc2lvbiAyODg3OCkKKysrIFdlYkNvcmUvbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAor
I2luY2x1ZGUgPHVuaWNvZGUvdWNzZGV0Lmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI2OCwxMyArMjcwLDE1IEBAIGNvbnN0IFRleHRFbmNvZGlu
ZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29k
aW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVu
Y29kaW5nKQorVGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNv
ZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0
ZXJtaW5lQ29udGVudFR5cGUobWltZVR5cGUpKQogICAgICwgbV9kZWNvZGVyKGRlZmF1bHRFbmNv
ZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcpKQogICAgICwgbV9z
b3VyY2UoRGVmYXVsdEVuY29kaW5nKQogICAgICwgbV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAg
ICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvckhlYWRD
aGFyc2V0KGZhbHNlKQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdE
ZXRlY3RvcikKKwogewogfQogCkBAIC02ODAsNiArNjg0LDI5IEBAIHZvaWQgVGV4dFJlc291cmNl
RGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2UKICAgICB9CiB9CiAKK3ZvaWQgVGV4dFJlc291cmNlRGVj
b2Rlcjo6ZGV0ZWN0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAg
ICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9y
KiBkZXRlY3RvciA9IHVjc2RldF9vcGVuKCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihkZXRl
Y3RvciwgdHJ1ZSk7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVjc2RldF9zZXRU
ZXh0KGRldGVjdG9yLCBkYXRhLCBzdGF0aWNfY2FzdDxpbnQzMl90PihsZW4pLCAmc3RhdHVzKTsg
CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKm1hdGNoID0gdWNz
ZGV0X2RldGVjdChkZXRlY3RvciwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KQorICAgICAgICBnb3RvIGZhaWw7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNv
bnN0IGNoYXIqIGVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2gsICZzdGF0dXMpOworICAg
IGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgc2V0RW5jb2RpbmcoZW5jb2RpbmcsIEF1
dG9EZXRlY3RlZEVuY29kaW5nKTsKK2ZhaWw6CisgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsK
K30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuKQogewogICAgIGlmICghbV9jaGVja2VkRm9yQk9NKQpAQCAtNjk5LDYgKzcy
Niw5IEBAIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKICAgICAvLyBG
SVhNRTogSXQgc2VlbXMgd3JvbmcgdG8gY2hhbmdlIG91ciBlbmNvZGluZyBkb3duc3RyZWFtIGFm
dGVyIHdlIGhhdmUgYWxyZWFkeSBkb25lIHNvbWUgZGVjb2RpbmcuCiAgICAgaWYgKG1fc291cmNl
ICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2UgaWYgKG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IgJiYg
bV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nKQorICAgICAgICAvLyBlbmNvZGluZyBkZXRlY3Rv
ciBpcyB1c2VkIG9ubHkgd2hlbiBubyBvdGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUKKyAg
ICAgICAgZGV0ZWN0RW5jb2RpbmcoZGF0YSwgbGVuKTsKIAogICAgIEFTU0VSVChlbmNvZGluZygp
LmlzVmFsaWQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHJl
dmlzaW9uIDI4ODc4KQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgVXNlckNob3Nl
bkVuY29kaW5nCiAgICAgfTsKIAotICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5j
b2RpbmcoKSk7CisgICAgVGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBi
b29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpOwogICAgIH5UZXh0UmVzb3VyY2VEZWNv
ZGVyKCk7CiAKICAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYsIEVuY29k
aW5nU291cmNlKTsKQEAgLTYyLDYgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9y
Q1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7
CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wm
IG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29u
c3QgY2hhciosIHNpemVfdCk7CisgICAgdm9pZCBkZXRlY3RFbmNvZGluZyhjb25zdCBjaGFyKiwg
c2l6ZV90KTsKIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dERlY29k
ZXIgbV9kZWNvZGVyOwpAQCAtNzAsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jaGVj
a2VkRm9yQk9NOwogICAgIGJvb2wgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldDsKICAgICBib29sIG1f
Y2hlY2tlZEZvckhlYWRDaGFyc2V0OworICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvcjsK
IH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gMjg4NzgpCisrKyBXZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNCArMzI3LDkgQEAgRm9udFJl
bmRlcmluZ01vZGUgU2V0dGluZ3M6OmZvbnRSZW5kZXJpbgogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGb250UmVuZGVyaW5nTW9kZT4obV9mb250UmVuZGVyaW5nTW9kZSk7CiB9CiAKK3ZvaWQgU2V0
dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3Ip
Cit7CisgICAgbV91c2VzRW5jb2RpbmdEZXRlY3RvciA9IHVzZXNFbmNvZGluZ0RldGVjdG9yOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMjg4Nzgp
CisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRGb250UmVuZGVyaW5n
TW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKTsKICAgICAgICAgRm9udFJlbmRlcmluZ01vZGUg
Zm9udFJlbmRlcmluZ01vZGUoKSBjb25zdDsKIAorCXZvaWQgc2V0VXNlc0VuY29kaW5nRGV0ZWN0
b3IoYm9vbCk7CisJYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc0VuY29kaW5nRGV0ZWN0b3I7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2UqIG1f
cGFnZTsKICAgICAgICAgCkBAIC0xODYsNiArMTg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wg
bV9hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZm9u
dFJlbmRlcmluZ01vZGUgOiAxOworICAgICAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3Ig
OiAxOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHJldmlzaW9uIDI4ODc4KQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjZGVmaW5lIFdlYktpdEZvcmNlRlRQRGlyZWN0b3J5
TGlzdGluZ3MgQCJXZWJLaXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzIgogI2RlZmluZSBXZWJL
aXREZXZlbG9wZXJFeHRyYXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdERldmVsb3BlckV4
dHJhc0VuYWJsZWRQcmVmZXJlbmNlS2V5IgogI2RlZmluZSBXZWJLaXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZFByZWZlcmVuY2VLZXkiCisjZGVmaW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVy
ZW5jZUtleSBAIldlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yIgogCiAvLyBUaGVzZSBhcmUgcHJp
dmF0ZSBib3RoIGJlY2F1c2UgY2FsbGVycyBzaG91bGQgYmUgdXNpbmcgdGhlIGNvdmVyIG1ldGhv
ZHMgYW5kIGJlY2F1c2UgdGhlCiAvLyBjb3ZlciBtZXRob2RzIHRoZW1zZWx2ZXMgYXJlIHByaXZh
dGUuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubQkocmV2aXNpb24gMjg4Nzgp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubQkod29ya2luZyBjb3B5KQpA
QCAtMzMzLDYgKzMzMyw3IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWlu
QnUKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgIFdlYktpdERldmVsb3Bl
ckV4dHJhc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSwgIFdlYktpdEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkUHJlZmVyZW5jZUtl
eSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmdMb25nOjUyNDI4ODBd
LCBXZWJLaXREZWZhdWx0RGF0YWJhc2VRdW90YUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOk5PXSwgIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgbmlsXTsKIAogICAgIC8vIFRoaXMgdmFsdWUgc2hvdWxkbid0IGV2ZXIgY2hhbmdl
LCB3aGljaCBpcyBhc3N1bWVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiBXZWJLaXRQREZEaXNw
bGF5TW9kZVByZWZlcmVuY2VLZXkgYWJvdmUKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXNQcml2YXRlLmgJKHJldmlzaW9uIDI4ODc4KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw5
IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNSZW1vdmVkTm8KIC0gKEJPT0wpYXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ7CiAtICh2b2lkKXNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkOihCT09MKWZsYWc7CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3I7CistICh2
b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9yOihCT09MKWZsYWc7CisKIC0gKEJPT0wpcmVzcGVj
dFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czsKIC0gKHZvaWQpc2V0UmVzcGVjdFN0YW5kYXJk
U3R5bGVLZXlFcXVpdmFsZW50czooQk9PTClmbGFnOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMjg4NzgpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTY1LDYgKzk2NSw3IEBAIHN0YXRpYyBib29sIGRlYnVnV2lkZ2V0ID0g
dHJ1ZTsKICAgICBzZXR0aW5ncy0+c2V0TmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmsoW3Nl
bGYgX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrXSk7CiAgICAgc2V0dGluZ3MtPnNldE5l
ZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzKFtzZWxmIF9uZWVkc0tleWJvYXJk
RXZlbnREaXNhbWJpZ3VhdGlvblF1aXJrc10pOwogICAgIHNldHRpbmdzLT5zZXREZWZhdWx0RGF0
YWJhc2VPcmlnaW5RdW90YShbcHJlZmVyZW5jZXMgZGVmYXVsdERhdGFiYXNlUXVvdGFdKTsgCisg
ICAgc2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKFtwcmVmZXJlbmNlcyB1c2VzRW5j
b2RpbmdEZXRlY3Rvcl0pOwogfQogCiBzdGF0aWMgaW5saW5lIElNUCBnZXRNZXRob2QoaWQgbywg
U0VMIHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22616</attachid>
            <date>2008-08-02 02:47:53 -0700</date>
            <delta_ts>2008-08-02 03:39:47 -0700</delta_ts>
            <desc>Updated copy of Jungshik&apos;s patch which compiles on ToT</desc>
            <filename>Updated-copy-of-Jungshik-s-patch-which-compiles-on-ToT.patch</filename>
            <type>text/plain</type>
            <size>23199</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NGFhNTExZTRlNDY5MzA2Mzc0YWJiYzIwZWRmYjQwNTNlOGJmNjcwMQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pY3UvdW5pY29kZS91Y3NkZXQuaCBiL1dlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlMmUzNAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgKQEAgLTAsMCArMSwzNTAgQEAKKy8q
CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgSW50ZXJuYXRp
b25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIGZpbGUgbmFtZTogIHVjc2Rl
dC5oCisgKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisgKiAgIGluZGVudGF0aW9uOjQKKyAqCisg
KiAgIGNyZWF0ZWQgb246IDIwMDVBdWcwNAorICogICBjcmVhdGVkIGJ5OiBBbmR5IEhlbmluZ2Vy
CisgKgorICogICBJQ1UgQ2hhcmFjdGVyIFNldCBEZXRlY3Rpb24sIEFQSSBmb3IgQworICoKKyAq
ICAgRHJhZnQgdmVyc2lvbiAxOCBPY3QgMjAwNQorICoKKyAqLworCisjaWZuZGVmIF9fVUNTREVU
X0gKKyNkZWZpbmUgX19VQ1NERVRfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKwor
I2lmICFVQ09ORklHX05PX0NPTlZFUlNJT04KKyNpbmNsdWRlICJ1bmljb2RlL3VlbnVtLmgiCisK
Ky8qKgorICogXGZpbGUgCisgKiBcYnJpZWYgQyBBUEk6IENoYXJzZXQgRGV0ZWN0aW9uIEFQSQor
ICoKKyAqIFRoaXMgQVBJIHByb3ZpZGVzIGEgZmFjaWxpdHkgZm9yIGRldGVjdGluZyB0aGUKKyAq
IGNoYXJzZXQgb3IgZW5jb2Rpbmcgb2YgY2hhcmFjdGVyIGRhdGEgaW4gYW4gdW5rbm93biB0ZXh0
IGZvcm1hdC4KKyAqIFRoZSBpbnB1dCBkYXRhIGNhbiBiZSBmcm9tIGFuIGFycmF5IG9mIGJ5dGVz
LgorICogPHA+CisgKiBDaGFyYWN0ZXIgc2V0IGRldGVjdGlvbiBpcyBhdCBiZXN0IGFuIGltcHJl
Y2lzZSBvcGVyYXRpb24uICBUaGUgZGV0ZWN0aW9uCisgKiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0
byBpZGVudGlmeSB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyaXN0
aWNzCisgKiBvZiB0aGUgYnl0ZSBkYXRhLCBidXQgdGhlIHByb2Nlc3MgaXMgcGFydGx5IHN0YXRp
c3RpY2FsIGluIG5hdHVyZSwgYW5kCisgKiB0aGUgcmVzdWx0cyBjYW4gbm90IGJlIGd1YXJhbnRl
ZWQgdG8gYWx3YXlzIGJlIGNvcnJlY3QuCisgKiA8cD4KKyAqIEZvciBiZXN0IGFjY3VyYWN5IGlu
IGNoYXJzZXQgZGV0ZWN0aW9uLCB0aGUgaW5wdXQgZGF0YSBzaG91bGQgYmUgcHJpbWFyaWx5Cisg
KiBpbiBhIHNpbmdsZSBsYW5ndWFnZSwgYW5kIGEgbWluaW11bSBvZiBhIGZldyBodW5kcmVkIGJ5
dGVzIHdvcnRoIG9mIHBsYWluIHRleHQKKyAqIGluIHRoZSBsYW5ndWFnZSBhcmUgbmVlZGVkLiAg
VGhlIGRldGVjdGlvbiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0bworICogaWdub3JlIGh0bWwgb3Ig
eG1sIHN0eWxlIG1hcmt1cCB0aGF0IGNvdWxkIG90aGVyd2lzZSBvYnNjdXJlIHRoZSBjb250ZW50
LgorICovCisgCisKK3N0cnVjdCBVQ2hhcnNldERldGVjdG9yOworLyoqCisgICogU3RydWN0dXJl
IHJlcHJlc2VudGluZyBhIGNoYXJzZXQgZGV0ZWN0b3IKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAq
LwordHlwZWRlZiBzdHJ1Y3QgVUNoYXJzZXREZXRlY3RvciBVQ2hhcnNldERldGVjdG9yOworCitz
dHJ1Y3QgVUNoYXJzZXRNYXRjaDsKKy8qKgorICAqICBPcGFxdWUgc3RydWN0dXJlIHJlcHJlc2Vu
dGluZyBhIG1hdGNoIHRoYXQgd2FzIGlkZW50aWZpZWQKKyAgKiAgZnJvbSBhIGNoYXJzZXQgZGV0
ZWN0aW9uIG9wZXJhdGlvbi4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8KK3R5cGVkZWYgc3Ry
dWN0IFVDaGFyc2V0TWF0Y2ggVUNoYXJzZXRNYXRjaDsKKworLyoqCisgICogIE9wZW4gYSBjaGFy
c2V0IGRldGVjdG9yLgorICAqCisgICogIEBwYXJhbSBzdGF0dXMgQW55IGVycm9yIGNvbmRpdGlv
bnMgb2NjdXJyaW5nIGR1cmluZyB0aGUgb3BlbgorICAqICAgICAgICAgICAgICAgIG9wZXJhdGlv
biBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqICBAcmV0dXJuIHRoZSBu
ZXdseSBvcGVuZWQgY2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8K
K1VfRFJBRlQgVUNoYXJzZXREZXRlY3RvciAqIFVfRVhQT1JUMgordWNzZGV0X29wZW4oVUVycm9y
Q29kZSAgICpzdGF0dXMpOworCisvKioKKyAgKiBDbG9zZSBhIGNoYXJzZXQgZGV0ZWN0b3IuICBB
bGwgc3RvcmFnZSBhbmQgYW55IG90aGVyIHJlc291cmNlcworICAqICAgb3duZWQgYnkgdGhpcyBj
aGFyc2V0IGRldGVjdG9yIHdpbGwgYmUgcmVsZWFzZWQuICBGYWlsdXJlIHRvCisgICogICBjbG9z
ZSBhIGNoYXJzZXQgZGV0ZWN0b3Igd2hlbiBmaW5pc2hlZCB3aXRoIGl0IGNhbiByZXN1bHQgaW4K
KyAgKiAgIG1lbW9yeSBsZWFrcyBpbiB0aGUgYXBwbGljYXRpb24uCisgICoKKyAgKiAgQHBhcmFt
IHVjc2QgIFRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIGNsb3NlZC4KKyAgKiAgQGRyYWZ0IElD
VSAzLjYKKyAgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9jbG9zZShVQ2hhcnNl
dERldGVjdG9yICp1Y3NkKTsKKworLyoqCisgICogU2V0IHRoZSBpbnB1dCBieXRlIGRhdGEgd2hv
c2UgY2hhcnNldCBpcyB0byBkZXRlY3RlZC4KKyAgKgorICAqIE93bmVyc2hpcCBvZiB0aGUgaW5w
dXQgIHRleHQgYnl0ZSBhcnJheSByZW1haW5zIHdpdGggdGhlIGNhbGxlci4KKyAgKiBUaGUgaW5w
dXQgc3RyaW5nIG11c3Qgbm90IGJlIGFsdGVyZWQgb3IgZGVsZXRlZCB1bnRpbCB0aGUgY2hhcnNl
dAorICAqIGRldGVjdG9yIGlzIGVpdGhlciBjbG9zZWQgb3IgcmVzZXQgdG8gcmVmZXIgdG8gZGlm
ZmVyZW50IGlucHV0IHRleHQuCisgICoKKyAgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFyc2V0IGRl
dGVjdG9yIHRvIGJlIHVzZWQuCisgICogQHBhcmFtIHRleHRJbiB0aGUgaW5wdXQgdGV4dCBvZiB1
bmtub3duIGVuY29kaW5nLiAgIC4KKyAgKiBAcGFyYW0gbGVuICAgIHRoZSBsZW5ndGggb2YgdGhl
IGlucHV0IHRleHQsIG9yIC0xIGlmIHRoZSB0ZXh0CisgICogICAgICAgICAgICAgICBpcyBOVUwg
dGVybWluYXRlZC4KKyAgKiBAcGFyYW0gc3RhdHVzIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSBy
ZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICoKKyAgKiBAZHJhZnQgSUNVIDMuNgor
ICAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X3NldFRleHQoVUNoYXJzZXREZXRl
Y3RvciAqdWNzZCwgY29uc3QgY2hhciAqdGV4dEluLCBpbnQzMl90IGxlbiwgVUVycm9yQ29kZSAq
c3RhdHVzKTsKKworCisvKiogU2V0IHRoZSBkZWNsYXJlZCBlbmNvZGluZyBmb3IgY2hhcnNldCBk
ZXRlY3Rpb24uCisgKiAgVGhlIGRlY2xhcmVkIGVuY29kaW5nIG9mIGFuIGlucHV0IHRleHQgaXMg
YW4gZW5jb2Rpbmcgb2J0YWluZWQKKyAqICBieSB0aGUgdXNlciBmcm9tIGFuIGh0dHAgaGVhZGVy
IG9yIHhtbCBkZWNsYXJhdGlvbiBvciBzaW1pbGFyIHNvdXJjZSB0aGF0CisgKiAgY2FuIGJlIHBy
b3ZpZGVkIGFzIGFuIGFkZGl0aW9uYWwgaGludCB0byB0aGUgY2hhcnNldCBkZXRlY3Rvci4KKyAq
CisgKiAgSG93IGFuZCB3aGV0aGVyIHRoZSBkZWNsYXJlZCBlbmNvZGluZyB3aWxsIGJlIHVzZWQg
ZHVyaW5nIHRoZQorICogIGRldGVjdGlvbiBwcm9jZXNzIGlzIFRCRC4KKyAqCisgKiBAcGFyYW0g
dWNzZCAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBAcGFyYW0gZW5j
b2RpbmcgIGFuIGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBkYXRhIG9idGFpbmVkIGZyb20KKyAq
ICAgICAgICAgICAgICAgICAgYSBoZWFkZXIgb3IgZGVjbGFyYXRpb24gb3Igb3RoZXIgc291cmNl
IG91dHNpZGUKKyAqICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ5dGUgZGF0YSBpdHNlbGYuCisg
KiBAcGFyYW0gbGVuZ3RoICAgIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kaW5nIG5hbWUsIG9yIC0x
IGlmIHRoZSBuYW1lIHN0cmluZworICogICAgICAgICAgICAgICAgICBpcyBOVUwgdGVybWluYXRl
ZC4KKyAqIEBwYXJhbSBzdGF0dXMgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVk
IGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitVX0RS
QUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfc2V0RGVjbGFyZWRFbmNvZGluZyhVQ2hhcnNldERl
dGVjdG9yICp1Y3NkLCBjb25zdCBjaGFyICplbmNvZGluZywgaW50MzJfdCBsZW5ndGgsIFVFcnJv
ckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgKiBSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCBiZXN0
IG1hdGNoZXMgdGhlIHN1cHBsaWVkIGlucHV0IGRhdGEuCisgKiAKKyAqIE5vdGUgdGhvdWdoLCB0
aGF0IGJlY2F1c2UgdGhlIGRldGVjdGlvbiAKKyAqIG9ubHkgbG9va3MgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBpbnB1dCBkYXRhLAorICogdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZXR1
cm5lZCBjaGFyc2V0IHdpbGwgZmFpbCB0byBoYW5kbGUKKyAqIHRoZSBmdWxsIHNldCBvZiBpbnB1
dCBkYXRhLgorICogPHA+CisgKiBUaGUgcmV0dXJuZWQgVUNoYXJzZXRNYXRjaCBvYmplY3QgaXMg
b3duZWQgYnkgdGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiBJdCB3aWxsIHJlbWFpbiB2YWxpZCB1
bnRpbCB0aGUgZGV0ZWN0b3IgaW5wdXQgaXMgcmVzZXQsIG9yIHVudGlsCisgKiB0aGUgZGV0ZWN0
b3IgaXMgY2xvc2VkLgorICogPHA+CisgKiBUaGUgZnVuY3Rpb24gd2lsbCBmYWlsIGlmCisgKiAg
PHVsPgorICogICAgPGxpPm5vIGNoYXJzZXQgYXBwZWFycyB0byBtYXRjaCB0aGUgZGF0YS48L2xp
PgorICogICAgPGxpPm5vIGlucHV0IHRleHQgaGFzIGJlZW4gcHJvdmlkZWQ8L2xpPgorICogIDwv
dWw+CisgKgorICogQHBhcmFtIHVjc2QgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1
c2VkLgorICogQHBhcmFtIHN0YXR1cyAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0
ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogQHJldHVybiAgICAgICAgICBhIFVDaGFyc2V0
TWF0Y2ggIHJlcHJlc2VudGluZyB0aGUgYmVzdCBtYXRjaGluZyBjaGFyc2V0LAorICogICAgICAg
ICAgICAgICAgICBvciBOVUxMIGlmIG5vIGNoYXJzZXQgbWF0Y2hlcyB0aGUgYnl0ZSBkYXRhLgor
ICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgVUNoYXJzZXRNYXRjaCAq
IFVfRVhQT1JUMgordWNzZGV0X2RldGVjdChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBVRXJyb3JD
b2RlICpzdGF0dXMpOworICAgIAorCisvKioKKyAqICBGaW5kIGFsbCBjaGFyc2V0IG1hdGNoZXMg
dGhhdCBhcHBlYXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBpbnB1dCwKKyAqICByZXR1cm5p
bmcgYW4gYXJyYXkgb2YgcmVzdWx0cy4gIFRoZSByZXN1bHRzIGFyZSBvcmRlcmVkIHdpdGggdGhl
CisgKiAgYmVzdCBxdWFsaXR5IG1hdGNoIGZpcnN0LgorICoKKyAqICBCZWNhdXNlIHRoZSBkZXRl
Y3Rpb24gb25seSBsb29rcyBhdCBhIGxpbWl0ZWQgYW1vdW50IG9mIHRoZQorICogIGlucHV0IGJ5
dGUgZGF0YSwgc29tZSBvZiB0aGUgcmV0dXJuZWQgY2hhcnNldHMgbWF5IGZhaWwgdG8gaGFuZGxl
CisgKiAgdGhlIGFsbCBvZiBpbnB1dCBkYXRhLgorICogIDxwPgorICogIFRoZSByZXR1cm5lZCBV
Q2hhcnNldE1hdGNoIG9iamVjdHMgYXJlIG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLgor
ICogIFRoZXkgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGRldGVjdG9yIGlzIGNsb3NlZCBv
ciBtb2RpZmllZAorICogIAorICogPHA+CisgKiBSZXR1cm4gYW4gZXJyb3IgaWYgCisgKiAgPHVs
PgorICogICAgPGxpPm5vIGNoYXJzZXRzIGFwcGVhciB0byBtYXRjaCB0aGUgaW5wdXQgZGF0YS48
L2xpPgorICogICAgPGxpPm5vIGlucHV0IHRleHQgaGFzIGJlZW4gcHJvdmlkZWQ8L2xpPgorICog
IDwvdWw+CisgKiAKKyAqIEBwYXJhbSB1Y3NkICAgICAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9y
IHRvIGJlIHVzZWQuCisgKiBAcGFyYW0gbWF0Y2hlc0ZvdW5kICBwb2ludGVyIHRvIGEgdmFyaWFi
bGUgdGhhdCB3aWxsIGJlIHNldCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIG51bWJl
ciBvZiBjaGFyc2V0cyBpZGVudGlmaWVkIHRoYXQgYXJlIGNvbnNpc3RlbnQgd2l0aAorICogICAg
ICAgICAgICAgICAgICAgICAgdGhlIGlucHV0IGRhdGEuICBPdXRwdXQgb25seS4KKyAqIEBwYXJh
bSBzdGF0dXMgICAgICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgKiBAcmV0dXJuICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4g
YXJyYXkgb2YgcG9pbnRlcnMgdG8gVUNoYXJTZXRNYXRjaCBvYmplY3RzLgorICogICAgICAgICAg
ICAgICAgICAgICAgVGhpcyBhcnJheSwgYW5kIHRoZSBVQ2hhclNldE1hdGNoIGluc3RhbmNlcyB0
byB3aGljaCBpdCByZWZlcnMsCisgKiAgICAgICAgICAgICAgICAgICAgICBhcmUgb3duZWQgYnkg
dGhlIFVDaGFyc2V0RGV0ZWN0b3IsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbAorICogICAg
ICAgICAgICAgICAgICAgICAgdGhlIGRldGVjdG9yIGlzIGNsb3NlZCBvciBtb2RpZmllZC4KKyAq
IEBkcmFmdCBJQ1UgMy40CisgKi8KK1VfRFJBRlQgY29uc3QgVUNoYXJzZXRNYXRjaCAqKiBVX0VY
UE9SVDIKK3Vjc2RldF9kZXRlY3RBbGwoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgaW50MzJfdCAq
bWF0Y2hlc0ZvdW5kLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgKiAgR2V0IHRo
ZSBuYW1lIG9mIHRoZSBjaGFyc2V0IHJlcHJlc2VudGVkIGJ5IGEgVUNoYXJzZXRNYXRjaC4KKyAq
CisgKiAgVGhlIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm5lZCBuYW1lIHN0cmluZyBpcyBvd25lZCBi
eSB0aGUKKyAqICBVQ2hhcnNldE1hdGNoLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgd2hpbGUgdGhl
IFVDaGFyc2V0TWF0Y2gKKyAqICBpcyB2YWxpZC4KKyAqCisgKiAgVGhlIG5hbWUgcmV0dXJuZWQg
aXMgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZSBJQ1UgY29udmVyc2lvbiBBUElzLgorICoKKyAq
ICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0
YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJp
YWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgY2hhcnNl
dC4KKyAqCisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBjaGFyICogVV9F
WFBPUlQyCit1Y3NkZXRfZ2V0TmFtZShjb25zdCBVQ2hhcnNldE1hdGNoICp1Y3NtLCBVRXJyb3JD
b2RlICpzdGF0dXMpOworCisvKioKKyAqICBHZXQgYSBjb25maWRlbmNlIG51bWJlciBmb3IgdGhl
IHF1YWxpdHkgb2YgdGhlIG1hdGNoIG9mIHRoZSBieXRlCisgKiAgZGF0YSB3aXRoIHRoZSBjaGFy
c2V0LiAgQ29uZmlkZW5jZSBudW1iZXJzIHJhbmdlIGZyb20gemVybyB0byAxMDAsCisgKiAgd2l0
aCAxMDAgcmVwcmVzZW50aW5nIGNvbXBsZXRlIGNvbmZpZGVuY2UgYW5kIHplcm8gcmVwcmVzZW50
aW5nCisgKiAgbm8gY29uZmlkZW5jZS4KKyAqCisgKiAgVGhlIGNvbmZpZGVuY2UgdmFsdWVzIGFy
ZSBzb21ld2hhdCBhcmJpdHJhcnkuICBUaGV5IGRlZmluZSBhbgorICogIGFuIG9yZGVyaW5nIHdp
dGhpbiB0aGUgcmVzdWx0cyBmb3IgYW55IHNpbmdsZSBkZXRlY3Rpb24gb3BlcmF0aW9uCisgKiAg
YnV0IGFyZSBub3QgZ2VuZXJhbGx5IGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgcmVzdWx0cyBmb3Ig
ZGlmZmVyZW50IGlucHV0LgorICoKKyAqICBBIGNvbmZpZGVuY2UgdmFsdWUgb2YgdGVuIGRvZXMg
aGF2ZSBhIGdlbmVyYWwgbWVhbmluZyAtIGl0IGlzIHVzZWQKKyAqICBmb3IgY2hhcnNldHMgdGhh
dCBjYW4gcmVwcmVzZW50IHRoZSBpbnB1dCBkYXRhLCBidXQgZm9yIHdoaWNoIHRoZXJlCisgKiAg
aXMgbm8gb3RoZXIgaW5kaWNhdGlvbiB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhlIGNoYXJzZXQgaXMg
dGhlIGNvcnJlY3Qgb25lLgorICogIFB1cmUgNyBiaXQgQVNDSUkgZGF0YSwgZm9yIGV4YW1wbGUs
IGlzIGNvbXBhdGlibGUgd2l0aCBhCisgKiAgZ3JlYXQgbWFueSBjaGFyc2V0cywgbW9zdCBvZiB3
aGljaCB3aWxsIGFwcGVhciBhcyBwb3NzaWJsZSBtYXRjaGVzCisgKiAgd2l0aCBhIGNvbmZpZGVu
Y2Ugb2YgMTAuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVj
dC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQg
YmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIEEgY29uZmlkZW5jZSBu
dW1iZXIgZm9yIHRoZSBjaGFyc2V0IG1hdGNoLgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICov
CitVX0RSQUZUIGludDMyX3QgVV9FWFBPUlQyCit1Y3NkZXRfZ2V0Q29uZmlkZW5jZShjb25zdCBV
Q2hhcnNldE1hdGNoICp1Y3NtLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqICBHZXQg
dGhlIFJGQyAzMDY2IGNvZGUgZm9yIHRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgZGF0YS4KKyAq
CisgKiAgVGhlIENoYXJzZXQgRGV0ZWN0aW9uIHNlcnZpY2UgaXMgaW50ZW5kZWQgcHJpbWFyaWx5
IGZvciBkZXRlY3RpbmcKKyAqICBjaGFyc2V0cywgbm90IGxhbmd1YWdlLiAgRm9yIHNvbWUsIGJ1
dCBub3QgYWxsLCBjaGFyc2V0cywgYSBsYW5ndWFnZSBpcworICogIGlkZW50aWZpZWQgYXMgYSBi
eXByb2R1Y3Qgb2YgdGhlIGRldGVjdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBpcyB3aGF0CisgKiAg
aXMgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiAgQ0FVVElPTjoKKyAqICAgIDEu
ICBMYW5ndWFnZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBpbnB1dCBkYXRhIGVu
Y29kZWQgaW4KKyAqICAgICAgICBhbGwgY2hhcnNldHMuIEluIHBhcnRpY3VsYXIsIG5vIGxhbmd1
YWdlIGlzIGlkZW50aWZpZWQKKyAqICAgICAgICBmb3IgVVRGLTggaW5wdXQgZGF0YS4KKyAqCisg
KiAgICAyLiAgQ2xvc2VseSByZWxhdGVkIGxhbmd1YWdlcyBtYXkgc29tZXRpbWVzIGJlIGNvbmZ1
c2VkLgorICoKKyAqICBJZiBtb3JlIGFjY3VyYXRlIGxhbmd1YWdlIGRldGVjdGlvbiBpcyByZXF1
aXJlZCwgYSBsaW5ndWlzdGljCisgKiAgYW5hbHlzaXMgcGFja2FnZSBzaG91bGQgYmUgdXNlZC4K
KyAqCisgKiAgVGhlIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm5lZCBuYW1lIHN0cmluZyBpcyBvd25l
ZCBieSB0aGUKKyAqICBVQ2hhcnNldE1hdGNoLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgd2hpbGUg
dGhlIFVDaGFyc2V0TWF0Y2gKKyAqICBpcyB2YWxpZC4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAg
VGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBj
b25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVy
biAgICAgICAgVGhlIFJGQyAzMDY2IGNvZGUgZm9yIHRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQg
ZGF0YSwgb3IKKyAqICAgICAgICAgICAgICAgICBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGxhbmd1
YWdlIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICov
CitVX0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vjc2RldF9nZXRMYW5ndWFnZShjb25z
dCBVQ2hhcnNldE1hdGNoICp1Y3NtLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICAq
ICBHZXQgdGhlIGVudGlyZSBpbnB1dCB0ZXh0IGFzIGEgVUNoYXIgc3RyaW5nLCBwbGFjaW5nIGl0
IGludG8KKyAgKiAgYSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyLiAgQSB0ZXJtaW5hdGluZworICAq
ICBOVUwgY2hhcmFjdGVyIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1ZmZlciBpZiBzcGFjZSBp
cyBhdmFpbGFibGUuCisgICoKKyAgKiAgVGhlIG51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIG91dHB1
dCBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgICogIE5VTCwgaXMgcmV0
dXJuZWQuIAorICAqCisgICogIElmIHRoZSBzdXBwbGllZCBidWZmZXIgaXMgc21hbGxlciB0aGFu
IHJlcXVpcmVkIHRvIGhvbGQgdGhlIG91dHB1dCwKKyAgKiAgdGhlIGNvbnRlbnRzIG9mIHRoZSBi
dWZmZXIgYXJlIHVuZGVmaW5lZC4gIFRoZSBmdWxsIG91dHB1dCBzdHJpbmcgbGVuZ3RoCisgICog
IChpbiBVQ2hhcnMpIGlzIHJldHVybmVkIGFzIGFsd2F5cywgYW5kIGNhbiBiZSB1c2VkIHRvIGFs
bG9jYXRlIGEgYnVmZmVyCisgICogIG9mIHRoZSBjb3JyZWN0IHNpemUuCisgICoKKyAgKgorICAq
IEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAgKiBAcGFyYW0gYnVm
ICAgICBBIFVDaGFyIGJ1ZmZlciB0byBiZSBmaWxsZWQgd2l0aCB0aGUgY29udmVydGVkIHRleHQg
ZGF0YS4KKyAgKiBAcGFyYW0gY2FwICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIGJ1ZmZlciBpbiBV
Q2hhcnMuCisgICogQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9y
dGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiBAcmV0dXJuICAgICAgICBUaGUgbnVtYmVy
IG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZy4KKyAgKgorICAqIEBkcmFmdCBJQ1UgMy42
CisgICovCitVX0RSQUZUICBpbnQzMl90IFVfRVhQT1JUMgordWNzZGV0X2dldFVDaGFycyhjb25z
dCBVQ2hhcnNldE1hdGNoICp1Y3NtLAorICAgICAgICAgICAgICAgICBVQ2hhciAqYnVmLCBpbnQz
Ml90IGNhcCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisKKy8qKgorICAqICBHZXQgYW4gaXRl
cmF0b3Igb3ZlciB0aGUgc2V0IG9mIGFsbCBkZXRlY3RhYmxlIGNoYXJzZXRzIC0gCisgICogIG92
ZXIgdGhlIGNoYXJzZXRzIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjaGFyc2V0IGRldGVjdGlvbgor
ICAqICBzZXJ2aWNlLgorICAqCisgICogIFRoZSByZXR1cm5lZCBVRW51bWVyYXRpb24gcHJvdmlk
ZXMgYWNjZXNzIHRvIHRoZSBuYW1lcyBvZgorICAqICB0aGUgY2hhcnNldHMuCisgICoKKyAgKiAg
VGhlIHN0YXRlIG9mIHRoZSBDaGFyc2V0IGRldGVjdG9yIHRoYXQgaXMgcGFzc2VkIGluIGRvZXMg
bm90CisgICogIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24sIGJ1dCByZXF1aXJp
bmcgYSB2YWxpZCwgb3BlbgorICAqICBjaGFyc2V0IGRldGVjdG9yIGFzIGEgcGFyYW1ldGVyIGlu
c3VyZXMgdGhhdCB0aGUgY2hhcnNldCBkZXRlY3Rpb24KKyAgKiAgc2VydmljZSBoYXMgYmVlbiBz
YWZlbHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlIHJlcXVpcmVkIGRldGVjdGlvbgorICAqICBk
YXRhIGlzIGF2YWlsYWJsZS4KKyAgKgorICAqICBAcGFyYW0gdWNzZCBhIENoYXJzZXQgZGV0ZWN0
b3IuCisgICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRl
ZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogIEByZXR1cm4gYW4gaXRlcmF0b3IgcHJvdmlk
aW5nIGFjY2VzcyB0byB0aGUgZGV0ZWN0YWJsZSBjaGFyc2V0IG5hbWVzLgorICAqICBAZHJhZnQg
SUNVIDMuNgorICAqLworCitVX0RSQUZUICBVRW51bWVyYXRpb24gKiBVX0VYUE9SVDIKK3Vjc2Rl
dF9nZXRBbGxEZXRlY3RhYmxlQ2hhcnNldHMoY29uc3QgVUNoYXJzZXREZXRlY3RvciAqdWNzZCwg
IFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgICogIFRlc3Qgd2hldGhlciBpbnB1dCBm
aWx0ZXJpbmcgaXMgZW5hYmxlZCBmb3IgdGhpcyBjaGFyc2V0IGRldGVjdG9yLgorICAqICBJbnB1
dCBmaWx0ZXJpbmcgcmVtb3ZlcyB0ZXh0IHRoYXQgYXBwZWFycyB0byBiZSBIVE1MIG9yIHhtbAor
ICAqICBtYXJrdXAgZnJvbSB0aGUgaW5wdXQgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb2RlIHBhZ2Ug
ZGV0ZWN0aW9uCisgICogIGhldXJpc3RpY3MuCisgICoKKyAgKiAgQHBhcmFtIHVjc2QgIFRoZSBj
aGFyc2V0IGRldGVjdG9yIHRvIGNoZWNrLgorICAqICBAcmV0dXJuIFRSVUUgaWYgZmlsdGVyaW5n
IGlzIGVuYWJsZWQuCisgICogIEBkcmFmdCBJQ1UgMy40CisgICovCitVX0RSQUZUICBVQm9vbCBV
X0VYUE9SVDIKK3Vjc2RldF9pc0lucHV0RmlsdGVyRW5hYmxlZChjb25zdCBVQ2hhcnNldERldGVj
dG9yICp1Y3NkKTsKKworCisvKioKKyAqIEVuYWJsZSBmaWx0ZXJpbmcgb2YgaW5wdXQgdGV4dC4g
SWYgZmlsdGVyaW5nIGlzIGVuYWJsZWQsCisgKiB0ZXh0IHdpdGhpbiBhbmdsZSBicmFja2V0cyAo
IjwiIGFuZCAiPiIpIHdpbGwgYmUgcmVtb3ZlZAorICogYmVmb3JlIGRldGVjdGlvbiwgd2hpY2gg
d2lsbCByZW1vdmUgbW9zdCBIVE1MIG9yIHhtbCBtYXJrdXAuCisgKgorICogQHBhcmFtIHVjc2Qg
ICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSBtb2RpZmllZC4KKyAqIEBwYXJhbSBmaWx0ZXIg
PGNvZGU+dHJ1ZTwvY29kZT4gdG8gZW5hYmxlIGlucHV0IHRleHQgZmlsdGVyaW5nLgorICogQHJl
dHVybiBUaGUgcHJldmlvdXMgc2V0dGluZy4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitV
X0RSQUZUICBVQm9vbCBVX0VYUE9SVDIKK3Vjc2RldF9lbmFibGVJbnB1dEZpbHRlcihVQ2hhcnNl
dERldGVjdG9yICp1Y3NkLCBVQm9vbCBmaWx0ZXIpOworCisjZW5kaWYKKyNlbmRpZiAgIC8qIF9f
VUNTREVUX0ggKi8KKworCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzAwYTdiYS4uZmMyMDRm
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtOTkyLDcgKzk5MiwxMCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjp3cml0ZShjb25zdCBjaGFyKiBzdHIsIGludCBsZW4sIGJvb2wgZmx1c2gpCiAgICAg
CiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9m
cmFtZS0+c2V0dGluZ3MoKTsKLSAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKyAgICAgICAgaWYgKHNldHRpbmdzKQor
ICAgICAgICAgICAgbV9kZWNvZGVyID0gbmV3IFRleHRSZXNvdXJjZURlY29kZXIobV9yZXNwb25z
ZU1JTUVUeXBlLCBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSwgc2V0dGluZ3Mt
PnVzZXNFbmNvZGluZ0RldGVjdG9yKCkpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgbV9k
ZWNvZGVyID0gbmV3IFRleHRSZXNvdXJjZURlY29kZXIobV9yZXNwb25zZU1JTUVUeXBlLCBTdHJp
bmcoKSk7CiAgICAgICAgIGlmIChtX2VuY29kaW5nLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
RnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAg
ICAgIGlmIChwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzKG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkp
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgYi9X
ZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAppbmRleCA5NzllZTk1Li4wZGIz
MjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAor
KysgYi9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcApAQCAtMjgsNiArMjgs
OCBAQAogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+
CiAKKyNpbmNsdWRlIDx1bmljb2RlL3Vjc2RldC5oPgorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMTksNyArMzIxLDcgQEAgY29uc3QgVGV4dEVuY29k
aW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWZhdWx0RW5jb2RpbmcoQ29udGVudFR5cGUgY29u
dGVudFR5cGUKICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0
UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJl
c291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2Vz
RW5jb2RpbmdEZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5
cGUobWltZVR5cGUpKQogICAgICwgbV9kZWNvZGVyKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRU
eXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcpKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVu
Y29kaW5nKQpAQCAtMzI3LDYgKzMyOSw3IEBAIFRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNv
dXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kCiAgICAg
LCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9ySGVhZENo
YXJzZXQoZmFsc2UpCiAgICAgLCBtX3Nhd0Vycm9yKGZhbHNlKQorICAgICwgbV91c2VzRW5jb2Rp
bmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsKIH0KIApAQCAtNzQ4LDYgKzc1MSwy
OSBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OmRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKICAgICB9CiB9CiAKK3ZvaWQgVGV4dFJlc291cmNl
RGVjb2Rlcjo6ZGV0ZWN0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKK3sK
KyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVj
dG9yKiBkZXRlY3RvciA9IHVjc2RldF9vcGVuKCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUo
c3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihk
ZXRlY3RvciwgdHJ1ZSk7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVjc2RldF9z
ZXRUZXh0KGRldGVjdG9yLCBkYXRhLCBzdGF0aWNfY2FzdDxpbnQzMl90PihsZW4pLCAmc3RhdHVz
KTsgCisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAg
c3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKm1hdGNoID0g
dWNzZGV0X2RldGVjdChkZXRlY3RvciwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAg
IGNvbnN0IGNoYXIqIGVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2gsICZzdGF0dXMpOwor
ICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgc2V0RW5jb2RpbmcoZW5jb2Rpbmcs
IEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKK2ZhaWw6CisgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9y
KTsKK30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuKQogewogICAgIGlmICghbV9jaGVja2VkRm9yQk9NKQpAQCAtNzY3LDYg
Kzc5Myw5IEBAIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbikKICAgICAvLyBGSVhNRTogSXQgc2VlbXMgd3JvbmcgdG8gY2hhbmdl
IG91ciBlbmNvZGluZyBkb3duc3RyZWFtIGFmdGVyIHdlIGhhdmUgYWxyZWFkeSBkb25lIHNvbWUg
ZGVjb2RpbmcuCiAgICAgaWYgKG1fc291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3Nv
dXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGluZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkK
ICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2UgaWYg
KG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IgJiYgbV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nKQor
ICAgICAgICAvLyBlbmNvZGluZyBkZXRlY3RvciBpcyB1c2VkIG9ubHkgd2hlbiBubyBvdGhlciBp
bmZvcm1hdGlvbiBpcyBhdmFpbGFibGUKKyAgICAgICAgZGV0ZWN0RW5jb2RpbmcoZGF0YSwgbGVu
KTsKIAogICAgIEFTU0VSVChlbmNvZGluZygpLmlzVmFsaWQoKSk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaCBiL1dlYkNvcmUvbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuaAppbmRleCA4YmJlODVlLi43ZWE3YzAyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5oCkBAIC0zOSw5ICszOSw5IEBAIHB1YmxpYzoKICAgICAgICAgVXNl
ckNob3NlbkVuY29kaW5nCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNv
dXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBi
b29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHRSZXNvdXJjZURlY29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGlu
ZykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRSZXNvdXJjZURlY29kZXIobWlt
ZVR5cGUsIGRlZmF1bHRFbmNvZGluZywgdXNlc0VuY29kaW5nRGV0ZWN0b3IpKTsKICAgICB9CiAg
ICAgflRleHRSZXNvdXJjZURlY29kZXIoKTsKIApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0
ZToKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29k
aW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsKIAogICAgIGVudW0gQ29udGVudFR5cGUg
eyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBsYWluVGV4dCBpcyBlcXVpdmFsZW50
IHRvIGRpcmVjdGx5IHVzaW5nIFRleHREZWNvZGVyLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBk
ZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKQEAgLTY0LDYgKzY0
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9yQ1NTQ2hhcnNldChjb25zdCBjaGFyKiwg
c2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7CiAgICAgYm9vbCBjaGVja0ZvckhlYWRD
aGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsKICAg
ICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAg
dm9pZCBkZXRlY3RFbmNvZGluZyhjb25zdCBjaGFyKiwgc2l6ZV90KTsKIAogICAgIENvbnRlbnRU
eXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dERlY29kZXIgbV9kZWNvZGVyOwpAQCAtNzMsNiAr
NzQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldDsKICAgICBi
b29sIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0OwogICAgIGJvb2wgbV9zYXdFcnJvcjsKKyAgICBi
b29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwIGIvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA2MWEx
Y2VmLi4xYTA2ZDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTc5LDYgKzc5LDcgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3JhbmdlTXV0YXRpb25EaXNhYmxlZEZvck9sZEFw
cGxlTWFpbChmYWxzZSkKICAgICAsIG1fc2hvdWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzKGZhbHNl
KQogICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUodHJ1ZSkKKyAgICAsIG1f
dXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhh
dmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIAog
ICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1c2UgaXQuCkBAIC0zODIsNCArMzgzLDkgQEAg
dm9pZCBTZXR0aW5nczo6c2V0RW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlKGJvb2wgZW5m
b3JjZUNTU01JTUVUeXBlSW5TdHJpY3QKICAgICBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0
TW9kZSA9IGVuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZTsKIH0KIAordm9pZCBTZXR0aW5n
czo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKK3sK
KyAgICBtX3VzZXNFbmNvZGluZ0RldGVjdG9yID0gdXNlc0VuY29kaW5nRGV0ZWN0b3I7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oIGIvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKaW5kZXggMWI0MjVmMi4uMGYyMGMzNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgKQEAgLTk3LDYgKzk3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVmYXVsdFRleHRFbmNvZGluZ05hbWU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNlc0VuY29kaW5n
RGV0ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmKTsKICAgICAg
ICAgY29uc3QgS1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQpAQCAtMjI2LDYgKzIyOSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3VwZGF0ZXNXaGVuT2Zmc2NyZWVuIDogMTsKICAgICAg
ICAgYm9vbCBtX3pvb21zVGV4dE9ubHkgOiAxOwogICAgICAgICBib29sIG1fZW5mb3JjZUNTU01J
TUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVj
dG9yIDogMTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5kZXggNWU5MTE2OC4uZTMzMWYy
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApA
QCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRG
b250U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZp
bmUgV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVm
YXVsdFRleHRFbmNvZGluZ05hbWUiCisjZGVmaW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9y
UHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJL
aXRVc2VyU3R5bGVTaGVldEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hl
ZXRFbmFibGVkUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvblByZWZlcmVuY2VLZXkgQCJXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5j
ZUtleSIKICNkZWZpbmUgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkg
QCJXZWJLaXRTaG91bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSIKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCAzOTUzNDMyLi4xYmJkZjdkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC0zMDcsNiArMzA3LDcgQEAgc3RhdGljIFdlYkNhY2hl
TW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdW5kbGUodm9pZCkKICAgICAgICAgQCIxNiIsICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5LAog
ICAgICAgICBAIjEzIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGaXhl
ZEZvbnRTaXplUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCJJU08tODg1OS0xIiwgICAgICAgICAg
ICAgICAgICBXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZVByZWZlcmVuY2VLZXksCisgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VXNlc0VuY29kaW5nRGV0
ZWN0b3JQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCAgIFdlYktpdFVzZXJTdHlsZVNoZWV0RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEAi
IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlv
blByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAg
V2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXksCmRpZmYgLS1naXQgYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggNmE0YzVjOC4uOGFkOWNiNyAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBi
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtNTAsNiArNTAs
OSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vdGlmaWNhdGlvbjsK
IC0gKEJPT0wpYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ7CiAtICh2b2lkKXNldEF1dGhvckFu
ZFVzZXJTdHlsZXNFbmFibGVkOihCT09MKWZsYWc7CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0
ZWN0b3I7CistICh2b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9yOihCT09MKWZsYWc7CisKIC0g
KEJPT0wpcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czsKIC0gKHZvaWQpc2V0UmVz
cGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czooQk9PTClmbGFnOwogCmRpZmYgLS1naXQg
YS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCmluZGV4IDIzNDc0ZDEuLmY1ZjJhZmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC05
OTAsNiArOTkwLDcgQEAgc3RhdGljIGJvb2wgZGVidWdXaWRnZXQgPSB0cnVlOwogICAgIHNldHRp
bmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShbcHJlZmVyZW5jZXMgZGVmYXVsdEZpeGVkRm9u
dFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKFtwcmVmZXJlbmNlcyBk
ZWZhdWx0Rm9udFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUoW3ByZWZlcmVuY2VzIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lXSk7CisgICAgc2V0dGluZ3Mt
PnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKFtwcmVmZXJlbmNlcyB1c2VzRW5jb2RpbmdEZXRlY3Rv
cl0pOwogICAgIHNldHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgZmFu
dGFzeUZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KFtwcmVm
ZXJlbmNlcyBmaXhlZEZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rm9yY2VGVFBEaXJl
Y3RvcnlMaXN0aW5ncyhbcHJlZmVyZW5jZXMgX2ZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3NdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22617</attachid>
            <date>2008-08-02 03:39:37 -0700</date>
            <delta_ts>2008-08-29 11:08:19 -0700</delta_ts>
            <desc>Updated copy of Jungshik&apos;s patch which compiles and links on ToT</desc>
            <filename>Updated-copy-of-Jungshik-s-patch-which-compiles-and-links-on-ToT.patch</filename>
            <type>text/plain</type>
            <size>24880</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Mzk0NTU0MDc0NzgzOTkxM2M1YjI4NTM0NjAxMDY5YTY2ZGMyMTM3YwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGIz
MmUwMzEuLmQ0NmQzZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTM5Miw3ICszOTIsNyBAQCBfX1pON1dlYkNv
cmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI5c2VsZWN0QWxsRXYKIF9fWk43V2ViQ29yZTE5U2VsZWN0
aW9uQ29udHJvbGxlckMxRVBOU181RnJhbWVFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VE
ZWNvZGVyNWZsdXNoRXYKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjZkZWNvZGVF
UEtjbQotX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOU182U3RyaW5nRVJL
TlNfMTJUZXh0RW5jb2RpbmdFCitfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJDMUVS
S05TXzZTdHJpbmdFUktOU18xMlRleHRFbmNvZGluZ0ViCiBfX1pON1dlYkNvcmUxOVRleHRSZXNv
dXJjZURlY29kZXJEMUV2CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRF
eHBlY3RlZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xs
ZXIxNmNsZWFyQ29udGV4dE1lbnVFdgpAQCAtNTc1LDYgKzU3NSw3IEBAIF9fWk43V2ViQ29yZThT
ZXR0aW5nczIyc2V0U2hvd3NVUkxzSW5Ub29sVGlwc0ViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3My
M3NldERlZmF1bHRGaXhlZEZvbnRTaXplRWkKIF9fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0RWRp
dGFibGVMaW5rQmVoYXZpb3JFTlNfMjBFZGl0YWJsZUxpbmtCZWhhdmlvckUKIF9fWk43V2ViQ29y
ZThTZXR0aW5nczIzc2V0VXBkYXRlc1doZW5PZmZzY3JlZW5FYgorX19aTjdXZWJDb3JlOFNldHRp
bmdzMjNzZXRVc2VzRW5jb2RpbmdEZXRlY3RvckViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNl
dFpvb21zVGV4dE9ubHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjRzZXRUZXh0QXJlYXNBcmVS
ZXNpemFibGVFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjVzZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkRWIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmggYi9XZWJDb3Jl
L2ljdS91bmljb2RlL3Vjc2RldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI3ZTJlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5o
CkBAIC0wLDAgKzEsMzUwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQ29weXJpZ2h0IChD
KSAyMDA1LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqICAgQ29ycG9y
YXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
ICogICBmaWxlIG5hbWU6ICB1Y3NkZXQuaAorICogICBlbmNvZGluZzogICBVUy1BU0NJSQorICog
ICBpbmRlbnRhdGlvbjo0CisgKgorICogICBjcmVhdGVkIG9uOiAyMDA1QXVnMDQKKyAqICAgY3Jl
YXRlZCBieTogQW5keSBIZW5pbmdlcgorICoKKyAqICAgSUNVIENoYXJhY3RlciBTZXQgRGV0ZWN0
aW9uLCBBUEkgZm9yIEMKKyAqCisgKiAgIERyYWZ0IHZlcnNpb24gMTggT2N0IDIwMDUKKyAqCisg
Ki8KKworI2lmbmRlZiBfX1VDU0RFVF9ICisjZGVmaW5lIF9fVUNTREVUX0gKKworI2luY2x1ZGUg
InVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19DT05WRVJTSU9OCisjaW5jbHVk
ZSAidW5pY29kZS91ZW51bS5oIgorCisvKioKKyAqIFxmaWxlIAorICogXGJyaWVmIEMgQVBJOiBD
aGFyc2V0IERldGVjdGlvbiBBUEkKKyAqCisgKiBUaGlzIEFQSSBwcm92aWRlcyBhIGZhY2lsaXR5
IGZvciBkZXRlY3RpbmcgdGhlCisgKiBjaGFyc2V0IG9yIGVuY29kaW5nIG9mIGNoYXJhY3RlciBk
YXRhIGluIGFuIHVua25vd24gdGV4dCBmb3JtYXQuCisgKiBUaGUgaW5wdXQgZGF0YSBjYW4gYmUg
ZnJvbSBhbiBhcnJheSBvZiBieXRlcy4KKyAqIDxwPgorICogQ2hhcmFjdGVyIHNldCBkZXRlY3Rp
b24gaXMgYXQgYmVzdCBhbiBpbXByZWNpc2Ugb3BlcmF0aW9uLiAgVGhlIGRldGVjdGlvbgorICog
cHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8gaWRlbnRpZnkgdGhlIGNoYXJzZXQgdGhhdCBiZXN0IG1h
dGNoZXMgdGhlIGNoYXJhY3RlcmlzdGljcworICogb2YgdGhlIGJ5dGUgZGF0YSwgYnV0IHRoZSBw
cm9jZXNzIGlzIHBhcnRseSBzdGF0aXN0aWNhbCBpbiBuYXR1cmUsIGFuZAorICogdGhlIHJlc3Vs
dHMgY2FuIG5vdCBiZSBndWFyYW50ZWVkIHRvIGFsd2F5cyBiZSBjb3JyZWN0LgorICogPHA+Cisg
KiBGb3IgYmVzdCBhY2N1cmFjeSBpbiBjaGFyc2V0IGRldGVjdGlvbiwgdGhlIGlucHV0IGRhdGEg
c2hvdWxkIGJlIHByaW1hcmlseQorICogaW4gYSBzaW5nbGUgbGFuZ3VhZ2UsIGFuZCBhIG1pbmlt
dW0gb2YgYSBmZXcgaHVuZHJlZCBieXRlcyB3b3J0aCBvZiBwbGFpbiB0ZXh0CisgKiBpbiB0aGUg
bGFuZ3VhZ2UgYXJlIG5lZWRlZC4gIFRoZSBkZXRlY3Rpb24gcHJvY2VzcyB3aWxsIGF0dGVtcHQg
dG8KKyAqIGlnbm9yZSBodG1sIG9yIHhtbCBzdHlsZSBtYXJrdXAgdGhhdCBjb3VsZCBvdGhlcndp
c2Ugb2JzY3VyZSB0aGUgY29udGVudC4KKyAqLworIAorCitzdHJ1Y3QgVUNoYXJzZXREZXRlY3Rv
cjsKKy8qKgorICAqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBjaGFyc2V0IGRldGVjdG9yCisg
ICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK3R5cGVkZWYgc3RydWN0IFVDaGFyc2V0RGV0ZWN0b3Ig
VUNoYXJzZXREZXRlY3RvcjsKKworc3RydWN0IFVDaGFyc2V0TWF0Y2g7CisvKioKKyAgKiAgT3Bh
cXVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBtYXRjaCB0aGF0IHdhcyBpZGVudGlmaWVkCisg
ICogIGZyb20gYSBjaGFyc2V0IGRldGVjdGlvbiBvcGVyYXRpb24uCisgICogIEBkcmFmdCBJQ1Ug
My42CisgICovCit0eXBlZGVmIHN0cnVjdCBVQ2hhcnNldE1hdGNoIFVDaGFyc2V0TWF0Y2g7CisK
Ky8qKgorICAqICBPcGVuIGEgY2hhcnNldCBkZXRlY3Rvci4KKyAgKgorICAqICBAcGFyYW0gc3Rh
dHVzIEFueSBlcnJvciBjb25kaXRpb25zIG9jY3VycmluZyBkdXJpbmcgdGhlIG9wZW4KKyAgKiAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJs
ZS4KKyAgKiAgQHJldHVybiB0aGUgbmV3bHkgb3BlbmVkIGNoYXJzZXQgZGV0ZWN0b3IuCisgICog
IEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIFVDaGFyc2V0RGV0ZWN0b3IgKiBVX0VYUE9S
VDIKK3Vjc2RldF9vcGVuKFVFcnJvckNvZGUgICAqc3RhdHVzKTsKKworLyoqCisgICogQ2xvc2Ug
YSBjaGFyc2V0IGRldGVjdG9yLiAgQWxsIHN0b3JhZ2UgYW5kIGFueSBvdGhlciByZXNvdXJjZXMK
KyAgKiAgIG93bmVkIGJ5IHRoaXMgY2hhcnNldCBkZXRlY3RvciB3aWxsIGJlIHJlbGVhc2VkLiAg
RmFpbHVyZSB0bworICAqICAgY2xvc2UgYSBjaGFyc2V0IGRldGVjdG9yIHdoZW4gZmluaXNoZWQg
d2l0aCBpdCBjYW4gcmVzdWx0IGluCisgICogICBtZW1vcnkgbGVha3MgaW4gdGhlIGFwcGxpY2F0
aW9uLgorICAqCisgICogIEBwYXJhbSB1Y3NkICBUaGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSBj
bG9zZWQuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQy
Cit1Y3NkZXRfY2xvc2UoVUNoYXJzZXREZXRlY3RvciAqdWNzZCk7CisKKy8qKgorICAqIFNldCB0
aGUgaW5wdXQgYnl0ZSBkYXRhIHdob3NlIGNoYXJzZXQgaXMgdG8gZGV0ZWN0ZWQuCisgICoKKyAg
KiBPd25lcnNoaXAgb2YgdGhlIGlucHV0ICB0ZXh0IGJ5dGUgYXJyYXkgcmVtYWlucyB3aXRoIHRo
ZSBjYWxsZXIuCisgICogVGhlIGlucHV0IHN0cmluZyBtdXN0IG5vdCBiZSBhbHRlcmVkIG9yIGRl
bGV0ZWQgdW50aWwgdGhlIGNoYXJzZXQKKyAgKiBkZXRlY3RvciBpcyBlaXRoZXIgY2xvc2VkIG9y
IHJlc2V0IHRvIHJlZmVyIHRvIGRpZmZlcmVudCBpbnB1dCB0ZXh0LgorICAqCisgICogQHBhcmFt
IHVjc2QgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICAqIEBwYXJhbSB0ZXh0
SW4gdGhlIGlucHV0IHRleHQgb2YgdW5rbm93biBlbmNvZGluZy4gICAuCisgICogQHBhcmFtIGxl
biAgICB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBvciAtMSBpZiB0aGUgdGV4dAorICAq
ICAgICAgICAgICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQuCisgICogQHBhcmFtIHN0YXR1cyBhbnkg
ZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAq
CisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2Rl
dF9zZXRUZXh0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGNvbnN0IGNoYXIgKnRleHRJbiwgaW50
MzJfdCBsZW4sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqIFNldCB0aGUgZGVjbGFyZWQg
ZW5jb2RpbmcgZm9yIGNoYXJzZXQgZGV0ZWN0aW9uLgorICogIFRoZSBkZWNsYXJlZCBlbmNvZGlu
ZyBvZiBhbiBpbnB1dCB0ZXh0IGlzIGFuIGVuY29kaW5nIG9idGFpbmVkCisgKiAgYnkgdGhlIHVz
ZXIgZnJvbSBhbiBodHRwIGhlYWRlciBvciB4bWwgZGVjbGFyYXRpb24gb3Igc2ltaWxhciBzb3Vy
Y2UgdGhhdAorICogIGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhZGRpdGlvbmFsIGhpbnQgdG8gdGhl
IGNoYXJzZXQgZGV0ZWN0b3IuCisgKgorICogIEhvdyBhbmQgd2hldGhlciB0aGUgZGVjbGFyZWQg
ZW5jb2Rpbmcgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUKKyAqICBkZXRlY3Rpb24gcHJvY2VzcyBp
cyBUQkQuCisgKgorICogQHBhcmFtIHVjc2QgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBi
ZSB1c2VkLgorICogQHBhcmFtIGVuY29kaW5nICBhbiBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQg
ZGF0YSBvYnRhaW5lZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgIGEgaGVhZGVyIG9yIGRlY2xh
cmF0aW9uIG9yIG90aGVyIHNvdXJjZSBvdXRzaWRlCisgKiAgICAgICAgICAgICAgICAgIG9mIHRo
ZSBieXRlIGRhdGEgaXRzZWxmLgorICogQHBhcmFtIGxlbmd0aCAgICB0aGUgbGVuZ3RoIG9mIHRo
ZSBlbmNvZGluZyBuYW1lLCBvciAtMSBpZiB0aGUgbmFtZSBzdHJpbmcKKyAqICAgICAgICAgICAg
ICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzICAgIGFueSBlcnJvciBj
b25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKgorICogQGRy
YWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X3NldERlY2xh
cmVkRW5jb2RpbmcoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgY29uc3QgY2hhciAqZW5jb2Rpbmcs
IGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICogUmV0dXJu
IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBzdXBwbGllZCBpbnB1dCBkYXRhLgor
ICogCisgKiBOb3RlIHRob3VnaCwgdGhhdCBiZWNhdXNlIHRoZSBkZXRlY3Rpb24gCisgKiBvbmx5
IGxvb2tzIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZGF0YSwKKyAqIHRoZXJlIGlzIGEgcG9z
c2liaWxpdHkgdGhhdCB0aGUgcmV0dXJuZWQgY2hhcnNldCB3aWxsIGZhaWwgdG8gaGFuZGxlCisg
KiB0aGUgZnVsbCBzZXQgb2YgaW5wdXQgZGF0YS4KKyAqIDxwPgorICogVGhlIHJldHVybmVkIFVD
aGFyc2V0TWF0Y2ggb2JqZWN0IGlzIG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLgorICog
SXQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGRldGVjdG9yIGlucHV0IGlzIHJlc2V0LCBv
ciB1bnRpbAorICogdGhlIGRldGVjdG9yIGlzIGNsb3NlZC4KKyAqIDxwPgorICogVGhlIGZ1bmN0
aW9uIHdpbGwgZmFpbCBpZgorICogIDx1bD4KKyAqICAgIDxsaT5ubyBjaGFyc2V0IGFwcGVhcnMg
dG8gbWF0Y2ggdGhlIGRhdGEuPC9saT4KKyAqICAgIDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVu
IHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAgdGhlIGNo
YXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBzdGF0dXMgICAgYW55IGVycm9y
IGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1
cm4gICAgICAgICAgYSBVQ2hhcnNldE1hdGNoICByZXByZXNlbnRpbmcgdGhlIGJlc3QgbWF0Y2hp
bmcgY2hhcnNldCwKKyAqICAgICAgICAgICAgICAgICAgb3IgTlVMTCBpZiBubyBjaGFyc2V0IG1h
dGNoZXMgdGhlIGJ5dGUgZGF0YS4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZU
IGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiBVX0VYUE9SVDIKK3Vjc2RldF9kZXRlY3QoVUNoYXJzZXRE
ZXRlY3RvciAqdWNzZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKyAgICAKKworLyoqCisgKiAgRmlu
ZCBhbGwgY2hhcnNldCBtYXRjaGVzIHRoYXQgYXBwZWFyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0
aGUgaW5wdXQsCisgKiAgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJlc3VsdHMuICBUaGUgcmVzdWx0
cyBhcmUgb3JkZXJlZCB3aXRoIHRoZQorICogIGJlc3QgcXVhbGl0eSBtYXRjaCBmaXJzdC4KKyAq
CisgKiAgQmVjYXVzZSB0aGUgZGV0ZWN0aW9uIG9ubHkgbG9va3MgYXQgYSBsaW1pdGVkIGFtb3Vu
dCBvZiB0aGUKKyAqICBpbnB1dCBieXRlIGRhdGEsIHNvbWUgb2YgdGhlIHJldHVybmVkIGNoYXJz
ZXRzIG1heSBmYWlsIHRvIGhhbmRsZQorICogIHRoZSBhbGwgb2YgaW5wdXQgZGF0YS4KKyAqICA8
cD4KKyAqICBUaGUgcmV0dXJuZWQgVUNoYXJzZXRNYXRjaCBvYmplY3RzIGFyZSBvd25lZCBieSB0
aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqICBUaGV5IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRo
ZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9kaWZpZWQKKyAqICAKKyAqIDxwPgorICogUmV0dXJu
IGFuIGVycm9yIGlmIAorICogIDx1bD4KKyAqICAgIDxsaT5ubyBjaGFyc2V0cyBhcHBlYXIgdG8g
bWF0Y2ggdGhlIGlucHV0IGRhdGEuPC9saT4KKyAqICAgIDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBi
ZWVuIHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICogCisgKiBAcGFyYW0gdWNzZCAgICAgICAg
ICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICogQHBhcmFtIG1hdGNoZXNGb3Vu
ZCAgcG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlCisgKiAgICAg
ICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY2hhcnNldHMgaWRlbnRpZmllZCB0aGF0IGFyZSBj
b25zaXN0ZW50IHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dCBkYXRhLiAg
T3V0cHV0IG9ubHkuCisgKiBAcGFyYW0gc3RhdHVzICAgICAgICBhbnkgZXJyb3IgY29uZGl0aW9u
cyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogQHJldHVybiAgICAgICAg
ICAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIFVDaGFyU2V0TWF0Y2gg
b2JqZWN0cy4KKyAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJyYXksIGFuZCB0aGUgVUNo
YXJTZXRNYXRjaCBpbnN0YW5jZXMgdG8gd2hpY2ggaXQgcmVmZXJzLAorICogICAgICAgICAgICAg
ICAgICAgICAgYXJlIG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLCBhbmQgd2lsbCByZW1h
aW4gdmFsaWQgdW50aWwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXRlY3RvciBpcyBj
bG9zZWQgb3IgbW9kaWZpZWQuCisgKiBAZHJhZnQgSUNVIDMuNAorICovCitVX0RSQUZUIGNvbnN0
IFVDaGFyc2V0TWF0Y2ggKiogVV9FWFBPUlQyCit1Y3NkZXRfZGV0ZWN0QWxsKFVDaGFyc2V0RGV0
ZWN0b3IgKnVjc2QsIGludDMyX3QgKm1hdGNoZXNGb3VuZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsK
KworCisKKy8qKgorICogIEdldCB0aGUgbmFtZSBvZiB0aGUgY2hhcnNldCByZXByZXNlbnRlZCBi
eSBhIFVDaGFyc2V0TWF0Y2guCisgKgorICogIFRoZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQg
bmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisgKiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwg
cmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNldE1hdGNoCisgKiAgaXMgdmFsaWQuCisgKgor
ICogIFRoZSBuYW1lIHJldHVybmVkIGlzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgSUNVIGNv
bnZlcnNpb24gQVBJcy4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2gg
b2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBv
cnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAgICAgVGhlIG5hbWUg
b2YgdGhlIG1hdGNoaW5nIGNoYXJzZXQuCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1Vf
RFJBRlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNzZGV0X2dldE5hbWUoY29uc3QgVUNoYXJz
ZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiAgR2V0IGEgY29u
ZmlkZW5jZSBudW1iZXIgZm9yIHRoZSBxdWFsaXR5IG9mIHRoZSBtYXRjaCBvZiB0aGUgYnl0ZQor
ICogIGRhdGEgd2l0aCB0aGUgY2hhcnNldC4gIENvbmZpZGVuY2UgbnVtYmVycyByYW5nZSBmcm9t
IHplcm8gdG8gMTAwLAorICogIHdpdGggMTAwIHJlcHJlc2VudGluZyBjb21wbGV0ZSBjb25maWRl
bmNlIGFuZCB6ZXJvIHJlcHJlc2VudGluZworICogIG5vIGNvbmZpZGVuY2UuCisgKgorICogIFRo
ZSBjb25maWRlbmNlIHZhbHVlcyBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5LiAgVGhleSBkZWZpbmUg
YW4KKyAqICBhbiBvcmRlcmluZyB3aXRoaW4gdGhlIHJlc3VsdHMgZm9yIGFueSBzaW5nbGUgZGV0
ZWN0aW9uIG9wZXJhdGlvbgorICogIGJ1dCBhcmUgbm90IGdlbmVyYWxseSBjb21wYXJhYmxlIGJl
dHdlZW4gdGhlIHJlc3VsdHMgZm9yIGRpZmZlcmVudCBpbnB1dC4KKyAqCisgKiAgQSBjb25maWRl
bmNlIHZhbHVlIG9mIHRlbiBkb2VzIGhhdmUgYSBnZW5lcmFsIG1lYW5pbmcgLSBpdCBpcyB1c2Vk
CisgKiAgZm9yIGNoYXJzZXRzIHRoYXQgY2FuIHJlcHJlc2VudCB0aGUgaW5wdXQgZGF0YSwgYnV0
IGZvciB3aGljaCB0aGVyZQorICogIGlzIG5vIG90aGVyIGluZGljYXRpb24gdGhhdCBzdWdnZXN0
cyB0aGF0IHRoZSBjaGFyc2V0IGlzIHRoZSBjb3JyZWN0IG9uZS4KKyAqICBQdXJlIDcgYml0IEFT
Q0lJIGRhdGEsIGZvciBleGFtcGxlLCBpcyBjb21wYXRpYmxlIHdpdGggYQorICogIGdyZWF0IG1h
bnkgY2hhcnNldHMsIG1vc3Qgb2Ygd2hpY2ggd2lsbCBhcHBlYXIgYXMgcG9zc2libGUgbWF0Y2hl
cworICogIHdpdGggYSBjb25maWRlbmNlIG9mIDEwLgorICoKKyAqICBAcGFyYW0gdWNzbSAgICBU
aGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNv
bmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqICBAcmV0dXJu
ICAgICAgICBBIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgY2hhcnNldCBtYXRjaC4KKyAqCisg
KiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBpbnQzMl90IFVfRVhQT1JUMgordWNzZGV0
X2dldENvbmZpZGVuY2UoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3Rh
dHVzKTsKKworLyoqCisgKiAgR2V0IHRoZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ug
b2YgdGhlIGlucHV0IGRhdGEuCisgKgorICogIFRoZSBDaGFyc2V0IERldGVjdGlvbiBzZXJ2aWNl
IGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgZGV0ZWN0aW5nCisgKiAgY2hhcnNldHMsIG5vdCBs
YW5ndWFnZS4gIEZvciBzb21lLCBidXQgbm90IGFsbCwgY2hhcnNldHMsIGEgbGFuZ3VhZ2UgaXMK
KyAqICBpZGVudGlmaWVkIGFzIGEgYnlwcm9kdWN0IG9mIHRoZSBkZXRlY3Rpb24gcHJvY2Vzcywg
YW5kIHRoYXQgaXMgd2hhdAorICogIGlzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKgor
ICogIENBVVRJT046CisgKiAgICAxLiAgTGFuZ3VhZ2UgaW5mb3JtYXRpb24gaXMgbm90IGF2YWls
YWJsZSBmb3IgaW5wdXQgZGF0YSBlbmNvZGVkIGluCisgKiAgICAgICAgYWxsIGNoYXJzZXRzLiBJ
biBwYXJ0aWN1bGFyLCBubyBsYW5ndWFnZSBpcyBpZGVudGlmaWVkCisgKiAgICAgICAgZm9yIFVU
Ri04IGlucHV0IGRhdGEuCisgKgorICogICAgMi4gIENsb3NlbHkgcmVsYXRlZCBsYW5ndWFnZXMg
bWF5IHNvbWV0aW1lcyBiZSBjb25mdXNlZC4KKyAqCisgKiAgSWYgbW9yZSBhY2N1cmF0ZSBsYW5n
dWFnZSBkZXRlY3Rpb24gaXMgcmVxdWlyZWQsIGEgbGluZ3Vpc3RpYworICogIGFuYWx5c2lzIHBh
Y2thZ2Ugc2hvdWxkIGJlIHVzZWQuCisgKgorICogIFRoZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJu
ZWQgbmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisgKiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdp
bGwgcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNldE1hdGNoCisgKiAgaXMgdmFsaWQuCisg
KgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAqICBAcGFy
YW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlz
IHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIFRoZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUg
bGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGRhdGEsIG9yCisgKiAgICAgICAgICAgICAgICAgYW4gZW1w
dHkgc3RyaW5nIGlmIHRoZSBsYW5ndWFnZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KKyAqCisg
KiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1
Y3NkZXRfZ2V0TGFuZ3VhZ2UoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAq
c3RhdHVzKTsKKworCisvKioKKyAgKiAgR2V0IHRoZSBlbnRpcmUgaW5wdXQgdGV4dCBhcyBhIFVD
aGFyIHN0cmluZywgcGxhY2luZyBpdCBpbnRvCisgICogIGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZl
ci4gIEEgdGVybWluYXRpbmcKKyAgKiAgTlVMIGNoYXJhY3RlciB3aWxsIGJlIGFwcGVuZGVkIHRv
IHRoZSBidWZmZXIgaWYgc3BhY2UgaXMgYXZhaWxhYmxlLgorICAqCisgICogIFRoZSBudW1iZXIg
b2YgVUNoYXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5h
dGluZworICAqICBOVUwsIGlzIHJldHVybmVkLiAKKyAgKgorICAqICBJZiB0aGUgc3VwcGxpZWQg
YnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCB0byBob2xkIHRoZSBvdXRwdXQsCisgICog
IHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSB1bmRlZmluZWQuICBUaGUgZnVsbCBvdXRw
dXQgc3RyaW5nIGxlbmd0aAorICAqICAoaW4gVUNoYXJzKSBpcyByZXR1cm5lZCBhcyBhbHdheXMs
IGFuZCBjYW4gYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlcgorICAqICBvZiB0aGUgY29ycmVj
dCBzaXplLgorICAqCisgICoKKyAgKiBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBv
YmplY3QuCisgICogQHBhcmFtIGJ1ZiAgICAgQSBVQ2hhciBidWZmZXIgdG8gYmUgZmlsbGVkIHdp
dGggdGhlIGNvbnZlcnRlZCB0ZXh0IGRhdGEuCisgICogQHBhcmFtIGNhcCAgICAgVGhlIGNhcGFj
aXR5IG9mIHRoZSBidWZmZXIgaW4gVUNoYXJzLgorICAqIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJv
ciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogQHJl
dHVybiAgICAgICAgVGhlIG51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIG91dHB1dCBzdHJpbmcuCisg
ICoKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCAgaW50MzJfdCBVX0VYUE9SVDIK
K3Vjc2RldF9nZXRVQ2hhcnMoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwKKyAgICAgICAgICAg
ICAgICAgVUNoYXIgKmJ1ZiwgaW50MzJfdCBjYXAsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKwor
CisvKioKKyAgKiAgR2V0IGFuIGl0ZXJhdG9yIG92ZXIgdGhlIHNldCBvZiBhbGwgZGV0ZWN0YWJs
ZSBjaGFyc2V0cyAtIAorICAqICBvdmVyIHRoZSBjaGFyc2V0cyB0aGF0IGFyZSBrbm93biB0byB0
aGUgY2hhcnNldCBkZXRlY3Rpb24KKyAgKiAgc2VydmljZS4KKyAgKgorICAqICBUaGUgcmV0dXJu
ZWQgVUVudW1lcmF0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmFtZXMgb2YKKyAgKiAgdGhl
IGNoYXJzZXRzLgorICAqCisgICogIFRoZSBzdGF0ZSBvZiB0aGUgQ2hhcnNldCBkZXRlY3RvciB0
aGF0IGlzIHBhc3NlZCBpbiBkb2VzIG5vdAorICAqICBhZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlz
IGZ1bmN0aW9uLCBidXQgcmVxdWlyaW5nIGEgdmFsaWQsIG9wZW4KKyAgKiAgY2hhcnNldCBkZXRl
Y3RvciBhcyBhIHBhcmFtZXRlciBpbnN1cmVzIHRoYXQgdGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisg
ICogIHNlcnZpY2UgaGFzIGJlZW4gc2FmZWx5IGluaXRpYWxpemVkIGFuZCB0aGF0IHRoZSByZXF1
aXJlZCBkZXRlY3Rpb24KKyAgKiAgZGF0YSBpcyBhdmFpbGFibGUuCisgICoKKyAgKiAgQHBhcmFt
IHVjc2QgYSBDaGFyc2V0IGRldGVjdG9yLgorICAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3Ig
Y29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqICBAcmV0
dXJuIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGRldGVjdGFibGUgY2hhcnNl
dCBuYW1lcy4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8KKworVV9EUkFGVCAgVUVudW1lcmF0
aW9uICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0QWxsRGV0ZWN0YWJsZUNoYXJzZXRzKGNvbnN0IFVD
aGFyc2V0RGV0ZWN0b3IgKnVjc2QsICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICAq
ICBUZXN0IHdoZXRoZXIgaW5wdXQgZmlsdGVyaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgY2hhcnNl
dCBkZXRlY3Rvci4KKyAgKiAgSW5wdXQgZmlsdGVyaW5nIHJlbW92ZXMgdGV4dCB0aGF0IGFwcGVh
cnMgdG8gYmUgSFRNTCBvciB4bWwKKyAgKiAgbWFya3VwIGZyb20gdGhlIGlucHV0IGJlZm9yZSBh
cHBseWluZyB0aGUgY29kZSBwYWdlIGRldGVjdGlvbgorICAqICBoZXVyaXN0aWNzLgorICAqCisg
ICogIEBwYXJhbSB1Y3NkICBUaGUgY2hhcnNldCBkZXRlY3RvciB0byBjaGVjay4KKyAgKiAgQHJl
dHVybiBUUlVFIGlmIGZpbHRlcmluZyBpcyBlbmFibGVkLgorICAqICBAZHJhZnQgSUNVIDMuNAor
ICAqLworVV9EUkFGVCAgVUJvb2wgVV9FWFBPUlQyCit1Y3NkZXRfaXNJbnB1dEZpbHRlckVuYWJs
ZWQoY29uc3QgVUNoYXJzZXREZXRlY3RvciAqdWNzZCk7CisKKworLyoqCisgKiBFbmFibGUgZmls
dGVyaW5nIG9mIGlucHV0IHRleHQuIElmIGZpbHRlcmluZyBpcyBlbmFibGVkLAorICogdGV4dCB3
aXRoaW4gYW5nbGUgYnJhY2tldHMgKCI8IiBhbmQgIj4iKSB3aWxsIGJlIHJlbW92ZWQKKyAqIGJl
Zm9yZSBkZXRlY3Rpb24sIHdoaWNoIHdpbGwgcmVtb3ZlIG1vc3QgSFRNTCBvciB4bWwgbWFya3Vw
LgorICoKKyAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgbW9kaWZp
ZWQuCisgKiBAcGFyYW0gZmlsdGVyIDxjb2RlPnRydWU8L2NvZGU+IHRvIGVuYWJsZSBpbnB1dCB0
ZXh0IGZpbHRlcmluZy4KKyAqIEByZXR1cm4gVGhlIHByZXZpb3VzIHNldHRpbmcuCisgKgorICog
QGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCAgVUJvb2wgVV9FWFBPUlQyCit1Y3NkZXRfZW5h
YmxlSW5wdXRGaWx0ZXIoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgVUJvb2wgZmlsdGVyKTsKKwor
I2VuZGlmCisjZW5kaWYgICAvKiBfX1VDU0RFVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CmluZGV4IGMwMGE3YmEuLmVmY2ExMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTk5Miw3
ICs5OTIsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6d3JpdGUoY29uc3QgY2hhciogc3RyLCBpbnQg
bGVuLCBib29sIGZsdXNoKQogICAgIAogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRp
bmdzID8gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7Cisg
ICAgICAgIGlmIChzZXR0aW5ncykKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJj
ZURlY29kZXI6OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRpbmdzLT5kZWZhdWx0VGV4
dEVuY29kaW5nTmFtZSgpLCBzZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKSk7CisgICAg
ICAgIGVsc2UgCisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
cmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLCBTdHJpbmcoKSk7CiAgICAgICAgIGlmIChtX2VuY29k
aW5nLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnRGcmFtZSAmJiBwYXJl
bnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKG1fZnJhbWUt
PmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VE
ZWNvZGVyLmNwcAppbmRleCA5NzllZTk1Li4wZGIzMjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIlRleHRDb2RlYy5o
IgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAKKyNpbmNsdWRlIDx1bmljb2RlL3Vjc2Rl
dC5oPgorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
MTksNyArMzIxLDcgQEAgY29uc3QgVGV4dEVuY29kaW5nJiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpk
ZWZhdWx0RW5jb2RpbmcoQ29udGVudFR5cGUgY29udGVudFR5cGUKICAgICByZXR1cm4gc3BlY2lm
aWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3Vy
Y2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3Bl
Y2lmaWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNl
RGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNp
ZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKICAgICA6IG1f
Y29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUobWltZVR5cGUpKQogICAgICwgbV9kZWNv
ZGVyKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2Rp
bmcpKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQpAQCAtMzI3LDYgKzMyOSw3IEBA
IFRleHRSZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kCiAgICAgLCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KGZh
bHNlKQogICAgICwgbV9jaGVja2VkRm9ySGVhZENoYXJzZXQoZmFsc2UpCiAgICAgLCBtX3Nhd0Vy
cm9yKGZhbHNlKQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRl
Y3RvcikKIHsKIH0KIApAQCAtNzQ4LDYgKzc1MSwyOSBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29k
ZXI6OmRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikK
ICAgICB9CiB9CiAKK3ZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0RW5jb2RpbmcoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9yKiBkZXRlY3RvciA9IHVjc2RldF9vcGVu
KCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihkZXRlY3RvciwgdHJ1ZSk7CisgICAgc3RhdHVz
ID0gVV9aRVJPX0VSUk9SOworICAgIHVjc2RldF9zZXRUZXh0KGRldGVjdG9yLCBkYXRhLCBzdGF0
aWNfY2FzdDxpbnQzMl90PihsZW4pLCAmc3RhdHVzKTsgCisgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAg
IGNvbnN0IFVDaGFyc2V0TWF0Y2ggKm1hdGNoID0gdWNzZGV0X2RldGVjdChkZXRlY3RvciwgJnN0
YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw7Cisg
ICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nID0gdWNz
ZGV0X2dldE5hbWUobWF0Y2gsICZzdGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkK
KyAgICAgICAgc2V0RW5jb2RpbmcoZW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKK2Zh
aWw6CisgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsKK30KKwogU3RyaW5nIFRleHRSZXNvdXJj
ZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIGlm
ICghbV9jaGVja2VkRm9yQk9NKQpAQCAtNzY3LDYgKzc5Myw5IEBAIFN0cmluZyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKICAgICAvLyBG
SVhNRTogSXQgc2VlbXMgd3JvbmcgdG8gY2hhbmdlIG91ciBlbmNvZGluZyBkb3duc3RyZWFtIGFm
dGVyIHdlIGhhdmUgYWxyZWFkeSBkb25lIHNvbWUgZGVjb2RpbmcuCiAgICAgaWYgKG1fc291cmNl
ICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZyAmJiBlbmNvZGluZygpLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2UgaWYgKG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IgJiYg
bV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nKQorICAgICAgICAvLyBlbmNvZGluZyBkZXRlY3Rv
ciBpcyB1c2VkIG9ubHkgd2hlbiBubyBvdGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUKKyAg
ICAgICAgZGV0ZWN0RW5jb2RpbmcoZGF0YSwgbGVuKTsKIAogICAgIEFTU0VSVChlbmNvZGluZygp
LmlzVmFsaWQoKSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuaCBiL1dlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAppbmRleCA4YmJl
ODVlLi43ZWE3YzAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCkBAIC0zOSw5
ICszOSw5IEBAIHB1YmxpYzoKICAgICAgICAgVXNlckNob3NlbkVuY29kaW5nCiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRl
eHRFbmNvZGluZygpKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1
bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0g
ZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRSZXNvdXJjZURl
Y29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHRSZXNvdXJjZURlY29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZywgdXNl
c0VuY29kaW5nRGV0ZWN0b3IpKTsKICAgICB9CiAgICAgflRleHRSZXNvdXJjZURlY29kZXIoKTsK
IApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29k
aW5nKTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nLCBib29sIHVzZXNFbmNvZGluZ0RldGVj
dG9yKTsKIAogICAgIGVudW0gQ29udGVudFR5cGUgeyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NT
IH07IC8vIFBsYWluVGV4dCBpcyBlcXVpdmFsZW50IHRvIGRpcmVjdGx5IHVzaW5nIFRleHREZWNv
ZGVyLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKQEAgLTY0LDYgKzY0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGNo
ZWNrRm9yQ1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1
ZmZlcik7CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3Qs
IGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2Rp
bmcoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgdm9pZCBkZXRlY3RFbmNvZGluZyhjb25zdCBj
aGFyKiwgc2l6ZV90KTsKIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4
dERlY29kZXIgbV9kZWNvZGVyOwpAQCAtNzMsNiArNzQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9jaGVja2VkRm9yQ1NTQ2hhcnNldDsKICAgICBib29sIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0
OwogICAgIGJvb2wgbV9zYXdFcnJvcjsKKyAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCA2MWExY2VmLi4xYTA2ZDJjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAK
QEAgLTc5LDYgKzc5LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBt
X3JhbmdlTXV0YXRpb25EaXNhYmxlZEZvck9sZEFwcGxlTWFpbChmYWxzZSkKICAgICAsIG1fc2hv
dWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzKGZhbHNlKQogICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5
cGVJblN0cmljdE1vZGUodHJ1ZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2Up
CiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwgc28gd2Ug
aW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nIAogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0
byB1c2UgaXQuCkBAIC0zODIsNCArMzgzLDkgQEAgdm9pZCBTZXR0aW5nczo6c2V0RW5mb3JjZUNT
U01JTUVUeXBlSW5TdHJpY3RNb2RlKGJvb2wgZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3QKICAg
ICBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSA9IGVuZm9yY2VDU1NNSU1FVHlwZUlu
U3RyaWN0TW9kZTsKIH0KIAordm9pZCBTZXR0aW5nczo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3Io
Ym9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKK3sKKyAgICBtX3VzZXNFbmNvZGluZ0RldGVjdG9y
ID0gdXNlc0VuY29kaW5nRGV0ZWN0b3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmgKaW5kZXggMWI0MjVmMi4uMGYyMGMzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgKKysrIGIvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTk3LDYgKzk3LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkZWZhdWx0
VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmYXVsdFRleHRFbmNvZGluZ05h
bWU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9v
bCk7CisgICAgICAgIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3VzZXNFbmNvZGluZ0RldGVjdG9yOyB9CiAKICAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKGNvbnN0IEtVUkwmKTsKICAgICAgICAgY29uc3QgS1VSTCYgdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQpA
QCAtMjI2LDYgKzIyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Vw
ZGF0ZXNXaGVuT2Zmc2NyZWVuIDogMTsKICAgICAgICAgYm9vbCBtX3pvb21zVGV4dE9ubHkgOiAx
OwogICAgICAgICBib29sIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAg
ICAgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yIDogMTsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZUtleXNQcml2YXRlLmggYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgKaW5kZXggNWU5MTE2OC4uZTMzMWYyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBX
ZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZvbnRTaXpl
IgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUiCisjZGVm
aW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXNF
bmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRVc2VyU3R5bGVTaGVldEVuYWJsZWRQcmVm
ZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSIKICNk
ZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXkgQCJXZWJLaXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJXZWJLaXRTaG91bGRQcmludEJhY2tncm91
bmRzUHJlZmVyZW5jZUtleSIKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCAz
OTUzNDMyLi5hMTYzNTRhIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC0z
MDcsNiArMzA3LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdW5k
bGUodm9pZCkKICAgICAgICAgQCIxNiIsICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRE
ZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIjEzIiwgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGaXhlZEZvbnRTaXplUHJlZmVyZW5jZUtleSwKICAg
ICAgICAgQCJJU08tODg1OS0xIiwgICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZVByZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9v
bDpOT10sICAgV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQcmVmZXJlbmNlS2V5LAogICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFVzZXJTdHlsZVNoZWV0RW5h
YmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXksCiAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5k
c1ByZWZlcmVuY2VLZXksCkBAIC04NTUsNiArODU2LDE2IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVs
IGNhY2hlTW9kZWxGb3JNYWluQnVuZGxlKHZvaWQpCiAgICAgX3ByaXZhdGUtPmF1dG9tYXRpY2Fs
bHlEZXRlY3RzQ2FjaGVNb2RlbCA9IGF1dG9tYXRpY2FsbHlEZXRlY3RzQ2FjaGVNb2RlbDsKIH0K
IAorLSAoQk9PTCl1c2VzRW5jb2RpbmdEZXRlY3RvcgoreworICAgIHJldHVybiBbc2VsZiBfYm9v
bFZhbHVlRm9yS2V5OiBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXldOwor
fQorCistICh2b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9yOihCT09MKWZsYWcKK3sKKyAgICBb
c2VsZiBfc2V0Qm9vbFZhbHVlOiBmbGFnIGZvcktleTogV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0
b3JQcmVmZXJlbmNlS2V5XTsKK30KKwogLSAoTlNUaW1lSW50ZXJ2YWwpX2JhY2tGb3J3YXJkQ2Fj
aGVFeHBpcmF0aW9uSW50ZXJ2YWwKIHsKICAgICAvLyBGSVhNRTogVGhlcmUncyBwcm9iYWJseSBu
byBnb29kIHJlYXNvbiB0byByZWFkIGZyb20gdGhlIHN0YW5kYXJkIHVzZXIgZGVmYXVsdHMgaW5z
dGVhZCBvZiBzZWxmLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5o
CmluZGV4IDZhNGM1YzguLjhhZDljYjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmgKQEAgLTUwLDYgKzUwLDkgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVm
ZXJlbmNlc1JlbW92ZWROb3RpZmljYXRpb247CiAtIChCT09MKWF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkOwogLSAodm9pZClzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZDooQk9PTClmbGFn
OwogCistIChCT09MKXVzZXNFbmNvZGluZ0RldGVjdG9yOworLSAodm9pZClzZXRVc2VzRW5jb2Rp
bmdEZXRlY3RvcjooQk9PTClmbGFnOworCiAtIChCT09MKXJlc3BlY3RTdGFuZGFyZFN0eWxlS2V5
RXF1aXZhbGVudHM7CiAtICh2b2lkKXNldFJlc3BlY3RTdGFuZGFyZFN0eWxlS2V5RXF1aXZhbGVu
dHM6KEJPT0wpZmxhZzsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAyMzQ3NGQxLi5mNWYyYWZh
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtOTkwLDYgKzk5MCw3IEBAIHN0YXRpYyBib29sIGRl
YnVnV2lkZ2V0ID0gdHJ1ZTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
W3ByZWZlcmVuY2VzIGRlZmF1bHRGaXhlZEZvbnRTaXplXSk7CiAgICAgc2V0dGluZ3MtPnNldERl
ZmF1bHRGb250U2l6ZShbcHJlZmVyZW5jZXMgZGVmYXVsdEZvbnRTaXplXSk7CiAgICAgc2V0dGlu
Z3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFtwcmVmZXJlbmNlcyBkZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZV0pOworICAgIHNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihbcHJl
ZmVyZW5jZXMgdXNlc0VuY29kaW5nRGV0ZWN0b3JdKTsKICAgICBzZXR0aW5ncy0+c2V0RmFudGFz
eUZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZhbnRhc3lGb250RmFtaWx5XSk7CiAgICAgc2V0dGlu
Z3MtPnNldEZpeGVkRm9udEZhbWlseShbcHJlZmVyZW5jZXMgZml4ZWRGb250RmFtaWx5XSk7CiAg
ICAgc2V0dGluZ3MtPnNldEZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3MoW3ByZWZlcmVuY2VzIF9m
b3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzXSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23070</attachid>
            <date>2008-08-29 11:08:19 -0700</date>
            <delta_ts>2009-02-10 14:20:14 -0800</delta_ts>
            <desc>patch with some heuristics  added to  Eric&apos;s previous patch </desc>
            <filename>16482.patch.3a</filename>
            <type>text/plain</type>
            <size>30738</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pY3UvdW5pY29kZS91Y3NkZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaWN1L3VuaWNv
ZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5l
c3MgTWFjaGluZXMKKyAqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorICogICBmaWxlIG5hbWU6ICB1Y3NkZXQuaAorICogICBl
bmNvZGluZzogICBVUy1BU0NJSQorICogICBpbmRlbnRhdGlvbjo0CisgKgorICogICBjcmVhdGVk
IG9uOiAyMDA1QXVnMDQKKyAqICAgY3JlYXRlZCBieTogQW5keSBIZW5pbmdlcgorICoKKyAqICAg
SUNVIENoYXJhY3RlciBTZXQgRGV0ZWN0aW9uLCBBUEkgZm9yIEMKKyAqCisgKiAgIERyYWZ0IHZl
cnNpb24gMTggT2N0IDIwMDUKKyAqCisgKi8KKworI2lmbmRlZiBfX1VDU0RFVF9ICisjZGVmaW5l
IF9fVUNTREVUX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJ
R19OT19DT05WRVJTSU9OCisjaW5jbHVkZSAidW5pY29kZS91ZW51bS5oIgorCisvKioKKyAqIFxm
aWxlIAorICogXGJyaWVmIEMgQVBJOiBDaGFyc2V0IERldGVjdGlvbiBBUEkKKyAqCisgKiBUaGlz
IEFQSSBwcm92aWRlcyBhIGZhY2lsaXR5IGZvciBkZXRlY3RpbmcgdGhlCisgKiBjaGFyc2V0IG9y
IGVuY29kaW5nIG9mIGNoYXJhY3RlciBkYXRhIGluIGFuIHVua25vd24gdGV4dCBmb3JtYXQuCisg
KiBUaGUgaW5wdXQgZGF0YSBjYW4gYmUgZnJvbSBhbiBhcnJheSBvZiBieXRlcy4KKyAqIDxwPgor
ICogQ2hhcmFjdGVyIHNldCBkZXRlY3Rpb24gaXMgYXQgYmVzdCBhbiBpbXByZWNpc2Ugb3BlcmF0
aW9uLiAgVGhlIGRldGVjdGlvbgorICogcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8gaWRlbnRpZnkg
dGhlIGNoYXJzZXQgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGNoYXJhY3RlcmlzdGljcworICogb2Yg
dGhlIGJ5dGUgZGF0YSwgYnV0IHRoZSBwcm9jZXNzIGlzIHBhcnRseSBzdGF0aXN0aWNhbCBpbiBu
YXR1cmUsIGFuZAorICogdGhlIHJlc3VsdHMgY2FuIG5vdCBiZSBndWFyYW50ZWVkIHRvIGFsd2F5
cyBiZSBjb3JyZWN0LgorICogPHA+CisgKiBGb3IgYmVzdCBhY2N1cmFjeSBpbiBjaGFyc2V0IGRl
dGVjdGlvbiwgdGhlIGlucHV0IGRhdGEgc2hvdWxkIGJlIHByaW1hcmlseQorICogaW4gYSBzaW5n
bGUgbGFuZ3VhZ2UsIGFuZCBhIG1pbmltdW0gb2YgYSBmZXcgaHVuZHJlZCBieXRlcyB3b3J0aCBv
ZiBwbGFpbiB0ZXh0CisgKiBpbiB0aGUgbGFuZ3VhZ2UgYXJlIG5lZWRlZC4gIFRoZSBkZXRlY3Rp
b24gcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8KKyAqIGlnbm9yZSBodG1sIG9yIHhtbCBzdHlsZSBt
YXJrdXAgdGhhdCBjb3VsZCBvdGhlcndpc2Ugb2JzY3VyZSB0aGUgY29udGVudC4KKyAqLworIAor
CitzdHJ1Y3QgVUNoYXJzZXREZXRlY3RvcjsKKy8qKgorICAqIFN0cnVjdHVyZSByZXByZXNlbnRp
bmcgYSBjaGFyc2V0IGRldGVjdG9yCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK3R5cGVkZWYg
c3RydWN0IFVDaGFyc2V0RGV0ZWN0b3IgVUNoYXJzZXREZXRlY3RvcjsKKworc3RydWN0IFVDaGFy
c2V0TWF0Y2g7CisvKioKKyAgKiAgT3BhcXVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBtYXRj
aCB0aGF0IHdhcyBpZGVudGlmaWVkCisgICogIGZyb20gYSBjaGFyc2V0IGRldGVjdGlvbiBvcGVy
YXRpb24uCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVmIHN0cnVjdCBVQ2hhcnNl
dE1hdGNoIFVDaGFyc2V0TWF0Y2g7CisKKy8qKgorICAqICBPcGVuIGEgY2hhcnNldCBkZXRlY3Rv
ci4KKyAgKgorICAqICBAcGFyYW0gc3RhdHVzIEFueSBlcnJvciBjb25kaXRpb25zIG9jY3Vycmlu
ZyBkdXJpbmcgdGhlIG9wZW4KKyAgKiAgICAgICAgICAgICAgICBvcGVyYXRpb24gYXJlIHJlcG9y
dGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJldHVybiB0aGUgbmV3bHkgb3BlbmVk
IGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIFVD
aGFyc2V0RGV0ZWN0b3IgKiBVX0VYUE9SVDIKK3Vjc2RldF9vcGVuKFVFcnJvckNvZGUgICAqc3Rh
dHVzKTsKKworLyoqCisgICogQ2xvc2UgYSBjaGFyc2V0IGRldGVjdG9yLiAgQWxsIHN0b3JhZ2Ug
YW5kIGFueSBvdGhlciByZXNvdXJjZXMKKyAgKiAgIG93bmVkIGJ5IHRoaXMgY2hhcnNldCBkZXRl
Y3RvciB3aWxsIGJlIHJlbGVhc2VkLiAgRmFpbHVyZSB0bworICAqICAgY2xvc2UgYSBjaGFyc2V0
IGRldGVjdG9yIHdoZW4gZmluaXNoZWQgd2l0aCBpdCBjYW4gcmVzdWx0IGluCisgICogICBtZW1v
cnkgbGVha3MgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAqCisgICogIEBwYXJhbSB1Y3NkICBUaGUg
Y2hhcnNldCBkZXRlY3RvciB0byBiZSBjbG9zZWQuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICov
CitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfY2xvc2UoVUNoYXJzZXREZXRlY3RvciAq
dWNzZCk7CisKKy8qKgorICAqIFNldCB0aGUgaW5wdXQgYnl0ZSBkYXRhIHdob3NlIGNoYXJzZXQg
aXMgdG8gZGV0ZWN0ZWQuCisgICoKKyAgKiBPd25lcnNoaXAgb2YgdGhlIGlucHV0ICB0ZXh0IGJ5
dGUgYXJyYXkgcmVtYWlucyB3aXRoIHRoZSBjYWxsZXIuCisgICogVGhlIGlucHV0IHN0cmluZyBt
dXN0IG5vdCBiZSBhbHRlcmVkIG9yIGRlbGV0ZWQgdW50aWwgdGhlIGNoYXJzZXQKKyAgKiBkZXRl
Y3RvciBpcyBlaXRoZXIgY2xvc2VkIG9yIHJlc2V0IHRvIHJlZmVyIHRvIGRpZmZlcmVudCBpbnB1
dCB0ZXh0LgorICAqCisgICogQHBhcmFtIHVjc2QgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBi
ZSB1c2VkLgorICAqIEBwYXJhbSB0ZXh0SW4gdGhlIGlucHV0IHRleHQgb2YgdW5rbm93biBlbmNv
ZGluZy4gICAuCisgICogQHBhcmFtIGxlbiAgICB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0
LCBvciAtMSBpZiB0aGUgdGV4dAorICAqICAgICAgICAgICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQu
CisgICogQHBhcmFtIHN0YXR1cyBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFj
ayBpbiB0aGlzIHZhcmlhYmxlLgorICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJB
RlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXRUZXh0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2Qs
IGNvbnN0IGNoYXIgKnRleHRJbiwgaW50MzJfdCBsZW4sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisK
KworLyoqIFNldCB0aGUgZGVjbGFyZWQgZW5jb2RpbmcgZm9yIGNoYXJzZXQgZGV0ZWN0aW9uLgor
ICogIFRoZSBkZWNsYXJlZCBlbmNvZGluZyBvZiBhbiBpbnB1dCB0ZXh0IGlzIGFuIGVuY29kaW5n
IG9idGFpbmVkCisgKiAgYnkgdGhlIHVzZXIgZnJvbSBhbiBodHRwIGhlYWRlciBvciB4bWwgZGVj
bGFyYXRpb24gb3Igc2ltaWxhciBzb3VyY2UgdGhhdAorICogIGNhbiBiZSBwcm92aWRlZCBhcyBh
biBhZGRpdGlvbmFsIGhpbnQgdG8gdGhlIGNoYXJzZXQgZGV0ZWN0b3IuCisgKgorICogIEhvdyBh
bmQgd2hldGhlciB0aGUgZGVjbGFyZWQgZW5jb2Rpbmcgd2lsbCBiZSB1c2VkIGR1cmluZyB0aGUK
KyAqICBkZXRlY3Rpb24gcHJvY2VzcyBpcyBUQkQuCisgKgorICogQHBhcmFtIHVjc2QgICAgICB0
aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICogQHBhcmFtIGVuY29kaW5nICBhbiBl
bmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgZGF0YSBvYnRhaW5lZCBmcm9tCisgKiAgICAgICAgICAg
ICAgICAgIGEgaGVhZGVyIG9yIGRlY2xhcmF0aW9uIG9yIG90aGVyIHNvdXJjZSBvdXRzaWRlCisg
KiAgICAgICAgICAgICAgICAgIG9mIHRoZSBieXRlIGRhdGEgaXRzZWxmLgorICogQHBhcmFtIGxl
bmd0aCAgICB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGluZyBuYW1lLCBvciAtMSBpZiB0aGUgbmFt
ZSBzdHJpbmcKKyAqICAgICAgICAgICAgICAgICAgaXMgTlVMIHRlcm1pbmF0ZWQuCisgKiBAcGFy
YW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRo
aXMgdmFyaWFibGUuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCB2b2lkIFVf
RVhQT1JUMgordWNzZGV0X3NldERlY2xhcmVkRW5jb2RpbmcoVUNoYXJzZXREZXRlY3RvciAqdWNz
ZCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0
dXMpOworCisKKy8qKgorICogUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRo
ZSBzdXBwbGllZCBpbnB1dCBkYXRhLgorICogCisgKiBOb3RlIHRob3VnaCwgdGhhdCBiZWNhdXNl
IHRoZSBkZXRlY3Rpb24gCisgKiBvbmx5IGxvb2tzIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQg
ZGF0YSwKKyAqIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgcmV0dXJuZWQgY2hhcnNl
dCB3aWxsIGZhaWwgdG8gaGFuZGxlCisgKiB0aGUgZnVsbCBzZXQgb2YgaW5wdXQgZGF0YS4KKyAq
IDxwPgorICogVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0Y2ggb2JqZWN0IGlzIG93bmVkIGJ5IHRo
ZSBVQ2hhcnNldERldGVjdG9yLgorICogSXQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGRl
dGVjdG9yIGlucHV0IGlzIHJlc2V0LCBvciB1bnRpbAorICogdGhlIGRldGVjdG9yIGlzIGNsb3Nl
ZC4KKyAqIDxwPgorICogVGhlIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZgorICogIDx1bD4KKyAqICAg
IDxsaT5ubyBjaGFyc2V0IGFwcGVhcnMgdG8gbWF0Y2ggdGhlIGRhdGEuPC9saT4KKyAqICAgIDxs
aT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICoKKyAq
IEBwYXJhbSB1Y3NkICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBw
YXJhbSBzdGF0dXMgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4g
dGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAgYSBVQ2hhcnNldE1hdGNoICByZXBy
ZXNlbnRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgY2hhcnNldCwKKyAqICAgICAgICAgICAgICAgICAg
b3IgTlVMTCBpZiBubyBjaGFyc2V0IG1hdGNoZXMgdGhlIGJ5dGUgZGF0YS4KKyAqCisgKiBAZHJh
ZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiBVX0VYUE9SVDIK
K3Vjc2RldF9kZXRlY3QoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgVUVycm9yQ29kZSAqc3RhdHVz
KTsKKyAgICAKKworLyoqCisgKiAgRmluZCBhbGwgY2hhcnNldCBtYXRjaGVzIHRoYXQgYXBwZWFy
IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5wdXQsCisgKiAgcmV0dXJuaW5nIGFuIGFycmF5
IG9mIHJlc3VsdHMuICBUaGUgcmVzdWx0cyBhcmUgb3JkZXJlZCB3aXRoIHRoZQorICogIGJlc3Qg
cXVhbGl0eSBtYXRjaCBmaXJzdC4KKyAqCisgKiAgQmVjYXVzZSB0aGUgZGV0ZWN0aW9uIG9ubHkg
bG9va3MgYXQgYSBsaW1pdGVkIGFtb3VudCBvZiB0aGUKKyAqICBpbnB1dCBieXRlIGRhdGEsIHNv
bWUgb2YgdGhlIHJldHVybmVkIGNoYXJzZXRzIG1heSBmYWlsIHRvIGhhbmRsZQorICogIHRoZSBh
bGwgb2YgaW5wdXQgZGF0YS4KKyAqICA8cD4KKyAqICBUaGUgcmV0dXJuZWQgVUNoYXJzZXRNYXRj
aCBvYmplY3RzIGFyZSBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqICBUaGV5IHdp
bGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9kaWZpZWQK
KyAqICAKKyAqIDxwPgorICogUmV0dXJuIGFuIGVycm9yIGlmIAorICogIDx1bD4KKyAqICAgIDxs
aT5ubyBjaGFyc2V0cyBhcHBlYXIgdG8gbWF0Y2ggdGhlIGlucHV0IGRhdGEuPC9saT4KKyAqICAg
IDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVkPC9saT4KKyAqICA8L3VsPgorICog
CisgKiBAcGFyYW0gdWNzZCAgICAgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2Vk
LgorICogQHBhcmFtIG1hdGNoZXNGb3VuZCAgcG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgd2ls
bCBiZSBzZXQgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY2hhcnNl
dHMgaWRlbnRpZmllZCB0aGF0IGFyZSBjb25zaXN0ZW50IHdpdGgKKyAqICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBpbnB1dCBkYXRhLiAgT3V0cHV0IG9ubHkuCisgKiBAcGFyYW0gc3RhdHVzICAg
ICAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlh
YmxlLgorICogQHJldHVybiAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHBv
aW50ZXJzIHRvIFVDaGFyU2V0TWF0Y2ggb2JqZWN0cy4KKyAqICAgICAgICAgICAgICAgICAgICAg
IFRoaXMgYXJyYXksIGFuZCB0aGUgVUNoYXJTZXRNYXRjaCBpbnN0YW5jZXMgdG8gd2hpY2ggaXQg
cmVmZXJzLAorICogICAgICAgICAgICAgICAgICAgICAgYXJlIG93bmVkIGJ5IHRoZSBVQ2hhcnNl
dERldGVjdG9yLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwKKyAqICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9kaWZpZWQuCisgKiBAZHJhZnQgSUNV
IDMuNAorICovCitVX0RSQUZUIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiogVV9FWFBPUlQyCit1Y3Nk
ZXRfZGV0ZWN0QWxsKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGludDMyX3QgKm1hdGNoZXNGb3Vu
ZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisKKy8qKgorICogIEdldCB0aGUgbmFtZSBvZiB0
aGUgY2hhcnNldCByZXByZXNlbnRlZCBieSBhIFVDaGFyc2V0TWF0Y2guCisgKgorICogIFRoZSBz
dG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisgKiAg
VUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNldE1h
dGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIFRoZSBuYW1lIHJldHVybmVkIGlzIHN1aXRhYmxl
IGZvciB1c2Ugd2l0aCB0aGUgSUNVIGNvbnZlcnNpb24gQVBJcy4KKyAqCisgKiAgQHBhcmFtIHVj
c20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBl
cnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAg
QHJldHVybiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGNoYXJzZXQuCisgKgorICog
IEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNz
ZGV0X2dldE5hbWUoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVz
KTsKKworLyoqCisgKiAgR2V0IGEgY29uZmlkZW5jZSBudW1iZXIgZm9yIHRoZSBxdWFsaXR5IG9m
IHRoZSBtYXRjaCBvZiB0aGUgYnl0ZQorICogIGRhdGEgd2l0aCB0aGUgY2hhcnNldC4gIENvbmZp
ZGVuY2UgbnVtYmVycyByYW5nZSBmcm9tIHplcm8gdG8gMTAwLAorICogIHdpdGggMTAwIHJlcHJl
c2VudGluZyBjb21wbGV0ZSBjb25maWRlbmNlIGFuZCB6ZXJvIHJlcHJlc2VudGluZworICogIG5v
IGNvbmZpZGVuY2UuCisgKgorICogIFRoZSBjb25maWRlbmNlIHZhbHVlcyBhcmUgc29tZXdoYXQg
YXJiaXRyYXJ5LiAgVGhleSBkZWZpbmUgYW4KKyAqICBhbiBvcmRlcmluZyB3aXRoaW4gdGhlIHJl
c3VsdHMgZm9yIGFueSBzaW5nbGUgZGV0ZWN0aW9uIG9wZXJhdGlvbgorICogIGJ1dCBhcmUgbm90
IGdlbmVyYWxseSBjb21wYXJhYmxlIGJldHdlZW4gdGhlIHJlc3VsdHMgZm9yIGRpZmZlcmVudCBp
bnB1dC4KKyAqCisgKiAgQSBjb25maWRlbmNlIHZhbHVlIG9mIHRlbiBkb2VzIGhhdmUgYSBnZW5l
cmFsIG1lYW5pbmcgLSBpdCBpcyB1c2VkCisgKiAgZm9yIGNoYXJzZXRzIHRoYXQgY2FuIHJlcHJl
c2VudCB0aGUgaW5wdXQgZGF0YSwgYnV0IGZvciB3aGljaCB0aGVyZQorICogIGlzIG5vIG90aGVy
IGluZGljYXRpb24gdGhhdCBzdWdnZXN0cyB0aGF0IHRoZSBjaGFyc2V0IGlzIHRoZSBjb3JyZWN0
IG9uZS4KKyAqICBQdXJlIDcgYml0IEFTQ0lJIGRhdGEsIGZvciBleGFtcGxlLCBpcyBjb21wYXRp
YmxlIHdpdGggYQorICogIGdyZWF0IG1hbnkgY2hhcnNldHMsIG1vc3Qgb2Ygd2hpY2ggd2lsbCBh
cHBlYXIgYXMgcG9zc2libGUgbWF0Y2hlcworICogIHdpdGggYSBjb25maWRlbmNlIG9mIDEwLgor
ICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBh
cmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhp
cyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBBIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0
aGUgY2hhcnNldCBtYXRjaC4KKyAqCisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBp
bnQzMl90IFVfRVhQT1JUMgordWNzZGV0X2dldENvbmZpZGVuY2UoY29uc3QgVUNoYXJzZXRNYXRj
aCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiAgR2V0IHRoZSBSRkMgMzA2
NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGRhdGEuCisgKgorICogIFRoZSBD
aGFyc2V0IERldGVjdGlvbiBzZXJ2aWNlIGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgZGV0ZWN0
aW5nCisgKiAgY2hhcnNldHMsIG5vdCBsYW5ndWFnZS4gIEZvciBzb21lLCBidXQgbm90IGFsbCwg
Y2hhcnNldHMsIGEgbGFuZ3VhZ2UgaXMKKyAqICBpZGVudGlmaWVkIGFzIGEgYnlwcm9kdWN0IG9m
IHRoZSBkZXRlY3Rpb24gcHJvY2VzcywgYW5kIHRoYXQgaXMgd2hhdAorICogIGlzIHJldHVybmVk
IGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogIENBVVRJT046CisgKiAgICAxLiAgTGFuZ3VhZ2Ug
aW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgaW5wdXQgZGF0YSBlbmNvZGVkIGluCisg
KiAgICAgICAgYWxsIGNoYXJzZXRzLiBJbiBwYXJ0aWN1bGFyLCBubyBsYW5ndWFnZSBpcyBpZGVu
dGlmaWVkCisgKiAgICAgICAgZm9yIFVURi04IGlucHV0IGRhdGEuCisgKgorICogICAgMi4gIENs
b3NlbHkgcmVsYXRlZCBsYW5ndWFnZXMgbWF5IHNvbWV0aW1lcyBiZSBjb25mdXNlZC4KKyAqCisg
KiAgSWYgbW9yZSBhY2N1cmF0ZSBsYW5ndWFnZSBkZXRlY3Rpb24gaXMgcmVxdWlyZWQsIGEgbGlu
Z3Vpc3RpYworICogIGFuYWx5c2lzIHBhY2thZ2Ugc2hvdWxkIGJlIHVzZWQuCisgKgorICogIFRo
ZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJpbmcgaXMgb3duZWQgYnkgdGhlCisg
KiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBVQ2hhcnNl
dE1hdGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0
IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBh
cmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIFRo
ZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0IGRhdGEsIG9yCisg
KiAgICAgICAgICAgICAgICAgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBsYW5ndWFnZSBjb3VsZCBu
b3QgYmUgZGV0ZXJtaW5lZC4KKyAqCisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBj
b25zdCBjaGFyICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0TGFuZ3VhZ2UoY29uc3QgVUNoYXJzZXRN
YXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAgKiAgR2V0IHRoZSBl
bnRpcmUgaW5wdXQgdGV4dCBhcyBhIFVDaGFyIHN0cmluZywgcGxhY2luZyBpdCBpbnRvCisgICog
IGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZlci4gIEEgdGVybWluYXRpbmcKKyAgKiAgTlVMIGNoYXJh
Y3RlciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBidWZmZXIgaWYgc3BhY2UgaXMgYXZhaWxhYmxl
LgorICAqCisgICogIFRoZSBudW1iZXIgb2YgVUNoYXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLCBu
b3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICAqICBOVUwsIGlzIHJldHVybmVkLiAKKyAg
KgorICAqICBJZiB0aGUgc3VwcGxpZWQgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCB0
byBob2xkIHRoZSBvdXRwdXQsCisgICogIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFyZSB1
bmRlZmluZWQuICBUaGUgZnVsbCBvdXRwdXQgc3RyaW5nIGxlbmd0aAorICAqICAoaW4gVUNoYXJz
KSBpcyByZXR1cm5lZCBhcyBhbHdheXMsIGFuZCBjYW4gYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGJ1
ZmZlcgorICAqICBvZiB0aGUgY29ycmVjdCBzaXplLgorICAqCisgICoKKyAgKiBAcGFyYW0gdWNz
bSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgICogQHBhcmFtIGJ1ZiAgICAgQSBVQ2hh
ciBidWZmZXIgdG8gYmUgZmlsbGVkIHdpdGggdGhlIGNvbnZlcnRlZCB0ZXh0IGRhdGEuCisgICog
QHBhcmFtIGNhcCAgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSBidWZmZXIgaW4gVUNoYXJzLgorICAq
IEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgICogQHJldHVybiAgICAgICAgVGhlIG51bWJlciBvZiBVQ2hhcnMg
aW4gdGhlIG91dHB1dCBzdHJpbmcuCisgICoKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAqLworVV9E
UkFGVCAgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRVQ2hhcnMoY29uc3QgVUNoYXJzZXRN
YXRjaCAqdWNzbSwKKyAgICAgICAgICAgICAgICAgVUNoYXIgKmJ1ZiwgaW50MzJfdCBjYXAsIFVF
cnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAgKiAgR2V0IGFuIGl0ZXJhdG9yIG92ZXIg
dGhlIHNldCBvZiBhbGwgZGV0ZWN0YWJsZSBjaGFyc2V0cyAtIAorICAqICBvdmVyIHRoZSBjaGFy
c2V0cyB0aGF0IGFyZSBrbm93biB0byB0aGUgY2hhcnNldCBkZXRlY3Rpb24KKyAgKiAgc2Vydmlj
ZS4KKyAgKgorICAqICBUaGUgcmV0dXJuZWQgVUVudW1lcmF0aW9uIHByb3ZpZGVzIGFjY2VzcyB0
byB0aGUgbmFtZXMgb2YKKyAgKiAgdGhlIGNoYXJzZXRzLgorICAqCisgICogIFRoZSBzdGF0ZSBv
ZiB0aGUgQ2hhcnNldCBkZXRlY3RvciB0aGF0IGlzIHBhc3NlZCBpbiBkb2VzIG5vdAorICAqICBh
ZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLCBidXQgcmVxdWlyaW5nIGEgdmFsaWQs
IG9wZW4KKyAgKiAgY2hhcnNldCBkZXRlY3RvciBhcyBhIHBhcmFtZXRlciBpbnN1cmVzIHRoYXQg
dGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZpY2UgaGFzIGJlZW4gc2FmZWx5IGluaXRp
YWxpemVkIGFuZCB0aGF0IHRoZSByZXF1aXJlZCBkZXRlY3Rpb24KKyAgKiAgZGF0YSBpcyBhdmFp
bGFibGUuCisgICoKKyAgKiAgQHBhcmFtIHVjc2QgYSBDaGFyc2V0IGRldGVjdG9yLgorICAqICBA
cGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0
aGlzIHZhcmlhYmxlLgorICAqICBAcmV0dXJuIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyBhY2Nlc3Mg
dG8gdGhlIGRldGVjdGFibGUgY2hhcnNldCBuYW1lcy4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAg
Ki8KKworVV9EUkFGVCAgVUVudW1lcmF0aW9uICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0QWxsRGV0
ZWN0YWJsZUNoYXJzZXRzKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsICBVRXJyb3JDb2Rl
ICpzdGF0dXMpOworCisKKy8qKgorICAqICBUZXN0IHdoZXRoZXIgaW5wdXQgZmlsdGVyaW5nIGlz
IGVuYWJsZWQgZm9yIHRoaXMgY2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgSW5wdXQgZmlsdGVyaW5n
IHJlbW92ZXMgdGV4dCB0aGF0IGFwcGVhcnMgdG8gYmUgSFRNTCBvciB4bWwKKyAgKiAgbWFya3Vw
IGZyb20gdGhlIGlucHV0IGJlZm9yZSBhcHBseWluZyB0aGUgY29kZSBwYWdlIGRldGVjdGlvbgor
ICAqICBoZXVyaXN0aWNzLgorICAqCisgICogIEBwYXJhbSB1Y3NkICBUaGUgY2hhcnNldCBkZXRl
Y3RvciB0byBjaGVjay4KKyAgKiAgQHJldHVybiBUUlVFIGlmIGZpbHRlcmluZyBpcyBlbmFibGVk
LgorICAqICBAZHJhZnQgSUNVIDMuNAorICAqLworVV9EUkFGVCAgVUJvb2wgVV9FWFBPUlQyCit1
Y3NkZXRfaXNJbnB1dEZpbHRlckVuYWJsZWQoY29uc3QgVUNoYXJzZXREZXRlY3RvciAqdWNzZCk7
CisKKworLyoqCisgKiBFbmFibGUgZmlsdGVyaW5nIG9mIGlucHV0IHRleHQuIElmIGZpbHRlcmlu
ZyBpcyBlbmFibGVkLAorICogdGV4dCB3aXRoaW4gYW5nbGUgYnJhY2tldHMgKCI8IiBhbmQgIj4i
KSB3aWxsIGJlIHJlbW92ZWQKKyAqIGJlZm9yZSBkZXRlY3Rpb24sIHdoaWNoIHdpbGwgcmVtb3Zl
IG1vc3QgSFRNTCBvciB4bWwgbWFya3VwLgorICoKKyAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJz
ZXQgZGV0ZWN0b3IgdG8gYmUgbW9kaWZpZWQuCisgKiBAcGFyYW0gZmlsdGVyIDxjb2RlPnRydWU8
L2NvZGU+IHRvIGVuYWJsZSBpbnB1dCB0ZXh0IGZpbHRlcmluZy4KKyAqIEByZXR1cm4gVGhlIHBy
ZXZpb3VzIHNldHRpbmcuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCAgVUJv
b2wgVV9FWFBPUlQyCit1Y3NkZXRfZW5hYmxlSW5wdXRGaWx0ZXIoVUNoYXJzZXREZXRlY3RvciAq
dWNzZCwgVUJvb2wgZmlsdGVyKTsKKworI2VuZGlmCisjZW5kaWYgICAvKiBfX1VDU0RFVF9IICov
CisKKwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMzU5ODMpCisrKyBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSwxMSArOTk1
LDE4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICAKICAg
ICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1l
LT5zZXR0aW5ncygpOwotICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
cmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4
dEVuY29kaW5nTmFtZSgpIDogU3RyaW5nKCkpOworICAgICAgICBpZiAoc2V0dGluZ3MpIHsKKyAg
ICAgICAgICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGhpbnREZWNvZGVyID0gTlVMTDsKKyAgICAg
ICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7IAor
ICAgICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgICAgIGhpbnREZWNvZGVyID0gcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmRl
Y29kZXIoKTsKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNy
ZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFt
ZSgpLCBzZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKSwgaGludERlY29kZXIpOworCX0g
ZWxzZSAKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIFN0cmluZygpKTsKICAgICAgICAgaWYgKG1fZW5jb2Rpbmcu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50
cmVlKCktPnBhcmVudCgpOwogICAgICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZy
YW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MobV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5z
ZXRFbmNvZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0
UmVzb3VyY2VEZWNvZGVyOjpEZWZhdWx0RW5jb2RpbmcpOworICAgICAgICAgICAgICAgIG1fZGVj
b2Rlci0+c2V0RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2Rpbmco
KSwgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5n
LAogICAgICAgICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNv
ZGluZ0Zyb21IVFRQSGVhZGVyKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuY3BwCShyZXZpc2lvbiAzNTk4MykKKysrIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSAiVGV4
dENvZGVjLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KIAorI2luY2x1ZGUgInVuaWNv
ZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNzZGV0LmgiCisKIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxOSwxNCArMzIyLDE2IEBAIGNvbnN0
IFRleHRFbmNvZGluZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICByZXR1cm4gc3BlY2lmaWVk
RGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VE
ZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lm
aWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVj
b2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNpZmll
ZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvciwgY29uc3QgVGV4dFJl
c291cmNlRGVjb2RlciogaGludERlY29kZXIpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWlu
ZUNvbnRlbnRUeXBlKG1pbWVUeXBlKSkKICAgICAsIG1fZGVjb2RlcihkZWZhdWx0RW5jb2Rpbmco
bV9jb250ZW50VHlwZSwgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKSkKKyAgICAsIG1faGludERl
Y29kZXIoaGludERlY29kZXIpCiAgICAgLCBtX3NvdXJjZShEZWZhdWx0RW5jb2RpbmcpCiAgICAg
LCBtX2NoZWNrZWRGb3JCT00oZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0KGZh
bHNlKQogICAgICwgbV9jaGVja2VkRm9ySGVhZENoYXJzZXQoZmFsc2UpCiAgICAgLCBtX3Nhd0Vy
cm9yKGZhbHNlKQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRl
Y3RvcikKIHsKIH0KIApAQCAtNDQwLDcgKzQ0NSw3IEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y2hlY2tGb3JCT00oY28KIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckNT
U0NoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92ZWREYXRhVG9C
dWZmZXIpCiB7Ci0gICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZykgeworICAgIGlm
IChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0gRW5jb2RpbmdGcm9t
UGFyZW50RnJhbWUpIHsKICAgICAgICAgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCA9IHRydWU7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTUyMSw3ICs1MjYsNyBAQCBjb25zdCBpbnQg
Ynl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gCiAKIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y2hlY2tGb3JIZWFkQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLCBib29s
JiBtb3ZlZERhdGFUb0J1ZmZlcikKIHsKLSAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVuY29k
aW5nKSB7CisgICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZyAmJiBtX3NvdXJjZSAh
PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSkgewogICAgICAgICBtX2NoZWNrZWRGb3JIZWFkQ2hh
cnNldCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc0OCw2ICs3NTMs
ODYgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RKYXBhbmVzZQogICAgIH0KIH0K
IAordm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RFbmNvZGluZyhjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuKQoreworICAgIC8vIE5lZWQgdG8gZGVjbGFyZSB0aGVzZSB0d28gdmFy
cyBoZXJlIHRvIHNsaWVuY2UgZ2NjJ3MgY29tcGxhaW50IGFib3V0CisgICAgLy8ganVtcGluZyBh
Y3Jvc3MgdmFyaWFibGUgZGVjbGFyYXRpb25zLgorICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKipt
YXRjaGVzOworICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nID0gTlVMTDsKKyAgICBpbnQgbWF0Y2hl
c19jb3VudCA9IDA7IAorICAgIGNvbnN0IGNoYXIqIGhpbnRfZW5jb2RpbmcgPSBtX2hpbnREZWNv
ZGVyID8gIG1faGludERlY29kZXItPmVuY29kaW5nKCkubmFtZSgpIDogTlVMTDsKKyAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9yKiBkZXRl
Y3RvciA9IHVjc2RldF9vcGVuKCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihkZXRlY3Rvciwg
dHJ1ZSk7CisgICAgdWNzZGV0X3NldFRleHQoZGV0ZWN0b3IsIGRhdGEsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGxlbiksICZzdGF0dXMpOyAKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAg
ICAgIGdvdG8gZmFpbDsKKyAgICAvLyBUT0RPKGp1bmdzaGlrKSA6IEEgZmV3IHRoaW5ncyB3ZSBj
YW4gZG8gb3RoZXIgdGhhbiBpbXByb3ZpbmcKKyAgICAvLyB0aGUgSUNVIGRldGVjdG9yIGl0c2Vs
Zi4gCisgICAgLy8gMS4gVXNlIHVjc2RldF9kZXRlY3RBbGwgYW5kIHBpY2sgdGhlIG1vc3QgbGlr
ZWx5IG9uZSBnaXZlbgorICAgIC8vICJ0aGUgY29udGV4dCIgKHBhcmVudC1lbmNvZGluZywgcmVm
ZXJyZXIgZW5jb2RpbmcsIGV0YykuCisgICAgLy8gMi4gJ0VtdWxhdGUnIEZpcmVmb3gvSUUncyBu
b24tVW5pdmVyc2FsIGRldGVjdG9ycyAoZS5nLgorICAgIC8vIENoaW5lc2UsIEphcGFuZXNlLCBS
dXNzaWFuLCBLb3JlYW4gYW5kIEhlYnJldykgYnkgcGlja2luZyB0aGUgCisgICAgLy8gZW5jb2Rp
bmcgd2l0aCBhIGhpZ2hlc3QgY29uZmlkZW5jZSBhbW9uZyB0aGUgZGV0ZXRjdG9yLXNwZWNpZmlj
CisgICAgLy8gbGltaXRlZCBzZXQgb2YgY2FuZGlkYXRlIGVuY29kaW5ncy4KKyAgICAvLyBCZWxv
dyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcnQgb2Ygd2hhdCdzIG91dGxp
bmVkCisgICAgLy8gYWJvdmUuCisgICAgbWF0Y2hlcyA9IHVjc2RldF9kZXRlY3RBbGwoZGV0ZWN0
b3IsICZtYXRjaGVzX2NvdW50LCAmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykp
CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoaGludF9lbmNvZGluZykgeworICAgICAgICAv
LyAxMCBpcyB0aGUgbWluaW11bSBjb25maWRlbmNlIHZhbHVlIGNvbnNpc3RlbnQgd2l0aCB0aGUg
Y29kZXBvaW50CisgICAgICAgIC8vIGFsbG9jYXRpb24gaW4gYSBnaXZlbiBlbmNvZGluZy4gVGhl
IHNpemUgb2YgYSBjaHVuayBwYXNzZWQgdG8KKyAgICAgICAgLy8gdXMgdmFyaWVzIGV2ZW4gZm9y
IHRoZSBzYW1lIGh0bWwgZmlsZSAoYXBwYXJlbnRseSBkZXBlbmRpbmcgb24gCisgICAgICAgIC8v
IHRoZSBuZXR3b3JrIGxvYWQpLiBXaGVuIHdlJ3JlIGdpdmVuIGEgcmF0aGVyIHNob3J0IGNodW5r
LCB3ZSAKKyAgICAgICAgLy8gZG9uJ3QgaGF2ZSBhIHN1ZmZpY2llbnRseSByZWxpYWJsZSBzaWdu
YWwgb3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0CisgICAgICAgIC8vIHRoZSBjaHVuayBpcyBjb25z
aXN0ZW50IHdpdGggYSBzZXQgb2YgZW5jb2RpbmdzLiBTbywgaW5zdGVhZCBvZgorICAgICAgICAv
LyBzZXR0aW5nIGFuIGFyYml0cmFyeSB0aHJlc2hvbGQsIHdlIGhhdmUgdG8gc2NhbiBhbGwgdGhl
IGVuY29kaW5ncworICAgICAgICAvLyBjb25zaXN0ZW50IHdpdGggdGhlIGRhdGEuICAKKyAgICAg
ICAgY29uc3QgaW50MzJfdCBrVGhyZXNvbGQgPSAxMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtYXRjaGVzX2NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludDMyX3QgY29uZmlkZW5j
ZSA9IHVjc2RldF9nZXRDb25maWRlbmNlKG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAg
ICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNvbmZpZGVuY2UgPCBrVGhyZXNvbGQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXRjaF9lbmNvZGluZyA9IHVjc2RldF9nZXRO
YW1lKG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVE9ETyA6IE1h
a2UgdGhpcyBjb21wYXJpc29uIGV2ZW4gZnV6emllciB0byBjYXRjaCBjYXNlcworICAgICAgICAg
ICAgLy8gbGlrZSBJU08tODg1OS0xIGFuZCBXaW5kb3dzLTEyNTIgYW5kIElTTy04ODU5LTgtSSBh
bmQKKyAgICAgICAgICAgIC8vIFdpbmRvd3MtMTI1NSwga3NfY181NjAxLTE5ODcgYW5kIEVVQy1L
Ui4gVGhlIGxhc3QgY2FzZQorICAgICAgICAgICAgLy8gY2FuIGJlIHdvcmtlZCBhcm91bmQgY29t
cGFyaW5nIGNhbm9uaWNhbCBuYW1lcy4KKyAgICAgICAgICAgIGlmICghdWNudl9jb21wYXJlTmFt
ZXMobWF0Y2hfZW5jb2RpbmcsIGhpbnRfZW5jb2RpbmcpKSB7CisgICAgICAgICAgICAgICAgZW5j
b2RpbmcgPSBoaW50X2VuY29kaW5nOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIElmIG5vIG1hdGNoIGlzIGZvdW5kIHNvIGZh
ciwganVzdCBwaWNrIHRoZSB0b3AgbWF0Y2guIAorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVu
IGEgcGFyZW50IGZyYW1lIGluIEVVQy1KUCByZWZlcnMgdG8KKyAgICAvLyBhIGNoaWxkIGZyYW1l
IGluIFNoaWZ0X0pJUyBhbHRob3VnaCB0aGF0J3Mgbm90IHZlcnkgbGlrZWx5LgorICAgIGlmICgh
ZW5jb2RpbmcgJiYgbWF0Y2hlc19jb3VudCA+IDApCisgICAgICAgIGVuY29kaW5nID0gdWNzZGV0
X2dldE5hbWUobWF0Y2hlc1swXSwgJnN0YXR1cyk7CisgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMp
KQorICAgICAgICBzZXRFbmNvZGluZyhlbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOwor
ZmFpbDoKKyAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3IpOworfQorCitib29sIFRleHRSZXNvdXJj
ZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBjb25zdAoreworICAgIHJldHVybiAobV91c2Vz
RW5jb2RpbmdEZXRlY3RvciAmJiBtX3NvdXJjZSA9PSBEZWZhdWx0RW5jb2RpbmcpIHx8CisgICAg
ICAgICAgIChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX2hpbnREZWNv
ZGVyICYmCisJICAgIG1faGludERlY29kZXItPnNvdXJjZSgpID09IEF1dG9EZXRlY3RlZEVuY29k
aW5nKTsgCit9CisKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGxlbikKIHsKICAgICBpZiAoIW1fY2hlY2tlZEZvckJPTSkKQEAgLTc2
Nyw2ICs4NTIsMTEgQEAgU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAog
ICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25z
dHJlYW0gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgc29tZSBkZWNvZGluZy4KICAgICBpZiAo
bV9zb3VyY2UgIT0gVXNlckNob3NlbkVuY29kaW5nICYmIG1fc291cmNlICE9IEF1dG9EZXRlY3Rl
ZEVuY29kaW5nICYmIGVuY29kaW5nKCkuaXNKYXBhbmVzZSgpKQogICAgICAgICBkZXRlY3RKYXBh
bmVzZUVuY29kaW5nKGRhdGEsIGxlbik7CisgICAgLy8gSWYgbm8gZW5jb2RpbmcgaXMgc3BlY2lm
aWVkIGZvciBwYXJlbnQgZnJhbWUgYW5kIGl0cyBlbmNvZGluZyBpcyBhdXRvLWRldGVjdGVkLAor
ICAgIC8vIHN1YmZyYW1lcyBzaG91bGQgYmUgc3ViamVjdCB0byBhdXRvIGRldGVjdGlvbiBhcyB3
ZWxsIHdoZW4gbm8gZW5jb2RpbmcgaXMKKyAgICAvLyBzcGVjaWZpZWQgZm9yIHRoZW0uIAorICAg
IGVsc2UgaWYgKHNob3VsZEF1dG9EZXRlY3QoKSkKKyAgICAgICAgZGV0ZWN0RW5jb2RpbmcoZGF0
YSwgbGVuKTsKIAogICAgIEFTU0VSVChlbmNvZGluZygpLmlzVmFsaWQoKSk7CiAKQEAgLTc4Niw2
ICs4NzYsMTAgQEAgU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAogCiBT
dHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogeworICAgIGlmIChtX2J1ZmZlci5z
aXplKCkgJiYgIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ICYmCisgICAgICAgIChtX2NvbnRlbnRU
eXBlID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpICYmIHNob3VsZEF1dG9EZXRlY3Qo
KSkKKyAgICAgICAgZGV0ZWN0RW5jb2RpbmcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXpl
KCkpOworCiAgICAgU3RyaW5nIHJlc3VsdCA9IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0
YSgpLCBtX2J1ZmZlci5zaXplKCksIHRydWUsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vy
cm9yKTsKICAgICBtX2J1ZmZlci5jbGVhcigpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCShyZXZpc2lvbiAzNTk4MykKKysrIFdlYkNv
cmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIg
KzM2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgRW5jb2RpbmdGcm9tTWV0YVRhZywKICAgICAgICAg
RW5jb2RpbmdGcm9tQ1NTQ2hhcnNldCwKICAgICAgICAgRW5jb2RpbmdGcm9tSFRUUEhlYWRlciwK
LSAgICAgICAgVXNlckNob3NlbkVuY29kaW5nCisgICAgICAgIFVzZXJDaG9zZW5FbmNvZGluZywK
KyAgICAgICAgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKICAgICB9OwogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCkp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0g
VGV4dEVuY29kaW5nKCksIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IgPSBmYWxzZSwgY29uc3Qg
VGV4dFJlc291cmNlRGVjb2RlciogaGludERlY29kZXIgPSBOVUxMKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0
RW5jb2RpbmcpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNv
ZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yLCBoaW50
RGVjb2RlcikpOwogICAgIH0KICAgICB+VGV4dFJlc291cmNlRGVjb2RlcigpOwogCkBAIC01MCwx
MSArNTEsMTMgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoKTsKICAgICBTdHJpbmcgZmx1c2goKTsKLSAgICAKKworICAgIEVuY29k
aW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgYm9vbCBz
YXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBU
ZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nLAorCQkg
ICAgICAgIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0bywgY29uc3QgVGV4dFJlc291cmNlRGVjb2Rl
ciogaGludERlY29kZXIpOwogCiAgICAgZW51bSBDb250ZW50VHlwZSB7IFBsYWluVGV4dCwgSFRN
TCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0IGlzIGVxdWl2YWxlbnQgdG8gZGlyZWN0bHkgdXNp
bmcgVGV4dERlY29kZXIuCiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNvbnRlbnRU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpAQCAtNjQsMTUgKzY3LDE5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBjaGVja0ZvckNTU0NoYXJzZXQoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCYg
bW92ZWREYXRhVG9CdWZmZXIpOwogICAgIGJvb2wgY2hlY2tGb3JIZWFkQ2hhcnNldChjb25zdCBj
aGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7CiAgICAgdm9pZCBkZXRlY3RK
YXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIHZvaWQgZGV0ZWN0RW5j
b2RpbmcoY29uc3QgY2hhciosIHNpemVfdCk7CisgICAgYm9vbCBzaG91bGRBdXRvRGV0ZWN0KCkg
Y29uc3Q7IAogCiAgICAgQ29udGVudFR5cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RGVjb2Rl
ciBtX2RlY29kZXI7CisgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogbV9oaW50RGVjb2Rl
cjsKICAgICBFbmNvZGluZ1NvdXJjZSBtX3NvdXJjZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9idWZm
ZXI7CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JCT007CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JDU1ND
aGFyc2V0OwogICAgIGJvb2wgbV9jaGVja2VkRm9ySGVhZENoYXJzZXQ7CiAgICAgYm9vbCBtX3Nh
d0Vycm9yOworICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3RvcjsKIH07CiAKIH0KSW5kZXg6
IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcAkocmV2aXNpb24gMzU5ODMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdl
KiBwYWdlKQogICAgICwgbV9zaG91bGRQYWludEN1c3RvbVNjcm9sbGJhcnMoZmFsc2UpCiAgICAg
LCBtX3pvb21zVGV4dE9ubHkoZmFsc2UpCiAgICAgLCBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3Ry
aWN0TW9kZSh0cnVlKQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSkKIHsKICAg
ICAvLyBBIEZyYW1lIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFs
aXplIHRoZSBBdG9taWNTdHJpbmcgCiAgICAgLy8gaGFzaCBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBp
dC4KQEAgLTM3OCw0ICszNzksOSBAQCB2b2lkIFNldHRpbmdzOjpzZXRFbmZvcmNlQ1NTTUlNRVR5
cGVJblN0CiAgICAgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUgPSBlbmZvcmNlQ1NT
TUlNRVR5cGVJblN0cmljdE1vZGU7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNFbmNvZGlu
Z0RldGVjdG9yKGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IpCit7CisgICAgbV91c2VzRW5jb2Rp
bmdEZXRlY3RvciA9IHVzZXNFbmNvZGluZ0RldGVjdG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMzU5ODMpCisrKyBXZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNv
bnN0IFN0cmluZyYpOwogICAgICAgICBjb25zdCBTdHJpbmcmIGRlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0VGV4dEVuY29kaW5nTmFtZTsgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBzZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcihib29sKTsKKyAgICAgICAg
Ym9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0VuY29kaW5n
RGV0ZWN0b3I7IH0KIAogICAgICAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29u
c3QgS1VSTCYpOwogICAgICAgICBjb25zdCBLVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOyB9CkBAIC0yMjIsNiArMjI1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fc2hvdWxkUGFpbnRDdXN0
b21TY3JvbGxiYXJzIDogMTsKICAgICAgICAgYm9vbCBtX3pvb21zVGV4dE9ubHkgOiAxOwogICAg
ICAgICBib29sIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAgICAg
Ym9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yIDogMTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShy
ZXZpc2lvbiAzNTk4MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDMyICsxMjEsNiBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5CiAKIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUqIGdG
b250UGxhdGZvcm1EYXRhQ2FjaGUgPSAwOwogCi1zdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBh
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKLXsKLSAg
ICAvLyBBbGlhcyBDb3VyaWVyIDwtPiBDb3VyaWVyIE5ldwotICAgIHN0YXRpYyBBdG9taWNTdHJp
bmcgY291cmllcigiQ291cmllciIpLCBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIpOwotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHlOYW1lLCBjb3VyaWVyKSkKLSAgICAgICAgcmV0dXJu
IGNvdXJpZXJOZXc7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIGNvdXJp
ZXJOZXcpKQotICAgICAgICByZXR1cm4gY291cmllcjsKLQotICAgIC8vIEFsaWFzIFRpbWVzIGFu
ZCBUaW1lcyBOZXcgUm9tYW4uCi0gICAgc3RhdGljIEF0b21pY1N0cmluZyB0aW1lcygiVGltZXMi
KSwgdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseU5hbWUsIHRpbWVzKSkKLSAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIHRpbWVzTmV3Um9tYW4pKQot
ICAgICAgICByZXR1cm4gdGltZXM7Ci0gICAgCi0gICAgLy8gQWxpYXMgQXJpYWwgYW5kIEhlbHZl
dGljYQotICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgYXJpYWwoIkFyaWFsIiksIGhlbHZldGljYSgi
SGVsdmV0aWNhIik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseU5hbWUsIGFyaWFs
KSkKLSAgICAgICAgcmV0dXJuIGhlbHZldGljYTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmFtaWx5TmFtZSwgaGVsdmV0aWNhKSkKLSAgICAgICAgcmV0dXJuIGFyaWFsOwotCi0gICAgcmV0
dXJuIGVtcHR5QXRvbTsKLX0KLQogRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oCShyZXZpc2lvbiAzNTk4MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBX
ZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZvbnRTaXpl
IgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUiCisjZGVm
aW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXNF
bmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRVc2VyU3R5bGVTaGVldEVuYWJsZWRQcmVm
ZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSIKICNk
ZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXkgQCJXZWJLaXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJXZWJLaXRTaG91bGRQcmludEJhY2tncm91
bmRzUHJlZmVyZW5jZUtleSIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0J
KHJldmlzaW9uIDM1OTgzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwg
Y2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBAIjE2IiwgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERlZmF1bHRGb250U2l6ZVByZWZlcmVuY2VLZXksCiAgICAgICAgIEAiMTMiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemVQcmVmZXJl
bmNlS2V5LAogICAgICAgICBAIklTTy04ODU5LTEiLCAgICAgICAgICAgICAgICAgIFdlYktpdERl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VL
ZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VXNlclN0
eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCIiLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRTaG91bGRQcmlu
dEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSwKQEAgLTg1NSw2ICs4NTYsMTYgQEAgc3RhdGljIFdl
YkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIF9wcml2YXRlLT5hdXRvbWF0aWNh
bGx5RGV0ZWN0c0NhY2hlTW9kZWwgPSBhdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWw7CiB9
CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3IKK3sKKyAgICByZXR1cm4gW3NlbGYgX2Jv
b2xWYWx1ZUZvcktleTogV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQcmVmZXJlbmNlS2V5XTsK
K30KKworLSAodm9pZClzZXRVc2VzRW5jb2RpbmdEZXRlY3RvcjooQk9PTClmbGFnCit7CisgICAg
W3NlbGYgX3NldEJvb2xWYWx1ZTogZmxhZyBmb3JLZXk6IFdlYktpdFVzZXNFbmNvZGluZ0RldGVj
dG9yUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKE5TVGltZUludGVydmFsKV9iYWNrRm9yd2FyZENh
Y2hlRXhwaXJhdGlvbkludGVydmFsCiB7CiAgICAgLy8gRklYTUU6IFRoZXJlJ3MgcHJvYmFibHkg
bm8gZ29vZCByZWFzb24gdG8gcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCB1c2VyIGRlZmF1bHRzIGlu
c3RlYWQgb2Ygc2VsZi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1By
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQ
cml2YXRlLmgJKHJldmlzaW9uIDM1OTgzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw5IEBAIGV4dGVybiBO
U1N0cmluZyAqV2ViUHJlZmVyZW5jZXNSZW1vdmVkTm8KIC0gKEJPT0wpYXBwbGljYXRpb25DaHJv
bWVNb2RlRW5hYmxlZDsKIC0gKHZvaWQpc2V0QXBwbGljYXRpb25DaHJvbWVNb2RlRW5hYmxlZEVu
YWJsZWQ6KEJPT0wpZmxhZzsKIAorLSAoQk9PTCl1c2VzRW5jb2RpbmdEZXRlY3RvcjsKKy0gKHZv
aWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxhZzsKKwogLSAoQk9PTClyZXNwZWN0
U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOwogLSAodm9pZClzZXRSZXNwZWN0U3RhbmRhcmRT
dHlsZUtleUVxdWl2YWxlbnRzOihCT09MKWZsYWc7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CShyZXZpc2lvbiAzNTk4MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OTEsNiArOTkxLDcgQEAgc3RhdGljIGJvb2wgZGVidWdXaWRnZXQgPSB0
cnVlOwogICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShbcHJlZmVyZW5jZXMg
ZGVmYXVsdEZpeGVkRm9udFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXpl
KFtwcmVmZXJlbmNlcyBkZWZhdWx0Rm9udFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoW3ByZWZlcmVuY2VzIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lXSk7
CisgICAgc2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKFtwcmVmZXJlbmNlcyB1c2Vz
RW5jb2RpbmdEZXRlY3Rvcl0pOwogICAgIHNldHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShb
cHJlZmVyZW5jZXMgZmFudGFzeUZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRG
b250RmFtaWx5KFtwcmVmZXJlbmNlcyBmaXhlZEZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+
c2V0Rm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncyhbcHJlZmVyZW5jZXMgX2ZvcmNlRlRQRGlyZWN0
b3J5TGlzdGluZ3NdKTsK
</data>
<flag name="review"
          id="13164"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27539</attachid>
            <date>2009-02-10 14:20:14 -0800</date>
            <delta_ts>2009-02-11 16:02:02 -0800</delta_ts>
            <desc>patch with Eric&apos;s comments addressed</desc>
            <filename>16482.patch.5</filename>
            <type>text/plain</type>
            <size>44321</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDgyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDItMTAgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SG9vayB1cCBJQ1UgZW5jb2RpbmcgZGV0ZWN0b3Igd2l0aCBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3Rpb24qIHRvIHBsYXRmb3JtL3RleHQuIEN1cnJl
bnRseSwKKyAgICAgICAgICAgdGhlIG9ubHkgaW1wbGVtZW50YXRpb24gdXNlcyBJQ1UuIFN0dWIg
aXMgYWRkZWQgZm9yIAorICAgICAgICAgICBwb3J0cyB0aGF0IGRvIG5vdCB1c2UgSUNVLgorCisg
ICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgyCisKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cAor
ICAgICAgICAqIGljdS91bmljb2RlL3Vjc2RldC5oCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp3cml0ZSk6CisgICAgICAg
ICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckNTU0NoYXJzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JIZWFkQ2hhcnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCk6CisgICAgICAgICogbG9hZGVyL1RleHRS
ZXNvdXJjZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6
Oik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0SGludERlY29kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmhpbnRFbmNvZGluZ05hbWUpOgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcik6
CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6
OnVzZXNFbmNvZGluZ0RldGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdGlvbklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4
dEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlv
bk5vbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdFRleHRFbmNvZGluZyk6
CisKIDIwMDktMDItMTAgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IFNocmluayB0aGUgc2l6ZSBvZiBhbGwgcmVwbGFjZWQgZWxlbWVudHMgKGltYWdlcywgZm9ybSBj
b250cm9scywgcGx1Z2lucykgYnkgNCBieXRlcyBieSBwYWNraW5nIHRoZQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwOCw3ICs0MDgsNyBAQCBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xs
ZXI5c2VsZWN0CiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXJDMUVQTlNfNUZyYW1l
RWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjVmbHVzaEV2CiBfX1pON1dlYkNv
cmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVjb2RlRVBLY20KLV9fWk43V2ViQ29yZTE5VGV4dFJl
c291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEyVGV4dEVuY29kaW5nRQorX19aTjdX
ZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOU182U3RyaW5nRVJLTlNfMTJUZXh0RW5j
b2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJD
b3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoRXgKIF9f
Wk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyMTZjbGVhckNvbnRleHRNZW51RXYKQEAg
LTYyMCw2ICs2MjAsNyBAQCBfX1pON1dlYkNvcmU4U2V0dGluZ3MzNnNldE9mZmxpbmVXZWJBcHBs
CiBfX1pON1dlYkNvcmU4U2V0dGluZ3M0MHNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9t
YXRpY2FsbHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzNDBzZXRUZXh0RGlyZWN0aW9uU3VibWVu
dUluY2x1c2lvbkJlaGF2aW9yRU5TXzM3VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhh
dmlvckUKIF9fWk43V2ViQ29yZThTZXR0aW5nczQxc2V0TmVlZHNLZXlib2FyZEV2ZW50RGlzYW1i
aWd1YXRpb25RdWlya3NFYgorX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXRVc2VzRW5jb2RpbmdE
ZXRlY3RvckViCiBfX1pON1dlYkNvcmU4YmxhbmtVUkxFdgogX19aTjdXZWJDb3JlOHBhcnNlVVJM
RVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzdfTlNSZWN0CkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwNzkzKQorKysg
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
Njk2MSw2ICs2OTYxLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRFbmNvZGluZ0RldGVjdGlvbi5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEVuY29kaW5nRGV0ZWN0aW9uSUNVLmNwcCINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVx0ZXh0XFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA0MDc5MykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00MjUwLDYgKzQyNTAsOCBAQAogCQlDMDkxNTg4RTBEQjQyMDkyMDBF
NTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8q
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcCAqLzsgfTsKIAkJQzA5MTU4OEYwREI0MjA5
MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDkxNTg4OTBEQjQyMDkyMDBFNTVBRjQg
LyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCAqLzsgfTsKIAkJQzBERkM4NzAwREI2ODQx
QTAwM0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25z
b2xlQ3VzdG9tLmNwcCAqLzsgfTsKKwkJQzEwNURBNjIwRjNBQTY4RjAwMURENDRGIC8qIFRleHRF
bmNvZGluZ0RldGVjdGlvbklDVS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0
ZWN0aW9uSUNVLmNwcCAqLzsgfTsKKwkJQzEwNURBNjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRF
bmNvZGluZ0RldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlv
bi5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgg
Ki87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAg
Ki87IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VE
MjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05
MDQ1LDYgKzkwNDcsOCBAQAogCQlDMDkxNTg4ODBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50
aW5lZE9iamVjdFdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMDkxNTg4OTBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNRdWFyYW50aW5lZE9i
amVjdFdyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBERkM4NkYwREI2
ODQxQTAwM0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0NvbnNvbGVDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0
aW9uSUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNv
ZGluZ0RldGVjdGlvbklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMxMDVE
QTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2
RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAw
QzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEzMTgwLDYgKzEzMTg0LDggQEAKIAkJCQlCMkMzREExNTBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmcuY3BwICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0RW5jb2RpbmcuaCAqLywKKwkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4
dEVuY29kaW5nRGV0ZWN0aW9uLmggKi8sCisJCQkJQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8q
IFRleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAgKi8sCiAJCQkJQjJDM0RBMTgwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywKIAkJCQlCMkMzREExOTBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAqLywKIAkJCQlCMkMzREExQTBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5jcHAgKi8sCkBAIC0xNjcyMyw2ICsxNjcyOSw3
IEBACiAJCQkJMkUzQUM4NEUwRjNEMDZEMTAwNjMzRjA0IC8qIFdvcmtlckNvbnRleHRQcm94eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQUM4NTAwRjNEMDZGNzAwNjMzRjA0IC8qIFdvcmtlck9i
amVjdFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODgzREYyODBGM0QwNDVEMDBGMTlCRjYg
LyogVmlzaWJsZVNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzEwNURBNjQwRjNBQTZC
ODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0x
ODcwMiw2ICsxODcwOSw3IEBACiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRp
bWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEg
LyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk2REI0NjBGM0E4ODIy
MDA1NzNDQjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzEwNURBNjIwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODgzREYyNzBGM0QwNDVEMDBGMTlCRjYgLyogVmlzaWJsZVNl
bGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pY3UvdW5pY29kZS91Y3NkZXQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzUwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYs
IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqICAgQ29ycG9yYXRpb24gYW5kIG90
aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBmaWxlIG5h
bWU6ICB1Y3NkZXQuaAorICogICBlbmNvZGluZzogICBVUy1BU0NJSQorICogICBpbmRlbnRhdGlv
bjo0CisgKgorICogICBjcmVhdGVkIG9uOiAyMDA1QXVnMDQKKyAqICAgY3JlYXRlZCBieTogQW5k
eSBIZW5pbmdlcgorICoKKyAqICAgSUNVIENoYXJhY3RlciBTZXQgRGV0ZWN0aW9uLCBBUEkgZm9y
IEMKKyAqCisgKiAgIERyYWZ0IHZlcnNpb24gMTggT2N0IDIwMDUKKyAqCisgKi8KKworI2lmbmRl
ZiBfX1VDU0RFVF9ICisjZGVmaW5lIF9fVUNTREVUX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5
cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19DT05WRVJTSU9OCisjaW5jbHVkZSAidW5pY29kZS91
ZW51bS5oIgorCisvKioKKyAqIFxmaWxlIAorICogXGJyaWVmIEMgQVBJOiBDaGFyc2V0IERldGVj
dGlvbiBBUEkKKyAqCisgKiBUaGlzIEFQSSBwcm92aWRlcyBhIGZhY2lsaXR5IGZvciBkZXRlY3Rp
bmcgdGhlCisgKiBjaGFyc2V0IG9yIGVuY29kaW5nIG9mIGNoYXJhY3RlciBkYXRhIGluIGFuIHVu
a25vd24gdGV4dCBmb3JtYXQuCisgKiBUaGUgaW5wdXQgZGF0YSBjYW4gYmUgZnJvbSBhbiBhcnJh
eSBvZiBieXRlcy4KKyAqIDxwPgorICogQ2hhcmFjdGVyIHNldCBkZXRlY3Rpb24gaXMgYXQgYmVz
dCBhbiBpbXByZWNpc2Ugb3BlcmF0aW9uLiAgVGhlIGRldGVjdGlvbgorICogcHJvY2VzcyB3aWxs
IGF0dGVtcHQgdG8gaWRlbnRpZnkgdGhlIGNoYXJzZXQgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGNo
YXJhY3RlcmlzdGljcworICogb2YgdGhlIGJ5dGUgZGF0YSwgYnV0IHRoZSBwcm9jZXNzIGlzIHBh
cnRseSBzdGF0aXN0aWNhbCBpbiBuYXR1cmUsIGFuZAorICogdGhlIHJlc3VsdHMgY2FuIG5vdCBi
ZSBndWFyYW50ZWVkIHRvIGFsd2F5cyBiZSBjb3JyZWN0LgorICogPHA+CisgKiBGb3IgYmVzdCBh
Y2N1cmFjeSBpbiBjaGFyc2V0IGRldGVjdGlvbiwgdGhlIGlucHV0IGRhdGEgc2hvdWxkIGJlIHBy
aW1hcmlseQorICogaW4gYSBzaW5nbGUgbGFuZ3VhZ2UsIGFuZCBhIG1pbmltdW0gb2YgYSBmZXcg
aHVuZHJlZCBieXRlcyB3b3J0aCBvZiBwbGFpbiB0ZXh0CisgKiBpbiB0aGUgbGFuZ3VhZ2UgYXJl
IG5lZWRlZC4gIFRoZSBkZXRlY3Rpb24gcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8KKyAqIGlnbm9y
ZSBodG1sIG9yIHhtbCBzdHlsZSBtYXJrdXAgdGhhdCBjb3VsZCBvdGhlcndpc2Ugb2JzY3VyZSB0
aGUgY29udGVudC4KKyAqLworIAorCitzdHJ1Y3QgVUNoYXJzZXREZXRlY3RvcjsKKy8qKgorICAq
IFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBjaGFyc2V0IGRldGVjdG9yCisgICogQGRyYWZ0IElD
VSAzLjYKKyAgKi8KK3R5cGVkZWYgc3RydWN0IFVDaGFyc2V0RGV0ZWN0b3IgVUNoYXJzZXREZXRl
Y3RvcjsKKworc3RydWN0IFVDaGFyc2V0TWF0Y2g7CisvKioKKyAgKiAgT3BhcXVlIHN0cnVjdHVy
ZSByZXByZXNlbnRpbmcgYSBtYXRjaCB0aGF0IHdhcyBpZGVudGlmaWVkCisgICogIGZyb20gYSBj
aGFyc2V0IGRldGVjdGlvbiBvcGVyYXRpb24uCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCit0
eXBlZGVmIHN0cnVjdCBVQ2hhcnNldE1hdGNoIFVDaGFyc2V0TWF0Y2g7CisKKy8qKgorICAqICBP
cGVuIGEgY2hhcnNldCBkZXRlY3Rvci4KKyAgKgorICAqICBAcGFyYW0gc3RhdHVzIEFueSBlcnJv
ciBjb25kaXRpb25zIG9jY3VycmluZyBkdXJpbmcgdGhlIG9wZW4KKyAgKiAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJl
dHVybiB0aGUgbmV3bHkgb3BlbmVkIGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIEBkcmFmdCBJQ1Ug
My42CisgICovCitVX0RSQUZUIFVDaGFyc2V0RGV0ZWN0b3IgKiBVX0VYUE9SVDIKK3Vjc2RldF9v
cGVuKFVFcnJvckNvZGUgICAqc3RhdHVzKTsKKworLyoqCisgICogQ2xvc2UgYSBjaGFyc2V0IGRl
dGVjdG9yLiAgQWxsIHN0b3JhZ2UgYW5kIGFueSBvdGhlciByZXNvdXJjZXMKKyAgKiAgIG93bmVk
IGJ5IHRoaXMgY2hhcnNldCBkZXRlY3RvciB3aWxsIGJlIHJlbGVhc2VkLiAgRmFpbHVyZSB0bwor
ICAqICAgY2xvc2UgYSBjaGFyc2V0IGRldGVjdG9yIHdoZW4gZmluaXNoZWQgd2l0aCBpdCBjYW4g
cmVzdWx0IGluCisgICogICBtZW1vcnkgbGVha3MgaW4gdGhlIGFwcGxpY2F0aW9uLgorICAqCisg
ICogIEBwYXJhbSB1Y3NkICBUaGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSBjbG9zZWQuCisgICog
IEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfY2xv
c2UoVUNoYXJzZXREZXRlY3RvciAqdWNzZCk7CisKKy8qKgorICAqIFNldCB0aGUgaW5wdXQgYnl0
ZSBkYXRhIHdob3NlIGNoYXJzZXQgaXMgdG8gZGV0ZWN0ZWQuCisgICoKKyAgKiBPd25lcnNoaXAg
b2YgdGhlIGlucHV0ICB0ZXh0IGJ5dGUgYXJyYXkgcmVtYWlucyB3aXRoIHRoZSBjYWxsZXIuCisg
ICogVGhlIGlucHV0IHN0cmluZyBtdXN0IG5vdCBiZSBhbHRlcmVkIG9yIGRlbGV0ZWQgdW50aWwg
dGhlIGNoYXJzZXQKKyAgKiBkZXRlY3RvciBpcyBlaXRoZXIgY2xvc2VkIG9yIHJlc2V0IHRvIHJl
ZmVyIHRvIGRpZmZlcmVudCBpbnB1dCB0ZXh0LgorICAqCisgICogQHBhcmFtIHVjc2QgICB0aGUg
Y2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICAqIEBwYXJhbSB0ZXh0SW4gdGhlIGlucHV0
IHRleHQgb2YgdW5rbm93biBlbmNvZGluZy4gICAuCisgICogQHBhcmFtIGxlbiAgICB0aGUgbGVu
Z3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBvciAtMSBpZiB0aGUgdGV4dAorICAqICAgICAgICAgICAg
ICAgaXMgTlVMIHRlcm1pbmF0ZWQuCisgICogQHBhcmFtIHN0YXR1cyBhbnkgZXJyb3IgY29uZGl0
aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqCisgICogQGRyYWZ0
IElDVSAzLjYKKyAgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXRUZXh0KFVD
aGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGNvbnN0IGNoYXIgKnRleHRJbiwgaW50MzJfdCBsZW4sIFVF
cnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqIFNldCB0aGUgZGVjbGFyZWQgZW5jb2RpbmcgZm9y
IGNoYXJzZXQgZGV0ZWN0aW9uLgorICogIFRoZSBkZWNsYXJlZCBlbmNvZGluZyBvZiBhbiBpbnB1
dCB0ZXh0IGlzIGFuIGVuY29kaW5nIG9idGFpbmVkCisgKiAgYnkgdGhlIHVzZXIgZnJvbSBhbiBo
dHRwIGhlYWRlciBvciB4bWwgZGVjbGFyYXRpb24gb3Igc2ltaWxhciBzb3VyY2UgdGhhdAorICog
IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhZGRpdGlvbmFsIGhpbnQgdG8gdGhlIGNoYXJzZXQgZGV0
ZWN0b3IuCisgKgorICogIEhvdyBhbmQgd2hldGhlciB0aGUgZGVjbGFyZWQgZW5jb2Rpbmcgd2ls
bCBiZSB1c2VkIGR1cmluZyB0aGUKKyAqICBkZXRlY3Rpb24gcHJvY2VzcyBpcyBUQkQuCisgKgor
ICogQHBhcmFtIHVjc2QgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgorICog
QHBhcmFtIGVuY29kaW5nICBhbiBlbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgZGF0YSBvYnRhaW5l
ZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgIGEgaGVhZGVyIG9yIGRlY2xhcmF0aW9uIG9yIG90
aGVyIHNvdXJjZSBvdXRzaWRlCisgKiAgICAgICAgICAgICAgICAgIG9mIHRoZSBieXRlIGRhdGEg
aXRzZWxmLgorICogQHBhcmFtIGxlbmd0aCAgICB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGluZyBu
YW1lLCBvciAtMSBpZiB0aGUgbmFtZSBzdHJpbmcKKyAqICAgICAgICAgICAgICAgICAgaXMgTlVM
IHRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFy
ZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKgorICogQGRyYWZ0IElDVSAzLjYK
KyAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X3NldERlY2xhcmVkRW5jb2Rpbmco
VUNoYXJzZXREZXRlY3RvciAqdWNzZCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGludDMyX3QgbGVu
Z3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICogUmV0dXJuIHRoZSBjaGFyc2V0
IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBzdXBwbGllZCBpbnB1dCBkYXRhLgorICogCisgKiBOb3Rl
IHRob3VnaCwgdGhhdCBiZWNhdXNlIHRoZSBkZXRlY3Rpb24gCisgKiBvbmx5IGxvb2tzIGF0IHRo
ZSBzdGFydCBvZiB0aGUgaW5wdXQgZGF0YSwKKyAqIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhh
dCB0aGUgcmV0dXJuZWQgY2hhcnNldCB3aWxsIGZhaWwgdG8gaGFuZGxlCisgKiB0aGUgZnVsbCBz
ZXQgb2YgaW5wdXQgZGF0YS4KKyAqIDxwPgorICogVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0Y2gg
b2JqZWN0IGlzIG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLgorICogSXQgd2lsbCByZW1h
aW4gdmFsaWQgdW50aWwgdGhlIGRldGVjdG9yIGlucHV0IGlzIHJlc2V0LCBvciB1bnRpbAorICog
dGhlIGRldGVjdG9yIGlzIGNsb3NlZC4KKyAqIDxwPgorICogVGhlIGZ1bmN0aW9uIHdpbGwgZmFp
bCBpZgorICogIDx1bD4KKyAqICAgIDxsaT5ubyBjaGFyc2V0IGFwcGVhcnMgdG8gbWF0Y2ggdGhl
IGRhdGEuPC9saT4KKyAqICAgIDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVkPC9s
aT4KKyAqICA8L3VsPgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0
b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBzdGF0dXMgICAgYW55IGVycm9yIGNvbmRpdGlvbnMg
YXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAg
YSBVQ2hhcnNldE1hdGNoICByZXByZXNlbnRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgY2hhcnNldCwK
KyAqICAgICAgICAgICAgICAgICAgb3IgTlVMTCBpZiBubyBjaGFyc2V0IG1hdGNoZXMgdGhlIGJ5
dGUgZGF0YS4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IFVDaGFy
c2V0TWF0Y2ggKiBVX0VYUE9SVDIKK3Vjc2RldF9kZXRlY3QoVUNoYXJzZXREZXRlY3RvciAqdWNz
ZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKyAgICAKKworLyoqCisgKiAgRmluZCBhbGwgY2hhcnNl
dCBtYXRjaGVzIHRoYXQgYXBwZWFyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW5wdXQsCisg
KiAgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJlc3VsdHMuICBUaGUgcmVzdWx0cyBhcmUgb3JkZXJl
ZCB3aXRoIHRoZQorICogIGJlc3QgcXVhbGl0eSBtYXRjaCBmaXJzdC4KKyAqCisgKiAgQmVjYXVz
ZSB0aGUgZGV0ZWN0aW9uIG9ubHkgbG9va3MgYXQgYSBsaW1pdGVkIGFtb3VudCBvZiB0aGUKKyAq
ICBpbnB1dCBieXRlIGRhdGEsIHNvbWUgb2YgdGhlIHJldHVybmVkIGNoYXJzZXRzIG1heSBmYWls
IHRvIGhhbmRsZQorICogIHRoZSBhbGwgb2YgaW5wdXQgZGF0YS4KKyAqICA8cD4KKyAqICBUaGUg
cmV0dXJuZWQgVUNoYXJzZXRNYXRjaCBvYmplY3RzIGFyZSBvd25lZCBieSB0aGUgVUNoYXJzZXRE
ZXRlY3Rvci4KKyAqICBUaGV5IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBkZXRlY3RvciBp
cyBjbG9zZWQgb3IgbW9kaWZpZWQKKyAqICAKKyAqIDxwPgorICogUmV0dXJuIGFuIGVycm9yIGlm
IAorICogIDx1bD4KKyAqICAgIDxsaT5ubyBjaGFyc2V0cyBhcHBlYXIgdG8gbWF0Y2ggdGhlIGlu
cHV0IGRhdGEuPC9saT4KKyAqICAgIDxsaT5ubyBpbnB1dCB0ZXh0IGhhcyBiZWVuIHByb3ZpZGVk
PC9saT4KKyAqICA8L3VsPgorICogCisgKiBAcGFyYW0gdWNzZCAgICAgICAgICB0aGUgY2hhcnNl
dCBkZXRlY3RvciB0byBiZSB1c2VkLgorICogQHBhcmFtIG1hdGNoZXNGb3VuZCAgcG9pbnRlciB0
byBhIHZhcmlhYmxlIHRoYXQgd2lsbCBiZSBzZXQgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgb2YgY2hhcnNldHMgaWRlbnRpZmllZCB0aGF0IGFyZSBjb25zaXN0ZW50IHdp
dGgKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dCBkYXRhLiAgT3V0cHV0IG9ubHku
CisgKiBAcGFyYW0gc3RhdHVzICAgICAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0
ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogQHJldHVybiAgICAgICAgICAgICAgQSBwb2lu
dGVyIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIFVDaGFyU2V0TWF0Y2ggb2JqZWN0cy4KKyAq
ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJyYXksIGFuZCB0aGUgVUNoYXJTZXRNYXRjaCBp
bnN0YW5jZXMgdG8gd2hpY2ggaXQgcmVmZXJzLAorICogICAgICAgICAgICAgICAgICAgICAgYXJl
IG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgdW50
aWwKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQgb3IgbW9k
aWZpZWQuCisgKiBAZHJhZnQgSUNVIDMuNAorICovCitVX0RSQUZUIGNvbnN0IFVDaGFyc2V0TWF0
Y2ggKiogVV9FWFBPUlQyCit1Y3NkZXRfZGV0ZWN0QWxsKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2Qs
IGludDMyX3QgKm1hdGNoZXNGb3VuZCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisKKy8qKgor
ICogIEdldCB0aGUgbmFtZSBvZiB0aGUgY2hhcnNldCByZXByZXNlbnRlZCBieSBhIFVDaGFyc2V0
TWF0Y2guCisgKgorICogIFRoZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJpbmcg
aXMgb3duZWQgYnkgdGhlCisgKiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZhbGlk
IHdoaWxlIHRoZSBVQ2hhcnNldE1hdGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIFRoZSBuYW1l
IHJldHVybmVkIGlzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgSUNVIGNvbnZlcnNpb24gQVBJ
cy4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICog
IEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG1hdGNo
aW5nIGNoYXJzZXQuCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3Qg
Y2hhciAqIFVfRVhQT1JUMgordWNzZGV0X2dldE5hbWUoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNz
bSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiAgR2V0IGEgY29uZmlkZW5jZSBudW1i
ZXIgZm9yIHRoZSBxdWFsaXR5IG9mIHRoZSBtYXRjaCBvZiB0aGUgYnl0ZQorICogIGRhdGEgd2l0
aCB0aGUgY2hhcnNldC4gIENvbmZpZGVuY2UgbnVtYmVycyByYW5nZSBmcm9tIHplcm8gdG8gMTAw
LAorICogIHdpdGggMTAwIHJlcHJlc2VudGluZyBjb21wbGV0ZSBjb25maWRlbmNlIGFuZCB6ZXJv
IHJlcHJlc2VudGluZworICogIG5vIGNvbmZpZGVuY2UuCisgKgorICogIFRoZSBjb25maWRlbmNl
IHZhbHVlcyBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5LiAgVGhleSBkZWZpbmUgYW4KKyAqICBhbiBv
cmRlcmluZyB3aXRoaW4gdGhlIHJlc3VsdHMgZm9yIGFueSBzaW5nbGUgZGV0ZWN0aW9uIG9wZXJh
dGlvbgorICogIGJ1dCBhcmUgbm90IGdlbmVyYWxseSBjb21wYXJhYmxlIGJldHdlZW4gdGhlIHJl
c3VsdHMgZm9yIGRpZmZlcmVudCBpbnB1dC4KKyAqCisgKiAgQSBjb25maWRlbmNlIHZhbHVlIG9m
IHRlbiBkb2VzIGhhdmUgYSBnZW5lcmFsIG1lYW5pbmcgLSBpdCBpcyB1c2VkCisgKiAgZm9yIGNo
YXJzZXRzIHRoYXQgY2FuIHJlcHJlc2VudCB0aGUgaW5wdXQgZGF0YSwgYnV0IGZvciB3aGljaCB0
aGVyZQorICogIGlzIG5vIG90aGVyIGluZGljYXRpb24gdGhhdCBzdWdnZXN0cyB0aGF0IHRoZSBj
aGFyc2V0IGlzIHRoZSBjb3JyZWN0IG9uZS4KKyAqICBQdXJlIDcgYml0IEFTQ0lJIGRhdGEsIGZv
ciBleGFtcGxlLCBpcyBjb21wYXRpYmxlIHdpdGggYQorICogIGdyZWF0IG1hbnkgY2hhcnNldHMs
IG1vc3Qgb2Ygd2hpY2ggd2lsbCBhcHBlYXIgYXMgcG9zc2libGUgbWF0Y2hlcworICogIHdpdGgg
YSBjb25maWRlbmNlIG9mIDEwLgorICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBt
YXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJl
IHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBBIGNv
bmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgY2hhcnNldCBtYXRjaC4KKyAqCisgKiAgQGRyYWZ0IElD
VSAzLjYKKyAqLworVV9EUkFGVCBpbnQzMl90IFVfRVhQT1JUMgordWNzZGV0X2dldENvbmZpZGVu
Y2UoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoq
CisgKiAgR2V0IHRoZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0
IGRhdGEuCisgKgorICogIFRoZSBDaGFyc2V0IERldGVjdGlvbiBzZXJ2aWNlIGlzIGludGVuZGVk
IHByaW1hcmlseSBmb3IgZGV0ZWN0aW5nCisgKiAgY2hhcnNldHMsIG5vdCBsYW5ndWFnZS4gIEZv
ciBzb21lLCBidXQgbm90IGFsbCwgY2hhcnNldHMsIGEgbGFuZ3VhZ2UgaXMKKyAqICBpZGVudGlm
aWVkIGFzIGEgYnlwcm9kdWN0IG9mIHRoZSBkZXRlY3Rpb24gcHJvY2VzcywgYW5kIHRoYXQgaXMg
d2hhdAorICogIGlzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKgorICogIENBVVRJT046
CisgKiAgICAxLiAgTGFuZ3VhZ2UgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgaW5w
dXQgZGF0YSBlbmNvZGVkIGluCisgKiAgICAgICAgYWxsIGNoYXJzZXRzLiBJbiBwYXJ0aWN1bGFy
LCBubyBsYW5ndWFnZSBpcyBpZGVudGlmaWVkCisgKiAgICAgICAgZm9yIFVURi04IGlucHV0IGRh
dGEuCisgKgorICogICAgMi4gIENsb3NlbHkgcmVsYXRlZCBsYW5ndWFnZXMgbWF5IHNvbWV0aW1l
cyBiZSBjb25mdXNlZC4KKyAqCisgKiAgSWYgbW9yZSBhY2N1cmF0ZSBsYW5ndWFnZSBkZXRlY3Rp
b24gaXMgcmVxdWlyZWQsIGEgbGluZ3Vpc3RpYworICogIGFuYWx5c2lzIHBhY2thZ2Ugc2hvdWxk
IGJlIHVzZWQuCisgKgorICogIFRoZSBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgbmFtZSBzdHJp
bmcgaXMgb3duZWQgYnkgdGhlCisgKiAgVUNoYXJzZXRNYXRjaCwgYW5kIHdpbGwgcmVtYWluIHZh
bGlkIHdoaWxlIHRoZSBVQ2hhcnNldE1hdGNoCisgKiAgaXMgdmFsaWQuCisgKgorICogIEBwYXJh
bSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBB
bnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgor
ICogIEByZXR1cm4gICAgICAgIFRoZSBSRkMgMzA2NiBjb2RlIGZvciB0aGUgbGFuZ3VhZ2Ugb2Yg
dGhlIGlucHV0IGRhdGEsIG9yCisgKiAgICAgICAgICAgICAgICAgYW4gZW1wdHkgc3RyaW5nIGlm
IHRoZSBsYW5ndWFnZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KKyAqCisgKiAgQGRyYWZ0IElD
VSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1Y3NkZXRfZ2V0TGFu
Z3VhZ2UoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwor
CisvKioKKyAgKiAgR2V0IHRoZSBlbnRpcmUgaW5wdXQgdGV4dCBhcyBhIFVDaGFyIHN0cmluZywg
cGxhY2luZyBpdCBpbnRvCisgICogIGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZlci4gIEEgdGVybWlu
YXRpbmcKKyAgKiAgTlVMIGNoYXJhY3RlciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBidWZmZXIg
aWYgc3BhY2UgaXMgYXZhaWxhYmxlLgorICAqCisgICogIFRoZSBudW1iZXIgb2YgVUNoYXJzIGlu
IHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICAqICBO
VUwsIGlzIHJldHVybmVkLiAKKyAgKgorICAqICBJZiB0aGUgc3VwcGxpZWQgYnVmZmVyIGlzIHNt
YWxsZXIgdGhhbiByZXF1aXJlZCB0byBob2xkIHRoZSBvdXRwdXQsCisgICogIHRoZSBjb250ZW50
cyBvZiB0aGUgYnVmZmVyIGFyZSB1bmRlZmluZWQuICBUaGUgZnVsbCBvdXRwdXQgc3RyaW5nIGxl
bmd0aAorICAqICAoaW4gVUNoYXJzKSBpcyByZXR1cm5lZCBhcyBhbHdheXMsIGFuZCBjYW4gYmUg
dXNlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlcgorICAqICBvZiB0aGUgY29ycmVjdCBzaXplLgorICAq
CisgICoKKyAgKiBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgICog
QHBhcmFtIGJ1ZiAgICAgQSBVQ2hhciBidWZmZXIgdG8gYmUgZmlsbGVkIHdpdGggdGhlIGNvbnZl
cnRlZCB0ZXh0IGRhdGEuCisgICogQHBhcmFtIGNhcCAgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSBi
dWZmZXIgaW4gVUNoYXJzLgorICAqIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25z
IGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogQHJldHVybiAgICAgICAg
VGhlIG51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIG91dHB1dCBzdHJpbmcuCisgICoKKyAgKiBAZHJh
ZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCAgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRV
Q2hhcnMoY29uc3QgVUNoYXJzZXRNYXRjaCAqdWNzbSwKKyAgICAgICAgICAgICAgICAgVUNoYXIg
KmJ1ZiwgaW50MzJfdCBjYXAsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAgKiAg
R2V0IGFuIGl0ZXJhdG9yIG92ZXIgdGhlIHNldCBvZiBhbGwgZGV0ZWN0YWJsZSBjaGFyc2V0cyAt
IAorICAqICBvdmVyIHRoZSBjaGFyc2V0cyB0aGF0IGFyZSBrbm93biB0byB0aGUgY2hhcnNldCBk
ZXRlY3Rpb24KKyAgKiAgc2VydmljZS4KKyAgKgorICAqICBUaGUgcmV0dXJuZWQgVUVudW1lcmF0
aW9uIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmFtZXMgb2YKKyAgKiAgdGhlIGNoYXJzZXRzLgor
ICAqCisgICogIFRoZSBzdGF0ZSBvZiB0aGUgQ2hhcnNldCBkZXRlY3RvciB0aGF0IGlzIHBhc3Nl
ZCBpbiBkb2VzIG5vdAorICAqICBhZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLCBi
dXQgcmVxdWlyaW5nIGEgdmFsaWQsIG9wZW4KKyAgKiAgY2hhcnNldCBkZXRlY3RvciBhcyBhIHBh
cmFtZXRlciBpbnN1cmVzIHRoYXQgdGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZpY2Ug
aGFzIGJlZW4gc2FmZWx5IGluaXRpYWxpemVkIGFuZCB0aGF0IHRoZSByZXF1aXJlZCBkZXRlY3Rp
b24KKyAgKiAgZGF0YSBpcyBhdmFpbGFibGUuCisgICoKKyAgKiAgQHBhcmFtIHVjc2QgYSBDaGFy
c2V0IGRldGVjdG9yLgorICAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBh
cmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqICBAcmV0dXJuIGFuIGl0ZXJh
dG9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGRldGVjdGFibGUgY2hhcnNldCBuYW1lcy4KKyAg
KiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8KKworVV9EUkFGVCAgVUVudW1lcmF0aW9uICogVV9FWFBP
UlQyCit1Y3NkZXRfZ2V0QWxsRGV0ZWN0YWJsZUNoYXJzZXRzKGNvbnN0IFVDaGFyc2V0RGV0ZWN0
b3IgKnVjc2QsICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICAqICBUZXN0IHdoZXRo
ZXIgaW5wdXQgZmlsdGVyaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgY2hhcnNldCBkZXRlY3Rvci4K
KyAgKiAgSW5wdXQgZmlsdGVyaW5nIHJlbW92ZXMgdGV4dCB0aGF0IGFwcGVhcnMgdG8gYmUgSFRN
TCBvciB4bWwKKyAgKiAgbWFya3VwIGZyb20gdGhlIGlucHV0IGJlZm9yZSBhcHBseWluZyB0aGUg
Y29kZSBwYWdlIGRldGVjdGlvbgorICAqICBoZXVyaXN0aWNzLgorICAqCisgICogIEBwYXJhbSB1
Y3NkICBUaGUgY2hhcnNldCBkZXRlY3RvciB0byBjaGVjay4KKyAgKiAgQHJldHVybiBUUlVFIGlm
IGZpbHRlcmluZyBpcyBlbmFibGVkLgorICAqICBAZHJhZnQgSUNVIDMuNAorICAqLworVV9EUkFG
VCAgVUJvb2wgVV9FWFBPUlQyCit1Y3NkZXRfaXNJbnB1dEZpbHRlckVuYWJsZWQoY29uc3QgVUNo
YXJzZXREZXRlY3RvciAqdWNzZCk7CisKKworLyoqCisgKiBFbmFibGUgZmlsdGVyaW5nIG9mIGlu
cHV0IHRleHQuIElmIGZpbHRlcmluZyBpcyBlbmFibGVkLAorICogdGV4dCB3aXRoaW4gYW5nbGUg
YnJhY2tldHMgKCI8IiBhbmQgIj4iKSB3aWxsIGJlIHJlbW92ZWQKKyAqIGJlZm9yZSBkZXRlY3Rp
b24sIHdoaWNoIHdpbGwgcmVtb3ZlIG1vc3QgSFRNTCBvciB4bWwgbWFya3VwLgorICoKKyAqIEBw
YXJhbSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgbW9kaWZpZWQuCisgKiBAcGFy
YW0gZmlsdGVyIDxjb2RlPnRydWU8L2NvZGU+IHRvIGVuYWJsZSBpbnB1dCB0ZXh0IGZpbHRlcmlu
Zy4KKyAqIEByZXR1cm4gVGhlIHByZXZpb3VzIHNldHRpbmcuCisgKgorICogQGRyYWZ0IElDVSAz
LjYKKyAqLworVV9EUkFGVCAgVUJvb2wgVV9FWFBPUlQyCit1Y3NkZXRfZW5hYmxlSW5wdXRGaWx0
ZXIoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgVUJvb2wgZmlsdGVyKTsKKworI2VuZGlmCisjZW5k
aWYgICAvKiBfX1VDU0RFVF9IICovCisKKwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2
aXNpb24gNDA3OTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDMsMTEgKzEwMDMsMTcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6d3JpdGUoY29u
c3QgY2hhciogc3RyLAogICAgIAogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIG1fZGVjb2RlciA9
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRpbmdz
ID8gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7CisgICAg
ICAgIGlmIChzZXR0aW5ncykgeworICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MtPmRlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKCksIHNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKKyAgICAg
ICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7IAor
ICAgICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0SGludERlY29kZXIocGFyZW50RnJhbWUtPmRv
Y3VtZW50KCktPmRlY29kZXIoKSk7CisJfSBlbHNlIAorICAgICAgICAgICAgbV9kZWNvZGVyID0g
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgU3RyaW5nKCkp
OwogICAgICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEZyYW1l
KiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgICAgICAgICBp
ZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPmNhbkFjY2VzcyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAg
ICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5pbnB1dEVuY29kaW5nKCksIFRleHRSZXNvdXJjZURlY29kZXI6OkRlZmF1bHRFbmNvZGlu
Zyk7CisgICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhwYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGlu
Z0Zyb21QYXJlbnRGcmFtZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldEVuY29kaW5nKG1fZW5jb2RpbmcsCiAgICAgICAgICAgICAgICAgbV9lbmNvZGluZ1dh
c0Nob3NlbkJ5VXNlciA/IFRleHRSZXNvdXJjZURlY29kZXI6OlVzZXJDaG9zZW5FbmNvZGluZyA6
IFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQwNzkzKQorKysgV2Vi
Q29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDggQEAKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZ0RldGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCkBAIC0zMjAsMTQg
KzMyMiwxNiBAQCBjb25zdCBUZXh0RW5jb2RpbmcmIFRleHRSZXNvdXJjZURlY29kZXI6CiAgICAg
cmV0dXJuIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZzsKIH0KIAotVGV4dFJlc291cmNlRGVjb2Rl
cjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0
RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykKK1RleHRSZXNvdXJjZURlY29kZXI6
OlRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVu
Y29kaW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0
b3IpCiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKG1pbWVUeXBlKSkK
ICAgICAsIG1fZGVjb2RlcihkZWZhdWx0RW5jb2RpbmcobV9jb250ZW50VHlwZSwgc3BlY2lmaWVk
RGVmYXVsdEVuY29kaW5nKSkKKyAgICAsIG1faGludERlY29kZXIoTlVMTCkKICAgICAsIG1fc291
cmNlKERlZmF1bHRFbmNvZGluZykKICAgICAsIG1fY2hlY2tlZEZvckJPTShmYWxzZSkKICAgICAs
IG1fY2hlY2tlZEZvckNTU0NoYXJzZXQoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JIZWFkQ2hh
cnNldChmYWxzZSkKICAgICAsIG1fc2F3RXJyb3IoZmFsc2UpCisgICAgLCBtX3VzZXNFbmNvZGlu
Z0RldGVjdG9yKHVzZXNFbmNvZGluZ0RldGVjdG9yKQogewogfQogCkBAIC00NDUsNyArNDQ5LDcg
QEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckJPTShjbwogCiBib29sIFRleHRS
ZXNvdXJjZURlY29kZXI6OmNoZWNrRm9yQ1NTQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgbGVuLCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcikKIHsKLSAgICBpZiAobV9zb3VyY2UgIT0g
RGVmYXVsdEVuY29kaW5nKSB7CisgICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZyAm
JiBtX3NvdXJjZSAhPSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSkgewogICAgICAgICBtX2NoZWNr
ZWRGb3JDU1NDaGFyc2V0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NTI2LDcgKzUzMCw3IEBAIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAK
IAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW4sIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKQogewotICAgIGlm
IChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcpIHsKKyAgICBpZiAobV9zb3VyY2UgIT0gRGVm
YXVsdEVuY29kaW5nICYmIG1fc291cmNlICE9IEVuY29kaW5nRnJvbVBhcmVudEZyYW1lKSB7CiAg
ICAgICAgIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtNzUzLDYgKzc1NywxNiBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6
OmRldGVjdEphcGFuZXNlCiAgICAgfQogfQogCisvLyBGb3IgSFRNTCBhbmQgWE1MIGRvY3VtZW50
LCBpZiB3ZSBjYW4gbm90IGZpbmQgcHJvcGVyIGVuY29kaW5nIGV2ZW4gYWZ0ZXIKKy8vIGRvY3Vt
ZW50IGlzIGNvbXBsZXRlbHkgbG9hZGVkLCB3ZSBuZWVkIHRvIHVzZSBhdXRvbWF0aWNhbGx5IGRl
dGVjdAorLy8gdGhlIGVuY29kaW5nIG9mIGRvY3VtZW50IGlmIHVzZXIgaGFzIGVuYWJsZWQgdGhp
cyBvcHRpb24uCitib29sIFRleHRSZXNvdXJjZURlY29kZXI6OnNob3VsZEF1dG9EZXRlY3QoKSBj
b25zdAoreworICAgIHJldHVybiAobV91c2VzRW5jb2RpbmdEZXRlY3RvciAmJiBtX3NvdXJjZSA9
PSBEZWZhdWx0RW5jb2RpbmcpIHx8CisgICAgICAgICAgIChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zy
b21QYXJlbnRGcmFtZSAmJiBtX2hpbnREZWNvZGVyICYmCisJICAgIG1faGludERlY29kZXItPnNv
dXJjZSgpID09IEF1dG9EZXRlY3RlZEVuY29kaW5nKTsgCit9CisKIFN0cmluZyBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbikKIHsKICAgICBp
ZiAoIW1fY2hlY2tlZEZvckJPTSkKQEAgLTc3Miw2ICs3ODYsMTQgQEAgU3RyaW5nIFRleHRSZXNv
dXJjZURlY29kZXI6OmRlY29kZShjb25zdAogICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0
byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRv
bmUgc29tZSBkZWNvZGluZy4KICAgICBpZiAobV9zb3VyY2UgIT0gVXNlckNob3NlbkVuY29kaW5n
ICYmIG1fc291cmNlICE9IEF1dG9EZXRlY3RlZEVuY29kaW5nICYmIGVuY29kaW5nKCkuaXNKYXBh
bmVzZSgpKQogICAgICAgICBkZXRlY3RKYXBhbmVzZUVuY29kaW5nKGRhdGEsIGxlbik7CisgICAg
Ly8gSWYgbm8gZW5jb2RpbmcgaXMgc3BlY2lmaWVkIGZvciBwYXJlbnQgZnJhbWUgYW5kIGl0cyBl
bmNvZGluZyBpcyBhdXRvLWRldGVjdGVkLAorICAgIC8vIHN1YmZyYW1lcyBzaG91bGQgYmUgc3Vi
amVjdCB0byBhdXRvIGRldGVjdGlvbiBhcyB3ZWxsIHdoZW4gbm8gZW5jb2RpbmcgaXMKKyAgICAv
LyBzcGVjaWZpZWQgZm9yIHRoZW0uIAorICAgIGVsc2UgaWYgKHNob3VsZEF1dG9EZXRlY3QoKSkg
eworICAgICAgIFRleHRFbmNvZGluZyBkZXRlY3RlZEVuY29kaW5nOworICAgICAgIGlmIChkZXRl
Y3RUZXh0RW5jb2RpbmcoZGF0YSwgbGVuLCBoaW50RW5jb2RpbmdOYW1lKCksICZkZXRlY3RlZEVu
Y29kaW5nKSkKKyAgICAgICAgICAgc2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0Rl
dGVjdGVkRW5jb2RpbmcpOworICAgfQogCiAgICAgQVNTRVJUKGVuY29kaW5nKCkuaXNWYWxpZCgp
KTsKIApAQCAtNzkxLDYgKzgxMywxNyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVj
b2RlKGNvbnN0CiAKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCgpCiB7CisgICAv
LyBGb3IgSFRNTCBhbmQgWE1MIGRvY3VtZW50LCBpZiB3ZSBjYW4gbm90IGZpbmQgcHJvcGVyIGVu
Y29kaW5nIGV2ZW4KKyAgIC8vIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkgbG9hZGVkLCB3ZSBuZWVk
IHRvIHVzZSBhdXRvbWF0aWNhbGx5IGRldGVjdAorICAgLy8gdGhlIGVuY29kaW5nIG9mIGRvY3Vt
ZW50IGlmIG90aGVyIGNvbmRpdGlvbnMgZm9yIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVkLgor
ICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJiYgIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ICYmCisg
ICAgICAgIChtX2NvbnRlbnRUeXBlID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpICYm
IHNob3VsZEF1dG9EZXRlY3QoKSkgeworICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5j
b2Rpbmc7CisgICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwg
bV9idWZmZXIuc2l6ZSgpLCBoaW50RW5jb2RpbmdOYW1lKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgICBzZXRFbmNvZGlu
ZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgfQorCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCksIHRydWUsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vycm9yKTsKICAgICBt
X2J1ZmZlci5jbGVhcigpOwogICAgIG1fZGVjb2Rlci5yZXNldChtX2RlY29kZXIuZW5jb2Rpbmco
KSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCShyZXZpc2lvbiA0MDc5
MykKKysrIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMjUgKzM2LDMyIEBAIHB1YmxpYzoKICAgICAgICAgRW5jb2RpbmdGcm9tTWV0YVRh
ZywKICAgICAgICAgRW5jb2RpbmdGcm9tQ1NTQ2hhcnNldCwKICAgICAgICAgRW5jb2RpbmdGcm9t
SFRUUEhlYWRlciwKLSAgICAgICAgVXNlckNob3NlbkVuY29kaW5nCisgICAgICAgIFVzZXJDaG9z
ZW5FbmNvZGluZywKKyAgICAgICAgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKICAgICB9OwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0gVGV4
dEVuY29kaW5nKCkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVs
dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCksIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IgPSBm
YWxzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFJlc291cmNlRGVj
b2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dFJlc291cmNlRGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2Vz
RW5jb2RpbmdEZXRlY3RvcikpOwogICAgIH0KICAgICB+VGV4dFJlc291cmNlRGVjb2RlcigpOwog
CiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1NvdXJj
ZSk7CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVjb2Rlci5lbmNvZGluZygpOyB9CiAKKyAgICB2b2lkIHNldEhpbnREZWNvZGVyKGNvbnN0IFRl
eHRSZXNvdXJjZURlY29kZXIqIGhpbnREZWNvZGVyKSB7CisgICAgICAgIG1faGludERlY29kZXIg
PSBoaW50RGVjb2RlcjsKKyAgICB9CisgICAgCiAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBTdHJpbmcgZmx1c2goKTsKLSAgICAKKworICAg
IEVuY29kaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAg
Ym9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToK
LSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5n
LAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rvcik7CiAK
ICAgICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQ
bGFpblRleHQgaXMgZXF1aXZhbGVudCB0byBkaXJlY3RseSB1c2luZyBUZXh0RGVjb2Rlci4KICAg
ICBzdGF0aWMgQ29udGVudFR5cGUgZGV0ZXJtaW5lQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CkBAIC02NCwxNSArNzEsMjMgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9y
Q1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7
CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wm
IG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29u
c3QgY2hhciosIHNpemVfdCk7CisgICAgYm9vbCBzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3Q7IAor
CisgICAgY29uc3QgY2hhciogaGludEVuY29kaW5nTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIG1faGludERlY29kZXIgPyBtX2hpbnREZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSA6IE5V
TEw7CisgICAgfQogCiAgICAgQ29udGVudFR5cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RGVj
b2RlciBtX2RlY29kZXI7CisgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogbV9oaW50RGVj
b2RlcjsKKyAgICAvL1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2hpbnREZWNvZGVyOwog
ICAgIEVuY29kaW5nU291cmNlIG1fc291cmNlOwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsK
ICAgICBib29sIG1fY2hlY2tlZEZvckJPTTsKICAgICBib29sIG1fY2hlY2tlZEZvckNTU0NoYXJz
ZXQ7CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldDsKICAgICBib29sIG1fc2F3RXJy
b3I7CisgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOwogfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBh
Z2UpCiAgICAgLCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyhmYWxzZSkKICAgICAsIG1f
em9vbXNUZXh0T25seShmYWxzZSkKICAgICAsIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RN
b2RlKHRydWUpCisgICAgLCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKQogICAgICwgbV9t
YXhpbXVtRGVjb2RlZEltYWdlU2l6ZShzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KQogICAgICwgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhmYWxzZSkKIHsKQEAgLTQxMiw2
ICs0MTMsMTEgQEAgdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUGFpbnROYXRpdmVDb250cgogfQog
I2VuZGlmCiAKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGJvb2wgdXNl
c0VuY29kaW5nRGV0ZWN0b3IpCit7CisgICAgbV91c2VzRW5jb2RpbmdEZXRlY3RvciA9IHVzZXNF
bmNvZGluZ0RldGVjdG9yOworfQorCiB2b2lkIFNldHRpbmdzOjpzZXRBbGxvd1NjcmlwdHNUb0Ns
b3NlV2luZG93cyhib29sIGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKQogewogICAgIG1fYWxs
b3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgPSBhbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93czsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAKICAgICAgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJp
bmcmKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVmYXVsdFRleHRFbmNvZGluZ05hbWU7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNl
c0VuY29kaW5nRGV0ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9y
OyB9CiAKICAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwm
KTsKICAgICAgICAgY29uc3QgS1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQpAQCAtMjU2LDYgKzI1OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xs
YmFycyA6IDE7CiAgICAgICAgIGJvb2wgbV96b29tc1RleHRPbmx5IDogMTsKICAgICAgICAgYm9v
bCBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSA6IDE7CisgICAgICAgIGJvb2wgbV91
c2VzRW5jb2RpbmdEZXRlY3RvciA6IDE7CiAgICAgICAgIHNpemVfdCBtX21heGltdW1EZWNvZGVk
SW1hZ2VTaXplOwogICAgICAgICBib29sIG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgOiAx
OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFRleHRFbmNvZGluZ0RldGVjdGlvbl9oCisjZGVmaW5lIFRleHRFbmNvZGlu
Z0RldGVjdGlvbl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dEVuY29kaW5n
OworCitib29sIGRldGVjdFRleHRFbmNvZGluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaGludEVuY29kaW5nTmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRleHRFbmNvZGluZyAqZGV0ZWN0ZWRFbmNvZGluZyk7
CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
RGV0ZWN0aW9uSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nRGV0ZWN0aW9uSUNVLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rpb25JQ1UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0
RW5jb2RpbmdEZXRlY3Rpb24uaCIKKworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1
ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNzZGV0LmgiCisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIGRldGVjdFRleHRFbmNvZGluZyhjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nICpkZXRlY3RlZEVuY29kaW5nKQoreworICAgIC8v
IE5lZWQgdG8gZGVjbGFyZSB0aGVzZSB0d28gdmFycyBoZXJlIHRvIHNsaWVuY2UgZ2NjJ3MgY29t
cGxhaW50IGFib3V0CisgICAgLy8ganVtcGluZyBhY3Jvc3MgdmFyaWFibGUgZGVjbGFyYXRpb25z
LgorICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2ggKiptYXRjaGVzOworICAgIGNvbnN0IGNoYXIqIGVu
Y29kaW5nID0gTlVMTDsKKyAgICBpbnQgbWF0Y2hlc0NvdW50ID0gMDsgCisgICAgKmRldGVjdGVk
RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKTsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9yKiBkZXRlY3RvciA9IHVjc2RldF9vcGVuKCZz
dGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihkZXRlY3RvciwgdHJ1ZSk7CisgICAgdWNz
ZGV0X3NldFRleHQoZGV0ZWN0b3IsIGRhdGEsIHN0YXRpY19jYXN0PGludDMyX3Q+KGxlbiksICZz
dGF0dXMpOyAKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAvLyBGSVhNRTogQSBmZXcgdGhpbmdzIHdlIGNhbiBkbyBvdGhlciB0
aGFuIGltcHJvdmluZworICAgIC8vIHRoZSBJQ1UgZGV0ZWN0b3IgaXRzZWxmLiAKKyAgICAvLyAx
LiBVc2UgdWNzZGV0X2RldGVjdEFsbCBhbmQgcGljayB0aGUgbW9zdCBsaWtlbHkgb25lIGdpdmVu
CisgICAgLy8gInRoZSBjb250ZXh0IiAocGFyZW50LWVuY29kaW5nLCByZWZlcnJlciBlbmNvZGlu
ZywgZXRjKS4KKyAgICAvLyAyLiAnRW11bGF0ZScgRmlyZWZveC9JRSdzIG5vbi1Vbml2ZXJzYWwg
ZGV0ZWN0b3JzIChlLmcuCisgICAgLy8gQ2hpbmVzZSwgSmFwYW5lc2UsIFJ1c3NpYW4sIEtvcmVh
biBhbmQgSGVicmV3KSBieSBwaWNraW5nIHRoZSAKKyAgICAvLyBlbmNvZGluZyB3aXRoIGEgaGln
aGVzdCBjb25maWRlbmNlIGFtb25nIHRoZSBkZXRldGN0b3Itc3BlY2lmaWMKKyAgICAvLyBsaW1p
dGVkIHNldCBvZiBjYW5kaWRhdGUgZW5jb2RpbmdzLgorICAgIC8vIEJlbG93IGlzIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFydCBvZiB3aGF0J3Mgb3V0bGluZWQKKyAgICAvLyBh
Ym92ZS4KKyAgICBtYXRjaGVzID0gdWNzZGV0X2RldGVjdEFsbChkZXRlY3RvciwgJm1hdGNoZXND
b3VudCwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgIHVj
c2RldF9jbG9zZShkZXRlY3Rvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKGhpbnRFbmNvZGluZ05hbWUpIHsKKyAgICAgICAgLy8gMTAgaXMgdGhlIG1pbmltdW0gY29u
ZmlkZW5jZSB2YWx1ZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGVwb2ludAorICAgICAgICAvLyBh
bGxvY2F0aW9uIGluIGEgZ2l2ZW4gZW5jb2RpbmcuIFRoZSBzaXplIG9mIGEgY2h1bmsgcGFzc2Vk
IHRvCisgICAgICAgIC8vIHVzIHZhcmllcyBldmVuIGZvciB0aGUgc2FtZSBodG1sIGZpbGUgKGFw
cGFyZW50bHkgZGVwZW5kaW5nIG9uIAorICAgICAgICAvLyB0aGUgbmV0d29yayBsb2FkKS4gV2hl
biB3ZSdyZSBnaXZlbiBhIHJhdGhlciBzaG9ydCBjaHVuaywgd2UgCisgICAgICAgIC8vIGRvbid0
IGhhdmUgYSBzdWZmaWNpZW50bHkgcmVsaWFibGUgc2lnbmFsIG90aGVyIHRoYW4gdGhlIGZhY3Qg
dGhhdAorICAgICAgICAvLyB0aGUgY2h1bmsgaXMgY29uc2lzdGVudCB3aXRoIGEgc2V0IG9mIGVu
Y29kaW5ncy4gU28sIGluc3RlYWQgb2YKKyAgICAgICAgLy8gc2V0dGluZyBhbiBhcmJpdHJhcnkg
dGhyZXNob2xkLCB3ZSBoYXZlIHRvIHNjYW4gYWxsIHRoZSBlbmNvZGluZ3MKKyAgICAgICAgLy8g
Y29uc2lzdGVudCB3aXRoIHRoZSBkYXRhLiAgCisgICAgICAgIGNvbnN0IGludDMyX3Qga1RocmVz
b2xkID0gMTA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF0Y2hlc0NvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIGludDMyX3QgY29uZmlkZW5jZSA9IHVjc2RldF9nZXRDb25maWRlbmNl
KG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbmZpZGVuY2Ug
PCBrVGhyZXNvbGQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBtYXRjaEVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2hlc1tpXSwgJnN0YXR1cyk7
CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBz
dGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBUT0RPIDogTWFrZSB0aGlzIGNvbXBhcmlzb24gZXZlbiBm
dXp6aWVyIHRvIGNhdGNoIGNhc2VzCisgICAgICAgICAgICAvLyBsaWtlIElTTy04ODU5LTEgYW5k
IFdpbmRvd3MtMTI1MiBhbmQgSVNPLTg4NTktOC1JIGFuZAorICAgICAgICAgICAgLy8gV2luZG93
cy0xMjU1LCBrc19jXzU2MDEtMTk4NyBhbmQgRVVDLUtSLiBUaGUgbGFzdCBjYXNlCisgICAgICAg
ICAgICAvLyBjYW4gYmUgd29ya2VkIGFyb3VuZCBjb21wYXJpbmcgY2Fub25pY2FsIG5hbWVzLgor
ICAgICAgICAgICAgaWYgKCF1Y252X2NvbXBhcmVOYW1lcyhtYXRjaEVuY29kaW5nLCBoaW50RW5j
b2RpbmdOYW1lKSkgeworICAgICAgICAgICAgICAgIGVuY29kaW5nID0gaGludEVuY29kaW5nTmFt
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBJZiBubyBtYXRjaCBpcyBmb3VuZCBzbyBmYXIsIGp1c3QgcGljayB0aGUgdG9w
IG1hdGNoLiAKKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHBhcmVudCBmcmFtZSBpbiBF
VUMtSlAgcmVmZXJzIHRvCisgICAgLy8gYSBjaGlsZCBmcmFtZSBpbiBTaGlmdF9KSVMgYWx0aG91
Z2ggdGhhdCdzIG5vdCB2ZXJ5IGxpa2VseS4KKyAgICBpZiAoIWVuY29kaW5nICYmIG1hdGNoZXND
b3VudCA+IDApCisgICAgICAgIGVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2hlc1swXSwg
JnN0YXR1cyk7CisgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgIC8vc2V0RW5j
b2RpbmcoZW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICAgICAgKmRldGVjdGVk
RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgICAgICB1Y3NkZXRfY2xvc2Uo
ZGV0ZWN0b3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9ICAgIAorICAgIHVjc2RldF9j
bG9zZShkZXRlY3Rvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0aW9uTm9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlvbk5vbmUuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlv
bk5vbmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nICpkZXRlY3RlZEVuY29kaW5n
KSB7CisgICAgKmRldGVjdGVkRW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MDgyOSkKKysrIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDItMTAgIEp1bmdz
aGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlByZWZlcmVuY2VzIGZvciBlbmNvZGluZyBh
dXRvZGV0ZWN0aW9uIG9uIE1hYy4KKyAgCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAg
ICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToKKyAgICAgICAgKC1bV2ViUHJlZmVy
ZW5jZXMgdXNlc0VuY29kaW5nRGV0ZWN0b3JdKToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJl
bmNlc1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgt
W1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAwOS0wMi0w
OSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
biBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAog
I2RlZmluZSBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVs
dEZvbnRTaXplIgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZVByZWZlcmVuY2VL
ZXkgQCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdFRl
eHRFbmNvZGluZ05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUiCisjZGVmaW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleSBAIldl
YktpdFVzZXNFbmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRVc2VyU3R5bGVTaGVldEVu
YWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5j
ZUtleSIKICNkZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXkg
QCJXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2Vi
S2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJXZWJLaXRTaG91bGRQcmlu
dEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMubW0JKHJldmlzaW9uIDQwNzkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcgQEAgc3RhdGljIFdlYkNh
Y2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBAIjE2IiwgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGb250U2l6ZVByZWZlcmVuY2VLZXksCiAgICAgICAg
IEAiMTMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNp
emVQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIklTTy04ODU5LTEiLCAgICAgICAgICAgICAgICAg
IFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclBy
ZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2Vi
S2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCIiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVy
ZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRT
aG91bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSwKQEAgLTg2Myw2ICs4NjQsMTYgQEAg
c3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIF9wcml2YXRlLT5h
dXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWwgPSBhdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hl
TW9kZWw7CiB9CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3IKK3sKKyAgICByZXR1cm4g
W3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQcmVmZXJl
bmNlS2V5XTsKK30KKworLSAodm9pZClzZXRVc2VzRW5jb2RpbmdEZXRlY3RvcjooQk9PTClmbGFn
Cit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTogZmxhZyBmb3JLZXk6IFdlYktpdFVzZXNFbmNv
ZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKEJPT0wpaXNXZWJTZWN1cml0eUVu
YWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0V2ViU2Vj
dXJpdHlFbmFibGVkUHJlZmVyZW5jZUtleV07CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTks
OSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vCiAtIChCT09MKWFw
cGxpY2F0aW9uQ2hyb21lTW9kZUVuYWJsZWQ7CiAtICh2b2lkKXNldEFwcGxpY2F0aW9uQ2hyb21l
TW9kZUVuYWJsZWQ6KEJPT0wpZmxhZzsKIAorLSAoQk9PTCl1c2VzRW5jb2RpbmdEZXRlY3RvcjsK
Ky0gKHZvaWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxhZzsKKwogLSAoQk9PTCly
ZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOwogLSAodm9pZClzZXRSZXNwZWN0U3Rh
bmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOihCT09MKWZsYWc7CiAKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAxLDYgKzEzMDEsNyBAQCBzdGF0aWMgdm9pZCBXZWJLaXRJ
bml0aWFsaXplQXBwbGljYXRpb25DCiAgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRT
aXplKFtwcmVmZXJlbmNlcyBkZWZhdWx0Rml4ZWRGb250U2l6ZV0pOwogICAgIHNldHRpbmdzLT5z
ZXREZWZhdWx0Rm9udFNpemUoW3ByZWZlcmVuY2VzIGRlZmF1bHRGb250U2l6ZV0pOwogICAgIHNl
dHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShbcHJlZmVyZW5jZXMgZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWVdKTsKKyAgICBzZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3Io
W3ByZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk7CiAgICAgc2V0dGluZ3MtPnNldEZh
bnRhc3lGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBmYW50YXN5Rm9udEZhbWlseV0pOwogICAgIHNl
dHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZpeGVkRm9udEZhbWlseV0p
OwogICAgIHNldHRpbmdzLT5zZXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKFtwcmVmZXJlbmNl
cyBfZm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5nc10pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27576</attachid>
            <date>2009-02-11 16:02:02 -0800</date>
            <delta_ts>2009-03-06 01:25:00 -0800</delta_ts>
            <desc>updated patch </desc>
            <filename>16482.patch.5a</filename>
            <type>text/plain</type>
            <size>44895</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDgyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDktMDItMTAgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SG9vayB1cCBJQ1UgZW5jb2RpbmcgZGV0ZWN0b3Igd2l0aCBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3Rpb24qIHRvIHBsYXRmb3JtL3RleHQuIEN1cnJl
bnRseSwKKyAgICAgICAgICAgdGhlIG9ubHkgaW1wbGVtZW50YXRpb24gdXNlcyBJQ1UuIFN0dWIg
aXMgYWRkZWQgZm9yIAorICAgICAgICAgICBwb3J0cyB0aGF0IGRvIG5vdCB1c2UgSUNVIGFuZCBh
IGJ1aWxkIG9uIFRpZ2VyLiBNYWMgT1MgCisgICAgICAgICAgIFRpZ2VyIGNvbWVzIHdpdGggSUNV
IDMuMiB3aXRoIGVuY29kaW5nIGRldGVjdG9yLgorCisgICAgICAgIExheW91dCB0ZXN0cyB3aWxs
IGJlIGFkZGVkIG9uY2UgYnVnIDIwNTM0IGlzIGZpeGVkIGFuZCBhIFdlYlByZWZlcmVuY2UKKyAg
ICAgICAgY2FuIGJlIGNvbnRyb2xsZWQgaW4gdGVzdF9zaGVsbC4gV2l0aCBVc2VzRW5jb2RpbmdE
ZXRlY3RvciBvZmYsIHRoZXJlCisgICAgICAgIGlzIG5vIGNoYW5nZSB0byB0ZXN0LiAKKworICAg
ICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MgorCisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHAKKyAg
ICAgICAgKiBpY3UvdW5pY29kZS91Y3NkZXQuaAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d3JpdGUpOgorICAgICAgICAq
IGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
ZXNvdXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2gpOgorICAgICAgICAqIGxvYWRlci9UZXh0UmVz
b3VyY2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjop
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNldEhpbnREZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpoaW50RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKiBw
YWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IpOgor
ICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjp1
c2VzRW5jb2RpbmdEZXRlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdEZXRlY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdEZXRlY3Rpb25JQ1UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdFRleHRF
bmNvZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rpb25O
b25lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RUZXh0RW5jb2RpbmcpOgor
CiAyMDA5LTAyLTEwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBT
aHJpbmsgdGhlIHNpemUgb2YgYWxsIHJlcGxhY2VkIGVsZW1lbnRzIChpbWFnZXMsIGZvcm0gY29u
dHJvbHMsIHBsdWdpbnMpIGJ5IDQgYnl0ZXMgYnkgcGFja2luZyB0aGUKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJ
KHJldmlzaW9uIDQwNzkzKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDgsNyArNDA4LDcgQEAgX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVy
OXNlbGVjdAogX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyQzFFUE5TXzVGcmFtZUVi
CiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI1Zmx1c2hFdgogX19aTjdXZWJDb3Jl
MTlUZXh0UmVzb3VyY2VEZWNvZGVyNmRlY29kZUVQS2NtCi1fX1pON1dlYkNvcmUxOVRleHRSZXNv
dXJjZURlY29kZXJDMUVSS05TXzZTdHJpbmdFUktOU18xMlRleHRFbmNvZGluZ0UKK19fWk43V2Vi
Q29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEyVGV4dEVuY29k
aW5nRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckQxRXYKIF9fWk43V2ViQ29y
ZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UyNHNldEV4cGVjdGVkQ29udGVudExlbmd0aEV4CiBfX1pO
N1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CkBAIC01
OTcsNiArNTk3LDcgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjJzZXRTYW5zU2VyaWZGb250Rgog
X19aTjdXZWJDb3JlOFNldHRpbmdzMjJzZXRTaG93c1VSTHNJblRvb2xUaXBzRWIKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczIzc2V0RGVmYXVsdEZpeGVkRm9udFNpemVFaQogX19aTjdXZWJDb3JlOFNl
dHRpbmdzMjNzZXRFZGl0YWJsZUxpbmtCZWhhdmlvckVOU18yMEVkaXRhYmxlTGlua0JlaGF2aW9y
RQorX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXRVc2VzRW5jb2RpbmdEZXRlY3RvckViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MyNHNldEFwcGxpY2F0aW9uQ2hyb21lTW9kZUViCiBfX1pON1dlYkNv
cmU4U2V0dGluZ3MyNHNldFRleHRBcmVhc0FyZVJlc2l6YWJsZUViCiBfX1pON1dlYkNvcmU4U2V0
dGluZ3MyNXNldERldmVsb3BlckV4dHJhc0VuYWJsZWRFYgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY5NjEsNiArNjk2MSwxNCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3Rpb24uaCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0
XFRleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJ
CQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2Rp
bmdSZWdpc3RyeS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDI1MCw2ICs0MjUwLDggQEAKIAkJQzA5MTU4OEUwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMwOTE1ODg4MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5jcHAgKi87IH07CiAJCUMwOTE1ODhGMERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzA5MTU4ODkwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmggKi87IH07CiAJCUMwREZDODcwMERCNjg0MUEwMDNFQUU3QyAvKiBKU0Nv
bnNvbGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzBERkM4NkYwREI2ODQxQTAwM0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi87
IH07CisJCUMxMDVEQTYyMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rpb25J
Q1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEw
NURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAgKi87
IH07CisJCUMxMDVEQTY0MEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxMDVEQTYz
MEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rpb24uaCAqLzsgfTsKIAkJQzZE
NzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgy
RTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFF
NDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEw
MDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OwogCQlEMDVDRUQy
OTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwpAQCAtOTA0NSw2ICs5MDQ3LDggQEAK
IAkJQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzA5MTU4ODkw
REI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBK
U0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURB
NjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rpb25JQ1Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBBMDAw
QjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRC
bG9ja0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
cm1hdEJsb2NrQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzE4
MCw2ICsxMzE4NCw4IEBACiAJCQkJQjJDM0RBMTUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHREaXJl
Y3Rpb24uaCAqLywKIAkJCQlCMkMzREExNjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5n
LmNwcCAqLywKIAkJCQlCMkMzREExNzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmgg
Ki8sCisJCQkJQzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdGlv
bi5oICovLAorCQkJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRl
Y3Rpb25JQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RBMUEwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRTdHJlYW0uY3BwICovLApAQCAtMTY3MjMsNiArMTY3MjksNyBAQAogCQkJCTJFM0FDODRF
MEYzRDA2RDEwMDYzM0YwNCAvKiBXb3JrZXJDb250ZXh0UHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFM0FDODUwMEYzRDA2RjcwMDYzM0YwNCAvKiBXb3JrZXJPYmplY3RQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg4M0RGMjgwRjNEMDQ1RDAwRjE5QkY2IC8qIFZpc2libGVTZWxlY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUMxMDVEQTY0MEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg3MDIsNiArMTg3MDksNyBA
QAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NkRCNDYwRjNBODgyMjAwNTczQ0IzIC8qIFJlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMxMDVEQTYyMEYzQUE2OEYw
MDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rpb25JQ1UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4M0RGMjcwRjNEMDQ1RDAwRjE5QkY2IC8qIFZpc2libGVTZWxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CkluZGV4OiBXZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91
bmljb2RlL3Vjc2RldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1
c2luZXNzIE1hY2hpbmVzCisgKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgZmlsZSBuYW1lOiAgdWNzZGV0LmgKKyAq
ICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyAqICAgaW5kZW50YXRpb246NAorICoKKyAqICAgY3Jl
YXRlZCBvbjogMjAwNUF1ZzA0CisgKiAgIGNyZWF0ZWQgYnk6IEFuZHkgSGVuaW5nZXIKKyAqCisg
KiAgIElDVSBDaGFyYWN0ZXIgU2V0IERldGVjdGlvbiwgQVBJIGZvciBDCisgKgorICogICBEcmFm
dCB2ZXJzaW9uIDE4IE9jdCAyMDA1CisgKgorICovCisKKyNpZm5kZWYgX19VQ1NERVRfSAorI2Rl
ZmluZSBfX1VDU0RFVF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVD
T05GSUdfTk9fQ09OVkVSU0lPTgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0uaCIKKworLyoqCisg
KiBcZmlsZSAKKyAqIFxicmllZiBDIEFQSTogQ2hhcnNldCBEZXRlY3Rpb24gQVBJCisgKgorICog
VGhpcyBBUEkgcHJvdmlkZXMgYSBmYWNpbGl0eSBmb3IgZGV0ZWN0aW5nIHRoZQorICogY2hhcnNl
dCBvciBlbmNvZGluZyBvZiBjaGFyYWN0ZXIgZGF0YSBpbiBhbiB1bmtub3duIHRleHQgZm9ybWF0
LgorICogVGhlIGlucHV0IGRhdGEgY2FuIGJlIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgKiA8
cD4KKyAqIENoYXJhY3RlciBzZXQgZGV0ZWN0aW9uIGlzIGF0IGJlc3QgYW4gaW1wcmVjaXNlIG9w
ZXJhdGlvbi4gIFRoZSBkZXRlY3Rpb24KKyAqIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGlkZW50
aWZ5IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAq
IG9mIHRoZSBieXRlIGRhdGEsIGJ1dCB0aGUgcHJvY2VzcyBpcyBwYXJ0bHkgc3RhdGlzdGljYWwg
aW4gbmF0dXJlLCBhbmQKKyAqIHRoZSByZXN1bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBh
bHdheXMgYmUgY29ycmVjdC4KKyAqIDxwPgorICogRm9yIGJlc3QgYWNjdXJhY3kgaW4gY2hhcnNl
dCBkZXRlY3Rpb24sIHRoZSBpbnB1dCBkYXRhIHNob3VsZCBiZSBwcmltYXJpbHkKKyAqIGluIGEg
c2luZ2xlIGxhbmd1YWdlLCBhbmQgYSBtaW5pbXVtIG9mIGEgZmV3IGh1bmRyZWQgYnl0ZXMgd29y
dGggb2YgcGxhaW4gdGV4dAorICogaW4gdGhlIGxhbmd1YWdlIGFyZSBuZWVkZWQuICBUaGUgZGV0
ZWN0aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvCisgKiBpZ25vcmUgaHRtbCBvciB4bWwgc3R5
bGUgbWFya3VwIHRoYXQgY291bGQgb3RoZXJ3aXNlIG9ic2N1cmUgdGhlIGNvbnRlbnQuCisgKi8K
KyAKKworc3RydWN0IFVDaGFyc2V0RGV0ZWN0b3I7CisvKioKKyAgKiBTdHJ1Y3R1cmUgcmVwcmVz
ZW50aW5nIGEgY2hhcnNldCBkZXRlY3RvcgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBl
ZGVmIHN0cnVjdCBVQ2hhcnNldERldGVjdG9yIFVDaGFyc2V0RGV0ZWN0b3I7CisKK3N0cnVjdCBV
Q2hhcnNldE1hdGNoOworLyoqCisgICogIE9wYXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEg
bWF0Y2ggdGhhdCB3YXMgaWRlbnRpZmllZAorICAqICBmcm9tIGEgY2hhcnNldCBkZXRlY3Rpb24g
b3BlcmF0aW9uLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLwordHlwZWRlZiBzdHJ1Y3QgVUNo
YXJzZXRNYXRjaCBVQ2hhcnNldE1hdGNoOworCisvKioKKyAgKiAgT3BlbiBhIGNoYXJzZXQgZGV0
ZWN0b3IuCisgICoKKyAgKiAgQHBhcmFtIHN0YXR1cyBBbnkgZXJyb3IgY29uZGl0aW9ucyBvY2N1
cnJpbmcgZHVyaW5nIHRoZSBvcGVuCisgICogICAgICAgICAgICAgICAgb3BlcmF0aW9uIGFyZSBy
ZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogIEByZXR1cm4gdGhlIG5ld2x5IG9w
ZW5lZCBjaGFyc2V0IGRldGVjdG9yLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFG
VCBVQ2hhcnNldERldGVjdG9yICogVV9FWFBPUlQyCit1Y3NkZXRfb3BlbihVRXJyb3JDb2RlICAg
KnN0YXR1cyk7CisKKy8qKgorICAqIENsb3NlIGEgY2hhcnNldCBkZXRlY3Rvci4gIEFsbCBzdG9y
YWdlIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzCisgICogICBvd25lZCBieSB0aGlzIGNoYXJzZXQg
ZGV0ZWN0b3Igd2lsbCBiZSByZWxlYXNlZC4gIEZhaWx1cmUgdG8KKyAgKiAgIGNsb3NlIGEgY2hh
cnNldCBkZXRlY3RvciB3aGVuIGZpbmlzaGVkIHdpdGggaXQgY2FuIHJlc3VsdCBpbgorICAqICAg
bWVtb3J5IGxlYWtzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAg
VGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgY2xvc2VkLgorICAqICBAZHJhZnQgSUNVIDMuNgor
ICAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X2Nsb3NlKFVDaGFyc2V0RGV0ZWN0
b3IgKnVjc2QpOworCisvKioKKyAgKiBTZXQgdGhlIGlucHV0IGJ5dGUgZGF0YSB3aG9zZSBjaGFy
c2V0IGlzIHRvIGRldGVjdGVkLgorICAqCisgICogT3duZXJzaGlwIG9mIHRoZSBpbnB1dCAgdGV4
dCBieXRlIGFycmF5IHJlbWFpbnMgd2l0aCB0aGUgY2FsbGVyLgorICAqIFRoZSBpbnB1dCBzdHJp
bmcgbXVzdCBub3QgYmUgYWx0ZXJlZCBvciBkZWxldGVkIHVudGlsIHRoZSBjaGFyc2V0CisgICog
ZGV0ZWN0b3IgaXMgZWl0aGVyIGNsb3NlZCBvciByZXNldCB0byByZWZlciB0byBkaWZmZXJlbnQg
aW5wdXQgdGV4dC4KKyAgKgorICAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3Ig
dG8gYmUgdXNlZC4KKyAgKiBAcGFyYW0gdGV4dEluIHRoZSBpbnB1dCB0ZXh0IG9mIHVua25vd24g
ZW5jb2RpbmcuICAgLgorICAqIEBwYXJhbSBsZW4gICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQg
dGV4dCwgb3IgLTEgaWYgdGhlIHRleHQKKyAgKiAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5h
dGVkLgorICAqIEBwYXJhbSBzdGF0dXMgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVk
IGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCitV
X0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfc2V0VGV4dChVQ2hhcnNldERldGVjdG9yICp1
Y3NkLCBjb25zdCBjaGFyICp0ZXh0SW4sIGludDMyX3QgbGVuLCBVRXJyb3JDb2RlICpzdGF0dXMp
OworCisKKy8qKiBTZXQgdGhlIGRlY2xhcmVkIGVuY29kaW5nIGZvciBjaGFyc2V0IGRldGVjdGlv
bi4KKyAqICBUaGUgZGVjbGFyZWQgZW5jb2Rpbmcgb2YgYW4gaW5wdXQgdGV4dCBpcyBhbiBlbmNv
ZGluZyBvYnRhaW5lZAorICogIGJ5IHRoZSB1c2VyIGZyb20gYW4gaHR0cCBoZWFkZXIgb3IgeG1s
IGRlY2xhcmF0aW9uIG9yIHNpbWlsYXIgc291cmNlIHRoYXQKKyAqICBjYW4gYmUgcHJvdmlkZWQg
YXMgYW4gYWRkaXRpb25hbCBoaW50IHRvIHRoZSBjaGFyc2V0IGRldGVjdG9yLgorICoKKyAqICBI
b3cgYW5kIHdoZXRoZXIgdGhlIGRlY2xhcmVkIGVuY29kaW5nIHdpbGwgYmUgdXNlZCBkdXJpbmcg
dGhlCisgKiAgZGV0ZWN0aW9uIHByb2Nlc3MgaXMgVEJELgorICoKKyAqIEBwYXJhbSB1Y3NkICAg
ICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBlbmNvZGluZyAg
YW4gZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGRhdGEgb2J0YWluZWQgZnJvbQorICogICAgICAg
ICAgICAgICAgICBhIGhlYWRlciBvciBkZWNsYXJhdGlvbiBvciBvdGhlciBzb3VyY2Ugb3V0c2lk
ZQorICogICAgICAgICAgICAgICAgICBvZiB0aGUgYnl0ZSBkYXRhIGl0c2VsZi4KKyAqIEBwYXJh
bSBsZW5ndGggICAgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RpbmcgbmFtZSwgb3IgLTEgaWYgdGhl
IG5hbWUgc3RyaW5nCisgKiAgICAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICog
QHBhcmFtIHN0YXR1cyAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBp
biB0aGlzIHZhcmlhYmxlLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgdm9p
ZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXREZWNsYXJlZEVuY29kaW5nKFVDaGFyc2V0RGV0ZWN0b3Ig
KnVjc2QsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAq
c3RhdHVzKTsKKworCisvKioKKyAqIFJldHVybiB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hl
cyB0aGUgc3VwcGxpZWQgaW5wdXQgZGF0YS4KKyAqIAorICogTm90ZSB0aG91Z2gsIHRoYXQgYmVj
YXVzZSB0aGUgZGV0ZWN0aW9uIAorICogb25seSBsb29rcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGlu
cHV0IGRhdGEsCisgKiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJldHVybmVkIGNo
YXJzZXQgd2lsbCBmYWlsIHRvIGhhbmRsZQorICogdGhlIGZ1bGwgc2V0IG9mIGlucHV0IGRhdGEu
CisgKiA8cD4KKyAqIFRoZSByZXR1cm5lZCBVQ2hhcnNldE1hdGNoIG9iamVjdCBpcyBvd25lZCBi
eSB0aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqIEl0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRo
ZSBkZXRlY3RvciBpbnB1dCBpcyByZXNldCwgb3IgdW50aWwKKyAqIHRoZSBkZXRlY3RvciBpcyBj
bG9zZWQuCisgKiA8cD4KKyAqIFRoZSBmdW5jdGlvbiB3aWxsIGZhaWwgaWYKKyAqICA8dWw+Cisg
KiAgICA8bGk+bm8gY2hhcnNldCBhcHBlYXJzIHRvIG1hdGNoIHRoZSBkYXRhLjwvbGk+CisgKiAg
ICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAq
CisgKiBAcGFyYW0gdWNzZCAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisg
KiBAcGFyYW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNr
IGluIHRoaXMgdmFyaWFibGUuCisgKiBAcmV0dXJuICAgICAgICAgIGEgVUNoYXJzZXRNYXRjaCAg
cmVwcmVzZW50aW5nIHRoZSBiZXN0IG1hdGNoaW5nIGNoYXJzZXQsCisgKiAgICAgICAgICAgICAg
ICAgIG9yIE5VTEwgaWYgbm8gY2hhcnNldCBtYXRjaGVzIHRoZSBieXRlIGRhdGEuCisgKgorICog
QGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICogVV9FWFBP
UlQyCit1Y3NkZXRfZGV0ZWN0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisgICAgCisKKy8qKgorICogIEZpbmQgYWxsIGNoYXJzZXQgbWF0Y2hlcyB0aGF0IGFw
cGVhciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGlucHV0LAorICogIHJldHVybmluZyBhbiBh
cnJheSBvZiByZXN1bHRzLiAgVGhlIHJlc3VsdHMgYXJlIG9yZGVyZWQgd2l0aCB0aGUKKyAqICBi
ZXN0IHF1YWxpdHkgbWF0Y2ggZmlyc3QuCisgKgorICogIEJlY2F1c2UgdGhlIGRldGVjdGlvbiBv
bmx5IGxvb2tzIGF0IGEgbGltaXRlZCBhbW91bnQgb2YgdGhlCisgKiAgaW5wdXQgYnl0ZSBkYXRh
LCBzb21lIG9mIHRoZSByZXR1cm5lZCBjaGFyc2V0cyBtYXkgZmFpbCB0byBoYW5kbGUKKyAqICB0
aGUgYWxsIG9mIGlucHV0IGRhdGEuCisgKiAgPHA+CisgKiAgVGhlIHJldHVybmVkIFVDaGFyc2V0
TWF0Y2ggb2JqZWN0cyBhcmUgb3duZWQgYnkgdGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiAgVGhl
eSB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlm
aWVkCisgKiAgCisgKiA8cD4KKyAqIFJldHVybiBhbiBlcnJvciBpZiAKKyAqICA8dWw+CisgKiAg
ICA8bGk+bm8gY2hhcnNldHMgYXBwZWFyIHRvIG1hdGNoIHRoZSBpbnB1dCBkYXRhLjwvbGk+Cisg
KiAgICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4K
KyAqIAorICogQHBhcmFtIHVjc2QgICAgICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUg
dXNlZC4KKyAqIEBwYXJhbSBtYXRjaGVzRm91bmQgIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0
IHdpbGwgYmUgc2V0IHRvIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNo
YXJzZXRzIGlkZW50aWZpZWQgdGhhdCBhcmUgY29uc2lzdGVudCB3aXRoCisgKiAgICAgICAgICAg
ICAgICAgICAgICB0aGUgaW5wdXQgZGF0YS4gIE91dHB1dCBvbmx5LgorICogQHBhcmFtIHN0YXR1
cyAgICAgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2
YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBv
ZiBwb2ludGVycyB0byBVQ2hhclNldE1hdGNoIG9iamVjdHMuCisgKiAgICAgICAgICAgICAgICAg
ICAgICBUaGlzIGFycmF5LCBhbmQgdGhlIFVDaGFyU2V0TWF0Y2ggaW5zdGFuY2VzIHRvIHdoaWNo
IGl0IHJlZmVycywKKyAqICAgICAgICAgICAgICAgICAgICAgIGFyZSBvd25lZCBieSB0aGUgVUNo
YXJzZXREZXRlY3RvciwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsCisgKiAgICAgICAgICAg
ICAgICAgICAgICB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVkLgorICogQGRyYWZ0
IElDVSAzLjQKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICoqIFVfRVhQT1JUMgor
dWNzZGV0X2RldGVjdEFsbChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBpbnQzMl90ICptYXRjaGVz
Rm91bmQsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAqICBHZXQgdGhlIG5hbWUg
b2YgdGhlIGNoYXJzZXQgcmVwcmVzZW50ZWQgYnkgYSBVQ2hhcnNldE1hdGNoLgorICoKKyAqICBU
aGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQor
ICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJz
ZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBUaGUgbmFtZSByZXR1cm5lZCBpcyBzdWl0
YWJsZSBmb3IgdXNlIHdpdGggdGhlIElDVSBjb252ZXJzaW9uIEFQSXMuCisgKgorICogIEBwYXJh
bSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBB
bnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgor
ICogIEByZXR1cm4gICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtYXRjaGluZyBjaGFyc2V0LgorICoK
KyAqICBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIK
K3Vjc2RldF9nZXROYW1lKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisKKy8qKgorICogIEdldCBhIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgcXVhbGl0
eSBvZiB0aGUgbWF0Y2ggb2YgdGhlIGJ5dGUKKyAqICBkYXRhIHdpdGggdGhlIGNoYXJzZXQuICBD
b25maWRlbmNlIG51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvIHRvIDEwMCwKKyAqICB3aXRoIDEwMCBy
ZXByZXNlbnRpbmcgY29tcGxldGUgY29uZmlkZW5jZSBhbmQgemVybyByZXByZXNlbnRpbmcKKyAq
ICBubyBjb25maWRlbmNlLgorICoKKyAqICBUaGUgY29uZmlkZW5jZSB2YWx1ZXMgYXJlIHNvbWV3
aGF0IGFyYml0cmFyeS4gIFRoZXkgZGVmaW5lIGFuCisgKiAgYW4gb3JkZXJpbmcgd2l0aGluIHRo
ZSByZXN1bHRzIGZvciBhbnkgc2luZ2xlIGRldGVjdGlvbiBvcGVyYXRpb24KKyAqICBidXQgYXJl
IG5vdCBnZW5lcmFsbHkgY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSByZXN1bHRzIGZvciBkaWZmZXJl
bnQgaW5wdXQuCisgKgorICogIEEgY29uZmlkZW5jZSB2YWx1ZSBvZiB0ZW4gZG9lcyBoYXZlIGEg
Z2VuZXJhbCBtZWFuaW5nIC0gaXQgaXMgdXNlZAorICogIGZvciBjaGFyc2V0cyB0aGF0IGNhbiBy
ZXByZXNlbnQgdGhlIGlucHV0IGRhdGEsIGJ1dCBmb3Igd2hpY2ggdGhlcmUKKyAqICBpcyBubyBv
dGhlciBpbmRpY2F0aW9uIHRoYXQgc3VnZ2VzdHMgdGhhdCB0aGUgY2hhcnNldCBpcyB0aGUgY29y
cmVjdCBvbmUuCisgKiAgUHVyZSA3IGJpdCBBU0NJSSBkYXRhLCBmb3IgZXhhbXBsZSwgaXMgY29t
cGF0aWJsZSB3aXRoIGEKKyAqICBncmVhdCBtYW55IGNoYXJzZXRzLCBtb3N0IG9mIHdoaWNoIHdp
bGwgYXBwZWFyIGFzIHBvc3NpYmxlIG1hdGNoZXMKKyAqICB3aXRoIGEgY29uZmlkZW5jZSBvZiAx
MC4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICog
IEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAgICAgQSBjb25maWRlbmNlIG51bWJlciBm
b3IgdGhlIGNoYXJzZXQgbWF0Y2guCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJB
RlQgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRDb25maWRlbmNlKGNvbnN0IFVDaGFyc2V0
TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogIEdldCB0aGUgUkZD
IDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqICBU
aGUgQ2hhcnNldCBEZXRlY3Rpb24gc2VydmljZSBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGRl
dGVjdGluZworICogIGNoYXJzZXRzLCBub3QgbGFuZ3VhZ2UuICBGb3Igc29tZSwgYnV0IG5vdCBh
bGwsIGNoYXJzZXRzLCBhIGxhbmd1YWdlIGlzCisgKiAgaWRlbnRpZmllZCBhcyBhIGJ5cHJvZHVj
dCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGF0IGlzIHdoYXQKKyAqICBpcyByZXR1
cm5lZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqICBDQVVUSU9OOgorICogICAgMS4gIExhbmd1
YWdlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIGlucHV0IGRhdGEgZW5jb2RlZCBp
bgorICogICAgICAgIGFsbCBjaGFyc2V0cy4gSW4gcGFydGljdWxhciwgbm8gbGFuZ3VhZ2UgaXMg
aWRlbnRpZmllZAorICogICAgICAgIGZvciBVVEYtOCBpbnB1dCBkYXRhLgorICoKKyAqICAgIDIu
ICBDbG9zZWx5IHJlbGF0ZWQgbGFuZ3VhZ2VzIG1heSBzb21ldGltZXMgYmUgY29uZnVzZWQuCisg
KgorICogIElmIG1vcmUgYWNjdXJhdGUgbGFuZ3VhZ2UgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLCBh
IGxpbmd1aXN0aWMKKyAqICBhbmFseXNpcyBwYWNrYWdlIHNob3VsZCBiZSB1c2VkLgorICoKKyAq
ICBUaGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRo
ZQorICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNo
YXJzZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hh
cnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlv
bnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAg
ICBUaGUgUkZDIDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLCBv
cgorICogICAgICAgICAgICAgICAgIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbGFuZ3VhZ2UgY291
bGQgbm90IGJlIGRldGVybWluZWQuCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJB
RlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNzZGV0X2dldExhbmd1YWdlKGNvbnN0IFVDaGFy
c2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgICogIEdldCB0
aGUgZW50aXJlIGlucHV0IHRleHQgYXMgYSBVQ2hhciBzdHJpbmcsIHBsYWNpbmcgaXQgaW50bwor
ICAqICBhIGNhbGxlci1zdXBwbGllZCBidWZmZXIuICBBIHRlcm1pbmF0aW5nCisgICogIE5VTCBj
aGFyYWN0ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnVmZmVyIGlmIHNwYWNlIGlzIGF2YWls
YWJsZS4KKyAgKgorICAqICBUaGUgbnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmlu
Zywgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAgKiAgTlVMLCBpcyByZXR1cm5lZC4g
CisgICoKKyAgKiAgSWYgdGhlIHN1cHBsaWVkIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gcmVxdWly
ZWQgdG8gaG9sZCB0aGUgb3V0cHV0LAorICAqICB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBh
cmUgdW5kZWZpbmVkLiAgVGhlIGZ1bGwgb3V0cHV0IHN0cmluZyBsZW5ndGgKKyAgKiAgKGluIFVD
aGFycykgaXMgcmV0dXJuZWQgYXMgYWx3YXlzLCBhbmQgY2FuIGJlIHVzZWQgdG8gYWxsb2NhdGUg
YSBidWZmZXIKKyAgKiAgb2YgdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgKgorICAqCisgICogQHBhcmFt
IHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICAqIEBwYXJhbSBidWYgICAgIEEg
VUNoYXIgYnVmZmVyIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBjb252ZXJ0ZWQgdGV4dCBkYXRhLgor
ICAqIEBwYXJhbSBjYXAgICAgIFRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGluIFVDaGFycy4K
KyAgKiBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFj
ayBpbiB0aGlzIHZhcmlhYmxlLgorICAqIEByZXR1cm4gICAgICAgIFRoZSBudW1iZXIgb2YgVUNo
YXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLgorICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8K
K1VfRFJBRlQgIGludDMyX3QgVV9FWFBPUlQyCit1Y3NkZXRfZ2V0VUNoYXJzKGNvbnN0IFVDaGFy
c2V0TWF0Y2ggKnVjc20sCisgICAgICAgICAgICAgICAgIFVDaGFyICpidWYsIGludDMyX3QgY2Fw
LCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgICogIEdldCBhbiBpdGVyYXRvciBv
dmVyIHRoZSBzZXQgb2YgYWxsIGRldGVjdGFibGUgY2hhcnNldHMgLSAKKyAgKiAgb3ZlciB0aGUg
Y2hhcnNldHMgdGhhdCBhcmUga25vd24gdG8gdGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNl
cnZpY2UuCisgICoKKyAgKiAgVGhlIHJldHVybmVkIFVFbnVtZXJhdGlvbiBwcm92aWRlcyBhY2Nl
c3MgdG8gdGhlIG5hbWVzIG9mCisgICogIHRoZSBjaGFyc2V0cy4KKyAgKgorICAqICBUaGUgc3Rh
dGUgb2YgdGhlIENoYXJzZXQgZGV0ZWN0b3IgdGhhdCBpcyBwYXNzZWQgaW4gZG9lcyBub3QKKyAg
KiAgYWZmZWN0IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiwgYnV0IHJlcXVpcmluZyBhIHZh
bGlkLCBvcGVuCisgICogIGNoYXJzZXQgZGV0ZWN0b3IgYXMgYSBwYXJhbWV0ZXIgaW5zdXJlcyB0
aGF0IHRoZSBjaGFyc2V0IGRldGVjdGlvbgorICAqICBzZXJ2aWNlIGhhcyBiZWVuIHNhZmVseSBp
bml0aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVxdWlyZWQgZGV0ZWN0aW9uCisgICogIGRhdGEgaXMg
YXZhaWxhYmxlLgorICAqCisgICogIEBwYXJhbSB1Y3NkIGEgQ2hhcnNldCBkZXRlY3Rvci4KKyAg
KiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sg
aW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJldHVybiBhbiBpdGVyYXRvciBwcm92aWRpbmcgYWNj
ZXNzIHRvIHRoZSBkZXRlY3RhYmxlIGNoYXJzZXQgbmFtZXMuCisgICogIEBkcmFmdCBJQ1UgMy42
CisgICovCisKK1VfRFJBRlQgIFVFbnVtZXJhdGlvbiAqIFVfRVhQT1JUMgordWNzZGV0X2dldEFs
bERldGVjdGFibGVDaGFyc2V0cyhjb25zdCBVQ2hhcnNldERldGVjdG9yICp1Y3NkLCAgVUVycm9y
Q29kZSAqc3RhdHVzKTsKKworCisvKioKKyAgKiAgVGVzdCB3aGV0aGVyIGlucHV0IGZpbHRlcmlu
ZyBpcyBlbmFibGVkIGZvciB0aGlzIGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIElucHV0IGZpbHRl
cmluZyByZW1vdmVzIHRleHQgdGhhdCBhcHBlYXJzIHRvIGJlIEhUTUwgb3IgeG1sCisgICogIG1h
cmt1cCBmcm9tIHRoZSBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvZGUgcGFnZSBkZXRlY3Rp
b24KKyAgKiAgaGV1cmlzdGljcy4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQg
ZGV0ZWN0b3IgdG8gY2hlY2suCisgICogIEByZXR1cm4gVFJVRSBpZiBmaWx0ZXJpbmcgaXMgZW5h
YmxlZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjQKKyAgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JU
MgordWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFibGVkKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVj
c2QpOworCisKKy8qKgorICogRW5hYmxlIGZpbHRlcmluZyBvZiBpbnB1dCB0ZXh0LiBJZiBmaWx0
ZXJpbmcgaXMgZW5hYmxlZCwKKyAqIHRleHQgd2l0aGluIGFuZ2xlIGJyYWNrZXRzICgiPCIgYW5k
ICI+Iikgd2lsbCBiZSByZW1vdmVkCisgKiBiZWZvcmUgZGV0ZWN0aW9uLCB3aGljaCB3aWxsIHJl
bW92ZSBtb3N0IEhUTUwgb3IgeG1sIG1hcmt1cC4KKyAqCisgKiBAcGFyYW0gdWNzZCAgIHRoZSBj
aGFyc2V0IGRldGVjdG9yIHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtIGZpbHRlciA8Y29kZT50
cnVlPC9jb2RlPiB0byBlbmFibGUgaW5wdXQgdGV4dCBmaWx0ZXJpbmcuCisgKiBAcmV0dXJuIFRo
ZSBwcmV2aW91cyBzZXR0aW5nLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQg
IFVCb29sIFVfRVhQT1JUMgordWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKFVDaGFyc2V0RGV0ZWN0
b3IgKnVjc2QsIFVCb29sIGZpbHRlcik7CisKKyNlbmRpZgorI2VuZGlmICAgLyogX19VQ1NERVRf
SCAqLworCisKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQwNzkzKQorKysg
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDEx
ICsxMDAzLDIwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAg
ICAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpOwotICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpjcmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZh
dWx0VGV4dEVuY29kaW5nTmFtZSgpIDogU3RyaW5nKCkpOworICAgICAgICBpZiAoc2V0dGluZ3Mp
IHsKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSht
X3Jlc3BvbnNlTUlNRVR5cGUsCisgICAgICAgICAgICAgICAgc2V0dGluZ3MtPmRlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKCksCisgICAgICAgICAgICAgICAgc2V0dGluZ3MtPnVzZXNFbmNvZGluZ0Rl
dGVjdG9yKCkpOworICAgICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKTsgCisgICAgICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJh
bWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRIaW50RGVjb2Rl
cihwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKwl9IGVsc2UgeworICAgICAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VN
SU1FVHlwZSwgU3RyaW5nKCkpOworICAgICAgICB9CiAgICAgICAgIGlmIChtX2VuY29kaW5nLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSwgVGV4dFJl
c291cmNlRGVjb2Rlcjo6RGVmYXVsdEVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCks
IFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbVBhcmVudEZyYW1lKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcobV9lbmNvZGluZywK
ICAgICAgICAgICAgICAgICBtX2VuY29kaW5nV2FzQ2hvc2VuQnlVc2VyID8gVGV4dFJlc291cmNl
RGVjb2Rlcjo6VXNlckNob3NlbkVuY29kaW5nIDogVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2Rp
bmdGcm9tSFRUUEhlYWRlcik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVy
LmNwcAkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiVGV4dENv
ZGVjLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5n
RGV0ZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+CiAKQEAgLTMyMCwxNCArMzIyLDE2IEBAIGNvbnN0IFRleHRFbmNvZGlu
ZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29k
aW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVu
Y29kaW5nKQorVGV4dFJlc291cmNlRGVjb2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNv
ZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0
ZXJtaW5lQ29udGVudFR5cGUobWltZVR5cGUpKQogICAgICwgbV9kZWNvZGVyKGRlZmF1bHRFbmNv
ZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcpKQorICAgICwgbV9o
aW50RGVjb2RlcihOVUxMKQogICAgICwgbV9zb3VyY2UoRGVmYXVsdEVuY29kaW5nKQogICAgICwg
bV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldChmYWxz
ZSkKICAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0KGZhbHNlKQogICAgICwgbV9zYXdFcnJv
cihmYWxzZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IodXNlc0VuY29kaW5nRGV0ZWN0
b3IpCiB7CiB9CiAKQEAgLTQ0NSw3ICs0NDksNyBAQCB2b2lkIFRleHRSZXNvdXJjZURlY29kZXI6
OmNoZWNrRm9yQk9NKGNvCiAKIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1ND
aGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sIGJvb2wmIG1vdmVkRGF0YVRvQnVm
ZmVyKQogewotICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcpIHsKKyAgICBpZiAo
bV9zb3VyY2UgIT0gRGVmYXVsdEVuY29kaW5nICYmIG1fc291cmNlICE9IEVuY29kaW5nRnJvbVBh
cmVudEZyYW1lKSB7CiAgICAgICAgIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQgPSB0cnVlOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MjYsNyArNTMwLDcgQEAgY29uc3QgaW50IGJ5
dGVzVG9DaGVja1VuY29uZGl0aW9uYWxseSA9IAogCiBib29sIFRleHRSZXNvdXJjZURlY29kZXI6
OmNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYg
bW92ZWREYXRhVG9CdWZmZXIpCiB7Ci0gICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGlu
ZykgeworICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0g
RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpIHsKICAgICAgICAgbV9jaGVja2VkRm9ySGVhZENoYXJz
ZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NTMsNiArNzU3LDIz
IEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2UKICAgICB9CiB9CiAK
Ky8vIFdlIHVzZSB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IgaW4gdHdvIGNhc2VzOgorLy8gICAxLiBF
bmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5kIG5vIG90aGVyIGVuY29kaW5nIHNvdXJj
ZSBpcworLy8gICAgICBhdmFpbGFibGUgKHRoYXQgaXMsIGl0J3MgRGVmYXVsdEVuY29kaW5nKS4K
Ky8vICAgMi4gRW5jb2RpbmcgZGV0ZWN0b3IgaXMgdHVybmVkIE9OIGFuZCB0aGUgZW5jb2Rpbmcg
aXMgc2V0IHRvCisvLyAgICAgIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFyZW50IGZyYW1lLCB3aGlj
aCBpcyBhbHNvIGF1dG8tZGV0ZWN0ZWQuCisvLyAgIE5vdGUgdGhhdCBjb25kaXRpb24gIzIgaXMg
Tk9UIHNhdGlzZmllZCB1bmxlc3MgcGFyZW50LWNoaWxkIGZyYW1lCisvLyAgIHJlbGF0aW9uc2hp
cCBpcyBjb21wbGlhbnQgdG8gdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gSWYgdGhleSdyZSBmcm9t
CisvLyAgIGRpZmZlcmVudCBkb21haW5zLCB8bV9zb3VyY2V8IHdvdWxkIG5vdCBiZSBzZXQgdG8g
RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKy8vICAgaW4gdGhlIGZpcnN0IHBsYWNlLiAKK2Jvb2wg
VGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IKKyAgICAgICAgJiYgKG1fc291cmNlID09IERlZmF1
bHRFbmNvZGluZworICAgICAgICB8fCAobV9zb3VyY2UgPT0gRW5jb2RpbmdGcm9tUGFyZW50RnJh
bWUgJiYgbV9oaW50RGVjb2RlcgorICAgICAgICAmJiBtX2hpbnREZWNvZGVyLT5zb3VyY2UoKSA9
PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykpOyAKK30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29k
ZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIGlmICghbV9j
aGVja2VkRm9yQk9NKQpAQCAtNzcwLDggKzc5MSwxMyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVj
b2Rlcjo6ZGVjb2RlKGNvbnN0CiAKICAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgaWYgb3VyIGRl
ZmF1bHQgZW5jb2RpbmcgaXMgb25lIG9mIHRoZSBKYXBhbmVzZSBvbmVzLgogICAgIC8vIEZJWE1F
OiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIg
d2UgaGF2ZSBhbHJlYWR5IGRvbmUgc29tZSBkZWNvZGluZy4KLSAgICBpZiAobV9zb3VyY2UgIT0g
VXNlckNob3NlbkVuY29kaW5nICYmIG1fc291cmNlICE9IEF1dG9EZXRlY3RlZEVuY29kaW5nICYm
IGVuY29kaW5nKCkuaXNKYXBhbmVzZSgpKQorICAgIGlmIChtX3NvdXJjZSAhPSBVc2VyQ2hvc2Vu
RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0gQXV0b0RldGVjdGVkRW5jb2RpbmcgJiYgZW5jb2Rpbmco
KS5pc0phcGFuZXNlKCkpIHsKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBs
ZW4pOworICAgIH0gZWxzZSBpZiAoc2hvdWxkQXV0b0RldGVjdCgpKSB7CisgICAgICAgVGV4dEVu
Y29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7CisgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhk
YXRhLCBsZW4sIGhpbnRFbmNvZGluZ05hbWUoKSwgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAg
ICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7
CisgICB9CiAKICAgICBBU1NFUlQoZW5jb2RpbmcoKS5pc1ZhbGlkKCkpOwogCkBAIC03OTEsNiAr
ODE3LDE5IEBAIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUoY29uc3QKIAogU3Ry
aW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmZsdXNoKCkKIHsKKyAgIC8vIEZvciBIVE1MIGFuZCBY
TUwgZG9jdW1lbnQsIGlmIHdlIGNhbiBub3QgZmluZCBwcm9wZXIgZW5jb2RpbmcgZXZlbgorICAg
Ly8gZG9jdW1lbnQgaXMgY29tcGxldGVseSBsb2FkZWQsIHdlIG5lZWQgdG8gdXNlIGF1dG9tYXRp
Y2FsbHkgZGV0ZWN0CisgICAvLyB0aGUgZW5jb2Rpbmcgb2YgZG9jdW1lbnQgaWYgb3RoZXIgY29u
ZGl0aW9ucyBmb3IgYXV0b2RldGVjdGlvbiBpcworICAgLy8gc2F0aXNmaWVkLgorICAgIGlmICht
X2J1ZmZlci5zaXplKCkgJiYgIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0CisgICAgICAgICYmICht
X2NvbnRlbnRUeXBlID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpCisgICAgICAgICYm
IHNob3VsZEF1dG9EZXRlY3QoKSkgeworICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5j
b2Rpbmc7CisgICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwg
bV9idWZmZXIuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50RW5j
b2RpbmdOYW1lKCksICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgICBzZXRFbmNvZGlu
ZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgfQorCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fZGVjb2Rlci5kZWNvZGUobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCksIHRydWUsIG1fY29udGVudFR5cGUgPT0gWE1MLCBtX3Nhd0Vycm9yKTsKICAgICBt
X2J1ZmZlci5jbGVhcigpOwogICAgIG1fZGVjb2Rlci5yZXNldChtX2RlY29kZXIuZW5jb2Rpbmco
KSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCShyZXZpc2lvbiA0MDc5
MykKKysrIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMjUgKzM2LDMyIEBAIHB1YmxpYzoKICAgICAgICAgRW5jb2RpbmdGcm9tTWV0YVRh
ZywKICAgICAgICAgRW5jb2RpbmdGcm9tQ1NTQ2hhcnNldCwKICAgICAgICAgRW5jb2RpbmdGcm9t
SFRUUEhlYWRlciwKLSAgICAgICAgVXNlckNob3NlbkVuY29kaW5nCisgICAgICAgIFVzZXJDaG9z
ZW5FbmNvZGluZywKKyAgICAgICAgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKICAgICB9OwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0gVGV4
dEVuY29kaW5nKCkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVs
dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCksIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3IgPSBm
YWxzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFJlc291cmNlRGVj
b2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dFJlc291cmNlRGVjb2RlcihtaW1lVHlwZSwgZGVmYXVsdEVuY29kaW5nLCB1c2Vz
RW5jb2RpbmdEZXRlY3RvcikpOwogICAgIH0KICAgICB+VGV4dFJlc291cmNlRGVjb2RlcigpOwog
CiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1NvdXJj
ZSk7CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVjb2Rlci5lbmNvZGluZygpOyB9CiAKKyAgICB2b2lkIHNldEhpbnREZWNvZGVyKGNvbnN0IFRl
eHRSZXNvdXJjZURlY29kZXIqIGhpbnREZWNvZGVyKSB7CisgICAgICAgIG1faGludERlY29kZXIg
PSBoaW50RGVjb2RlcjsKKyAgICB9CisgICAgCiAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBTdHJpbmcgZmx1c2goKTsKLSAgICAKKworICAg
IEVuY29kaW5nU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAg
Ym9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0KIAogcHJpdmF0ZToK
LSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5n
LAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rvcik7CiAK
ICAgICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUwsIENTUyB9OyAvLyBQ
bGFpblRleHQgaXMgZXF1aXZhbGVudCB0byBkaXJlY3RseSB1c2luZyBUZXh0RGVjb2Rlci4KICAg
ICBzdGF0aWMgQ29udGVudFR5cGUgZGV0ZXJtaW5lQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CkBAIC02NCwxNSArNzEsMjMgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9y
Q1NTQ2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7
CiAgICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wm
IG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29u
c3QgY2hhciosIHNpemVfdCk7CisgICAgYm9vbCBzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3Q7IAor
CisgICAgY29uc3QgY2hhciogaGludEVuY29kaW5nTmFtZSgpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIG1faGludERlY29kZXIgPyBtX2hpbnREZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSA6IE5V
TEw7CisgICAgfQogCiAgICAgQ29udGVudFR5cGUgbV9jb250ZW50VHlwZTsKICAgICBUZXh0RGVj
b2RlciBtX2RlY29kZXI7CisgICAgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogbV9oaW50RGVj
b2RlcjsKKyAgICAvL1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2hpbnREZWNvZGVyOwog
ICAgIEVuY29kaW5nU291cmNlIG1fc291cmNlOwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsK
ICAgICBib29sIG1fY2hlY2tlZEZvckJPTTsKICAgICBib29sIG1fY2hlY2tlZEZvckNTU0NoYXJz
ZXQ7CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldDsKICAgICBib29sIG1fc2F3RXJy
b3I7CisgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOwogfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBh
Z2UpCiAgICAgLCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyhmYWxzZSkKICAgICAsIG1f
em9vbXNUZXh0T25seShmYWxzZSkKICAgICAsIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RN
b2RlKHRydWUpCisgICAgLCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKQogICAgICwgbV9t
YXhpbXVtRGVjb2RlZEltYWdlU2l6ZShzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KQogICAgICwgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhmYWxzZSkKIHsKQEAgLTQxMiw2
ICs0MTMsMTEgQEAgdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUGFpbnROYXRpdmVDb250cgogfQog
I2VuZGlmCiAKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGJvb2wgdXNl
c0VuY29kaW5nRGV0ZWN0b3IpCit7CisgICAgbV91c2VzRW5jb2RpbmdEZXRlY3RvciA9IHVzZXNF
bmNvZGluZ0RldGVjdG9yOworfQorCiB2b2lkIFNldHRpbmdzOjpzZXRBbGxvd1NjcmlwdHNUb0Ns
b3NlV2luZG93cyhib29sIGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKQogewogICAgIG1fYWxs
b3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgPSBhbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93czsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAKICAgICAgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJp
bmcmKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVmYXVsdFRleHRFbmNvZGluZ05hbWU7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNl
c0VuY29kaW5nRGV0ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9y
OyB9CiAKICAgICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwm
KTsKICAgICAgICAgY29uc3QgS1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQpAQCAtMjU2LDYgKzI1OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xs
YmFycyA6IDE7CiAgICAgICAgIGJvb2wgbV96b29tc1RleHRPbmx5IDogMTsKICAgICAgICAgYm9v
bCBtX2VuZm9yY2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSA6IDE7CisgICAgICAgIGJvb2wgbV91
c2VzRW5jb2RpbmdEZXRlY3RvciA6IDE7CiAgICAgICAgIHNpemVfdCBtX21heGltdW1EZWNvZGVk
SW1hZ2VTaXplOwogICAgICAgICBib29sIG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgOiAx
OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFRleHRFbmNvZGluZ0RldGVjdGlvbl9oCisjZGVmaW5lIFRleHRFbmNvZGlu
Z0RldGVjdGlvbl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRFbmNv
ZGluZzsKKworICAgIGJvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaGludEVu
Y29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RW5jb2RpbmcqIGRl
dGVjdGVkRW5jb2RpbmcpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlvbklDVS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlvbklD
VS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
RGV0ZWN0aW9uSUNVLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0ZWN0aW9uLmgi
CisKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
KyNpbmNsdWRlICJ1bmljb2RlL3VjbnYuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjc2RldC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBkZXRlY3RUZXh0RW5jb2Rpbmco
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0
RW5jb2RpbmcqIGRldGVjdGVkRW5jb2RpbmcpCit7CisgICAgKmRldGVjdGVkRW5jb2RpbmcgPSBU
ZXh0RW5jb2RpbmcoKTsKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIFRpZ2VyIGNh
bWUgd2l0aCBJQ1UgMy4yIGFuZCBkb2VzIG5vdCBoYXZlIHRoZSBlbmNvZGluZyBkZXRlY3Rvci4K
KyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIGludCBtYXRjaGVzQ291bnQgPSAwOyAKKyAg
ICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9y
KiBkZXRlY3RvciA9IHVjc2RldF9vcGVuKCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRl
cihkZXRlY3RvciwgdHJ1ZSk7CisgICAgdWNzZGV0X3NldFRleHQoZGV0ZWN0b3IsIGRhdGEsIHN0
YXRpY19jYXN0PGludDMyX3Q+KGxlbiksICZzdGF0dXMpOyAKKyAgICBpZiAoVV9GQUlMVVJFKHN0
YXR1cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBBIGZldyB0aGlu
Z3Mgd2UgY2FuIGRvIG90aGVyIHRoYW4gaW1wcm92aW5nCisgICAgLy8gdGhlIElDVSBkZXRlY3Rv
ciBpdHNlbGYuIAorICAgIC8vIDEuIFVzZSB1Y3NkZXRfZGV0ZWN0QWxsIGFuZCBwaWNrIHRoZSBt
b3N0IGxpa2VseSBvbmUgZ2l2ZW4KKyAgICAvLyAidGhlIGNvbnRleHQiIChwYXJlbnQtZW5jb2Rp
bmcsIHJlZmVycmVyIGVuY29kaW5nLCBldGMpLgorICAgIC8vIDIuICdFbXVsYXRlJyBGaXJlZm94
L0lFJ3Mgbm9uLVVuaXZlcnNhbCBkZXRlY3RvcnMgKGUuZy4KKyAgICAvLyBDaGluZXNlLCBKYXBh
bmVzZSwgUnVzc2lhbiwgS29yZWFuIGFuZCBIZWJyZXcpIGJ5IHBpY2tpbmcgdGhlIAorICAgIC8v
IGVuY29kaW5nIHdpdGggYSBoaWdoZXN0IGNvbmZpZGVuY2UgYW1vbmcgdGhlIGRldGV0Y3Rvci1z
cGVjaWZpYworICAgIC8vIGxpbWl0ZWQgc2V0IG9mIGNhbmRpZGF0ZSBlbmNvZGluZ3MuCisgICAg
Ly8gQmVsb3cgaXMgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmaXJzdCBwYXJ0IG9m
IHdoYXQncyBvdXRsaW5lZAorICAgIC8vIGFib3ZlLgorICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2gq
KiBtYXRjaGVzID0gdWNzZGV0X2RldGVjdEFsbChkZXRlY3RvciwgJm1hdGNoZXNDb3VudCwgJnN0
YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgIHVjc2RldF9jbG9z
ZShkZXRlY3Rvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBj
aGFyKiBlbmNvZGluZyA9IE5VTEw7CisgICAgaWYgKGhpbnRFbmNvZGluZ05hbWUpIHsKKyAgICAg
ICAgVGV4dEVuY29kaW5nIGhpbnRFbmNvZGluZyhoaW50RW5jb2RpbmdOYW1lKTsKKyAgICAgICAg
Ly8gMTAgaXMgdGhlIG1pbmltdW0gY29uZmlkZW5jZSB2YWx1ZSBjb25zaXN0ZW50IHdpdGggdGhl
IGNvZGVwb2ludAorICAgICAgICAvLyBhbGxvY2F0aW9uIGluIGEgZ2l2ZW4gZW5jb2RpbmcuIFRo
ZSBzaXplIG9mIGEgY2h1bmsgcGFzc2VkIHRvCisgICAgICAgIC8vIHVzIHZhcmllcyBldmVuIGZv
ciB0aGUgc2FtZSBodG1sIGZpbGUgKGFwcGFyZW50bHkgZGVwZW5kaW5nIG9uIAorICAgICAgICAv
LyB0aGUgbmV0d29yayBsb2FkKS4gV2hlbiB3ZSdyZSBnaXZlbiBhIHJhdGhlciBzaG9ydCBjaHVu
aywgd2UgCisgICAgICAgIC8vIGRvbid0IGhhdmUgYSBzdWZmaWNpZW50bHkgcmVsaWFibGUgc2ln
bmFsIG90aGVyIHRoYW4gdGhlIGZhY3QgdGhhdAorICAgICAgICAvLyB0aGUgY2h1bmsgaXMgY29u
c2lzdGVudCB3aXRoIGEgc2V0IG9mIGVuY29kaW5ncy4gU28sIGluc3RlYWQgb2YKKyAgICAgICAg
Ly8gc2V0dGluZyBhbiBhcmJpdHJhcnkgdGhyZXNob2xkLCB3ZSBoYXZlIHRvIHNjYW4gYWxsIHRo
ZSBlbmNvZGluZ3MKKyAgICAgICAgLy8gY29uc2lzdGVudCB3aXRoIHRoZSBkYXRhLiAgCisgICAg
ICAgIGNvbnN0IGludDMyX3Qga1RocmVzb2xkID0gMTA7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF0Y2hlc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludDMyX3QgY29uZmlkZW5j
ZSA9IHVjc2RldF9nZXRDb25maWRlbmNlKG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAg
ICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNvbmZpZGVuY2UgPCBrVGhyZXNvbGQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXRjaEVuY29kaW5nID0gdWNzZGV0X2dldE5h
bWUobWF0Y2hlc1tpXSwgJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dEVuY29k
aW5nKG1hdGNoRW5jb2RpbmcpID09IGhpbnRFbmNvZGluZykgeworICAgICAgICAgICAgICAgIGVu
Y29kaW5nID0gaGludEVuY29kaW5nTmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBJZiBubyBtYXRjaCBpcyBmb3VuZCBz
byBmYXIsIGp1c3QgcGljayB0aGUgdG9wIG1hdGNoLiAKKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4s
IHNheSwgd2hlbiBhIHBhcmVudCBmcmFtZSBpbiBFVUMtSlAgcmVmZXJzIHRvCisgICAgLy8gYSBj
aGlsZCBmcmFtZSBpbiBTaGlmdF9KSVMgYW5kIGJvdGggZnJhbWVzIGRvIE5PVCBzcGVjaWZ5IHRo
ZSBlbmNvZGluZworICAgIC8vIG1ha2luZyB1cyByZXNvcnQgdG8gYXV0by1kZXRlY3Rpb24gKHdo
ZW4gaXQgSVMgdHVybmVkIG9uKS4KKyAgICBpZiAoIWVuY29kaW5nICYmIG1hdGNoZXNDb3VudCA+
IDApCisgICAgICAgIGVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2hlc1swXSwgJnN0YXR1
cyk7CisgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICpkZXRlY3RlZEVuY29k
aW5nID0gVGV4dEVuY29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgdWNzZGV0X2Nsb3NlKGRldGVj
dG9yKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAgICAKKyAgICB1Y3NkZXRfY2xvc2Uo
ZGV0ZWN0b3IpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0aW9uTm9uZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdGlvbk5vbmUuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVj
dGlvbk5vbmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nKiBkZXRlY3RlZEVuY29k
aW5nKQoreworICAgICpkZXRlY3RlZEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDA4MjkpCisrKyBXZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTAyLTEwICBK
dW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJQcmVmZXJlbmNlcyBmb3IgZW5jb2Rp
bmcgYXV0b2RldGVjdGlvbiBvbiBNYWMuCisgIAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJl
bmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgor
ICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAgICgtW1dlYlBy
ZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVu
Y2VzIHNldFVzZXNFbmNvZGluZ0RldGVjdG9yOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAg
ICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb246XSk6CisKIDIwMDkt
MDItMDkgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlS2V5c1ByaXZhdGUuaAkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNkZWZpbmUgV2ViS2l0RGVmYXVsdEZvbnRTaXplUHJlZmVyZW5jZUtleSBAIldlYktpdERl
ZmF1bHRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemVQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUiCiAjZGVmaW5lIFdlYktpdERlZmF1
bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSBAIldlYktpdERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lIgorI2RlZmluZSBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXkg
QCJXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvciIKICNkZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hl
ZXRFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXJTdHlsZVNoZWV0RW5hYmxlZFByZWZl
cmVuY2VLZXkiCiAjZGVmaW5lIFdlYktpdFVzZXJTdHlsZVNoZWV0TG9jYXRpb25QcmVmZXJlbmNl
S2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXkiCiAjZGVmaW5l
IFdlYktpdFNob3VsZFByaW50QmFja2dyb3VuZHNQcmVmZXJlbmNlS2V5IEAiV2ViS2l0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkiCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA0MDc5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIHN0YXRpYyBX
ZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAgICAgICAgQCIxNiIsICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBAIjEzIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGaXhlZEZv
bnRTaXplUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCJJU08tODg1OS0xIiwgICAgICAgICAgICAg
ICAgICBXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZVByZWZlcmVuY2VLZXksCisgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0
b3JQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9dLCAg
IFdlYktpdFVzZXJTdHlsZVNoZWV0RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEAiIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblBy
ZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2Vi
S2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXksCkBAIC04NjMsNiArODY0LDE2
IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAgICBfcHJpdmF0
ZS0+YXV0b21hdGljYWxseURldGVjdHNDYWNoZU1vZGVsID0gYXV0b21hdGljYWxseURldGVjdHND
YWNoZU1vZGVsOwogfQogCistIChCT09MKXVzZXNFbmNvZGluZ0RldGVjdG9yCit7CisgICAgcmV0
dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6IFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJl
ZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wp
ZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6IGZsYWcgZm9yS2V5OiBXZWJLaXRVc2Vz
RW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXldOworfQorCiAtIChCT09MKWlzV2ViU2VjdXJp
dHlFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6IFdlYktpdFdl
YlNlY3VyaXR5RW5hYmxlZFByZWZlcmVuY2VLZXldOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDkgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc1JlbW92ZWRObwogLSAoQk9P
TClhcHBsaWNhdGlvbkNocm9tZU1vZGVFbmFibGVkOwogLSAodm9pZClzZXRBcHBsaWNhdGlvbkNo
cm9tZU1vZGVFbmFibGVkOihCT09MKWZsYWc7CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0
b3I7CistICh2b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9yOihCT09MKWZsYWc7CisKIC0gKEJP
T0wpcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czsKIC0gKHZvaWQpc2V0UmVzcGVj
dFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czooQk9PTClmbGFnOwogCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkocmV2aXNpb24gNDA3OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMwMSw2ICsxMzAxLDcgQEAgc3RhdGljIHZvaWQgV2Vi
S2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQwogICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRG
b250U2l6ZShbcHJlZmVyZW5jZXMgZGVmYXVsdEZpeGVkRm9udFNpemVdKTsKICAgICBzZXR0aW5n
cy0+c2V0RGVmYXVsdEZvbnRTaXplKFtwcmVmZXJlbmNlcyBkZWZhdWx0Rm9udFNpemVdKTsKICAg
ICBzZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoW3ByZWZlcmVuY2VzIGRlZmF1
bHRUZXh0RW5jb2RpbmdOYW1lXSk7CisgICAgc2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVj
dG9yKFtwcmVmZXJlbmNlcyB1c2VzRW5jb2RpbmdEZXRlY3Rvcl0pOwogICAgIHNldHRpbmdzLT5z
ZXRGYW50YXN5Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgZmFudGFzeUZvbnRGYW1pbHldKTsKICAg
ICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBmaXhlZEZvbnRGYW1p
bHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncyhbcHJlZmVy
ZW5jZXMgX2ZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3NdKTsK
</data>
<flag name="review"
          id="13367"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28353</attachid>
            <date>2009-03-06 01:25:00 -0800</date>
            <delta_ts>2009-03-12 10:06:53 -0700</delta_ts>
            <desc>updated patch with ap&apos;s review comments addressed</desc>
            <filename>16482.patch.6b</filename>
            <type>text/plain</type>
            <size>52805</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTQ0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDMtMDUgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIGVuY29kaW5nIGRldGVjdG9yICdob29rJyB0byBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3RvciogdG8gcGxhdGZvcm0vdGV4dC4gQ3VycmVu
dGx5LAorICAgICAgICAgICB0aGUgb25seSBpbXBsZW1lbnRhdGlvbiB1c2VzIElDVS4gU3R1YiBp
cyBhZGRlZCBmb3IgCisgICAgICAgICAgIHBvcnRzIHRoYXQgZG8gbm90IHVzZSBJQ1UgYW5kIGEg
YnVpbGQgb24gVGlnZXIuIE1hYyBPUyAKKyAgICAgICAgICAgVGlnZXIgY29tZXMgd2l0aCBJQ1Ug
My4yIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBkZXRlY3Rvci4KKyAgICAgICAgIC0g
YWRkIHVjc2RldC5oIHRvIGljdS91bmljb2RlIGZvciBwb3J0cyB1c2luZyBJQ1UuCisKKyAgICAg
ICAgTGF5b3V0IHRlc3RzIHdpbGwgYmUgYWRkZWQgb25jZSBidWcgMjA1MzQgaXMgZml4ZWQgYW5k
IGEgV2ViUHJlZmVyZW5jZQorICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBpbiB0ZXN0X3NoZWxs
LiBXaXRoIFVzZXNFbmNvZGluZ0RldGVjdG9yIG9mZiwgdGhlcmUKKyAgICAgICAgaXMgbm8gY2hh
bmdlIHRvIHRlc3QuIAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZS5iYXNlLmV4cAorICAgICAgICAqIGljdS91bmljb2RlL3Vjc2RldC5oCisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp3cml0ZSk6IHR1cm4gb24vb2ZmIGVuY29kaW5nIGRldGVjdG9yIGRlcGVuZGluZyBvbiBTZXR0
aW5ncyBhbmQgc2V0IGhpbnREZWNvZGVyIG9mIFRleHRSZXNvdXJjZURlY29kZXIgdG8gdGhlIHBh
cmVudCBmcmFtZSBkZWNvZGVyIGlmIG5lY2Vzc2FyeSBhbmQgdGhlIHNlY3VyaXR5IHBvbGljeSBh
bGxvd3MgcmVmZXJpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBkZWNvZGVyLgorICAgICAgICAqIGxv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNv
dXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KTogYWRkIGNoZWNrIGZvciBFbmNv
ZGluZ0Zyb21QYXJlbnRGcmFtZQorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rl
cjo6Y2hlY2tGb3JIZWFkQ2hhcnNldCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVz
b3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
ZXNvdXJjZURlY29kZXI6OmRlY29kZSk6IGNhbGwgZW5jb2RpbmcgZGV0ZWN0b3IgaWYgc2hvdWxk
QXV0b0RldGVjdCByZXR1cm5zIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpmbHVzaCk6IGlmIGVuY29kaW5nIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IG5vdywgY2Fs
bCBlbmNvZGluZyBkZXRlY3RvciBpZiBzaG91bGRBdXRvRGV0ZWN0IHJldHVybnMgdHJ1ZS4KKyAg
ICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJlc291cmNlRGVjb2Rlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
ZXRIaW50RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6aGludEVuY29k
aW5nTmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6IGFkZCBtX3VzZXNFbmNvZGlu
Z0RldGVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKToKKyAgICAgICAg
KiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6dXNlc0VuY29k
aW5nRGV0ZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rv
cklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToKKwogMjAwOS0wMy0w
NSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDE0NDkpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgxLDYgKzE0ODEs
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RGly
ZWN0aW9uLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmggXAorCVdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcCBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0MTQ0OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3IEBAIF9fWk43V2ViQ29yZTE5U2VsZWN0
aW9uQ29udHJvbGxlcjlzZWxlY3QKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlckMx
RVBOU181RnJhbWVFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyNWZsdXNoRXYK
IF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjZkZWNvZGVFUEtjbQotX19aTjdXZWJD
b3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOU182U3RyaW5nRVJLTlNfMTJUZXh0RW5jb2Rp
bmdFCitfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJDMUVSS05TXzZTdHJpbmdFUktO
U18xMlRleHRFbmNvZGluZ0ViCiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJEMUV2
CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRFeHBlY3RlZENvbnRlbnRM
ZW5ndGhFeAogX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xsZXIxNmNsZWFyQ29udGV4
dE1lbnVFdgpAQCAtNTk5LDYgKzU5OSw3IEBAIF9fWk43V2ViQ29yZThTZXR0aW5nczIyc2V0U2Fu
c1NlcmlmRm9udEYKIF9fWk43V2ViQ29yZThTZXR0aW5nczIyc2V0U2hvd3NVUkxzSW5Ub29sVGlw
c0ViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldERlZmF1bHRGaXhlZEZvbnRTaXplRWkKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczIzc2V0RWRpdGFibGVMaW5rQmVoYXZpb3JFTlNfMjBFZGl0YWJs
ZUxpbmtCZWhhdmlvckUKK19fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0VXNlc0VuY29kaW5nRGV0
ZWN0b3JFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjRzZXRBcHBsaWNhdGlvbkNocm9tZU1vZGVF
YgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjRzZXRUZXh0QXJlYXNBcmVSZXNpemFibGVFYgogX19a
TjdXZWJDb3JlOFNldHRpbmdzMjVzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkRWIKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gNDE0NDkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC05
NTAsNiArOTUwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
VEYxNi5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAgXAorICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nRGV0ZWN0b3JOb25lLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdp
c3RyeS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAgXAogICAgIHBsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5zY29ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuc2NvbnMJKHJldmlzaW9uIDQxNDQ5KQorKysg
V2ViQ29yZS9XZWJDb3JlLnNjb25zCSh3b3JraW5nIGNvcHkpCkBAIC04MzYsNiArODM2LDcgQEAg
c291cmNlc1sncGxhdGZvcm0vdGV4dCddID0gWwogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y1VURjE2LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwJywKICAgICAn
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwJywKKyAgICAncGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAnLAogICAg
ICdwbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJl
dmlzaW9uIDQxNDQ5KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29w
eSkKQEAgLTc3MSw2ICs3NzEsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmls
ZXMgbmVlCiAgICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL3RleHQvVGV4dERlY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nLmNwcAorICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwCiAgICAgICAgIHBsYXRm
b3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDQxNDQ5KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcxMyw2ICs2NzEzLDE0IEBACiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVx0ZXh0XFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XFRleHRF
bmNvZGluZ0RldGVjdG9yLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDE0NDkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDI4OCw2ICs0Mjg4
LDggQEAKIAkJQzA5MTU4OEUwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RX
cmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMwOTE1ODg4MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5j
cHAgKi87IH07CiAJCUMwOTE1ODhGMERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzA5MTU4ODkwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
LmggKi87IH07CiAJCUMwREZDODcwMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBERkM4
NkYwREI2ODQxQTAwM0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi87IH07CisJCUMxMDVE
QTYyMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MTBGM0FBNjhG
MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovOyB9OworCQlDMTA1REE2
NDBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0
RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAw
QjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAgKi87IH07CkBAIC05MTE1LDYgKzkxMTcsOCBAQAogCQlDMDkxNTg4ODBEQjQy
MDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMDkxNTg4OTBEQjQyMDkyMDBFNTVBRjQg
LyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzBERkM4NkYwREI2ODQxQTAwM0VBRTdDIC8qIEpTQ29uc29sZUN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NvbnNvbGVDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgy
RTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMyODAsNiArMTMyODQsOCBAQAogCQkJ
CUIyQzNEQTE1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggKi8sCiAJCQkJQjJD
M0RBMTYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgKi8sCiAJCQkJQjJDM0RB
MTcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZy5oICovLAorCQkJCUMxMDVEQTYzMEYz
QUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovLAorCQkJCUMxMDVEQTYx
MEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8sCiAJCQkJ
QjJDM0RBMTgwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcCAqLywK
IAkJCQlCMkMzREExOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuaCAq
LywKIAkJCQlCMkMzREExQTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5jcHAgKi8sCkBA
IC0xNjYzNCw2ICsxNjY0MCw3IEBACiAJCQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHREaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjkzODAyMEExMTEwMEEwMEMxMjdG
RSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ3MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUMxMDVEQTY0MEYz
QUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBNDkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzNBMTQzMDBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxODA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEdyYW51
bGFyaXR5LmggaW4gSGVhZGVycyAqLywKQEAgLTE4NjU1LDYgKzE4NjYyLDcgQEAKIAkJCQlCMkMz
REE0MzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE2OTM4MDEwQTExMTAwQTAwQzEyN0ZFIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUMxMDVEQTYyMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2Rp
bmdEZXRlY3RvcklDVS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0ODBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMz
QTE0MkUwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUUxQjA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogV2ViQ29yZS9pY3UvdW5pY29kZS91Y3NkZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pY3Uv
dW5pY29kZS91Y3NkZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgSW50ZXJuYXRpb25hbCBC
dXNpbmVzcyBNYWNoaW5lcworICogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIGZpbGUgbmFtZTogIHVjc2RldC5oCisg
KiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisgKiAgIGluZGVudGF0aW9uOjQKKyAqCisgKiAgIGNy
ZWF0ZWQgb246IDIwMDVBdWcwNAorICogICBjcmVhdGVkIGJ5OiBBbmR5IEhlbmluZ2VyCisgKgor
ICogICBJQ1UgQ2hhcmFjdGVyIFNldCBEZXRlY3Rpb24sIEFQSSBmb3IgQworICoKKyAqICAgRHJh
ZnQgdmVyc2lvbiAxOCBPY3QgMjAwNQorICoKKyAqLworCisjaWZuZGVmIF9fVUNTREVUX0gKKyNk
ZWZpbmUgX19VQ1NERVRfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmICFV
Q09ORklHX05PX0NPTlZFUlNJT04KKyNpbmNsdWRlICJ1bmljb2RlL3VlbnVtLmgiCisKKy8qKgor
ICogXGZpbGUgCisgKiBcYnJpZWYgQyBBUEk6IENoYXJzZXQgRGV0ZWN0aW9uIEFQSQorICoKKyAq
IFRoaXMgQVBJIHByb3ZpZGVzIGEgZmFjaWxpdHkgZm9yIGRldGVjdGluZyB0aGUKKyAqIGNoYXJz
ZXQgb3IgZW5jb2Rpbmcgb2YgY2hhcmFjdGVyIGRhdGEgaW4gYW4gdW5rbm93biB0ZXh0IGZvcm1h
dC4KKyAqIFRoZSBpbnB1dCBkYXRhIGNhbiBiZSBmcm9tIGFuIGFycmF5IG9mIGJ5dGVzLgorICog
PHA+CisgKiBDaGFyYWN0ZXIgc2V0IGRldGVjdGlvbiBpcyBhdCBiZXN0IGFuIGltcHJlY2lzZSBv
cGVyYXRpb24uICBUaGUgZGV0ZWN0aW9uCisgKiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0byBpZGVu
dGlmeSB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyaXN0aWNzCisg
KiBvZiB0aGUgYnl0ZSBkYXRhLCBidXQgdGhlIHByb2Nlc3MgaXMgcGFydGx5IHN0YXRpc3RpY2Fs
IGluIG5hdHVyZSwgYW5kCisgKiB0aGUgcmVzdWx0cyBjYW4gbm90IGJlIGd1YXJhbnRlZWQgdG8g
YWx3YXlzIGJlIGNvcnJlY3QuCisgKiA8cD4KKyAqIEZvciBiZXN0IGFjY3VyYWN5IGluIGNoYXJz
ZXQgZGV0ZWN0aW9uLCB0aGUgaW5wdXQgZGF0YSBzaG91bGQgYmUgcHJpbWFyaWx5CisgKiBpbiBh
IHNpbmdsZSBsYW5ndWFnZSwgYW5kIGEgbWluaW11bSBvZiBhIGZldyBodW5kcmVkIGJ5dGVzIHdv
cnRoIG9mIHBsYWluIHRleHQKKyAqIGluIHRoZSBsYW5ndWFnZSBhcmUgbmVlZGVkLiAgVGhlIGRl
dGVjdGlvbiBwcm9jZXNzIHdpbGwgYXR0ZW1wdCB0bworICogaWdub3JlIGh0bWwgb3IgeG1sIHN0
eWxlIG1hcmt1cCB0aGF0IGNvdWxkIG90aGVyd2lzZSBvYnNjdXJlIHRoZSBjb250ZW50LgorICov
CisgCisKK3N0cnVjdCBVQ2hhcnNldERldGVjdG9yOworLyoqCisgICogU3RydWN0dXJlIHJlcHJl
c2VudGluZyBhIGNoYXJzZXQgZGV0ZWN0b3IKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAqLwordHlw
ZWRlZiBzdHJ1Y3QgVUNoYXJzZXREZXRlY3RvciBVQ2hhcnNldERldGVjdG9yOworCitzdHJ1Y3Qg
VUNoYXJzZXRNYXRjaDsKKy8qKgorICAqICBPcGFxdWUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBh
IG1hdGNoIHRoYXQgd2FzIGlkZW50aWZpZWQKKyAgKiAgZnJvbSBhIGNoYXJzZXQgZGV0ZWN0aW9u
IG9wZXJhdGlvbi4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8KK3R5cGVkZWYgc3RydWN0IFVD
aGFyc2V0TWF0Y2ggVUNoYXJzZXRNYXRjaDsKKworLyoqCisgICogIE9wZW4gYSBjaGFyc2V0IGRl
dGVjdG9yLgorICAqCisgICogIEBwYXJhbSBzdGF0dXMgQW55IGVycm9yIGNvbmRpdGlvbnMgb2Nj
dXJyaW5nIGR1cmluZyB0aGUgb3BlbgorICAqICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBhcmUg
cmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqICBAcmV0dXJuIHRoZSBuZXdseSBv
cGVuZWQgY2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJB
RlQgVUNoYXJzZXREZXRlY3RvciAqIFVfRVhQT1JUMgordWNzZGV0X29wZW4oVUVycm9yQ29kZSAg
ICpzdGF0dXMpOworCisvKioKKyAgKiBDbG9zZSBhIGNoYXJzZXQgZGV0ZWN0b3IuICBBbGwgc3Rv
cmFnZSBhbmQgYW55IG90aGVyIHJlc291cmNlcworICAqICAgb3duZWQgYnkgdGhpcyBjaGFyc2V0
IGRldGVjdG9yIHdpbGwgYmUgcmVsZWFzZWQuICBGYWlsdXJlIHRvCisgICogICBjbG9zZSBhIGNo
YXJzZXQgZGV0ZWN0b3Igd2hlbiBmaW5pc2hlZCB3aXRoIGl0IGNhbiByZXN1bHQgaW4KKyAgKiAg
IG1lbW9yeSBsZWFrcyBpbiB0aGUgYXBwbGljYXRpb24uCisgICoKKyAgKiAgQHBhcmFtIHVjc2Qg
IFRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIGNsb3NlZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjYK
KyAgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9jbG9zZShVQ2hhcnNldERldGVj
dG9yICp1Y3NkKTsKKworLyoqCisgICogU2V0IHRoZSBpbnB1dCBieXRlIGRhdGEgd2hvc2UgY2hh
cnNldCBpcyB0byBkZXRlY3RlZC4KKyAgKgorICAqIE93bmVyc2hpcCBvZiB0aGUgaW5wdXQgIHRl
eHQgYnl0ZSBhcnJheSByZW1haW5zIHdpdGggdGhlIGNhbGxlci4KKyAgKiBUaGUgaW5wdXQgc3Ry
aW5nIG11c3Qgbm90IGJlIGFsdGVyZWQgb3IgZGVsZXRlZCB1bnRpbCB0aGUgY2hhcnNldAorICAq
IGRldGVjdG9yIGlzIGVpdGhlciBjbG9zZWQgb3IgcmVzZXQgdG8gcmVmZXIgdG8gZGlmZmVyZW50
IGlucHV0IHRleHQuCisgICoKKyAgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFyc2V0IGRldGVjdG9y
IHRvIGJlIHVzZWQuCisgICogQHBhcmFtIHRleHRJbiB0aGUgaW5wdXQgdGV4dCBvZiB1bmtub3du
IGVuY29kaW5nLiAgIC4KKyAgKiBAcGFyYW0gbGVuICAgIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0
IHRleHQsIG9yIC0xIGlmIHRoZSB0ZXh0CisgICogICAgICAgICAgICAgICBpcyBOVUwgdGVybWlu
YXRlZC4KKyAgKiBAcGFyYW0gc3RhdHVzIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRl
ZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICoKKyAgKiBAZHJhZnQgSUNVIDMuNgorICAqLwor
VV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X3NldFRleHQoVUNoYXJzZXREZXRlY3RvciAq
dWNzZCwgY29uc3QgY2hhciAqdGV4dEluLCBpbnQzMl90IGxlbiwgVUVycm9yQ29kZSAqc3RhdHVz
KTsKKworCisvKiogU2V0IHRoZSBkZWNsYXJlZCBlbmNvZGluZyBmb3IgY2hhcnNldCBkZXRlY3Rp
b24uCisgKiAgVGhlIGRlY2xhcmVkIGVuY29kaW5nIG9mIGFuIGlucHV0IHRleHQgaXMgYW4gZW5j
b2Rpbmcgb2J0YWluZWQKKyAqICBieSB0aGUgdXNlciBmcm9tIGFuIGh0dHAgaGVhZGVyIG9yIHht
bCBkZWNsYXJhdGlvbiBvciBzaW1pbGFyIHNvdXJjZSB0aGF0CisgKiAgY2FuIGJlIHByb3ZpZGVk
IGFzIGFuIGFkZGl0aW9uYWwgaGludCB0byB0aGUgY2hhcnNldCBkZXRlY3Rvci4KKyAqCisgKiAg
SG93IGFuZCB3aGV0aGVyIHRoZSBkZWNsYXJlZCBlbmNvZGluZyB3aWxsIGJlIHVzZWQgZHVyaW5n
IHRoZQorICogIGRldGVjdGlvbiBwcm9jZXNzIGlzIFRCRC4KKyAqCisgKiBAcGFyYW0gdWNzZCAg
ICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBAcGFyYW0gZW5jb2Rpbmcg
IGFuIGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBkYXRhIG9idGFpbmVkIGZyb20KKyAqICAgICAg
ICAgICAgICAgICAgYSBoZWFkZXIgb3IgZGVjbGFyYXRpb24gb3Igb3RoZXIgc291cmNlIG91dHNp
ZGUKKyAqICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ5dGUgZGF0YSBpdHNlbGYuCisgKiBAcGFy
YW0gbGVuZ3RoICAgIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kaW5nIG5hbWUsIG9yIC0xIGlmIHRo
ZSBuYW1lIHN0cmluZworICogICAgICAgICAgICAgICAgICBpcyBOVUwgdGVybWluYXRlZC4KKyAq
IEBwYXJhbSBzdGF0dXMgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sg
aW4gdGhpcyB2YXJpYWJsZS4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZUIHZv
aWQgVV9FWFBPUlQyCit1Y3NkZXRfc2V0RGVjbGFyZWRFbmNvZGluZyhVQ2hhcnNldERldGVjdG9y
ICp1Y3NkLCBjb25zdCBjaGFyICplbmNvZGluZywgaW50MzJfdCBsZW5ndGgsIFVFcnJvckNvZGUg
KnN0YXR1cyk7CisKKworLyoqCisgKiBSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCBiZXN0IG1hdGNo
ZXMgdGhlIHN1cHBsaWVkIGlucHV0IGRhdGEuCisgKiAKKyAqIE5vdGUgdGhvdWdoLCB0aGF0IGJl
Y2F1c2UgdGhlIGRldGVjdGlvbiAKKyAqIG9ubHkgbG9va3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBp
bnB1dCBkYXRhLAorICogdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZXR1cm5lZCBj
aGFyc2V0IHdpbGwgZmFpbCB0byBoYW5kbGUKKyAqIHRoZSBmdWxsIHNldCBvZiBpbnB1dCBkYXRh
LgorICogPHA+CisgKiBUaGUgcmV0dXJuZWQgVUNoYXJzZXRNYXRjaCBvYmplY3QgaXMgb3duZWQg
YnkgdGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiBJdCB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0
aGUgZGV0ZWN0b3IgaW5wdXQgaXMgcmVzZXQsIG9yIHVudGlsCisgKiB0aGUgZGV0ZWN0b3IgaXMg
Y2xvc2VkLgorICogPHA+CisgKiBUaGUgZnVuY3Rpb24gd2lsbCBmYWlsIGlmCisgKiAgPHVsPgor
ICogICAgPGxpPm5vIGNoYXJzZXQgYXBwZWFycyB0byBtYXRjaCB0aGUgZGF0YS48L2xpPgorICog
ICAgPGxpPm5vIGlucHV0IHRleHQgaGFzIGJlZW4gcHJvdmlkZWQ8L2xpPgorICogIDwvdWw+Cisg
KgorICogQHBhcmFtIHVjc2QgICAgICB0aGUgY2hhcnNldCBkZXRlY3RvciB0byBiZSB1c2VkLgor
ICogQHBhcmFtIHN0YXR1cyAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFj
ayBpbiB0aGlzIHZhcmlhYmxlLgorICogQHJldHVybiAgICAgICAgICBhIFVDaGFyc2V0TWF0Y2gg
IHJlcHJlc2VudGluZyB0aGUgYmVzdCBtYXRjaGluZyBjaGFyc2V0LAorICogICAgICAgICAgICAg
ICAgICBvciBOVUxMIGlmIG5vIGNoYXJzZXQgbWF0Y2hlcyB0aGUgYnl0ZSBkYXRhLgorICoKKyAq
IEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgVUNoYXJzZXRNYXRjaCAqIFVfRVhQ
T1JUMgordWNzZGV0X2RldGVjdChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBVRXJyb3JDb2RlICpz
dGF0dXMpOworICAgIAorCisvKioKKyAqICBGaW5kIGFsbCBjaGFyc2V0IG1hdGNoZXMgdGhhdCBh
cHBlYXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBpbnB1dCwKKyAqICByZXR1cm5pbmcgYW4g
YXJyYXkgb2YgcmVzdWx0cy4gIFRoZSByZXN1bHRzIGFyZSBvcmRlcmVkIHdpdGggdGhlCisgKiAg
YmVzdCBxdWFsaXR5IG1hdGNoIGZpcnN0LgorICoKKyAqICBCZWNhdXNlIHRoZSBkZXRlY3Rpb24g
b25seSBsb29rcyBhdCBhIGxpbWl0ZWQgYW1vdW50IG9mIHRoZQorICogIGlucHV0IGJ5dGUgZGF0
YSwgc29tZSBvZiB0aGUgcmV0dXJuZWQgY2hhcnNldHMgbWF5IGZhaWwgdG8gaGFuZGxlCisgKiAg
dGhlIGFsbCBvZiBpbnB1dCBkYXRhLgorICogIDxwPgorICogIFRoZSByZXR1cm5lZCBVQ2hhcnNl
dE1hdGNoIG9iamVjdHMgYXJlIG93bmVkIGJ5IHRoZSBVQ2hhcnNldERldGVjdG9yLgorICogIFRo
ZXkgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGRldGVjdG9yIGlzIGNsb3NlZCBvciBtb2Rp
ZmllZAorICogIAorICogPHA+CisgKiBSZXR1cm4gYW4gZXJyb3IgaWYgCisgKiAgPHVsPgorICog
ICAgPGxpPm5vIGNoYXJzZXRzIGFwcGVhciB0byBtYXRjaCB0aGUgaW5wdXQgZGF0YS48L2xpPgor
ICogICAgPGxpPm5vIGlucHV0IHRleHQgaGFzIGJlZW4gcHJvdmlkZWQ8L2xpPgorICogIDwvdWw+
CisgKiAKKyAqIEBwYXJhbSB1Y3NkICAgICAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJl
IHVzZWQuCisgKiBAcGFyYW0gbWF0Y2hlc0ZvdW5kICBwb2ludGVyIHRvIGEgdmFyaWFibGUgdGhh
dCB3aWxsIGJlIHNldCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBj
aGFyc2V0cyBpZGVudGlmaWVkIHRoYXQgYXJlIGNvbnNpc3RlbnQgd2l0aAorICogICAgICAgICAg
ICAgICAgICAgICAgdGhlIGlucHV0IGRhdGEuICBPdXRwdXQgb25seS4KKyAqIEBwYXJhbSBzdGF0
dXMgICAgICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMg
dmFyaWFibGUuCisgKiBAcmV0dXJuICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkg
b2YgcG9pbnRlcnMgdG8gVUNoYXJTZXRNYXRjaCBvYmplY3RzLgorICogICAgICAgICAgICAgICAg
ICAgICAgVGhpcyBhcnJheSwgYW5kIHRoZSBVQ2hhclNldE1hdGNoIGluc3RhbmNlcyB0byB3aGlj
aCBpdCByZWZlcnMsCisgKiAgICAgICAgICAgICAgICAgICAgICBhcmUgb3duZWQgYnkgdGhlIFVD
aGFyc2V0RGV0ZWN0b3IsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbAorICogICAgICAgICAg
ICAgICAgICAgICAgdGhlIGRldGVjdG9yIGlzIGNsb3NlZCBvciBtb2RpZmllZC4KKyAqIEBkcmFm
dCBJQ1UgMy40CisgKi8KK1VfRFJBRlQgY29uc3QgVUNoYXJzZXRNYXRjaCAqKiBVX0VYUE9SVDIK
K3Vjc2RldF9kZXRlY3RBbGwoVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgaW50MzJfdCAqbWF0Y2hl
c0ZvdW5kLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgKiAgR2V0IHRoZSBuYW1l
IG9mIHRoZSBjaGFyc2V0IHJlcHJlc2VudGVkIGJ5IGEgVUNoYXJzZXRNYXRjaC4KKyAqCisgKiAg
VGhlIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm5lZCBuYW1lIHN0cmluZyBpcyBvd25lZCBieSB0aGUK
KyAqICBVQ2hhcnNldE1hdGNoLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgd2hpbGUgdGhlIFVDaGFy
c2V0TWF0Y2gKKyAqICBpcyB2YWxpZC4KKyAqCisgKiAgVGhlIG5hbWUgcmV0dXJuZWQgaXMgc3Vp
dGFibGUgZm9yIHVzZSB3aXRoIHRoZSBJQ1UgY29udmVyc2lvbiBBUElzLgorICoKKyAqICBAcGFy
YW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAg
QW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4K
KyAqICBAcmV0dXJuICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgY2hhcnNldC4KKyAq
CisgKiAgQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBjaGFyICogVV9FWFBPUlQy
Cit1Y3NkZXRfZ2V0TmFtZShjb25zdCBVQ2hhcnNldE1hdGNoICp1Y3NtLCBVRXJyb3JDb2RlICpz
dGF0dXMpOworCisvKioKKyAqICBHZXQgYSBjb25maWRlbmNlIG51bWJlciBmb3IgdGhlIHF1YWxp
dHkgb2YgdGhlIG1hdGNoIG9mIHRoZSBieXRlCisgKiAgZGF0YSB3aXRoIHRoZSBjaGFyc2V0LiAg
Q29uZmlkZW5jZSBudW1iZXJzIHJhbmdlIGZyb20gemVybyB0byAxMDAsCisgKiAgd2l0aCAxMDAg
cmVwcmVzZW50aW5nIGNvbXBsZXRlIGNvbmZpZGVuY2UgYW5kIHplcm8gcmVwcmVzZW50aW5nCisg
KiAgbm8gY29uZmlkZW5jZS4KKyAqCisgKiAgVGhlIGNvbmZpZGVuY2UgdmFsdWVzIGFyZSBzb21l
d2hhdCBhcmJpdHJhcnkuICBUaGV5IGRlZmluZSBhbgorICogIGFuIG9yZGVyaW5nIHdpdGhpbiB0
aGUgcmVzdWx0cyBmb3IgYW55IHNpbmdsZSBkZXRlY3Rpb24gb3BlcmF0aW9uCisgKiAgYnV0IGFy
ZSBub3QgZ2VuZXJhbGx5IGNvbXBhcmFibGUgYmV0d2VlbiB0aGUgcmVzdWx0cyBmb3IgZGlmZmVy
ZW50IGlucHV0LgorICoKKyAqICBBIGNvbmZpZGVuY2UgdmFsdWUgb2YgdGVuIGRvZXMgaGF2ZSBh
IGdlbmVyYWwgbWVhbmluZyAtIGl0IGlzIHVzZWQKKyAqICBmb3IgY2hhcnNldHMgdGhhdCBjYW4g
cmVwcmVzZW50IHRoZSBpbnB1dCBkYXRhLCBidXQgZm9yIHdoaWNoIHRoZXJlCisgKiAgaXMgbm8g
b3RoZXIgaW5kaWNhdGlvbiB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhlIGNoYXJzZXQgaXMgdGhlIGNv
cnJlY3Qgb25lLgorICogIFB1cmUgNyBiaXQgQVNDSUkgZGF0YSwgZm9yIGV4YW1wbGUsIGlzIGNv
bXBhdGlibGUgd2l0aCBhCisgKiAgZ3JlYXQgbWFueSBjaGFyc2V0cywgbW9zdCBvZiB3aGljaCB3
aWxsIGFwcGVhciBhcyBwb3NzaWJsZSBtYXRjaGVzCisgKiAgd2l0aCBhIGNvbmZpZGVuY2Ugb2Yg
MTAuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAq
ICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBp
biB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIEEgY29uZmlkZW5jZSBudW1iZXIg
Zm9yIHRoZSBjaGFyc2V0IG1hdGNoLgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICovCitVX0RS
QUZUIGludDMyX3QgVV9FWFBPUlQyCit1Y3NkZXRfZ2V0Q29uZmlkZW5jZShjb25zdCBVQ2hhcnNl
dE1hdGNoICp1Y3NtLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqICBHZXQgdGhlIFJG
QyAzMDY2IGNvZGUgZm9yIHRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgZGF0YS4KKyAqCisgKiAg
VGhlIENoYXJzZXQgRGV0ZWN0aW9uIHNlcnZpY2UgaXMgaW50ZW5kZWQgcHJpbWFyaWx5IGZvciBk
ZXRlY3RpbmcKKyAqICBjaGFyc2V0cywgbm90IGxhbmd1YWdlLiAgRm9yIHNvbWUsIGJ1dCBub3Qg
YWxsLCBjaGFyc2V0cywgYSBsYW5ndWFnZSBpcworICogIGlkZW50aWZpZWQgYXMgYSBieXByb2R1
Y3Qgb2YgdGhlIGRldGVjdGlvbiBwcm9jZXNzLCBhbmQgdGhhdCBpcyB3aGF0CisgKiAgaXMgcmV0
dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiAgQ0FVVElPTjoKKyAqICAgIDEuICBMYW5n
dWFnZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBpbnB1dCBkYXRhIGVuY29kZWQg
aW4KKyAqICAgICAgICBhbGwgY2hhcnNldHMuIEluIHBhcnRpY3VsYXIsIG5vIGxhbmd1YWdlIGlz
IGlkZW50aWZpZWQKKyAqICAgICAgICBmb3IgVVRGLTggaW5wdXQgZGF0YS4KKyAqCisgKiAgICAy
LiAgQ2xvc2VseSByZWxhdGVkIGxhbmd1YWdlcyBtYXkgc29tZXRpbWVzIGJlIGNvbmZ1c2VkLgor
ICoKKyAqICBJZiBtb3JlIGFjY3VyYXRlIGxhbmd1YWdlIGRldGVjdGlvbiBpcyByZXF1aXJlZCwg
YSBsaW5ndWlzdGljCisgKiAgYW5hbHlzaXMgcGFja2FnZSBzaG91bGQgYmUgdXNlZC4KKyAqCisg
KiAgVGhlIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm5lZCBuYW1lIHN0cmluZyBpcyBvd25lZCBieSB0
aGUKKyAqICBVQ2hhcnNldE1hdGNoLCBhbmQgd2lsbCByZW1haW4gdmFsaWQgd2hpbGUgdGhlIFVD
aGFyc2V0TWF0Y2gKKyAqICBpcyB2YWxpZC4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNo
YXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRp
b25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAg
ICAgVGhlIFJGQyAzMDY2IGNvZGUgZm9yIHRoZSBsYW5ndWFnZSBvZiB0aGUgaW5wdXQgZGF0YSwg
b3IKKyAqICAgICAgICAgICAgICAgICBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGxhbmd1YWdlIGNv
dWxkIG5vdCBiZSBkZXRlcm1pbmVkLgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICovCitVX0RS
QUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vjc2RldF9nZXRMYW5ndWFnZShjb25zdCBVQ2hh
cnNldE1hdGNoICp1Y3NtLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgorICAqICBHZXQg
dGhlIGVudGlyZSBpbnB1dCB0ZXh0IGFzIGEgVUNoYXIgc3RyaW5nLCBwbGFjaW5nIGl0IGludG8K
KyAgKiAgYSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyLiAgQSB0ZXJtaW5hdGluZworICAqICBOVUwg
Y2hhcmFjdGVyIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1ZmZlciBpZiBzcGFjZSBpcyBhdmFp
bGFibGUuCisgICoKKyAgKiAgVGhlIG51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIG91dHB1dCBzdHJp
bmcsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgICogIE5VTCwgaXMgcmV0dXJuZWQu
IAorICAqCisgICogIElmIHRoZSBzdXBwbGllZCBidWZmZXIgaXMgc21hbGxlciB0aGFuIHJlcXVp
cmVkIHRvIGhvbGQgdGhlIG91dHB1dCwKKyAgKiAgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIg
YXJlIHVuZGVmaW5lZC4gIFRoZSBmdWxsIG91dHB1dCBzdHJpbmcgbGVuZ3RoCisgICogIChpbiBV
Q2hhcnMpIGlzIHJldHVybmVkIGFzIGFsd2F5cywgYW5kIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRl
IGEgYnVmZmVyCisgICogIG9mIHRoZSBjb3JyZWN0IHNpemUuCisgICoKKyAgKgorICAqIEBwYXJh
bSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAgKiBAcGFyYW0gYnVmICAgICBB
IFVDaGFyIGJ1ZmZlciB0byBiZSBmaWxsZWQgd2l0aCB0aGUgY29udmVydGVkIHRleHQgZGF0YS4K
KyAgKiBAcGFyYW0gY2FwICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIGJ1ZmZlciBpbiBVQ2hhcnMu
CisgICogQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJh
Y2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiBAcmV0dXJuICAgICAgICBUaGUgbnVtYmVyIG9mIFVD
aGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZy4KKyAgKgorICAqIEBkcmFmdCBJQ1UgMy42CisgICov
CitVX0RSQUZUICBpbnQzMl90IFVfRVhQT1JUMgordWNzZGV0X2dldFVDaGFycyhjb25zdCBVQ2hh
cnNldE1hdGNoICp1Y3NtLAorICAgICAgICAgICAgICAgICBVQ2hhciAqYnVmLCBpbnQzMl90IGNh
cCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisKKy8qKgorICAqICBHZXQgYW4gaXRlcmF0b3Ig
b3ZlciB0aGUgc2V0IG9mIGFsbCBkZXRlY3RhYmxlIGNoYXJzZXRzIC0gCisgICogIG92ZXIgdGhl
IGNoYXJzZXRzIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjaGFyc2V0IGRldGVjdGlvbgorICAqICBz
ZXJ2aWNlLgorICAqCisgICogIFRoZSByZXR1cm5lZCBVRW51bWVyYXRpb24gcHJvdmlkZXMgYWNj
ZXNzIHRvIHRoZSBuYW1lcyBvZgorICAqICB0aGUgY2hhcnNldHMuCisgICoKKyAgKiAgVGhlIHN0
YXRlIG9mIHRoZSBDaGFyc2V0IGRldGVjdG9yIHRoYXQgaXMgcGFzc2VkIGluIGRvZXMgbm90Cisg
ICogIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24sIGJ1dCByZXF1aXJpbmcgYSB2
YWxpZCwgb3BlbgorICAqICBjaGFyc2V0IGRldGVjdG9yIGFzIGEgcGFyYW1ldGVyIGluc3VyZXMg
dGhhdCB0aGUgY2hhcnNldCBkZXRlY3Rpb24KKyAgKiAgc2VydmljZSBoYXMgYmVlbiBzYWZlbHkg
aW5pdGlhbGl6ZWQgYW5kIHRoYXQgdGhlIHJlcXVpcmVkIGRldGVjdGlvbgorICAqICBkYXRhIGlz
IGF2YWlsYWJsZS4KKyAgKgorICAqICBAcGFyYW0gdWNzZCBhIENoYXJzZXQgZGV0ZWN0b3IuCisg
ICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNr
IGluIHRoaXMgdmFyaWFibGUuCisgICogIEByZXR1cm4gYW4gaXRlcmF0b3IgcHJvdmlkaW5nIGFj
Y2VzcyB0byB0aGUgZGV0ZWN0YWJsZSBjaGFyc2V0IG5hbWVzLgorICAqICBAZHJhZnQgSUNVIDMu
NgorICAqLworCitVX0RSQUZUICBVRW51bWVyYXRpb24gKiBVX0VYUE9SVDIKK3Vjc2RldF9nZXRB
bGxEZXRlY3RhYmxlQ2hhcnNldHMoY29uc3QgVUNoYXJzZXREZXRlY3RvciAqdWNzZCwgIFVFcnJv
ckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgICogIFRlc3Qgd2hldGhlciBpbnB1dCBmaWx0ZXJp
bmcgaXMgZW5hYmxlZCBmb3IgdGhpcyBjaGFyc2V0IGRldGVjdG9yLgorICAqICBJbnB1dCBmaWx0
ZXJpbmcgcmVtb3ZlcyB0ZXh0IHRoYXQgYXBwZWFycyB0byBiZSBIVE1MIG9yIHhtbAorICAqICBt
YXJrdXAgZnJvbSB0aGUgaW5wdXQgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb2RlIHBhZ2UgZGV0ZWN0
aW9uCisgICogIGhldXJpc3RpY3MuCisgICoKKyAgKiAgQHBhcmFtIHVjc2QgIFRoZSBjaGFyc2V0
IGRldGVjdG9yIHRvIGNoZWNrLgorICAqICBAcmV0dXJuIFRSVUUgaWYgZmlsdGVyaW5nIGlzIGVu
YWJsZWQuCisgICogIEBkcmFmdCBJQ1UgMy40CisgICovCitVX0RSQUZUICBVQm9vbCBVX0VYUE9S
VDIKK3Vjc2RldF9pc0lucHV0RmlsdGVyRW5hYmxlZChjb25zdCBVQ2hhcnNldERldGVjdG9yICp1
Y3NkKTsKKworCisvKioKKyAqIEVuYWJsZSBmaWx0ZXJpbmcgb2YgaW5wdXQgdGV4dC4gSWYgZmls
dGVyaW5nIGlzIGVuYWJsZWQsCisgKiB0ZXh0IHdpdGhpbiBhbmdsZSBicmFja2V0cyAoIjwiIGFu
ZCAiPiIpIHdpbGwgYmUgcmVtb3ZlZAorICogYmVmb3JlIGRldGVjdGlvbiwgd2hpY2ggd2lsbCBy
ZW1vdmUgbW9zdCBIVE1MIG9yIHhtbCBtYXJrdXAuCisgKgorICogQHBhcmFtIHVjc2QgICB0aGUg
Y2hhcnNldCBkZXRlY3RvciB0byBiZSBtb2RpZmllZC4KKyAqIEBwYXJhbSBmaWx0ZXIgPGNvZGU+
dHJ1ZTwvY29kZT4gdG8gZW5hYmxlIGlucHV0IHRleHQgZmlsdGVyaW5nLgorICogQHJldHVybiBU
aGUgcHJldmlvdXMgc2V0dGluZy4KKyAqCisgKiBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZU
ICBVQm9vbCBVX0VYUE9SVDIKK3Vjc2RldF9lbmFibGVJbnB1dEZpbHRlcihVQ2hhcnNldERldGVj
dG9yICp1Y3NkLCBVQm9vbCBmaWx0ZXIpOworCisjZW5kaWYKKyNlbmRpZiAgIC8qIF9fVUNTREVU
X0ggKi8KKworCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MTQ0OSkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDYg
KzIyMCwxMSBAQCBzdGF0aWMgaW50IG51bVJlcXVlc3RzKERvY3VtZW50KiBkb2N1bWVuCiAgICAg
cmV0dXJuIGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdENvdW50KCk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBjYW5SZWZlclRvUGFyZW50RnJhbWVFbmNvZGluZyhjb25zdCBGcmFtZSog
ZnJhbWUsIGNvbnN0IEZyYW1lKiBwYXJlbnRGcmFtZSkgCit7CisgICAgcmV0dXJuIHBhcmVudEZy
YW1lICYmIHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nl
c3MoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworfQorCiBGcmFtZUxvYWRl
cjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAgLTk2NCwxMyAr
OTY5LDI0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICB9
CiAgICAgCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+
ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKLSAgICAgICAgaWYgKG1fZW5j
b2RpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zy
YW1lLT5zZXR0aW5ncygpKSB7CisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpjcmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLAorICAgICAgICAgICAgICAgIHNldHRp
bmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAorICAgICAgICAgICAgICAgIHNldHRpbmdz
LT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKICAgICAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFt
ZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50RnJh
bWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
cyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAg
ICBtX2RlY29kZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVu
Y29kaW5nKCksIFRleHRSZXNvdXJjZURlY29kZXI6OkRlZmF1bHRFbmNvZGluZyk7Ci0gICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBh
cmVudCBmcmFtZSBlbmNvZGluZyBvbmx5IGlmCisgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFu
ZCB0aGUgY3VycmVudCBmcmFtZXMgc2hhcmUgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAg
ICAgIC8vIFRPRE86IFdlIG1heSBjb25zaWRlciByZWxheGluZyB0aGlzIGxhdGVyIGZvciAncmVs
YXRpdmVseQorICAgICAgICAgICAgLy8gc2FmZScgZW5jb2RpbmdzICh0aGF0IGlzLCBlbmNvZGlu
Z3Mgb3RoZXIgdGhhbiBub24tQVNDSUkgN2JpdAorICAgICAgICAgICAgLy8gZW5jb2RpbmdzKS4g
CisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwg
cGFyZW50RnJhbWUpKQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0SGludERlY29kZXIo
cGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmRlY29kZXIoKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9u
c2VNSU1FVHlwZSwgU3RyaW5nKCkpOworICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2Zy
YW1lLT50cmVlKCktPnBhcmVudCgpOworICAgICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkg
JiYgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQor
ICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21QYXJl
bnRGcmFtZSk7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNv
ZGluZyhtX2VuY29kaW5nLAogICAgICAgICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVz
ZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKICAgICAgICAgfQpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQxNDQ5KQorKysgV2Vi
Q29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDggQEAKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZ0RldGVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKQEAgLTMyMCwxNCAr
MzIyLDE2IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dFJlc291cmNlRGVjb2RlcjoKICAgICBy
ZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VEZWNvZGVy
OjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRF
bmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJlc291cmNlRGVjb2Rlcjo6
VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5j
b2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rv
cikKICAgICA6IG1fY29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUobWltZVR5cGUpKQog
ICAgICwgbV9kZWNvZGVyKGRlZmF1bHRFbmNvZGluZyhtX2NvbnRlbnRUeXBlLCBzcGVjaWZpZWRE
ZWZhdWx0RW5jb2RpbmcpKQorICAgICwgbV9oaW50RGVjb2RlcigwKQogICAgICwgbV9zb3VyY2Uo
RGVmYXVsdEVuY29kaW5nKQogICAgICwgbV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9j
aGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0
KGZhbHNlKQogICAgICwgbV9zYXdFcnJvcihmYWxzZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0
ZWN0b3IodXNlc0VuY29kaW5nRGV0ZWN0b3IpCiB7CiB9CiAKQEAgLTQ0NSw3ICs0NDksNyBAQCB2
b2lkIFRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9yQk9NKGNvCiAKIGJvb2wgVGV4dFJlc291
cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4sIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKQogewotICAgIGlmIChtX3NvdXJjZSAhPSBEZWZh
dWx0RW5jb2RpbmcpIHsKKyAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVuY29kaW5nICYmIG1f
c291cmNlICE9IEVuY29kaW5nRnJvbVBhcmVudEZyYW1lKSB7CiAgICAgICAgIG1fY2hlY2tlZEZv
ckNTU0NoYXJzZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MjYs
NyArNTMwLDcgQEAgY29uc3QgaW50IGJ5dGVzVG9DaGVja1VuY29uZGl0aW9uYWxseSA9IAogCiBi
b29sIFRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpCiB7Ci0gICAgaWYgKG1f
c291cmNlICE9IERlZmF1bHRFbmNvZGluZykgeworICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0
RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpIHsKICAgICAg
ICAgbV9jaGVja2VkRm9ySGVhZENoYXJzZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC03NTMsNiArNzU3LDIxIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0
ZWN0SmFwYW5lc2UKICAgICB9CiB9CiAKKy8vIFdlIHVzZSB0aGUgZW5jb2RpbmcgZGV0ZWN0b3Ig
aW4gdHdvIGNhc2VzOgorLy8gICAxLiBFbmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5k
IG5vIG90aGVyIGVuY29kaW5nIHNvdXJjZSBpcworLy8gICAgICBhdmFpbGFibGUgKHRoYXQgaXMs
IGl0J3MgRGVmYXVsdEVuY29kaW5nKS4KKy8vICAgMi4gRW5jb2RpbmcgZGV0ZWN0b3IgaXMgdHVy
bmVkIE9OIGFuZCB0aGUgZW5jb2RpbmcgaXMgc2V0IHRvCisvLyAgICAgIHRoZSBlbmNvZGluZyBv
ZiB0aGUgcGFyZW50IGZyYW1lLCB3aGljaCBpcyBhbHNvIGF1dG8tZGV0ZWN0ZWQuCisvLyAgIE5v
dGUgdGhhdCBjb25kaXRpb24gIzIgaXMgTk9UIHNhdGlzZmllZCB1bmxlc3MgcGFyZW50LWNoaWxk
IGZyYW1lCisvLyAgIHJlbGF0aW9uc2hpcCBpcyBjb21wbGlhbnQgdG8gdGhlIHNhbWUtb3JpZ2lu
IHBvbGljeS4gSWYgdGhleSdyZSBmcm9tCisvLyAgIGRpZmZlcmVudCBkb21haW5zLCB8bV9zb3Vy
Y2V8IHdvdWxkIG5vdCBiZSBzZXQgdG8gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKy8vICAgaW4g
dGhlIGZpcnN0IHBsYWNlLiAKK2Jvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0Rl
dGVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IKKyAgICAg
ICAgJiYgKG1fc291cmNlID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2Rp
bmdGcm9tUGFyZW50RnJhbWUgJiYgbV9oaW50RGVjb2RlciAmJiBtX2hpbnREZWNvZGVyLT5tX3Nv
dXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykpOyAKK30KKwogU3RyaW5nIFRleHRSZXNvdXJj
ZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIGlm
ICghbV9jaGVja2VkRm9yQk9NKQpAQCAtNzY4LDEwICs3ODcsMjQgQEAgU3RyaW5nIFRleHRSZXNv
dXJjZURlY29kZXI6OmRlY29kZShjb25zdAogICAgICAgICBpZiAoIWNoZWNrRm9ySGVhZENoYXJz
ZXQoZGF0YSwgbGVuLCBtb3ZlZERhdGFUb0J1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gIiI7
CiAKLSAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgaWYgb3VyIGRlZmF1bHQgZW5jb2RpbmcgaXMg
b25lIG9mIHRoZSBKYXBhbmVzZSBvbmVzLgotICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0
byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRv
bmUgc29tZSBkZWNvZGluZy4KKyAgICAvLyBGSVhNRTogSXQgc2VlbXMgd3JvbmcgdG8gY2hhbmdl
IG91ciBlbmNvZGluZyBkb3duc3RyZWFtIGFmdGVyCisgICAgLy8gd2UgaGF2ZSBhbHJlYWR5IGRv
bmUgc29tZSBkZWNvZGluZy4gSG93ZXZlciwgaXQncyBub3QgcG9zc2libGUKKyAgICAvLyB0byBh
dm9pZCBpbiBhIHNlbnNlIGluIHR3byBjYXNlcyBiZWxvdyBiZWNhdXNlIHRyaWdnZXJpbmcgY29u
ZGl0aW9ucworICAgIC8vIGZvciBib3RoIGNhc2VzIGRlcGVuZCBvbiB0aGUgaW5mb3JtYXRpb24g
dGhhdCB3b24ndCBiZSBhdmFpbGFibGUKKyAgICAvLyB1bnRpbCB3ZSBkbyBwYXJ0aWFsIHJlYWQu
IAorICAgIC8vIFRoZSBmaXJzdCBjYXNlIGhhZCBiZXR0ZXIgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVy
IChzZWUgYnVnIDIxOTkwKQorICAgIC8vIG9yIGF0IGxlYXN0IGJlIG1hZGUgdG8gYmUgaW52b2tl
ZCBvbmx5IHdoZW4gdGhlIGVuY29kaW5nIGRldGVjdGlvbgorICAgIC8vIGlzIHR1cm5lZCBvbi4g
CisgICAgLy8gRG8gdGhlIGF1dG8tZGV0ZWN0IDEpIHVzaW5nIEphcGFuZXNlIGRldGVjdG9yIGlm
IG91ciBkZWZhdWx0IGVuY29kaW5nIGlzCisgICAgLy8gb25lIG9mIHRoZSBKYXBhbmVzZSBkZXRl
Y3RvciBvciAyKSB1c2luZyBkZXRlY3RUZXh0RW5jb2RpbmcgaWYgZW5jb2RpbmcKKyAgICAvLyBk
ZXRlY3Rpb24gaXMgdHVybmVkIG9uLgogICAgIGlmIChtX3NvdXJjZSAhPSBVc2VyQ2hvc2VuRW5j
b2RpbmcgJiYgbV9zb3VyY2UgIT0gQXV0b0RldGVjdGVkRW5jb2RpbmcgJiYgZW5jb2RpbmcoKS5p
c0phcGFuZXNlKCkpCiAgICAgICAgIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoZGF0YSwgbGVuKTsK
KyAgICBlbHNlIGlmIChzaG91bGRBdXRvRGV0ZWN0KCkpIHsKKyAgICAgICAgVGV4dEVuY29kaW5n
IGRldGVjdGVkRW5jb2Rpbmc7CisgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcoZGF0YSwg
bGVuLCBoaW50RW5jb2RpbmdOYW1lKCksICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAg
IHNldEVuY29kaW5nKGRldGVjdGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAg
IH0KIAogICAgIEFTU0VSVChlbmNvZGluZygpLmlzVmFsaWQoKSk7CiAKQEAgLTc5MSw2ICs4MjQs
MTcgQEAgU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAogCiBTdHJpbmcg
VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2goKQogeworICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVu
dGlmeSB0aGUgZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkgbG9h
ZGVkLAorICAgLy8gd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRp
dGlvbnMgZm9yIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVkLgorICAgIGlmIChtX2J1ZmZlci5z
aXplKCkKKyAgICAgICAgJiYgKCghbV9jaGVja2VkRm9ySGVhZENoYXJzZXQgJiYgKG1fY29udGVu
dFR5cGUgPT0gSFRNTCB8fCBtX2NvbnRlbnRUeXBlID09IFhNTCkpIHx8ICghbV9jaGVja2VkRm9y
Q1NTQ2hhcnNldCAmJiAobV9jb250ZW50VHlwZSA9PSBDU1MpKSkKKyAgICAgICAgJiYgc2hvdWxk
QXV0b0RldGVjdCgpKSB7CisgICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRFbmNvZGluZzsK
KyAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIuZGF0YSgpLCBtX2J1ZmZl
ci5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRFbmNvZGluZ05h
bWUoKSwgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAgICAgICAgIHNldEVuY29kaW5nKGRldGVj
dGVkRW5jb2RpbmcsIEF1dG9EZXRlY3RlZEVuY29kaW5nKTsKKyAgICB9CisKICAgICBTdHJpbmcg
cmVzdWx0ID0gbV9kZWNvZGVyLmRlY29kZShtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVyLnNpemUo
KSwgdHJ1ZSwgbV9jb250ZW50VHlwZSA9PSBYTUwsIG1fc2F3RXJyb3IpOwogICAgIG1fYnVmZmVy
LmNsZWFyKCk7CiAgICAgbV9kZWNvZGVyLnJlc2V0KG1fZGVjb2Rlci5lbmNvZGluZygpKTsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHJldmlzaW9uIDQxNDQ5KQorKysg
V2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwyNSArMzYsMzIgQEAgcHVibGljOgogICAgICAgICBFbmNvZGluZ0Zyb21NZXRhVGFnLAogICAg
ICAgICBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0LAogICAgICAgICBFbmNvZGluZ0Zyb21IVFRQSGVh
ZGVyLAotICAgICAgICBVc2VyQ2hvc2VuRW5jb2RpbmcKKyAgICAgICAgVXNlckNob3NlbkVuY29k
aW5nLAorICAgICAgICBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZQogICAgIH07CiAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2Rp
bmcoKSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2Rp
bmcgPSBUZXh0RW5jb2RpbmcoKSwgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvciA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1p
bWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGlu
Z0RldGVjdG9yKSk7CiAgICAgfQogICAgIH5UZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKICAgICB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IFRleHRFbmNvZGluZyYsIEVuY29kaW5nU291cmNlKTsKICAg
ICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVy
LmVuY29kaW5nKCk7IH0KIAorICAgIHZvaWQgc2V0SGludERlY29kZXIoY29uc3QgVGV4dFJlc291
cmNlRGVjb2RlciogaGludERlY29kZXIpCisgICAgeworICAgICAgICBtX2hpbnREZWNvZGVyID0g
aGludERlY29kZXI7CisgICAgfQorICAgIAogICAgIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAgICAgU3RyaW5nIGZsdXNoKCk7Ci0gICAgCisKICAgICBi
b29sIHNhd0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRlOgot
ICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4
dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcpOworICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2Rpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsKIAog
ICAgIGVudW0gQ29udGVudFR5cGUgeyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBs
YWluVGV4dCBpcyBlcXVpdmFsZW50IHRvIGRpcmVjdGx5IHVzaW5nIFRleHREZWNvZGVyLgogICAg
IHN0YXRpYyBDb250ZW50VHlwZSBkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKQEAgLTY0LDE1ICs3MSwyMyBAQCBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tGb3JD
U1NDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsK
ICAgICBib29sIGNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCYg
bW92ZWREYXRhVG9CdWZmZXIpOwogICAgIHZvaWQgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhjb25z
dCBjaGFyKiwgc2l6ZV90KTsKKyAgICBib29sIHNob3VsZEF1dG9EZXRlY3QoKSBjb25zdDsgCisK
KyAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2hpbnREZWNvZGVyID8gbV9oaW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCkg
OiAwOworICAgIH0KIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dERl
Y29kZXIgbV9kZWNvZGVyOworICAgIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIG1faGludERl
Y29kZXI7CiAgICAgRW5jb2RpbmdTb3VyY2UgbV9zb3VyY2U7CiAgICAgVmVjdG9yPGNoYXI+IG1f
YnVmZmVyOwogICAgIGJvb2wgbV9jaGVja2VkRm9yQk9NOwogICAgIGJvb2wgbV9jaGVja2VkRm9y
Q1NTQ2hhcnNldDsKICAgICBib29sIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0OwogICAgIGJvb2wg
bV9zYXdFcnJvcjsKKyAgICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDQxNDQ5KQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3Mo
UGFnZSogcGFnZSkKICAgICAsIG1fc2hvdWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzKGZhbHNlKQog
ICAgICwgbV96b29tc1RleHRPbmx5KGZhbHNlKQogICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJ
blN0cmljdE1vZGUodHJ1ZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpCiAg
ICAgLCBtX21heGltdW1EZWNvZGVkSW1hZ2VTaXplKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpCiAgICAgLCBtX2FsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGZhbHNlKQogewpA
QCAtNDE4LDYgKzQxOSwxMSBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG91bGRQYWludE5hdGl2ZUNv
bnRyCiB9CiAjZW5kaWYKIAordm9pZCBTZXR0aW5nczo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3Io
Ym9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikKK3sKKyAgICBtX3VzZXNFbmNvZGluZ0RldGVjdG9y
ID0gdXNlc0VuY29kaW5nRGV0ZWN0b3I7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldEFsbG93U2Ny
aXB0c1RvQ2xvc2VXaW5kb3dzKGJvb2wgYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MpCiB7CiAg
ICAgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyA9IGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5k
b3dzOwpJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDQxNDQ5KQorKysgV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNv
bnN0IFN0cmluZyYpOwogICAgICAgICBjb25zdCBTdHJpbmcmIGRlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0VGV4dEVuY29kaW5nTmFtZTsgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBzZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcihib29sKTsKKyAgICAgICAg
Ym9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0VuY29kaW5n
RGV0ZWN0b3I7IH0KIAogICAgICAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29u
c3QgS1VSTCYpOwogICAgICAgICBjb25zdCBLVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOyB9CkBAIC0yNjAsNiArMjYz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fc2hvdWxkUGFpbnRDdXN0
b21TY3JvbGxiYXJzIDogMTsKICAgICAgICAgYm9vbCBtX3pvb21zVGV4dE9ubHkgOiAxOwogICAg
ICAgICBib29sIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAgICAg
Ym9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yIDogMTsKICAgICAgICAgc2l6ZV90IG1fbWF4aW11
bURlY29kZWRJbWFnZVNpemU7CiAgICAgICAgIGJvb2wgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2lu
ZG93cyA6IDE7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCShy
ZXZpc2lvbiA0MTQ0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTcgKzEyNywyMSBAQCB2b2lkIFRleHRDb2RlY0lDVTo6
cmVnaXN0ZXJFeHRlbmRlZEVuY29kCiAgICAgICAgICAgICB9CiAgICAgfQogCisjaWYgRU5BQkxF
KE1BQ19FTkNPRElORykKICAgICAvLyBBZGRpdGlvbmFsIGFsaWFzZXMuCiAgICAgLy8gVGhlc2Ug
YXJlIHByZXNlbnQgaW4gbW9kZXJuIHZlcnNpb25zIG9mIElDVSwgYnV0IG5vdCBpbiBJQ1UgMy4y
IChzaGlwcGVkIHdpdGggTWFjIE9TIFggMTAuNCkuCiAgICAgcmVnaXN0cmFyKCJtYWNyb21hbiIs
ICJtYWNpbnRvc2giKTsKICAgICByZWdpc3RyYXIoIm1hY2N5cmlsbGljIiwgIngtbWFjLWN5cmls
bGljIik7CisjZW5kaWYKIAogICAgIC8vIEFkZGl0aW9uYWwgYWxpYXNlcyB0aGF0IGhpc3Rvcmlj
YWxseSB3ZXJlIHByZXNlbnQgaW4gdGhlIGVuY29kaW5nCiAgICAgLy8gdGFibGUgaW4gV2ViS2l0
IG9uIE1hY2ludG9zaCB0aGF0IGRvbid0IHNlZW0gdG8gYmUgcHJlc2VudCBpbiBJQ1UuCiAgICAg
Ly8gUGVyaGFwcyB3ZSBjYW4gcHJvdmUgdGhlc2UgYXJlIG5vdCB1c2VkIG9uIHRoZSB3ZWIgYW5k
IHJlbW92ZSB0aGVtLgogICAgIC8vIE9yIHBlcmhhcHMgd2UgY2FuIGdldCB0aGVtIGFkZGVkIHRv
IElDVS4KKyNpZiBFTkFCTEUoTUFDX0VOQ09ESU5HKQogICAgIHJlZ2lzdHJhcigieG1hY3JvbWFu
IiwgIm1hY2ludG9zaCIpOwogICAgIHJlZ2lzdHJhcigieG1hY3VrcmFpbmlhbiIsICJ4LW1hYy1j
eXJpbGxpYyIpOworI2VuZGlmCiAgICAgcmVnaXN0cmFyKCJjbmJpZzUiLCAiQmlnNSIpOwogICAg
IHJlZ2lzdHJhcigieHhiaWc1IiwgIkJpZzUiKTsKICAgICByZWdpc3RyYXIoImNuZ2IiLCAiR0JL
Iik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRl
Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0RW5jb2RpbmdE
ZXRlY3Rvcl9oCisjZGVmaW5lIFRleHRFbmNvZGluZ0RldGVjdG9yX2gKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgVGV4dEVuY29kaW5nOworCisgICAgLy8gR2l2ZW4gYSBzZXF1
ZW5jZSBvZiBieXRlcyBpbiB8ZGF0YXwgb2YgbGVuZ3RoIHxsZW58IGFuZCBhbiBvcHRpb25hbAor
ICAgIC8vIGhpbnRFbmNvZGluZ05hbWUsIGRldGVjdCB0aGUgbW9zdCBsaWtlbHkgY2hhcmFjdGVy
IGVuY29kaW5nLiAKKyAgICAvLyBUaGUgd2F5IGhpbnRFbmNvZGluZ05hbWUgaXMgdXNlZCBpcyB1
cCB0byBhbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAvLyBDdXJyZW50bHksIHRoZSBvbmx5IGNhbGxl
ciBzZXRzIGl0IHRvIHRoZSBwYXJlbnQgZnJhbWUgZW5jb2RpbmcuCisgICAgYm9vbCBkZXRlY3RU
ZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHRFbmNvZGluZyogZGV0ZWN0ZWRFbmNvZGluZyk7CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0RW5jb2RpbmdEZXRlY3Rvci5oIgorCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisjaW5jbHVkZSAidW5pY29kZS91Y252LmgiCisjaW5jbHVk
ZSAidW5pY29kZS91Y3NkZXQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nKiBkZXRlY3RlZEVuY29kaW5nKQoreworICAg
ICpkZXRlY3RlZEVuY29kaW5nID0gVGV4dEVuY29kaW5nKCk7CisjaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKKyAgICAvLyBUaWdlciBjYW1lIHdpdGggSUNVIDMuMiBhbmQgZG9lcyBub3QgaGF2ZSB0
aGUgZW5jb2RpbmcgZGV0ZWN0b3IuCisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNF
RF9QQVJBTShsZW4pOworICAgIFVOVVNFRF9QQVJBTShoaW50RW5jb2RpbmdOYW1lKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIGludCBtYXRjaGVzQ291bnQgPSAwOyAKKyAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBVQ2hhcnNldERldGVjdG9yKiBkZXRl
Y3RvciA9IHVjc2RldF9vcGVuKCZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVjc2RldF9lbmFibGVJbnB1dEZpbHRlcihkZXRl
Y3RvciwgdHJ1ZSk7CisgICAgdWNzZGV0X3NldFRleHQoZGV0ZWN0b3IsIGRhdGEsIHN0YXRpY19j
YXN0PGludDMyX3Q+KGxlbiksICZzdGF0dXMpOyAKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBBIGZldyB0aGluZ3Mgd2Ug
Y2FuIGRvIG90aGVyIHRoYW4gaW1wcm92aW5nCisgICAgLy8gdGhlIElDVSBkZXRlY3RvciBpdHNl
bGYuIAorICAgIC8vIDEuIFVzZSB1Y3NkZXRfZGV0ZWN0QWxsIGFuZCBwaWNrIHRoZSBtb3N0IGxp
a2VseSBvbmUgZ2l2ZW4KKyAgICAvLyAidGhlIGNvbnRleHQiIChwYXJlbnQtZW5jb2RpbmcsIHJl
ZmVycmVyIGVuY29kaW5nLCBldGMpLgorICAgIC8vIDIuICdFbXVsYXRlJyBGaXJlZm94L0lFJ3Mg
bm9uLVVuaXZlcnNhbCBkZXRlY3RvcnMgKGUuZy4KKyAgICAvLyBDaGluZXNlLCBKYXBhbmVzZSwg
UnVzc2lhbiwgS29yZWFuIGFuZCBIZWJyZXcpIGJ5IHBpY2tpbmcgdGhlIAorICAgIC8vIGVuY29k
aW5nIHdpdGggYSBoaWdoZXN0IGNvbmZpZGVuY2UgYW1vbmcgdGhlIGRldGV0Y3Rvci1zcGVjaWZp
YworICAgIC8vIGxpbWl0ZWQgc2V0IG9mIGNhbmRpZGF0ZSBlbmNvZGluZ3MuCisgICAgLy8gQmVs
b3cgaXMgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHdoYXQn
cyBvdXRsaW5lZAorICAgIC8vIGFib3ZlLgorICAgIGNvbnN0IFVDaGFyc2V0TWF0Y2gqKiBtYXRj
aGVzID0gdWNzZGV0X2RldGVjdEFsbChkZXRlY3RvciwgJm1hdGNoZXNDb3VudCwgJnN0YXR1cyk7
CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgIHVjc2RldF9jbG9zZShkZXRl
Y3Rvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBl
bmNvZGluZyA9IDA7CisgICAgaWYgKGhpbnRFbmNvZGluZ05hbWUpIHsKKyAgICAgICAgVGV4dEVu
Y29kaW5nIGhpbnRFbmNvZGluZyhoaW50RW5jb2RpbmdOYW1lKTsKKyAgICAgICAgLy8gMTAgaXMg
dGhlIG1pbmltdW0gY29uZmlkZW5jZSB2YWx1ZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGVwb2lu
dAorICAgICAgICAvLyBhbGxvY2F0aW9uIGluIGEgZ2l2ZW4gZW5jb2RpbmcuIFRoZSBzaXplIG9m
IGEgY2h1bmsgcGFzc2VkIHRvCisgICAgICAgIC8vIHVzIHZhcmllcyBldmVuIGZvciB0aGUgc2Ft
ZSBodG1sIGZpbGUgKGFwcGFyZW50bHkgZGVwZW5kaW5nIG9uIAorICAgICAgICAvLyB0aGUgbmV0
d29yayBsb2FkKS4gV2hlbiB3ZSdyZSBnaXZlbiBhIHJhdGhlciBzaG9ydCBjaHVuaywgd2UgCisg
ICAgICAgIC8vIGRvbid0IGhhdmUgYSBzdWZmaWNpZW50bHkgcmVsaWFibGUgc2lnbmFsIG90aGVy
IHRoYW4gdGhlIGZhY3QgdGhhdAorICAgICAgICAvLyB0aGUgY2h1bmsgaXMgY29uc2lzdGVudCB3
aXRoIGEgc2V0IG9mIGVuY29kaW5ncy4gU28sIGluc3RlYWQgb2YKKyAgICAgICAgLy8gc2V0dGlu
ZyBhbiBhcmJpdHJhcnkgdGhyZXNob2xkLCB3ZSBoYXZlIHRvIHNjYW4gYWxsIHRoZSBlbmNvZGlu
Z3MKKyAgICAgICAgLy8gY29uc2lzdGVudCB3aXRoIHRoZSBkYXRhLiAgCisgICAgICAgIGNvbnN0
IGludDMyX3Qga1RocmVzb2xkID0gMTA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF0
Y2hlc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGludDMyX3QgY29uZmlkZW5jZSA9IHVjc2Rl
dF9nZXRDb25maWRlbmNlKG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAgICAgaWYgKFVf
RkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGNvbmZpZGVuY2UgPCBrVGhyZXNvbGQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBtYXRjaEVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2hl
c1tpXSwgJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAg
ICAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVGV4dEVuY29kaW5nKG1hdGNo
RW5jb2RpbmcpID09IGhpbnRFbmNvZGluZykgeworICAgICAgICAgICAgICAgIGVuY29kaW5nID0g
aGludEVuY29kaW5nTmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAvLyBJZiBubyBtYXRjaCBpcyBmb3VuZCBzbyBmYXIsIGp1
c3QgcGljayB0aGUgdG9wIG1hdGNoLiAKKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4sIHNheSwgd2hl
biBhIHBhcmVudCBmcmFtZSBpbiBFVUMtSlAgcmVmZXJzIHRvCisgICAgLy8gYSBjaGlsZCBmcmFt
ZSBpbiBTaGlmdF9KSVMgYW5kIGJvdGggZnJhbWVzIGRvIE5PVCBzcGVjaWZ5IHRoZSBlbmNvZGlu
ZworICAgIC8vIG1ha2luZyB1cyByZXNvcnQgdG8gYXV0by1kZXRlY3Rpb24gKHdoZW4gaXQgSVMg
dHVybmVkIG9uKS4KKyAgICBpZiAoIWVuY29kaW5nICYmIG1hdGNoZXNDb3VudCA+IDApCisgICAg
ICAgIGVuY29kaW5nID0gdWNzZGV0X2dldE5hbWUobWF0Y2hlc1swXSwgJnN0YXR1cyk7CisgICAg
aWYgKFVfU1VDQ0VTUyhzdGF0dXMpKSB7CisgICAgICAgICpkZXRlY3RlZEVuY29kaW5nID0gVGV4
dEVuY29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAgICAKKyAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3Ip
OworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRleHRFbmNvZGluZ0RldGVjdG9yLmgiCisKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGRldGVjdFRleHRFbmNvZGluZyhjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogaGludEVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHRFbmNvZGlu
ZyogZGV0ZWN0ZWRFbmNvZGluZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZGF0YSkKKyAgICBVTlVT
RURfUEFSQU0obGVuKQorICAgIFVOVVNFRF9QQVJBTShoaW50RW5jb2RpbmdOYW1lKQorCisgICAg
KmRldGVjdGVkRW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MTQ0OSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDMtMDUgIEp1bmdzaGlrIFNoaW4g
IDxqc2hpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIFdlYlByZWZlcmVuY2VzIGZvciBlbmNvZGluZyBhdXRvZGV0ZWN0
aW9uIG9uIE1hYy4KKyAgCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dl
YlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgdXNl
c0VuY29kaW5nRGV0ZWN0b3JdKToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0VXNlc0Vu
Y29kaW5nRGV0ZWN0b3I6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X3ByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbjpdKToKKwogMjAwOS0wMy0wNCAgTWFyayBS
b3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oCShyZXZpc2lvbiA0MTQ0OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBX
ZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZvbnRTaXpl
IgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdFRleHRFbmNvZGlu
Z05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUiCisjZGVm
aW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXNF
bmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRVc2VyU3R5bGVTaGVldEVuYWJsZWRQcmVm
ZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSIKICNk
ZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXkgQCJXZWJLaXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJXZWJLaXRTaG91bGRQcmludEJhY2tncm91
bmRzUHJlZmVyZW5jZUtleSIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0J
KHJldmlzaW9uIDQxNDQ5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwg
Y2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBAIjE2IiwgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERlZmF1bHRGb250U2l6ZVByZWZlcmVuY2VLZXksCiAgICAgICAgIEAiMTMiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemVQcmVmZXJl
bmNlS2V5LAogICAgICAgICBAIklTTy04ODU5LTEiLCAgICAgICAgICAgICAgICAgIFdlYktpdERl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSwKKyAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VL
ZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VXNlclN0
eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCIiLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRTaG91bGRQcmlu
dEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSwKQEAgLTg2NCw2ICs4NjUsMTYgQEAgc3RhdGljIFdl
YkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIF9wcml2YXRlLT5hdXRvbWF0aWNh
bGx5RGV0ZWN0c0NhY2hlTW9kZWwgPSBhdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWw7CiB9
CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3IKK3sKKyAgICByZXR1cm4gW3NlbGYgX2Jv
b2xWYWx1ZUZvcktleTogV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQcmVmZXJlbmNlS2V5XTsK
K30KKworLSAodm9pZClzZXRVc2VzRW5jb2RpbmdEZXRlY3RvcjooQk9PTClmbGFnCit7CisgICAg
W3NlbGYgX3NldEJvb2xWYWx1ZTogZmxhZyBmb3JLZXk6IFdlYktpdFVzZXNFbmNvZGluZ0RldGVj
dG9yUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKEJPT0wpaXNXZWJTZWN1cml0eUVuYWJsZWQKIHsK
ICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0V2ViU2VjdXJpdHlFbmFi
bGVkUHJlZmVyZW5jZUtleV07CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MTQ0OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCBleHRl
cm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vCiAtIChCT09MKWFwcGxpY2F0aW9u
Q2hyb21lTW9kZUVuYWJsZWQ7CiAtICh2b2lkKXNldEFwcGxpY2F0aW9uQ2hyb21lTW9kZUVuYWJs
ZWQ6KEJPT0wpZmxhZzsKIAorLSAoQk9PTCl1c2VzRW5jb2RpbmdEZXRlY3RvcjsKKy0gKHZvaWQp
c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxhZzsKKwogLSAoQk9PTClyZXNwZWN0U3Rh
bmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOwogLSAodm9pZClzZXRSZXNwZWN0U3RhbmRhcmRTdHls
ZUtleUVxdWl2YWxlbnRzOihCT09MKWZsYWc7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShy
ZXZpc2lvbiA0MTQ0OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzA5LDYgKzEzMDksNyBAQCBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXpl
QXBwbGljYXRpb25DCiAgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKFtwcmVm
ZXJlbmNlcyBkZWZhdWx0Rml4ZWRGb250U2l6ZV0pOwogICAgIHNldHRpbmdzLT5zZXREZWZhdWx0
Rm9udFNpemUoW3ByZWZlcmVuY2VzIGRlZmF1bHRGb250U2l6ZV0pOwogICAgIHNldHRpbmdzLT5z
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShbcHJlZmVyZW5jZXMgZGVmYXVsdFRleHRFbmNvZGlu
Z05hbWVdKTsKKyAgICBzZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoW3ByZWZlcmVu
Y2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk7CiAgICAgc2V0dGluZ3MtPnNldEZhbnRhc3lGb250
RmFtaWx5KFtwcmVmZXJlbmNlcyBmYW50YXN5Rm9udEZhbWlseV0pOwogICAgIHNldHRpbmdzLT5z
ZXRGaXhlZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZpeGVkRm9udEZhbWlseV0pOwogICAgIHNl
dHRpbmdzLT5zZXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKFtwcmVmZXJlbmNlcyBfZm9yY2VG
VFBEaXJlY3RvcnlMaXN0aW5nc10pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28869</attachid>
            <date>2009-03-23 14:51:45 -0700</date>
            <delta_ts>2009-03-24 12:25:11 -0700</delta_ts>
            <desc>upated patch</desc>
            <filename>16482.patch.6e</filename>
            <type>text/plain</type>
            <size>52886</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDMtMjMgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIGVuY29kaW5nIGRldGVjdG9yICdob29rJyB0byBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3RvciogdG8gcGxhdGZvcm0vdGV4dC4gQ3VycmVu
dGx5LAorICAgICAgICAgICB0aGUgb25seSBpbXBsZW1lbnRhdGlvbiB1c2VzIElDVS4gU3R1YiBp
cyBhZGRlZCBmb3IgCisgICAgICAgICAgIHBvcnRzIHRoYXQgZG8gbm90IHVzZSBJQ1UgYW5kIGEg
YnVpbGQgb24gVGlnZXIuIE1hYyBPUyAKKyAgICAgICAgICAgVGlnZXIgY29tZXMgd2l0aCBJQ1Ug
My4yIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBkZXRlY3Rvci4KKyAgICAgICAgIC0g
YWRkIHVjc2RldC5oIHRvIGljdS91bmljb2RlIGZvciBwb3J0cyB1c2luZyBJQ1UuCisKKyAgICAg
ICAgTGF5b3V0IHRlc3RzIHdpbGwgYmUgYWRkZWQgb25jZSBidWcgMjA1MzQgaXMgZml4ZWQgYW5k
IGEgV2ViUHJlZmVyZW5jZQorICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBpbiB0ZXN0X3NoZWxs
LiBXaXRoIFVzZXNFbmNvZGluZ0RldGVjdG9yIG9mZiwgdGhlcmUKKyAgICAgICAgaXMgbm8gY2hh
bmdlIHRvIHRlc3QuIAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZS5iYXNlLmV4cAorICAgICAgICAqIGljdS91bmljb2RlL3Vjc2RldC5oCisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp3cml0ZSk6IHR1cm4gb24vb2ZmIGVuY29kaW5nIGRldGVjdG9yIGRlcGVuZGluZyBvbiBTZXR0
aW5ncyBhbmQgc2V0IGhpbnREZWNvZGVyIG9mIFRleHRSZXNvdXJjZURlY29kZXIgdG8gdGhlIHBh
cmVudCBmcmFtZSBkZWNvZGVyIGlmIG5lY2Vzc2FyeSBhbmQgdGhlIHNlY3VyaXR5IHBvbGljeSBh
bGxvd3MgcmVmZXJpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBkZWNvZGVyLgorICAgICAgICAqIGxv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNv
dXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KTogYWRkIGNoZWNrIGZvciBFbmNv
ZGluZ0Zyb21QYXJlbnRGcmFtZQorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rl
cjo6Y2hlY2tGb3JIZWFkQ2hhcnNldCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVz
b3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
ZXNvdXJjZURlY29kZXI6OmRlY29kZSk6IGNhbGwgZW5jb2RpbmcgZGV0ZWN0b3IgaWYgc2hvdWxk
QXV0b0RldGVjdCByZXR1cm5zIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpmbHVzaCk6IGlmIGVuY29kaW5nIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IG5vdywgY2Fs
bCBlbmNvZGluZyBkZXRlY3RvciBpZiBzaG91bGRBdXRvRGV0ZWN0IHJldHVybnMgdHJ1ZS4KKyAg
ICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJlc291cmNlRGVjb2Rlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
ZXRIaW50RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6aGludEVuY29k
aW5nTmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6IGFkZCBtX3VzZXNFbmNvZGlu
Z0RldGVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKToKKyAgICAgICAg
KiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6dXNlc0VuY29k
aW5nRGV0ZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rv
cklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToKKwogMjAwOS0wMy0y
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQxOTExKQorKysgV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQ5NCw2ICsxNDk0LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlv
bi5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdSZWdpc3RyeS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdp
c3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAgXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNv
bnRyb2xsZXI5c2VsZWN0CiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXJDMUVQTlNf
NUZyYW1lRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjVmbHVzaEV2CiBfX1pO
N1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVjb2RlRVBLY20KLV9fWk43V2ViQ29yZTE5
VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEyVGV4dEVuY29kaW5nRQor
X19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOU182U3RyaW5nRVJLTlNfMTJU
ZXh0RW5jb2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19a
TjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
RXgKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyMTZjbGVhckNvbnRleHRNZW51
RXYKQEAgLTU5OSw2ICs1OTksNyBAQCBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNldFNhbnNTZXJp
ZkZvbnRGCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNldFNob3dzVVJMc0luVG9vbFRpcHNFYgog
X19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXREZWZhdWx0Rml4ZWRGb250U2l6ZUVpCiBfX1pON1dl
YkNvcmU4U2V0dGluZ3MyM3NldEVkaXRhYmxlTGlua0JlaGF2aW9yRU5TXzIwRWRpdGFibGVMaW5r
QmVoYXZpb3JFCitfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldFVzZXNFbmNvZGluZ0RldGVjdG9y
RWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0QXBwbGljYXRpb25DaHJvbWVNb2RlRWIKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlRWIKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZEViCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTYyLDYg
Kzk2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKKyAgICBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwIFwKICAgICBw
bGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuc2Nv
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZpc2lvbiA0MTkxMSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtODM5LDYgKzgzOSw3
IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCcsCisgICAgJ3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwJywKICAgICAncGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJl
YW0uY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwJywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
CSh3b3JraW5nIGNvcHkpCkBAIC03NzksNiArNzc5LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAogICAg
ICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKKyAgICAgICAgcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNw
cAogICAgICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY3NTcsNiArNjc1
NywxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQxOTExKQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQzMDEsNiArNDMwMSw4IEBACiAJCUMwOTE1ODhFMERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMDkxNTg4ODBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIuY3BwICovOyB9OwogCQlDMDkxNTg4RjBEQjQyMDkyMDBFNTVBRjQgLyog
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMwOTE1ODg5MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlci5oICovOyB9OwogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyog
SlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3Bw
ICovOyB9OworCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAq
LzsgfTsKKwkJQzEwNURBNjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2
MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKIAkJQzZE
NzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgy
RTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFF
NDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEw
MDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OwogCQlEMDVDRUQy
OTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwpAQCAtOTE1MSw2ICs5MTUzLDggQEAK
IAkJQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzA5MTU4ODkw
REI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBK
U0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURB
NjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURBNjMwRjNBQTZCODAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0
QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzMyLDYg
KzEzMzM2LDggQEAKIAkJCQlCMkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERpcmVjdGlv
bi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3Bw
ICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCAqLywK
KwkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAq
LywKKwkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJ
Q1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RBMUEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRT
dHJlYW0uY3BwICovLApAQCAtMTY3MDIsNiArMTY3MDgsNyBAQAogCQkJCUIyQzNEQTQ1MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY5Mzgw
MjBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkMzREE0NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rp
bmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzQTE0MzAwQjdEMTg4NjAwQTUzRkZE
IC8qIFRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTgwOTlFNjQ5MjAwNTZF
NTgxIC8qIFRleHRHcmFudWxhcml0eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODczMiw2ICsxODcz
OSw3IEBACiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY5MzgwMTBBMTExMDBBMDBDMTI3RkUg
LyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzEwNURBNjIw
RjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFCMDk5RTY0OTIwMDU2RTU4MSAv
KiBUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2ljdS91bmlj
b2RlL3Vjc2RldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAo
QykgMjAwNS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiAgIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAqICAgZmlsZSBuYW1lOiAgdWNzZGV0LmgKKyAqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyAq
ICAgaW5kZW50YXRpb246NAorICoKKyAqICAgY3JlYXRlZCBvbjogMjAwNUF1ZzA0CisgKiAgIGNy
ZWF0ZWQgYnk6IEFuZHkgSGVuaW5nZXIKKyAqCisgKiAgIElDVSBDaGFyYWN0ZXIgU2V0IERldGVj
dGlvbiwgQVBJIGZvciBDCisgKgorICogICBEcmFmdCB2ZXJzaW9uIDE4IE9jdCAyMDA1CisgKgor
ICovCisKKyNpZm5kZWYgX19VQ1NERVRfSAorI2RlZmluZSBfX1VDU0RFVF9ICisKKyNpbmNsdWRl
ICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgorI2luY2x1
ZGUgInVuaWNvZGUvdWVudW0uaCIKKworLyoqCisgKiBcZmlsZSAKKyAqIFxicmllZiBDIEFQSTog
Q2hhcnNldCBEZXRlY3Rpb24gQVBJCisgKgorICogVGhpcyBBUEkgcHJvdmlkZXMgYSBmYWNpbGl0
eSBmb3IgZGV0ZWN0aW5nIHRoZQorICogY2hhcnNldCBvciBlbmNvZGluZyBvZiBjaGFyYWN0ZXIg
ZGF0YSBpbiBhbiB1bmtub3duIHRleHQgZm9ybWF0LgorICogVGhlIGlucHV0IGRhdGEgY2FuIGJl
IGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgKiA8cD4KKyAqIENoYXJhY3RlciBzZXQgZGV0ZWN0
aW9uIGlzIGF0IGJlc3QgYW4gaW1wcmVjaXNlIG9wZXJhdGlvbi4gIFRoZSBkZXRlY3Rpb24KKyAq
IHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGlkZW50aWZ5IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBt
YXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9mIHRoZSBieXRlIGRhdGEsIGJ1dCB0aGUg
cHJvY2VzcyBpcyBwYXJ0bHkgc3RhdGlzdGljYWwgaW4gbmF0dXJlLCBhbmQKKyAqIHRoZSByZXN1
bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgY29ycmVjdC4KKyAqIDxwPgor
ICogRm9yIGJlc3QgYWNjdXJhY3kgaW4gY2hhcnNldCBkZXRlY3Rpb24sIHRoZSBpbnB1dCBkYXRh
IHNob3VsZCBiZSBwcmltYXJpbHkKKyAqIGluIGEgc2luZ2xlIGxhbmd1YWdlLCBhbmQgYSBtaW5p
bXVtIG9mIGEgZmV3IGh1bmRyZWQgYnl0ZXMgd29ydGggb2YgcGxhaW4gdGV4dAorICogaW4gdGhl
IGxhbmd1YWdlIGFyZSBuZWVkZWQuICBUaGUgZGV0ZWN0aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0
IHRvCisgKiBpZ25vcmUgaHRtbCBvciB4bWwgc3R5bGUgbWFya3VwIHRoYXQgY291bGQgb3RoZXJ3
aXNlIG9ic2N1cmUgdGhlIGNvbnRlbnQuCisgKi8KKyAKKworc3RydWN0IFVDaGFyc2V0RGV0ZWN0
b3I7CisvKioKKyAgKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgY2hhcnNldCBkZXRlY3Rvcgor
ICAqIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVmIHN0cnVjdCBVQ2hhcnNldERldGVjdG9y
IFVDaGFyc2V0RGV0ZWN0b3I7CisKK3N0cnVjdCBVQ2hhcnNldE1hdGNoOworLyoqCisgICogIE9w
YXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgbWF0Y2ggdGhhdCB3YXMgaWRlbnRpZmllZAor
ICAqICBmcm9tIGEgY2hhcnNldCBkZXRlY3Rpb24gb3BlcmF0aW9uLgorICAqICBAZHJhZnQgSUNV
IDMuNgorICAqLwordHlwZWRlZiBzdHJ1Y3QgVUNoYXJzZXRNYXRjaCBVQ2hhcnNldE1hdGNoOwor
CisvKioKKyAgKiAgT3BlbiBhIGNoYXJzZXQgZGV0ZWN0b3IuCisgICoKKyAgKiAgQHBhcmFtIHN0
YXR1cyBBbnkgZXJyb3IgY29uZGl0aW9ucyBvY2N1cnJpbmcgZHVyaW5nIHRoZSBvcGVuCisgICog
ICAgICAgICAgICAgICAgb3BlcmF0aW9uIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFi
bGUuCisgICogIEByZXR1cm4gdGhlIG5ld2x5IG9wZW5lZCBjaGFyc2V0IGRldGVjdG9yLgorICAq
ICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCBVQ2hhcnNldERldGVjdG9yICogVV9FWFBP
UlQyCit1Y3NkZXRfb3BlbihVRXJyb3JDb2RlICAgKnN0YXR1cyk7CisKKy8qKgorICAqIENsb3Nl
IGEgY2hhcnNldCBkZXRlY3Rvci4gIEFsbCBzdG9yYWdlIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2Vz
CisgICogICBvd25lZCBieSB0aGlzIGNoYXJzZXQgZGV0ZWN0b3Igd2lsbCBiZSByZWxlYXNlZC4g
IEZhaWx1cmUgdG8KKyAgKiAgIGNsb3NlIGEgY2hhcnNldCBkZXRlY3RvciB3aGVuIGZpbmlzaGVk
IHdpdGggaXQgY2FuIHJlc3VsdCBpbgorICAqICAgbWVtb3J5IGxlYWtzIGluIHRoZSBhcHBsaWNh
dGlvbi4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUg
Y2xvc2VkLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JU
MgordWNzZGV0X2Nsb3NlKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QpOworCisvKioKKyAgKiBTZXQg
dGhlIGlucHV0IGJ5dGUgZGF0YSB3aG9zZSBjaGFyc2V0IGlzIHRvIGRldGVjdGVkLgorICAqCisg
ICogT3duZXJzaGlwIG9mIHRoZSBpbnB1dCAgdGV4dCBieXRlIGFycmF5IHJlbWFpbnMgd2l0aCB0
aGUgY2FsbGVyLgorICAqIFRoZSBpbnB1dCBzdHJpbmcgbXVzdCBub3QgYmUgYWx0ZXJlZCBvciBk
ZWxldGVkIHVudGlsIHRoZSBjaGFyc2V0CisgICogZGV0ZWN0b3IgaXMgZWl0aGVyIGNsb3NlZCBv
ciByZXNldCB0byByZWZlciB0byBkaWZmZXJlbnQgaW5wdXQgdGV4dC4KKyAgKgorICAqIEBwYXJh
bSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAgKiBAcGFyYW0gdGV4
dEluIHRoZSBpbnB1dCB0ZXh0IG9mIHVua25vd24gZW5jb2RpbmcuICAgLgorICAqIEBwYXJhbSBs
ZW4gICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgdGV4dCwgb3IgLTEgaWYgdGhlIHRleHQKKyAg
KiAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICAqIEBwYXJhbSBzdGF0dXMgYW55
IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAg
KgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3Nk
ZXRfc2V0VGV4dChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBjb25zdCBjaGFyICp0ZXh0SW4sIGlu
dDMyX3QgbGVuLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKiBTZXQgdGhlIGRlY2xhcmVk
IGVuY29kaW5nIGZvciBjaGFyc2V0IGRldGVjdGlvbi4KKyAqICBUaGUgZGVjbGFyZWQgZW5jb2Rp
bmcgb2YgYW4gaW5wdXQgdGV4dCBpcyBhbiBlbmNvZGluZyBvYnRhaW5lZAorICogIGJ5IHRoZSB1
c2VyIGZyb20gYW4gaHR0cCBoZWFkZXIgb3IgeG1sIGRlY2xhcmF0aW9uIG9yIHNpbWlsYXIgc291
cmNlIHRoYXQKKyAqICBjYW4gYmUgcHJvdmlkZWQgYXMgYW4gYWRkaXRpb25hbCBoaW50IHRvIHRo
ZSBjaGFyc2V0IGRldGVjdG9yLgorICoKKyAqICBIb3cgYW5kIHdoZXRoZXIgdGhlIGRlY2xhcmVk
IGVuY29kaW5nIHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhlCisgKiAgZGV0ZWN0aW9uIHByb2Nlc3Mg
aXMgVEJELgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8g
YmUgdXNlZC4KKyAqIEBwYXJhbSBlbmNvZGluZyAgYW4gZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50
IGRhdGEgb2J0YWluZWQgZnJvbQorICogICAgICAgICAgICAgICAgICBhIGhlYWRlciBvciBkZWNs
YXJhdGlvbiBvciBvdGhlciBzb3VyY2Ugb3V0c2lkZQorICogICAgICAgICAgICAgICAgICBvZiB0
aGUgYnl0ZSBkYXRhIGl0c2VsZi4KKyAqIEBwYXJhbSBsZW5ndGggICAgdGhlIGxlbmd0aCBvZiB0
aGUgZW5jb2RpbmcgbmFtZSwgb3IgLTEgaWYgdGhlIG5hbWUgc3RyaW5nCisgKiAgICAgICAgICAg
ICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICogQHBhcmFtIHN0YXR1cyAgICBhbnkgZXJyb3Ig
Y29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICoKKyAqIEBk
cmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXREZWNs
YXJlZEVuY29kaW5nKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGNvbnN0IGNoYXIgKmVuY29kaW5n
LCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAqIFJldHVy
biB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgc3VwcGxpZWQgaW5wdXQgZGF0YS4K
KyAqIAorICogTm90ZSB0aG91Z2gsIHRoYXQgYmVjYXVzZSB0aGUgZGV0ZWN0aW9uIAorICogb25s
eSBsb29rcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGRhdGEsCisgKiB0aGVyZSBpcyBhIHBv
c3NpYmlsaXR5IHRoYXQgdGhlIHJldHVybmVkIGNoYXJzZXQgd2lsbCBmYWlsIHRvIGhhbmRsZQor
ICogdGhlIGZ1bGwgc2V0IG9mIGlucHV0IGRhdGEuCisgKiA8cD4KKyAqIFRoZSByZXR1cm5lZCBV
Q2hhcnNldE1hdGNoIG9iamVjdCBpcyBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAq
IEl0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBkZXRlY3RvciBpbnB1dCBpcyByZXNldCwg
b3IgdW50aWwKKyAqIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQuCisgKiA8cD4KKyAqIFRoZSBmdW5j
dGlvbiB3aWxsIGZhaWwgaWYKKyAqICA8dWw+CisgKiAgICA8bGk+bm8gY2hhcnNldCBhcHBlYXJz
IHRvIG1hdGNoIHRoZSBkYXRhLjwvbGk+CisgKiAgICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVl
biBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqCisgKiBAcGFyYW0gdWNzZCAgICAgIHRoZSBj
aGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBAcGFyYW0gc3RhdHVzICAgIGFueSBlcnJv
ciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiBAcmV0
dXJuICAgICAgICAgIGEgVUNoYXJzZXRNYXRjaCAgcmVwcmVzZW50aW5nIHRoZSBiZXN0IG1hdGNo
aW5nIGNoYXJzZXQsCisgKiAgICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgbm8gY2hhcnNldCBt
YXRjaGVzIHRoZSBieXRlIGRhdGEuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFG
VCBjb25zdCBVQ2hhcnNldE1hdGNoICogVV9FWFBPUlQyCit1Y3NkZXRfZGV0ZWN0KFVDaGFyc2V0
RGV0ZWN0b3IgKnVjc2QsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisgICAgCisKKy8qKgorICogIEZp
bmQgYWxsIGNoYXJzZXQgbWF0Y2hlcyB0aGF0IGFwcGVhciB0byBiZSBjb25zaXN0ZW50IHdpdGgg
dGhlIGlucHV0LAorICogIHJldHVybmluZyBhbiBhcnJheSBvZiByZXN1bHRzLiAgVGhlIHJlc3Vs
dHMgYXJlIG9yZGVyZWQgd2l0aCB0aGUKKyAqICBiZXN0IHF1YWxpdHkgbWF0Y2ggZmlyc3QuCisg
KgorICogIEJlY2F1c2UgdGhlIGRldGVjdGlvbiBvbmx5IGxvb2tzIGF0IGEgbGltaXRlZCBhbW91
bnQgb2YgdGhlCisgKiAgaW5wdXQgYnl0ZSBkYXRhLCBzb21lIG9mIHRoZSByZXR1cm5lZCBjaGFy
c2V0cyBtYXkgZmFpbCB0byBoYW5kbGUKKyAqICB0aGUgYWxsIG9mIGlucHV0IGRhdGEuCisgKiAg
PHA+CisgKiAgVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0Y2ggb2JqZWN0cyBhcmUgb3duZWQgYnkg
dGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiAgVGhleSB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0
aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVkCisgKiAgCisgKiA8cD4KKyAqIFJldHVy
biBhbiBlcnJvciBpZiAKKyAqICA8dWw+CisgKiAgICA8bGk+bm8gY2hhcnNldHMgYXBwZWFyIHRv
IG1hdGNoIHRoZSBpbnB1dCBkYXRhLjwvbGk+CisgKiAgICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMg
YmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqIAorICogQHBhcmFtIHVjc2QgICAgICAg
ICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBtYXRjaGVzRm91
bmQgIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgc2V0IHRvIHRoZQorICogICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJzZXRzIGlkZW50aWZpZWQgdGhhdCBhcmUg
Y29uc2lzdGVudCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgZGF0YS4g
IE91dHB1dCBvbmx5LgorICogQHBhcmFtIHN0YXR1cyAgICAgICAgYW55IGVycm9yIGNvbmRpdGlv
bnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAg
ICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBVQ2hhclNldE1hdGNo
IG9iamVjdHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5LCBhbmQgdGhlIFVD
aGFyU2V0TWF0Y2ggaW5zdGFuY2VzIHRvIHdoaWNoIGl0IHJlZmVycywKKyAqICAgICAgICAgICAg
ICAgICAgICAgIGFyZSBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3RvciwgYW5kIHdpbGwgcmVt
YWluIHZhbGlkIHVudGlsCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZGV0ZWN0b3IgaXMg
Y2xvc2VkIG9yIG1vZGlmaWVkLgorICogQGRyYWZ0IElDVSAzLjQKKyAqLworVV9EUkFGVCBjb25z
dCBVQ2hhcnNldE1hdGNoICoqIFVfRVhQT1JUMgordWNzZGV0X2RldGVjdEFsbChVQ2hhcnNldERl
dGVjdG9yICp1Y3NkLCBpbnQzMl90ICptYXRjaGVzRm91bmQsIFVFcnJvckNvZGUgKnN0YXR1cyk7
CisKKworCisvKioKKyAqICBHZXQgdGhlIG5hbWUgb2YgdGhlIGNoYXJzZXQgcmVwcmVzZW50ZWQg
YnkgYSBVQ2hhcnNldE1hdGNoLgorICoKKyAqICBUaGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVk
IG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxs
IHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoK
KyAqICBUaGUgbmFtZSByZXR1cm5lZCBpcyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIElDVSBj
b252ZXJzaW9uIEFQSXMuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNo
IG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVw
b3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIFRoZSBuYW1l
IG9mIHRoZSBtYXRjaGluZyBjaGFyc2V0LgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICovCitV
X0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vjc2RldF9nZXROYW1lKGNvbnN0IFVDaGFy
c2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogIEdldCBhIGNv
bmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgcXVhbGl0eSBvZiB0aGUgbWF0Y2ggb2YgdGhlIGJ5dGUK
KyAqICBkYXRhIHdpdGggdGhlIGNoYXJzZXQuICBDb25maWRlbmNlIG51bWJlcnMgcmFuZ2UgZnJv
bSB6ZXJvIHRvIDEwMCwKKyAqICB3aXRoIDEwMCByZXByZXNlbnRpbmcgY29tcGxldGUgY29uZmlk
ZW5jZSBhbmQgemVybyByZXByZXNlbnRpbmcKKyAqICBubyBjb25maWRlbmNlLgorICoKKyAqICBU
aGUgY29uZmlkZW5jZSB2YWx1ZXMgYXJlIHNvbWV3aGF0IGFyYml0cmFyeS4gIFRoZXkgZGVmaW5l
IGFuCisgKiAgYW4gb3JkZXJpbmcgd2l0aGluIHRoZSByZXN1bHRzIGZvciBhbnkgc2luZ2xlIGRl
dGVjdGlvbiBvcGVyYXRpb24KKyAqICBidXQgYXJlIG5vdCBnZW5lcmFsbHkgY29tcGFyYWJsZSBi
ZXR3ZWVuIHRoZSByZXN1bHRzIGZvciBkaWZmZXJlbnQgaW5wdXQuCisgKgorICogIEEgY29uZmlk
ZW5jZSB2YWx1ZSBvZiB0ZW4gZG9lcyBoYXZlIGEgZ2VuZXJhbCBtZWFuaW5nIC0gaXQgaXMgdXNl
ZAorICogIGZvciBjaGFyc2V0cyB0aGF0IGNhbiByZXByZXNlbnQgdGhlIGlucHV0IGRhdGEsIGJ1
dCBmb3Igd2hpY2ggdGhlcmUKKyAqICBpcyBubyBvdGhlciBpbmRpY2F0aW9uIHRoYXQgc3VnZ2Vz
dHMgdGhhdCB0aGUgY2hhcnNldCBpcyB0aGUgY29ycmVjdCBvbmUuCisgKiAgUHVyZSA3IGJpdCBB
U0NJSSBkYXRhLCBmb3IgZXhhbXBsZSwgaXMgY29tcGF0aWJsZSB3aXRoIGEKKyAqICBncmVhdCBt
YW55IGNoYXJzZXRzLCBtb3N0IG9mIHdoaWNoIHdpbGwgYXBwZWFyIGFzIHBvc3NpYmxlIG1hdGNo
ZXMKKyAqICB3aXRoIGEgY29uZmlkZW5jZSBvZiAxMC4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAg
VGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBj
b25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVy
biAgICAgICAgQSBjb25maWRlbmNlIG51bWJlciBmb3IgdGhlIGNoYXJzZXQgbWF0Y2guCisgKgor
ICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2Rl
dF9nZXRDb25maWRlbmNlKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisKKy8qKgorICogIEdldCB0aGUgUkZDIDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdl
IG9mIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqICBUaGUgQ2hhcnNldCBEZXRlY3Rpb24gc2Vydmlj
ZSBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGRldGVjdGluZworICogIGNoYXJzZXRzLCBub3Qg
bGFuZ3VhZ2UuICBGb3Igc29tZSwgYnV0IG5vdCBhbGwsIGNoYXJzZXRzLCBhIGxhbmd1YWdlIGlz
CisgKiAgaWRlbnRpZmllZCBhcyBhIGJ5cHJvZHVjdCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3Ms
IGFuZCB0aGF0IGlzIHdoYXQKKyAqICBpcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLgorICoK
KyAqICBDQVVUSU9OOgorICogICAgMS4gIExhbmd1YWdlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFp
bGFibGUgZm9yIGlucHV0IGRhdGEgZW5jb2RlZCBpbgorICogICAgICAgIGFsbCBjaGFyc2V0cy4g
SW4gcGFydGljdWxhciwgbm8gbGFuZ3VhZ2UgaXMgaWRlbnRpZmllZAorICogICAgICAgIGZvciBV
VEYtOCBpbnB1dCBkYXRhLgorICoKKyAqICAgIDIuICBDbG9zZWx5IHJlbGF0ZWQgbGFuZ3VhZ2Vz
IG1heSBzb21ldGltZXMgYmUgY29uZnVzZWQuCisgKgorICogIElmIG1vcmUgYWNjdXJhdGUgbGFu
Z3VhZ2UgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLCBhIGxpbmd1aXN0aWMKKyAqICBhbmFseXNpcyBw
YWNrYWdlIHNob3VsZCBiZSB1c2VkLgorICoKKyAqICBUaGUgc3RvcmFnZSBmb3IgdGhlIHJldHVy
bmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3
aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRNYXRjaAorICogIGlzIHZhbGlkLgor
ICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBh
cmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhp
cyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBUaGUgUkZDIDMwNjYgY29kZSBmb3IgdGhl
IGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLCBvcgorICogICAgICAgICAgICAgICAgIGFuIGVt
cHR5IHN0cmluZyBpZiB0aGUgbGFuZ3VhZ2UgY291bGQgbm90IGJlIGRldGVybWluZWQuCisgKgor
ICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgor
dWNzZGV0X2dldExhbmd1YWdlKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUg
KnN0YXR1cyk7CisKKworLyoqCisgICogIEdldCB0aGUgZW50aXJlIGlucHV0IHRleHQgYXMgYSBV
Q2hhciBzdHJpbmcsIHBsYWNpbmcgaXQgaW50bworICAqICBhIGNhbGxlci1zdXBwbGllZCBidWZm
ZXIuICBBIHRlcm1pbmF0aW5nCisgICogIE5VTCBjaGFyYWN0ZXIgd2lsbCBiZSBhcHBlbmRlZCB0
byB0aGUgYnVmZmVyIGlmIHNwYWNlIGlzIGF2YWlsYWJsZS4KKyAgKgorICAqICBUaGUgbnVtYmVy
IG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdGVybWlu
YXRpbmcKKyAgKiAgTlVMLCBpcyByZXR1cm5lZC4gCisgICoKKyAgKiAgSWYgdGhlIHN1cHBsaWVk
IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgdG8gaG9sZCB0aGUgb3V0cHV0LAorICAq
ICB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhcmUgdW5kZWZpbmVkLiAgVGhlIGZ1bGwgb3V0
cHV0IHN0cmluZyBsZW5ndGgKKyAgKiAgKGluIFVDaGFycykgaXMgcmV0dXJuZWQgYXMgYWx3YXlz
LCBhbmQgY2FuIGJlIHVzZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIKKyAgKiAgb2YgdGhlIGNvcnJl
Y3Qgc2l6ZS4KKyAgKgorICAqCisgICogQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2gg
b2JqZWN0LgorICAqIEBwYXJhbSBidWYgICAgIEEgVUNoYXIgYnVmZmVyIHRvIGJlIGZpbGxlZCB3
aXRoIHRoZSBjb252ZXJ0ZWQgdGV4dCBkYXRhLgorICAqIEBwYXJhbSBjYXAgICAgIFRoZSBjYXBh
Y2l0eSBvZiB0aGUgYnVmZmVyIGluIFVDaGFycy4KKyAgKiBAcGFyYW0gc3RhdHVzICBBbnkgZXJy
b3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqIEBy
ZXR1cm4gICAgICAgIFRoZSBudW1iZXIgb2YgVUNoYXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLgor
ICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJBRlQgIGludDMyX3QgVV9FWFBPUlQy
Cit1Y3NkZXRfZ2V0VUNoYXJzKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sCisgICAgICAgICAg
ICAgICAgIFVDaGFyICpidWYsIGludDMyX3QgY2FwLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisK
KworLyoqCisgICogIEdldCBhbiBpdGVyYXRvciBvdmVyIHRoZSBzZXQgb2YgYWxsIGRldGVjdGFi
bGUgY2hhcnNldHMgLSAKKyAgKiAgb3ZlciB0aGUgY2hhcnNldHMgdGhhdCBhcmUga25vd24gdG8g
dGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZpY2UuCisgICoKKyAgKiAgVGhlIHJldHVy
bmVkIFVFbnVtZXJhdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5hbWVzIG9mCisgICogIHRo
ZSBjaGFyc2V0cy4KKyAgKgorICAqICBUaGUgc3RhdGUgb2YgdGhlIENoYXJzZXQgZGV0ZWN0b3Ig
dGhhdCBpcyBwYXNzZWQgaW4gZG9lcyBub3QKKyAgKiAgYWZmZWN0IHRoZSByZXN1bHQgb2YgdGhp
cyBmdW5jdGlvbiwgYnV0IHJlcXVpcmluZyBhIHZhbGlkLCBvcGVuCisgICogIGNoYXJzZXQgZGV0
ZWN0b3IgYXMgYSBwYXJhbWV0ZXIgaW5zdXJlcyB0aGF0IHRoZSBjaGFyc2V0IGRldGVjdGlvbgor
ICAqICBzZXJ2aWNlIGhhcyBiZWVuIHNhZmVseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVx
dWlyZWQgZGV0ZWN0aW9uCisgICogIGRhdGEgaXMgYXZhaWxhYmxlLgorICAqCisgICogIEBwYXJh
bSB1Y3NkIGEgQ2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9y
IGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJl
dHVybiBhbiBpdGVyYXRvciBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBkZXRlY3RhYmxlIGNoYXJz
ZXQgbmFtZXMuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCisKK1VfRFJBRlQgIFVFbnVtZXJh
dGlvbiAqIFVfRVhQT1JUMgordWNzZGV0X2dldEFsbERldGVjdGFibGVDaGFyc2V0cyhjb25zdCBV
Q2hhcnNldERldGVjdG9yICp1Y3NkLCAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAg
KiAgVGVzdCB3aGV0aGVyIGlucHV0IGZpbHRlcmluZyBpcyBlbmFibGVkIGZvciB0aGlzIGNoYXJz
ZXQgZGV0ZWN0b3IuCisgICogIElucHV0IGZpbHRlcmluZyByZW1vdmVzIHRleHQgdGhhdCBhcHBl
YXJzIHRvIGJlIEhUTUwgb3IgeG1sCisgICogIG1hcmt1cCBmcm9tIHRoZSBpbnB1dCBiZWZvcmUg
YXBwbHlpbmcgdGhlIGNvZGUgcGFnZSBkZXRlY3Rpb24KKyAgKiAgaGV1cmlzdGljcy4KKyAgKgor
ICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gY2hlY2suCisgICogIEBy
ZXR1cm4gVFJVRSBpZiBmaWx0ZXJpbmcgaXMgZW5hYmxlZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjQK
KyAgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgordWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFi
bGVkKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QpOworCisKKy8qKgorICogRW5hYmxlIGZp
bHRlcmluZyBvZiBpbnB1dCB0ZXh0LiBJZiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwKKyAqIHRleHQg
d2l0aGluIGFuZ2xlIGJyYWNrZXRzICgiPCIgYW5kICI+Iikgd2lsbCBiZSByZW1vdmVkCisgKiBi
ZWZvcmUgZGV0ZWN0aW9uLCB3aGljaCB3aWxsIHJlbW92ZSBtb3N0IEhUTUwgb3IgeG1sIG1hcmt1
cC4KKyAqCisgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIG1vZGlm
aWVkLgorICogQHBhcmFtIGZpbHRlciA8Y29kZT50cnVlPC9jb2RlPiB0byBlbmFibGUgaW5wdXQg
dGV4dCBmaWx0ZXJpbmcuCisgKiBAcmV0dXJuIFRoZSBwcmV2aW91cyBzZXR0aW5nLgorICoKKyAq
IEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgordWNzZGV0X2Vu
YWJsZUlucHV0RmlsdGVyKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIFVCb29sIGZpbHRlcik7CisK
KyNlbmRpZgorI2VuZGlmICAgLyogX19VQ1NERVRfSCAqLworCisKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDExIEBAIHN0YXRpYyBpbnQgbnVtUmVx
dWVzdHMoRG9jdW1lbnQqIGRvY3VtZW4KICAgICByZXR1cm4gZG9jdW1lbnQtPmRvY0xvYWRlcigp
LT5yZXF1ZXN0Q291bnQoKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9QYXJl
bnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUqIHBhcmVudEZy
YW1lKSAKK3sKKyAgICByZXR1cm4gcGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSk7Cit9CisKIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUs
IEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwg
bV9jbGllbnQoY2xpZW50KQpAQCAtOTk3LDEzICsxMDAyLDI0IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICB9CiAgICAgCiAgICAgaWYgKCFtX2RlY29kZXIp
IHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VN
SU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6
IFN0cmluZygpKTsKLSAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKSB7CisgICAgICAg
ICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNwb25zZU1J
TUVUeXBlLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFt
ZSgpLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsK
ICAgICAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKHBh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCksIFRleHRSZXNvdXJjZURlY29k
ZXI6OkRlZmF1bHRFbmNvZGluZyk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBT
ZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBvbmx5IGlm
CisgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMgc2hhcmUg
dGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAgICAgIC8vIFRPRE86IFdlIG1heSBjb25zaWRl
ciByZWxheGluZyB0aGlzIGxhdGVyIGZvciAncmVsYXRpdmVseQorICAgICAgICAgICAgLy8gc2Fm
ZScgZW5jb2RpbmdzICh0aGF0IGlzLCBlbmNvZGluZ3Mgb3RoZXIgdGhhbiBub24tQVNDSUkgN2Jp
dAorICAgICAgICAgICAgLy8gZW5jb2RpbmdzKS4gCisgICAgICAgICAgICBpZiAoY2FuUmVmZXJU
b1BhcmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAg
ICAgIG1fZGVjb2Rlci0+c2V0SGludERlY29kZXIocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmRl
Y29kZXIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgU3RyaW5nKCkpOworICAg
ICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAg
ICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkgJiYgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5j
b2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRF
bmNvZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSk7CisgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nLAogICAgICAgICAg
ICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpV
c2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQ
SGVhZGVyKTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJET01J
bXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRD
b2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Z0RldGVjdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0cnkuaCIKICNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KQEAgLTMy
MSwxNSArMzIzLDE3IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dFJlc291cmNlRGVjb2RlcjoK
ICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VE
ZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJlc291cmNlRGVj
b2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdE
ZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUobWltZVR5
cGUpKQogICAgICwgbV9lbmNvZGluZyhkZWZhdWx0RW5jb2RpbmcobV9jb250ZW50VHlwZSwgc3Bl
Y2lmaWVkRGVmYXVsdEVuY29kaW5nKSkKKyAgICAsIG1faGludERlY29kZXIoMCkKICAgICAsIG1f
c291cmNlKERlZmF1bHRFbmNvZGluZykKICAgICAsIG1fY2hlY2tlZEZvckJPTShmYWxzZSkKICAg
ICAsIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JIZWFk
Q2hhcnNldChmYWxzZSkKICAgICAsIG1fdXNlTGVuaWVudFhNTERlY29kaW5nKGZhbHNlKQogICAg
ICwgbV9zYXdFcnJvcihmYWxzZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IodXNlc0Vu
Y29kaW5nRGV0ZWN0b3IpCiB7CiB9CiAKQEAgLTQ1MSw3ICs0NTUsNyBAQCBzaXplX3QgVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00oCiAKIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y2hlY2tGb3JDU1NDaGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sIGJvb2wmIG1v
dmVkRGF0YVRvQnVmZmVyKQogewotICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2Rpbmcp
IHsKKyAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVuY29kaW5nICYmIG1fc291cmNlICE9IEVu
Y29kaW5nRnJvbVBhcmVudEZyYW1lKSB7CiAgICAgICAgIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQg
PSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MzIsNyArNTM2LDcgQEAg
Y29uc3QgaW50IGJ5dGVzVG9DaGVja1VuY29uZGl0aW9uYWxseSA9IAogCiBib29sIFRleHRSZXNv
dXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbiwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpCiB7Ci0gICAgaWYgKG1fc291cmNlICE9IERl
ZmF1bHRFbmNvZGluZykgeworICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYg
bV9zb3VyY2UgIT0gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpIHsKICAgICAgICAgbV9jaGVja2Vk
Rm9ySGVhZENoYXJzZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03
NTksNiArNzYzLDIxIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2UK
ICAgICB9CiB9CiAKKy8vIFdlIHVzZSB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IgaW4gdHdvIGNhc2Vz
OgorLy8gICAxLiBFbmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5kIG5vIG90aGVyIGVu
Y29kaW5nIHNvdXJjZSBpcworLy8gICAgICBhdmFpbGFibGUgKHRoYXQgaXMsIGl0J3MgRGVmYXVs
dEVuY29kaW5nKS4KKy8vICAgMi4gRW5jb2RpbmcgZGV0ZWN0b3IgaXMgdHVybmVkIE9OIGFuZCB0
aGUgZW5jb2RpbmcgaXMgc2V0IHRvCisvLyAgICAgIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFyZW50
IGZyYW1lLCB3aGljaCBpcyBhbHNvIGF1dG8tZGV0ZWN0ZWQuCisvLyAgIE5vdGUgdGhhdCBjb25k
aXRpb24gIzIgaXMgTk9UIHNhdGlzZmllZCB1bmxlc3MgcGFyZW50LWNoaWxkIGZyYW1lCisvLyAg
IHJlbGF0aW9uc2hpcCBpcyBjb21wbGlhbnQgdG8gdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gSWYg
dGhleSdyZSBmcm9tCisvLyAgIGRpZmZlcmVudCBkb21haW5zLCB8bV9zb3VyY2V8IHdvdWxkIG5v
dCBiZSBzZXQgdG8gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKy8vICAgaW4gdGhlIGZpcnN0IHBs
YWNlLiAKK2Jvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IKKyAgICAgICAgJiYgKG1fc291
cmNlID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2RpbmdGcm9tUGFyZW50
RnJhbWUgJiYgbV9oaW50RGVjb2RlciAmJiBtX2hpbnREZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRv
RGV0ZWN0ZWRFbmNvZGluZykpOyAKK30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRl
Y29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIHNpemVfdCBsZW5ndGhP
ZkJPTSA9IDA7CkBAIC03NzUsMTAgKzc5NCwyNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rl
cjo6ZGVjb2RlKGNvbnN0CiAgICAgICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBs
ZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiAiIjsKIAotICAgIC8v
IERvIHRoZSBhdXRvLWRldGVjdCBpZiBvdXIgZGVmYXVsdCBlbmNvZGluZyBpcyBvbmUgb2YgdGhl
IEphcGFuZXNlIG9uZXMuCi0gICAgLy8gRklYTUU6IEl0IHNlZW1zIHdyb25nIHRvIGNoYW5nZSBv
dXIgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRl
Y29kaW5nLgorICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29k
aW5nIGRvd25zdHJlYW0gYWZ0ZXIKKyAgICAvLyB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRl
Y29kaW5nLiBIb3dldmVyLCBpdCdzIG5vdCBwb3NzaWJsZQorICAgIC8vIHRvIGF2b2lkIGluIGEg
c2Vuc2UgaW4gdHdvIGNhc2VzIGJlbG93IGJlY2F1c2UgdHJpZ2dlcmluZyBjb25kaXRpb25zCisg
ICAgLy8gZm9yIGJvdGggY2FzZXMgZGVwZW5kIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvbid0
IGJlIGF2YWlsYWJsZQorICAgIC8vIHVudGlsIHdlIGRvIHBhcnRpYWwgcmVhZC4gCisgICAgLy8g
VGhlIGZpcnN0IGNhc2UgaGFkIGJldHRlciBiZSByZW1vdmVkIGFsdG9nZXRoZXIgKHNlZSBidWcg
MjE5OTApCisgICAgLy8gb3IgYXQgbGVhc3QgYmUgbWFkZSB0byBiZSBpbnZva2VkIG9ubHkgd2hl
biB0aGUgZW5jb2RpbmcgZGV0ZWN0aW9uCisgICAgLy8gaXMgdHVybmVkIG9uLiAKKyAgICAvLyBE
byB0aGUgYXV0by1kZXRlY3QgMSkgdXNpbmcgSmFwYW5lc2UgZGV0ZWN0b3IgaWYgb3VyIGRlZmF1
bHQgZW5jb2RpbmcgaXMKKyAgICAvLyBvbmUgb2YgdGhlIEphcGFuZXNlIGRldGVjdG9yIG9yIDIp
IHVzaW5nIGRldGVjdFRleHRFbmNvZGluZyBpZiBlbmNvZGluZworICAgIC8vIGRldGVjdGlvbiBp
cyB0dXJuZWQgb24uCiAgICAgaWYgKG1fc291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBt
X3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGluZyAmJiBtX2VuY29kaW5nLmlzSmFwYW5lc2Uo
KSkKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2Ug
aWYgKHNob3VsZEF1dG9EZXRlY3QoKSkgeworICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRF
bmNvZGluZzsKKyAgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhkYXRhLCBsZW4sIGhpbnRF
bmNvZGluZ05hbWUoKSwgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAgICAgICAgc2V0RW5jb2Rp
bmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOworICAgIH0KIAogICAg
IEFTU0VSVChtX2VuY29kaW5nLmlzVmFsaWQoKSk7CiAKQEAgLTgwMSw2ICs4MzQsMTggQEAgU3Ry
aW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAogCiBTdHJpbmcgVGV4dFJlc291
cmNlRGVjb2Rlcjo6Zmx1c2goKQogeworICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVudGlmeSB0aGUg
ZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKKyAgIC8vIGxvYWRl
ZCwgd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRpdGlvbnMgZm9y
CisgICAvLyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KKyAgICBpZiAobV9idWZmZXIuc2l6
ZSgpCisgICAgICAgICYmICgoIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ICYmIChtX2NvbnRlbnRU
eXBlID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpKSB8fCAoIW1fY2hlY2tlZEZvckNT
U0NoYXJzZXQgJiYgKG1fY29udGVudFR5cGUgPT0gQ1NTKSkpCisgICAgICAgICYmIHNob3VsZEF1
dG9EZXRlY3QoKSkgeworICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7Cisg
ICAgICAgICBpZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIu
c2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50RW5jb2RpbmdOYW1l
KCksICZkZXRlY3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3Rl
ZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgfQorCiAgICAgaWYgKCFtX2Nv
ZGVjKQogICAgICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFz
ZSgpKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2aXNpb24g
NDE5MTEpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDEyICszNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEVuY29kaW5nRnJvbU1l
dGFUYWcsCiAgICAgICAgIEVuY29kaW5nRnJvbUNTU0NoYXJzZXQsCiAgICAgICAgIEVuY29kaW5n
RnJvbUhUVFBIZWFkZXIsCi0gICAgICAgIFVzZXJDaG9zZW5FbmNvZGluZworICAgICAgICBVc2Vy
Q2hvc2VuRW5jb2RpbmcsCisgICAgICAgIEVuY29kaW5nRnJvbVBhcmVudEZyYW1lCiAgICAgfTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9
IFRleHRFbmNvZGluZygpKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29k
ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRl
ZmF1bHRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9y
ID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRSZXNvdXJj
ZURlY29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHRSZXNvdXJjZURlY29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZywg
dXNlc0VuY29kaW5nRGV0ZWN0b3IpKTsKICAgICB9CiAgICAgflRleHRSZXNvdXJjZURlY29kZXIo
KTsKIApAQCAtNTEsMTEgKzUyLDE3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFN0cmluZyBmbHVzaCgpOwogCisgICAg
dm9pZCBzZXRIaW50RGVjb2Rlcihjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBoaW50RGVjb2Rl
cikKKyAgICB7CisgICAgICAgIG1faGludERlY29kZXIgPSBoaW50RGVjb2RlcjsKKyAgICB9Cisg
ICAKICAgICB2b2lkIHVzZUxlbmllbnRYTUxEZWNvZGluZygpIHsgbV91c2VMZW5pZW50WE1MRGVj
b2RpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3
RXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBU
ZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZGVmYXVsdEVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2Vz
RW5jb2RpbmdEZXRlY3Rvcik7CiAKICAgICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBI
VE1MLCBYTUwsIENTUyB9OyAvLyBQbGFpblRleHQgb25seSBjaGVja3MgZm9yIEJPTS4KICAgICBz
dGF0aWMgQ29udGVudFR5cGUgZGV0ZXJtaW5lQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CkBAIC02NSwxMCArNzIsMTcgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9yQ1NT
Q2hhcnNldChjb25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7CiAg
ICAgYm9vbCBjaGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1v
dmVkRGF0YVRvQnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29uc3Qg
Y2hhciosIHNpemVfdCk7CisgICAgYm9vbCBzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3Q7CisKKyAg
ICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2hpbnREZWNvZGVyID8gbV9oaW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCkgOiAw
OworICAgIH0KIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dEVuY29k
aW5nIG1fZW5jb2Rpbmc7CiAgICAgT3duUHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKKyAgICBjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBtX2hpbnREZWNvZGVyOwogICAgIEVuY29kaW5nU291cmNl
IG1fc291cmNlOwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBib29sIG1fY2hlY2tl
ZEZvckJPTTsKQEAgLTc2LDYgKzkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hlY2tlZEZv
ckhlYWRDaGFyc2V0OwogICAgIGJvb2wgbV91c2VMZW5pZW50WE1MRGVjb2Rpbmc7IC8vIERvbid0
IHN0b3Agb24gWE1MIGRlY29kaW5nIGVycm9ycy4KICAgICBib29sIG1fc2F3RXJyb3I7CisgICAg
Ym9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShy
ZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg2LDYgKzg2LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAg
LCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyhmYWxzZSkKICAgICAsIG1fem9vbXNUZXh0
T25seShmYWxzZSkKICAgICAsIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlKHRydWUp
CisgICAgLCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKQogICAgICwgbV9tYXhpbXVtRGVj
b2RlZEltYWdlU2l6ZShzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQogICAgICwg
bV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhmYWxzZSkKIHsKQEAgLTQxOCw2ICs0MTksMTEg
QEAgdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUGFpbnROYXRpdmVDb250cgogfQogI2VuZGlmCiAK
K3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGJvb2wgdXNlc0VuY29kaW5n
RGV0ZWN0b3IpCit7CisgICAgbV91c2VzRW5jb2RpbmdEZXRlY3RvciA9IHVzZXNFbmNvZGluZ0Rl
dGVjdG9yOworfQorCiB2b2lkIFNldHRpbmdzOjpzZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93
cyhib29sIGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKQogewogICAgIG1fYWxsb3dTY3JpcHRz
VG9DbG9zZVdpbmRvd3MgPSBhbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93czsKSW5kZXg6IFdlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5o
CShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNiArMTE1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVmYXVsdFRleHRFbmNvZGluZ05hbWU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNlc0VuY29kaW5n
RGV0ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmKTsKICAgICAg
ICAgY29uc3QgS1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQpAQCAtMjYwLDYgKzI2Myw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyA6IDE7
CiAgICAgICAgIGJvb2wgbV96b29tc1RleHRPbmx5IDogMTsKICAgICAgICAgYm9vbCBtX2VuZm9y
Y2VDU1NNSU1FVHlwZUluU3RyaWN0TW9kZSA6IDE7CisgICAgICAgIGJvb2wgbV91c2VzRW5jb2Rp
bmdEZXRlY3RvciA6IDE7CiAgICAgICAgIHNpemVfdCBtX21heGltdW1EZWNvZGVkSW1hZ2VTaXpl
OwogICAgICAgICBib29sIG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgOiAxOwogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gNDE5MTEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI3LDE3ICsxMjcsMjEgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRF
bmNvZAogICAgICAgICAgICAgfQogICAgIH0KIAorI2lmIEVOQUJMRShNQUNfRU5DT0RJTkcpCiAg
ICAgLy8gQWRkaXRpb25hbCBhbGlhc2VzLgogICAgIC8vIFRoZXNlIGFyZSBwcmVzZW50IGluIG1v
ZGVybiB2ZXJzaW9ucyBvZiBJQ1UsIGJ1dCBub3QgaW4gSUNVIDMuMiAoc2hpcHBlZCB3aXRoIE1h
YyBPUyBYIDEwLjQpLgogICAgIHJlZ2lzdHJhcigibWFjcm9tYW4iLCAibWFjaW50b3NoIik7CiAg
ICAgcmVnaXN0cmFyKCJtYWNjeXJpbGxpYyIsICJ4LW1hYy1jeXJpbGxpYyIpOworI2VuZGlmCiAK
ICAgICAvLyBBZGRpdGlvbmFsIGFsaWFzZXMgdGhhdCBoaXN0b3JpY2FsbHkgd2VyZSBwcmVzZW50
IGluIHRoZSBlbmNvZGluZwogICAgIC8vIHRhYmxlIGluIFdlYktpdCBvbiBNYWNpbnRvc2ggdGhh
dCBkb24ndCBzZWVtIHRvIGJlIHByZXNlbnQgaW4gSUNVLgogICAgIC8vIFBlcmhhcHMgd2UgY2Fu
IHByb3ZlIHRoZXNlIGFyZSBub3QgdXNlZCBvbiB0aGUgd2ViIGFuZCByZW1vdmUgdGhlbS4KICAg
ICAvLyBPciBwZXJoYXBzIHdlIGNhbiBnZXQgdGhlbSBhZGRlZCB0byBJQ1UuCisjaWYgRU5BQkxF
KE1BQ19FTkNPRElORykKICAgICByZWdpc3RyYXIoInhtYWNyb21hbiIsICJtYWNpbnRvc2giKTsK
ICAgICByZWdpc3RyYXIoInhtYWN1a3JhaW5pYW4iLCAieC1tYWMtY3lyaWxsaWMiKTsKKyNlbmRp
ZgogICAgIHJlZ2lzdHJhcigiY25iaWc1IiwgIkJpZzUiKTsKICAgICByZWdpc3RyYXIoInh4Ymln
NSIsICJCaWc1Iik7CiAgICAgcmVnaXN0cmFyKCJjbmdiIiwgIkdCSyIpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dEVuY29kaW5nRGV0ZWN0b3JfaAorI2RlZmlu
ZSBUZXh0RW5jb2RpbmdEZXRlY3Rvcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIFRleHRFbmNvZGluZzsKKworICAgIC8vIEdpdmVuIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgaW4g
fGRhdGF8IG9mIGxlbmd0aCB8bGVufCBhbmQgYW4gb3B0aW9uYWwKKyAgICAvLyBoaW50RW5jb2Rp
bmdOYW1lLCBkZXRlY3QgdGhlIG1vc3QgbGlrZWx5IGNoYXJhY3RlciBlbmNvZGluZy4gCisgICAg
Ly8gVGhlIHdheSBoaW50RW5jb2RpbmdOYW1lIGlzIHVzZWQgaXMgdXAgdG8gYW4gaW1wbGVtZW50
YXRpb24uCisgICAgLy8gQ3VycmVudGx5LCB0aGUgb25seSBjYWxsZXIgc2V0cyBpdCB0byB0aGUg
cGFyZW50IGZyYW1lIGVuY29kaW5nLgorICAgIGJvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogaGludEVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
ZXh0RW5jb2RpbmcqIGRldGVjdGVkRW5jb2RpbmcpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVj
dG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nRGV0ZWN0b3JJQ1UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaCIKKworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgorI2luY2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNzZGV0
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGRldGVjdFRleHRFbmNv
ZGluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogaGludEVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFRleHRFbmNvZGluZyogZGV0ZWN0ZWRFbmNvZGluZykKK3sKKyAgICAqZGV0ZWN0ZWRFbmNvZGlu
ZyA9IFRleHRFbmNvZGluZygpOworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gVGln
ZXIgY2FtZSB3aXRoIElDVSAzLjIgYW5kIGRvZXMgbm90IGhhdmUgdGhlIGVuY29kaW5nIGRldGVj
dG9yLgorICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0obGVuKTsKKyAg
ICBVTlVTRURfUEFSQU0oaGludEVuY29kaW5nTmFtZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vs
c2UKKyAgICBpbnQgbWF0Y2hlc0NvdW50ID0gMDsgCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgICAgVUNoYXJzZXREZXRlY3RvciogZGV0ZWN0b3IgPSB1Y3NkZXRfb3Bl
bigmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB1Y3NkZXRfZW5hYmxlSW5wdXRGaWx0ZXIoZGV0ZWN0b3IsIHRydWUpOworICAg
IHVjc2RldF9zZXRUZXh0KGRldGVjdG9yLCBkYXRhLCBzdGF0aWNfY2FzdDxpbnQzMl90PihsZW4p
LCAmc3RhdHVzKTsgCisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBGSVhNRTogQSBmZXcgdGhpbmdzIHdlIGNhbiBkbyBvdGhlciB0aGFu
IGltcHJvdmluZworICAgIC8vIHRoZSBJQ1UgZGV0ZWN0b3IgaXRzZWxmLiAKKyAgICAvLyAxLiBV
c2UgdWNzZGV0X2RldGVjdEFsbCBhbmQgcGljayB0aGUgbW9zdCBsaWtlbHkgb25lIGdpdmVuCisg
ICAgLy8gInRoZSBjb250ZXh0IiAocGFyZW50LWVuY29kaW5nLCByZWZlcnJlciBlbmNvZGluZywg
ZXRjKS4KKyAgICAvLyAyLiAnRW11bGF0ZScgRmlyZWZveC9JRSdzIG5vbi1Vbml2ZXJzYWwgZGV0
ZWN0b3JzIChlLmcuCisgICAgLy8gQ2hpbmVzZSwgSmFwYW5lc2UsIFJ1c3NpYW4sIEtvcmVhbiBh
bmQgSGVicmV3KSBieSBwaWNraW5nIHRoZSAKKyAgICAvLyBlbmNvZGluZyB3aXRoIGEgaGlnaGVz
dCBjb25maWRlbmNlIGFtb25nIHRoZSBkZXRldGN0b3Itc3BlY2lmaWMKKyAgICAvLyBsaW1pdGVk
IHNldCBvZiBjYW5kaWRhdGUgZW5jb2RpbmdzLgorICAgIC8vIEJlbG93IGlzIGEgcGFydGlhbCBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFydCBvZiB3aGF0J3Mgb3V0bGluZWQKKyAgICAv
LyBhYm92ZS4KKyAgICBjb25zdCBVQ2hhcnNldE1hdGNoKiogbWF0Y2hlcyA9IHVjc2RldF9kZXRl
Y3RBbGwoZGV0ZWN0b3IsICZtYXRjaGVzQ291bnQsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxV
UkUoc3RhdHVzKSkgeworICAgICAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3IpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgY2hhciogZW5jb2RpbmcgPSAwOworICAg
IGlmIChoaW50RW5jb2RpbmdOYW1lKSB7CisgICAgICAgIFRleHRFbmNvZGluZyBoaW50RW5jb2Rp
bmcoaGludEVuY29kaW5nTmFtZSk7CisgICAgICAgIC8vIDEwIGlzIHRoZSBtaW5pbXVtIGNvbmZp
ZGVuY2UgdmFsdWUgY29uc2lzdGVudCB3aXRoIHRoZSBjb2RlcG9pbnQKKyAgICAgICAgLy8gYWxs
b2NhdGlvbiBpbiBhIGdpdmVuIGVuY29kaW5nLiBUaGUgc2l6ZSBvZiBhIGNodW5rIHBhc3NlZCB0
bworICAgICAgICAvLyB1cyB2YXJpZXMgZXZlbiBmb3IgdGhlIHNhbWUgaHRtbCBmaWxlIChhcHBh
cmVudGx5IGRlcGVuZGluZyBvbiAKKyAgICAgICAgLy8gdGhlIG5ldHdvcmsgbG9hZCkuIFdoZW4g
d2UncmUgZ2l2ZW4gYSByYXRoZXIgc2hvcnQgY2h1bmssIHdlIAorICAgICAgICAvLyBkb24ndCBo
YXZlIGEgc3VmZmljaWVudGx5IHJlbGlhYmxlIHNpZ25hbCBvdGhlciB0aGFuIHRoZSBmYWN0IHRo
YXQKKyAgICAgICAgLy8gdGhlIGNodW5rIGlzIGNvbnNpc3RlbnQgd2l0aCBhIHNldCBvZiBlbmNv
ZGluZ3MuIFNvLCBpbnN0ZWFkIG9mCisgICAgICAgIC8vIHNldHRpbmcgYW4gYXJiaXRyYXJ5IHRo
cmVzaG9sZCwgd2UgaGF2ZSB0byBzY2FuIGFsbCB0aGUgZW5jb2RpbmdzCisgICAgICAgIC8vIGNv
bnNpc3RlbnQgd2l0aCB0aGUgZGF0YS4gIAorICAgICAgICBjb25zdCBpbnQzMl90IGtUaHJlc29s
ZCA9IDEwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXNDb3VudDsgKytpKSB7
CisgICAgICAgICAgICBpbnQzMl90IGNvbmZpZGVuY2UgPSB1Y3NkZXRfZ2V0Q29uZmlkZW5jZSht
YXRjaGVzW2ldLCAmc3RhdHVzKTsKKyAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkg
eworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25maWRlbmNlIDwg
a1RocmVzb2xkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29uc3QgY2hh
ciogbWF0Y2hFbmNvZGluZyA9IHVjc2RldF9nZXROYW1lKG1hdGNoZXNbaV0sICZzdGF0dXMpOwor
ICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKFRleHRFbmNvZGluZyhtYXRjaEVuY29kaW5nKSA9PSBoaW50
RW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGhpbnRFbmNvZGluZ05hbWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgLy8gSWYgbm8gbWF0Y2ggaXMgZm91bmQgc28gZmFyLCBqdXN0IHBpY2sgdGhlIHRvcCBt
YXRjaC4gCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuLCBzYXksIHdoZW4gYSBwYXJlbnQgZnJhbWUg
aW4gRVVDLUpQIHJlZmVycyB0bworICAgIC8vIGEgY2hpbGQgZnJhbWUgaW4gU2hpZnRfSklTIGFu
ZCBib3RoIGZyYW1lcyBkbyBOT1Qgc3BlY2lmeSB0aGUgZW5jb2RpbmcKKyAgICAvLyBtYWtpbmcg
dXMgcmVzb3J0IHRvIGF1dG8tZGV0ZWN0aW9uICh3aGVuIGl0IElTIHR1cm5lZCBvbikuCisgICAg
aWYgKCFlbmNvZGluZyAmJiBtYXRjaGVzQ291bnQgPiAwKQorICAgICAgICBlbmNvZGluZyA9IHVj
c2RldF9nZXROYW1lKG1hdGNoZXNbMF0sICZzdGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3Rh
dHVzKSkgeworICAgICAgICAqZGV0ZWN0ZWRFbmNvZGluZyA9IFRleHRFbmNvZGluZyhlbmNvZGlu
Zyk7CisgICAgICAgIHVjc2RldF9jbG9zZShkZXRlY3Rvcik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0gICAgCisgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmdE
ZXRlY3Rvci5oIgorCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBkZXRlY3RUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhpbnRFbmNvZGluZ05h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RW5jb2RpbmcqIGRldGVjdGVkRW5jb2Rp
bmcpCit7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpCisgICAgVU5VU0VEX1BBUkFNKGxlbikKKyAg
ICBVTlVTRURfUEFSQU0oaGludEVuY29kaW5nTmFtZSkKKworICAgICpkZXRlY3RlZEVuY29kaW5n
ID0gVGV4dEVuY29kaW5nKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBXZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gNDE5MTEpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDA5LTAzLTIzICBKdW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBXZWJQcmVmZXJlbmNlcyBmb3IgZW5jb2RpbmcgYXV0b2RldGVjdGlvbiBvbiBNYWMuCisgIAor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MgorCisg
ICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0
aWFsaXplXSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9y
XSk6CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHNldFVzZXNFbmNvZGluZ0RldGVjdG9yOl0p
OgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5n
ZWROb3RpZmljYXRpb246XSk6CisKIDIwMDktMDMtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgICogV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IuaDogRml4ZWQgYSBz
cGVsbGluZyBlcnJvciBpbiBhIGNvbW1lbnQuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZUtleXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQAogI2RlZmluZSBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5
IEAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250
U2l6ZVByZWZlcmVuY2VLZXkgQCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUg
V2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWUiCisjZGVmaW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJl
ZmVyZW5jZUtleSBAIldlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRV
c2VyU3R5bGVTaGVldEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRF
bmFibGVkUHJlZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlv
blByZWZlcmVuY2VLZXkgQCJXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtl
eSIKICNkZWZpbmUgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJX
ZWJLaXRTaG91bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSIKSW5kZXg6IFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDQxOTExKQorKysgV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcg
QEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBAIjE2
IiwgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGb250U2l6ZVByZWZlcmVu
Y2VLZXksCiAgICAgICAgIEAiMTMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RGVm
YXVsdEZpeGVkRm9udFNpemVQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIklTTy04ODU5LTEiLCAg
ICAgICAgICAgICAgICAgIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtl
eSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2VzRW5j
b2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
Qm9vbDpOT10sICAgV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAg
ICAgICAgQCIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uUHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29s
Ok5PXSwgICBXZWJLaXRTaG91bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSwKQEAgLTg2
NCw2ICs4NjUsMTYgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQog
ICAgIF9wcml2YXRlLT5hdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWwgPSBhdXRvbWF0aWNh
bGx5RGV0ZWN0c0NhY2hlTW9kZWw7CiB9CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3IK
K3sKKyAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0VXNlc0VuY29kaW5n
RGV0ZWN0b3JQcmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXRVc2VzRW5jb2RpbmdEZXRl
Y3RvcjooQk9PTClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTogZmxhZyBmb3JLZXk6
IFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKEJPT0wp
aXNXZWJTZWN1cml0eUVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktl
eTogV2ViS2l0V2ViU2VjdXJpdHlFbmFibGVkUHJlZmVyZW5jZUtleV07CkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MTkxMSkKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNiArNTksOSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3Zl
ZE5vCiAtIChCT09MKWFwcGxpY2F0aW9uQ2hyb21lTW9kZUVuYWJsZWQ7CiAtICh2b2lkKXNldEFw
cGxpY2F0aW9uQ2hyb21lTW9kZUVuYWJsZWQ6KEJPT0wpZmxhZzsKIAorLSAoQk9PTCl1c2VzRW5j
b2RpbmdEZXRlY3RvcjsKKy0gKHZvaWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxh
ZzsKKwogLSAoQk9PTClyZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOwogLSAodm9p
ZClzZXRSZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOihCT09MKWZsYWc7CiAKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE2LDYgKzEzMTYsNyBAQCBzdGF0
aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DCiAgICAgc2V0dGluZ3MtPnNldERl
ZmF1bHRGaXhlZEZvbnRTaXplKFtwcmVmZXJlbmNlcyBkZWZhdWx0Rml4ZWRGb250U2l6ZV0pOwog
ICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoW3ByZWZlcmVuY2VzIGRlZmF1bHRGb250
U2l6ZV0pOwogICAgIHNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShbcHJlZmVy
ZW5jZXMgZGVmYXVsdFRleHRFbmNvZGluZ05hbWVdKTsKKyAgICBzZXR0aW5ncy0+c2V0VXNlc0Vu
Y29kaW5nRGV0ZWN0b3IoW3ByZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk7CiAgICAg
c2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBmYW50YXN5Rm9udEZh
bWlseV0pOwogICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZp
eGVkRm9udEZhbWlseV0pOwogICAgIHNldHRpbmdzLT5zZXRGb3JjZUZUUERpcmVjdG9yeUxpc3Rp
bmdzKFtwcmVmZXJlbmNlcyBfZm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5nc10pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28897</attachid>
            <date>2009-03-24 12:25:11 -0700</date>
            <delta_ts>2009-03-25 16:30:43 -0700</delta_ts>
            <desc>updated patch (the same as the previous one except for a 1-line chnage)</desc>
            <filename>16482.patch.6e.1</filename>
            <type>text/plain</type>
            <size>52877</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDMtMjQgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIGVuY29kaW5nIGRldGVjdG9yICdob29rJyB0byBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3RvciogdG8gcGxhdGZvcm0vdGV4dC4gQ3VycmVu
dGx5LAorICAgICAgICAgICB0aGUgb25seSBpbXBsZW1lbnRhdGlvbiB1c2VzIElDVS4gU3R1YiBp
cyBhZGRlZCBmb3IgCisgICAgICAgICAgIHBvcnRzIHRoYXQgZG8gbm90IHVzZSBJQ1UgYW5kIGEg
YnVpbGQgb24gVGlnZXIuIE1hYyBPUyAKKyAgICAgICAgICAgVGlnZXIgY29tZXMgd2l0aCBJQ1Ug
My4yIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBkZXRlY3Rvci4KKyAgICAgICAgIC0g
YWRkIHVjc2RldC5oIHRvIGljdS91bmljb2RlIGZvciBwb3J0cyB1c2luZyBJQ1UuCisKKyAgICAg
ICAgTGF5b3V0IHRlc3RzIHdpbGwgYmUgYWRkZWQgb25jZSBidWcgMjA1MzQgaXMgZml4ZWQgYW5k
IGEgV2ViUHJlZmVyZW5jZQorICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBpbiB0ZXN0X3NoZWxs
LiBXaXRoIFVzZXNFbmNvZGluZ0RldGVjdG9yIG9mZiwgdGhlcmUKKyAgICAgICAgaXMgbm8gY2hh
bmdlIHRvIHRlc3QuIAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZS5iYXNlLmV4cAorICAgICAgICAqIGljdS91bmljb2RlL3Vjc2RldC5oCisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojp3cml0ZSk6IHR1cm4gb24vb2ZmIGVuY29kaW5nIGRldGVjdG9yIGRlcGVuZGluZyBvbiBTZXR0
aW5ncyBhbmQgc2V0IGhpbnREZWNvZGVyIG9mIFRleHRSZXNvdXJjZURlY29kZXIgdG8gdGhlIHBh
cmVudCBmcmFtZSBkZWNvZGVyIGlmIG5lY2Vzc2FyeSBhbmQgdGhlIHNlY3VyaXR5IHBvbGljeSBh
bGxvd3MgcmVmZXJpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBkZWNvZGVyLgorICAgICAgICAqIGxv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNv
dXJjZURlY29kZXI6OlRleHRSZXNvdXJjZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KTogYWRkIGNoZWNrIGZvciBFbmNv
ZGluZ0Zyb21QYXJlbnRGcmFtZQorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rl
cjo6Y2hlY2tGb3JIZWFkQ2hhcnNldCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVz
b3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
ZXNvdXJjZURlY29kZXI6OmRlY29kZSk6IGNhbGwgZW5jb2RpbmcgZGV0ZWN0b3IgaWYgc2hvdWxk
QXV0b0RldGVjdCByZXR1cm5zIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpmbHVzaCk6IGlmIGVuY29kaW5nIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IG5vdywgY2Fs
bCBlbmNvZGluZyBkZXRlY3RvciBpZiBzaG91bGRBdXRvRGV0ZWN0IHJldHVybnMgdHJ1ZS4KKyAg
ICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFJlc291cmNlRGVjb2Rlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
ZXRIaW50RGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6aGludEVuY29k
aW5nTmFtZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6IGFkZCBtX3VzZXNFbmNvZGlu
Z0RldGVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKToKKyAgICAgICAg
KiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6dXNlc0VuY29k
aW5nRGV0ZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rv
cklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToKKwogMjAwOS0wMy0y
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQxOTExKQorKysgV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQ5NCw2ICsxNDk0LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dERpcmVjdGlv
bi5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdSZWdpc3RyeS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdp
c3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dFN0cmVhbS5jcHAgXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNv
bnRyb2xsZXI5c2VsZWN0CiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXJDMUVQTlNf
NUZyYW1lRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjVmbHVzaEV2CiBfX1pO
N1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVjb2RlRVBLY20KLV9fWk43V2ViQ29yZTE5
VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEyVGV4dEVuY29kaW5nRQor
X19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOU182U3RyaW5nRVJLTlNfMTJU
ZXh0RW5jb2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19a
TjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
RXgKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyMTZjbGVhckNvbnRleHRNZW51
RXYKQEAgLTU5OSw2ICs1OTksNyBAQCBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNldFNhbnNTZXJp
ZkZvbnRGCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNldFNob3dzVVJMc0luVG9vbFRpcHNFYgog
X19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXREZWZhdWx0Rml4ZWRGb250U2l6ZUVpCiBfX1pON1dl
YkNvcmU4U2V0dGluZ3MyM3NldEVkaXRhYmxlTGlua0JlaGF2aW9yRU5TXzIwRWRpdGFibGVMaW5r
QmVoYXZpb3JFCitfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldFVzZXNFbmNvZGluZ0RldGVjdG9y
RWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0QXBwbGljYXRpb25DaHJvbWVNb2RlRWIKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlRWIKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZEViCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTYyLDYg
Kzk2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjVXNlckRl
ZmluZWQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKKyAgICBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
UmVnaXN0cnkuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwIFwKICAgICBw
bGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuc2Nv
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZpc2lvbiA0MTkxMSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtODM5LDYgKzgzOSw3
IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCcsCisgICAgJ3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwJywKICAgICAncGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAnLAogICAgICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJl
YW0uY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwJywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNv
dXJjZXMuYmtsCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
CSh3b3JraW5nIGNvcHkpCkBAIC03NzksNiArNzc5LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRo
ZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAogICAg
ICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKKyAgICAgICAgcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNw
cAogICAgICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY3NTcsNiArNjc1
NywxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQxOTExKQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQzMDEsNiArNDMwMSw4IEBACiAJCUMwOTE1ODhFMERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1
YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMDkxNTg4ODBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXIuY3BwICovOyB9OwogCQlDMDkxNTg4RjBEQjQyMDkyMDBFNTVBRjQgLyog
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMwOTE1ODg5MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRp
bmVkT2JqZWN0V3JhcHBlci5oICovOyB9OwogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyog
SlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3Bw
ICovOyB9OworCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAq
LzsgfTsKKwkJQzEwNURBNjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2
MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKIAkJQzZE
NzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgy
RTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFF
NDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEw
MDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovOyB9OwogCQlEMDVDRUQy
OTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwpAQCAtOTE1MSw2ICs5MTUzLDggQEAK
IAkJQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzA5MTU4ODkw
REI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBK
U0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURB
NjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURBNjMwRjNBQTZCODAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0
QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzMyLDYg
KzEzMzM2LDggQEAKIAkJCQlCMkMzREExNTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dERpcmVjdGlv
bi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3Bw
ICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuaCAqLywK
KwkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAq
LywKKwkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJ
Q1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RBMUEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRT
dHJlYW0uY3BwICovLApAQCAtMTY3MDIsNiArMTY3MDgsNyBAQAogCQkJCUIyQzNEQTQ1MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY5Mzgw
MjBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkMzREE0NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ5MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2Rp
bmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzQTE0MzAwQjdEMTg4NjAwQTUzRkZE
IC8qIFRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTgwOTlFNjQ5MjAwNTZF
NTgxIC8qIFRleHRHcmFudWxhcml0eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODczMiw2ICsxODcz
OSw3IEBACiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY5MzgwMTBBMTExMDBBMDBDMTI3RkUg
LyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzEwNURBNjIw
RjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzNBMTQyRTBCN0QxODg2MDBBNTNGRkQgLyogVGV4
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFCMDk5RTY0OTIwMDU2RTU4MSAv
KiBUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2ljdS91bmlj
b2RlL3Vjc2RldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAo
QykgMjAwNS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiAgIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAqICAgZmlsZSBuYW1lOiAgdWNzZGV0LmgKKyAqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyAq
ICAgaW5kZW50YXRpb246NAorICoKKyAqICAgY3JlYXRlZCBvbjogMjAwNUF1ZzA0CisgKiAgIGNy
ZWF0ZWQgYnk6IEFuZHkgSGVuaW5nZXIKKyAqCisgKiAgIElDVSBDaGFyYWN0ZXIgU2V0IERldGVj
dGlvbiwgQVBJIGZvciBDCisgKgorICogICBEcmFmdCB2ZXJzaW9uIDE4IE9jdCAyMDA1CisgKgor
ICovCisKKyNpZm5kZWYgX19VQ1NERVRfSAorI2RlZmluZSBfX1VDU0RFVF9ICisKKyNpbmNsdWRl
ICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgorI2luY2x1
ZGUgInVuaWNvZGUvdWVudW0uaCIKKworLyoqCisgKiBcZmlsZSAKKyAqIFxicmllZiBDIEFQSTog
Q2hhcnNldCBEZXRlY3Rpb24gQVBJCisgKgorICogVGhpcyBBUEkgcHJvdmlkZXMgYSBmYWNpbGl0
eSBmb3IgZGV0ZWN0aW5nIHRoZQorICogY2hhcnNldCBvciBlbmNvZGluZyBvZiBjaGFyYWN0ZXIg
ZGF0YSBpbiBhbiB1bmtub3duIHRleHQgZm9ybWF0LgorICogVGhlIGlucHV0IGRhdGEgY2FuIGJl
IGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgKiA8cD4KKyAqIENoYXJhY3RlciBzZXQgZGV0ZWN0
aW9uIGlzIGF0IGJlc3QgYW4gaW1wcmVjaXNlIG9wZXJhdGlvbi4gIFRoZSBkZXRlY3Rpb24KKyAq
IHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGlkZW50aWZ5IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBt
YXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9mIHRoZSBieXRlIGRhdGEsIGJ1dCB0aGUg
cHJvY2VzcyBpcyBwYXJ0bHkgc3RhdGlzdGljYWwgaW4gbmF0dXJlLCBhbmQKKyAqIHRoZSByZXN1
bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBhbHdheXMgYmUgY29ycmVjdC4KKyAqIDxwPgor
ICogRm9yIGJlc3QgYWNjdXJhY3kgaW4gY2hhcnNldCBkZXRlY3Rpb24sIHRoZSBpbnB1dCBkYXRh
IHNob3VsZCBiZSBwcmltYXJpbHkKKyAqIGluIGEgc2luZ2xlIGxhbmd1YWdlLCBhbmQgYSBtaW5p
bXVtIG9mIGEgZmV3IGh1bmRyZWQgYnl0ZXMgd29ydGggb2YgcGxhaW4gdGV4dAorICogaW4gdGhl
IGxhbmd1YWdlIGFyZSBuZWVkZWQuICBUaGUgZGV0ZWN0aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0
IHRvCisgKiBpZ25vcmUgaHRtbCBvciB4bWwgc3R5bGUgbWFya3VwIHRoYXQgY291bGQgb3RoZXJ3
aXNlIG9ic2N1cmUgdGhlIGNvbnRlbnQuCisgKi8KKyAKKworc3RydWN0IFVDaGFyc2V0RGV0ZWN0
b3I7CisvKioKKyAgKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgY2hhcnNldCBkZXRlY3Rvcgor
ICAqIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVmIHN0cnVjdCBVQ2hhcnNldERldGVjdG9y
IFVDaGFyc2V0RGV0ZWN0b3I7CisKK3N0cnVjdCBVQ2hhcnNldE1hdGNoOworLyoqCisgICogIE9w
YXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgbWF0Y2ggdGhhdCB3YXMgaWRlbnRpZmllZAor
ICAqICBmcm9tIGEgY2hhcnNldCBkZXRlY3Rpb24gb3BlcmF0aW9uLgorICAqICBAZHJhZnQgSUNV
IDMuNgorICAqLwordHlwZWRlZiBzdHJ1Y3QgVUNoYXJzZXRNYXRjaCBVQ2hhcnNldE1hdGNoOwor
CisvKioKKyAgKiAgT3BlbiBhIGNoYXJzZXQgZGV0ZWN0b3IuCisgICoKKyAgKiAgQHBhcmFtIHN0
YXR1cyBBbnkgZXJyb3IgY29uZGl0aW9ucyBvY2N1cnJpbmcgZHVyaW5nIHRoZSBvcGVuCisgICog
ICAgICAgICAgICAgICAgb3BlcmF0aW9uIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFi
bGUuCisgICogIEByZXR1cm4gdGhlIG5ld2x5IG9wZW5lZCBjaGFyc2V0IGRldGVjdG9yLgorICAq
ICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCBVQ2hhcnNldERldGVjdG9yICogVV9FWFBP
UlQyCit1Y3NkZXRfb3BlbihVRXJyb3JDb2RlICAgKnN0YXR1cyk7CisKKy8qKgorICAqIENsb3Nl
IGEgY2hhcnNldCBkZXRlY3Rvci4gIEFsbCBzdG9yYWdlIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2Vz
CisgICogICBvd25lZCBieSB0aGlzIGNoYXJzZXQgZGV0ZWN0b3Igd2lsbCBiZSByZWxlYXNlZC4g
IEZhaWx1cmUgdG8KKyAgKiAgIGNsb3NlIGEgY2hhcnNldCBkZXRlY3RvciB3aGVuIGZpbmlzaGVk
IHdpdGggaXQgY2FuIHJlc3VsdCBpbgorICAqICAgbWVtb3J5IGxlYWtzIGluIHRoZSBhcHBsaWNh
dGlvbi4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUg
Y2xvc2VkLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCB2b2lkIFVfRVhQT1JU
MgordWNzZGV0X2Nsb3NlKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QpOworCisvKioKKyAgKiBTZXQg
dGhlIGlucHV0IGJ5dGUgZGF0YSB3aG9zZSBjaGFyc2V0IGlzIHRvIGRldGVjdGVkLgorICAqCisg
ICogT3duZXJzaGlwIG9mIHRoZSBpbnB1dCAgdGV4dCBieXRlIGFycmF5IHJlbWFpbnMgd2l0aCB0
aGUgY2FsbGVyLgorICAqIFRoZSBpbnB1dCBzdHJpbmcgbXVzdCBub3QgYmUgYWx0ZXJlZCBvciBk
ZWxldGVkIHVudGlsIHRoZSBjaGFyc2V0CisgICogZGV0ZWN0b3IgaXMgZWl0aGVyIGNsb3NlZCBv
ciByZXNldCB0byByZWZlciB0byBkaWZmZXJlbnQgaW5wdXQgdGV4dC4KKyAgKgorICAqIEBwYXJh
bSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAgKiBAcGFyYW0gdGV4
dEluIHRoZSBpbnB1dCB0ZXh0IG9mIHVua25vd24gZW5jb2RpbmcuICAgLgorICAqIEBwYXJhbSBs
ZW4gICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgdGV4dCwgb3IgLTEgaWYgdGhlIHRleHQKKyAg
KiAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICAqIEBwYXJhbSBzdGF0dXMgYW55
IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAg
KgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RSQUZUIHZvaWQgVV9FWFBPUlQyCit1Y3Nk
ZXRfc2V0VGV4dChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBjb25zdCBjaGFyICp0ZXh0SW4sIGlu
dDMyX3QgbGVuLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKiBTZXQgdGhlIGRlY2xhcmVk
IGVuY29kaW5nIGZvciBjaGFyc2V0IGRldGVjdGlvbi4KKyAqICBUaGUgZGVjbGFyZWQgZW5jb2Rp
bmcgb2YgYW4gaW5wdXQgdGV4dCBpcyBhbiBlbmNvZGluZyBvYnRhaW5lZAorICogIGJ5IHRoZSB1
c2VyIGZyb20gYW4gaHR0cCBoZWFkZXIgb3IgeG1sIGRlY2xhcmF0aW9uIG9yIHNpbWlsYXIgc291
cmNlIHRoYXQKKyAqICBjYW4gYmUgcHJvdmlkZWQgYXMgYW4gYWRkaXRpb25hbCBoaW50IHRvIHRo
ZSBjaGFyc2V0IGRldGVjdG9yLgorICoKKyAqICBIb3cgYW5kIHdoZXRoZXIgdGhlIGRlY2xhcmVk
IGVuY29kaW5nIHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhlCisgKiAgZGV0ZWN0aW9uIHByb2Nlc3Mg
aXMgVEJELgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8g
YmUgdXNlZC4KKyAqIEBwYXJhbSBlbmNvZGluZyAgYW4gZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50
IGRhdGEgb2J0YWluZWQgZnJvbQorICogICAgICAgICAgICAgICAgICBhIGhlYWRlciBvciBkZWNs
YXJhdGlvbiBvciBvdGhlciBzb3VyY2Ugb3V0c2lkZQorICogICAgICAgICAgICAgICAgICBvZiB0
aGUgYnl0ZSBkYXRhIGl0c2VsZi4KKyAqIEBwYXJhbSBsZW5ndGggICAgdGhlIGxlbmd0aCBvZiB0
aGUgZW5jb2RpbmcgbmFtZSwgb3IgLTEgaWYgdGhlIG5hbWUgc3RyaW5nCisgKiAgICAgICAgICAg
ICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICogQHBhcmFtIHN0YXR1cyAgICBhbnkgZXJyb3Ig
Y29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICoKKyAqIEBk
cmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgdm9pZCBVX0VYUE9SVDIKK3Vjc2RldF9zZXREZWNs
YXJlZEVuY29kaW5nKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIGNvbnN0IGNoYXIgKmVuY29kaW5n
LCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAqIFJldHVy
biB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgc3VwcGxpZWQgaW5wdXQgZGF0YS4K
KyAqIAorICogTm90ZSB0aG91Z2gsIHRoYXQgYmVjYXVzZSB0aGUgZGV0ZWN0aW9uIAorICogb25s
eSBsb29rcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGRhdGEsCisgKiB0aGVyZSBpcyBhIHBv
c3NpYmlsaXR5IHRoYXQgdGhlIHJldHVybmVkIGNoYXJzZXQgd2lsbCBmYWlsIHRvIGhhbmRsZQor
ICogdGhlIGZ1bGwgc2V0IG9mIGlucHV0IGRhdGEuCisgKiA8cD4KKyAqIFRoZSByZXR1cm5lZCBV
Q2hhcnNldE1hdGNoIG9iamVjdCBpcyBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAq
IEl0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBkZXRlY3RvciBpbnB1dCBpcyByZXNldCwg
b3IgdW50aWwKKyAqIHRoZSBkZXRlY3RvciBpcyBjbG9zZWQuCisgKiA8cD4KKyAqIFRoZSBmdW5j
dGlvbiB3aWxsIGZhaWwgaWYKKyAqICA8dWw+CisgKiAgICA8bGk+bm8gY2hhcnNldCBhcHBlYXJz
IHRvIG1hdGNoIHRoZSBkYXRhLjwvbGk+CisgKiAgICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVl
biBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqCisgKiBAcGFyYW0gdWNzZCAgICAgIHRoZSBj
aGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBAcGFyYW0gc3RhdHVzICAgIGFueSBlcnJv
ciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiBAcmV0
dXJuICAgICAgICAgIGEgVUNoYXJzZXRNYXRjaCAgcmVwcmVzZW50aW5nIHRoZSBiZXN0IG1hdGNo
aW5nIGNoYXJzZXQsCisgKiAgICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgbm8gY2hhcnNldCBt
YXRjaGVzIHRoZSBieXRlIGRhdGEuCisgKgorICogQGRyYWZ0IElDVSAzLjYKKyAqLworVV9EUkFG
VCBjb25zdCBVQ2hhcnNldE1hdGNoICogVV9FWFBPUlQyCit1Y3NkZXRfZGV0ZWN0KFVDaGFyc2V0
RGV0ZWN0b3IgKnVjc2QsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisgICAgCisKKy8qKgorICogIEZp
bmQgYWxsIGNoYXJzZXQgbWF0Y2hlcyB0aGF0IGFwcGVhciB0byBiZSBjb25zaXN0ZW50IHdpdGgg
dGhlIGlucHV0LAorICogIHJldHVybmluZyBhbiBhcnJheSBvZiByZXN1bHRzLiAgVGhlIHJlc3Vs
dHMgYXJlIG9yZGVyZWQgd2l0aCB0aGUKKyAqICBiZXN0IHF1YWxpdHkgbWF0Y2ggZmlyc3QuCisg
KgorICogIEJlY2F1c2UgdGhlIGRldGVjdGlvbiBvbmx5IGxvb2tzIGF0IGEgbGltaXRlZCBhbW91
bnQgb2YgdGhlCisgKiAgaW5wdXQgYnl0ZSBkYXRhLCBzb21lIG9mIHRoZSByZXR1cm5lZCBjaGFy
c2V0cyBtYXkgZmFpbCB0byBoYW5kbGUKKyAqICB0aGUgYWxsIG9mIGlucHV0IGRhdGEuCisgKiAg
PHA+CisgKiAgVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0Y2ggb2JqZWN0cyBhcmUgb3duZWQgYnkg
dGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiAgVGhleSB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0
aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVkCisgKiAgCisgKiA8cD4KKyAqIFJldHVy
biBhbiBlcnJvciBpZiAKKyAqICA8dWw+CisgKiAgICA8bGk+bm8gY2hhcnNldHMgYXBwZWFyIHRv
IG1hdGNoIHRoZSBpbnB1dCBkYXRhLjwvbGk+CisgKiAgICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMg
YmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqIAorICogQHBhcmFtIHVjc2QgICAgICAg
ICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBtYXRjaGVzRm91
bmQgIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgc2V0IHRvIHRoZQorICogICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJzZXRzIGlkZW50aWZpZWQgdGhhdCBhcmUg
Y29uc2lzdGVudCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXQgZGF0YS4g
IE91dHB1dCBvbmx5LgorICogQHBhcmFtIHN0YXR1cyAgICAgICAgYW55IGVycm9yIGNvbmRpdGlv
bnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqIEByZXR1cm4gICAgICAg
ICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBVQ2hhclNldE1hdGNo
IG9iamVjdHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5LCBhbmQgdGhlIFVD
aGFyU2V0TWF0Y2ggaW5zdGFuY2VzIHRvIHdoaWNoIGl0IHJlZmVycywKKyAqICAgICAgICAgICAg
ICAgICAgICAgIGFyZSBvd25lZCBieSB0aGUgVUNoYXJzZXREZXRlY3RvciwgYW5kIHdpbGwgcmVt
YWluIHZhbGlkIHVudGlsCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZGV0ZWN0b3IgaXMg
Y2xvc2VkIG9yIG1vZGlmaWVkLgorICogQGRyYWZ0IElDVSAzLjQKKyAqLworVV9EUkFGVCBjb25z
dCBVQ2hhcnNldE1hdGNoICoqIFVfRVhQT1JUMgordWNzZGV0X2RldGVjdEFsbChVQ2hhcnNldERl
dGVjdG9yICp1Y3NkLCBpbnQzMl90ICptYXRjaGVzRm91bmQsIFVFcnJvckNvZGUgKnN0YXR1cyk7
CisKKworCisvKioKKyAqICBHZXQgdGhlIG5hbWUgb2YgdGhlIGNoYXJzZXQgcmVwcmVzZW50ZWQg
YnkgYSBVQ2hhcnNldE1hdGNoLgorICoKKyAqICBUaGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVk
IG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxs
IHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoK
KyAqICBUaGUgbmFtZSByZXR1cm5lZCBpcyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIElDVSBj
b252ZXJzaW9uIEFQSXMuCisgKgorICogIEBwYXJhbSB1Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNo
IG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVw
b3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICogIEByZXR1cm4gICAgICAgIFRoZSBuYW1l
IG9mIHRoZSBtYXRjaGluZyBjaGFyc2V0LgorICoKKyAqICBAZHJhZnQgSUNVIDMuNgorICovCitV
X0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vjc2RldF9nZXROYW1lKGNvbnN0IFVDaGFy
c2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogIEdldCBhIGNv
bmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgcXVhbGl0eSBvZiB0aGUgbWF0Y2ggb2YgdGhlIGJ5dGUK
KyAqICBkYXRhIHdpdGggdGhlIGNoYXJzZXQuICBDb25maWRlbmNlIG51bWJlcnMgcmFuZ2UgZnJv
bSB6ZXJvIHRvIDEwMCwKKyAqICB3aXRoIDEwMCByZXByZXNlbnRpbmcgY29tcGxldGUgY29uZmlk
ZW5jZSBhbmQgemVybyByZXByZXNlbnRpbmcKKyAqICBubyBjb25maWRlbmNlLgorICoKKyAqICBU
aGUgY29uZmlkZW5jZSB2YWx1ZXMgYXJlIHNvbWV3aGF0IGFyYml0cmFyeS4gIFRoZXkgZGVmaW5l
IGFuCisgKiAgYW4gb3JkZXJpbmcgd2l0aGluIHRoZSByZXN1bHRzIGZvciBhbnkgc2luZ2xlIGRl
dGVjdGlvbiBvcGVyYXRpb24KKyAqICBidXQgYXJlIG5vdCBnZW5lcmFsbHkgY29tcGFyYWJsZSBi
ZXR3ZWVuIHRoZSByZXN1bHRzIGZvciBkaWZmZXJlbnQgaW5wdXQuCisgKgorICogIEEgY29uZmlk
ZW5jZSB2YWx1ZSBvZiB0ZW4gZG9lcyBoYXZlIGEgZ2VuZXJhbCBtZWFuaW5nIC0gaXQgaXMgdXNl
ZAorICogIGZvciBjaGFyc2V0cyB0aGF0IGNhbiByZXByZXNlbnQgdGhlIGlucHV0IGRhdGEsIGJ1
dCBmb3Igd2hpY2ggdGhlcmUKKyAqICBpcyBubyBvdGhlciBpbmRpY2F0aW9uIHRoYXQgc3VnZ2Vz
dHMgdGhhdCB0aGUgY2hhcnNldCBpcyB0aGUgY29ycmVjdCBvbmUuCisgKiAgUHVyZSA3IGJpdCBB
U0NJSSBkYXRhLCBmb3IgZXhhbXBsZSwgaXMgY29tcGF0aWJsZSB3aXRoIGEKKyAqICBncmVhdCBt
YW55IGNoYXJzZXRzLCBtb3N0IG9mIHdoaWNoIHdpbGwgYXBwZWFyIGFzIHBvc3NpYmxlIG1hdGNo
ZXMKKyAqICB3aXRoIGEgY29uZmlkZW5jZSBvZiAxMC4KKyAqCisgKiAgQHBhcmFtIHVjc20gICAg
VGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBwYXJhbSBzdGF0dXMgIEFueSBlcnJvciBj
b25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgKiAgQHJldHVy
biAgICAgICAgQSBjb25maWRlbmNlIG51bWJlciBmb3IgdGhlIGNoYXJzZXQgbWF0Y2guCisgKgor
ICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgaW50MzJfdCBVX0VYUE9SVDIKK3Vjc2Rl
dF9nZXRDb25maWRlbmNlKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisKKy8qKgorICogIEdldCB0aGUgUkZDIDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdl
IG9mIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqICBUaGUgQ2hhcnNldCBEZXRlY3Rpb24gc2Vydmlj
ZSBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGRldGVjdGluZworICogIGNoYXJzZXRzLCBub3Qg
bGFuZ3VhZ2UuICBGb3Igc29tZSwgYnV0IG5vdCBhbGwsIGNoYXJzZXRzLCBhIGxhbmd1YWdlIGlz
CisgKiAgaWRlbnRpZmllZCBhcyBhIGJ5cHJvZHVjdCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3Ms
IGFuZCB0aGF0IGlzIHdoYXQKKyAqICBpcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLgorICoK
KyAqICBDQVVUSU9OOgorICogICAgMS4gIExhbmd1YWdlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFp
bGFibGUgZm9yIGlucHV0IGRhdGEgZW5jb2RlZCBpbgorICogICAgICAgIGFsbCBjaGFyc2V0cy4g
SW4gcGFydGljdWxhciwgbm8gbGFuZ3VhZ2UgaXMgaWRlbnRpZmllZAorICogICAgICAgIGZvciBV
VEYtOCBpbnB1dCBkYXRhLgorICoKKyAqICAgIDIuICBDbG9zZWx5IHJlbGF0ZWQgbGFuZ3VhZ2Vz
IG1heSBzb21ldGltZXMgYmUgY29uZnVzZWQuCisgKgorICogIElmIG1vcmUgYWNjdXJhdGUgbGFu
Z3VhZ2UgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLCBhIGxpbmd1aXN0aWMKKyAqICBhbmFseXNpcyBw
YWNrYWdlIHNob3VsZCBiZSB1c2VkLgorICoKKyAqICBUaGUgc3RvcmFnZSBmb3IgdGhlIHJldHVy
bmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3
aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRNYXRjaAorICogIGlzIHZhbGlkLgor
ICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNldCBtYXRjaCBvYmplY3QuCisgKiAgQHBh
cmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhp
cyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBUaGUgUkZDIDMwNjYgY29kZSBmb3IgdGhl
IGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLCBvcgorICogICAgICAgICAgICAgICAgIGFuIGVt
cHR5IHN0cmluZyBpZiB0aGUgbGFuZ3VhZ2UgY291bGQgbm90IGJlIGRldGVybWluZWQuCisgKgor
ICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgY29uc3QgY2hhciAqIFVfRVhQT1JUMgor
dWNzZGV0X2dldExhbmd1YWdlKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUg
KnN0YXR1cyk7CisKKworLyoqCisgICogIEdldCB0aGUgZW50aXJlIGlucHV0IHRleHQgYXMgYSBV
Q2hhciBzdHJpbmcsIHBsYWNpbmcgaXQgaW50bworICAqICBhIGNhbGxlci1zdXBwbGllZCBidWZm
ZXIuICBBIHRlcm1pbmF0aW5nCisgICogIE5VTCBjaGFyYWN0ZXIgd2lsbCBiZSBhcHBlbmRlZCB0
byB0aGUgYnVmZmVyIGlmIHNwYWNlIGlzIGF2YWlsYWJsZS4KKyAgKgorICAqICBUaGUgbnVtYmVy
IG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdGVybWlu
YXRpbmcKKyAgKiAgTlVMLCBpcyByZXR1cm5lZC4gCisgICoKKyAgKiAgSWYgdGhlIHN1cHBsaWVk
IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgdG8gaG9sZCB0aGUgb3V0cHV0LAorICAq
ICB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhcmUgdW5kZWZpbmVkLiAgVGhlIGZ1bGwgb3V0
cHV0IHN0cmluZyBsZW5ndGgKKyAgKiAgKGluIFVDaGFycykgaXMgcmV0dXJuZWQgYXMgYWx3YXlz
LCBhbmQgY2FuIGJlIHVzZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIKKyAgKiAgb2YgdGhlIGNvcnJl
Y3Qgc2l6ZS4KKyAgKgorICAqCisgICogQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2gg
b2JqZWN0LgorICAqIEBwYXJhbSBidWYgICAgIEEgVUNoYXIgYnVmZmVyIHRvIGJlIGZpbGxlZCB3
aXRoIHRoZSBjb252ZXJ0ZWQgdGV4dCBkYXRhLgorICAqIEBwYXJhbSBjYXAgICAgIFRoZSBjYXBh
Y2l0eSBvZiB0aGUgYnVmZmVyIGluIFVDaGFycy4KKyAgKiBAcGFyYW0gc3RhdHVzICBBbnkgZXJy
b3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICAqIEBy
ZXR1cm4gICAgICAgIFRoZSBudW1iZXIgb2YgVUNoYXJzIGluIHRoZSBvdXRwdXQgc3RyaW5nLgor
ICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1VfRFJBRlQgIGludDMyX3QgVV9FWFBPUlQy
Cit1Y3NkZXRfZ2V0VUNoYXJzKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sCisgICAgICAgICAg
ICAgICAgIFVDaGFyICpidWYsIGludDMyX3QgY2FwLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisK
KworLyoqCisgICogIEdldCBhbiBpdGVyYXRvciBvdmVyIHRoZSBzZXQgb2YgYWxsIGRldGVjdGFi
bGUgY2hhcnNldHMgLSAKKyAgKiAgb3ZlciB0aGUgY2hhcnNldHMgdGhhdCBhcmUga25vd24gdG8g
dGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZpY2UuCisgICoKKyAgKiAgVGhlIHJldHVy
bmVkIFVFbnVtZXJhdGlvbiBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5hbWVzIG9mCisgICogIHRo
ZSBjaGFyc2V0cy4KKyAgKgorICAqICBUaGUgc3RhdGUgb2YgdGhlIENoYXJzZXQgZGV0ZWN0b3Ig
dGhhdCBpcyBwYXNzZWQgaW4gZG9lcyBub3QKKyAgKiAgYWZmZWN0IHRoZSByZXN1bHQgb2YgdGhp
cyBmdW5jdGlvbiwgYnV0IHJlcXVpcmluZyBhIHZhbGlkLCBvcGVuCisgICogIGNoYXJzZXQgZGV0
ZWN0b3IgYXMgYSBwYXJhbWV0ZXIgaW5zdXJlcyB0aGF0IHRoZSBjaGFyc2V0IGRldGVjdGlvbgor
ICAqICBzZXJ2aWNlIGhhcyBiZWVuIHNhZmVseSBpbml0aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVx
dWlyZWQgZGV0ZWN0aW9uCisgICogIGRhdGEgaXMgYXZhaWxhYmxlLgorICAqCisgICogIEBwYXJh
bSB1Y3NkIGEgQ2hhcnNldCBkZXRlY3Rvci4KKyAgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9y
IGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJl
dHVybiBhbiBpdGVyYXRvciBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBkZXRlY3RhYmxlIGNoYXJz
ZXQgbmFtZXMuCisgICogIEBkcmFmdCBJQ1UgMy42CisgICovCisKK1VfRFJBRlQgIFVFbnVtZXJh
dGlvbiAqIFVfRVhQT1JUMgordWNzZGV0X2dldEFsbERldGVjdGFibGVDaGFyc2V0cyhjb25zdCBV
Q2hhcnNldERldGVjdG9yICp1Y3NkLCAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAg
KiAgVGVzdCB3aGV0aGVyIGlucHV0IGZpbHRlcmluZyBpcyBlbmFibGVkIGZvciB0aGlzIGNoYXJz
ZXQgZGV0ZWN0b3IuCisgICogIElucHV0IGZpbHRlcmluZyByZW1vdmVzIHRleHQgdGhhdCBhcHBl
YXJzIHRvIGJlIEhUTUwgb3IgeG1sCisgICogIG1hcmt1cCBmcm9tIHRoZSBpbnB1dCBiZWZvcmUg
YXBwbHlpbmcgdGhlIGNvZGUgcGFnZSBkZXRlY3Rpb24KKyAgKiAgaGV1cmlzdGljcy4KKyAgKgor
ICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gY2hlY2suCisgICogIEBy
ZXR1cm4gVFJVRSBpZiBmaWx0ZXJpbmcgaXMgZW5hYmxlZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjQK
KyAgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgordWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFi
bGVkKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QpOworCisKKy8qKgorICogRW5hYmxlIGZp
bHRlcmluZyBvZiBpbnB1dCB0ZXh0LiBJZiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwKKyAqIHRleHQg
d2l0aGluIGFuZ2xlIGJyYWNrZXRzICgiPCIgYW5kICI+Iikgd2lsbCBiZSByZW1vdmVkCisgKiBi
ZWZvcmUgZGV0ZWN0aW9uLCB3aGljaCB3aWxsIHJlbW92ZSBtb3N0IEhUTUwgb3IgeG1sIG1hcmt1
cC4KKyAqCisgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIG1vZGlm
aWVkLgorICogQHBhcmFtIGZpbHRlciA8Y29kZT50cnVlPC9jb2RlPiB0byBlbmFibGUgaW5wdXQg
dGV4dCBmaWx0ZXJpbmcuCisgKiBAcmV0dXJuIFRoZSBwcmV2aW91cyBzZXR0aW5nLgorICoKKyAq
IEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgordWNzZGV0X2Vu
YWJsZUlucHV0RmlsdGVyKFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIFVCb29sIGZpbHRlcik7CisK
KyNlbmRpZgorI2VuZGlmICAgLyogX19VQ1NERVRfSCAqLworCisKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDExIEBAIHN0YXRpYyBpbnQgbnVtUmVx
dWVzdHMoRG9jdW1lbnQqIGRvY3VtZW4KICAgICByZXR1cm4gZG9jdW1lbnQtPmRvY0xvYWRlcigp
LT5yZXF1ZXN0Q291bnQoKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9QYXJl
bnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUqIHBhcmVudEZy
YW1lKSAKK3sKKyAgICByZXR1cm4gcGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSk7Cit9CisKIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUs
IEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwg
bV9jbGllbnQoY2xpZW50KQpAQCAtOTk3LDEzICsxMDAyLDI0IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICB9CiAgICAgCiAgICAgaWYgKCFtX2RlY29kZXIp
IHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VN
SU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6
IFN0cmluZygpKTsKLSAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
IGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKSB7CisgICAgICAg
ICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNwb25zZU1J
TUVUeXBlLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFt
ZSgpLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsK
ICAgICAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKHBh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCksIFRleHRSZXNvdXJjZURlY29k
ZXI6OkRlZmF1bHRFbmNvZGluZyk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBT
ZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBvbmx5IGlm
CisgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMgc2hhcmUg
dGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAgICAgIC8vIFRPRE86IFdlIG1heSBjb25zaWRl
ciByZWxheGluZyB0aGlzIGxhdGVyIGZvciAncmVsYXRpdmVseQorICAgICAgICAgICAgLy8gc2Fm
ZScgZW5jb2RpbmdzICh0aGF0IGlzLCBlbmNvZGluZ3Mgb3RoZXIgdGhhbiBub24tQVNDSUkgN2Jp
dAorICAgICAgICAgICAgLy8gZW5jb2RpbmdzKS4gCisgICAgICAgICAgICBpZiAoY2FuUmVmZXJU
b1BhcmVudEZyYW1lRW5jb2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAg
ICAgIG1fZGVjb2Rlci0+c2V0SGludERlY29kZXIocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmRl
Y29kZXIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgU3RyaW5nKCkpOworICAg
ICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAg
ICAgICBpZiAobV9lbmNvZGluZy5pc0VtcHR5KCkgJiYgY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5j
b2RpbmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRF
bmNvZGluZyhwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpLCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSk7CisgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nLAogICAgICAgICAg
ICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpV
c2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQ
SGVhZGVyKTsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJET01J
bXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlRleHRD
b2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Z0RldGVjdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVnaXN0cnkuaCIKICNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KQEAgLTMy
MSwxNSArMzIzLDE3IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dFJlc291cmNlRGVjb2RlcjoK
ICAgICByZXR1cm4gc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nOwogfQogCi1UZXh0UmVzb3VyY2VE
ZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFRleHRFbmNvZGluZyYgc3BlY2lmaWVkRGVmYXVsdEVuY29kaW5nKQorVGV4dFJlc291cmNlRGVj
b2Rlcjo6VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBU
ZXh0RW5jb2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZywgYm9vbCB1c2VzRW5jb2RpbmdE
ZXRlY3RvcikKICAgICA6IG1fY29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUobWltZVR5
cGUpKQogICAgICwgbV9lbmNvZGluZyhkZWZhdWx0RW5jb2RpbmcobV9jb250ZW50VHlwZSwgc3Bl
Y2lmaWVkRGVmYXVsdEVuY29kaW5nKSkKKyAgICAsIG1faGludERlY29kZXIoMCkKICAgICAsIG1f
c291cmNlKERlZmF1bHRFbmNvZGluZykKICAgICAsIG1fY2hlY2tlZEZvckJPTShmYWxzZSkKICAg
ICAsIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQoZmFsc2UpCiAgICAgLCBtX2NoZWNrZWRGb3JIZWFk
Q2hhcnNldChmYWxzZSkKICAgICAsIG1fdXNlTGVuaWVudFhNTERlY29kaW5nKGZhbHNlKQogICAg
ICwgbV9zYXdFcnJvcihmYWxzZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IodXNlc0Vu
Y29kaW5nRGV0ZWN0b3IpCiB7CiB9CiAKQEAgLTQ1MSw3ICs0NTUsNyBAQCBzaXplX3QgVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JCT00oCiAKIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y2hlY2tGb3JDU1NDaGFyc2V0KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sIGJvb2wmIG1v
dmVkRGF0YVRvQnVmZmVyKQogewotICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2Rpbmcp
IHsKKyAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVuY29kaW5nICYmIG1fc291cmNlICE9IEVu
Y29kaW5nRnJvbVBhcmVudEZyYW1lKSB7CiAgICAgICAgIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQg
PSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MzIsNyArNTM2LDcgQEAg
Y29uc3QgaW50IGJ5dGVzVG9DaGVja1VuY29uZGl0aW9uYWxseSA9IAogCiBib29sIFRleHRSZXNv
dXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbiwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpCiB7Ci0gICAgaWYgKG1fc291cmNlICE9IERl
ZmF1bHRFbmNvZGluZykgeworICAgIGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYg
bV9zb3VyY2UgIT0gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpIHsKICAgICAgICAgbV9jaGVja2Vk
Rm9ySGVhZENoYXJzZXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03
NTksNiArNzYzLDIxIEBAIHZvaWQgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGV0ZWN0SmFwYW5lc2UK
ICAgICB9CiB9CiAKKy8vIFdlIHVzZSB0aGUgZW5jb2RpbmcgZGV0ZWN0b3IgaW4gdHdvIGNhc2Vz
OgorLy8gICAxLiBFbmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5kIG5vIG90aGVyIGVu
Y29kaW5nIHNvdXJjZSBpcworLy8gICAgICBhdmFpbGFibGUgKHRoYXQgaXMsIGl0J3MgRGVmYXVs
dEVuY29kaW5nKS4KKy8vICAgMi4gRW5jb2RpbmcgZGV0ZWN0b3IgaXMgdHVybmVkIE9OIGFuZCB0
aGUgZW5jb2RpbmcgaXMgc2V0IHRvCisvLyAgICAgIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFyZW50
IGZyYW1lLCB3aGljaCBpcyBhbHNvIGF1dG8tZGV0ZWN0ZWQuCisvLyAgIE5vdGUgdGhhdCBjb25k
aXRpb24gIzIgaXMgTk9UIHNhdGlzZmllZCB1bmxlc3MgcGFyZW50LWNoaWxkIGZyYW1lCisvLyAg
IHJlbGF0aW9uc2hpcCBpcyBjb21wbGlhbnQgdG8gdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gSWYg
dGhleSdyZSBmcm9tCisvLyAgIGRpZmZlcmVudCBkb21haW5zLCB8bV9zb3VyY2V8IHdvdWxkIG5v
dCBiZSBzZXQgdG8gRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKy8vICAgaW4gdGhlIGZpcnN0IHBs
YWNlLiAKK2Jvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IKKyAgICAgICAgJiYgKG1fc291
cmNlID09IERlZmF1bHRFbmNvZGluZyB8fCAobV9zb3VyY2UgPT0gRW5jb2RpbmdGcm9tUGFyZW50
RnJhbWUgJiYgbV9oaW50RGVjb2RlciAmJiBtX2hpbnREZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRv
RGV0ZWN0ZWRFbmNvZGluZykpOyAKK30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRl
Y29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuKQogewogICAgIHNpemVfdCBsZW5ndGhP
ZkJPTSA9IDA7CkBAIC03NzUsMTAgKzc5NCwyNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rl
cjo6ZGVjb2RlKGNvbnN0CiAgICAgICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBs
ZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAgICAgICAgIHJldHVybiAiIjsKIAotICAgIC8v
IERvIHRoZSBhdXRvLWRldGVjdCBpZiBvdXIgZGVmYXVsdCBlbmNvZGluZyBpcyBvbmUgb2YgdGhl
IEphcGFuZXNlIG9uZXMuCi0gICAgLy8gRklYTUU6IEl0IHNlZW1zIHdyb25nIHRvIGNoYW5nZSBv
dXIgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRl
Y29kaW5nLgorICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29k
aW5nIGRvd25zdHJlYW0gYWZ0ZXIKKyAgICAvLyB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRl
Y29kaW5nLiBIb3dldmVyLCBpdCdzIG5vdCBwb3NzaWJsZQorICAgIC8vIHRvIGF2b2lkIGluIGEg
c2Vuc2UgaW4gdHdvIGNhc2VzIGJlbG93IGJlY2F1c2UgdHJpZ2dlcmluZyBjb25kaXRpb25zCisg
ICAgLy8gZm9yIGJvdGggY2FzZXMgZGVwZW5kIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvbid0
IGJlIGF2YWlsYWJsZQorICAgIC8vIHVudGlsIHdlIGRvIHBhcnRpYWwgcmVhZC4gCisgICAgLy8g
VGhlIGZpcnN0IGNhc2UgaGFkIGJldHRlciBiZSByZW1vdmVkIGFsdG9nZXRoZXIgKHNlZSBidWcg
MjE5OTApCisgICAgLy8gb3IgYXQgbGVhc3QgYmUgbWFkZSB0byBiZSBpbnZva2VkIG9ubHkgd2hl
biB0aGUgZW5jb2RpbmcgZGV0ZWN0aW9uCisgICAgLy8gaXMgdHVybmVkIG9uLiAKKyAgICAvLyBE
byB0aGUgYXV0by1kZXRlY3QgMSkgdXNpbmcgSmFwYW5lc2UgZGV0ZWN0b3IgaWYgb3VyIGRlZmF1
bHQgZW5jb2RpbmcgaXMKKyAgICAvLyBvbmUgb2YgdGhlIEphcGFuZXNlIGRldGVjdG9yIG9yIDIp
IHVzaW5nIGRldGVjdFRleHRFbmNvZGluZyBpZiBlbmNvZGluZworICAgIC8vIGRldGVjdGlvbiBp
cyB0dXJuZWQgb24uCiAgICAgaWYgKG1fc291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBt
X3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGluZyAmJiBtX2VuY29kaW5nLmlzSmFwYW5lc2Uo
KSkKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2Ug
aWYgKHNob3VsZEF1dG9EZXRlY3QoKSkgeworICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRF
bmNvZGluZzsKKyAgICAgICAgaWYgKGRldGVjdFRleHRFbmNvZGluZyhkYXRhLCBsZW4sIGhpbnRF
bmNvZGluZ05hbWUoKSwgJmRldGVjdGVkRW5jb2RpbmcpKQorICAgICAgICAgICAgc2V0RW5jb2Rp
bmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOworICAgIH0KIAogICAg
IEFTU0VSVChtX2VuY29kaW5nLmlzVmFsaWQoKSk7CiAKQEAgLTgwMSw2ICs4MzQsMTcgQEAgU3Ry
aW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdAogCiBTdHJpbmcgVGV4dFJlc291
cmNlRGVjb2Rlcjo6Zmx1c2goKQogeworICAgLy8gSWYgd2UgY2FuIG5vdCBpZGVudGlmeSB0aGUg
ZW5jb2RpbmcgZXZlbiBhZnRlciBhIGRvY3VtZW50IGlzIGNvbXBsZXRlbHkKKyAgIC8vIGxvYWRl
ZCwgd2UgbmVlZCB0byBkZXRlY3QgdGhlIGVuY29kaW5nIGlmIG90aGVyIGNvbmRpdGlvbnMgZm9y
CisgICAvLyBhdXRvZGV0ZWN0aW9uIGlzIHNhdGlzZmllZC4KKyAgICBpZiAobV9idWZmZXIuc2l6
ZSgpICYmIHNob3VsZEF1dG9EZXRlY3QoKQorICAgICAgICAmJiAoKCFtX2NoZWNrZWRGb3JIZWFk
Q2hhcnNldCAmJiAobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1M
KSkgfHwgKCFtX2NoZWNrZWRGb3JDU1NDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBlID09IENTUykp
KSkgeworICAgICAgICAgVGV4dEVuY29kaW5nIGRldGVjdGVkRW5jb2Rpbmc7CisgICAgICAgICBp
ZiAoZGV0ZWN0VGV4dEVuY29kaW5nKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50RW5jb2RpbmdOYW1lKCksICZkZXRl
Y3RlZEVuY29kaW5nKSkKKyAgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5n
LCBBdXRvRGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgfQorCiAgICAgaWYgKCFtX2NvZGVjKQogICAg
ICAgICBtX2NvZGVjLnNldChuZXdUZXh0Q29kZWMobV9lbmNvZGluZykucmVsZWFzZSgpKTsKIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAkocmV2aXNpb24gNDE5MTEpCisr
KyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDEyICszNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIEVuY29kaW5nRnJvbU1ldGFUYWcsCiAg
ICAgICAgIEVuY29kaW5nRnJvbUNTU0NoYXJzZXQsCiAgICAgICAgIEVuY29kaW5nRnJvbUhUVFBI
ZWFkZXIsCi0gICAgICAgIFVzZXJDaG9zZW5FbmNvZGluZworICAgICAgICBVc2VyQ2hvc2VuRW5j
b2RpbmcsCisgICAgICAgIEVuY29kaW5nRnJvbVBhcmVudEZyYW1lCiAgICAgfTsKIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyA9IFRleHRFbmNv
ZGluZygpKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGRlZmF1bHRFbmNv
ZGluZyA9IFRleHRFbmNvZGluZygpLCBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yID0gZmFsc2Up
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRSZXNvdXJjZURlY29kZXIo
bWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHRSZXNvdXJjZURlY29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZywgdXNlc0VuY29k
aW5nRGV0ZWN0b3IpKTsKICAgICB9CiAgICAgflRleHRSZXNvdXJjZURlY29kZXIoKTsKIApAQCAt
NTEsMTEgKzUyLDE3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgpOwogICAgIFN0cmluZyBmbHVzaCgpOwogCisgICAgdm9pZCBzZXRI
aW50RGVjb2Rlcihjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBoaW50RGVjb2RlcikKKyAgICB7
CisgICAgICAgIG1faGludERlY29kZXIgPSBoaW50RGVjb2RlcjsKKyAgICB9CisgICAKICAgICB2
b2lkIHVzZUxlbmllbnRYTUxEZWNvZGluZygpIHsgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcgPSB0
cnVlOyB9CiAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJyb3I7IH0K
IAogcHJpdmF0ZToKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nKTsKKyAgICBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVm
YXVsdEVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzRW5jb2RpbmdE
ZXRlY3Rvcik7CiAKICAgICBlbnVtIENvbnRlbnRUeXBlIHsgUGxhaW5UZXh0LCBIVE1MLCBYTUws
IENTUyB9OyAvLyBQbGFpblRleHQgb25seSBjaGVja3MgZm9yIEJPTS4KICAgICBzdGF0aWMgQ29u
dGVudFR5cGUgZGV0ZXJtaW5lQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CkBA
IC02NSwxMCArNzIsMTcgQEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrRm9yQ1NTQ2hhcnNldChj
b25zdCBjaGFyKiwgc2l6ZV90LCBib29sJiBtb3ZlZERhdGFUb0J1ZmZlcik7CiAgICAgYm9vbCBj
aGVja0ZvckhlYWRDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRv
QnVmZmVyKTsKICAgICB2b2lkIGRldGVjdEphcGFuZXNlRW5jb2RpbmcoY29uc3QgY2hhciosIHNp
emVfdCk7CisgICAgYm9vbCBzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3Q7CisKKyAgICBjb25zdCBj
aGFyKiBoaW50RW5jb2RpbmdOYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hp
bnREZWNvZGVyID8gbV9oaW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCkgOiAwOworICAgIH0K
IAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dEVuY29kaW5nIG1fZW5j
b2Rpbmc7CiAgICAgT3duUHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKKyAgICBjb25zdCBUZXh0UmVz
b3VyY2VEZWNvZGVyKiBtX2hpbnREZWNvZGVyOwogICAgIEVuY29kaW5nU291cmNlIG1fc291cmNl
OwogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBib29sIG1fY2hlY2tlZEZvckJPTTsK
QEAgLTc2LDYgKzkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hlY2tlZEZvckhlYWRDaGFy
c2V0OwogICAgIGJvb2wgbV91c2VMZW5pZW50WE1MRGVjb2Rpbmc7IC8vIERvbid0IHN0b3Agb24g
WE1MIGRlY29kaW5nIGVycm9ycy4KICAgICBib29sIG1fc2F3RXJyb3I7CisgICAgYm9vbCBtX3Vz
ZXNFbmNvZGluZ0RldGVjdG9yOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA0
MTkxMSkKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDYgKzg2LDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3Nob3Vs
ZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyhmYWxzZSkKICAgICAsIG1fem9vbXNUZXh0T25seShmYWxz
ZSkKICAgICAsIG1fZW5mb3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlKHRydWUpCisgICAgLCBt
X3VzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKQogICAgICwgbV9tYXhpbXVtRGVjb2RlZEltYWdl
U2l6ZShzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKQogICAgICwgbV9hbGxvd1Nj
cmlwdHNUb0Nsb3NlV2luZG93cyhmYWxzZSkKIHsKQEAgLTQxOCw2ICs0MTksMTEgQEAgdm9pZCBT
ZXR0aW5nczo6c2V0U2hvdWxkUGFpbnROYXRpdmVDb250cgogfQogI2VuZGlmCiAKK3ZvaWQgU2V0
dGluZ3M6OnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3Ip
Cit7CisgICAgbV91c2VzRW5jb2RpbmdEZXRlY3RvciA9IHVzZXNFbmNvZGluZ0RldGVjdG9yOwor
fQorCiB2b2lkIFNldHRpbmdzOjpzZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhib29sIGFs
bG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKQogewogICAgIG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdp
bmRvd3MgPSBhbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93czsKSW5kZXg6IFdlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lv
biA0MTkxMSkKKysrIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsNiArMTE1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdm9p
ZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgY29u
c3QgU3RyaW5nJiBkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVm
YXVsdFRleHRFbmNvZGluZ05hbWU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0VXNlc0Vu
Y29kaW5nRGV0ZWN0b3IoYm9vbCk7CisgICAgICAgIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3VzZXNFbmNvZGluZ0RldGVjdG9yOyB9CiAKICAgICAgICAgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmKTsKICAgICAgICAgY29uc3Qg
S1VSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbjsgfQpAQCAtMjYwLDYgKzI2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50Q3VzdG9tU2Nyb2xsYmFycyA6IDE7CiAgICAgICAg
IGJvb2wgbV96b29tc1RleHRPbmx5IDogMTsKICAgICAgICAgYm9vbCBtX2VuZm9yY2VDU1NNSU1F
VHlwZUluU3RyaWN0TW9kZSA6IDE7CisgICAgICAgIGJvb2wgbV91c2VzRW5jb2RpbmdEZXRlY3Rv
ciA6IDE7CiAgICAgICAgIHNpemVfdCBtX21heGltdW1EZWNvZGVkSW1hZ2VTaXplOwogICAgICAg
ICBib29sIG1fYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgOiAxOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE3
ICsxMjcsMjEgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZAogICAg
ICAgICAgICAgfQogICAgIH0KIAorI2lmIEVOQUJMRShNQUNfRU5DT0RJTkcpCiAgICAgLy8gQWRk
aXRpb25hbCBhbGlhc2VzLgogICAgIC8vIFRoZXNlIGFyZSBwcmVzZW50IGluIG1vZGVybiB2ZXJz
aW9ucyBvZiBJQ1UsIGJ1dCBub3QgaW4gSUNVIDMuMiAoc2hpcHBlZCB3aXRoIE1hYyBPUyBYIDEw
LjQpLgogICAgIHJlZ2lzdHJhcigibWFjcm9tYW4iLCAibWFjaW50b3NoIik7CiAgICAgcmVnaXN0
cmFyKCJtYWNjeXJpbGxpYyIsICJ4LW1hYy1jeXJpbGxpYyIpOworI2VuZGlmCiAKICAgICAvLyBB
ZGRpdGlvbmFsIGFsaWFzZXMgdGhhdCBoaXN0b3JpY2FsbHkgd2VyZSBwcmVzZW50IGluIHRoZSBl
bmNvZGluZwogICAgIC8vIHRhYmxlIGluIFdlYktpdCBvbiBNYWNpbnRvc2ggdGhhdCBkb24ndCBz
ZWVtIHRvIGJlIHByZXNlbnQgaW4gSUNVLgogICAgIC8vIFBlcmhhcHMgd2UgY2FuIHByb3ZlIHRo
ZXNlIGFyZSBub3QgdXNlZCBvbiB0aGUgd2ViIGFuZCByZW1vdmUgdGhlbS4KICAgICAvLyBPciBw
ZXJoYXBzIHdlIGNhbiBnZXQgdGhlbSBhZGRlZCB0byBJQ1UuCisjaWYgRU5BQkxFKE1BQ19FTkNP
RElORykKICAgICByZWdpc3RyYXIoInhtYWNyb21hbiIsICJtYWNpbnRvc2giKTsKICAgICByZWdp
c3RyYXIoInhtYWN1a3JhaW5pYW4iLCAieC1tYWMtY3lyaWxsaWMiKTsKKyNlbmRpZgogICAgIHJl
Z2lzdHJhcigiY25iaWc1IiwgIkJpZzUiKTsKICAgICByZWdpc3RyYXIoInh4YmlnNSIsICJCaWc1
Iik7CiAgICAgcmVnaXN0cmFyKCJjbmdiIiwgIkdCSyIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVGV4dEVuY29kaW5nRGV0ZWN0b3JfaAorI2RlZmluZSBUZXh0RW5j
b2RpbmdEZXRlY3Rvcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRF
bmNvZGluZzsKKworICAgIC8vIEdpdmVuIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgaW4gfGRhdGF8IG9m
IGxlbmd0aCB8bGVufCBhbmQgYW4gb3B0aW9uYWwKKyAgICAvLyBoaW50RW5jb2RpbmdOYW1lLCBk
ZXRlY3QgdGhlIG1vc3QgbGlrZWx5IGNoYXJhY3RlciBlbmNvZGluZy4gCisgICAgLy8gVGhlIHdh
eSBoaW50RW5jb2RpbmdOYW1lIGlzIHVzZWQgaXMgdXAgdG8gYW4gaW1wbGVtZW50YXRpb24uCisg
ICAgLy8gQ3VycmVudGx5LCB0aGUgb25seSBjYWxsZXIgc2V0cyBpdCB0byB0aGUgcGFyZW50IGZy
YW1lIGVuY29kaW5nLgorICAgIGJvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
aGludEVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0RW5jb2Rp
bmcqIGRldGVjdGVkRW5jb2RpbmcpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9ySUNVLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCIKKwor
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorI2lu
Y2x1ZGUgInVuaWNvZGUvdWNudi5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNzZGV0LmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGRldGVjdFRleHRFbmNvZGluZyhjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogaGludEVuY29kaW5nTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHRFbmNv
ZGluZyogZGV0ZWN0ZWRFbmNvZGluZykKK3sKKyAgICAqZGV0ZWN0ZWRFbmNvZGluZyA9IFRleHRF
bmNvZGluZygpOworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gVGlnZXIgY2FtZSB3
aXRoIElDVSAzLjIgYW5kIGRvZXMgbm90IGhhdmUgdGhlIGVuY29kaW5nIGRldGVjdG9yLgorICAg
IFVOVVNFRF9QQVJBTShkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0obGVuKTsKKyAgICBVTlVTRURf
UEFSQU0oaGludEVuY29kaW5nTmFtZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBp
bnQgbWF0Y2hlc0NvdW50ID0gMDsgCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJS
T1I7CisgICAgVUNoYXJzZXREZXRlY3RvciogZGV0ZWN0b3IgPSB1Y3NkZXRfb3Blbigmc3RhdHVz
KTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB1Y3NkZXRfZW5hYmxlSW5wdXRGaWx0ZXIoZGV0ZWN0b3IsIHRydWUpOworICAgIHVjc2RldF9z
ZXRUZXh0KGRldGVjdG9yLCBkYXRhLCBzdGF0aWNfY2FzdDxpbnQzMl90PihsZW4pLCAmc3RhdHVz
KTsgCisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBGSVhNRTogQSBmZXcgdGhpbmdzIHdlIGNhbiBkbyBvdGhlciB0aGFuIGltcHJvdmlu
ZworICAgIC8vIHRoZSBJQ1UgZGV0ZWN0b3IgaXRzZWxmLiAKKyAgICAvLyAxLiBVc2UgdWNzZGV0
X2RldGVjdEFsbCBhbmQgcGljayB0aGUgbW9zdCBsaWtlbHkgb25lIGdpdmVuCisgICAgLy8gInRo
ZSBjb250ZXh0IiAocGFyZW50LWVuY29kaW5nLCByZWZlcnJlciBlbmNvZGluZywgZXRjKS4KKyAg
ICAvLyAyLiAnRW11bGF0ZScgRmlyZWZveC9JRSdzIG5vbi1Vbml2ZXJzYWwgZGV0ZWN0b3JzIChl
LmcuCisgICAgLy8gQ2hpbmVzZSwgSmFwYW5lc2UsIFJ1c3NpYW4sIEtvcmVhbiBhbmQgSGVicmV3
KSBieSBwaWNraW5nIHRoZSAKKyAgICAvLyBlbmNvZGluZyB3aXRoIGEgaGlnaGVzdCBjb25maWRl
bmNlIGFtb25nIHRoZSBkZXRldGN0b3Itc3BlY2lmaWMKKyAgICAvLyBsaW1pdGVkIHNldCBvZiBj
YW5kaWRhdGUgZW5jb2RpbmdzLgorICAgIC8vIEJlbG93IGlzIGEgcGFydGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgZmlyc3QgcGFydCBvZiB3aGF0J3Mgb3V0bGluZWQKKyAgICAvLyBhYm92ZS4K
KyAgICBjb25zdCBVQ2hhcnNldE1hdGNoKiogbWF0Y2hlcyA9IHVjc2RldF9kZXRlY3RBbGwoZGV0
ZWN0b3IsICZtYXRjaGVzQ291bnQsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkgeworICAgICAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3IpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgY29uc3QgY2hhciogZW5jb2RpbmcgPSAwOworICAgIGlmIChoaW50
RW5jb2RpbmdOYW1lKSB7CisgICAgICAgIFRleHRFbmNvZGluZyBoaW50RW5jb2RpbmcoaGludEVu
Y29kaW5nTmFtZSk7CisgICAgICAgIC8vIDEwIGlzIHRoZSBtaW5pbXVtIGNvbmZpZGVuY2UgdmFs
dWUgY29uc2lzdGVudCB3aXRoIHRoZSBjb2RlcG9pbnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbiBp
biBhIGdpdmVuIGVuY29kaW5nLiBUaGUgc2l6ZSBvZiBhIGNodW5rIHBhc3NlZCB0bworICAgICAg
ICAvLyB1cyB2YXJpZXMgZXZlbiBmb3IgdGhlIHNhbWUgaHRtbCBmaWxlIChhcHBhcmVudGx5IGRl
cGVuZGluZyBvbiAKKyAgICAgICAgLy8gdGhlIG5ldHdvcmsgbG9hZCkuIFdoZW4gd2UncmUgZ2l2
ZW4gYSByYXRoZXIgc2hvcnQgY2h1bmssIHdlIAorICAgICAgICAvLyBkb24ndCBoYXZlIGEgc3Vm
ZmljaWVudGx5IHJlbGlhYmxlIHNpZ25hbCBvdGhlciB0aGFuIHRoZSBmYWN0IHRoYXQKKyAgICAg
ICAgLy8gdGhlIGNodW5rIGlzIGNvbnNpc3RlbnQgd2l0aCBhIHNldCBvZiBlbmNvZGluZ3MuIFNv
LCBpbnN0ZWFkIG9mCisgICAgICAgIC8vIHNldHRpbmcgYW4gYXJiaXRyYXJ5IHRocmVzaG9sZCwg
d2UgaGF2ZSB0byBzY2FuIGFsbCB0aGUgZW5jb2RpbmdzCisgICAgICAgIC8vIGNvbnNpc3RlbnQg
d2l0aCB0aGUgZGF0YS4gIAorICAgICAgICBjb25zdCBpbnQzMl90IGtUaHJlc29sZCA9IDEwOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoZXNDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICBpbnQzMl90IGNvbmZpZGVuY2UgPSB1Y3NkZXRfZ2V0Q29uZmlkZW5jZShtYXRjaGVzW2ld
LCAmc3RhdHVzKTsKKyAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25maWRlbmNlIDwga1RocmVzb2xk
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29uc3QgY2hhciogbWF0Y2hF
bmNvZGluZyA9IHVjc2RldF9nZXROYW1lKG1hdGNoZXNbaV0sICZzdGF0dXMpOworICAgICAgICAg
ICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKFRleHRFbmNvZGluZyhtYXRjaEVuY29kaW5nKSA9PSBoaW50RW5jb2Rpbmcp
IHsKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGhpbnRFbmNvZGluZ05hbWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
SWYgbm8gbWF0Y2ggaXMgZm91bmQgc28gZmFyLCBqdXN0IHBpY2sgdGhlIHRvcCBtYXRjaC4gCisg
ICAgLy8gVGhpcyBjYW4gaGFwcGVuLCBzYXksIHdoZW4gYSBwYXJlbnQgZnJhbWUgaW4gRVVDLUpQ
IHJlZmVycyB0bworICAgIC8vIGEgY2hpbGQgZnJhbWUgaW4gU2hpZnRfSklTIGFuZCBib3RoIGZy
YW1lcyBkbyBOT1Qgc3BlY2lmeSB0aGUgZW5jb2RpbmcKKyAgICAvLyBtYWtpbmcgdXMgcmVzb3J0
IHRvIGF1dG8tZGV0ZWN0aW9uICh3aGVuIGl0IElTIHR1cm5lZCBvbikuCisgICAgaWYgKCFlbmNv
ZGluZyAmJiBtYXRjaGVzQ291bnQgPiAwKQorICAgICAgICBlbmNvZGluZyA9IHVjc2RldF9nZXRO
YW1lKG1hdGNoZXNbMF0sICZzdGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSkgewor
ICAgICAgICAqZGV0ZWN0ZWRFbmNvZGluZyA9IFRleHRFbmNvZGluZyhlbmNvZGluZyk7CisgICAg
ICAgIHVjc2RldF9jbG9zZShkZXRlY3Rvcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ICAgCisgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVj
dG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
IgorCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ym9vbCBkZXRlY3RUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0RW5jb2RpbmcqIGRldGVjdGVkRW5jb2RpbmcpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGRhdGEpCisgICAgVU5VU0VEX1BBUkFNKGxlbikKKyAgICBVTlVTRURf
UEFSQU0oaGludEVuY29kaW5nTmFtZSkKKworICAgICpkZXRlY3RlZEVuY29kaW5nID0gVGV4dEVu
Y29kaW5nKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDE5
MTEpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDA5LTAzLTI0ICBKdW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJQcmVm
ZXJlbmNlcyBmb3IgZW5jb2RpbmcgYXV0b2RldGVjdGlvbiBvbiBNYWMuCisgIAorICAgICAgICBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MgorCisgICAgICAgICog
V2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6
CisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk6CisgICAg
ICAgICgtW1dlYlByZWZlcmVuY2VzIHNldFVzZXNFbmNvZGluZ0RldGVjdG9yOl0pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWROb3RpZmlj
YXRpb246XSk6CisKIDIwMDktMDMtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgICogV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IuaDogRml4ZWQgYSBzcGVsbGluZyBl
cnJvciBpbiBhIGNvbW1lbnQuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VLZXlzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQAogI2RlZmluZSBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
RGVmYXVsdEZvbnRTaXplIgogI2RlZmluZSBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZVByZWZl
cmVuY2VLZXkgQCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVm
YXVsdFRleHRFbmNvZGluZ05hbWVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUiCisjZGVmaW5lIFdlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtl
eSBAIldlYktpdFVzZXNFbmNvZGluZ0RldGVjdG9yIgogI2RlZmluZSBXZWJLaXRVc2VyU3R5bGVT
aGVldEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJl
ZmVyZW5jZUtleSIKICNkZWZpbmUgV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uUHJlZmVyZW5jZUtleSIKICNkZWZp
bmUgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkgQCJXZWJLaXRTaG91
bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDQxOTExKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDcgQEAgc3RhdGlj
IFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgICAgICBAIjE2IiwgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdERlZmF1bHRGb250U2l6ZVByZWZlcmVuY2VLZXksCiAg
ICAgICAgIEAiMTMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RGVmYXVsdEZpeGVk
Rm9udFNpemVQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIklTTy04ODU5LTEiLCAgICAgICAgICAg
ICAgICAgIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSwKKyAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRVc2VzRW5jb2RpbmdEZXRl
Y3RvclByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10s
ICAgV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCIi
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
UHJlZmVyZW5jZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBX
ZWJLaXRTaG91bGRQcmludEJhY2tncm91bmRzUHJlZmVyZW5jZUtleSwKQEAgLTg2NCw2ICs4NjUs
MTYgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdQogICAgIF9wcml2
YXRlLT5hdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWwgPSBhdXRvbWF0aWNhbGx5RGV0ZWN0
c0NhY2hlTW9kZWw7CiB9CiAKKy0gKEJPT0wpdXNlc0VuY29kaW5nRGV0ZWN0b3IKK3sKKyAgICBy
ZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQ
cmVmZXJlbmNlS2V5XTsKK30KKworLSAodm9pZClzZXRVc2VzRW5jb2RpbmdEZXRlY3RvcjooQk9P
TClmbGFnCit7CisgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTogZmxhZyBmb3JLZXk6IFdlYktpdFVz
ZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKEJPT0wpaXNXZWJTZWN1
cml0eUVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTogV2ViS2l0
V2ViU2VjdXJpdHlFbmFibGVkUHJlZmVyZW5jZUtleV07CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksOSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vCiAtIChC
T09MKWFwcGxpY2F0aW9uQ2hyb21lTW9kZUVuYWJsZWQ7CiAtICh2b2lkKXNldEFwcGxpY2F0aW9u
Q2hyb21lTW9kZUVuYWJsZWQ6KEJPT0wpZmxhZzsKIAorLSAoQk9PTCl1c2VzRW5jb2RpbmdEZXRl
Y3RvcjsKKy0gKHZvaWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxhZzsKKwogLSAo
Qk9PTClyZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOwogLSAodm9pZClzZXRSZXNw
ZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzOihCT09MKWZsYWc7CiAKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE2LDYgKzEzMTYsNyBAQCBzdGF0aWMgdm9pZCBX
ZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DCiAgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhl
ZEZvbnRTaXplKFtwcmVmZXJlbmNlcyBkZWZhdWx0Rml4ZWRGb250U2l6ZV0pOwogICAgIHNldHRp
bmdzLT5zZXREZWZhdWx0Rm9udFNpemUoW3ByZWZlcmVuY2VzIGRlZmF1bHRGb250U2l6ZV0pOwog
ICAgIHNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShbcHJlZmVyZW5jZXMgZGVm
YXVsdFRleHRFbmNvZGluZ05hbWVdKTsKKyAgICBzZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0
ZWN0b3IoW3ByZWZlcmVuY2VzIHVzZXNFbmNvZGluZ0RldGVjdG9yXSk7CiAgICAgc2V0dGluZ3Mt
PnNldEZhbnRhc3lGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBmYW50YXN5Rm9udEZhbWlseV0pOwog
ICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIGZpeGVkRm9udEZh
bWlseV0pOwogICAgIHNldHRpbmdzLT5zZXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKFtwcmVm
ZXJlbmNlcyBfZm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5nc10pOwo=
</data>
<flag name="review"
          id="14279"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28952</attachid>
            <date>2009-03-25 16:30:43 -0700</date>
            <delta_ts>2009-04-08 17:33:45 -0700</delta_ts>
            <desc>patch addressing ap&apos;s concerns</desc>
            <filename>16482.patch.7</filename>
            <type>text/plain</type>
            <size>52371</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDktMDMtMjQgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIGVuY29kaW5nIGRldGVjdG9yICdob29rJyB0byBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3RvciogdG8gcGxhdGZvcm0vdGV4dC4gQ3VycmVu
dGx5LAorICAgICAgICAgICB0aGUgb25seSBpbXBsZW1lbnRhdGlvbiB1c2VzIElDVS4gU3R1YiBp
cyBhZGRlZCBmb3IgCisgICAgICAgICAgIHBvcnRzIHRoYXQgZG8gbm90IHVzZSBJQ1UgYW5kIGEg
YnVpbGQgb24gVGlnZXIuIE1hYyBPUyAKKyAgICAgICAgICAgVGlnZXIgY29tZXMgd2l0aCBJQ1Ug
My4yIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBkZXRlY3Rvci4KKyAgICAgICAgIC0g
YWRkIHVjc2RldC5oIHRvIGljdS91bmljb2RlIGZvciBwb3J0cyB1c2luZyBJQ1UuCisKKyAgICAg
ICAgTGF5b3V0IHRlc3RzIHdpbGwgYmUgYWRkZWQgb25jZSBidWcgMjA1MzQgaXMgZml4ZWQgYW5k
IGEgV2ViUHJlZmVyZW5jZQorICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBpbiB0ZXN0X3NoZWxs
LiBXaXRoIFVzZXNFbmNvZGluZ0RldGVjdG9yIG9mZiwgdGhlcmUKKyAgICAgICAgaXMgbm8gY2hh
bmdlIHRvIHRlc3QuIAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorICAgICAgICAqIFdlYkNvcmUvV2ViQ29yZS5wcm8KKyAg
ICAgICAgKiBXZWJDb3JlL1dlYkNvcmUuc2NvbnMKKyAgICAgICAgKiBXZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbAorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHAKKyAgICAgICAgKiBpY3UvdW5p
Y29kZS91Y3NkZXQuaAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d3JpdGUpOiB0dXJuIG9uL29mZiBlbmNvZGluZyBkZXRl
Y3RvciBkZXBlbmRpbmcgb24gU2V0dGluZ3MgYW5kIHNldCBoaW50RW5jb2Rpbmcgb2YgVGV4dFJl
c291cmNlRGVjb2RlciB0byB0aGUgcGFyZW50IGZyYW1lIGVuY29kaW5nIGlmIG5lY2Vzc2FyeSBh
bmQgdGhlIHNlY3VyaXR5IHBvbGljeSBhbGxvd3MgcmVmZXJpbmcgdG8gdGhlIHBhcmVudCBmcmFt
ZSBlbmNvZGluZy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9yQ1NTQ2hh
cnNldCk6IGFkZCBjaGVjayBmb3IgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUpOiBjYWxsIGVu
Y29kaW5nIGRldGVjdG9yIGlmIHNob3VsZEF1dG9EZXRlY3QgcmV0dXJucyB0cnVlLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2gpOiBpZiBlbmNvZGluZyBpcyBu
b3QgZGV0ZXJtaW5lZCBieSBub3csIGNhbGwgZW5jb2RpbmcgZGV0ZWN0b3IgaWYgc2hvdWxkQXV0
b0RldGVjdCByZXR1cm5zIHRydWUuCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6Oik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0SGludEVuY29kaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNvdXJjZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5n
cy5jcHA6IGFkZCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZXR0
aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZXNFbmNv
ZGluZ0RldGVjdG9yKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6dXNlc0VuY29kaW5nRGV0ZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4
dEVuY29kaW5nKToKKwogMjAwOS0wMy0yMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTQ5NCw2ICsxNDk0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dFN0cmVhbS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBf
X1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI5c2VsZWN0CiBfX1pON1dlYkNvcmUxOVNl
bGVjdGlvbkNvbnRyb2xsZXJDMUVQTlNfNUZyYW1lRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291
cmNlRGVjb2RlcjVmbHVzaEV2CiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVj
b2RlRVBLY20KLV9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmlu
Z0VSS05TXzEyVGV4dEVuY29kaW5nRQorX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVy
QzFFUktOU182U3RyaW5nRVJLTlNfMTJUZXh0RW5jb2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0
UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0
c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoRXgKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250
cm9sbGVyMTZjbGVhckNvbnRleHRNZW51RXYKQEAgLTU5OSw2ICs1OTksNyBAQCBfX1pON1dlYkNv
cmU4U2V0dGluZ3MyMnNldFNhbnNTZXJpZkZvbnRGCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNl
dFNob3dzVVJMc0luVG9vbFRpcHNFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXREZWZhdWx0
Rml4ZWRGb250U2l6ZUVpCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldEVkaXRhYmxlTGlua0Jl
aGF2aW9yRU5TXzIwRWRpdGFibGVMaW5rQmVoYXZpb3JFCitfX1pON1dlYkNvcmU4U2V0dGluZ3My
M3NldFVzZXNFbmNvZGluZ0RldGVjdG9yRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0QXBw
bGljYXRpb25DaHJvbWVNb2RlRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4dEFyZWFz
QXJlUmVzaXphYmxlRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZEViCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtOTYyLDYgKzk2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwK
KyAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1RleHRTdHJlYW0uY3BwIFwKICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnNjb25zCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2lu
ZyBjb3B5KQpAQCAtODM5LDYgKzgzOSw3IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsK
ICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcCcsCisgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1Uu
Y3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAnLAogICAg
ICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9Vbmlj
b2RlUmFuZ2UuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MTkxMSkKKysrIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNiArNzc5LDcg
QEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAKKyAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxh
dGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAogICAgICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxE
YXRhLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTY3NTcsNiArNjc1NywxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2Rp
bmdEZXRlY3RvcklDVS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzMDEsNiArNDMwMSw4IEBACiAJCUMwOTE1ODhF
MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDkxNTg4ODBEQjQyMDky
MDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwICovOyB9OwogCQlDMDkx
NTg4RjBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwOTE1ODg5MERCNDIw
OTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oICovOyB9OwogCQlDMERG
Qzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNFQUU3
QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OworCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRF
bmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKKwkJQzEwNURBNjQwRjNBQTZCODAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwICovOyB9OwogCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9
OwpAQCAtOTE1MSw2ICs5MTUzLDggQEAKIAkJQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8qIEpT
UXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzA5MTU4ODkwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwREZD
ODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGlu
Z0RldGVjdG9ySUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEzMzMyLDYgKzEzMzM2LDggQEAKIAkJCQlCMkMzREExNTBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmcuaCAqLywKKwkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyog
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLywKKwkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RBMUEw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovLApAQCAtMTY3MDIsNiArMTY3MDgs
NyBAQAogCQkJCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTY5MzgwMjBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVu
Y29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYgLyog
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ5MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMzQTE0MzAwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFMTgwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRHcmFudWxhcml0eS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xODczMiw2ICsxODczOSw3IEBACiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEw
NDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTY5MzgwMTBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQzEwNURBNjIwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzNBMTQy
RTBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTFCMDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmlj
b2RlL3Vjc2RldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1c2lu
ZXNzIE1hY2hpbmVzCisgKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgZmlsZSBuYW1lOiAgdWNzZGV0LmgKKyAqICAg
ZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyAqICAgaW5kZW50YXRpb246NAorICoKKyAqICAgY3JlYXRl
ZCBvbjogMjAwNUF1ZzA0CisgKiAgIGNyZWF0ZWQgYnk6IEFuZHkgSGVuaW5nZXIKKyAqCisgKiAg
IElDVSBDaGFyYWN0ZXIgU2V0IERldGVjdGlvbiwgQVBJIGZvciBDCisgKgorICogICBEcmFmdCB2
ZXJzaW9uIDE4IE9jdCAyMDA1CisgKgorICovCisKKyNpZm5kZWYgX19VQ1NERVRfSAorI2RlZmlu
ZSBfX1VDU0RFVF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05G
SUdfTk9fQ09OVkVSU0lPTgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0uaCIKKworLyoqCisgKiBc
ZmlsZSAKKyAqIFxicmllZiBDIEFQSTogQ2hhcnNldCBEZXRlY3Rpb24gQVBJCisgKgorICogVGhp
cyBBUEkgcHJvdmlkZXMgYSBmYWNpbGl0eSBmb3IgZGV0ZWN0aW5nIHRoZQorICogY2hhcnNldCBv
ciBlbmNvZGluZyBvZiBjaGFyYWN0ZXIgZGF0YSBpbiBhbiB1bmtub3duIHRleHQgZm9ybWF0Lgor
ICogVGhlIGlucHV0IGRhdGEgY2FuIGJlIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgKiA8cD4K
KyAqIENoYXJhY3RlciBzZXQgZGV0ZWN0aW9uIGlzIGF0IGJlc3QgYW4gaW1wcmVjaXNlIG9wZXJh
dGlvbi4gIFRoZSBkZXRlY3Rpb24KKyAqIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGlkZW50aWZ5
IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9m
IHRoZSBieXRlIGRhdGEsIGJ1dCB0aGUgcHJvY2VzcyBpcyBwYXJ0bHkgc3RhdGlzdGljYWwgaW4g
bmF0dXJlLCBhbmQKKyAqIHRoZSByZXN1bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBhbHdh
eXMgYmUgY29ycmVjdC4KKyAqIDxwPgorICogRm9yIGJlc3QgYWNjdXJhY3kgaW4gY2hhcnNldCBk
ZXRlY3Rpb24sIHRoZSBpbnB1dCBkYXRhIHNob3VsZCBiZSBwcmltYXJpbHkKKyAqIGluIGEgc2lu
Z2xlIGxhbmd1YWdlLCBhbmQgYSBtaW5pbXVtIG9mIGEgZmV3IGh1bmRyZWQgYnl0ZXMgd29ydGgg
b2YgcGxhaW4gdGV4dAorICogaW4gdGhlIGxhbmd1YWdlIGFyZSBuZWVkZWQuICBUaGUgZGV0ZWN0
aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvCisgKiBpZ25vcmUgaHRtbCBvciB4bWwgc3R5bGUg
bWFya3VwIHRoYXQgY291bGQgb3RoZXJ3aXNlIG9ic2N1cmUgdGhlIGNvbnRlbnQuCisgKi8KKyAK
Kworc3RydWN0IFVDaGFyc2V0RGV0ZWN0b3I7CisvKioKKyAgKiBTdHJ1Y3R1cmUgcmVwcmVzZW50
aW5nIGEgY2hhcnNldCBkZXRlY3RvcgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVm
IHN0cnVjdCBVQ2hhcnNldERldGVjdG9yIFVDaGFyc2V0RGV0ZWN0b3I7CisKK3N0cnVjdCBVQ2hh
cnNldE1hdGNoOworLyoqCisgICogIE9wYXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgbWF0
Y2ggdGhhdCB3YXMgaWRlbnRpZmllZAorICAqICBmcm9tIGEgY2hhcnNldCBkZXRlY3Rpb24gb3Bl
cmF0aW9uLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLwordHlwZWRlZiBzdHJ1Y3QgVUNoYXJz
ZXRNYXRjaCBVQ2hhcnNldE1hdGNoOworCisvKioKKyAgKiAgT3BlbiBhIGNoYXJzZXQgZGV0ZWN0
b3IuCisgICoKKyAgKiAgQHBhcmFtIHN0YXR1cyBBbnkgZXJyb3IgY29uZGl0aW9ucyBvY2N1cnJp
bmcgZHVyaW5nIHRoZSBvcGVuCisgICogICAgICAgICAgICAgICAgb3BlcmF0aW9uIGFyZSByZXBv
cnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogIEByZXR1cm4gdGhlIG5ld2x5IG9wZW5l
ZCBjaGFyc2V0IGRldGVjdG9yLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCBV
Q2hhcnNldERldGVjdG9yICogVV9FWFBPUlQyCit1Y3NkZXRfb3BlbihVRXJyb3JDb2RlICAgKnN0
YXR1cyk7CisKKy8qKgorICAqIENsb3NlIGEgY2hhcnNldCBkZXRlY3Rvci4gIEFsbCBzdG9yYWdl
IGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzCisgICogICBvd25lZCBieSB0aGlzIGNoYXJzZXQgZGV0
ZWN0b3Igd2lsbCBiZSByZWxlYXNlZC4gIEZhaWx1cmUgdG8KKyAgKiAgIGNsb3NlIGEgY2hhcnNl
dCBkZXRlY3RvciB3aGVuIGZpbmlzaGVkIHdpdGggaXQgY2FuIHJlc3VsdCBpbgorICAqICAgbWVt
b3J5IGxlYWtzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhl
IGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgY2xvc2VkLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAq
LworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X2Nsb3NlKFVDaGFyc2V0RGV0ZWN0b3Ig
KnVjc2QpOworCisvKioKKyAgKiBTZXQgdGhlIGlucHV0IGJ5dGUgZGF0YSB3aG9zZSBjaGFyc2V0
IGlzIHRvIGRldGVjdGVkLgorICAqCisgICogT3duZXJzaGlwIG9mIHRoZSBpbnB1dCAgdGV4dCBi
eXRlIGFycmF5IHJlbWFpbnMgd2l0aCB0aGUgY2FsbGVyLgorICAqIFRoZSBpbnB1dCBzdHJpbmcg
bXVzdCBub3QgYmUgYWx0ZXJlZCBvciBkZWxldGVkIHVudGlsIHRoZSBjaGFyc2V0CisgICogZGV0
ZWN0b3IgaXMgZWl0aGVyIGNsb3NlZCBvciByZXNldCB0byByZWZlciB0byBkaWZmZXJlbnQgaW5w
dXQgdGV4dC4KKyAgKgorICAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8g
YmUgdXNlZC4KKyAgKiBAcGFyYW0gdGV4dEluIHRoZSBpbnB1dCB0ZXh0IG9mIHVua25vd24gZW5j
b2RpbmcuICAgLgorICAqIEBwYXJhbSBsZW4gICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgdGV4
dCwgb3IgLTEgaWYgdGhlIHRleHQKKyAgKiAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVk
LgorICAqIEBwYXJhbSBzdGF0dXMgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJh
Y2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RS
QUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfc2V0VGV4dChVQ2hhcnNldERldGVjdG9yICp1Y3Nk
LCBjb25zdCBjaGFyICp0ZXh0SW4sIGludDMyX3QgbGVuLCBVRXJyb3JDb2RlICpzdGF0dXMpOwor
CisKKy8qKiBTZXQgdGhlIGRlY2xhcmVkIGVuY29kaW5nIGZvciBjaGFyc2V0IGRldGVjdGlvbi4K
KyAqICBUaGUgZGVjbGFyZWQgZW5jb2Rpbmcgb2YgYW4gaW5wdXQgdGV4dCBpcyBhbiBlbmNvZGlu
ZyBvYnRhaW5lZAorICogIGJ5IHRoZSB1c2VyIGZyb20gYW4gaHR0cCBoZWFkZXIgb3IgeG1sIGRl
Y2xhcmF0aW9uIG9yIHNpbWlsYXIgc291cmNlIHRoYXQKKyAqICBjYW4gYmUgcHJvdmlkZWQgYXMg
YW4gYWRkaXRpb25hbCBoaW50IHRvIHRoZSBjaGFyc2V0IGRldGVjdG9yLgorICoKKyAqICBIb3cg
YW5kIHdoZXRoZXIgdGhlIGRlY2xhcmVkIGVuY29kaW5nIHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhl
CisgKiAgZGV0ZWN0aW9uIHByb2Nlc3MgaXMgVEJELgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAg
dGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBlbmNvZGluZyAgYW4g
ZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGRhdGEgb2J0YWluZWQgZnJvbQorICogICAgICAgICAg
ICAgICAgICBhIGhlYWRlciBvciBkZWNsYXJhdGlvbiBvciBvdGhlciBzb3VyY2Ugb3V0c2lkZQor
ICogICAgICAgICAgICAgICAgICBvZiB0aGUgYnl0ZSBkYXRhIGl0c2VsZi4KKyAqIEBwYXJhbSBs
ZW5ndGggICAgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RpbmcgbmFtZSwgb3IgLTEgaWYgdGhlIG5h
bWUgc3RyaW5nCisgKiAgICAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICogQHBh
cmFtIHN0YXR1cyAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0
aGlzIHZhcmlhYmxlLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgdm9pZCBV
X0VYUE9SVDIKK3Vjc2RldF9zZXREZWNsYXJlZEVuY29kaW5nKFVDaGFyc2V0RGV0ZWN0b3IgKnVj
c2QsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAqc3Rh
dHVzKTsKKworCisvKioKKyAqIFJldHVybiB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0
aGUgc3VwcGxpZWQgaW5wdXQgZGF0YS4KKyAqIAorICogTm90ZSB0aG91Z2gsIHRoYXQgYmVjYXVz
ZSB0aGUgZGV0ZWN0aW9uIAorICogb25seSBsb29rcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0
IGRhdGEsCisgKiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJldHVybmVkIGNoYXJz
ZXQgd2lsbCBmYWlsIHRvIGhhbmRsZQorICogdGhlIGZ1bGwgc2V0IG9mIGlucHV0IGRhdGEuCisg
KiA8cD4KKyAqIFRoZSByZXR1cm5lZCBVQ2hhcnNldE1hdGNoIG9iamVjdCBpcyBvd25lZCBieSB0
aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqIEl0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBk
ZXRlY3RvciBpbnB1dCBpcyByZXNldCwgb3IgdW50aWwKKyAqIHRoZSBkZXRlY3RvciBpcyBjbG9z
ZWQuCisgKiA8cD4KKyAqIFRoZSBmdW5jdGlvbiB3aWxsIGZhaWwgaWYKKyAqICA8dWw+CisgKiAg
ICA8bGk+bm8gY2hhcnNldCBhcHBlYXJzIHRvIG1hdGNoIHRoZSBkYXRhLjwvbGk+CisgKiAgICA8
bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqCisg
KiBAcGFyYW0gdWNzZCAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBA
cGFyYW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgKiBAcmV0dXJuICAgICAgICAgIGEgVUNoYXJzZXRNYXRjaCAgcmVw
cmVzZW50aW5nIHRoZSBiZXN0IG1hdGNoaW5nIGNoYXJzZXQsCisgKiAgICAgICAgICAgICAgICAg
IG9yIE5VTEwgaWYgbm8gY2hhcnNldCBtYXRjaGVzIHRoZSBieXRlIGRhdGEuCisgKgorICogQGRy
YWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICogVV9FWFBPUlQy
Cit1Y3NkZXRfZGV0ZWN0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisgICAgCisKKy8qKgorICogIEZpbmQgYWxsIGNoYXJzZXQgbWF0Y2hlcyB0aGF0IGFwcGVh
ciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGlucHV0LAorICogIHJldHVybmluZyBhbiBhcnJh
eSBvZiByZXN1bHRzLiAgVGhlIHJlc3VsdHMgYXJlIG9yZGVyZWQgd2l0aCB0aGUKKyAqICBiZXN0
IHF1YWxpdHkgbWF0Y2ggZmlyc3QuCisgKgorICogIEJlY2F1c2UgdGhlIGRldGVjdGlvbiBvbmx5
IGxvb2tzIGF0IGEgbGltaXRlZCBhbW91bnQgb2YgdGhlCisgKiAgaW5wdXQgYnl0ZSBkYXRhLCBz
b21lIG9mIHRoZSByZXR1cm5lZCBjaGFyc2V0cyBtYXkgZmFpbCB0byBoYW5kbGUKKyAqICB0aGUg
YWxsIG9mIGlucHV0IGRhdGEuCisgKiAgPHA+CisgKiAgVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0
Y2ggb2JqZWN0cyBhcmUgb3duZWQgYnkgdGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiAgVGhleSB3
aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVk
CisgKiAgCisgKiA8cD4KKyAqIFJldHVybiBhbiBlcnJvciBpZiAKKyAqICA8dWw+CisgKiAgICA8
bGk+bm8gY2hhcnNldHMgYXBwZWFyIHRvIG1hdGNoIHRoZSBpbnB1dCBkYXRhLjwvbGk+CisgKiAg
ICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAq
IAorICogQHBhcmFtIHVjc2QgICAgICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNl
ZC4KKyAqIEBwYXJhbSBtYXRjaGVzRm91bmQgIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdp
bGwgYmUgc2V0IHRvIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJz
ZXRzIGlkZW50aWZpZWQgdGhhdCBhcmUgY29uc2lzdGVudCB3aXRoCisgKiAgICAgICAgICAgICAg
ICAgICAgICB0aGUgaW5wdXQgZGF0YS4gIE91dHB1dCBvbmx5LgorICogQHBhcmFtIHN0YXR1cyAg
ICAgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJp
YWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBw
b2ludGVycyB0byBVQ2hhclNldE1hdGNoIG9iamVjdHMuCisgKiAgICAgICAgICAgICAgICAgICAg
ICBUaGlzIGFycmF5LCBhbmQgdGhlIFVDaGFyU2V0TWF0Y2ggaW5zdGFuY2VzIHRvIHdoaWNoIGl0
IHJlZmVycywKKyAqICAgICAgICAgICAgICAgICAgICAgIGFyZSBvd25lZCBieSB0aGUgVUNoYXJz
ZXREZXRlY3RvciwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsCisgKiAgICAgICAgICAgICAg
ICAgICAgICB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVkLgorICogQGRyYWZ0IElD
VSAzLjQKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICoqIFVfRVhQT1JUMgordWNz
ZGV0X2RldGVjdEFsbChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBpbnQzMl90ICptYXRjaGVzRm91
bmQsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAqICBHZXQgdGhlIG5hbWUgb2Yg
dGhlIGNoYXJzZXQgcmVwcmVzZW50ZWQgYnkgYSBVQ2hhcnNldE1hdGNoLgorICoKKyAqICBUaGUg
c3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICog
IFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRN
YXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBUaGUgbmFtZSByZXR1cm5lZCBpcyBzdWl0YWJs
ZSBmb3IgdXNlIHdpdGggdGhlIElDVSBjb252ZXJzaW9uIEFQSXMuCisgKgorICogIEBwYXJhbSB1
Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkg
ZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICog
IEByZXR1cm4gICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtYXRjaGluZyBjaGFyc2V0LgorICoKKyAq
ICBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vj
c2RldF9nZXROYW1lKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisKKy8qKgorICogIEdldCBhIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgcXVhbGl0eSBv
ZiB0aGUgbWF0Y2ggb2YgdGhlIGJ5dGUKKyAqICBkYXRhIHdpdGggdGhlIGNoYXJzZXQuICBDb25m
aWRlbmNlIG51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvIHRvIDEwMCwKKyAqICB3aXRoIDEwMCByZXBy
ZXNlbnRpbmcgY29tcGxldGUgY29uZmlkZW5jZSBhbmQgemVybyByZXByZXNlbnRpbmcKKyAqICBu
byBjb25maWRlbmNlLgorICoKKyAqICBUaGUgY29uZmlkZW5jZSB2YWx1ZXMgYXJlIHNvbWV3aGF0
IGFyYml0cmFyeS4gIFRoZXkgZGVmaW5lIGFuCisgKiAgYW4gb3JkZXJpbmcgd2l0aGluIHRoZSBy
ZXN1bHRzIGZvciBhbnkgc2luZ2xlIGRldGVjdGlvbiBvcGVyYXRpb24KKyAqICBidXQgYXJlIG5v
dCBnZW5lcmFsbHkgY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSByZXN1bHRzIGZvciBkaWZmZXJlbnQg
aW5wdXQuCisgKgorICogIEEgY29uZmlkZW5jZSB2YWx1ZSBvZiB0ZW4gZG9lcyBoYXZlIGEgZ2Vu
ZXJhbCBtZWFuaW5nIC0gaXQgaXMgdXNlZAorICogIGZvciBjaGFyc2V0cyB0aGF0IGNhbiByZXBy
ZXNlbnQgdGhlIGlucHV0IGRhdGEsIGJ1dCBmb3Igd2hpY2ggdGhlcmUKKyAqICBpcyBubyBvdGhl
ciBpbmRpY2F0aW9uIHRoYXQgc3VnZ2VzdHMgdGhhdCB0aGUgY2hhcnNldCBpcyB0aGUgY29ycmVj
dCBvbmUuCisgKiAgUHVyZSA3IGJpdCBBU0NJSSBkYXRhLCBmb3IgZXhhbXBsZSwgaXMgY29tcGF0
aWJsZSB3aXRoIGEKKyAqICBncmVhdCBtYW55IGNoYXJzZXRzLCBtb3N0IG9mIHdoaWNoIHdpbGwg
YXBwZWFyIGFzIHBvc3NpYmxlIG1hdGNoZXMKKyAqICB3aXRoIGEgY29uZmlkZW5jZSBvZiAxMC4K
KyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBw
YXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRo
aXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAgICAgQSBjb25maWRlbmNlIG51bWJlciBmb3Ig
dGhlIGNoYXJzZXQgbWF0Y2guCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQg
aW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRDb25maWRlbmNlKGNvbnN0IFVDaGFyc2V0TWF0
Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogIEdldCB0aGUgUkZDIDMw
NjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqICBUaGUg
Q2hhcnNldCBEZXRlY3Rpb24gc2VydmljZSBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGRldGVj
dGluZworICogIGNoYXJzZXRzLCBub3QgbGFuZ3VhZ2UuICBGb3Igc29tZSwgYnV0IG5vdCBhbGws
IGNoYXJzZXRzLCBhIGxhbmd1YWdlIGlzCisgKiAgaWRlbnRpZmllZCBhcyBhIGJ5cHJvZHVjdCBv
ZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGF0IGlzIHdoYXQKKyAqICBpcyByZXR1cm5l
ZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqICBDQVVUSU9OOgorICogICAgMS4gIExhbmd1YWdl
IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIGlucHV0IGRhdGEgZW5jb2RlZCBpbgor
ICogICAgICAgIGFsbCBjaGFyc2V0cy4gSW4gcGFydGljdWxhciwgbm8gbGFuZ3VhZ2UgaXMgaWRl
bnRpZmllZAorICogICAgICAgIGZvciBVVEYtOCBpbnB1dCBkYXRhLgorICoKKyAqICAgIDIuICBD
bG9zZWx5IHJlbGF0ZWQgbGFuZ3VhZ2VzIG1heSBzb21ldGltZXMgYmUgY29uZnVzZWQuCisgKgor
ICogIElmIG1vcmUgYWNjdXJhdGUgbGFuZ3VhZ2UgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLCBhIGxp
bmd1aXN0aWMKKyAqICBhbmFseXNpcyBwYWNrYWdlIHNob3VsZCBiZSB1c2VkLgorICoKKyAqICBU
aGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQor
ICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJz
ZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNl
dCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMg
YXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBU
aGUgUkZDIDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLCBvcgor
ICogICAgICAgICAgICAgICAgIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbGFuZ3VhZ2UgY291bGQg
bm90IGJlIGRldGVybWluZWQuCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQg
Y29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNzZGV0X2dldExhbmd1YWdlKGNvbnN0IFVDaGFyc2V0
TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgICogIEdldCB0aGUg
ZW50aXJlIGlucHV0IHRleHQgYXMgYSBVQ2hhciBzdHJpbmcsIHBsYWNpbmcgaXQgaW50bworICAq
ICBhIGNhbGxlci1zdXBwbGllZCBidWZmZXIuICBBIHRlcm1pbmF0aW5nCisgICogIE5VTCBjaGFy
YWN0ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnVmZmVyIGlmIHNwYWNlIGlzIGF2YWlsYWJs
ZS4KKyAgKgorICAqICBUaGUgbnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZywg
bm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAgKiAgTlVMLCBpcyByZXR1cm5lZC4gCisg
ICoKKyAgKiAgSWYgdGhlIHN1cHBsaWVkIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQg
dG8gaG9sZCB0aGUgb3V0cHV0LAorICAqICB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhcmUg
dW5kZWZpbmVkLiAgVGhlIGZ1bGwgb3V0cHV0IHN0cmluZyBsZW5ndGgKKyAgKiAgKGluIFVDaGFy
cykgaXMgcmV0dXJuZWQgYXMgYWx3YXlzLCBhbmQgY2FuIGJlIHVzZWQgdG8gYWxsb2NhdGUgYSBi
dWZmZXIKKyAgKiAgb2YgdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgKgorICAqCisgICogQHBhcmFtIHVj
c20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICAqIEBwYXJhbSBidWYgICAgIEEgVUNo
YXIgYnVmZmVyIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBjb252ZXJ0ZWQgdGV4dCBkYXRhLgorICAq
IEBwYXJhbSBjYXAgICAgIFRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGluIFVDaGFycy4KKyAg
KiBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBp
biB0aGlzIHZhcmlhYmxlLgorICAqIEByZXR1cm4gICAgICAgIFRoZSBudW1iZXIgb2YgVUNoYXJz
IGluIHRoZSBvdXRwdXQgc3RyaW5nLgorICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1Vf
RFJBRlQgIGludDMyX3QgVV9FWFBPUlQyCit1Y3NkZXRfZ2V0VUNoYXJzKGNvbnN0IFVDaGFyc2V0
TWF0Y2ggKnVjc20sCisgICAgICAgICAgICAgICAgIFVDaGFyICpidWYsIGludDMyX3QgY2FwLCBV
RXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgICogIEdldCBhbiBpdGVyYXRvciBvdmVy
IHRoZSBzZXQgb2YgYWxsIGRldGVjdGFibGUgY2hhcnNldHMgLSAKKyAgKiAgb3ZlciB0aGUgY2hh
cnNldHMgdGhhdCBhcmUga25vd24gdG8gdGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZp
Y2UuCisgICoKKyAgKiAgVGhlIHJldHVybmVkIFVFbnVtZXJhdGlvbiBwcm92aWRlcyBhY2Nlc3Mg
dG8gdGhlIG5hbWVzIG9mCisgICogIHRoZSBjaGFyc2V0cy4KKyAgKgorICAqICBUaGUgc3RhdGUg
b2YgdGhlIENoYXJzZXQgZGV0ZWN0b3IgdGhhdCBpcyBwYXNzZWQgaW4gZG9lcyBub3QKKyAgKiAg
YWZmZWN0IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiwgYnV0IHJlcXVpcmluZyBhIHZhbGlk
LCBvcGVuCisgICogIGNoYXJzZXQgZGV0ZWN0b3IgYXMgYSBwYXJhbWV0ZXIgaW5zdXJlcyB0aGF0
IHRoZSBjaGFyc2V0IGRldGVjdGlvbgorICAqICBzZXJ2aWNlIGhhcyBiZWVuIHNhZmVseSBpbml0
aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVxdWlyZWQgZGV0ZWN0aW9uCisgICogIGRhdGEgaXMgYXZh
aWxhYmxlLgorICAqCisgICogIEBwYXJhbSB1Y3NkIGEgQ2hhcnNldCBkZXRlY3Rvci4KKyAgKiAg
QHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4g
dGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJldHVybiBhbiBpdGVyYXRvciBwcm92aWRpbmcgYWNjZXNz
IHRvIHRoZSBkZXRlY3RhYmxlIGNoYXJzZXQgbmFtZXMuCisgICogIEBkcmFmdCBJQ1UgMy42Cisg
ICovCisKK1VfRFJBRlQgIFVFbnVtZXJhdGlvbiAqIFVfRVhQT1JUMgordWNzZGV0X2dldEFsbERl
dGVjdGFibGVDaGFyc2V0cyhjb25zdCBVQ2hhcnNldERldGVjdG9yICp1Y3NkLCAgVUVycm9yQ29k
ZSAqc3RhdHVzKTsKKworCisvKioKKyAgKiAgVGVzdCB3aGV0aGVyIGlucHV0IGZpbHRlcmluZyBp
cyBlbmFibGVkIGZvciB0aGlzIGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIElucHV0IGZpbHRlcmlu
ZyByZW1vdmVzIHRleHQgdGhhdCBhcHBlYXJzIHRvIGJlIEhUTUwgb3IgeG1sCisgICogIG1hcmt1
cCBmcm9tIHRoZSBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvZGUgcGFnZSBkZXRlY3Rpb24K
KyAgKiAgaGV1cmlzdGljcy4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0
ZWN0b3IgdG8gY2hlY2suCisgICogIEByZXR1cm4gVFJVRSBpZiBmaWx0ZXJpbmcgaXMgZW5hYmxl
ZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjQKKyAgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgor
dWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFibGVkKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2Qp
OworCisKKy8qKgorICogRW5hYmxlIGZpbHRlcmluZyBvZiBpbnB1dCB0ZXh0LiBJZiBmaWx0ZXJp
bmcgaXMgZW5hYmxlZCwKKyAqIHRleHQgd2l0aGluIGFuZ2xlIGJyYWNrZXRzICgiPCIgYW5kICI+
Iikgd2lsbCBiZSByZW1vdmVkCisgKiBiZWZvcmUgZGV0ZWN0aW9uLCB3aGljaCB3aWxsIHJlbW92
ZSBtb3N0IEhUTUwgb3IgeG1sIG1hcmt1cC4KKyAqCisgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFy
c2V0IGRldGVjdG9yIHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtIGZpbHRlciA8Y29kZT50cnVl
PC9jb2RlPiB0byBlbmFibGUgaW5wdXQgdGV4dCBmaWx0ZXJpbmcuCisgKiBAcmV0dXJuIFRoZSBw
cmV2aW91cyBzZXR0aW5nLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgIFVC
b29sIFVfRVhQT1JUMgordWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKFVDaGFyc2V0RGV0ZWN0b3Ig
KnVjc2QsIFVCb29sIGZpbHRlcik7CisKKyNlbmRpZgorI2VuZGlmICAgLyogX19VQ1NERVRfSCAq
LworCisKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUz
LDExIEBAIHN0YXRpYyBpbnQgbnVtUmVxdWVzdHMoRG9jdW1lbnQqIGRvY3VtZW4KICAgICByZXR1
cm4gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKIH0KIAorc3RhdGljIGlu
bGluZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFt
ZSwgY29uc3QgRnJhbWUqIHBhcmVudEZyYW1lKSAKK3sKKyAgICByZXR1cm4gcGFyZW50RnJhbWUg
JiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzcyhm
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKIEZyYW1lTG9hZGVyOjpG
cmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAg
OiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtOTk3LDEyICsxMDAy
LDI4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICB9CiAg
ICAgCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
bV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVm
YXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKLSAgICAgICAgaWYgKG1fZW5jb2Rp
bmcuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1l
LT5zZXR0aW5ncygpKSB7CisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpjcmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLAorICAgICAgICAgICAgICAgIHNldHRpbmdz
LT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT51
c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKICAgICAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9
IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50RnJhbWUg
JiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzcyht
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBt
X2RlY29kZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29k
aW5nKCksIFRleHRSZXNvdXJjZURlY29kZXI6OkRlZmF1bHRFbmNvZGluZyk7CisgICAgICAgICAg
ICAvLyBTZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBv
bmx5IGlmCisgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMg
c2hhcmUgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAgICAgIC8vIFdlIGltcG9zZSB0aGlz
IGNvbmRpdGlvbiBiZWNhdXNlIHNvbWVib2R5IGNhbiBtYWtlIGEgY2hpbGQgZnJhbWUgCisgICAg
ICAgICAgICAvLyBjb250YWluaW5nIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgaHRtbC9qYXZhc2NyaXB0
IGluIG9uZSBlbmNvZGluZworICAgICAgICAgICAgLy8gdGhhdCBjYW4gYmUgbWlzdGFrZW4gZm9y
IGhpbnRFbmNvZGluZyAob3IgcmVsYXRlZCBlbmNvZGluZykgYnkKKyAgICAgICAgICAgIC8vIGFu
IGF1dG8gZGV0ZWN0b3IuIFdoZW4gaW50ZXJwcmV0ZWQgaW4gdGhlIGxhdHRlciwgaXQgY291bGQg
YmUKKyAgICAgICAgICAgIC8vIGFuIGF0dGFjayB2ZWN0b3IuCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBtaWdodCBiZSB0b28gY2F1dGlvdXMgZm9yIG5vbi03Yml0LWVuY29kaW5ncyBhbmQK
KyAgICAgICAgICAgIC8vIHdlIG1heSBjb25zaWRlciByZWxheGluZyB0aGlzIGxhdGVyIGFmdGVy
IHRlc3RpbmcuCisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rpbmco
bV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0SGlu
dEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIFN0cmluZygpKTsKKyAgICAgICAgRnJhbWUqIHBhcmVudEZy
YW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKG1fZW5jb2Rpbmcu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rp
bmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSwgVGV4dFJl
c291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nLAogICAgICAg
ICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21I
VFRQSGVhZGVyKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rv
ci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBAIC0zMjEsMTUgKzMy
MywxNyBAQCBjb25zdCBUZXh0RW5jb2RpbmcmIFRleHRSZXNvdXJjZURlY29kZXI6CiAgICAgcmV0
dXJuIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZzsKIH0KIAotVGV4dFJlc291cmNlRGVjb2Rlcjo6
VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5j
b2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykKK1RleHRSZXNvdXJjZURlY29kZXI6OlRl
eHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29k
aW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3Ip
CiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKG1pbWVUeXBlKSkKICAg
ICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNwZWNpZmllZERl
ZmF1bHRFbmNvZGluZykpCiAgICAgLCBtX3NvdXJjZShEZWZhdWx0RW5jb2RpbmcpCisgICAgLCBt
X2hpbnRFbmNvZGluZygwKQogICAgICwgbV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9j
aGVja2VkRm9yQ1NTQ2hhcnNldChmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0
KGZhbHNlKQogICAgICwgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcoZmFsc2UpCiAgICAgLCBtX3Nh
d0Vycm9yKGZhbHNlKQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdE
ZXRlY3RvcikKIHsKIH0KIApAQCAtNDUxLDcgKzQ1NSw3IEBAIHNpemVfdCBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpjaGVja0ZvckJPTSgKIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0Zv
ckNTU0NoYXJzZXQoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92ZWREYXRh
VG9CdWZmZXIpCiB7Ci0gICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZykgeworICAg
IGlmIChtX3NvdXJjZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0gRW5jb2RpbmdG
cm9tUGFyZW50RnJhbWUpIHsKICAgICAgICAgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTUzMiw3ICs1MzYsNyBAQCBjb25zdCBp
bnQgYnl0ZXNUb0NoZWNrVW5jb25kaXRpb25hbGx5ID0gCiAKIGJvb2wgVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y2hlY2tGb3JIZWFkQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLCBi
b29sJiBtb3ZlZERhdGFUb0J1ZmZlcikKIHsKLSAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVu
Y29kaW5nKSB7CisgICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZyAmJiBtX3NvdXJj
ZSAhPSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSkgewogICAgICAgICBtX2NoZWNrZWRGb3JIZWFk
Q2hhcnNldCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc1OSw2ICs3
NjMsMjMgQEAgdm9pZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RKYXBhbmVzZQogICAgIH0K
IH0KIAorLy8gV2UgdXNlIHRoZSBlbmNvZGluZyBkZXRlY3RvciBpbiB0d28gY2FzZXM6CisvLyAg
IDEuIEVuY29kaW5nIGRldGVjdG9yIGlzIHR1cm5lZCBPTiBhbmQgbm8gb3RoZXIgZW5jb2Rpbmcg
c291cmNlIGlzCisvLyAgICAgIGF2YWlsYWJsZSAodGhhdCBpcywgaXQncyBEZWZhdWx0RW5jb2Rp
bmcpLgorLy8gICAyLiBFbmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5kIHRoZSBlbmNv
ZGluZyBpcyBzZXQgdG8KKy8vICAgICAgdGhlIGVuY29kaW5nIG9mIHRoZSBwYXJlbnQgZnJhbWUs
IHdoaWNoIGlzIGFsc28gYXV0by1kZXRlY3RlZC4KKy8vICAgTm90ZSB0aGF0IGNvbmRpdGlvbiAj
MiBpcyBOT1Qgc2F0aXNmaWVkIHVubGVzcyBwYXJlbnQtY2hpbGQgZnJhbWUKKy8vICAgcmVsYXRp
b25zaGlwIGlzIGNvbXBsaWFudCB0byB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LiBJZiB0aGV5J3Jl
IGZyb20KKy8vICAgZGlmZmVyZW50IGRvbWFpbnMsIHxtX3NvdXJjZXwgd291bGQgbm90IGJlIHNl
dCB0byBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZQorLy8gICBpbiB0aGUgZmlyc3QgcGxhY2UuIAor
Ym9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3QKK3sKKyAg
ICAvLyBKdXN0IGNoZWNraW5nIG1faGludEVuY29kaW5nIHN1ZmZpY2VzIGhlcmUgYmVjYXVzZSBp
dCdzIG9ubHkgc2V0CisgICAgLy8gaW4gc2V0SGludEVuY29kaW5nIHdoZW4gdGhlIHNvdXJjZSBp
cyBBdXRvRGV0ZWN0ZWRFbmNvZGluZy4KKyAgICByZXR1cm4gbV91c2VzRW5jb2RpbmdEZXRlY3Rv
cgorICAgICAgICAmJiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29kaW5nIHx8IChtX3NvdXJjZSA9
PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX2hpbnRFbmNvZGluZykpOyAKK30KKwogU3Ry
aW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
bGVuKQogewogICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7CkBAIC03NzUsMTAgKzc5NiwyNCBA
QCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAgICAgIGlmICgh
Y2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAg
ICAgICAgIHJldHVybiAiIjsKIAotICAgIC8vIERvIHRoZSBhdXRvLWRldGVjdCBpZiBvdXIgZGVm
YXVsdCBlbmNvZGluZyBpcyBvbmUgb2YgdGhlIEphcGFuZXNlIG9uZXMuCi0gICAgLy8gRklYTUU6
IEl0IHNlZW1zIHdyb25nIHRvIGNoYW5nZSBvdXIgZW5jb2RpbmcgZG93bnN0cmVhbSBhZnRlciB3
ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLgorICAgIC8vIEZJWE1FOiBJdCBzZWVt
cyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIKKyAgICAvLyB3
ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLiBIb3dldmVyLCBpdCdzIG5vdCBwb3Nz
aWJsZQorICAgIC8vIHRvIGF2b2lkIGluIGEgc2Vuc2UgaW4gdHdvIGNhc2VzIGJlbG93IGJlY2F1
c2UgdHJpZ2dlcmluZyBjb25kaXRpb25zCisgICAgLy8gZm9yIGJvdGggY2FzZXMgZGVwZW5kIG9u
IHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvbid0IGJlIGF2YWlsYWJsZQorICAgIC8vIHVudGlsIHdl
IGRvIHBhcnRpYWwgcmVhZC4gCisgICAgLy8gVGhlIGZpcnN0IGNhc2UgaGFkIGJldHRlciBiZSBy
ZW1vdmVkIGFsdG9nZXRoZXIgKHNlZSBidWcgMjE5OTApCisgICAgLy8gb3IgYXQgbGVhc3QgYmUg
bWFkZSB0byBiZSBpbnZva2VkIG9ubHkgd2hlbiB0aGUgZW5jb2RpbmcgZGV0ZWN0aW9uCisgICAg
Ly8gaXMgdHVybmVkIG9uLiAKKyAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgMSkgdXNpbmcgSmFw
YW5lc2UgZGV0ZWN0b3IgaWYgb3VyIGRlZmF1bHQgZW5jb2RpbmcgaXMKKyAgICAvLyBvbmUgb2Yg
dGhlIEphcGFuZXNlIGRldGVjdG9yIG9yIDIpIHVzaW5nIGRldGVjdFRleHRFbmNvZGluZyBpZiBl
bmNvZGluZworICAgIC8vIGRldGVjdGlvbiBpcyB0dXJuZWQgb24uCiAgICAgaWYgKG1fc291cmNl
ICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0ZWRFbmNvZGlu
ZyAmJiBtX2VuY29kaW5nLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2UgaWYgKHNob3VsZEF1dG9EZXRlY3QoKSkgeworICAg
ICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRFbmNvZGluZzsKKyAgICAgICAgaWYgKGRldGVjdFRl
eHRFbmNvZGluZyhkYXRhLCBsZW4sIG1faGludEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykp
CisgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRvRGV0ZWN0ZWRF
bmNvZGluZyk7CisgICAgfQogCiAgICAgQVNTRVJUKG1fZW5jb2RpbmcuaXNWYWxpZCgpKTsKIApA
QCAtODAxLDYgKzgzNiwxNyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNv
bnN0CiAKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCgpCiB7CisgICAvLyBJZiB3
ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9jdW1lbnQgaXMg
Y29tcGxldGVseQorICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgZW5jb2Rpbmcg
aWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKKyAgIC8vIGF1dG9kZXRlY3Rpb24gaXMgc2F0aXNmaWVk
LgorICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJiYgc2hvdWxkQXV0b0RldGVjdCgpCisgICAgICAg
ICYmICgoIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBlID09IEhUTUwg
fHwgbV9jb250ZW50VHlwZSA9PSBYTUwpKSB8fCAoIW1fY2hlY2tlZEZvckNTU0NoYXJzZXQgJiYg
KG1fY29udGVudFR5cGUgPT0gQ1NTKSkpKSB7CisgICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0
ZWRFbmNvZGluZzsKKyAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9idWZmZXIuZGF0
YSgpLCBtX2J1ZmZlci5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGludEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykpCisgICAgICAgICAgICAgc2V0RW5jb2Rp
bmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOworICAgIH0KKwogICAg
IGlmICghbV9jb2RlYykKICAgICAgICAgbV9jb2RlYy5zZXQobmV3VGV4dENvZGVjKG1fZW5jb2Rp
bmcpLnJlbGVhc2UoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJ
KHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTMgQEAgcHVibGljOgogICAgICAgICBFbmNv
ZGluZ0Zyb21NZXRhVGFnLAogICAgICAgICBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0LAogICAgICAg
ICBFbmNvZGluZ0Zyb21IVFRQSGVhZGVyLAotICAgICAgICBVc2VyQ2hvc2VuRW5jb2RpbmcKKyAg
ICAgICAgVXNlckNob3NlbkVuY29kaW5nLAorICAgICAgICBFbmNvZGluZ0Zyb21QYXJlbnRGcmFt
ZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0
RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVz
b3VyY2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVu
Y29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSwgYm9vbCB1c2VzRW5jb2Rp
bmdEZXRlY3RvciA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0
RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7CiAgICAgfQogICAgIH5UZXh0UmVzb3Vy
Y2VEZWNvZGVyKCk7CiAKQEAgLTUxLDExICs1MiwyMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRl
Y29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBTdHJpbmcgZmx1c2go
KTsKIAorICAgIHZvaWQgc2V0SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIq
IGhpbnREZWNvZGVyKQorICAgIHsKKyAgICAgICAgLy8gaGludEVuY29kaW5nIGlzIGZvciB1c2Ug
d2l0aCBhdXRvZGV0ZWN0aW9uLCB3aGljaCBzaG91bGQgYmUgCisgICAgICAgIC8vIG9ubHkgaW52
b2tlZCAgd2hlbiBoaW50RW5jb2RpbmcgY29tZXMgZnJvbSBhdXRvLWRldGVjdGlvbi4KKyAgICAg
ICAgaWYgKGhpbnREZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKKyAg
ICAgICAgICAgIG1faGludEVuY29kaW5nID0gaGludERlY29kZXItPmVuY29kaW5nKCkubmFtZSgp
OworICAgIH0KKyAgIAogICAgIHZvaWQgdXNlTGVuaWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxl
bmllbnRYTUxEZWNvZGluZyA9IHRydWU7IH0KICAgICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRlOgotICAgIFRleHRSZXNvdXJjZURlY29kZXIo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2Rp
bmcpOworICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsKIAogICAgIGVudW0gQ29udGVudFR5cGUgeyBQ
bGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8vIFBsYWluVGV4dCBvbmx5IGNoZWNrcyBmb3Ig
Qk9NLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKQEAgLTY1LDE3ICs3NSwyMCBAQCBwcml2YXRlOgogICAgIGJvb2wg
Y2hlY2tGb3JDU1NDaGFyc2V0KGNvbnN0IGNoYXIqLCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRv
QnVmZmVyKTsKICAgICBib29sIGNoZWNrRm9ySGVhZENoYXJzZXQoY29uc3QgY2hhciosIHNpemVf
dCwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpOwogICAgIHZvaWQgZGV0ZWN0SmFwYW5lc2VFbmNv
ZGluZyhjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAgICBib29sIHNob3VsZEF1dG9EZXRlY3QoKSBj
b25zdDsKIAogICAgIENvbnRlbnRUeXBlIG1fY29udGVudFR5cGU7CiAgICAgVGV4dEVuY29kaW5n
IG1fZW5jb2Rpbmc7CiAgICAgT3duUHRyPFRleHRDb2RlYz4gbV9jb2RlYzsKICAgICBFbmNvZGlu
Z1NvdXJjZSBtX3NvdXJjZTsKKyAgICBjb25zdCBjaGFyKiBtX2hpbnRFbmNvZGluZzsKICAgICBW
ZWN0b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JCT007CiAgICAgYm9v
bCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0OwogICAgIGJvb2wgbV9jaGVja2VkRm9ySGVhZENoYXJz
ZXQ7CiAgICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZzsgLy8gRG9uJ3Qgc3RvcCBvbiBY
TUwgZGVjb2RpbmcgZXJyb3JzLgogICAgIGJvb2wgbV9zYXdFcnJvcjsKKyAgICBib29sIG1fdXNl
c0VuY29kaW5nRGV0ZWN0b3I7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDQx
OTExKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
NiArODYsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAgICAsIG1fc2hvdWxk
UGFpbnRDdXN0b21TY3JvbGxiYXJzKGZhbHNlKQogICAgICwgbV96b29tc1RleHRPbmx5KGZhbHNl
KQogICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUodHJ1ZSkKKyAgICAsIG1f
dXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpCiAgICAgLCBtX21heGltdW1EZWNvZGVkSW1hZ2VT
aXplKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAgICAgLCBtX2FsbG93U2Ny
aXB0c1RvQ2xvc2VXaW5kb3dzKGZhbHNlKQogewpAQCAtNDE4LDYgKzQxOSwxMSBAQCB2b2lkIFNl
dHRpbmdzOjpzZXRTaG91bGRQYWludE5hdGl2ZUNvbnRyCiB9CiAjZW5kaWYKIAordm9pZCBTZXR0
aW5nczo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3RvcikK
K3sKKyAgICBtX3VzZXNFbmNvZGluZ0RldGVjdG9yID0gdXNlc0VuY29kaW5nRGV0ZWN0b3I7Cit9
CisKIHZvaWQgU2V0dGluZ3M6OnNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGJvb2wgYWxs
b3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MpCiB7CiAgICAgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2lu
ZG93cyA9IGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzOwpJbmRleDogV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9u
IDQxOTExKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NSw2ICsxMTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYpOwogICAgICAgICBjb25z
dCBTdHJpbmcmIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZWZh
dWx0VGV4dEVuY29kaW5nTmFtZTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRVc2VzRW5j
b2RpbmdEZXRlY3Rvcihib29sKTsKKyAgICAgICAgYm9vbCB1c2VzRW5jb2RpbmdEZXRlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7IH0KIAogICAgICAgICB2b2lk
IHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgS1VSTCYpOwogICAgICAgICBjb25zdCBL
VVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uOyB9CkBAIC0yNjAsNiArMjYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fc2hvdWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzIDogMTsKICAgICAgICAg
Ym9vbCBtX3pvb21zVGV4dE9ubHkgOiAxOwogICAgICAgICBib29sIG1fZW5mb3JjZUNTU01JTUVU
eXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAgICAgYm9vbCBtX3VzZXNFbmNvZGluZ0RldGVjdG9y
IDogMTsKICAgICAgICAgc2l6ZV90IG1fbWF4aW11bURlY29kZWRJbWFnZVNpemU7CiAgICAgICAg
IGJvb2wgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyA6IDE7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRFbmNvZGluZ0RldGVjdG9yX2gKKyNkZWZpbmUg
VGV4dEVuY29kaW5nRGV0ZWN0b3JfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBUZXh0RW5jb2Rpbmc7CisKKyAgICAvLyBHaXZlbiBhIHNlcXVlbmNlIG9mIGJ5dGVzIGluIHxk
YXRhfCBvZiBsZW5ndGggfGxlbnwgYW5kIGFuIG9wdGlvbmFsCisgICAgLy8gaGludEVuY29kaW5n
TmFtZSwgZGV0ZWN0IHRoZSBtb3N0IGxpa2VseSBjaGFyYWN0ZXIgZW5jb2RpbmcuIAorICAgIC8v
IFRoZSB3YXkgaGludEVuY29kaW5nTmFtZSBpcyB1c2VkIGlzIHVwIHRvIGFuIGltcGxlbWVudGF0
aW9uLgorICAgIC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgY2FsbGVyIHNldHMgaXQgdG8gdGhlIHBh
cmVudCBmcmFtZSBlbmNvZGluZy4KKyAgICBib29sIGRldGVjdFRleHRFbmNvZGluZyhjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dEVuY29kaW5nKiBkZXRlY3RlZEVuY29kaW5nKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rv
cklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z0RldGVjdG9ySUNVLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZ0RldGVjdG9y
LmgiCisKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbnYuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vjc2RldC5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBkZXRlY3RUZXh0RW5jb2Rp
bmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBU
ZXh0RW5jb2RpbmcqIGRldGVjdGVkRW5jb2RpbmcpCit7CisgICAgKmRldGVjdGVkRW5jb2Rpbmcg
PSBUZXh0RW5jb2RpbmcoKTsKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIFRpZ2Vy
IGNhbWUgd2l0aCBJQ1UgMy4yIGFuZCBkb2VzIG5vdCBoYXZlIHRoZSBlbmNvZGluZyBkZXRlY3Rv
ci4KKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKGxlbik7CisgICAg
VU5VU0VEX1BBUkFNKGhpbnRFbmNvZGluZ05hbWUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbHNl
CisgICAgaW50IG1hdGNoZXNDb3VudCA9IDA7IAorICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOworICAgIFVDaGFyc2V0RGV0ZWN0b3IqIGRldGVjdG9yID0gdWNzZGV0X29wZW4o
JnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKGRldGVjdG9yLCB0cnVlKTsKKyAgICB1
Y3NkZXRfc2V0VGV4dChkZXRlY3RvciwgZGF0YSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obGVuKSwg
JnN0YXR1cyk7IAorICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gRklYTUU6IEEgZmV3IHRoaW5ncyB3ZSBjYW4gZG8gb3RoZXIgdGhhbiBp
bXByb3ZpbmcKKyAgICAvLyB0aGUgSUNVIGRldGVjdG9yIGl0c2VsZi4gCisgICAgLy8gMS4gVXNl
IHVjc2RldF9kZXRlY3RBbGwgYW5kIHBpY2sgdGhlIG1vc3QgbGlrZWx5IG9uZSBnaXZlbgorICAg
IC8vICJ0aGUgY29udGV4dCIgKHBhcmVudC1lbmNvZGluZywgcmVmZXJyZXIgZW5jb2RpbmcsIGV0
YykuCisgICAgLy8gMi4gJ0VtdWxhdGUnIEZpcmVmb3gvSUUncyBub24tVW5pdmVyc2FsIGRldGVj
dG9ycyAoZS5nLgorICAgIC8vIENoaW5lc2UsIEphcGFuZXNlLCBSdXNzaWFuLCBLb3JlYW4gYW5k
IEhlYnJldykgYnkgcGlja2luZyB0aGUgCisgICAgLy8gZW5jb2Rpbmcgd2l0aCBhIGhpZ2hlc3Qg
Y29uZmlkZW5jZSBhbW9uZyB0aGUgZGV0ZXRjdG9yLXNwZWNpZmljCisgICAgLy8gbGltaXRlZCBz
ZXQgb2YgY2FuZGlkYXRlIGVuY29kaW5ncy4KKyAgICAvLyBCZWxvdyBpcyBhIHBhcnRpYWwgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcnQgb2Ygd2hhdCdzIG91dGxpbmVkCisgICAgLy8g
YWJvdmUuCisgICAgY29uc3QgVUNoYXJzZXRNYXRjaCoqIG1hdGNoZXMgPSB1Y3NkZXRfZGV0ZWN0
QWxsKGRldGVjdG9yLCAmbWF0Y2hlc0NvdW50LCAmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJF
KHN0YXR1cykpIHsKKyAgICAgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nID0gMDsKKyAgICBp
ZiAoaGludEVuY29kaW5nTmFtZSkgeworICAgICAgICBUZXh0RW5jb2RpbmcgaGludEVuY29kaW5n
KGhpbnRFbmNvZGluZ05hbWUpOworICAgICAgICAvLyAxMCBpcyB0aGUgbWluaW11bSBjb25maWRl
bmNlIHZhbHVlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29kZXBvaW50CisgICAgICAgIC8vIGFsbG9j
YXRpb24gaW4gYSBnaXZlbiBlbmNvZGluZy4gVGhlIHNpemUgb2YgYSBjaHVuayBwYXNzZWQgdG8K
KyAgICAgICAgLy8gdXMgdmFyaWVzIGV2ZW4gZm9yIHRoZSBzYW1lIGh0bWwgZmlsZSAoYXBwYXJl
bnRseSBkZXBlbmRpbmcgb24gCisgICAgICAgIC8vIHRoZSBuZXR3b3JrIGxvYWQpLiBXaGVuIHdl
J3JlIGdpdmVuIGEgcmF0aGVyIHNob3J0IGNodW5rLCB3ZSAKKyAgICAgICAgLy8gZG9uJ3QgaGF2
ZSBhIHN1ZmZpY2llbnRseSByZWxpYWJsZSBzaWduYWwgb3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0
CisgICAgICAgIC8vIHRoZSBjaHVuayBpcyBjb25zaXN0ZW50IHdpdGggYSBzZXQgb2YgZW5jb2Rp
bmdzLiBTbywgaW5zdGVhZCBvZgorICAgICAgICAvLyBzZXR0aW5nIGFuIGFyYml0cmFyeSB0aHJl
c2hvbGQsIHdlIGhhdmUgdG8gc2NhbiBhbGwgdGhlIGVuY29kaW5ncworICAgICAgICAvLyBjb25z
aXN0ZW50IHdpdGggdGhlIGRhdGEuICAKKyAgICAgICAgY29uc3QgaW50MzJfdCBrVGhyZXNvbGQg
PSAxMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXRjaGVzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgaW50MzJfdCBjb25maWRlbmNlID0gdWNzZGV0X2dldENvbmZpZGVuY2UobWF0
Y2hlc1tpXSwgJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsK
KyAgICAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uZmlkZW5jZSA8IGtU
aHJlc29sZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG1hdGNoRW5jb2RpbmcgPSB1Y3NkZXRfZ2V0TmFtZShtYXRjaGVzW2ldLCAmc3RhdHVzKTsKKyAg
ICAgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChUZXh0RW5jb2RpbmcobWF0Y2hFbmNvZGluZykgPT0gaGludEVu
Y29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBoaW50RW5jb2RpbmdOYW1lOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIC8vIElmIG5vIG1hdGNoIGlzIGZvdW5kIHNvIGZhciwganVzdCBwaWNrIHRoZSB0b3AgbWF0
Y2guIAorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwgc2F5LCB3aGVuIGEgcGFyZW50IGZyYW1lIGlu
IEVVQy1KUCByZWZlcnMgdG8KKyAgICAvLyBhIGNoaWxkIGZyYW1lIGluIFNoaWZ0X0pJUyBhbmQg
Ym90aCBmcmFtZXMgZG8gTk9UIHNwZWNpZnkgdGhlIGVuY29kaW5nCisgICAgLy8gbWFraW5nIHVz
IHJlc29ydCB0byBhdXRvLWRldGVjdGlvbiAod2hlbiBpdCBJUyB0dXJuZWQgb24pLgorICAgIGlm
ICghZW5jb2RpbmcgJiYgbWF0Y2hlc0NvdW50ID4gMCkKKyAgICAgICAgZW5jb2RpbmcgPSB1Y3Nk
ZXRfZ2V0TmFtZShtYXRjaGVzWzBdLCAmc3RhdHVzKTsKKyAgICBpZiAoVV9TVUNDRVNTKHN0YXR1
cykpIHsKKyAgICAgICAgKmRldGVjdGVkRW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoZW5jb2Rpbmcp
OworICAgICAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9ICAgIAorICAgIHVjc2RldF9jbG9zZShkZXRlY3Rvcik7CisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdEZXRlY3Rvck5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nRGV0
ZWN0b3IuaCIKKworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50RW5jb2RpbmdOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nKiBkZXRlY3RlZEVuY29kaW5n
KQoreworICAgIFVOVVNFRF9QQVJBTShkYXRhKQorICAgIFVOVVNFRF9QQVJBTShsZW4pCisgICAg
VU5VU0VEX1BBUkFNKGhpbnRFbmNvZGluZ05hbWUpCisKKyAgICAqZGV0ZWN0ZWRFbmNvZGluZyA9
IFRleHRFbmNvZGluZygpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDQxOTExKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMCBAQAorMjAwOS0wMy0yNCAgSnVuZ3NoaWsgU2hpbiAgPGpzaGluQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
V2ViUHJlZmVyZW5jZXMgZm9yIGVuY29kaW5nIGF1dG9kZXRlY3Rpb24gb24gTWFjLgorICAKKyAg
ICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODIKKworICAg
ICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlh
bGl6ZV0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyB1c2VzRW5jb2RpbmdEZXRlY3Rvcl0p
OgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRVc2VzRW5jb2RpbmdEZXRlY3RvcjpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2Vk
Tm90aWZpY2F0aW9uOl0pOgorCiAyMDA5LTAzLTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLmg6IEZpeGVkIGEgc3Bl
bGxpbmcgZXJyb3IgaW4gYSBjb21tZW50LgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDcgQEAKICNkZWZpbmUgV2ViS2l0RGVmYXVsdEZvbnRTaXplUHJlZmVyZW5jZUtleSBA
IldlYktpdERlZmF1bHRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNp
emVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUiCiAjZGVmaW5lIFdl
YktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSBAIldlYktpdERlZmF1bHRU
ZXh0RW5jb2RpbmdOYW1lIgorI2RlZmluZSBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZl
cmVuY2VLZXkgQCJXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvciIKICNkZWZpbmUgV2ViS2l0VXNl
clN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXJTdHlsZVNoZWV0RW5h
YmxlZFByZWZlcmVuY2VLZXkiCiAjZGVmaW5lIFdlYktpdFVzZXJTdHlsZVNoZWV0TG9jYXRpb25Q
cmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXki
CiAjZGVmaW5lIFdlYktpdFNob3VsZFByaW50QmFja2dyb3VuZHNQcmVmZXJlbmNlS2V5IEAiV2Vi
S2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkiCkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBA
IHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAgICAgICAgQCIxNiIs
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0Rm9udFNpemVQcmVmZXJlbmNl
S2V5LAogICAgICAgICBAIjEzIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERlZmF1
bHRGaXhlZEZvbnRTaXplUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCJJU08tODg1OS0xIiwgICAg
ICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZVByZWZlcmVuY2VLZXks
CisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0VXNlc0VuY29k
aW5nRGV0ZWN0b3JQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJv
b2w6Tk9dLCAgIFdlYktpdFVzZXJTdHlsZVNoZWV0RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAg
ICAgIEAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VXNlclN0eWxlU2hlZXRM
b2NhdGlvblByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpO
T10sICAgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXksCkBAIC04NjQs
NiArODY1LDE2IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAg
ICBfcHJpdmF0ZS0+YXV0b21hdGljYWxseURldGVjdHNDYWNoZU1vZGVsID0gYXV0b21hdGljYWxs
eURldGVjdHNDYWNoZU1vZGVsOwogfQogCistIChCT09MKXVzZXNFbmNvZGluZ0RldGVjdG9yCit7
CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6IFdlYktpdFVzZXNFbmNvZGluZ0Rl
dGVjdG9yUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0VXNlc0VuY29kaW5nRGV0ZWN0
b3I6KEJPT0wpZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6IGZsYWcgZm9yS2V5OiBX
ZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXldOworfQorCiAtIChCT09MKWlz
V2ViU2VjdXJpdHlFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6
IFdlYktpdFdlYlNlY3VyaXR5RW5hYmxlZFByZWZlcmVuY2VLZXldOwpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24gNDE5MTEpCisrKyBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDkgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc1JlbW92ZWRO
bwogLSAoQk9PTClhcHBsaWNhdGlvbkNocm9tZU1vZGVFbmFibGVkOwogLSAodm9pZClzZXRBcHBs
aWNhdGlvbkNocm9tZU1vZGVFbmFibGVkOihCT09MKWZsYWc7CiAKKy0gKEJPT0wpdXNlc0VuY29k
aW5nRGV0ZWN0b3I7CistICh2b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9yOihCT09MKWZsYWc7
CisKIC0gKEJPT0wpcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czsKIC0gKHZvaWQp
c2V0UmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czooQk9PTClmbGFnOwogCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxNiw2ICsxMzE2LDcgQEAgc3RhdGlj
IHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQwogICAgIHNldHRpbmdzLT5zZXREZWZh
dWx0Rml4ZWRGb250U2l6ZShbcHJlZmVyZW5jZXMgZGVmYXVsdEZpeGVkRm9udFNpemVdKTsKICAg
ICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKFtwcmVmZXJlbmNlcyBkZWZhdWx0Rm9udFNp
emVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoW3ByZWZlcmVu
Y2VzIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lXSk7CisgICAgc2V0dGluZ3MtPnNldFVzZXNFbmNv
ZGluZ0RldGVjdG9yKFtwcmVmZXJlbmNlcyB1c2VzRW5jb2RpbmdEZXRlY3Rvcl0pOwogICAgIHNl
dHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgZmFudGFzeUZvbnRGYW1p
bHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KFtwcmVmZXJlbmNlcyBmaXhl
ZEZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5n
cyhbcHJlZmVyZW5jZXMgX2ZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3NdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28953</attachid>
            <date>2009-03-25 16:34:14 -0700</date>
            <delta_ts>2009-03-26 19:37:02 -0700</delta_ts>
            <desc>patch (alternative) with a very minor diff from the previous one</desc>
            <filename>16482.patch.7a</filename>
            <type>text/plain</type>
            <size>52212</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDktMDMtMjQgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIGVuY29kaW5nIGRldGVjdG9yICdob29rJyB0byBUZXh0UmVzb3VyY2VEZWNvZGVyLgor
ICAgICAgICAgLSBhZGQgfHVzZXNFbmNvZGluZ0RldGVjdG9yfCB0byBTZXR0aW5ncy4gSXQncyBv
ZmYgYnkgZGVmYXVsdC4KKyAgICAgICAgIC0gYWRkIGEgbmV3IGVuY29kaW5nIHNvdXJjZSB0eXBl
IHxFbmNvZGluZ0Zyb21QYXJlbnR8IAorICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBjYXNlcyB3
aGVuIHRoZSBlbmNvZGluZyBpcyBpbmhlcml0ZWQgZnJvbQorICAgICAgICAgICB0aGUgcGFyZW50
IGZyYW1lIGZyb20gY2FzZXMgd2hlbiBpdCdzIGFjdHVhbGx5IGF1dG8tZGV0ZWN0ZWQuCisgICAg
ICAgICAtIGFkZCBUZXh0RW5jb2RpbmdEZXRlY3RvciogdG8gcGxhdGZvcm0vdGV4dC4gQ3VycmVu
dGx5LAorICAgICAgICAgICB0aGUgb25seSBpbXBsZW1lbnRhdGlvbiB1c2VzIElDVS4gU3R1YiBp
cyBhZGRlZCBmb3IgCisgICAgICAgICAgIHBvcnRzIHRoYXQgZG8gbm90IHVzZSBJQ1UgYW5kIGEg
YnVpbGQgb24gVGlnZXIuIE1hYyBPUyAKKyAgICAgICAgICAgVGlnZXIgY29tZXMgd2l0aCBJQ1Ug
My4yIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyBkZXRlY3Rvci4KKyAgICAgICAgIC0g
YWRkIHVjc2RldC5oIHRvIGljdS91bmljb2RlIGZvciBwb3J0cyB1c2luZyBJQ1UuCisKKyAgICAg
ICAgTGF5b3V0IHRlc3RzIHdpbGwgYmUgYWRkZWQgb25jZSBidWcgMjA1MzQgaXMgZml4ZWQgYW5k
IGEgV2ViUHJlZmVyZW5jZQorICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBpbiB0ZXN0X3NoZWxs
LiBXaXRoIFVzZXNFbmNvZGluZ0RldGVjdG9yIG9mZiwgdGhlcmUKKyAgICAgICAgaXMgbm8gY2hh
bmdlIHRvIHRlc3QuIAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorICAgICAgICAqIFdlYkNvcmUvV2ViQ29yZS5wcm8KKyAg
ICAgICAgKiBXZWJDb3JlL1dlYkNvcmUuc2NvbnMKKyAgICAgICAgKiBXZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbAorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHAKKyAgICAgICAgKiBpY3UvdW5p
Y29kZS91Y3NkZXQuaAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6d3JpdGUpOiB0dXJuIG9uL29mZiBlbmNvZGluZyBkZXRl
Y3RvciBkZXBlbmRpbmcgb24gU2V0dGluZ3MgYW5kIHNldCBoaW50RW5jb2Rpbmcgb2YgVGV4dFJl
c291cmNlRGVjb2RlciB0byB0aGUgcGFyZW50IGZyYW1lIGVuY29kaW5nIGlmIG5lY2Vzc2FyeSBh
bmQgdGhlIHNlY3VyaXR5IHBvbGljeSBhbGxvd3MgcmVmZXJpbmcgdG8gdGhlIHBhcmVudCBmcmFt
ZSBlbmNvZGluZy4KKyAgICAgICAgKiBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpUZXh0UmVzb3VyY2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9yQ1NTQ2hh
cnNldCk6IGFkZCBjaGVjayBmb3IgRW5jb2RpbmdGcm9tUGFyZW50RnJhbWUKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmNoZWNrRm9ySGVhZENoYXJzZXQpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2hvdWxkQXV0b0RldGVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZWNvZGUpOiBjYWxsIGVu
Y29kaW5nIGRldGVjdG9yIGlmIHNob3VsZEF1dG9EZXRlY3QgcmV0dXJucyB0cnVlLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2gpOiBpZiBlbmNvZGluZyBpcyBu
b3QgZGV0ZXJtaW5lZCBieSBub3csIGNhbGwgZW5jb2RpbmcgZGV0ZWN0b3IgaWYgc2hvdWxkQXV0
b0RldGVjdCByZXR1cm5zIHRydWUuCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29k
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6Oik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6c2V0SGludEVuY29kaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRSZXNvdXJjZURlY29kZXI6OnNvdXJjZSk6CisgICAgICAgICogcGFnZS9TZXR0aW5n
cy5jcHA6IGFkZCBtX3VzZXNFbmNvZGluZ0RldGVjdG9yCisgICAgICAgIChXZWJDb3JlOjpTZXR0
aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVzZXNFbmNv
ZGluZ0RldGVjdG9yKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJD
b3JlOjpTZXR0aW5nczo6dXNlc0VuY29kaW5nRGV0ZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZGV0ZWN0VGV4dEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9yTm9uZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4
dEVuY29kaW5nKToKKwogMjAwOS0wMy0yMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTQ5NCw2ICsxNDk0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dERpcmVjdGlvbi5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dFN0cmVhbS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBf
X1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI5c2VsZWN0CiBfX1pON1dlYkNvcmUxOVNl
bGVjdGlvbkNvbnRyb2xsZXJDMUVQTlNfNUZyYW1lRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291
cmNlRGVjb2RlcjVmbHVzaEV2CiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVj
b2RlRVBLY20KLV9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmlu
Z0VSS05TXzEyVGV4dEVuY29kaW5nRQorX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVy
QzFFUktOU182U3RyaW5nRVJLTlNfMTJUZXh0RW5jb2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0
UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0
c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoRXgKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250
cm9sbGVyMTZjbGVhckNvbnRleHRNZW51RXYKQEAgLTU5OSw2ICs1OTksNyBAQCBfX1pON1dlYkNv
cmU4U2V0dGluZ3MyMnNldFNhbnNTZXJpZkZvbnRGCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyMnNl
dFNob3dzVVJMc0luVG9vbFRpcHNFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXREZWZhdWx0
Rml4ZWRGb250U2l6ZUVpCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldEVkaXRhYmxlTGlua0Jl
aGF2aW9yRU5TXzIwRWRpdGFibGVMaW5rQmVoYXZpb3JFCitfX1pON1dlYkNvcmU4U2V0dGluZ3My
M3NldFVzZXNFbmNvZGluZ0RldGVjdG9yRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0QXBw
bGljYXRpb25DaHJvbWVNb2RlRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4dEFyZWFz
QXJlUmVzaXphYmxlRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZEViCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtOTYyLDYgKzk2Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY1VURjE2LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwK
KyAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAgXAogICAgIHBs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1RleHRTdHJlYW0uY3BwIFwKICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcCBcCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnNjb25zCShyZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2lu
ZyBjb3B5KQpAQCAtODM5LDYgKzgzOSw3IEBAIHNvdXJjZXNbJ3BsYXRmb3JtL3RleHQnXSA9IFsK
ICAgICAncGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAnLAogICAgICdwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCcsCiAgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcCcsCisgICAgJ3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1Uu
Y3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAnLAogICAg
ICdwbGF0Zm9ybS90ZXh0L1RleHRTdHJlYW0uY3BwJywKICAgICAncGxhdGZvcm0vdGV4dC9Vbmlj
b2RlUmFuZ2UuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MTkxMSkKKysrIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNiArNzc5LDcg
QEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBwbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRD
b2RlY1VzZXJEZWZpbmVkLmNwcAogICAgICAgICBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAKKyAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKICAgICAgICAgcGxh
dGZvcm0vdGV4dC9UZXh0U3RyZWFtLmNwcAogICAgICAgICBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxE
YXRhLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biA0MTkxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTY3NTcsNiArNjc1NywxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2Rp
bmdEZXRlY3RvcklDVS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzMDEsNiArNDMwMSw4IEBACiAJCUMwOTE1ODhF
MERCNDIwOTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDkxNTg4ODBEQjQyMDky
MDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwICovOyB9OwogCQlDMDkx
NTg4RjBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwOTE1ODg5MERCNDIw
OTIwMEU1NUFGNCAvKiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlci5oICovOyB9OwogCQlDMERG
Qzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNFQUU3
QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OworCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0
NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRF
bmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKKwkJQzEwNURBNjQwRjNBQTZCODAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5n
RGV0ZWN0b3IuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwICovOyB9OwogCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9
OwpAQCAtOTE1MSw2ICs5MTUzLDggQEAKIAkJQzA5MTU4ODgwREI0MjA5MjAwRTU1QUY0IC8qIEpT
UXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzA5MTU4ODkwREI0MjA5MjAwRTU1QUY0IC8qIEpTUXVhcmFudGluZWRP
YmplY3RXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUXVhcmFu
dGluZWRPYmplY3RXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwREZD
ODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGlu
Z0RldGVjdG9ySUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEzMzMyLDYgKzEzMzM2LDggQEAKIAkJCQlCMkMzREExNTBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dERpcmVjdGlvbi5oICovLAogCQkJCUIyQzNEQTE2MEQwMDZDMUQwMEVG
NkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwICovLAogCQkJCUIyQzNEQTE3MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmcuaCAqLywKKwkJCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyog
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLywKKwkJCQlDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovLAogCQkJCUIyQzNEQTE4MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQjJDM0RBMTkwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRFbmNvZGluZ1JlZ2lzdHJ5LmggKi8sCiAJCQkJQjJDM0RBMUEw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwICovLApAQCAtMTY3MDIsNiArMTY3MDgs
NyBAQAogCQkJCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTY5MzgwMjBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0NzBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVu
Y29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYgLyog
VGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ5MEQwMDZD
MUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMzQTE0MzAwQjdEMTg4NjAwQTUzRkZEIC8qIFRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFMTgwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRHcmFudWxhcml0eS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xODczMiw2ICsxODczOSw3IEBACiAJCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEw
NDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTY5MzgwMTBBMTExMDBBMDBDMTI3RkUgLyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQzEwNURBNjIwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ4MEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzNBMTQy
RTBCN0QxODg2MDBBNTNGRkQgLyogVGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTFCMDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2ljdS91bmljb2RlL3Vjc2RldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaWN1L3VuaWNvZGUvdWNzZGV0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2ljdS91bmlj
b2RlL3Vjc2RldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1c2lu
ZXNzIE1hY2hpbmVzCisgKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgZmlsZSBuYW1lOiAgdWNzZGV0LmgKKyAqICAg
ZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyAqICAgaW5kZW50YXRpb246NAorICoKKyAqICAgY3JlYXRl
ZCBvbjogMjAwNUF1ZzA0CisgKiAgIGNyZWF0ZWQgYnk6IEFuZHkgSGVuaW5nZXIKKyAqCisgKiAg
IElDVSBDaGFyYWN0ZXIgU2V0IERldGVjdGlvbiwgQVBJIGZvciBDCisgKgorICogICBEcmFmdCB2
ZXJzaW9uIDE4IE9jdCAyMDA1CisgKgorICovCisKKyNpZm5kZWYgX19VQ1NERVRfSAorI2RlZmlu
ZSBfX1VDU0RFVF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05G
SUdfTk9fQ09OVkVSU0lPTgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0uaCIKKworLyoqCisgKiBc
ZmlsZSAKKyAqIFxicmllZiBDIEFQSTogQ2hhcnNldCBEZXRlY3Rpb24gQVBJCisgKgorICogVGhp
cyBBUEkgcHJvdmlkZXMgYSBmYWNpbGl0eSBmb3IgZGV0ZWN0aW5nIHRoZQorICogY2hhcnNldCBv
ciBlbmNvZGluZyBvZiBjaGFyYWN0ZXIgZGF0YSBpbiBhbiB1bmtub3duIHRleHQgZm9ybWF0Lgor
ICogVGhlIGlucHV0IGRhdGEgY2FuIGJlIGZyb20gYW4gYXJyYXkgb2YgYnl0ZXMuCisgKiA8cD4K
KyAqIENoYXJhY3RlciBzZXQgZGV0ZWN0aW9uIGlzIGF0IGJlc3QgYW4gaW1wcmVjaXNlIG9wZXJh
dGlvbi4gIFRoZSBkZXRlY3Rpb24KKyAqIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvIGlkZW50aWZ5
IHRoZSBjaGFyc2V0IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9m
IHRoZSBieXRlIGRhdGEsIGJ1dCB0aGUgcHJvY2VzcyBpcyBwYXJ0bHkgc3RhdGlzdGljYWwgaW4g
bmF0dXJlLCBhbmQKKyAqIHRoZSByZXN1bHRzIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBhbHdh
eXMgYmUgY29ycmVjdC4KKyAqIDxwPgorICogRm9yIGJlc3QgYWNjdXJhY3kgaW4gY2hhcnNldCBk
ZXRlY3Rpb24sIHRoZSBpbnB1dCBkYXRhIHNob3VsZCBiZSBwcmltYXJpbHkKKyAqIGluIGEgc2lu
Z2xlIGxhbmd1YWdlLCBhbmQgYSBtaW5pbXVtIG9mIGEgZmV3IGh1bmRyZWQgYnl0ZXMgd29ydGgg
b2YgcGxhaW4gdGV4dAorICogaW4gdGhlIGxhbmd1YWdlIGFyZSBuZWVkZWQuICBUaGUgZGV0ZWN0
aW9uIHByb2Nlc3Mgd2lsbCBhdHRlbXB0IHRvCisgKiBpZ25vcmUgaHRtbCBvciB4bWwgc3R5bGUg
bWFya3VwIHRoYXQgY291bGQgb3RoZXJ3aXNlIG9ic2N1cmUgdGhlIGNvbnRlbnQuCisgKi8KKyAK
Kworc3RydWN0IFVDaGFyc2V0RGV0ZWN0b3I7CisvKioKKyAgKiBTdHJ1Y3R1cmUgcmVwcmVzZW50
aW5nIGEgY2hhcnNldCBkZXRlY3RvcgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCit0eXBlZGVm
IHN0cnVjdCBVQ2hhcnNldERldGVjdG9yIFVDaGFyc2V0RGV0ZWN0b3I7CisKK3N0cnVjdCBVQ2hh
cnNldE1hdGNoOworLyoqCisgICogIE9wYXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgbWF0
Y2ggdGhhdCB3YXMgaWRlbnRpZmllZAorICAqICBmcm9tIGEgY2hhcnNldCBkZXRlY3Rpb24gb3Bl
cmF0aW9uLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLwordHlwZWRlZiBzdHJ1Y3QgVUNoYXJz
ZXRNYXRjaCBVQ2hhcnNldE1hdGNoOworCisvKioKKyAgKiAgT3BlbiBhIGNoYXJzZXQgZGV0ZWN0
b3IuCisgICoKKyAgKiAgQHBhcmFtIHN0YXR1cyBBbnkgZXJyb3IgY29uZGl0aW9ucyBvY2N1cnJp
bmcgZHVyaW5nIHRoZSBvcGVuCisgICogICAgICAgICAgICAgICAgb3BlcmF0aW9uIGFyZSByZXBv
cnRlZCBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgICogIEByZXR1cm4gdGhlIG5ld2x5IG9wZW5l
ZCBjaGFyc2V0IGRldGVjdG9yLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAqLworVV9EUkFGVCBV
Q2hhcnNldERldGVjdG9yICogVV9FWFBPUlQyCit1Y3NkZXRfb3BlbihVRXJyb3JDb2RlICAgKnN0
YXR1cyk7CisKKy8qKgorICAqIENsb3NlIGEgY2hhcnNldCBkZXRlY3Rvci4gIEFsbCBzdG9yYWdl
IGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzCisgICogICBvd25lZCBieSB0aGlzIGNoYXJzZXQgZGV0
ZWN0b3Igd2lsbCBiZSByZWxlYXNlZC4gIEZhaWx1cmUgdG8KKyAgKiAgIGNsb3NlIGEgY2hhcnNl
dCBkZXRlY3RvciB3aGVuIGZpbmlzaGVkIHdpdGggaXQgY2FuIHJlc3VsdCBpbgorICAqICAgbWVt
b3J5IGxlYWtzIGluIHRoZSBhcHBsaWNhdGlvbi4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhl
IGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgY2xvc2VkLgorICAqICBAZHJhZnQgSUNVIDMuNgorICAq
LworVV9EUkFGVCB2b2lkIFVfRVhQT1JUMgordWNzZGV0X2Nsb3NlKFVDaGFyc2V0RGV0ZWN0b3Ig
KnVjc2QpOworCisvKioKKyAgKiBTZXQgdGhlIGlucHV0IGJ5dGUgZGF0YSB3aG9zZSBjaGFyc2V0
IGlzIHRvIGRldGVjdGVkLgorICAqCisgICogT3duZXJzaGlwIG9mIHRoZSBpbnB1dCAgdGV4dCBi
eXRlIGFycmF5IHJlbWFpbnMgd2l0aCB0aGUgY2FsbGVyLgorICAqIFRoZSBpbnB1dCBzdHJpbmcg
bXVzdCBub3QgYmUgYWx0ZXJlZCBvciBkZWxldGVkIHVudGlsIHRoZSBjaGFyc2V0CisgICogZGV0
ZWN0b3IgaXMgZWl0aGVyIGNsb3NlZCBvciByZXNldCB0byByZWZlciB0byBkaWZmZXJlbnQgaW5w
dXQgdGV4dC4KKyAgKgorICAqIEBwYXJhbSB1Y3NkICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8g
YmUgdXNlZC4KKyAgKiBAcGFyYW0gdGV4dEluIHRoZSBpbnB1dCB0ZXh0IG9mIHVua25vd24gZW5j
b2RpbmcuICAgLgorICAqIEBwYXJhbSBsZW4gICAgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgdGV4
dCwgb3IgLTEgaWYgdGhlIHRleHQKKyAgKiAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVk
LgorICAqIEBwYXJhbSBzdGF0dXMgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJh
Y2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgKgorICAqIEBkcmFmdCBJQ1UgMy42CisgICovCitVX0RS
QUZUIHZvaWQgVV9FWFBPUlQyCit1Y3NkZXRfc2V0VGV4dChVQ2hhcnNldERldGVjdG9yICp1Y3Nk
LCBjb25zdCBjaGFyICp0ZXh0SW4sIGludDMyX3QgbGVuLCBVRXJyb3JDb2RlICpzdGF0dXMpOwor
CisKKy8qKiBTZXQgdGhlIGRlY2xhcmVkIGVuY29kaW5nIGZvciBjaGFyc2V0IGRldGVjdGlvbi4K
KyAqICBUaGUgZGVjbGFyZWQgZW5jb2Rpbmcgb2YgYW4gaW5wdXQgdGV4dCBpcyBhbiBlbmNvZGlu
ZyBvYnRhaW5lZAorICogIGJ5IHRoZSB1c2VyIGZyb20gYW4gaHR0cCBoZWFkZXIgb3IgeG1sIGRl
Y2xhcmF0aW9uIG9yIHNpbWlsYXIgc291cmNlIHRoYXQKKyAqICBjYW4gYmUgcHJvdmlkZWQgYXMg
YW4gYWRkaXRpb25hbCBoaW50IHRvIHRoZSBjaGFyc2V0IGRldGVjdG9yLgorICoKKyAqICBIb3cg
YW5kIHdoZXRoZXIgdGhlIGRlY2xhcmVkIGVuY29kaW5nIHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhl
CisgKiAgZGV0ZWN0aW9uIHByb2Nlc3MgaXMgVEJELgorICoKKyAqIEBwYXJhbSB1Y3NkICAgICAg
dGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNlZC4KKyAqIEBwYXJhbSBlbmNvZGluZyAgYW4g
ZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGRhdGEgb2J0YWluZWQgZnJvbQorICogICAgICAgICAg
ICAgICAgICBhIGhlYWRlciBvciBkZWNsYXJhdGlvbiBvciBvdGhlciBzb3VyY2Ugb3V0c2lkZQor
ICogICAgICAgICAgICAgICAgICBvZiB0aGUgYnl0ZSBkYXRhIGl0c2VsZi4KKyAqIEBwYXJhbSBs
ZW5ndGggICAgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RpbmcgbmFtZSwgb3IgLTEgaWYgdGhlIG5h
bWUgc3RyaW5nCisgKiAgICAgICAgICAgICAgICAgIGlzIE5VTCB0ZXJtaW5hdGVkLgorICogQHBh
cmFtIHN0YXR1cyAgICBhbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0
aGlzIHZhcmlhYmxlLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgdm9pZCBV
X0VYUE9SVDIKK3Vjc2RldF9zZXREZWNsYXJlZEVuY29kaW5nKFVDaGFyc2V0RGV0ZWN0b3IgKnVj
c2QsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAqc3Rh
dHVzKTsKKworCisvKioKKyAqIFJldHVybiB0aGUgY2hhcnNldCB0aGF0IGJlc3QgbWF0Y2hlcyB0
aGUgc3VwcGxpZWQgaW5wdXQgZGF0YS4KKyAqIAorICogTm90ZSB0aG91Z2gsIHRoYXQgYmVjYXVz
ZSB0aGUgZGV0ZWN0aW9uIAorICogb25seSBsb29rcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0
IGRhdGEsCisgKiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJldHVybmVkIGNoYXJz
ZXQgd2lsbCBmYWlsIHRvIGhhbmRsZQorICogdGhlIGZ1bGwgc2V0IG9mIGlucHV0IGRhdGEuCisg
KiA8cD4KKyAqIFRoZSByZXR1cm5lZCBVQ2hhcnNldE1hdGNoIG9iamVjdCBpcyBvd25lZCBieSB0
aGUgVUNoYXJzZXREZXRlY3Rvci4KKyAqIEl0IHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBk
ZXRlY3RvciBpbnB1dCBpcyByZXNldCwgb3IgdW50aWwKKyAqIHRoZSBkZXRlY3RvciBpcyBjbG9z
ZWQuCisgKiA8cD4KKyAqIFRoZSBmdW5jdGlvbiB3aWxsIGZhaWwgaWYKKyAqICA8dWw+CisgKiAg
ICA8bGk+bm8gY2hhcnNldCBhcHBlYXJzIHRvIG1hdGNoIHRoZSBkYXRhLjwvbGk+CisgKiAgICA8
bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAqCisg
KiBAcGFyYW0gdWNzZCAgICAgIHRoZSBjaGFyc2V0IGRldGVjdG9yIHRvIGJlIHVzZWQuCisgKiBA
cGFyYW0gc3RhdHVzICAgIGFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGlu
IHRoaXMgdmFyaWFibGUuCisgKiBAcmV0dXJuICAgICAgICAgIGEgVUNoYXJzZXRNYXRjaCAgcmVw
cmVzZW50aW5nIHRoZSBiZXN0IG1hdGNoaW5nIGNoYXJzZXQsCisgKiAgICAgICAgICAgICAgICAg
IG9yIE5VTEwgaWYgbm8gY2hhcnNldCBtYXRjaGVzIHRoZSBieXRlIGRhdGEuCisgKgorICogQGRy
YWZ0IElDVSAzLjYKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICogVV9FWFBPUlQy
Cit1Y3NkZXRfZGV0ZWN0KFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2QsIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisgICAgCisKKy8qKgorICogIEZpbmQgYWxsIGNoYXJzZXQgbWF0Y2hlcyB0aGF0IGFwcGVh
ciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGlucHV0LAorICogIHJldHVybmluZyBhbiBhcnJh
eSBvZiByZXN1bHRzLiAgVGhlIHJlc3VsdHMgYXJlIG9yZGVyZWQgd2l0aCB0aGUKKyAqICBiZXN0
IHF1YWxpdHkgbWF0Y2ggZmlyc3QuCisgKgorICogIEJlY2F1c2UgdGhlIGRldGVjdGlvbiBvbmx5
IGxvb2tzIGF0IGEgbGltaXRlZCBhbW91bnQgb2YgdGhlCisgKiAgaW5wdXQgYnl0ZSBkYXRhLCBz
b21lIG9mIHRoZSByZXR1cm5lZCBjaGFyc2V0cyBtYXkgZmFpbCB0byBoYW5kbGUKKyAqICB0aGUg
YWxsIG9mIGlucHV0IGRhdGEuCisgKiAgPHA+CisgKiAgVGhlIHJldHVybmVkIFVDaGFyc2V0TWF0
Y2ggb2JqZWN0cyBhcmUgb3duZWQgYnkgdGhlIFVDaGFyc2V0RGV0ZWN0b3IuCisgKiAgVGhleSB3
aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVk
CisgKiAgCisgKiA8cD4KKyAqIFJldHVybiBhbiBlcnJvciBpZiAKKyAqICA8dWw+CisgKiAgICA8
bGk+bm8gY2hhcnNldHMgYXBwZWFyIHRvIG1hdGNoIHRoZSBpbnB1dCBkYXRhLjwvbGk+CisgKiAg
ICA8bGk+bm8gaW5wdXQgdGV4dCBoYXMgYmVlbiBwcm92aWRlZDwvbGk+CisgKiAgPC91bD4KKyAq
IAorICogQHBhcmFtIHVjc2QgICAgICAgICAgdGhlIGNoYXJzZXQgZGV0ZWN0b3IgdG8gYmUgdXNl
ZC4KKyAqIEBwYXJhbSBtYXRjaGVzRm91bmQgIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdp
bGwgYmUgc2V0IHRvIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGNoYXJz
ZXRzIGlkZW50aWZpZWQgdGhhdCBhcmUgY29uc2lzdGVudCB3aXRoCisgKiAgICAgICAgICAgICAg
ICAgICAgICB0aGUgaW5wdXQgZGF0YS4gIE91dHB1dCBvbmx5LgorICogQHBhcmFtIHN0YXR1cyAg
ICAgICAgYW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJp
YWJsZS4KKyAqIEByZXR1cm4gICAgICAgICAgICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBw
b2ludGVycyB0byBVQ2hhclNldE1hdGNoIG9iamVjdHMuCisgKiAgICAgICAgICAgICAgICAgICAg
ICBUaGlzIGFycmF5LCBhbmQgdGhlIFVDaGFyU2V0TWF0Y2ggaW5zdGFuY2VzIHRvIHdoaWNoIGl0
IHJlZmVycywKKyAqICAgICAgICAgICAgICAgICAgICAgIGFyZSBvd25lZCBieSB0aGUgVUNoYXJz
ZXREZXRlY3RvciwgYW5kIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsCisgKiAgICAgICAgICAgICAg
ICAgICAgICB0aGUgZGV0ZWN0b3IgaXMgY2xvc2VkIG9yIG1vZGlmaWVkLgorICogQGRyYWZ0IElD
VSAzLjQKKyAqLworVV9EUkFGVCBjb25zdCBVQ2hhcnNldE1hdGNoICoqIFVfRVhQT1JUMgordWNz
ZGV0X2RldGVjdEFsbChVQ2hhcnNldERldGVjdG9yICp1Y3NkLCBpbnQzMl90ICptYXRjaGVzRm91
bmQsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworCisvKioKKyAqICBHZXQgdGhlIG5hbWUgb2Yg
dGhlIGNoYXJzZXQgcmVwcmVzZW50ZWQgYnkgYSBVQ2hhcnNldE1hdGNoLgorICoKKyAqICBUaGUg
c3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQorICog
IFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJzZXRN
YXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBUaGUgbmFtZSByZXR1cm5lZCBpcyBzdWl0YWJs
ZSBmb3IgdXNlIHdpdGggdGhlIElDVSBjb252ZXJzaW9uIEFQSXMuCisgKgorICogIEBwYXJhbSB1
Y3NtICAgIFRoZSBjaGFyc2V0IG1hdGNoIG9iamVjdC4KKyAqICBAcGFyYW0gc3RhdHVzICBBbnkg
ZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICog
IEByZXR1cm4gICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtYXRjaGluZyBjaGFyc2V0LgorICoKKyAq
ICBAZHJhZnQgSUNVIDMuNgorICovCitVX0RSQUZUIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3Vj
c2RldF9nZXROYW1lKGNvbnN0IFVDaGFyc2V0TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisKKy8qKgorICogIEdldCBhIGNvbmZpZGVuY2UgbnVtYmVyIGZvciB0aGUgcXVhbGl0eSBv
ZiB0aGUgbWF0Y2ggb2YgdGhlIGJ5dGUKKyAqICBkYXRhIHdpdGggdGhlIGNoYXJzZXQuICBDb25m
aWRlbmNlIG51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvIHRvIDEwMCwKKyAqICB3aXRoIDEwMCByZXBy
ZXNlbnRpbmcgY29tcGxldGUgY29uZmlkZW5jZSBhbmQgemVybyByZXByZXNlbnRpbmcKKyAqICBu
byBjb25maWRlbmNlLgorICoKKyAqICBUaGUgY29uZmlkZW5jZSB2YWx1ZXMgYXJlIHNvbWV3aGF0
IGFyYml0cmFyeS4gIFRoZXkgZGVmaW5lIGFuCisgKiAgYW4gb3JkZXJpbmcgd2l0aGluIHRoZSBy
ZXN1bHRzIGZvciBhbnkgc2luZ2xlIGRldGVjdGlvbiBvcGVyYXRpb24KKyAqICBidXQgYXJlIG5v
dCBnZW5lcmFsbHkgY29tcGFyYWJsZSBiZXR3ZWVuIHRoZSByZXN1bHRzIGZvciBkaWZmZXJlbnQg
aW5wdXQuCisgKgorICogIEEgY29uZmlkZW5jZSB2YWx1ZSBvZiB0ZW4gZG9lcyBoYXZlIGEgZ2Vu
ZXJhbCBtZWFuaW5nIC0gaXQgaXMgdXNlZAorICogIGZvciBjaGFyc2V0cyB0aGF0IGNhbiByZXBy
ZXNlbnQgdGhlIGlucHV0IGRhdGEsIGJ1dCBmb3Igd2hpY2ggdGhlcmUKKyAqICBpcyBubyBvdGhl
ciBpbmRpY2F0aW9uIHRoYXQgc3VnZ2VzdHMgdGhhdCB0aGUgY2hhcnNldCBpcyB0aGUgY29ycmVj
dCBvbmUuCisgKiAgUHVyZSA3IGJpdCBBU0NJSSBkYXRhLCBmb3IgZXhhbXBsZSwgaXMgY29tcGF0
aWJsZSB3aXRoIGEKKyAqICBncmVhdCBtYW55IGNoYXJzZXRzLCBtb3N0IG9mIHdoaWNoIHdpbGwg
YXBwZWFyIGFzIHBvc3NpYmxlIG1hdGNoZXMKKyAqICB3aXRoIGEgY29uZmlkZW5jZSBvZiAxMC4K
KyAqCisgKiAgQHBhcmFtIHVjc20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICogIEBw
YXJhbSBzdGF0dXMgIEFueSBlcnJvciBjb25kaXRpb25zIGFyZSByZXBvcnRlZCBiYWNrIGluIHRo
aXMgdmFyaWFibGUuCisgKiAgQHJldHVybiAgICAgICAgQSBjb25maWRlbmNlIG51bWJlciBmb3Ig
dGhlIGNoYXJzZXQgbWF0Y2guCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQg
aW50MzJfdCBVX0VYUE9SVDIKK3Vjc2RldF9nZXRDb25maWRlbmNlKGNvbnN0IFVDaGFyc2V0TWF0
Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogIEdldCB0aGUgUkZDIDMw
NjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLgorICoKKyAqICBUaGUg
Q2hhcnNldCBEZXRlY3Rpb24gc2VydmljZSBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGRldGVj
dGluZworICogIGNoYXJzZXRzLCBub3QgbGFuZ3VhZ2UuICBGb3Igc29tZSwgYnV0IG5vdCBhbGws
IGNoYXJzZXRzLCBhIGxhbmd1YWdlIGlzCisgKiAgaWRlbnRpZmllZCBhcyBhIGJ5cHJvZHVjdCBv
ZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGF0IGlzIHdoYXQKKyAqICBpcyByZXR1cm5l
ZCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqICBDQVVUSU9OOgorICogICAgMS4gIExhbmd1YWdl
IGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIGlucHV0IGRhdGEgZW5jb2RlZCBpbgor
ICogICAgICAgIGFsbCBjaGFyc2V0cy4gSW4gcGFydGljdWxhciwgbm8gbGFuZ3VhZ2UgaXMgaWRl
bnRpZmllZAorICogICAgICAgIGZvciBVVEYtOCBpbnB1dCBkYXRhLgorICoKKyAqICAgIDIuICBD
bG9zZWx5IHJlbGF0ZWQgbGFuZ3VhZ2VzIG1heSBzb21ldGltZXMgYmUgY29uZnVzZWQuCisgKgor
ICogIElmIG1vcmUgYWNjdXJhdGUgbGFuZ3VhZ2UgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkLCBhIGxp
bmd1aXN0aWMKKyAqICBhbmFseXNpcyBwYWNrYWdlIHNob3VsZCBiZSB1c2VkLgorICoKKyAqICBU
aGUgc3RvcmFnZSBmb3IgdGhlIHJldHVybmVkIG5hbWUgc3RyaW5nIGlzIG93bmVkIGJ5IHRoZQor
ICogIFVDaGFyc2V0TWF0Y2gsIGFuZCB3aWxsIHJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgVUNoYXJz
ZXRNYXRjaAorICogIGlzIHZhbGlkLgorICoKKyAqICBAcGFyYW0gdWNzbSAgICBUaGUgY2hhcnNl
dCBtYXRjaCBvYmplY3QuCisgKiAgQHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMg
YXJlIHJlcG9ydGVkIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAqICBAcmV0dXJuICAgICAgICBU
aGUgUkZDIDMwNjYgY29kZSBmb3IgdGhlIGxhbmd1YWdlIG9mIHRoZSBpbnB1dCBkYXRhLCBvcgor
ICogICAgICAgICAgICAgICAgIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbGFuZ3VhZ2UgY291bGQg
bm90IGJlIGRldGVybWluZWQuCisgKgorICogIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQg
Y29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNzZGV0X2dldExhbmd1YWdlKGNvbnN0IFVDaGFyc2V0
TWF0Y2ggKnVjc20sIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgICogIEdldCB0aGUg
ZW50aXJlIGlucHV0IHRleHQgYXMgYSBVQ2hhciBzdHJpbmcsIHBsYWNpbmcgaXQgaW50bworICAq
ICBhIGNhbGxlci1zdXBwbGllZCBidWZmZXIuICBBIHRlcm1pbmF0aW5nCisgICogIE5VTCBjaGFy
YWN0ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnVmZmVyIGlmIHNwYWNlIGlzIGF2YWlsYWJs
ZS4KKyAgKgorICAqICBUaGUgbnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgb3V0cHV0IHN0cmluZywg
bm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAgKiAgTlVMLCBpcyByZXR1cm5lZC4gCisg
ICoKKyAgKiAgSWYgdGhlIHN1cHBsaWVkIGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQg
dG8gaG9sZCB0aGUgb3V0cHV0LAorICAqICB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhcmUg
dW5kZWZpbmVkLiAgVGhlIGZ1bGwgb3V0cHV0IHN0cmluZyBsZW5ndGgKKyAgKiAgKGluIFVDaGFy
cykgaXMgcmV0dXJuZWQgYXMgYWx3YXlzLCBhbmQgY2FuIGJlIHVzZWQgdG8gYWxsb2NhdGUgYSBi
dWZmZXIKKyAgKiAgb2YgdGhlIGNvcnJlY3Qgc2l6ZS4KKyAgKgorICAqCisgICogQHBhcmFtIHVj
c20gICAgVGhlIGNoYXJzZXQgbWF0Y2ggb2JqZWN0LgorICAqIEBwYXJhbSBidWYgICAgIEEgVUNo
YXIgYnVmZmVyIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBjb252ZXJ0ZWQgdGV4dCBkYXRhLgorICAq
IEBwYXJhbSBjYXAgICAgIFRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGluIFVDaGFycy4KKyAg
KiBAcGFyYW0gc3RhdHVzICBBbnkgZXJyb3IgY29uZGl0aW9ucyBhcmUgcmVwb3J0ZWQgYmFjayBp
biB0aGlzIHZhcmlhYmxlLgorICAqIEByZXR1cm4gICAgICAgIFRoZSBudW1iZXIgb2YgVUNoYXJz
IGluIHRoZSBvdXRwdXQgc3RyaW5nLgorICAqCisgICogQGRyYWZ0IElDVSAzLjYKKyAgKi8KK1Vf
RFJBRlQgIGludDMyX3QgVV9FWFBPUlQyCit1Y3NkZXRfZ2V0VUNoYXJzKGNvbnN0IFVDaGFyc2V0
TWF0Y2ggKnVjc20sCisgICAgICAgICAgICAgICAgIFVDaGFyICpidWYsIGludDMyX3QgY2FwLCBV
RXJyb3JDb2RlICpzdGF0dXMpOworCisKKworLyoqCisgICogIEdldCBhbiBpdGVyYXRvciBvdmVy
IHRoZSBzZXQgb2YgYWxsIGRldGVjdGFibGUgY2hhcnNldHMgLSAKKyAgKiAgb3ZlciB0aGUgY2hh
cnNldHMgdGhhdCBhcmUga25vd24gdG8gdGhlIGNoYXJzZXQgZGV0ZWN0aW9uCisgICogIHNlcnZp
Y2UuCisgICoKKyAgKiAgVGhlIHJldHVybmVkIFVFbnVtZXJhdGlvbiBwcm92aWRlcyBhY2Nlc3Mg
dG8gdGhlIG5hbWVzIG9mCisgICogIHRoZSBjaGFyc2V0cy4KKyAgKgorICAqICBUaGUgc3RhdGUg
b2YgdGhlIENoYXJzZXQgZGV0ZWN0b3IgdGhhdCBpcyBwYXNzZWQgaW4gZG9lcyBub3QKKyAgKiAg
YWZmZWN0IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiwgYnV0IHJlcXVpcmluZyBhIHZhbGlk
LCBvcGVuCisgICogIGNoYXJzZXQgZGV0ZWN0b3IgYXMgYSBwYXJhbWV0ZXIgaW5zdXJlcyB0aGF0
IHRoZSBjaGFyc2V0IGRldGVjdGlvbgorICAqICBzZXJ2aWNlIGhhcyBiZWVuIHNhZmVseSBpbml0
aWFsaXplZCBhbmQgdGhhdCB0aGUgcmVxdWlyZWQgZGV0ZWN0aW9uCisgICogIGRhdGEgaXMgYXZh
aWxhYmxlLgorICAqCisgICogIEBwYXJhbSB1Y3NkIGEgQ2hhcnNldCBkZXRlY3Rvci4KKyAgKiAg
QHBhcmFtIHN0YXR1cyAgQW55IGVycm9yIGNvbmRpdGlvbnMgYXJlIHJlcG9ydGVkIGJhY2sgaW4g
dGhpcyB2YXJpYWJsZS4KKyAgKiAgQHJldHVybiBhbiBpdGVyYXRvciBwcm92aWRpbmcgYWNjZXNz
IHRvIHRoZSBkZXRlY3RhYmxlIGNoYXJzZXQgbmFtZXMuCisgICogIEBkcmFmdCBJQ1UgMy42Cisg
ICovCisKK1VfRFJBRlQgIFVFbnVtZXJhdGlvbiAqIFVfRVhQT1JUMgordWNzZGV0X2dldEFsbERl
dGVjdGFibGVDaGFyc2V0cyhjb25zdCBVQ2hhcnNldERldGVjdG9yICp1Y3NkLCAgVUVycm9yQ29k
ZSAqc3RhdHVzKTsKKworCisvKioKKyAgKiAgVGVzdCB3aGV0aGVyIGlucHV0IGZpbHRlcmluZyBp
cyBlbmFibGVkIGZvciB0aGlzIGNoYXJzZXQgZGV0ZWN0b3IuCisgICogIElucHV0IGZpbHRlcmlu
ZyByZW1vdmVzIHRleHQgdGhhdCBhcHBlYXJzIHRvIGJlIEhUTUwgb3IgeG1sCisgICogIG1hcmt1
cCBmcm9tIHRoZSBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvZGUgcGFnZSBkZXRlY3Rpb24K
KyAgKiAgaGV1cmlzdGljcy4KKyAgKgorICAqICBAcGFyYW0gdWNzZCAgVGhlIGNoYXJzZXQgZGV0
ZWN0b3IgdG8gY2hlY2suCisgICogIEByZXR1cm4gVFJVRSBpZiBmaWx0ZXJpbmcgaXMgZW5hYmxl
ZC4KKyAgKiAgQGRyYWZ0IElDVSAzLjQKKyAgKi8KK1VfRFJBRlQgIFVCb29sIFVfRVhQT1JUMgor
dWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFibGVkKGNvbnN0IFVDaGFyc2V0RGV0ZWN0b3IgKnVjc2Qp
OworCisKKy8qKgorICogRW5hYmxlIGZpbHRlcmluZyBvZiBpbnB1dCB0ZXh0LiBJZiBmaWx0ZXJp
bmcgaXMgZW5hYmxlZCwKKyAqIHRleHQgd2l0aGluIGFuZ2xlIGJyYWNrZXRzICgiPCIgYW5kICI+
Iikgd2lsbCBiZSByZW1vdmVkCisgKiBiZWZvcmUgZGV0ZWN0aW9uLCB3aGljaCB3aWxsIHJlbW92
ZSBtb3N0IEhUTUwgb3IgeG1sIG1hcmt1cC4KKyAqCisgKiBAcGFyYW0gdWNzZCAgIHRoZSBjaGFy
c2V0IGRldGVjdG9yIHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtIGZpbHRlciA8Y29kZT50cnVl
PC9jb2RlPiB0byBlbmFibGUgaW5wdXQgdGV4dCBmaWx0ZXJpbmcuCisgKiBAcmV0dXJuIFRoZSBw
cmV2aW91cyBzZXR0aW5nLgorICoKKyAqIEBkcmFmdCBJQ1UgMy42CisgKi8KK1VfRFJBRlQgIFVC
b29sIFVfRVhQT1JUMgordWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKFVDaGFyc2V0RGV0ZWN0b3Ig
KnVjc2QsIFVCb29sIGZpbHRlcik7CisKKyNlbmRpZgorI2VuZGlmICAgLyogX19VQ1NERVRfSCAq
LworCisKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQxOTExKQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUz
LDExIEBAIHN0YXRpYyBpbnQgbnVtUmVxdWVzdHMoRG9jdW1lbnQqIGRvY3VtZW4KICAgICByZXR1
cm4gZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKIH0KIAorc3RhdGljIGlu
bGluZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFt
ZSwgY29uc3QgRnJhbWUqIHBhcmVudEZyYW1lKSAKK3sKKyAgICByZXR1cm4gcGFyZW50RnJhbWUg
JiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzcyhm
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Cit9CisKIEZyYW1lTG9hZGVyOjpG
cmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAg
OiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQpAQCAtOTk3LDEyICsxMDAy
LDI4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICB9CiAg
ICAgCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
bV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVm
YXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKLSAgICAgICAgaWYgKG1fZW5jb2Rp
bmcuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1l
LT5zZXR0aW5ncygpKSB7CisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpjcmVhdGUobV9yZXNwb25zZU1JTUVUeXBlLAorICAgICAgICAgICAgICAgIHNldHRpbmdz
LT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLAorICAgICAgICAgICAgICAgIHNldHRpbmdzLT51
c2VzRW5jb2RpbmdEZXRlY3RvcigpKTsKICAgICAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9
IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50RnJhbWUg
JiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzcyht
X2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBt
X2RlY29kZXItPnNldEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29k
aW5nKCksIFRleHRSZXNvdXJjZURlY29kZXI6OkRlZmF1bHRFbmNvZGluZyk7CisgICAgICAgICAg
ICAvLyBTZXQgdGhlIGhpbnQgZW5jb2RpbmcgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZyBv
bmx5IGlmCisgICAgICAgICAgICAvLyB0aGUgcGFyZW50IGFuZCB0aGUgY3VycmVudCBmcmFtZXMg
c2hhcmUgdGhlIHNlY3VyaXR5IG9yaWdpbi4KKyAgICAgICAgICAgIC8vIFdlIGltcG9zZSB0aGlz
IGNvbmRpdGlvbiBiZWNhdXNlIHNvbWVib2R5IGNhbiBtYWtlIGEgY2hpbGQgZnJhbWUgCisgICAg
ICAgICAgICAvLyBjb250YWluaW5nIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgaHRtbC9qYXZhc2NyaXB0
IGluIG9uZSBlbmNvZGluZworICAgICAgICAgICAgLy8gdGhhdCBjYW4gYmUgbWlzdGFrZW4gZm9y
IGhpbnRFbmNvZGluZyAob3IgcmVsYXRlZCBlbmNvZGluZykgYnkKKyAgICAgICAgICAgIC8vIGFu
IGF1dG8gZGV0ZWN0b3IuIFdoZW4gaW50ZXJwcmV0ZWQgaW4gdGhlIGxhdHRlciwgaXQgY291bGQg
YmUKKyAgICAgICAgICAgIC8vIGFuIGF0dGFjayB2ZWN0b3IuCisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBtaWdodCBiZSB0b28gY2F1dGlvdXMgZm9yIG5vbi03Yml0LWVuY29kaW5ncyBhbmQK
KyAgICAgICAgICAgIC8vIHdlIG1heSBjb25zaWRlciByZWxheGluZyB0aGlzIGxhdGVyIGFmdGVy
IHRlc3RpbmcuCisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rpbmco
bV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0SGlu
dEVuY29kaW5nKHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIFN0cmluZygpKTsKKyAgICAgICAgRnJhbWUqIHBhcmVudEZy
YW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKG1fZW5jb2Rpbmcu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuUmVmZXJUb1BhcmVudEZyYW1lRW5jb2Rp
bmcobV9mcmFtZSwgcGFyZW50RnJhbWUpKQorICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0
RW5jb2RpbmcocGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSwgVGV4dFJl
c291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tUGFyZW50RnJhbWUpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhtX2VuY29kaW5nLAogICAgICAg
ICAgICAgICAgIG1fZW5jb2RpbmdXYXNDaG9zZW5CeVVzZXIgPyBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpVc2VyQ2hvc2VuRW5jb2RpbmcgOiBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21I
VFRQSGVhZGVyKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA0MTkxMSkKKysrIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50
YXRpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rv
ci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBAIC0zMjEsMTUgKzMy
MywxOCBAQCBjb25zdCBUZXh0RW5jb2RpbmcmIFRleHRSZXNvdXJjZURlY29kZXI6CiAgICAgcmV0
dXJuIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZzsKIH0KIAotVGV4dFJlc291cmNlRGVjb2Rlcjo6
VGV4dFJlc291cmNlRGVjb2Rlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBUZXh0RW5j
b2RpbmcmIHNwZWNpZmllZERlZmF1bHRFbmNvZGluZykKK1RleHRSZXNvdXJjZURlY29kZXI6OlRl
eHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29k
aW5nJiBzcGVjaWZpZWREZWZhdWx0RW5jb2RpbmcsIGJvb2wgdXNlc0VuY29kaW5nRGV0ZWN0b3Ip
CiAgICAgOiBtX2NvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKG1pbWVUeXBlKSkKICAg
ICAsIG1fZW5jb2RpbmcoZGVmYXVsdEVuY29kaW5nKG1fY29udGVudFR5cGUsIHNwZWNpZmllZERl
ZmF1bHRFbmNvZGluZykpCiAgICAgLCBtX3NvdXJjZShEZWZhdWx0RW5jb2RpbmcpCisgICAgLCBt
X2hpbnRFbmNvZGluZygwKQorICAgICwgbV9oaW50RW5jb2RpbmdTb3VyY2UoRGVmYXVsdEVuY29k
aW5nKQogICAgICwgbV9jaGVja2VkRm9yQk9NKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9yQ1NT
Q2hhcnNldChmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvckhlYWRDaGFyc2V0KGZhbHNlKQogICAg
ICwgbV91c2VMZW5pZW50WE1MRGVjb2RpbmcoZmFsc2UpCiAgICAgLCBtX3Nhd0Vycm9yKGZhbHNl
KQorICAgICwgbV91c2VzRW5jb2RpbmdEZXRlY3Rvcih1c2VzRW5jb2RpbmdEZXRlY3RvcikKIHsK
IH0KIApAQCAtNDUxLDcgKzQ1Niw3IEBAIHNpemVfdCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVj
a0ZvckJPTSgKIAogYm9vbCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjaGVja0ZvckNTU0NoYXJzZXQo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpCiB7
Ci0gICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZykgeworICAgIGlmIChtX3NvdXJj
ZSAhPSBEZWZhdWx0RW5jb2RpbmcgJiYgbV9zb3VyY2UgIT0gRW5jb2RpbmdGcm9tUGFyZW50RnJh
bWUpIHsKICAgICAgICAgbV9jaGVja2VkRm9yQ1NTQ2hhcnNldCA9IHRydWU7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTUzMiw3ICs1MzcsNyBAQCBjb25zdCBpbnQgYnl0ZXNUb0No
ZWNrVW5jb25kaXRpb25hbGx5ID0gCiAKIGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tG
b3JIZWFkQ2hhcnNldChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLCBib29sJiBtb3ZlZERh
dGFUb0J1ZmZlcikKIHsKLSAgICBpZiAobV9zb3VyY2UgIT0gRGVmYXVsdEVuY29kaW5nKSB7Cisg
ICAgaWYgKG1fc291cmNlICE9IERlZmF1bHRFbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBFbmNvZGlu
Z0Zyb21QYXJlbnRGcmFtZSkgewogICAgICAgICBtX2NoZWNrZWRGb3JIZWFkQ2hhcnNldCA9IHRy
dWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc1OSw2ICs3NjQsMjEgQEAgdm9p
ZCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpkZXRlY3RKYXBhbmVzZQogICAgIH0KIH0KIAorLy8gV2Ug
dXNlIHRoZSBlbmNvZGluZyBkZXRlY3RvciBpbiB0d28gY2FzZXM6CisvLyAgIDEuIEVuY29kaW5n
IGRldGVjdG9yIGlzIHR1cm5lZCBPTiBhbmQgbm8gb3RoZXIgZW5jb2Rpbmcgc291cmNlIGlzCisv
LyAgICAgIGF2YWlsYWJsZSAodGhhdCBpcywgaXQncyBEZWZhdWx0RW5jb2RpbmcpLgorLy8gICAy
LiBFbmNvZGluZyBkZXRlY3RvciBpcyB0dXJuZWQgT04gYW5kIHRoZSBlbmNvZGluZyBpcyBzZXQg
dG8KKy8vICAgICAgdGhlIGVuY29kaW5nIG9mIHRoZSBwYXJlbnQgZnJhbWUsIHdoaWNoIGlzIGFs
c28gYXV0by1kZXRlY3RlZC4KKy8vICAgTm90ZSB0aGF0IGNvbmRpdGlvbiAjMiBpcyBOT1Qgc2F0
aXNmaWVkIHVubGVzcyBwYXJlbnQtY2hpbGQgZnJhbWUKKy8vICAgcmVsYXRpb25zaGlwIGlzIGNv
bXBsaWFudCB0byB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LiBJZiB0aGV5J3JlIGZyb20KKy8vICAg
ZGlmZmVyZW50IGRvbWFpbnMsIHxtX3NvdXJjZXwgd291bGQgbm90IGJlIHNldCB0byBFbmNvZGlu
Z0Zyb21QYXJlbnRGcmFtZQorLy8gICBpbiB0aGUgZmlyc3QgcGxhY2UuIAorYm9vbCBUZXh0UmVz
b3VyY2VEZWNvZGVyOjpzaG91bGRBdXRvRGV0ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91
c2VzRW5jb2RpbmdEZXRlY3RvcgorICAgICAgICAmJiAobV9zb3VyY2UgPT0gRGVmYXVsdEVuY29k
aW5nIHx8IChtX3NvdXJjZSA9PSBFbmNvZGluZ0Zyb21QYXJlbnRGcmFtZSAmJiBtX2hpbnRFbmNv
ZGluZyAmJiBtX2hpbnRFbmNvZGluZ1NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykpOyAK
K30KKwogU3RyaW5nIFRleHRSZXNvdXJjZURlY29kZXI6OmRlY29kZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3QgbGVuKQogewogICAgIHNpemVfdCBsZW5ndGhPZkJPTSA9IDA7CkBAIC03NzUsMTAg
Kzc5NSwyNCBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAgICAg
ICAgIGlmICghY2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVy
KSkKICAgICAgICAgICAgIHJldHVybiAiIjsKIAotICAgIC8vIERvIHRoZSBhdXRvLWRldGVjdCBp
ZiBvdXIgZGVmYXVsdCBlbmNvZGluZyBpcyBvbmUgb2YgdGhlIEphcGFuZXNlIG9uZXMuCi0gICAg
Ly8gRklYTUU6IEl0IHNlZW1zIHdyb25nIHRvIGNoYW5nZSBvdXIgZW5jb2RpbmcgZG93bnN0cmVh
bSBhZnRlciB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLgorICAgIC8vIEZJWE1F
OiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0gYWZ0ZXIK
KyAgICAvLyB3ZSBoYXZlIGFscmVhZHkgZG9uZSBzb21lIGRlY29kaW5nLiBIb3dldmVyLCBpdCdz
IG5vdCBwb3NzaWJsZQorICAgIC8vIHRvIGF2b2lkIGluIGEgc2Vuc2UgaW4gdHdvIGNhc2VzIGJl
bG93IGJlY2F1c2UgdHJpZ2dlcmluZyBjb25kaXRpb25zCisgICAgLy8gZm9yIGJvdGggY2FzZXMg
ZGVwZW5kIG9uIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvbid0IGJlIGF2YWlsYWJsZQorICAgIC8v
IHVudGlsIHdlIGRvIHBhcnRpYWwgcmVhZC4gCisgICAgLy8gVGhlIGZpcnN0IGNhc2UgaGFkIGJl
dHRlciBiZSByZW1vdmVkIGFsdG9nZXRoZXIgKHNlZSBidWcgMjE5OTApCisgICAgLy8gb3IgYXQg
bGVhc3QgYmUgbWFkZSB0byBiZSBpbnZva2VkIG9ubHkgd2hlbiB0aGUgZW5jb2RpbmcgZGV0ZWN0
aW9uCisgICAgLy8gaXMgdHVybmVkIG9uLiAKKyAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgMSkg
dXNpbmcgSmFwYW5lc2UgZGV0ZWN0b3IgaWYgb3VyIGRlZmF1bHQgZW5jb2RpbmcgaXMKKyAgICAv
LyBvbmUgb2YgdGhlIEphcGFuZXNlIGRldGVjdG9yIG9yIDIpIHVzaW5nIGRldGVjdFRleHRFbmNv
ZGluZyBpZiBlbmNvZGluZworICAgIC8vIGRldGVjdGlvbiBpcyB0dXJuZWQgb24uCiAgICAgaWYg
KG1fc291cmNlICE9IFVzZXJDaG9zZW5FbmNvZGluZyAmJiBtX3NvdXJjZSAhPSBBdXRvRGV0ZWN0
ZWRFbmNvZGluZyAmJiBtX2VuY29kaW5nLmlzSmFwYW5lc2UoKSkKICAgICAgICAgZGV0ZWN0SmFw
YW5lc2VFbmNvZGluZyhkYXRhLCBsZW4pOworICAgIGVsc2UgaWYgKHNob3VsZEF1dG9EZXRlY3Qo
KSkgeworICAgICAgICBUZXh0RW5jb2RpbmcgZGV0ZWN0ZWRFbmNvZGluZzsKKyAgICAgICAgaWYg
KGRldGVjdFRleHRFbmNvZGluZyhkYXRhLCBsZW4sIG1faGludEVuY29kaW5nLCAmZGV0ZWN0ZWRF
bmNvZGluZykpCisgICAgICAgICAgICBzZXRFbmNvZGluZyhkZXRlY3RlZEVuY29kaW5nLCBBdXRv
RGV0ZWN0ZWRFbmNvZGluZyk7CisgICAgfQogCiAgICAgQVNTRVJUKG1fZW5jb2RpbmcuaXNWYWxp
ZCgpKTsKIApAQCAtODAxLDYgKzgzNSwxNyBAQCBTdHJpbmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6
ZGVjb2RlKGNvbnN0CiAKIFN0cmluZyBUZXh0UmVzb3VyY2VEZWNvZGVyOjpmbHVzaCgpCiB7Cisg
ICAvLyBJZiB3ZSBjYW4gbm90IGlkZW50aWZ5IHRoZSBlbmNvZGluZyBldmVuIGFmdGVyIGEgZG9j
dW1lbnQgaXMgY29tcGxldGVseQorICAgLy8gbG9hZGVkLCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUg
ZW5jb2RpbmcgaWYgb3RoZXIgY29uZGl0aW9ucyBmb3IKKyAgIC8vIGF1dG9kZXRlY3Rpb24gaXMg
c2F0aXNmaWVkLgorICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJiYgc2hvdWxkQXV0b0RldGVjdCgp
CisgICAgICAgICYmICgoIW1fY2hlY2tlZEZvckhlYWRDaGFyc2V0ICYmIChtX2NvbnRlbnRUeXBl
ID09IEhUTUwgfHwgbV9jb250ZW50VHlwZSA9PSBYTUwpKSB8fCAoIW1fY2hlY2tlZEZvckNTU0No
YXJzZXQgJiYgKG1fY29udGVudFR5cGUgPT0gQ1NTKSkpKSB7CisgICAgICAgICBUZXh0RW5jb2Rp
bmcgZGV0ZWN0ZWRFbmNvZGluZzsKKyAgICAgICAgIGlmIChkZXRlY3RUZXh0RW5jb2RpbmcobV9i
dWZmZXIuZGF0YSgpLCBtX2J1ZmZlci5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faGludEVuY29kaW5nLCAmZGV0ZWN0ZWRFbmNvZGluZykpCisgICAgICAgICAgICAg
c2V0RW5jb2RpbmcoZGV0ZWN0ZWRFbmNvZGluZywgQXV0b0RldGVjdGVkRW5jb2RpbmcpOworICAg
IH0KKwogICAgIGlmICghbV9jb2RlYykKICAgICAgICAgbV9jb2RlYy5zZXQobmV3VGV4dENvZGVj
KG1fZW5jb2RpbmcpLnJlbGVhc2UoKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RleHRSZXNv
dXJjZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VE
ZWNvZGVyLmgJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTMgQEAgcHVibGljOgogICAg
ICAgICBFbmNvZGluZ0Zyb21NZXRhVGFnLAogICAgICAgICBFbmNvZGluZ0Zyb21DU1NDaGFyc2V0
LAogICAgICAgICBFbmNvZGluZ0Zyb21IVFRQSGVhZGVyLAotICAgICAgICBVc2VyQ2hvc2VuRW5j
b2RpbmcKKyAgICAgICAgVXNlckNob3NlbkVuY29kaW5nLAorICAgICAgICBFbmNvZGluZ0Zyb21Q
YXJlbnRGcmFtZQogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VE
ZWNvZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSwgYm9vbCB1
c2VzRW5jb2RpbmdEZXRlY3RvciA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBlLCBkZWZhdWx0RW5jb2RpbmcpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1pbWVUeXBl
LCBkZWZhdWx0RW5jb2RpbmcsIHVzZXNFbmNvZGluZ0RldGVjdG9yKSk7CiAgICAgfQogICAgIH5U
ZXh0UmVzb3VyY2VEZWNvZGVyKCk7CiAKQEAgLTUxLDExICs1MiwxOCBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICBTdHJp
bmcgZmx1c2goKTsKIAorICAgIHZvaWQgc2V0SGludEVuY29kaW5nKGNvbnN0IFRleHRSZXNvdXJj
ZURlY29kZXIqIGhpbnREZWNvZGVyKQorICAgIHsKKyAgICAgICAgbV9oaW50RW5jb2RpbmcgPSBo
aW50RGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7CisgICAgICAgIG1faGludEVuY29kaW5nU291
cmNlID0gaGludERlY29kZXItPm1fc291cmNlOworICAgIH0KKyAgIAogICAgIHZvaWQgdXNlTGVu
aWVudFhNTERlY29kaW5nKCkgeyBtX3VzZUxlbmllbnRYTUxEZWNvZGluZyA9IHRydWU7IH0KICAg
ICBib29sIHNhd0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRl
OgotICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
VGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcpOworICAgIFRleHRSZXNvdXJjZURlY29kZXIo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2Rp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNFbmNvZGluZ0RldGVjdG9yKTsK
IAogICAgIGVudW0gQ29udGVudFR5cGUgeyBQbGFpblRleHQsIEhUTUwsIFhNTCwgQ1NTIH07IC8v
IFBsYWluVGV4dCBvbmx5IGNoZWNrcyBmb3IgQk9NLgogICAgIHN0YXRpYyBDb250ZW50VHlwZSBk
ZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKQEAgLTY1LDE3ICs3
MywyMSBAQCBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tGb3JDU1NDaGFyc2V0KGNvbnN0IGNoYXIq
LCBzaXplX3QsIGJvb2wmIG1vdmVkRGF0YVRvQnVmZmVyKTsKICAgICBib29sIGNoZWNrRm9ySGVh
ZENoYXJzZXQoY29uc3QgY2hhciosIHNpemVfdCwgYm9vbCYgbW92ZWREYXRhVG9CdWZmZXIpOwog
ICAgIHZvaWQgZGV0ZWN0SmFwYW5lc2VFbmNvZGluZyhjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAg
ICBib29sIHNob3VsZEF1dG9EZXRlY3QoKSBjb25zdDsKIAogICAgIENvbnRlbnRUeXBlIG1fY29u
dGVudFR5cGU7CiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAgICAgT3duUHRyPFRleHRD
b2RlYz4gbV9jb2RlYzsKICAgICBFbmNvZGluZ1NvdXJjZSBtX3NvdXJjZTsKKyAgICBjb25zdCBj
aGFyKiBtX2hpbnRFbmNvZGluZzsKKyAgICBFbmNvZGluZ1NvdXJjZSBtX2hpbnRFbmNvZGluZ1Nv
dXJjZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JC
T007CiAgICAgYm9vbCBtX2NoZWNrZWRGb3JDU1NDaGFyc2V0OwogICAgIGJvb2wgbV9jaGVja2Vk
Rm9ySGVhZENoYXJzZXQ7CiAgICAgYm9vbCBtX3VzZUxlbmllbnRYTUxEZWNvZGluZzsgLy8gRG9u
J3Qgc3RvcCBvbiBYTUwgZGVjb2RpbmcgZXJyb3JzLgogICAgIGJvb2wgbV9zYXdFcnJvcjsKKyAg
ICBib29sIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJ
KHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODYsNiArODYsNyBAQCBTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKICAg
ICAsIG1fc2hvdWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzKGZhbHNlKQogICAgICwgbV96b29tc1Rl
eHRPbmx5KGZhbHNlKQogICAgICwgbV9lbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUodHJ1
ZSkKKyAgICAsIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpCiAgICAgLCBtX21heGltdW1E
ZWNvZGVkSW1hZ2VTaXplKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCiAgICAg
LCBtX2FsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGZhbHNlKQogewpAQCAtNDE4LDYgKzQxOSwx
MSBAQCB2b2lkIFNldHRpbmdzOjpzZXRTaG91bGRQYWludE5hdGl2ZUNvbnRyCiB9CiAjZW5kaWYK
IAordm9pZCBTZXR0aW5nczo6c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoYm9vbCB1c2VzRW5jb2Rp
bmdEZXRlY3RvcikKK3sKKyAgICBtX3VzZXNFbmNvZGluZ0RldGVjdG9yID0gdXNlc0VuY29kaW5n
RGV0ZWN0b3I7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5k
b3dzKGJvb2wgYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MpCiB7CiAgICAgbV9hbGxvd1Njcmlw
dHNUb0Nsb3NlV2luZG93cyA9IGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzOwpJbmRleDogV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmgJKHJldmlzaW9uIDQxOTExKQorKysgV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw2ICsxMTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgICAgICBjb25zdCBTdHJpbmcmIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWZhdWx0VGV4dEVuY29kaW5nTmFtZTsgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBzZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcihib29sKTsKKyAgICAgICAgYm9vbCB1c2VzRW5jb2Rp
bmdEZXRlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0VuY29kaW5nRGV0ZWN0b3I7IH0KIAog
ICAgICAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgS1VSTCYpOwogICAg
ICAgICBjb25zdCBLVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV91c2VyU3R5bGVTaGVldExvY2F0aW9uOyB9CkBAIC0yNjAsNiArMjYzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIG1fc2hvdWxkUGFpbnRDdXN0b21TY3JvbGxiYXJzIDog
MTsKICAgICAgICAgYm9vbCBtX3pvb21zVGV4dE9ubHkgOiAxOwogICAgICAgICBib29sIG1fZW5m
b3JjZUNTU01JTUVUeXBlSW5TdHJpY3RNb2RlIDogMTsKKyAgICAgICAgYm9vbCBtX3VzZXNFbmNv
ZGluZ0RldGVjdG9yIDogMTsKICAgICAgICAgc2l6ZV90IG1fbWF4aW11bURlY29kZWRJbWFnZVNp
emU7CiAgICAgICAgIGJvb2wgbV9hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyA6IDE7CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvci5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRFbmNvZGluZ0RldGVjdG9y
X2gKKyNkZWZpbmUgVGV4dEVuY29kaW5nRGV0ZWN0b3JfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBUZXh0RW5jb2Rpbmc7CisKKyAgICAvLyBHaXZlbiBhIHNlcXVlbmNlIG9m
IGJ5dGVzIGluIHxkYXRhfCBvZiBsZW5ndGggfGxlbnwgYW5kIGFuIG9wdGlvbmFsCisgICAgLy8g
aGludEVuY29kaW5nTmFtZSwgZGV0ZWN0IHRoZSBtb3N0IGxpa2VseSBjaGFyYWN0ZXIgZW5jb2Rp
bmcuIAorICAgIC8vIFRoZSB3YXkgaGludEVuY29kaW5nTmFtZSBpcyB1c2VkIGlzIHVwIHRvIGFu
IGltcGxlbWVudGF0aW9uLgorICAgIC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgY2FsbGVyIHNldHMg
aXQgdG8gdGhlIHBhcmVudCBmcmFtZSBlbmNvZGluZy4KKyAgICBib29sIGRldGVjdFRleHRFbmNv
ZGluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGV4dEVuY29kaW5nKiBkZXRlY3RlZEVuY29kaW5nKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdEZXRlY3RvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRFbmNv
ZGluZ0RldGVjdG9yLmgiCisKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKKyNpbmNsdWRlICJ1bmljb2RlL3VjbnYuaCIKKyNpbmNsdWRlICJ1bmlj
b2RlL3Vjc2RldC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBkZXRl
Y3RUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGhpbnRFbmNvZGluZ05hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0RW5jb2RpbmcqIGRldGVjdGVkRW5jb2RpbmcpCit7CisgICAgKmRldGVj
dGVkRW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKTsKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgor
ICAgIC8vIFRpZ2VyIGNhbWUgd2l0aCBJQ1UgMy4yIGFuZCBkb2VzIG5vdCBoYXZlIHRoZSBlbmNv
ZGluZyBkZXRlY3Rvci4KKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFN
KGxlbik7CisgICAgVU5VU0VEX1BBUkFNKGhpbnRFbmNvZGluZ05hbWUpOworICAgIHJldHVybiBm
YWxzZTsKKyNlbHNlCisgICAgaW50IG1hdGNoZXNDb3VudCA9IDA7IAorICAgIFVFcnJvckNvZGUg
c3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIFVDaGFyc2V0RGV0ZWN0b3IqIGRldGVjdG9yID0g
dWNzZGV0X29wZW4oJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgdWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKGRldGVjdG9yLCB0
cnVlKTsKKyAgICB1Y3NkZXRfc2V0VGV4dChkZXRlY3RvciwgZGF0YSwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4obGVuKSwgJnN0YXR1cyk7IAorICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IEEgZmV3IHRoaW5ncyB3ZSBjYW4gZG8g
b3RoZXIgdGhhbiBpbXByb3ZpbmcKKyAgICAvLyB0aGUgSUNVIGRldGVjdG9yIGl0c2VsZi4gCisg
ICAgLy8gMS4gVXNlIHVjc2RldF9kZXRlY3RBbGwgYW5kIHBpY2sgdGhlIG1vc3QgbGlrZWx5IG9u
ZSBnaXZlbgorICAgIC8vICJ0aGUgY29udGV4dCIgKHBhcmVudC1lbmNvZGluZywgcmVmZXJyZXIg
ZW5jb2RpbmcsIGV0YykuCisgICAgLy8gMi4gJ0VtdWxhdGUnIEZpcmVmb3gvSUUncyBub24tVW5p
dmVyc2FsIGRldGVjdG9ycyAoZS5nLgorICAgIC8vIENoaW5lc2UsIEphcGFuZXNlLCBSdXNzaWFu
LCBLb3JlYW4gYW5kIEhlYnJldykgYnkgcGlja2luZyB0aGUgCisgICAgLy8gZW5jb2Rpbmcgd2l0
aCBhIGhpZ2hlc3QgY29uZmlkZW5jZSBhbW9uZyB0aGUgZGV0ZXRjdG9yLXNwZWNpZmljCisgICAg
Ly8gbGltaXRlZCBzZXQgb2YgY2FuZGlkYXRlIGVuY29kaW5ncy4KKyAgICAvLyBCZWxvdyBpcyBh
IHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcnQgb2Ygd2hhdCdzIG91dGxp
bmVkCisgICAgLy8gYWJvdmUuCisgICAgY29uc3QgVUNoYXJzZXRNYXRjaCoqIG1hdGNoZXMgPSB1
Y3NkZXRfZGV0ZWN0QWxsKGRldGVjdG9yLCAmbWF0Y2hlc0NvdW50LCAmc3RhdHVzKTsKKyAgICBp
ZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKKyAgICAgICAgdWNzZGV0X2Nsb3NlKGRldGVjdG9yKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGVuY29kaW5n
ID0gMDsKKyAgICBpZiAoaGludEVuY29kaW5nTmFtZSkgeworICAgICAgICBUZXh0RW5jb2Rpbmcg
aGludEVuY29kaW5nKGhpbnRFbmNvZGluZ05hbWUpOworICAgICAgICAvLyAxMCBpcyB0aGUgbWlu
aW11bSBjb25maWRlbmNlIHZhbHVlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29kZXBvaW50CisgICAg
ICAgIC8vIGFsbG9jYXRpb24gaW4gYSBnaXZlbiBlbmNvZGluZy4gVGhlIHNpemUgb2YgYSBjaHVu
ayBwYXNzZWQgdG8KKyAgICAgICAgLy8gdXMgdmFyaWVzIGV2ZW4gZm9yIHRoZSBzYW1lIGh0bWwg
ZmlsZSAoYXBwYXJlbnRseSBkZXBlbmRpbmcgb24gCisgICAgICAgIC8vIHRoZSBuZXR3b3JrIGxv
YWQpLiBXaGVuIHdlJ3JlIGdpdmVuIGEgcmF0aGVyIHNob3J0IGNodW5rLCB3ZSAKKyAgICAgICAg
Ly8gZG9uJ3QgaGF2ZSBhIHN1ZmZpY2llbnRseSByZWxpYWJsZSBzaWduYWwgb3RoZXIgdGhhbiB0
aGUgZmFjdCB0aGF0CisgICAgICAgIC8vIHRoZSBjaHVuayBpcyBjb25zaXN0ZW50IHdpdGggYSBz
ZXQgb2YgZW5jb2RpbmdzLiBTbywgaW5zdGVhZCBvZgorICAgICAgICAvLyBzZXR0aW5nIGFuIGFy
Yml0cmFyeSB0aHJlc2hvbGQsIHdlIGhhdmUgdG8gc2NhbiBhbGwgdGhlIGVuY29kaW5ncworICAg
ICAgICAvLyBjb25zaXN0ZW50IHdpdGggdGhlIGRhdGEuICAKKyAgICAgICAgY29uc3QgaW50MzJf
dCBrVGhyZXNvbGQgPSAxMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXRjaGVzQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgaW50MzJfdCBjb25maWRlbmNlID0gdWNzZGV0X2dldENv
bmZpZGVuY2UobWF0Y2hlc1tpXSwgJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJF
KHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29u
ZmlkZW5jZSA8IGtUaHJlc29sZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG1hdGNoRW5jb2RpbmcgPSB1Y3NkZXRfZ2V0TmFtZShtYXRjaGVzW2ldLCAm
c3RhdHVzKTsKKyAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChUZXh0RW5jb2RpbmcobWF0Y2hFbmNvZGlu
ZykgPT0gaGludEVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBoaW50RW5j
b2RpbmdOYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIC8vIElmIG5vIG1hdGNoIGlzIGZvdW5kIHNvIGZhciwganVzdCBwaWNr
IHRoZSB0b3AgbWF0Y2guIAorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiwgc2F5LCB3aGVuIGEgcGFy
ZW50IGZyYW1lIGluIEVVQy1KUCByZWZlcnMgdG8KKyAgICAvLyBhIGNoaWxkIGZyYW1lIGluIFNo
aWZ0X0pJUyBhbmQgYm90aCBmcmFtZXMgZG8gTk9UIHNwZWNpZnkgdGhlIGVuY29kaW5nCisgICAg
Ly8gbWFraW5nIHVzIHJlc29ydCB0byBhdXRvLWRldGVjdGlvbiAod2hlbiBpdCBJUyB0dXJuZWQg
b24pLgorICAgIGlmICghZW5jb2RpbmcgJiYgbWF0Y2hlc0NvdW50ID4gMCkKKyAgICAgICAgZW5j
b2RpbmcgPSB1Y3NkZXRfZ2V0TmFtZShtYXRjaGVzWzBdLCAmc3RhdHVzKTsKKyAgICBpZiAoVV9T
VUNDRVNTKHN0YXR1cykpIHsKKyAgICAgICAgKmRldGVjdGVkRW5jb2RpbmcgPSBUZXh0RW5jb2Rp
bmcoZW5jb2RpbmcpOworICAgICAgICB1Y3NkZXRfY2xvc2UoZGV0ZWN0b3IpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9ICAgIAorICAgIHVjc2RldF9jbG9zZShkZXRlY3Rvcik7CisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yTm9uZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4
dEVuY29kaW5nRGV0ZWN0b3IuaCIKKworI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgZGV0ZWN0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBoaW50
RW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dEVuY29kaW5nKiBkZXRl
Y3RlZEVuY29kaW5nKQoreworICAgIFVOVVNFRF9QQVJBTShkYXRhKQorICAgIFVOVVNFRF9QQVJB
TShsZW4pCisgICAgVU5VU0VEX1BBUkFNKGhpbnRFbmNvZGluZ05hbWUpCisKKyAgICAqZGV0ZWN0
ZWRFbmNvZGluZyA9IFRleHRFbmNvZGluZygpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQxOTExKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wMy0yNCAgSnVuZ3NoaWsgU2hpbiAgPGpzaGlu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgV2ViUHJlZmVyZW5jZXMgZm9yIGVuY29kaW5nIGF1dG9kZXRlY3Rpb24gb24g
TWFjLgorICAKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0ODIKKworICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg6Cisg
ICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVy
ZW5jZXMgaW5pdGlhbGl6ZV0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyB1c2VzRW5jb2Rp
bmdEZXRlY3Rvcl0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRVc2VzRW5jb2RpbmdE
ZXRlY3RvcjpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVy
ZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOl0pOgorCiAyMDA5LTAzLTIzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLmg6
IEZpeGVkIGEgc3BlbGxpbmcgZXJyb3IgaW4gYSBjb21tZW50LgpJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkocmV2aXNpb24gNDE5MTEpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgV2ViS2l0RGVmYXVsdEZvbnRTaXplUHJl
ZmVyZW5jZUtleSBAIldlYktpdERlZmF1bHRGb250U2l6ZSIKICNkZWZpbmUgV2ViS2l0RGVmYXVs
dEZpeGVkRm9udFNpemVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUi
CiAjZGVmaW5lIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lUHJlZmVyZW5jZUtleSBAIldl
YktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lIgorI2RlZmluZSBXZWJLaXRVc2VzRW5jb2RpbmdE
ZXRlY3RvclByZWZlcmVuY2VLZXkgQCJXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvciIKICNkZWZp
bmUgV2ViS2l0VXNlclN0eWxlU2hlZXRFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXJT
dHlsZVNoZWV0RW5hYmxlZFByZWZlcmVuY2VLZXkiCiAjZGVmaW5lIFdlYktpdFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb25QcmVmZXJlbmNlS2V5IEAiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvblBy
ZWZlcmVuY2VLZXkiCiAjZGVmaW5lIFdlYktpdFNob3VsZFByaW50QmFja2dyb3VuZHNQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VLZXkiCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiA0MTkxMSkKKysrIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2
LDYgKzMwNiw3IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnUKICAg
ICAgICAgQCIxNiIsICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0Rm9udFNp
emVQcmVmZXJlbmNlS2V5LAogICAgICAgICBAIjEzIiwgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdERlZmF1bHRGaXhlZEZvbnRTaXplUHJlZmVyZW5jZUtleSwKICAgICAgICAgQCJJU08t
ODg1OS0xIiwgICAgICAgICAgICAgICAgICBXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZVBy
ZWZlcmVuY2VLZXksCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2Vi
S2l0VXNlc0VuY29kaW5nRGV0ZWN0b3JQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6Tk9dLCAgIFdlYktpdFVzZXJTdHlsZVNoZWV0RW5hYmxlZFByZWZlcmVu
Y2VLZXksCiAgICAgICAgIEAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VXNl
clN0eWxlU2hlZXRMb2NhdGlvblByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kc1ByZWZlcmVuY2VL
ZXksCkBAIC04NjQsNiArODY1LDE2IEBAIHN0YXRpYyBXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWxG
b3JNYWluQnUKICAgICBfcHJpdmF0ZS0+YXV0b21hdGljYWxseURldGVjdHNDYWNoZU1vZGVsID0g
YXV0b21hdGljYWxseURldGVjdHNDYWNoZU1vZGVsOwogfQogCistIChCT09MKXVzZXNFbmNvZGlu
Z0RldGVjdG9yCit7CisgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6IFdlYktpdFVz
ZXNFbmNvZGluZ0RldGVjdG9yUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQpc2V0VXNlc0Vu
Y29kaW5nRGV0ZWN0b3I6KEJPT0wpZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6IGZs
YWcgZm9yS2V5OiBXZWJLaXRVc2VzRW5jb2RpbmdEZXRlY3RvclByZWZlcmVuY2VLZXldOworfQor
CiAtIChCT09MKWlzV2ViU2VjdXJpdHlFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6IFdlYktpdFdlYlNlY3VyaXR5RW5hYmxlZFByZWZlcmVuY2VLZXldOwpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24g
NDE5MTEpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDkgQEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJl
bmNlc1JlbW92ZWRObwogLSAoQk9PTClhcHBsaWNhdGlvbkNocm9tZU1vZGVFbmFibGVkOwogLSAo
dm9pZClzZXRBcHBsaWNhdGlvbkNocm9tZU1vZGVFbmFibGVkOihCT09MKWZsYWc7CiAKKy0gKEJP
T0wpdXNlc0VuY29kaW5nRGV0ZWN0b3I7CistICh2b2lkKXNldFVzZXNFbmNvZGluZ0RldGVjdG9y
OihCT09MKWZsYWc7CisKIC0gKEJPT0wpcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50
czsKIC0gKHZvaWQpc2V0UmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50czooQk9PTClm
bGFnOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDE5MTEpCisrKyBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxNiw2ICsxMzE2
LDcgQEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQwogICAgIHNldHRp
bmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShbcHJlZmVyZW5jZXMgZGVmYXVsdEZpeGVkRm9u
dFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKFtwcmVmZXJlbmNlcyBk
ZWZhdWx0Rm9udFNpemVdKTsKICAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUoW3ByZWZlcmVuY2VzIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lXSk7CisgICAgc2V0dGluZ3Mt
PnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKFtwcmVmZXJlbmNlcyB1c2VzRW5jb2RpbmdEZXRlY3Rv
cl0pOwogICAgIHNldHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgZmFu
dGFzeUZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KFtwcmVm
ZXJlbmNlcyBmaXhlZEZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0Rm9yY2VGVFBEaXJl
Y3RvcnlMaXN0aW5ncyhbcHJlZmVyZW5jZXMgX2ZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3NdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29000</attachid>
            <date>2009-03-26 19:28:35 -0700</date>
            <delta_ts>2009-03-26 19:37:02 -0700</delta_ts>
            <desc>tiger/qt build fix</desc>
            <filename>16482.bfix.patch</filename>
            <type>text/plain</type>
            <size>1703</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjAyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDMtMjYgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGJ1aWxkIGZhaWx1cmVzIG9uIFRpZ2VyIGFuZCBRdC4KKyAgICAgICAgVW51c2VkUGFyYW0u
aCB3YXMgbm90IGluY2x1ZGVkIGJ5IFRleHRFbmNvZGluZ0RldGVjdG9ye05vbmUsSUNVfS5jcHAK
KyAgICAgICAgaW4gdGhlIHBhdGNoIGxhbmRlZCBpbiByNDIwMjMKKyAgICAgICAgZm9yIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRldGVjdFRleHRFbmNvZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdEZXRlY3Rvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZWN0VGV4dEVuY29kaW5n
KToKKwogMjAwOS0wMy0yNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBCdWlsZCBmaXggd2hlbiBBQ0NFTEVSQVRFRF9DT01QT1NJVElORyBpcyB0dXJu
ZWQgb24uCkluZGV4OiBXZWJjb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JJ
Q1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYmNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdE
ZXRlY3RvcklDVS5jcHAJKHJldmlzaW9uIDQyMDI1KQorKysgV2ViY29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
OSBAQAogI2luY2x1ZGUgIlRleHRFbmNvZGluZ0RldGVjdG9yLmgiCiAKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgorI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCisjZWxzZQogI2luY2x1ZGUgInVuaWNv
ZGUvdWNudi5oIgogI2luY2x1ZGUgInVuaWNvZGUvdWNzZGV0LmgiCiAjZW5kaWYKSW5kZXg6IFdl
YmNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYmNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUuY3Bw
CShyZXZpc2lvbiA0MjAyNSkKKysrIFdlYmNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdE
ZXRlY3Rvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCIKIAogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29001</attachid>
            <date>2009-03-26 19:37:02 -0700</date>
            <delta_ts>2009-03-26 19:52:52 -0700</delta_ts>
            <desc>Fix Tiger/Qt build and crash in setHintEncoding</desc>
            <filename>16482.fix.patch</filename>
            <type>text/plain</type>
            <size>2382</size>
            <attacher name="Jungshik Shin">jshin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjAyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDMtMjYgIEp1bmdzaGlrIFNoaW4gIDxqc2hpbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
MS4gRml4IHRoZSBjcmFzaCBpbiBzZXRIaW50RW5jb2RpbmcKKyAgICAgICAgMi4gRml4IGJ1aWxk
IGZhaWx1cmVzIG9uIFRpZ2VyIGFuZCBRdC4KKyAgICAgICAgVW51c2VkUGFyYW0uaCB3YXMgbm90
IGluY2x1ZGVkIGJ5IFRleHRFbmNvZGluZ0RldGVjdG9ye05vbmUsSUNVfS5jcHAKKyAgICAgICAg
aW4gdGhlIHBhdGNoIGxhbmRlZCBpbiByNDIwMjMKKyAgICAgICAgZm9yIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgyCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFJl
c291cmNlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6
c2V0SGludEVuY29kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0Rl
dGVjdG9ySUNVLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVj
dG9yTm9uZS5jcHA6CisKIDIwMDktMDMtMjYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IHdoZW4gQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcgaXMgdHVybmVkIG9uLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaAko
cmV2aXNpb24gNDIwMjUpCisrKyBXZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
Ly8gaGludEVuY29kaW5nIGlzIGZvciB1c2Ugd2l0aCBhdXRvZGV0ZWN0aW9uLCB3aGljaCBzaG91
bGQgYmUgCiAgICAgICAgIC8vIG9ubHkgaW52b2tlZCAgd2hlbiBoaW50RW5jb2RpbmcgY29tZXMg
ZnJvbSBhdXRvLWRldGVjdGlvbi4KLSAgICAgICAgaWYgKGhpbnREZWNvZGVyLT5tX3NvdXJjZSA9
PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKKyAgICAgICAgaWYgKGhpbnREZWNvZGVyICYmIGhpbnRE
ZWNvZGVyLT5tX3NvdXJjZSA9PSBBdXRvRGV0ZWN0ZWRFbmNvZGluZykKICAgICAgICAgICAgIG1f
aGludEVuY29kaW5nID0gaGludERlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwogICAgIH0KICAg
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3JJQ1UuY3BwCShyZXZpc2lvbiA0MjAyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmdEZXRlY3Rvci5oIgogCiAjaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgorI2Vsc2UKICNpbmNsdWRlICJ1bmljb2RlL3Vj
bnYuaCIKICNpbmNsdWRlICJ1bmljb2RlL3Vjc2RldC5oIgogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0b3JOb25lLmNwcAkocmV2
aXNpb24gNDIwMjUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nRGV0ZWN0
b3JOb25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlRl
eHRFbmNvZGluZ0RldGVjdG9yLmgiCiAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNs
dWRlICJVbnVzZWRQYXJhbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>