<?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>156539</bug_id>
          
          <creation_ts>2016-04-13 08:52:16 -0700</creation_ts>
          <short_desc>Remove UsePointersEvenForNonNullableObjectArguments from Internals</short_desc>
          <delta_ts>2016-04-14 10:10:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1183412</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-13 08:52:16 -0700</bug_when>
    <thetext>Remove UsePointersEvenForNonNullableObjectArguments from Internals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183414</commentid>
    <comment_count>1</comment_count>
      <attachid>276325</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-13 09:08:43 -0700</bug_when>
    <thetext>Created attachment 276325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183422</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-13 09:22:04 -0700</bug_when>
    <thetext>Does not build on GTK and EFL:
../../Source/WebCore/testing/Internals.cpp
../../Source/WebCore/testing/Internals.cpp:3260:8: error: prototype for &apos;WTF::String WebCore::Internals::userVisibleString(const WebCore::DOMURL*)&apos; does not match any in class &apos;WebCore::Internals&apos;
In file included from ../../Source/WebCore/testing/Internals.cpp:28:0:
../../Source/WebCore/testing/Internals.h:468:12: error: candidate is: WTF::String WebCore::Internals::userVisibleString(const WebCore::DOMURL&amp;)
ICECC[11745] 15:46:28: Compiled on 192.168.10.38
Copying template files to output directory...
Running gtkdoc-scan
Running gtkdoc-scangobj
Running gtkdoc-mkdb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183424</commentid>
    <comment_count>3</comment_count>
      <attachid>276327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-13 09:25:06 -0700</bug_when>
    <thetext>Created attachment 276327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183616</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-13 19:46:52 -0700</bug_when>
    <thetext>Alex, Brent, can one of you help me fix the Windows build failure? It seems that somehow WEBCORE_TESTSUPPORT_EXPORT is not defined. When I look in PlatformExportMacros.h, it says &quot;// Windows must set this per-project&quot;. What does that mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183627</commentid>
    <comment_count>5</comment_count>
      <attachid>276372</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-13 21:43:45 -0700</bug_when>
    <thetext>Created attachment 276372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183628</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-13 21:46:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 276372 [details]
&gt; Patch

What did you change? I&apos;m still in the process of building! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183629</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-13 21:57:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Alex, Brent, can one of you help me fix the Windows build failure? It seems
&gt; that somehow WEBCORE_TESTSUPPORT_EXPORT is not defined. When I look in
&gt; PlatformExportMacros.h, it says &quot;// Windows must set this per-project&quot;. What
&gt; does that mean?
I don&apos;t remember all the details, but WEBCORE_EXPORT is defined in WebCorePrefix.h and WebCoreTestSupportPrefix.h on Windows because it needs to be different. WEBCORE_TESTSUPPORT_EXPORT is only defined in WebCoreTestSupportPrefix.h, and it is only used in WebCoreTestSupport.  I think the correct solution here is to use WEBCORE_EXPORT here for the HTML Elements that are in WebCore, and WEBCORE_TESTSUPPORT_EXPORT for Internals.idl, which is in WebCoreTestSupport.  I uploaded a patch that does that.

There was an idea going around to make a new export macro for functions in WebCore that exist only for testing.  It would export the symbols for engineering builds and not for production builds so that code elimination would be more effective and reduce the binary size of production builds, but we have not done that yet.  And we were uncertain if it would be worth the build breakages caused by using the wrong macro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183643</commentid>
    <comment_count>8</comment_count>
      <attachid>276372</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-13 23:19:09 -0700</bug_when>
    <thetext>Comment on attachment 276372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=276372&amp;action=review

&gt; Source/WebCore/testing/Internals.cpp:477
&gt; -    return String::format(&quot;%p&quot;, node);
&gt; +    return String::format(&quot;%p&quot;, &amp;node);

The existence of this function could have some scary security implications if this is accessible in released software (which it&apos;s not).  Maybe we should remove it, though.

&gt; Source/WebCore/testing/Internals.cpp:1237
&gt; +    FrameView* frameView = element.document().view();

auto

&gt; Source/WebCore/testing/Internals.cpp:1247
&gt; +    if (!is&lt;HTMLFormControlElement&gt;(element)) {

It seems like we could make this parameter an HTMLFormControlElement, similar to how we are doing with other functions like setShowAutoFillButton.  Then we wouldn&apos;t need this.

&gt; LayoutTests/fast/forms/color/input-color-onchange-event.html:-40
&gt; -evalAndLog(&quot;internals.selectColorInColorChooser({}, &apos;#ff0000&apos;);&quot;);
&gt; -evalAndLog(&quot;internals.selectColorInColorChooser(document, &apos;#ff0000&apos;);&quot;);

Do these throw something now?  Would putting the function in a try statement still successfully test the behavior of invalid parameters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183721</commentid>
    <comment_count>9</comment_count>
      <attachid>276372</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 09:18:35 -0700</bug_when>
    <thetext>Comment on attachment 276372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=276372&amp;action=review

&gt;&gt; Source/WebCore/testing/Internals.cpp:477
&gt;&gt; +    return String::format(&quot;%p&quot;, &amp;node);
&gt; 
&gt; The existence of this function could have some scary security implications if this is accessible in released software (which it&apos;s not).  Maybe we should remove it, though.

First of all, I think this is not a real concern. There are all sorts of security problems with internals, and none of it is safe to ship. This is just one of the most obvious bad functions, but others are terrible for security in many different ways.

But if we do want to wipe out this particular function because of an excess of caution, the one place that uses it is resources/dump-as-markup.js so you could discuss other ways to make that work with Ryosuke.

An easy thing to do that might mitigate the risk a little would be to compute a SHA-1 digest of the pointer along with a randomly generated integer; just needs to be a unique identifier, doesn’t need to actually be the pointer.

&gt;&gt; Source/WebCore/testing/Internals.cpp:1247
&gt;&gt; +    if (!is&lt;HTMLFormControlElement&gt;(element)) {
&gt; 
&gt; It seems like we could make this parameter an HTMLFormControlElement, similar to how we are doing with other functions like setShowAutoFillButton.  Then we wouldn&apos;t need this.

Yes, I considered that. We could do that HTMLFormControlElement was a DOM type, but it’s not. It’s an internal type and not web-exposed.

&gt;&gt; LayoutTests/fast/forms/color/input-color-onchange-event.html:-40
&gt;&gt; -evalAndLog(&quot;internals.selectColorInColorChooser(document, &apos;#ff0000&apos;);&quot;);
&gt; 
&gt; Do these throw something now?  Would putting the function in a try statement still successfully test the behavior of invalid parameters?

Yes, I considered that, but this is not a useful test. There is no real value in testing edge cases of the internals functions themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183722</commentid>
    <comment_count>10</comment_count>
      <attachid>276372</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 09:19:58 -0700</bug_when>
    <thetext>Comment on attachment 276372
Patch

I’m going to commit-queue this; doesn’t seem critical to make the one change I want to do (use auto for FrameView*) and I don’t currently have a convenient branch to do this on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183737</commentid>
    <comment_count>11</comment_count>
      <attachid>276372</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-14 10:10:05 -0700</bug_when>
    <thetext>Comment on attachment 276372
Patch

Clearing flags on attachment: 276372

Committed r199539: &lt;http://trac.webkit.org/changeset/199539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183738</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-14 10:10:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276325</attachid>
            <date>2016-04-13 09:08:43 -0700</date>
            <delta_ts>2016-04-13 09:25:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156539-20160413090854.patch</filename>
            <type>text/plain</type>
            <size>105302</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjYjllMTlmY2U5ZmY4
MzM2NWUyOWQ0YjAxYjMxOTgzMjRiMDE1NS4uODNkZTgyOTZlYWM0NmQ5ODc1ZGJiZjllY2ZjZDAx
ZjIyODBjMWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wNC0xMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFVzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzIGZyb20gSW50ZXJuYWxzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY1MzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTEltYWdl
RWxlbWVudC5pZGw6IEV4cG9ydGVkIHRoaXMgc28gaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHR5cGUg
Zm9yCisgICAgICAgIGEgZnVuY3Rpb24gYXJndW1lbnQgaW4gSW50ZXJuYWxzLmlkbC4KKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5pZGw6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaWRsOiBEaXR0by4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0dWJGcm9udGVuZDo6SW5zcGVjdG9yU3R1YkZyb250ZW5k
KTogVGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGUpOiBU
YWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogVGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpJbnRlcm5hbHMpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXR0aW5ncyk6IFVzZSBudWxscHRyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6YWRkcmVzcyk6IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6bm9kZU5lZWRzU3R5bGVSZWNhbGMpOiBUYWtlIGEgTm9kZSYgYW5kIG5vIEV4
Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5
cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6eGhyUmVzcG9uc2VTb3Vy
Y2UpOiBUYWtlIGFuIFhNTEh0dHBSZXF1ZXN0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6aXNTaGFyaW5nU3R5bGVTaGVldENvbnRlbnRzKTogVGFrZSB0d28KKyAgICAgICAgSFRNTExp
bmtFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTdHlsZVNoZWV0TG9h
ZGluZ1N1YnJlc291cmNlcyk6IFRha2UgYW4gSFRNTExpbmtFbGVtZW50Ji4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6aW1hZ2VGcmFtZUluZGV4KTogVGFrZSBhbiBIVE1MSW1hZ2VFbGVt
ZW50JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuIEFsc28gcmV0dXJuIGFuIHVuc2ln
bmVkIHJhdGhlciB0aGFuIHNpemVfdCwgc2luY2UgdGhlIElETCBleHBlY3RzCisgICAgICAgIHVu
c2lnbmVkIGxvbmcsIHdoaWNoIG1lYW5zIHVuc2lnbmVkIGluIEMrKyBjb2RlLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZSk6IFRha2UgYSBOb2RlJiBhbmQg
bm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhcmVudFRy
ZWVTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6YXR0YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpl
bGVtZW50UmVuZGVyVHJlZUFzVGV4dCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6Omhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyk6IFRha2UgYW4gRWxlbWVu
dCYgYW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOiBUYWtlIGEgTm9kZSYg
YW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjplbnN1cmVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVu
dCYgYW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4
Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dSb290VHlw
ZSk6IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aW5jbHVkZXJG
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dQc2V1ZG9J
ZCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzZXRTaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp2aXNpYmxlUGxhY2Vob2xkZXIpOiBUYWtlIGFuIEVsZW1lbnQmLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKTog
VGFrZSBhbiBIVE1MSW5wdXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
Ym91bmRpbmdCb3gpOiBUYWtlIGFuIEVsZW1lbnQmIGFuZCBubyBFeGNlcHRpb25Db2RlJi4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKTogVGFrZSBhIE5v
ZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJBdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFkZFRleHRNYXRjaE1hcmtlcik6IFRh
a2UgYSBjb25zdCBSYW5nZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNjcm9s
bFZpZXdQb3NpdGlvbik6IFRha2UgaW50IGluc3RlYWQgb2YgbG9uZzsgbG9uZyBpbgorICAgICAg
ICBJREwgbWVhbnMgaW50IGluIEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
Ojp3YXNMYXN0Q2hhbmdlVXNlckVkaXQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjplbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKTogVGFrZSBhbiBIVE1M
SW5wdXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0RWRpdGluZ1Zh
bHVlKTogVGFrZSBhbiBIVE1MSW5wdXRFbGVtZW50JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9u
Q29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEF1dG9maWxsZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0U2hvd0F1dG9GaWxsQnV0dG9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3Qp
OiBUYWtlIGFuIEVsZW1lbnQmIGFuZCBpbnQgaW5zdGVhZCBvZiBsb25nLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjphdXRvZmlsbEZpZWxkTmFtZSk6IFRha2UgYW4gRWxlbWVudCYuCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKTog
VGFrZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZSk6IFRha2UgYW4gRWxlbWVudCYgYW5kIGNvbnN0
IFJhbmdlJiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KTogVGFrZSBjb25zdCBSYW5nZSYgYW4gbm8gRXhjZXB0
aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogVGFrZSBS
YW5nZSYgYW4gbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
Om5vZGVzRnJvbVJlY3QpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpvcGVuRHVtbXlJbnNwZWN0b3JGcm9udGVuZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
ZGlzcGxheUxpc3RGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpjb3VudGVyVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cGFnZU51bWJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6d2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudCk6IFJldHVybiB1bnNpZ25lZCBpbnN0ZWFkIG9m
IHVuc2lnbmVkIGxvbmcuCisgICAgICAgIElETCB1bnNpZ25lZCBsb25nIG1lYW5zIHVuc2lnbmVk
IGluIEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZVJlY2FsY0Nv
dW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvbXBvc2l0aW5nVXBk
YXRlQ291bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZGVzZXJpYWxp
emVCdWZmZXIpOiBUYWtlIGFuIEFycmF5QnVmZmVyJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTogVGFrZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhj
ZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJj
ZVVSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaW11bGF0ZUF1ZGlv
SW50ZXJydXB0aW9uKTogVGFrZSBhbiBIVE1MTWVkaWFFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2libGUpOiBUYWtlIGFu
IEhUTUxTZWxlY3RFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y2xvc2Vz
dFRpbWVUb1RpbWVSYW5nZXMpOiBUYWtlIGEgVGltZVJhbmdlJi4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVkKTogVGFr
ZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5TbmFw
c2hvdHRlZCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKTogVGFrZSBh
IFNvdXJjZUJ1ZmZlciYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNob3VsZEdl
bmVyYXRlVGltZXN0YW1wcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpz
ZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbGVtZW50SXNCbG9ja2luZ0Rpc3BsYXlTbGVl
cCk6IFRha2UgYW4gSFRNTE1lZGlhRWxlbWVudCYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyk6IFRha2UgYW4gQXVkaW9Db250ZXh0Ji4K
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsU25hcE9mZnNldHMpOiBUYWtlIGFu
IEVsZW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFD
b250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjb21wb3NlZFRyZWVBc1RleHQpOiBUYWtlIGEgTm9k
ZSYuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOiBVcGRhdGUgZm9yIGFsbCB0aGUg
Y2hhbmdlcyBsaXN0ZWQgYWJvdmUuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6
IFJlbW92ZWQgVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMuIFJl
bW92ZWQKKyAgICAgICAgbWFueSB1bm5lZWRlZCBbUmFpc2VzRXhjZXB0aW9uXS4gVXNlZCBtb3Jl
IHNwZWNpZmljIHR5cGVzIGZvciBtYW55IGFyZ3VtZW50cy4gUmVtb3ZlZAorICAgICAgICB1bnVz
ZWQsIGFuZCB1bmltcGxlbWVudGVkLCBhdHRhY2hlZCBhbmQgaW5jbHVkZWRGb3IgZnVuY3Rpb25z
LiBNYWRlIHRoZSBub2RlIGFyZ3VtZW50IHRvCisgICAgICAgIHVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyBudWxsYWJsZSBhcyB3ZWxsIGFz
IG9wdGlvbmFsLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMubW06CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6OnVzZXJWaXNpYmxlU3RyaW5nKTogVGFrZSBhIGNvbnN0IERPTVVS
TCYuCisKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAg
ICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6IFBhc3MgYSBE
b2N1bWVudCYgcmF0aGVyIHRoYW4gYSBEb2N1bWVudCouCisgICAgICAgIChXZWJDb3JlVGVzdFN1
cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KTogUGFzcyBhIFBhZ2UmIHJhdGhlciB0aGFuIGEg
UGFnZSouCisKIDIwMTYtMDQtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdHRyLnZhbHVlIHNob3VsZCBub3QgYmUgbnVsbGFibGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCmluZGV4IGNmOGZiOGRjZjkzM2MyODAzOGMxNjM0YmFi
ZWZiYzJmZTlkM2QxYzQuLjkxM2M0NWRkNWQzODNkZDE4M2YyODU5NDE3ZDM5Mjk5NDMxZjBiZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbApAQCAtMTksNiArMTks
NyBAQAogICovCiAKIFsKKyAgICBFeHBvcnRNYWNybz1XRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9S
VCwKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBIVE1MSW1hZ2VF
bGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IG5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAppbmRleCAwYzBi
NWQ5MDg4YzI1MDE4ZTg1M2U5NWZjYTY1MWY4OTUzYTIzMzYzLi5kNmIwODk2NmZkMDk2MGE3M2Mw
MWIwMjkzMjk0ZmQzMGM0NWJkZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5pZGwKQEAgLTE5LDcgKzE5LDEwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KICAqLwogCi1pbnRlcmZhY2UgSFRNTElucHV0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKK1sK
KyAgICBFeHBvcnRNYWNybz1XRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCwKKyAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCitdIGludGVyZmFjZSBIVE1MSW5wdXRFbGVtZW50IDogSFRNTEVs
ZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFjY2VwdDsKICAgICBb
UmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBhbHQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyBhdXRvY29tcGxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5pZGwKaW5k
ZXggZWQ0YjEyODFjN2JmNjQ3YTNkMjljMjkyNjc0OGQyZGM3ZTk5YzA3YS4uNTQwZjc2ZWM5ODg5
MjQ1MzM1YjI5MzBkMmNjNmRiYjI1MzEwM2MyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmlkbApAQCAtMTksNyArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICovCiAKLWludGVyZmFjZSBIVE1MTGlua0VsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CitbCisgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQsCisgICAgSlNH
ZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAorXSBpbnRlcmZhY2UgSFRNTExpbmtFbGVtZW50IDogSFRN
TEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBkaXNhYmxlZDsKICAg
ICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBjaGFyc2V0OwogICAgIFtSZWZsZWN0LCBV
UkxdIGF0dHJpYnV0ZSBET01TdHJpbmcgaHJlZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5pZGwKaW5kZXggMzNmYjA2MzA5YTUxOWI1MmNhMWFjNDc2YjlhNWIwMmU2ZmYz
ODRjMy4uMWJiNjA2MTU0MmIyMjNiZDRlMGY4MjZkYmE2NzIxYTAzOTJlOThlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwKQEAgLTIwLDYgKzIwLDggQEAKIAog
WwogICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCisgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9URVNU
U1VQUE9SVF9FWFBPUlQsCisgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZh
Y2UgSFRNTFNlbGVjdEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJp
YnV0ZSBib29sZWFuIGF1dG9mb2N1czsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4g
ZGlzYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWMwYWVhMDBi
OGIxMmJhMTYzYzY4MWZkYWY2YzFhNGVkNGQ1NzlkNC4uZGYxMThhMmNjMzhmZTZkYjVmODFlZTE2
YWQ4NDY1ODk5NzhmMjE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAt
MjQyLDcgKzI0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGNsYXNzIEluc3Bl
Y3RvclN0dWJGcm9udGVuZCA6IHB1YmxpYyBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLCBw
dWJsaWMgRnJvbnRlbmRDaGFubmVsIHsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JTdHViRnJvbnRl
bmQoUGFnZSogaW5zcGVjdGVkUGFnZSwgUmVmUHRyPERPTVdpbmRvdz4mJiBmcm9udGVuZFdpbmRv
dyk7CisgICAgSW5zcGVjdG9yU3R1YkZyb250ZW5kKFBhZ2UmIGluc3BlY3RlZFBhZ2UsIFJlZlB0
cjxET01XaW5kb3c+JiYgZnJvbnRlbmRXaW5kb3cpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0
dWJGcm9udGVuZCgpOwogCiAgICAgLy8gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgQVBJCkBAIC0y
NzQsMTYgKzI3NCwxNSBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckNvbnRyb2xsZXImIG1fZnJv
bnRlbmRDb250cm9sbGVyOwogfTsKIAotSW5zcGVjdG9yU3R1YkZyb250ZW5kOjpJbnNwZWN0b3JT
dHViRnJvbnRlbmQoUGFnZSogaW5zcGVjdGVkUGFnZSwgUmVmUHRyPERPTVdpbmRvdz4mJiBmcm9u
dGVuZFdpbmRvdykKLSAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoJmluc3BlY3Rl
ZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgZnJvbnRlbmRXaW5kb3ctPmRvY3VtZW50KCkt
PnBhZ2UoKSwgc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpT
ZXR0aW5ncz4oKSkKK0luc3BlY3RvclN0dWJGcm9udGVuZDo6SW5zcGVjdG9yU3R1YkZyb250ZW5k
KFBhZ2UmIGluc3BlY3RlZFBhZ2UsIFJlZlB0cjxET01XaW5kb3c+JiYgZnJvbnRlbmRXaW5kb3cp
CisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCZpbnNwZWN0ZWRQYWdlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSwgZnJvbnRlbmRXaW5kb3ctPmRvY3VtZW50KCktPnBhZ2UoKSwgc3Rk
OjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpTZXR0aW5ncz4oKSkK
ICAgICAsIG1fZnJvbnRlbmRXaW5kb3coZnJvbnRlbmRXaW5kb3cuY29weVJlZigpKQogICAgICwg
bV9mcm9udGVuZENvbnRyb2xsZXIoZnJvbnRlbmRQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KSkKIHsKLSAgICBBU1NFUlRfQVJHKGluc3BlY3RlZFBhZ2UsIGluc3BlY3RlZFBhZ2UpOwogICAg
IEFTU0VSVF9BUkcoZnJvbnRlbmRXaW5kb3csIGZyb250ZW5kV2luZG93KTsKIAogICAgIG1fZnJv
bnRlbmRDb250cm9sbGVyLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KHRoaXMpOwotICAgIGlu
c3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQodGhpcyk7
CisgICAgaW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5k
KHRoaXMpOwogfQogCiBJbnNwZWN0b3JTdHViRnJvbnRlbmQ6On5JbnNwZWN0b3JTdHViRnJvbnRl
bmQoKQpAQCAtMzU4LDcgKzM1Nyw3IEBAIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShjb25z
dCBTdHJpbmcmIG1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlCiAKIGNvbnN0
IGNoYXIqIEludGVybmFsczo6aW50ZXJuYWxzSWQgPSAiaW50ZXJuYWxzIjsKIAotUmVmPEludGVy
bmFscz4gSW50ZXJuYWxzOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmPEludGVybmFs
cz4gSW50ZXJuYWxzOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEludGVybmFscyhkb2N1bWVudCkpOwogfQpAQCAtMzY3LDIzICszNjYsMjEg
QEAgSW50ZXJuYWxzOjp+SW50ZXJuYWxzKCkKIHsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoUGFnZSogcGFnZSkKK3ZvaWQgSW50ZXJuYWxzOjpyZXNldFRvQ29u
c2lzdGVudFN0YXRlKFBhZ2UmIHBhZ2UpCiB7Ci0gICAgQVNTRVJUKHBhZ2UpOwotCi0gICAgcGFn
ZS0+c2V0UGFnZVNjYWxlRmFjdG9yKDEsIEludFBvaW50KDAsIDApKTsKLSAgICBwYWdlLT5zZXRQ
YWdpbmF0aW9uKFBhZ2luYXRpb24oKSk7Ci0gICAgcGFnZS0+c2V0UGFnaW5hdGlvbkxpbmVHcmlk
RW5hYmxlZChmYWxzZSk7CisgICAgcGFnZS5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgSW50UG9pbnQo
MCwgMCkpOworICAgIHBhZ2Uuc2V0UGFnaW5hdGlvbihQYWdpbmF0aW9uKCkpOworICAgIHBhZ2Uu
c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChmYWxzZSk7CiAKLSAgICBwYWdlLT5zZXREZWZl
cnNMb2FkaW5nKGZhbHNlKTsKKyAgICBwYWdlLnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwogICAg
IAotICAgIHBhZ2UtPm1haW5GcmFtZSgpLnNldFRleHRab29tRmFjdG9yKDEuMGYpOworICAgIHBh
Z2UubWFpbkZyYW1lKCkuc2V0VGV4dFpvb21GYWN0b3IoMS4wZik7CiAgICAgCi0gICAgRnJhbWVW
aWV3KiBtYWluRnJhbWVWaWV3ID0gcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIEZyYW1l
VmlldyogbWFpbkZyYW1lVmlldyA9IHBhZ2UubWFpbkZyYW1lKCkudmlldygpOwogICAgIGlmICht
YWluRnJhbWVWaWV3KSB7CiAgICAgICAgIG1haW5GcmFtZVZpZXctPnNldEhlYWRlckhlaWdodCgw
KTsKICAgICAgICAgbWFpbkZyYW1lVmlldy0+c2V0Rm9vdGVySGVpZ2h0KDApOwotICAgICAgICBw
YWdlLT5zZXRUb3BDb250ZW50SW5zZXQoMCk7CisgICAgICAgIHBhZ2Uuc2V0VG9wQ29udGVudElu
c2V0KDApOwogICAgICAgICBtYWluRnJhbWVWaWV3LT5zZXRVc2VGaXhlZExheW91dChmYWxzZSk7
CiAgICAgICAgIG1haW5GcmFtZVZpZXctPnNldEZpeGVkTGF5b3V0U2l6ZShJbnRTaXplKCkpOwog
ICAgIH0KQEAgLTM5MSwxNiArMzg4LDE2IEBAIHZvaWQgSW50ZXJuYWxzOjpyZXNldFRvQ29uc2lz
dGVudFN0YXRlKFBhZ2UqIHBhZ2UpCiAgICAgV2ViQ29yZTo6b3ZlcnJpZGVVc2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKFZlY3RvcjxTdHJpbmc+KCkpOwogICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRV
c2VzT3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpOwogICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRV
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKGZhbHNlKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuc2V0TGVnYWN5UHJvZmlsZXJFbmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5zZXRMZWdhY3lQcm9maWxlckVuYWJsZWQoZmFsc2UpOwogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSAgICBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNl
dENhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKGVtcHR5U3RyaW5nKCkpOwotICAgIHBhZ2UtPmdy
b3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0VGVzdGluZ01vZGUoZmFsc2UpOwotI2VuZGlm
Ci0gICAgaWYgKCFwYWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS50b2dn
bGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOwotICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS5l
ZGl0b3IoKS5pc092ZXJ3cml0ZU1vZGVFbmFibGVkKCkpCi0gICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLmVkaXRvcigpLnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7Ci0gICAgcGFnZS0+bWFp
bkZyYW1lKCkubG9hZGVyKCkuY2xlYXJUZXN0aW5nT3ZlcnJpZGVzKCk7CisgICAgcGFnZS5ncm91
cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldENhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKGVt
cHR5U3RyaW5nKCkpOworICAgIHBhZ2UuZ3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5zZXRU
ZXN0aW5nTW9kZShmYWxzZSk7CisjZW5kaWYKKyAgICBpZiAoIXBhZ2UubWFpbkZyYW1lKCkuZWRp
dG9yKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcGFnZS5t
YWluRnJhbWUoKS5lZGl0b3IoKS50b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2luZygpOworICAg
IGlmIChwYWdlLm1haW5GcmFtZSgpLmVkaXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkK
KyAgICAgICAgcGFnZS5tYWluRnJhbWUoKS5lZGl0b3IoKS50b2dnbGVPdmVyd3JpdGVNb2RlRW5h
YmxlZCgpOworICAgIHBhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkuY2xlYXJUZXN0aW5nT3ZlcnJp
ZGVzKCk7CiAgICAgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNpbmdsZXRvbigpLnNldERlZmF1
bHRPcmlnaW5RdW90YShBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpKTsKICNpZiBF
TkFCTEUoVklERU8pCiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkucmVzZXRSZXN0cmljdGlvbnMoKTsKQEAgLTQxNywxOSArNDE0LDE5IEBAIHZvaWQgSW50
ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UqIHBhZ2UpCiAgICAgTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5nczo6cmVzZXQoKTsKICNlbmRpZgogCi0gICAgcGFnZS0+c2V0U2hvd0Fs
bFBsdWdpbnMoZmFsc2UpOworICAgIHBhZ2Uuc2V0U2hvd0FsbFBsdWdpbnMoZmFsc2UpOwogICAg
IAogI2lmIFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTAwMDAwCiAgICAgX0FYU1NldEZvcmNlQWxsb3dXZWJTY2FsaW5nKGZhbHNlKTsKICNlbmRp
ZgogfQogCi1JbnRlcm5hbHM6OkludGVybmFscyhEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihkb2N1bWVudCkKK0ludGVybmFsczo6SW50ZXJuYWxz
KERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKCZk
b2N1bWVudCkKIHsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKGRvY3VtZW50ICYm
IGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuY2Fw
dGlvblByZWZlcmVuY2VzKCkuc2V0VGVzdGluZ01vZGUodHJ1ZSk7CisgICAgaWYgKGRvY3VtZW50
LnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJl
bmNlcygpLnNldFRlc3RpbmdNb2RlKHRydWUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQpAQCAtNDQyLDggKzQzOSw4IEBAIEludGVybmFsczo6SW50ZXJuYWxzKERvY3VtZW50
KiBkb2N1bWVudCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKLSAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgZG9jdW1l
bnQtPnBhZ2UoKS0+c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKHRydWUp
OworICAgIGlmIChkb2N1bWVudC5wYWdlKCkpCisgICAgICAgIGRvY3VtZW50LnBhZ2UoKS0+c2V0
TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKHRydWUpOwogI2VuZGlmCiB9CiAK
QEAgLTQ2MywxMCArNDYwLDEwIEBAIEludGVybmFsU2V0dGluZ3MqIEludGVybmFsczo6c2V0dGlu
Z3MoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBh
Z2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gSW50ZXJuYWxTZXR0aW5nczo6ZnJvbShwYWdlKTsKIH0KIApAQCAtNDc1LDE5ICs0NzIsMTQg
QEAgdW5zaWduZWQgSW50ZXJuYWxzOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0CiAgICAgcmV0
dXJuIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKIH0KIAotU3RyaW5nIEludGVy
bmFsczo6YWRkcmVzcyhOb2RlKiBub2RlKQorU3RyaW5nIEludGVybmFsczo6YWRkcmVzcyhOb2Rl
JiBub2RlKQogewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAiLCBub2RlKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwIiwgJm5vZGUpOwogfQogCi1ib29sIEludGVybmFsczo6
bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9u
KQorYm9vbCBJbnRlcm5hbHM6Om5vZGVOZWVkc1N0eWxlUmVjYWxjKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBub2RlLT5uZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgcmV0dXJuIG5vZGUubmVlZHNTdHlsZVJlY2FsYygpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKFN0eWxlQ2hhbmdlVHlwZSB0eXBl
KQpAQCAtNTA4LDE0ICs1MDAsOSBAQCBzdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3Ry
aW5nKFN0eWxlQ2hhbmdlVHlwZSB0eXBlKQogICAgIHJldHVybiAiIjsKIH0KIAotU3RyaW5nIElu
dGVybmFsczo6c3R5bGVDaGFuZ2VUeXBlKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGV4Y2Vw
dGlvbikKK1N0cmluZyBJbnRlcm5hbHM6OnN0eWxlQ2hhbmdlVHlwZShOb2RlJiBub2RlKQogewot
ICAgIGlmICghbm9kZSkgewotICAgICAgICBleGNlcHRpb24gPSBJTlZBTElEX0FDQ0VTU19FUlI7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlQ2hhbmdlVHlw
ZVRvU3RyaW5nKG5vZGUtPnN0eWxlQ2hhbmdlVHlwZSgpKTsKKyAgICByZXR1cm4gc3R5bGVDaGFu
Z2VUeXBlVG9TdHJpbmcobm9kZS5zdHlsZUNoYW5nZVR5cGUoKSk7CiB9CiAKIFN0cmluZyBJbnRl
cm5hbHM6OmRlc2NyaXB0aW9uKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlKQpAQCAtNTQy
LDEzICs1MjksMTEgQEAgYm9vbCBJbnRlcm5hbHM6OmlzTG9hZGluZ0Zyb21NZW1vcnlDYWNoZShj
b25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0YXR1
cygpID09IENhY2hlZFJlc291cmNlOjpDYWNoZWQ7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6Onho
clJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0KiB4aHIpCitTdHJpbmcgSW50ZXJuYWxzOjp4
aHJSZXNwb25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBpZiAoIXho
cikKLSAgICAgICAgcmV0dXJuICJOdWxsIHhociI7Ci0gICAgaWYgKHhoci0+cmVzb3VyY2VSZXNw
b25zZSgpLmlzTnVsbCgpKQorICAgIGlmIChyZXF1ZXN0LnJlc291cmNlUmVzcG9uc2UoKS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuICJOdWxsIHJlc3BvbnNlIjsKLSAgICBzd2l0Y2ggKHhoci0+
cmVzb3VyY2VSZXNwb25zZSgpLnNvdXJjZSgpKSB7CisgICAgc3dpdGNoIChyZXF1ZXN0LnJlc291
cmNlUmVzcG9uc2UoKS5zb3VyY2UoKSkgewogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlOjpVbmtub3duOgogICAgICAgICByZXR1cm4gIlVua25vd24iOwogICAgIGNhc2UgUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOgpAQCAtNTY2LDIzICs1NTEsMTYgQEAgU3RyaW5n
IEludGVybmFsczo6eGhyUmVzcG9uc2VTb3VyY2UoWE1MSHR0cFJlcXVlc3QqIHhocikKICAgICBy
ZXR1cm4gIkVycm9yIjsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OmlzU2hhcmluZ1N0eWxlU2hlZXRD
b250ZW50cyhFbGVtZW50KiBhLCBFbGVtZW50KiBiKQorYm9vbCBJbnRlcm5hbHM6OmlzU2hhcmlu
Z1N0eWxlU2hlZXRDb250ZW50cyhIVE1MTGlua0VsZW1lbnQmIGEsIEhUTUxMaW5rRWxlbWVudCYg
YikKIHsKLSAgICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4oYSkgfHwgIWlzPEhUTUxMaW5rRWxl
bWVudD4oYikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvJiBhTGluayA9IGRvd25j
YXN0PEhUTUxMaW5rRWxlbWVudD4oKmEpOwotICAgIGF1dG8mIGJMaW5rID0gZG93bmNhc3Q8SFRN
TExpbmtFbGVtZW50PigqYik7Ci0gICAgaWYgKCFhTGluay5zaGVldCgpIHx8ICFiTGluay5zaGVl
dCgpKQorICAgIGlmICghYS5zaGVldCgpIHx8ICFiLnNoZWV0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gJmFMaW5rLnNoZWV0KCktPmNvbnRlbnRzKCkgPT0gJmJMaW5rLnNo
ZWV0KCktPmNvbnRlbnRzKCk7CisgICAgcmV0dXJuICZhLnNoZWV0KCktPmNvbnRlbnRzKCkgPT0g
JmIuc2hlZXQoKS0+Y29udGVudHMoKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OmlzU3R5bGVTaGVl
dExvYWRpbmdTdWJyZXNvdXJjZXMoRWxlbWVudCogbGluaykKK2Jvb2wgSW50ZXJuYWxzOjppc1N0
eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEhUTUxMaW5rRWxlbWVudCYgbGluaykKIHsKLSAg
ICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4obGluaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBhdXRvJiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmxpbmsp
OwotICAgIHJldHVybiBsaW5rRWxlbWVudC5zaGVldCgpICYmIGxpbmtFbGVtZW50LnNoZWV0KCkt
PmNvbnRlbnRzKCkuaXNMb2FkaW5nU3VicmVzb3VyY2VzKCk7CisgICAgcmV0dXJuIGxpbmsuc2hl
ZXQoKSAmJiBsaW5rLnNoZWV0KCktPmNvbnRlbnRzKCkuaXNMb2FkaW5nU3VicmVzb3VyY2VzKCk7
CiB9CiAKIHN0YXRpYyBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBzdHJpbmdUb1Jlc291cmNl
UmVxdWVzdENhY2hlUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5KQpAQCAtNjU2LDE0ICs2MzQs
OSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Om1lbW9yeUNhY2hlU2l6ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5zaXplKCk7CiB9CiAKLXNpemVfdCBJbnRlcm5h
bHM6OmltYWdlRnJhbWVJbmRleChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykK
K3Vuc2lnbmVkIEludGVybmFsczo6aW1hZ2VGcmFtZUluZGV4KEhUTUxJbWFnZUVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYXV0
byogY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICBhdXRvKiBjYWNoZWRJbWFnZSA9IGVsZW1lbnQuY2FjaGVkSW1hZ2Uo
KTsKICAgICBpZiAoIWNhY2hlZEltYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjgxLDIz
ICs2NTQsMTQgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpwYWdlQ2FjaGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wYWdlQ291bnQoKTsKIH0KIAotTm9kZSog
SW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZShOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKK05vZGUqIEludGVybmFsczo6dHJlZVNjb3BlUm9vdE5vZGUoTm9kZSYgbm9kZSkKIHsKLSAg
ICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiAmbm9kZS0+dHJlZVNjb3BlKCku
cm9vdE5vZGUoKTsKKyAgICByZXR1cm4gJm5vZGUudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKIH0K
IAotTm9kZSogSW50ZXJuYWxzOjpwYXJlbnRUcmVlU2NvcGUoTm9kZSogbm9kZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCitOb2RlKiBJbnRlcm5hbHM6OnBhcmVudFRyZWVTY29wZShOb2RlJiBub2RlKQog
ewotICAgIGlmICghbm9kZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGNvbnN0IFRyZWVTY29wZSogcGFyZW50
VHJlZVNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCkucGFyZW50VHJlZVNjb3BlKCk7CisgICAgY29u
c3QgVHJlZVNjb3BlKiBwYXJlbnRUcmVlU2NvcGUgPSBub2RlLnRyZWVTY29wZSgpLnBhcmVudFRy
ZWVTY29wZSgpOwogICAgIHJldHVybiBwYXJlbnRUcmVlU2NvcGUgPyAmcGFyZW50VHJlZVNjb3Bl
LT5yb290Tm9kZSgpIDogbnVsbHB0cjsKIH0KIApAQCAtNzQ5LDE4ICs3MTMsMTggQEAgdm9pZCBJ
bnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAg
ZG9jdW1lbnQtPmZyYW1lKCktPmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKIH0KIAot
Ym9vbCBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmlu
ZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCogZWxlbWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVt
ZW50JiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
cGF1c2VUaW1lIDwgMCkgeworICAgIGlmIChwYXVzZVRpbWUgPCAwKSB7CiAgICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJl
dHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LT5y
ZW5kZXJlcigpLCBBdG9taWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CisgICAg
cmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQu
cmVuZGVyZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwogfQog
Ci1ib29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkLCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgSW50
ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVu
dCB8fCBwYXVzZVRpbWUgPCAwKSB7CisgICAgaWYgKHBhdXNlVGltZSA8IDApIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC03NzAsNyArNzM0LDcgQEAgYm9vbCBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Q
c2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1
ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1l
bnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOworICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1l
bnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgp
IDogZWxlbWVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnQp
IHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTc3OSwxOCArNzQzLDE4IEBAIGJvb2wgSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCiAgICAgcmV0
dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKHBzZXVkb0VsZW1l
bnQtPnJlbmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsK
IH0KIAotYm9vbCBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCogZWxlbWVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1l
LCBFbGVtZW50JiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1l
bnQgfHwgcGF1c2VUaW1lIDwgMCkgeworICAgIGlmIChwYXVzZVRpbWUgPCAwKSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxl
bWVudC0+cmVuZGVyZXIoKSwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOworICAgIHJldHVybiBm
cmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudC5yZW5kZXJl
cigpLCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxzOjpwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwg
ZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9J
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRp
bWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIGlmICghZWxlbWVudCB8fCBwYXVzZVRpbWUgPCAwKSB7CisgICAgaWYg
KHBhdXNlVGltZSA8IDApIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC04MDAsNyArNzY0LDcgQEAgYm9vbCBJbnRlcm5h
bHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHBy
b3BlcnR5LCBkb3UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFBzZXVkb0Vs
ZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQtPmJl
Zm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOworICAg
IFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVs
ZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRlclBzZXVkb0VsZW1lbnQo
KTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgwOSwyNyArNzczLDExIEBAIGJvb2wg
SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eSwgZG91CiAgICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNl
VHJhbnNpdGlvbkF0VGltZShwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpLCBwcm9wZXJ0eSwgcGF1
c2VUaW1lKTsKIH0KIAotLy8gRklYTUU6IFJlbW92ZS4KLWJvb2wgSW50ZXJuYWxzOjphdHRhY2hl
ZChOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIW5vZGUpIHsKLSAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIEludGVybmFsczo6ZWxlbWVudFJl
bmRlclRyZWVBc1RleHQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJp
bmcgSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiBlbGVtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9CisgICAg
ZWxlbWVudC5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotICAgIGVsZW1lbnQt
PmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgU3RyaW5nIHJlcHJlc2Vu
dGF0aW9uID0gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihlbGVtZW50KTsKKyAgICBTdHJpbmcgcmVw
cmVzZW50YXRpb24gPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKCZlbGVtZW50KTsKICAgICBpZiAo
cmVwcmVzZW50YXRpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC04MzgsNzQgKzc4Niw0OCBAQCBTdHJp
bmcgSW50ZXJuYWxzOjplbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50KiBlbGVtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gcmVwcmVzZW50YXRpb247CiB9CiAKLWJvb2wg
SW50ZXJuYWxzOjpoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVudCogZWxlbWVudCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6aGFzUGF1c2VkSW1hZ2VBbmltYXRpb25z
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiBlbGVtZW50LT5yZW5kZXJlcigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCktPmhhc1BhdXNl
ZEltYWdlQW5pbWF0aW9ucygpOworICAgIHJldHVybiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgZWxl
bWVudC5yZW5kZXJlcigpLT5oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoKTsKIH0KIAotUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21wdXRlZFN0eWxlSW5j
bHVkaW5nVmlzaXRlZEluZm8oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBJbnRlcm5hbHM6OmNvbXB1dGVkU3R5
bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhOb2RlJiBub2RlKSBjb25zdAogewotICAgIGlmICghbm9k
ZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCiAgICAgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSA9IHRydWU7Ci0gICAg
cmV0dXJuIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG5vZGUsIGFsbG93Vmlz
aXRlZFN0eWxlKTsKKyAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoJm5vZGUsIGFsbG93VmlzaXRlZFN0eWxlKTsKIH0KIAotTm9kZSogSW50ZXJuYWxzOjplbnN1
cmVTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSogSW50
ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSBob3N0LT5zaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qg
PSBob3N0LnNoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Q7CiAKLSAgICBy
ZXR1cm4gaG9zdC0+Y3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CisgICAgcmV0dXJuIGhvc3Qu
Y3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CiB9CiAKLU5vZGUqIEludGVybmFsczo6ZW5zdXJl
VXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKK05v
ZGUqIEludGVybmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50JiBob3N0KQog
ewotICAgIGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiAmaG9zdC0+ZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdCgpOworICAgIHJldHVybiAmaG9zdC5lbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KCk7CiB9CiAKLU5vZGUqIEludGVybmFsczo6Y3JlYXRlU2hhZG93Um9vdChFbGVtZW50
KiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKK05vZGUqIEludGVybmFsczo6Y3JlYXRlU2hhZG93
Um9vdChFbGVtZW50JiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWhvc3Qp
IHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICByZXR1cm4gaG9zdC0+Y3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CisgICAg
cmV0dXJuIGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CiB9CiAKLU5vZGUqIEludGVy
bmFsczo6c2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKK05vZGUq
IEludGVybmFsczo6c2hhZG93Um9vdChFbGVtZW50JiBob3N0KQogewotICAgIGlmICghaG9zdCkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIHJldHVybiBob3N0LT5zaGFkb3dSb290KCk7CisgICAgcmV0dXJuIGhv
c3Quc2hhZG93Um9vdCgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpzaGFkb3dSb290VHlwZShj
b25zdCBOb2RlKiByb290LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1N0cmluZyBJbnRlcm5h
bHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUmIHJvb3QsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogewogICAgIGlmICghaXM8U2hhZG93Um9vdD4ocm9vdCkpIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBzd2l0Y2ggKGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpyb290KS50eXBlKCkpIHsKKyAgICBzd2l0
Y2ggKGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHJvb3QpLnR5cGUoKSkgewogICAgIGNhc2UgU2hhZG93
Um9vdDo6VHlwZTo6VXNlckFnZW50OgogICAgICAgICByZXR1cm4gU3RyaW5nKCJVc2VyQWdlbnRT
aGFkb3dSb290Iik7CiAgICAgY2FzZSBTaGFkb3dSb290OjpUeXBlOjpDbG9zZWQ6CkBAIC05MTgs
MzAgKzg0MCwxNCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpzaGFkb3dSb290VHlwZShjb25zdCBOb2Rl
KiByb290LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICB9CiB9CiAKLUVsZW1lbnQqIElu
dGVybmFsczo6aW5jbHVkZXJGb3IoTm9kZSosIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIElu
dGVybmFsczo6c2hhZG93UHNldWRvSWQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBlYyA9IElO
VkFMSURfQUNDRVNTX0VSUjsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotU3RyaW5nIEludGVy
bmFsczo6c2hhZG93UHNldWRvSWQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnQt
PnNoYWRvd1BzZXVkb0lkKCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIGVsZW1lbnQuc2hhZG93UHNl
dWRvSWQoKS5zdHJpbmcoKTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OnNldFNoYWRvd1BzZXVkb0lk
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dm9pZCBJbnRlcm5hbHM6OnNldFNoYWRvd1BzZXVkb0lkKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgaWQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1l
bnQtPnNldFBzZXVkbyhpZCk7CisgICAgcmV0dXJuIGVsZW1lbnQuc2V0UHNldWRvKGlkKTsKIH0K
IAogYm9vbCBJbnRlcm5hbHM6OmlzVGltZXJUaHJvdHRsZWQoaW50IHRpbWVvdXRJZCwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC05NzEsMTAgKzg3NywxMCBAQCBib29sIEludGVybmFsczo6YXJlVGlt
ZXJzVGhyb3R0bGVkKCkgY29uc3QKICAgICByZXR1cm4gY29udGV4dERvY3VtZW50KCktPmlzVGlt
ZXJUaHJvdHRsaW5nRW5hYmxlZCgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjp2aXNpYmxlUGxh
Y2Vob2xkZXIoRWxlbWVudCogZWxlbWVudCkKK1N0cmluZyBJbnRlcm5hbHM6OnZpc2libGVQbGFj
ZWhvbGRlcihFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChpczxIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudD4oZWxlbWVudCkpIHsKLSAgICAgICAgY29uc3QgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQmIHRleHRGb3JtQ29udHJvbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudD4oKmVsZW1lbnQpOworICAgICAgICBjb25zdCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCYgdGV4dEZvcm1Db250cm9sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgaWYgKCF0ZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmlzUGxhY2Vob2xkZXJWaXNpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAgICAgICAgIGlmIChIVE1MRWxlbWVudCogcGxhY2Vob2xkZXJFbGVtZW50ID0gdGV4dEZv
cm1Db250cm9sRWxlbWVudC5wbGFjZWhvbGRlckVsZW1lbnQoKSkKQEAgLTk4NCwxMiArODkwLDkg
QEAgU3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6c2VsZWN0Q29sb3JJ
bkNvbG9yQ2hvb3NlcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUp
Cit2b2lkIEludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihIVE1MSW5wdXRFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUpCiB7Ci0gICAgaWYgKCFpczxI
VE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIGlu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KTsKLSAgICBp
bnB1dEVsZW1lbnQuc2VsZWN0Q29sb3IoQ29sb3IoY29sb3JWYWx1ZSkpOworICAgIGVsZW1lbnQu
c2VsZWN0Q29sb3IoQ29sb3IoY29sb3JWYWx1ZSkpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBJbnRl
cm5hbHM6OmZvcm1Db250cm9sU3RhdGVPZlByZXZpb3VzSGlzdG9yeUl0ZW0oRXhjZXB0aW9uQ29k
ZSYgZWMpCkBAIC0xMDY3LDE1ICs5NzAsMTAgQEAgUmVmPENsaWVudFJlY3Q+IEludGVybmFsczo6
YWJzb2x1dGVDYXJldEJvdW5kcyhFeGNlcHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gQ2xpZW50
UmVjdDo6Y3JlYXRlKGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0
Qm91bmRzKCkpOwogfQogCi1SZWY8Q2xpZW50UmVjdD4gSW50ZXJuYWxzOjpib3VuZGluZ0JveChF
bGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlZjxDbGllbnRSZWN0PiBJbnRl
cm5hbHM6OmJvdW5kaW5nQm94KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gQ2xp
ZW50UmVjdDo6Y3JlYXRlKCk7Ci0gICAgfQotCi0gICAgZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBhdXRvIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQu
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gQ2xpZW50UmVj
dDo6Y3JlYXRlKCk7CiAgICAgcmV0dXJuIENsaWVudFJlY3Q6OmNyZWF0ZShyZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSk7CkBAIC0xMTA1LDMxICsx
MDAzLDIxIEBAIFN0cmluZyBJbnRlcm5hbHM6Omluc3BlY3RvckhpZ2hsaWdodE9iamVjdChFeGNl
cHRpb25Db2RlJiBlYykKICAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmJ1aWxkT2JqZWN0Rm9ySGlnaGxpZ2h0ZWROb2RlcygpLT50b0pTT05TdHJpbmco
KTsKIH0KIAotdW5zaWduZWQgSW50ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2lnbmVk
IEludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYg
bWFya2VyVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAg
ICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
ICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMgPSAwOwogICAgIGlm
ICghbWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUsIG1hcmtlclR5cGVzKSkgewogICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgp
OwotCi0gICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9k
ZSwgbWFya2VyVHlwZXMpLnNpemUoKTsKKyAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRp
dG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOworICAgIHJldHVybiBub2RlLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7
CiB9CiAKLVJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCitSZW5kZXJlZERvY3VtZW50TWFya2VyKiBJbnRlcm5hbHM6Om1hcmtlckF0KE5v
ZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgbm9k
ZS5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAg
ICAgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzID0gMDsKICAgICBpZiAo
IW1hcmtlclR5cGVzRnJvbShtYXJrZXJUeXBlLCBtYXJrZXJUeXBlcykpIHsKQEAgLTExMzcsMjMg
KzEwMjUsMjMgQEAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogSW50ZXJuYWxzOjptYXJrZXJBdChO
b2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRh
dGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CisgICAgbm9kZS5kb2N1bWVudCgpLmZyYW1lKCkt
PmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKIAotICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUtPmRvY3VtZW50KCkubWFya2Vy
cygpLm1hcmtlcnNGb3Iobm9kZSwgbWFya2VyVHlwZXMpOworICAgIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcigmbm9kZSwgbWFya2VyVHlwZXMpOwogICAgIGlmIChtYXJrZXJzLnNpemUoKSA8PSBpbmRl
eCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1hcmtlcnNbaW5kZXhdOwog
fQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqIG5v
ZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6Om1hcmtlclJhbmdlRm9yTm9kZShOb2Rl
JiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJr
ZXJBdChub2RlLCBtYXJrZXJUeXBlLCBpbmRleCwgZWMpOwogICAgIGlmICghbWFya2VyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1
bWVudCgpLCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zm
c2V0KCkpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSwgJm5vZGUs
IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgJm5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwogfQog
Ci1TdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSogbm9kZSwg
Y29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitTdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSYgbm9k
ZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2VyQXQo
bm9kZSwgbWFya2VyVHlwZSwgaW5kZXgsIGVjKTsKICAgICBpZiAoIW1hcmtlcikKQEAgLTExODgs
MTAgKzEwNzYsMTAgQEAgU3RyaW5nIEludGVybmFsczo6ZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0
cmluZyYgbWFya2VyVHlwZVN0cmluZywgRXhjZXB0aW9uQ29kZSYKICAgICByZXR1cm4gcmVjdFN0
cmluZy50b1N0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2Vy
KGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKK3ZvaWQgSW50ZXJuYWxzOjphZGRU
ZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGlzQWN0aXZlKQogewotICAg
IHJhbmdlLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1hdGNo
TWFya2VyKHJhbmdlLCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdlLm93bmVyRG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1hdGNoTWFya2VyKCZyYW5nZSwgaXNBY3RpdmUpOwogfQog
CiB2b2lkIEludGVybmFsczo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29s
IGZsYWcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIwOSw3ICsxMDk3LDcgQEAgdm9pZCBJbnRl
cm5hbHM6OmludmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEludGVybmFsczo6c2V0U2Nyb2xsVmlld1Bvc2l0aW9u
KGxvbmcgeCwgbG9uZyB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxzOjpzZXRT
Y3JvbGxWaWV3UG9zaXRpb24oaW50IHgsIGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3Vt
ZW50IHx8ICFkb2N1bWVudC0+dmlldygpKSB7CkBAIC0xMjIzLDcgKzExMTEsNyBAQCB2b2lkIElu
dGVybmFsczo6c2V0U2Nyb2xsVmlld1Bvc2l0aW9uKGxvbmcgeCwgbG9uZyB5LCBFeGNlcHRpb25D
b2RlJiBlYykKIAogICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOwogICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoZmFs
c2UpOwotICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUludGVybmFscyhJbnRQb2lu
dCh4LCB5KSk7CisgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzKHsg
eCwgeSB9KTsKICAgICBmcmFtZVZpZXctPnNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKHNjcm9sbGJh
cnNTdXBwcmVzc2VkT2xkVmFsdWUpOwogICAgIGZyYW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2VPbGRWYWx1
ZSk7CiB9CkBAIC0xMjk5LDY2ICsxMTg3LDMxIEBAIFN0cmluZyBJbnRlcm5hbHM6OmNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChmbG9hdCBkZXZpY2VQaXhlbFJhdGlvLCBpbnQgZGV2aWNlV2lkCiAg
ICAgcmV0dXJuICJ2aWV3cG9ydCBzaXplICIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLmxh
eW91dFNpemUud2lkdGgoKSkgKyAieCIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLmxheW91
dFNpemUuaGVpZ2h0KCkpICsgIiBzY2FsZSAiICsgU3RyaW5nOjpudW1iZXIoYXR0cmlidXRlcy5p
bml0aWFsU2NhbGUpICsgIiB3aXRoIGxpbWl0cyBbIiArIFN0cmluZzo6bnVtYmVyKGF0dHJpYnV0
ZXMubWluaW11bVNjYWxlKSArICIsICIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLm1heGlt
dW1TY2FsZSkgKyAiXSBhbmQgdXNlclNjYWxhYmxlICIgKyAoYXR0cmlidXRlcy51c2VyU2NhbGFi
bGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6Ondhc0xhc3RDaGFu
Z2VVc2VyRWRpdChFbGVtZW50KiB0ZXh0RmllbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJ
bnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdChFbGVtZW50JiB0ZXh0RmllbGQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGlmICghdGV4dEZpZWxkKSB7Ci0gICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0RmllbGQpKQotICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKnRleHRGaWVsZCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7
CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRGaWVsZCkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pih0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2Vy
RWRpdCgpOwogCi0gICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpKQot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKnRleHRGaWVsZCku
bGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CisgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KHRleHRGaWVsZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
Pih0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElE
X05PREVfVFlQRV9FUlI7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEludGVybmFsczo6
ZWxlbWVudFNob3VsZEF1dG9Db21wbGV0ZShFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKK2Jvb2wgSW50ZXJuYWxzOjplbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKEhUTUxJbnB1
dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX05PREVfVFlQRV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNob3VsZEF1dG9jb21w
bGV0ZSgpOworICAgIHJldHVybiBlbGVtZW50LnNob3VsZEF1dG9jb21wbGV0ZSgpOwogfQogCi12
b2lkIEludGVybmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldEVkaXRp
bmdWYWx1ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4o
KmVsZW1lbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1l
bnQpLnNldEVkaXRpbmdWYWx1ZSh2YWx1ZSk7CisgICAgZWxlbWVudC5zZXRFZGl0aW5nVmFsdWUo
dmFsdWUpOwogfQogCi12b2lkIEludGVybmFsczo6c2V0QXV0b2ZpbGxlZChFbGVtZW50KiBlbGVt
ZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNl
dEF1dG9maWxsZWQoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGVkKQogewot
ICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVs
ZW1lbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQp
LnNldEF1dG9GaWxsZWQoZW5hYmxlZCk7CisgICAgZWxlbWVudC5zZXRBdXRvRmlsbGVkKGVuYWJs
ZWQpOwogfQogCiBzdGF0aWMgQXV0b0ZpbGxCdXR0b25UeXBlIHN0cmluZ1RvQXV0b0ZpbGxCdXR0
b25UeXBlKGNvbnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAtMTM3Myw0NSArMTIy
NiwzMCBAQCBzdGF0aWMgQXV0b0ZpbGxCdXR0b25UeXBlIHN0cmluZ1RvQXV0b0ZpbGxCdXR0b25U
eXBlKGNvbnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0bwogICAgIHJldHVybiBBdXRvRmlsbEJ1dHRv
blR5cGU6Ok5vbmU7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRTaG93QXV0b0ZpbGxCdXR0b24o
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdXRvRmlsbEJ1dHRvblR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldFNob3dBdXRvRmlsbEJ1dHRvbihIVE1M
SW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGF1dG9GaWxsQnV0dG9uVHlwZSkK
IHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KSkgewotICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVt
ZW50KS5zZXRTaG93QXV0b0ZpbGxCdXR0b24oc3RyaW5nVG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0
b0ZpbGxCdXR0b25UeXBlKSk7CisgICAgZWxlbWVudC5zZXRTaG93QXV0b0ZpbGxCdXR0b24oc3Ry
aW5nVG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0b0ZpbGxCdXR0b25UeXBlKSk7CiB9CiAKIAotdm9p
ZCBJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCogZWxlbWVudCwgbG9uZyB4
LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJu
YWxzOjpzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQmIGVsZW1lbnQsIGludCB4LCBpbnQgeSwg
aW50IHcsIGludCBoLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
IWVsZW1lbnQtPmRvY3VtZW50KCkudmlldygpKSB7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBlbGVtZW50LmRvY3VtZW50KCkudmlldygpOworICAgIGlmICghZnJhbWVWaWV3KSB7CiAgICAg
ICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAg
ZnJhbWVWaWV3LT5zY3JvbGxFbGVtZW50VG9SZWN0KCplbGVtZW50LCBJbnRSZWN0KHgsIHksIHcs
IGgpKTsKKyAgICBmcmFtZVZpZXctPnNjcm9sbEVsZW1lbnRUb1JlY3QoZWxlbWVudCwgeyB4LCB5
LCB3LCBoIH0pOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjphdXRvZmlsbEZpZWxkTmFtZShFbGVt
ZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5hbHM6OmF1dG9m
aWxsRmllbGROYW1lKEVsZW1lbnQmIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50KSkgeworICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxl
bWVudCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KCplbGVtZW50KS5hdXRvZmlsbERhdGEoKS5maWVsZE5hbWU7CisgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpLmF1dG9maWxsRGF0YSgpLmZp
ZWxkTmFtZTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6OnBhaW50Q29udHJvbFRpbnRzKEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTQyNiw2MCArMTI2NCwzNSBAQCB2b2lkIEludGVybmFsczo6cGFpbnRD
b250cm9sVGludHMoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZnJhbWVWaWV3LT5wYWludENvbnRy
b2xUaW50cygpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VGcm9tTG9jYXRp
b25BbmRMZW5ndGgoRWxlbWVudCogc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VM
ZW5ndGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVsZW1lbnQmIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwg
aW50IHJhbmdlTGVuZ3RoKQogewotICAgIGlmICghc2NvcGUpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCByYW5n
ZUxvY2F0aW9uLCByYW5nZUxlbmd0aCk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGgoJnNjb3BlLCByYW5nZUxvY2F0aW9uLCByYW5nZUxlbmd0aCk7
CiB9CiAKLXVuc2lnbmVkIEludGVybmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UoRWxlbWVudCogc2Nv
cGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit1bnNpZ25lZCBJbnRl
cm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgaWYgKCFzY29wZSB8fCAhcmFuZ2UpIHsKLSAgICAgICAgZWMgPSBJTlZBTElE
X0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIHNpemVfdCBsb2Nh
dGlvbiA9IDA7CiAgICAgc2l6ZV90IHVudXNlZExlbmd0aCA9IDA7Ci0gICAgVGV4dEl0ZXJhdG9y
OjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShzY29wZSwgcmFuZ2UsIGxvY2F0aW9uLCB1
bnVzZWRMZW5ndGgpOworICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9t
UmFuZ2UoJnNjb3BlLCAmcmFuZ2UsIGxvY2F0aW9uLCB1bnVzZWRMZW5ndGgpOwogICAgIHJldHVy
biBsb2NhdGlvbjsKIH0KIAotdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxl
bWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit1bnNp
Z25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFu
Z2UmIHJhbmdlKQogewotICAgIGlmICghc2NvcGUgfHwgIXJhbmdlKSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBzaXpl
X3QgdW51c2VkTG9jYXRpb24gPSAwOwogICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgIFRleHRJ
dGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uoc2NvcGUsIHJhbmdlLCB1bnVz
ZWRMb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVu
Z3RoRnJvbVJhbmdlKCZzY29wZSwgJnJhbmdlLCB1bnVzZWRMb2NhdGlvbiwgbGVuZ3RoKTsKICAg
ICByZXR1cm4gbGVuZ3RoOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25z
dCBSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6cmFu
Z2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmFuZ2UtPnRleHQoKTsKKyAgICByZXR1cm4gcmFuZ2UudGV4dCgp
OwogfQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UqIHJhbmdlLCBp
bnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBFeGNlcHRpb25Db2RlJiBlYykKK1Jl
ZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgcmFuZ2UsIGludCByYW5nZUxv
Y2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgpCiB7Ci0gICAgaWYgKCFyYW5nZSkgewotICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2UsIHJhbmdlTG9jYXRpb24s
IHJhbmdlTGVuZ3RoKTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgmcmFuZ2Us
IHJhbmdlTG9jYXRpb24sIHJhbmdlTGVuZ3RoKTsKIH0KIAogUmVmUHRyPFJhbmdlPiBJbnRlcm5h
bHM6OnJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oaW50IHgsIGludCB5LCBFeGNl
cHRpb25Db2RlJiBlYykKQEAgLTE1OTgsMjEgKzE0MTEsMjEgQEAgdW5zaWduZWQgSW50ZXJuYWxz
Ojp0b3VjaEV2ZW50SGFuZGxlckNvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKQogLy8gY29udGV4dERv
Y3VtZW50KCksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGZldyB0ZXN0cyB0aGF0IHBhc3MgYQog
Ly8gZGlmZmVyZW50IGRvY3VtZW50LCBhbmQgY291bGQganVzdCBtYWtlIHRoZSBjYWxsIHRocm91
Z2ggYW5vdGhlciBJbnRlcm5hbHMKIC8vIGluc3RhbmNlIGluc3RlYWQuCi1SZWZQdHI8Tm9kZUxp
c3Q+IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGludCBjZW50
ZXJYLCBpbnQgY2VudGVyWSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRk
aW5nLAorUmVmUHRyPE5vZGVMaXN0PiBJbnRlcm5hbHM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQm
IGRvY3VtZW50LCBpbnQgY2VudGVyWCwgaW50IGNlbnRlclksIHVuc2lnbmVkIHRvcFBhZGRpbmcs
IHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNp
Z25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVDbGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0Nv
bnRlbnQsIGJvb2wgYWxsb3dDaGlsZEZyYW1lQ29udGVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiB7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3Vt
ZW50LT5mcmFtZSgpLT52aWV3KCkpIHsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkgfHwgIWRv
Y3VtZW50LmZyYW1lKCktPnZpZXcoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBkb2N1bWVudC0+
dmlldygpOwotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmll
dygpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBkb2N1bWVudC52aWV3KCk7CisgICAgUmVuZGVyVmlldyogcmVuZGVyVmll
dyA9IGRvY3VtZW50LnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogCiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5wYWdlWm9vbUZh
Y3RvcigpOwogICAgIExheW91dFBvaW50IHBvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICsgZnJh
bWVWaWV3LT5zY3JvbGxYKCksIGNlbnRlclkgKiB6b29tRmFjdG9yICsgZnJhbWVWaWV3LT5zY3Jv
bGxZKCkpOwpAQCAtMTkzOSw3ICsxNzUyLDcgQEAgUmVmUHRyPERPTVdpbmRvdz4gSW50ZXJuYWxz
OjpvcGVuRHVtbXlJbnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHVybCkKICAgICBQYWdl
KiBpbnNwZWN0ZWRQYWdlID0gY29udGV4dERvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKTsKICAg
ICBSZWZQdHI8RE9NV2luZG93PiB3aW5kb3cgPSBpbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS5k
b2N1bWVudCgpLT5kb21XaW5kb3coKTsKICAgICBSZWZQdHI8RE9NV2luZG93PiBmcm9udGVuZFdp
bmRvdyA9IHdpbmRvdy0+b3Blbih1cmwsICIiLCAiIiwgKndpbmRvdywgKndpbmRvdyk7Ci0gICAg
bV9pbnNwZWN0b3JGcm9udGVuZCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yU3R1YkZyb250
ZW5kPihpbnNwZWN0ZWRQYWdlLCBmcm9udGVuZFdpbmRvdy5jb3B5UmVmKCkpOworICAgIG1faW5z
cGVjdG9yRnJvbnRlbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclN0dWJGcm9udGVuZD4o
Kmluc3BlY3RlZFBhZ2UsIGZyb250ZW5kV2luZG93LmNvcHlSZWYoKSk7CiAKICAgICByZXR1cm4g
ZnJvbnRlbmRXaW5kb3c7CiB9CkBAIC0yMDE0LDE0ICsxODI3LDE0IEBAIGJvb2wgSW50ZXJuYWxz
Ojppc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlTnVtYmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIC8v
IGNvbnRleHREb2N1bWVudCgpLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYSBmZXcgdGVzdHMgdGhh
dCBwYXNzIGEKIC8vIGRpZmZlcmVudCBkb2N1bWVudCwgYW5kIGNvdWxkIGp1c3QgbWFrZSB0aGUg
Y2FsbCB0aHJvdWdoIGFub3RoZXIgSW50ZXJuYWxzCiAvLyBpbnN0YW5jZSBpbnN0ZWFkLgotU3Ry
aW5nIEludGVybmFsczo6bGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CitTdHJpbmcgSW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQoRG9j
dW1lbnQmIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICByZXR1cm4g
bGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LCAwLCBlYyk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6
OmxheWVyVHJlZUFzVGV4dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK1N0cmluZyBJbnRlcm5hbHM6OmxheWVyVHJlZUFzVGV4dChE
b2N1bWVudCYgZG9jdW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkgeworICAgIGlm
ICghZG9jdW1lbnQuZnJhbWUoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIwMzgsNyArMTg1MSw3IEBAIFN0
cmluZyBJbnRlcm5hbHM6OmxheWVyVHJlZUFzVGV4dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2ln
bmVkIGZsYWdzLCBFeGNlcHRpb25DCiAgICAgaWYgKGZsYWdzICYgTEFZRVJfVFJFRV9JTkNMVURF
U19DT05URU5UX0xBWUVSUykKICAgICAgICAgbGF5ZXJUcmVlRmxhZ3MgfD0gTGF5ZXJUcmVlRmxh
Z3NJbmNsdWRlQ29udGVudExheWVyczsKIAotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+
bGF5ZXJUcmVlQXNUZXh0KGxheWVyVHJlZUZsYWdzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZnJh
bWUoKS0+bGF5ZXJUcmVlQXNUZXh0KGxheWVyVHJlZUZsYWdzKTsKIH0KIAogU3RyaW5nIEludGVy
bmFsczo6cmVwYWludFJlY3RzQXNUZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAtMjA5
Nyw3ICsxOTEwLDcgQEAgUmVmUHRyPENsaWVudFJlY3RMaXN0PiBJbnRlcm5hbHM6Om5vbkZhc3RT
Y3JvbGxhYmxlUmVjdHMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnMKICAgICByZXR1cm4gcGFnZS0+
bm9uRmFzdFNjcm9sbGFibGVSZWN0cygpOwogfQogCi12b2lkIEludGVybmFsczo6c2V0RWxlbWVu
dFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoRWxlbWVudCogZWxlbWVudCwgYm9vbCB1c2VzRGlzcGxh
eUxpc3REcmF3aW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxzOjpzZXRFbGVt
ZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhFbGVtZW50JiBlbGVtZW50LCBib29sIHVzZXNEaXNw
bGF5TGlzdERyYXdpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTIxMDUsMjIgKzE5MTgsMjIgQEAgdm9pZCBJbnRlcm5hbHM6
OnNldEVsZW1lbnRVc2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wg
dXNlc0Rpc3AKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZWxlbWVudCB8fCAh
ZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOworICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVu
dD4oZWxlbWVudCkpIHsKKyAgICAgICAgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1l
bnQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCktPmhh
c0xheWVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkgewog
ICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PihlbGVtZW50LT5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKKyAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVtZW50LnJlbmRlcmVy
KCkpLT5sYXllcigpOwogICAgIGlmICghbGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CkBAIC0yMTI5LDcgKzE5
NDIsNyBAQCB2b2lkIEludGVybmFsczo6c2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzdERyYXdpbmco
RWxlbWVudCogZWxlbWVudCwgYm9vbCB1c2VzRGlzcAogICAgIGxheWVyLT5iYWNraW5nKCktPnNl
dFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKLXZv
aWQgSW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCog
ZWxlbWVudCwgYm9vbCBpc1RyYWNraW5nUmVwbGF5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCYgZWxl
bWVudCwgYm9vbCBpc1RyYWNraW5nUmVwbGF5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yMTM3LDIyICsxOTUwLDIyIEBAIHZv
aWQgSW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCog
ZWxlbWVudCwgYm9vbCBpc1RyYWNrCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
IWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVu
ZGVyZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpKSB7
Ci0gICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkuc2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkoaXNUcmFja2luZ1JlcGxheSk7CisgICAgaWYgKGlzPEhUTUxDYW52
YXNFbGVtZW50PihlbGVtZW50KSkgeworICAgICAgICBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4oZWxlbWVudCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoaXNUcmFja2luZ1JlcGxheSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkt
Pmhhc0xheWVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5sYXllcigpOworICAgIFJlbmRlckxheWVyKiBs
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQucmVuZGVyZXIo
KSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVkKCkpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTIxNjEsMTIgKzE5
NzQsMTIgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlzdFJlcGxh
eShFbGVtZW50KiBlbGVtZW50LCBib29sIGlzVHJhY2sKICAgICBsYXllci0+YmFja2luZygpLT5z
ZXRJc1RyYWNraW5nRGlzcGxheUxpc3RSZXBsYXkoaXNUcmFja2luZ1JlcGxheSk7CiB9CiAKLVN0
cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICByZXR1cm4gZGlz
cGxheUxpc3RGb3JFbGVtZW50KGVsZW1lbnQsIDAsIGVjKTsKIH0KIAotU3RyaW5nIEludGVybmFs
czo6ZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdz
LCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewpAQCAtMjE3NCw3ICsxOTg3
LDcgQEAgU3RyaW5nIEludGVybmFsczo6ZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHQKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIH0KIAotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAg
IGlmICghZWxlbWVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpAQCAtMjE4MywxNSArMTk5Niwx
NSBAQCBTdHJpbmcgSW50ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdAogICAgIGlmIChmbGFncyAmIERJU1BMQVlfTElT
VF9JTkNMVURFU19QTEFURk9STV9PUEVSQVRJT05TKQogICAgICAgICBkaXNwbGF5TGlzdEZsYWdz
IHw9IERpc3BsYXlMaXN0OjpBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9uczsK
IAotICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KS5kaXNwbGF5TGlzdEFzVGV4
dChkaXNwbGF5TGlzdEZsYWdzKTsKKyAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1l
bnQpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQp
LmRpc3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwogCi0gICAgaWYgKCFlbGVtZW50
LT5yZW5kZXJlcigpLT5oYXNMYXllcigpKSB7CisgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkt
Pmhhc0xheWVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVtZW50LT5yZW5kZXJlcigpKS0+bGF5ZXIo
KTsKKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PihlbGVtZW50LnJlbmRlcmVyKCkpLT5sYXllcigpOwogICAgIGlmICghbGF5ZXItPmlzQ29t
cG9zaXRlZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CkBAIC0yMjAwLDEyICsyMDEzLDEyIEBAIFN0cmluZyBJbnRlcm5hbHM6
OmRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncywg
RXhjZXB0CiAgICAgcmV0dXJuIGxheWVyLT5iYWNraW5nKCktPmRpc3BsYXlMaXN0QXNUZXh0KGRp
c3BsYXlMaXN0RmxhZ3MpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlz
dEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcg
SW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgcmV0dXJuIHJlcGxheURpc3BsYXlMaXN0Rm9yRWxl
bWVudChlbGVtZW50LCAwLCBlYyk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJlcGxheURpc3Bs
YXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0
aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICgh
ZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTIyMTMsNyArMjAyNiw3
IEBAIFN0cmluZyBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50
KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncywKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
IH0KIAotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlm
ICghZWxlbWVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpAQCAtMjIyMiwxNSArMjAzNSwxNSBA
QCBTdHJpbmcgSW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MsCiAgICAgaWYgKGZsYWdzICYgRElTUExBWV9MSVNUX0lO
Q0xVREVTX1BMQVRGT1JNX09QRVJBVElPTlMpCiAgICAgICAgIGRpc3BsYXlMaXN0RmxhZ3MgfD0g
RGlzcGxheUxpc3Q6OkFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zOwogCi0g
ICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpLnJlcGxheURpc3BsYXlMaXN0QXNU
ZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOworICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxl
bWVudCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVu
dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFncyk7CiAKLSAgICBpZiAo
IWVsZW1lbnQtPnJlbmRlcmVyKCktPmhhc0xheWVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVu
ZGVyZXIoKS0+aGFzTGF5ZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAotICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkp
LT5sYXllcigpOworICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVy
TW9kZWxPYmplY3Q+KGVsZW1lbnQucmVuZGVyZXIoKSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXll
ci0+aXNDb21wb3NpdGVkKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTIyNzcsMjAgKzIwOTAsMTQgQEAgdm9pZCBJbnRl
cm5hbHM6Omluc2VydFVzZXJDU1MoY29uc3QgU3RyaW5nJiBjc3MsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogICAgIGRvY3VtZW50LT5leHRlbnNpb25TdHlsZVNoZWV0cygpLmFkZFVzZXJTdHls
ZVNoZWV0KFdURk1vdmUocGFyc2VkU2hlZXQpKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6Y291
bnRlclZhbHVlKEVsZW1lbnQqIGVsZW1lbnQpCitTdHJpbmcgSW50ZXJuYWxzOjpjb3VudGVyVmFs
dWUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIHJldHVybiBjb3VudGVyVmFsdWVGb3JFbGVtZW50KGVsZW1lbnQp
OworICAgIHJldHVybiBjb3VudGVyVmFsdWVGb3JFbGVtZW50KCZlbGVtZW50KTsKIH0KIAotaW50
IEludGVybmFsczo6cGFnZU51bWJlcihFbGVtZW50KiBlbGVtZW50LCBmbG9hdCBwYWdlV2lkdGgs
IGZsb2F0IHBhZ2VIZWlnaHQpCitpbnQgSW50ZXJuYWxzOjpwYWdlTnVtYmVyKEVsZW1lbnQmIGVs
ZW1lbnQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKIHsKLSAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFn
ZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgRmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdo
dCkpOworICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KCZlbGVt
ZW50LCB7IHBhZ2VXaWR0aCwgcGFnZUhlaWdodCB9KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gSW50
ZXJuYWxzOjpzaG9ydGN1dEljb25VUkxzKCkgY29uc3QKQEAgLTI0MzIsMzYgKzIyMzksMzYgQEAg
dm9pZCBJbnRlcm5hbHM6OnNldFRvcENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCiB9
CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi12b2lkIEludGVybmFsczo6d2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSW50ZXJu
YWxzOjp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50
KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlm
ICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+d2Via2l0V2lsbEVu
dGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgZG9jdW1lbnQtPndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKIH0KIAotdm9pZCBJbnRlcm5h
bHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KGVsZW1lbnQpOworICAgIGRvY3VtZW50
LT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKIH0KIAotdm9p
ZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4
dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50LT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KGVsZW1lbnQpOworICAg
IGRvY3VtZW50LT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsK
IH0KIAotdm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50KQordm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsK
LSAgICBkb2N1bWVudC0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KGVsZW1lbnQp
OworICAgIGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1l
bnQpOwogfQogI2VuZGlmCiAKQEAgLTI1MzksNyArMjM0Niw3IEBAIHZvaWQgSW50ZXJuYWxzOjpz
dGFydFRyYWNraW5nTGF5ZXJGbHVzaGVzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGRvY3VtZW50
LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0b3IoKS5zdGFydFRyYWNraW5nTGF5ZXJGbHVzaGVzKCk7
CiB9CiAKLXVuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpsYXllckZsdXNoQ291bnQoRXhjZXB0aW9u
Q29kZSYgZWMpCit1bnNpZ25lZCBJbnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudChFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yNTYw
LDcgKzIzNjcsNyBAQCB2b2lkIEludGVybmFsczo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyhF
eGNlcHRpb25Db2RlJiBlYykKICAgICBkb2N1bWVudC0+c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxj
cygpOwogfQogCi11bnNpZ25lZCBsb25nIEludGVybmFsczo6c3R5bGVSZWNhbGNDb3VudChFeGNl
cHRpb25Db2RlJiBlYykKK3Vuc2lnbmVkIEludGVybmFsczo6c3R5bGVSZWNhbGNDb3VudChFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50KSB7CkBAIC0yNTgyLDcgKzIzODksNyBAQCB2b2lkIElu
dGVybmFsczo6c3RhcnRUcmFja2luZ0NvbXBvc2l0aW5nVXBkYXRlcyhFeGNlcHRpb25Db2RlJiBl
YykKICAgICBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5jb21wb3NpdG9yKCkuc3RhcnRUcmFja2lu
Z0NvbXBvc2l0aW5nVXBkYXRlcygpOwogfQogCi11bnNpZ25lZCBsb25nIEludGVybmFsczo6Y29t
cG9zaXRpbmdVcGRhdGVDb3VudChFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2lnbmVkIEludGVybmFs
czo6Y29tcG9zaXRpbmdVcGRhdGVDb3VudChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8
ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yNzIyLDEwICsyNTI5LDEwIEBAIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gSW50ZXJuYWxzOjpzZXJpYWxpemVPYmplY3QoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+CiAgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoYnl0ZXMu
ZGF0YSgpLCBieXRlcy5zaXplKCkpOwogfQogCi1SZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBJbnRlcm5hbHM6OmRlc2VyaWFsaXplQnVmZmVyKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlcikgY29uc3QKK1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IEludGVybmFsczo6ZGVz
ZXJpYWxpemVCdWZmZXIoQXJyYXlCdWZmZXImIGJ1ZmZlcikgY29uc3QKIHsKICAgICBWZWN0b3I8
dWludDhfdD4gYnl0ZXM7Ci0gICAgYnl0ZXMuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBieXRlcy5h
cHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIu
Ynl0ZUxlbmd0aCgpKTsKICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjphZG9wdChX
VEZNb3ZlKGJ5dGVzKSk7CiB9CiAKQEAgLTI3NzAsNzQgKzI1NzcsNTIgQEAgdm9pZCBJbnRlcm5h
bHM6OmluaXRpYWxpemVNb2NrQ0RNKCkKIH0KICNlbmRpZgogCi1TdHJpbmcgSW50ZXJuYWxzOjpt
YXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitTdHJpbmcgSW50ZXJuYWxzOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6
Om1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFy
a2VyVGV4dEZvckxpc3RJdGVtKCZlbGVtZW50KTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6dG9v
bFRpcEZyb21FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAorU3RyaW5nIEludGVybmFsczo6dG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQogICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0OwotICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZWxlbWVudCk7Ci0gICAgVGV4dERp
cmVjdGlvbiBkaXI7Ci0gICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXIpOworICAgIHJlc3VsdC5z
ZXRJbm5lck5vZGUoJmVsZW1lbnQpOworICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAg
IHJldHVybiByZXN1bHQudGl0bGUoZGlyZWN0aW9uKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6
Z2V0SW1hZ2VTb3VyY2VVUkwoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitT
dHJpbmcgSW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudC0+aW1hZ2VT
b3VyY2VVUkwoKTsKKyAgICByZXR1cm4gZWxlbWVudC5pbWFnZVNvdXJjZVVSTCgpOwogfQogCiAj
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBJbnRlcm5hbHM6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRp
b24oTm9kZSogbm9kZSkKKwordm9pZCBJbnRlcm5hbHM6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRp
b24oSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKICNpZiBVU0UoR1NUUkVBTUVSKQotICAg
IEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50Pihu
b2RlKTsKLSAgICBlbGVtZW50LT5wbGF5ZXIoKS0+c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigp
OworICAgIGVsZW1lbnQucGxheWVyKCktPnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKTsKICNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKG5vZGUpOworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsK
ICNlbmRpZgogfQogCi1ib29sIEludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0
aWMoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJpc3RpYywgRXhjZXB0aW9uQ29k
ZSYgZWMpCitib29sIEludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMoSFRN
TE1lZGlhRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJpc3RpYywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFpczxIVE1MTWVkaWFFbGVtZW50Pigqbm9kZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50Pihub2RlKTsKLQogICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjaGFyYWN0ZXJpc3RpYywgImF1ZGlibGUiKSkKLSAgICAgICAg
cmV0dXJuIGVsZW1lbnQtPmhhc0F1ZGlvKCk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F1
ZGlvKCk7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNoYXJhY3Rlcmlz
dGljLCAidmlzdWFsIikpCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNWaWRlbygpOworICAg
ICAgICByZXR1cm4gZWxlbWVudC5oYXNWaWRlbygpOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShjaGFyYWN0ZXJpc3RpYywgImxlZ2libGUiKSkKLSAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0Nsb3NlZENhcHRpb25zKCk7CisgICAgICAgIHJldHVybiBlbGVtZW50Lmhh
c0Nsb3NlZENhcHRpb25zKCk7CiAKICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogI2VuZGlmCiAKLWJvb2wgSW50ZXJuYWxzOjppc1NlbGVjdFBvcHVwVmlzaWJsZShO
b2RlKiBub2RlKQorYm9vbCBJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKEhUTUxTZWxl
Y3RFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KCpu
b2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTFNlbGVjdEVsZW1lbnQmIHNl
bGVjdCA9IGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pigqbm9kZSk7Ci0KLSAgICBhdXRvKiBy
ZW5kZXJlciA9IHNlbGVjdC5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVu
dC5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgaWYgKCFpczxSZW5kZXJN
ZW51TGlzdD4oKnJlbmRlcmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg0Niw3ICsy
NjMxLDcgQEAgYm9vbCBJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKE5vZGUqIG5vZGUp
CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1lbnVMaXN0PigqcmVuZGVyZXIpLnBvcHVwSXNW
aXNpYmxlKCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQorI2VuZGlmCiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OmNhcHRpb25zU3R5bGVTaGVldE92
ZXJyaWRlKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjkzMyw5ICsyNzE4LDkgQEAgUmVmPFRpbWVS
YW5nZXM+IEludGVybmFsczo6Y3JlYXRlVGltZVJhbmdlcyhGbG9hdDMyQXJyYXkqIHN0YXJ0VGlt
ZXMsIEZsb2F0MzJBcnIKICAgICByZXR1cm4gcmFuZ2VzOwogfQogCi1kb3VibGUgSW50ZXJuYWxz
OjpjbG9zZXN0VGltZVRvVGltZVJhbmdlcyhkb3VibGUgdGltZSwgVGltZVJhbmdlcyogcmFuZ2Vz
KQorZG91YmxlIEludGVybmFsczo6Y2xvc2VzdFRpbWVUb1RpbWVSYW5nZXMoZG91YmxlIHRpbWUs
IFRpbWVSYW5nZXMmIHJhbmdlcykKIHsKLSAgICByZXR1cm4gcmFuZ2VzLT5uZWFyZXN0KHRpbWUp
OworICAgIHJldHVybiByYW5nZXMubmVhcmVzdCh0aW1lKTsKIH0KICNlbmRpZgogCkBAIC0yOTYw
LDE0ICsyNzQ1LDkgQEAgYm9vbCBJbnRlcm5hbHM6OmlzVmlicmF0aW5nKCkKIH0KICNlbmRpZgog
Ci1ib29sIEludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVk
KEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJbnRlcm5hbHM6Omlz
UGx1Z2luVW5hdmFpbGFiaWxpdHlJbmRpY2F0b3JPYnNjdXJlZChFbGVtZW50JiBlbGVtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBh
dXRvKiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4o
cmVuZGVyZXIpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yOTc2LDE3ICsyNzU2LDEzIEBAIGJvb2wgSW50ZXJuYWxzOjppc1Bs
dWdpblVuYXZhaWxhYmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQoRWxlbWVudCogZWxlbWVudCwgRXhj
ZXB0CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIp
LmlzUmVwbGFjZW1lbnRPYnNjdXJlZCgpOwogfQogICAgIAotYm9vbCBJbnRlcm5hbHM6OmlzUGx1
Z2luU25hcHNob3R0ZWQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29s
IEludGVybmFsczo6aXNQbHVnaW5TbmFwc2hvdHRlZChFbGVtZW50JiBlbGVtZW50KQogewotICAg
IGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luRWxl
bWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5FbGVtZW50PihlbGVtZW50KTsKLSAgICByZXR1cm4g
cGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0YXRlKCkgPD0gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3Bs
YXlpbmdTbmFwc2hvdDsKKyAgICByZXR1cm4gaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxQbHVnSW5FbGVtZW50PihlbGVtZW50KS5kaXNwbGF5U3RhdGUoKSA8
PSBIVE1MUGx1Z0luRWxlbWVudDo6RGlzcGxheWluZ1NuYXBzaG90OwogfQogICAgIAogI2lmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCisKIHZvaWQgSW50ZXJuYWxzOjppbml0aWFsaXplTW9ja01lZGlh
U291cmNlKCkKIHsKICNpZiBVU0UoQVZGT1VOREFUSU9OKQpAQCAtMjk5NSwyMiArMjc3MSwyMCBA
QCB2b2lkIEludGVybmFsczo6aW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpCiAgICAgTWVkaWFQ
bGF5ZXJGYWN0b3J5U3VwcG9ydDo6Y2FsbFJlZ2lzdGVyTWVkaWFFbmdpbmUoTW9ja01lZGlhUGxh
eWVyTWVkaWFTb3VyY2U6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOwogfQogCi1WZWN0b3I8U3RyaW5n
PiBJbnRlcm5hbHM6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNlQnVmZmVyKiBidWZm
ZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgdHJhY2tJRCkKK1ZlY3RvcjxTdHJpbmc+IEludGVybmFs
czo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3VyY2VCdWZmZXImIGJ1ZmZlciwgY29uc3Qg
QXRvbWljU3RyaW5nJiB0cmFja0lEKQogewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKLQotICAgIHJldHVybiBidWZmZXItPmJ1ZmZlcmVkU2FtcGxl
c0ZvclRyYWNrSUQodHJhY2tJRCk7CisgICAgcmV0dXJuIGJ1ZmZlci5idWZmZXJlZFNhbXBsZXNG
b3JUcmFja0lEKHRyYWNrSUQpOwogfQogICAgIAotdm9pZCBJbnRlcm5hbHM6OnNldFNob3VsZEdl
bmVyYXRlVGltZXN0YW1wcyhTb3VyY2VCdWZmZXIqIGJ1ZmZlciwgYm9vbCBmbGFnKQordm9pZCBJ
bnRlcm5hbHM6OnNldFNob3VsZEdlbmVyYXRlVGltZXN0YW1wcyhTb3VyY2VCdWZmZXImIGJ1ZmZl
ciwgYm9vbCBmbGFnKQogewotICAgIGlmIChidWZmZXIpCi0gICAgICAgIGJ1ZmZlci0+c2V0U2hv
dWxkR2VuZXJhdGVUaW1lc3RhbXBzKGZsYWcpOworICAgIGJ1ZmZlci5zZXRTaG91bGRHZW5lcmF0
ZVRpbWVzdGFtcHMoZmxhZyk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQorCiB2
b2lkIEludGVybmFsczo6YmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oY29uc3QgU3RyaW5n
JiBpbnRlcnJ1cHRpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRpb25UeXBlIGludGVycnVwdGlvbiA9IFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpTeXN0ZW1JbnRlcnJ1cHRpb247CkBAIC0zMDgzLDE1ICsyODU3LDEwIEBAIHZv
aWQgSW50ZXJuYWxzOjpzZXRNZWRpYVNlc3Npb25SZXN0cmljdGlvbnMoY29uc3QgU3RyaW5nJiBt
ZWRpYVR5cGVTdHJpbmcsIGNvbnN0CiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCkuYWRkUmVzdHJpY3Rpb24obWVkaWFUeXBlLCByZXN0cmljdGlvbnMpOwog
fQogCi12b2lkIEludGVybmFsczo6c2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRp
YUVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25zU3RyaW5nLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlv
bnMoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnNT
dHJpbmcpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTWVkaWFFbGVtZW50U2Vzc2lv
bjo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25zID0gZWxlbWVudC0+bWVkaWFTZXNz
aW9uKCkuYmVoYXZpb3JSZXN0cmljdGlvbnMoKTsKLSAgICBlbGVtZW50LT5tZWRpYVNlc3Npb24o
KS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CisgICAgTWVkaWFFbGVt
ZW50U2Vzc2lvbjo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25zID0gZWxlbWVudC5t
ZWRpYVNlc3Npb24oKS5iZWhhdmlvclJlc3RyaWN0aW9ucygpOworICAgIGVsZW1lbnQubWVkaWFT
ZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogCiAgICAg
cmVzdHJpY3Rpb25zID0gTWVkaWFFbGVtZW50U2Vzc2lvbjo6Tm9SZXN0cmljdGlvbnM7CiAKQEAg
LTMxMjcsNyArMjg5Niw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYUVsZW1lbnRSZXN0cmlj
dGlvbnMoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyCiAgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXN0cmljdGlvblN0cmluZywgIm92ZXJyaWRl
dXNlcmdlc3R1cmVyZXF1aXJlbWVudGZvcm1haW5jb250ZW50IikpCiAgICAgICAgICAgICByZXN0
cmljdGlvbnMgfD0gTWVkaWFFbGVtZW50U2Vzc2lvbjo6T3ZlcnJpZGVVc2VyR2VzdHVyZVJlcXVp
cmVtZW50Rm9yTWFpbkNvbnRlbnQ7CiAgICAgfQotICAgIGVsZW1lbnQtPm1lZGlhU2Vzc2lvbigp
LmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKKyAgICBlbGVtZW50Lm1lZGlh
U2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKIH0KIAogdm9p
ZCBJbnRlcm5hbHM6OnBvc3RSZW1vdGVDb250cm9sQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmRTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzE1OCwxNSArMjkyNywxNSBAQCB2b2lk
IEludGVybmFsczo6cG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZFN0cmluZywgRXhjZXB0aW9uQwogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLmRpZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChjb21tYW5kKTsKIH0K
IAotYm9vbCBJbnRlcm5hbHM6OmVsZW1lbnRJc0Jsb2NraW5nRGlzcGxheVNsZWVwKEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIEludGVybmFsczo6ZWxlbWVudElzQmxvY2tpbmdEaXNwbGF5
U2xlZXAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihlbGVtZW50
KTsKLSAgICByZXR1cm4gbWVkaWFFbGVtZW50ID8gbWVkaWFFbGVtZW50LT5pc0Rpc2FibGluZ1Ns
ZWVwKCkgOiBmYWxzZTsKKyAgICByZXR1cm4gZWxlbWVudC5pc0Rpc2FibGluZ1NsZWVwKCk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikK
Kwogc3RhdGljIE1lZGlhU2Vzc2lvbkludGVycnVwdGluZ0NhdGVnb3J5IGludGVycnVwdGluZ0Nh
dGVnb3J5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGludGVycnVwdGluZ0NhdGVnb3J5U3RyaW5n
KQogewogICAgIGlmIChpbnRlcnJ1cHRpbmdDYXRlZ29yeVN0cmluZyA9PSAiY29udGVudCIpCkBA
IC0zMjE4LDE4ICsyOTg3LDE1IEBAIHZvaWQgSW50ZXJuYWxzOjpzZW5kTWVkaWFDb250cm9sRXZl
bnQoY29uc3QgU3RyaW5nJiBldmVudCkKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NFU1NJT04pCiAKICNpZiBFTkFC
TEUoV0VCX0FVRElPKQotdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9u
cyhBdWRpb0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyAmcmVzdHJpY3Rpb25zU3RyaW5n
LCBFeGNlcHRpb25Db2RlICZlYykKLXsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBdWRp
b0NvbnRleHQ6OkJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9ucyA9IGNvbnRleHQtPmJl
aGF2aW9yUmVzdHJpY3Rpb25zKCk7Ci0gICAgY29udGV4dC0+cmVtb3ZlQmVoYXZpb3JSZXN0cmlj
dGlvbihyZXN0cmljdGlvbnMpOwordm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3Ry
aWN0aW9ucyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25z
U3RyaW5nKQoreworICAgIEF1ZGlvQ29udGV4dDo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJp
Y3Rpb25zID0gY29udGV4dC5iZWhhdmlvclJlc3RyaWN0aW9ucygpOworICAgIGNvbnRleHQucmVt
b3ZlQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogCiAgICAgcmVzdHJpY3Rpb25z
ID0gQXVkaW9Db250ZXh0OjpOb1Jlc3RyaWN0aW9uczsKIApAQCAtMzI0Myw4ICszMDA5LDkgQEAg
dm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1aXJlcGFnZWNvbnNlbnRmb3JhdWRpb3N0
YXJ0IikpCiAgICAgICAgICAgICByZXN0cmljdGlvbnMgfD0gQXVkaW9Db250ZXh0OjpSZXF1aXJl
UGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb247CiAgICAgfQotICAgIGNvbnRleHQt
PmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKKyAgICBjb250ZXh0LmFkZEJl
aGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgSW50
ZXJuYWxzOjpzaW11bGF0ZVN5c3RlbVNsZWVwKCkgY29uc3QKQEAgLTMyNjIsNiArMzAyOSw3IEBA
IHZvaWQgSW50ZXJuYWxzOjpzaW11bGF0ZVN5c3RlbVdha2UoKSBjb25zdAogfQogCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKwogdm9pZCBJbnRlcm5hbHM6OnNldE1vY2tN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgUGFn
ZSogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCk7CkBAIC0zMjkwLDYg
KzMwNTgsNyBAQCB2b2lkIEludGVybmFsczo6c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJTdGF0ZShjb25zdCBTdHJpbmcmIGRldmljZU5hbWUsCiAKICAgICBwYWdlLT5zZXRNb2NrTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlclN0YXRlKGRldmljZU5hbWUsIHN0YXRlKTsKIH0KKwogI2Vu
ZGlmCiAKIFJlZlB0cjxNb2NrUGFnZU92ZXJsYXk+IEludGVybmFsczo6aW5zdGFsbE1vY2tQYWdl
T3ZlcmxheShjb25zdCBTdHJpbmcmIG92ZXJsYXlUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTMzNzEsMTMgKzMxNDAsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnF1ZXVlTWljcm9UYXNrKGludCB0
ZXN0TnVtYmVyKQogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQorCiBNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzJiBJbnRlcm5hbHM6Om1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3Mo
KQogewogICAgIHJldHVybiBNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzaW5nbGV0b24oKTsK
IH0KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCiBzdGF0aWMgdm9p
ZCBhcHBlbmRPZmZzZXRzKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFZlY3RvcjxMYXlv
dXRVbml0PiYgc25hcE9mZnNldHMpCiB7CiAgICAgYm9vbCBqdXN0U3RhcnRpbmcgPSB0cnVlOwpA
QCAtMzM5NCwxNyArMzE2NiwxMiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRPZmZzZXRzKFN0cmluZ0J1
aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcAogICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgfSIpOwogfQogICAgIAotU3RyaW5nIEludGVybmFsczo6c2Nyb2xsU25hcE9m
ZnNldHMoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJu
YWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyhFbGVtZW50JiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnQt
PnJlbmRlckJveCgpKQorICAgIGlmICghZWxlbWVudC5yZW5kZXJCb3goKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgUmVuZGVyQm94JiBib3ggPSAqZWxlbWVudC0+cmVuZGVyQm94
KCk7CisgICAgUmVuZGVyQm94JiBib3ggPSAqZWxlbWVudC5yZW5kZXJCb3goKTsKICAgICBTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgaWYgKGJveC5pc0JvZHkoKSkg
ewpAQCAtMzQyOSwyMCArMzE5NiwyMSBAQCBTdHJpbmcgSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zm
c2V0cyhFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKIAogICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiaG9yaXpvbnRhbCA9ICIpOworICAgICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiaG9yaXpvbnRhbCA9ICIpOwogICAgICAgICBhcHBlbmRP
ZmZzZXRzKHJlc3VsdCwgKnNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSk7
CiAgICAgfQogCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkp
IHsKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIiwgIik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKIAotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJ2ZXJ0aWNhbCA9ICIpOworICAgICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgidmVydGljYWwgPSAiKTsKICAgICAgICAgYXBwZW5kT2Zmc2V0cyhyZXN1bHQsICpz
Y3JvbGxhYmxlQXJlYS0+dmVydGljYWxTbmFwT2Zmc2V0cygpKTsKICAgICB9CiAKICAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CisKICNlbmRpZgogCiBib29sIEludGVybmFsczo6dGVz
dFByZWxvYWRlclNldHRpbmdWaWV3cG9ydCgpCkBAIC0zNDc4LDE2ICszMjQ2LDEzIEBAIFN0cmlu
ZyBJbnRlcm5hbHM6OnBhdGhTdHJpbmdXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKFZlY3Rvcjxkb3Vi
bGU+IHJlY3RDb21wb25lbnRzCiB9CiAKIAotU3RyaW5nIEludGVybmFsczo6Z2V0Q3VycmVudE1l
ZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCkKK1N0cmluZyBJbnRlcm5hbHM6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiB7CiAjaWYgIUVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCiAgICAgVU5VU0VEX1BBUkFNKG1lZGlhRWxlbWVudCk7CiAgICAg
cmV0dXJuIFN0cmluZygpOwogI2Vsc2UKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+Z2V0Q3VycmVudE1l
ZGlhQ29udHJvbHNTdGF0dXMoKTsKKyAgICByZXR1cm4gbWVkaWFFbGVtZW50LmdldEN1cnJlbnRN
ZWRpYUNvbnRyb2xzU3RhdHVzKCk7CiAjZW5kaWYKIH0KIApAQCAtMzUxMyw2ICszMjc4LDcgQEAg
dm9pZCBJbnRlcm5hbHM6OnNldFNob3dBbGxQbHVnaW5zKGJvb2wgc2hvdykKIH0KIAogI2lmIEVO
QUJMRShTVFJFQU1TX0FQSSkKKwogYm9vbCBJbnRlcm5hbHM6OmlzUmVhZGFibGVTdHJlYW1EaXN0
dXJiZWQoU2NyaXB0U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHN0cmVhbSkKIHsKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUudm1FbnRyeUdsb2JhbE9iamVjdCgpOwpAQCAt
MzUzNSw2ICszMzAxLDcgQEAgYm9vbCBJbnRlcm5hbHM6OmlzUmVhZGFibGVTdHJlYW1EaXN0dXJi
ZWQoU2NyaXB0U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHN0cmVhbSkKIAogICAgIHJldHVybiByZXR1
cm5lZFZhbHVlLmFzQm9vbGVhbigpOwogfQorCiAjZW5kaWYKIAogU3RyaW5nIEludGVybmFsczo6
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zvck9yaWdpbihTdHJpbmcgb3JpZ2luKQpAQCAtMzU0Nywx
MSArMzMxNCwxMSBAQCB2b2lkIEludGVybmFsczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoYm9vbCBlbmFibGUpCiAgICAgU2V0dGluZ3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZSk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OmNvbXBvc2VkVHJlZUFz
VGV4dChOb2RlKiBub2RlKQorU3RyaW5nIEludGVybmFsczo6Y29tcG9zZWRUcmVlQXNUZXh0KE5v
ZGUmIG5vZGUpCiB7CiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKLSAgICAgICAg
cmV0dXJuICIiOwotICAgIHJldHVybiBXZWJDb3JlOjpjb21wb3NlZFRyZWVBc1RleHQoZG93bmNh
c3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpKTsKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvbXBvc2VkVHJlZUFzVGV4dChkb3duY2FzdDxDb250YWlu
ZXJOb2RlPihub2RlKSk7CiB9CiAKIHZvaWQgSW50ZXJuYWxzOjpzZXRWaWV3cG9ydEZvcmNlQWx3
YXlzVXNlclNjYWxhYmxlKGJvb2wgc2NhbGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aAppbmRleCBmNGRjZjE4ODA4OTdiM2Y2N2JlODEwMTIwZGQxY2MzMWVjMmUzNWY1Li41MjM4NzBi
N2Y2MjBkNDg2ZTMwZWQzNjllMmRiZmU2OTI2Mzg3MjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKQEAgLTUyLDEyICs1MiwxNyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBGaWxlOwogY2xhc3MgRnJhbWU7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50Owor
Y2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2NsYXNzIEhUTUxMaW5rRWxlbWVudDsKIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIGNsYXNzIEluc3BlY3Rv
clN0dWJGcm9udGVuZDsKIGNsYXNzIEludGVybmFsU2V0dGluZ3M7CiBjbGFzcyBNYWxsb2NTdGF0
aXN0aWNzOwogY2xhc3MgTWVkaWFTZXNzaW9uOwogY2xhc3MgTWVtb3J5SW5mbzsKK2NsYXNzIE1v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3M7CiBjbGFzcyBNb2NrUGFnZU92ZXJsYXk7CiBjbGFzcyBO
b2RlOwogY2xhc3MgUGFnZTsKQEAgLTcwLDMzICs3NSwyOCBAQCBjbGFzcyBUaW1lUmFuZ2VzOwog
Y2xhc3MgVHlwZUNvbnZlcnNpb25zOwogY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CiAKLSNpZiBFTkFC
TEUoQ09OVEVOVF9GSUxURVJJTkcpCi1jbGFzcyBNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOwot
I2VuZGlmCi0KIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIEludGVybmFscyA6
IHB1YmxpYyBSZWZDb3VudGVkPEludGVybmFscz4KLSAgICAgICAgICAgICAgICAsIHB1YmxpYyBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CitjbGFzcyBJbnRlcm5hbHMgOiBwdWJsaWMgUmVm
Q291bnRlZDxJbnRlcm5hbHM+LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8SW50ZXJuYWxzPiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAg
ICBzdGF0aWMgUmVmPEludGVybmFscz4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+
SW50ZXJuYWxzKCk7CiAKLSAgICBzdGF0aWMgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlKFBh
Z2UqKTsKKyAgICBzdGF0aWMgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UmKTsKIAot
ICAgIFN0cmluZyBlbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50KiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIGJvb2wgaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKEVsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisgICAgU3RyaW5nIGVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KEVsZW1lbnQmLCBF
eGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVu
dCYpOwogCi0gICAgU3RyaW5nIGFkZHJlc3MoTm9kZSopOwotICAgIGJvb2wgbm9kZU5lZWRzU3R5
bGVSZWNhbGMoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgc3R5bGVDaGFuZ2VU
eXBlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGFkZHJlc3MoTm9kZSYpOwor
ICAgIGJvb2wgbm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kZSYpOworICAgIFN0cmluZyBzdHlsZUNo
YW5nZVR5cGUoTm9kZSYpOwogICAgIFN0cmluZyBkZXNjcmlwdGlvbihEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSk7CiAKICAgICBib29sIGlzUHJlbG9hZGVkKGNvbnN0IFN0cmluZyYgdXJsKTsKICAg
ICBib29sIGlzTG9hZGluZ0Zyb21NZW1vcnlDYWNoZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAg
U3RyaW5nIHhoclJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0Kik7Ci0gICAgYm9vbCBpc1No
YXJpbmdTdHlsZVNoZWV0Q29udGVudHMoRWxlbWVudCogbGlua0EsIEVsZW1lbnQqIGxpbmtCKTsK
LSAgICBib29sIGlzU3R5bGVTaGVldExvYWRpbmdTdWJyZXNvdXJjZXMoRWxlbWVudCogbGluayk7
CisgICAgU3RyaW5nIHhoclJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0Jik7CisgICAgYm9v
bCBpc1NoYXJpbmdTdHlsZVNoZWV0Q29udGVudHMoSFRNTExpbmtFbGVtZW50JiBhLCBIVE1MTGlu
a0VsZW1lbnQmIGIpOworICAgIGJvb2wgaXNTdHlsZVNoZWV0TG9hZGluZ1N1YnJlc291cmNlcyhI
VE1MTGlua0VsZW1lbnQmKTsKICAgICB2b2lkIHNldE92ZXJyaWRlQ2FjaGVQb2xpY3koY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzZXRDYW5TaG93TW9kYWxEaWFsb2dPdmVycmlkZShib29sIGFs
bG93LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRPdmVycmlkZVJlc291cmNlTG9hZFBy
aW9yaXR5KGNvbnN0IFN0cmluZyYpOwpAQCAtMTA2LDIxICsxMDYsMjAgQEAgcHVibGljOgogICAg
IHZvaWQgcHJ1bmVNZW1vcnlDYWNoZVRvU2l6ZSh1bnNpZ25lZCBzaXplKTsKICAgICB1bnNpZ25l
ZCBtZW1vcnlDYWNoZVNpemUoKSBjb25zdDsKIAotICAgIHNpemVfdCBpbWFnZUZyYW1lSW5kZXgo
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1bnNpZ25lZCBpbWFnZUZyYW1lSW5kZXgo
SFRNTEltYWdlRWxlbWVudCYpOwogCiAgICAgdm9pZCBjbGVhclBhZ2VDYWNoZSgpOwogICAgIHVu
c2lnbmVkIHBhZ2VDYWNoZVNpemUoKSBjb25zdDsKIAotICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhOb2RlKiwg
RXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhOb2RlJikgY29uc3Q7CiAK
LSAgICBOb2RlKiBlbnN1cmVTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBOb2RlKiBlbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBOb2RlKiBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQqIGhvc3Qs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBOb2RlKiBzaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgc2hhZG93Um9vdFR5cGUoY29uc3QgTm9kZSosIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBFbGVtZW50KiBpbmNsdWRlckZvcihOb2RlKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBzaGFkb3dQc2V1ZG9JZChFbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCosIGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBOb2RlKiBlbnN1cmVTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBOb2RlKiBlbnN1cmVVc2VyQWdlbnRTaGFk
b3dSb290KEVsZW1lbnQmIGhvc3QpOworICAgIE5vZGUqIGNyZWF0ZVNoYWRvd1Jvb3QoRWxlbWVu
dCYgaG9zdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIE5vZGUqIHNoYWRvd1Jvb3QoRWxlbWVudCYg
aG9zdCk7CisgICAgU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUmLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CisgICAgU3RyaW5nIHNoYWRvd1BzZXVkb0lkKEVsZW1lbnQmKTsKKyAgICB2
b2lkIHNldFNoYWRvd1BzZXVkb0lkKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIC8v
IERPTVRpbWVycyB0aHJvdHRsaW5nIHRlc3RpbmcuCiAgICAgYm9vbCBpc1RpbWVyVGhyb3R0bGVk
KGludCB0aW1lb3V0SWQsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEzNSw0MCArMTM0LDM4IEBAIHB1
YmxpYzoKICAgICBib29sIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owog
ICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHBzZXVk
b0lkLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1l
bnQmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNl
dWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICAvLyBDU1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1l
LCBFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRp
bWUsIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkLCBFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICBOb2RlKiB0cmVlU2NvcGVSb290Tm9kZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IE5vZGUqIHBhcmVudFRyZWVTY29wZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wg
cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wg
cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkLCBF
eGNlcHRpb25Db2RlJik7CiAKLSAgICBib29sIGF0dGFjaGVkKE5vZGUqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgTm9kZSogdHJlZVNjb3BlUm9vdE5vZGUoTm9kZSYpOworICAgIE5vZGUqIHBhcmVu
dFRyZWVTY29wZShOb2RlJik7CiAKLSAgICBTdHJpbmcgdmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoRWxlbWVudCosIGNvbnN0
IFN0cmluZyYgY29sb3JWYWx1ZSk7CisgICAgU3RyaW5nIHZpc2libGVQbGFjZWhvbGRlcihFbGVt
ZW50Jik7CisgICAgdm9pZCBzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKEhUTUxJbnB1dEVsZW1l
bnQmLCBjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUpOwogICAgIFZlY3RvcjxTdHJpbmc+IGZvcm1D
b250cm9sU3RhdGVPZlByZXZpb3VzSGlzdG9yeUl0ZW0oRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgc2V0Rm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbShjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFJlZjxDbGllbnRSZWN0PiBhYnNvbHV0
ZUNhcmV0Qm91bmRzKEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFJlZjxDbGllbnRSZWN0PiBib3Vu
ZGluZ0JveChFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZjxDbGllbnRSZWN0PiBi
b3VuZGluZ0JveChFbGVtZW50Jik7CiAKICAgICBSZWY8Q2xpZW50UmVjdExpc3Q+IGluc3BlY3Rv
ckhpZ2hsaWdodFJlY3RzKEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgaW5zcGVjdG9ySGln
aGxpZ2h0T2JqZWN0KEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHVuc2lnbmVkIG1hcmtlckNvdW50
Rm9yTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFJlZlB0
cjxSYW5nZT4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5
cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIG1hcmtlckRl
c2NyaXB0aW9uRm9yTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVuc2lnbmVkIG1hcmtlckNvdW50Rm9yTm9k
ZShOb2RlJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxSYW5n
ZT4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIG1hcmtlckRlc2NyaXB0
aW9uRm9yTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBkdW1wTWFya2VyUmVjdHMoY29uc3QgU3Ry
aW5nJiBtYXJrZXJUeXBlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZGRUZXh0TWF0Y2hN
YXJrZXIoY29uc3QgUmFuZ2UqLCBib29sIGlzQWN0aXZlKTsKKyAgICB2b2lkIGFkZFRleHRNYXRj
aE1hcmtlcihjb25zdCBSYW5nZSYsIGJvb2wgaXNBY3RpdmUpOwogICAgIHZvaWQgc2V0TWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2
b2lkIGludmFsaWRhdGVGb250Q2FjaGUoKTsKIAotICAgIHZvaWQgc2V0U2Nyb2xsVmlld1Bvc2l0
aW9uKGxvbmcgeCwgbG9uZyB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRTY3JvbGxW
aWV3UG9zaXRpb24oaW50IHgsIGludCB5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRW
aWV3QmFzZUJhY2tncm91bmRDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUsIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZvaWQgc2V0UGFnaW5hdGlvbihjb25zdCBTdHJpbmcmIG1vZGUsIGlu
dCBnYXAsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFBhZ2luYXRpb24obW9kZSwgZ2FwLCAwLCBl
Yyk7IH0KQEAgLTE3NiwyMiArMTczLDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBhZ2luYXRp
b25MaW5lR3JpZEVuYWJsZWQoYm9vbCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBjb25m
aWd1cmF0aW9uRm9yVmlld3BvcnQoZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbywgaW50IGRldmljZVdp
ZHRoLCBpbnQgZGV2aWNlSGVpZ2h0LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVI
ZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIGJvb2wgd2FzTGFzdENoYW5nZVVzZXJFZGl0
KEVsZW1lbnQqIHRleHRGaWVsZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgZWxlbWVudFNo
b3VsZEF1dG9Db21wbGV0ZShFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldEVkaXRpbmdWYWx1ZShFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEF1dG9maWxsZWQoRWxlbWVudCos
IGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0U2hvd0F1dG9GaWxs
QnV0dG9uKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGF1dG9GaWxsQnV0dG9uVHlwZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50KiwgbG9uZyB4
LCBsb25nIHksIGxvbmcgdywgbG9uZyBoLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCB3YXNM
YXN0Q2hhbmdlVXNlckVkaXQoRWxlbWVudCYgdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgYm9vbCBlbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAg
ICB2b2lkIHNldEVkaXRpbmdWYWx1ZShIVE1MSW5wdXRFbGVtZW50JiwgY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBzZXRBdXRvZmlsbGVkKEhUTUxJbnB1dEVsZW1lbnQmLCBib29sIGVuYWJsZWQp
OworICAgIHZvaWQgc2V0U2hvd0F1dG9GaWxsQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmLCBjb25z
dCBTdHJpbmcmIGF1dG9GaWxsQnV0dG9uVHlwZSk7CisgICAgdm9pZCBzY3JvbGxFbGVtZW50VG9S
ZWN0KEVsZW1lbnQmLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgRXhjZXB0aW9uQ29kZSYp
OwogCi0gICAgU3RyaW5nIGF1dG9maWxsRmllbGROYW1lKEVsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgU3RyaW5nIGF1dG9maWxsRmllbGROYW1lKEVsZW1lbnQmLCBFeGNlcHRpb25Db2Rl
Jik7CiAKICAgICB2b2lkIHBhaW50Q29udHJvbFRpbnRzKEV4Y2VwdGlvbkNvZGUmKTsKIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCogc2NvcGUs
IGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1bnNpZ25lZCBsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3QgUmFuZ2Uq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdW5zaWduZWQgbGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQq
IHNjb3BlLCBjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmFuZ2VB
c1RleHQoY29uc3QgUmFuZ2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUmVmUHRyPFJhbmdlPiBz
dWJyYW5nZShSYW5nZSosIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KEVsZW1lbnQmIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoKTsKKyAg
ICB1bnNpZ25lZCBsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2Um
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJh
bmdlJik7CisgICAgU3RyaW5nIHJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJik7CisgICAgUmVmUHRy
PFJhbmdlPiBzdWJyYW5nZShSYW5nZSYsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5n
dGgpOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlv
bihpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgc2V0RGVsZWdhdGVz
U2Nyb2xsaW5nKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMjA4LDcgKzIwNSw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB1bnNpZ25lZCB0b3VjaEV2ZW50SGFuZGxlckNvdW50KEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCosIGlu
dCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAor
ICAgIFJlZlB0cjxOb2RlTGlzdD4gbm9kZXNGcm9tUmVjdChEb2N1bWVudCYsIGludCB4LCBpbnQg
eSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgICAgICB1
bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZywgYm9vbCBpZ25vcmVD
bGlwcGluZywgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgYWxsb3dDaGlsZEZyYW1lQ29u
dGVudCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgU3RyaW5nIHBhcnNlck1ldGFEYXRh
KERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoKSk7CkBA
IC0yNTMsMjUgKzI1MCwyNSBAQCBwdWJsaWM6CiAgICAgICAgIExBWUVSX1RSRUVfSU5DTFVERVNf
UEFJTlRJTkdfUEhBU0VTID0gOCwKICAgICAgICAgTEFZRVJfVFJFRV9JTkNMVURFU19DT05URU5U
X0xBWUVSUyA9IDE2CiAgICAgfTsKLSAgICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50
KiwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBTdHJpbmcgbGF5
ZXJUcmVlQXNUZXh0KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFN0cmlu
ZyBsYXllclRyZWVBc1RleHQoRG9jdW1lbnQmLCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OworICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoRG9jdW1lbnQmLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7CiAgICAgU3RyaW5nIHJlcGFpbnRSZWN0c0FzVGV4dChFeGNlcHRpb25D
b2RlJikgY29uc3Q7CiAgICAgU3RyaW5nIHNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChFeGNlcHRp
b25Db2RlJikgY29uc3Q7CiAgICAgU3RyaW5nIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IG5vbkZhc3RT
Y3JvbGxhYmxlUmVjdHMoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRFbGVt
ZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhFbGVtZW50KiwgYm9vbCB1c2VzRGlzcGxheUxpc3RE
cmF3aW5nLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRFbGVtZW50VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoRWxlbWVudCosIGJvb2wgaXNUcmFja2luZ1JlcGxheSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgc2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoRWxlbWVudCYs
IGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KEVsZW1lbnQmLCBib29sIGlzVHJhY2tp
bmdSZXBsYXksIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGVudW0gewogICAgICAgICAvLyBWYWx1
ZXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBJbnRlcm5hbHMuaWRsLgogICAgICAgICBE
SVNQTEFZX0xJU1RfSU5DTFVERVNfUExBVEZPUk1fT1BFUkFUSU9OUyA9IDEsCiAgICAgfTsKLSAg
ICBTdHJpbmcgZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBmbGFncywg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZGlzcGxheUxpc3RGb3JFbGVtZW50KEVs
ZW1lbnQmLCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBkaXNw
bGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmlu
ZyByZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIGZsYWdzLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChF
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyByZXBsYXlEaXNwbGF5TGlzdEZv
ckVsZW1lbnQoRWxlbWVudCYsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25Db2RlJik7CisgICAg
U3RyaW5nIHJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50JiwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgdm9pZCBnYXJiYWdlQ29sbGVjdERvY3VtZW50UmVzb3VyY2VzKEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKIApAQCAtMjg4LDkgKzI4NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExlZ2FjeUphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgc2V0SW5zcGVjdG9ySXNVbmRlclRlc3QoYm9vbCBpc1VuZGVyVGVz
dCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgU3RyaW5nIGNvdW50ZXJWYWx1ZShFbGVtZW50Kik7
CisgICAgU3RyaW5nIGNvdW50ZXJWYWx1ZShFbGVtZW50Jik7CiAKLSAgICBpbnQgcGFnZU51bWJl
cihFbGVtZW50KiwgZmxvYXQgcGFnZVdpZHRoID0gODAwLCBmbG9hdCBwYWdlSGVpZ2h0ID0gNjAw
KTsKKyAgICBpbnQgcGFnZU51bWJlcihFbGVtZW50JiwgZmxvYXQgcGFnZVdpZHRoID0gODAwLCBm
bG9hdCBwYWdlSGVpZ2h0ID0gNjAwKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzaG9ydGN1dEljb25V
UkxzKCkgY29uc3Q7CiAKICAgICBpbnQgbnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGhJblBp
eGVscyA9IDgwMCwgZmxvYXQgcGFnZUhlaWdodEluUGl4ZWxzID0gNjAwKTsKQEAgLTMxMSwxMCAr
MzA4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9hdCk7CiAK
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKKyAgICB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQmKTsKKyAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCYpOworICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50Jik7CisgICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYpOwogI2VuZGlmCiAKICAgICBXRUJDT1JFX1RFU1RTVVBQT1JUX0VY
UE9SVCB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcpOwpAQCAtMzMyLDIwICszMjksMjAgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcFRyYWNraW5n
UmVwYWludHMoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzdGFydFRyYWNraW5nTGF5ZXJG
bHVzaGVzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBsb25nIGxheWVyRmx1c2hDb3Vu
dChFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgbGF5ZXJGbHVzaENvdW50KEV4Y2VwdGlv
bkNvZGUmKTsKICAgICAKICAgICB2b2lkIHN0YXJ0VHJhY2tpbmdTdHlsZVJlY2FsY3MoRXhjZXB0
aW9uQ29kZSYpOwotICAgIHVuc2lnbmVkIGxvbmcgc3R5bGVSZWNhbGNDb3VudChFeGNlcHRpb25D
b2RlJik7CisgICAgdW5zaWduZWQgc3R5bGVSZWNhbGNDb3VudChFeGNlcHRpb25Db2RlJik7CiAK
ICAgICB2b2lkIHN0YXJ0VHJhY2tpbmdDb21wb3NpdGluZ1VwZGF0ZXMoRXhjZXB0aW9uQ29kZSYp
OwotICAgIHVuc2lnbmVkIGxvbmcgY29tcG9zaXRpbmdVcGRhdGVDb3VudChFeGNlcHRpb25Db2Rl
Jik7CisgICAgdW5zaWduZWQgY29tcG9zaXRpbmdVcGRhdGVDb3VudChFeGNlcHRpb25Db2RlJik7
CiAKICAgICB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBv
c3RMYXlvdXRUYXNrcyhFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB1cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Qb3N0TGF5b3V0VGFza3MoTm9kZSosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB1bnNpZ25lZCBsYXlvdXRDb3VudCgpIGNvbnN0OwogCiAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBzZXJpYWxpemVPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+KSBjb25zdDsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkZXNlcmlh
bGl6ZUJ1ZmZlcihQYXNzUmVmUHRyPEFycmF5QnVmZmVyPikgY29uc3Q7CisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlCdWZmZXImKSBjb25z
dDsKIAogICAgIGJvb2wgaXNGcm9tQ3VycmVudFdvcmxkKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
KSBjb25zdDsKIApAQCAtMzU0LDkgKzM1MSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBnZXRD
dXJyZW50Q3Vyc29ySW5mbyhFeGNlcHRpb25Db2RlJik7CiAKLSAgICBTdHJpbmcgbWFya2VyVGV4
dEZvckxpc3RJdGVtKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIG1hcmtl
clRleHRGb3JMaXN0SXRlbShFbGVtZW50Jik7CiAKLSAgICBTdHJpbmcgdG9vbFRpcEZyb21FbGVt
ZW50KEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgU3RyaW5nIHRvb2xUaXBG
cm9tRWxlbWVudChFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lkIGZvcmNlUmVsb2FkKGJvb2wg
ZW5kVG9FbmQpOwogCkBAIC0zNzksMTQgKzM3NiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFi
bGVNb2NrUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKCk7CiAjZW5kaWYKIAotICAgIFN0cmluZyBn
ZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBn
ZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9p
ZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKE5vZGUqKTsKLSAgICBib29sIG1lZGlhRWxlbWVu
dEhhc0NoYXJhY3RlcmlzdGljKE5vZGUqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKEhUTUxNZWRpYUVsZW1lbnQmKTsK
KyAgICBib29sIG1lZGlhRWxlbWVudEhhc0NoYXJhY3RlcmlzdGljKEhUTUxNZWRpYUVsZW1lbnQm
LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNT
ZWxlY3RQb3B1cFZpc2libGUoTm9kZSopOworICAgIGJvb2wgaXNTZWxlY3RQb3B1cFZpc2libGUo
SFRNTFNlbGVjdEVsZW1lbnQmKTsKIAogICAgIFN0cmluZyBjYXB0aW9uc1N0eWxlU2hlZXRPdmVy
cmlkZShFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRDYXB0aW9uc1N0eWxlU2hlZXRPdmVy
cmlkZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0zOTUsNyArMzkyLDcgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFJlZjxUaW1lUmFuZ2VzPiBjcmVhdGVU
aW1lUmFuZ2VzKEZsb2F0MzJBcnJheSogc3RhcnRUaW1lcywgRmxvYXQzMkFycmF5KiBlbmRUaW1l
cyk7Ci0gICAgZG91YmxlIGNsb3Nlc3RUaW1lVG9UaW1lUmFuZ2VzKGRvdWJsZSB0aW1lLCBUaW1l
UmFuZ2VzKik7CisgICAgZG91YmxlIGNsb3Nlc3RUaW1lVG9UaW1lUmFuZ2VzKGRvdWJsZSB0aW1l
LCBUaW1lUmFuZ2VzJik7CiAjZW5kaWYKIAogICAgIFJlZjxDbGllbnRSZWN0PiBzZWxlY3Rpb25C
b3VuZHMoRXhjZXB0aW9uQ29kZSYpOwpAQCAtNDA0LDEzICs0MDEsMTMgQEAgcHVibGljOgogICAg
IGJvb2wgaXNWaWJyYXRpbmcoKTsKICNlbmRpZgogCi0gICAgYm9vbCBpc1BsdWdpblVuYXZhaWxh
YmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBi
b29sIGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBi
b29sIGlzUGx1Z2luVW5hdmFpbGFiaWxpdHlJbmRpY2F0b3JPYnNjdXJlZChFbGVtZW50JiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaXNQbHVnaW5TbmFwc2hvdHRlZChFbGVtZW50Jik7CiAK
ICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogICAgIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JU
IHZvaWQgaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgpOwotICAgIFZlY3RvcjxTdHJpbmc+IGJ1
ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNlQnVmZmVyKiwgY29uc3QgQXRvbWljU3RyaW5n
Jik7Ci0gICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVRpbWVzdGFtcHMoU291cmNlQnVmZmVyKiwg
Ym9vbCk7CisgICAgVmVjdG9yPFN0cmluZz4gYnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3Vy
Y2VCdWZmZXImLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldFNob3VsZEdlbmVy
YXRlVGltZXN0YW1wcyhTb3VyY2VCdWZmZXImLCBib29sKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFZJREVPKQpAQCAtNDE5LDE2ICs0MTYsMTYgQEAgcHVibGljOgogICAgIHZvaWQgYXBwbGljYXRp
b25EaWRFbnRlckZvcmVncm91bmQoKSBjb25zdDsKICAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVu
dGVyQmFja2dyb3VuZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWVkaWFTZXNzaW9uUmVzdHJpY3Rp
b25zKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucywg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rpb25zKEhU
TUxNZWRpYUVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucywgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgc2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVsZW1l
bnQmLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucyk7CiAgICAgdm9pZCBwb3N0UmVtb3RlQ29u
dHJvbENvbW1hbmQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgZWxl
bWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgZWxl
bWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKICAgICB2b2lkIHNlbmRNZWRpYVNlc3Np
b25TdGFydE9mSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgc2VuZE1lZGlhU2Vzc2lvbkVuZE9mSW50ZXJydXB0aW9uTm90aWZpY2F0aW9uKGNvbnN0IFN0
cmluZyYpOwotICAgIFN0cmluZyBtZWRpYVNlc3Npb25DdXJyZW50U3RhdGUoTWVkaWFTZXNzaW9u
KikgY29uc3Q7Ci0gICAgZG91YmxlIG1lZGlhRWxlbWVudFBsYXllclZvbHVtZShIVE1MTWVkaWFF
bGVtZW50KikgY29uc3Q7CisgICAgU3RyaW5nIG1lZGlhU2Vzc2lvbkN1cnJlbnRTdGF0ZShNZWRp
YVNlc3Npb24mKSBjb25zdDsKKyAgICBkb3VibGUgbWVkaWFFbGVtZW50UGxheWVyVm9sdW1lKEhU
TUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKICAgICB2b2lkIHNlbmRNZWRpYUNvbnRyb2xFdmVudChj
b25zdCBTdHJpbmcmKTsKICNlbmRpZgogCkBAIC00MzgsNyArNDM1LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVz
dHJpY3Rpb25zKEF1ZGlvQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25zLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoQXVkaW9D
b250ZXh0JiwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnMpOwogI2VuZGlmCiAKICAgICB2b2lk
IHNpbXVsYXRlU3lzdGVtU2xlZXAoKSBjb25zdDsKQEAgLTQ2MSwxNCArNDU4LDE0IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBTdHJpbmcgc2Ny
b2xsU25hcE9mZnNldHMoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgc2Ny
b2xsU25hcE9mZnNldHMoRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAg
U3RyaW5nIHBhdGhTdHJpbmdXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKFZlY3Rvcjxkb3VibGU+IHJl
Y3RDb21wb25lbnRzLCBkb3VibGUgcmFkaXVzLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBTdHJp
bmcgZ2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVtZW50KEhUTUxNZWRpYUVsZW1l
bnQqKTsKKyAgICBTdHJpbmcgZ2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVtZW50
KEhUTUxNZWRpYUVsZW1lbnQmKTsKIAotICAgIFN0cmluZyB1c2VyVmlzaWJsZVN0cmluZyhjb25z
dCBET01VUkwqKTsKKyAgICBTdHJpbmcgdXNlclZpc2libGVTdHJpbmcoY29uc3QgRE9NVVJMJik7
CiAgICAgdm9pZCBzZXRTaG93QWxsUGx1Z2lucyhib29sKTsKIAogICAgIFN0cmluZyByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRm9yT3JpZ2luKFN0cmluZyBvcmlnaW4pOwpAQCAtNDc4LDE2ICs0NzUs
MTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZChTY3JpcHRT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAjZW5kaWYKIAotICAgIFN0cmluZyBjb21wb3NlZFRyZWVB
c1RleHQoTm9kZSopOworICAgIFN0cmluZyBjb21wb3NlZFRyZWVBc1RleHQoTm9kZSYpOwogICAg
IAogICAgIHZvaWQgc2V0Vmlld3BvcnRGb3JjZUFsd2F5c1VzZXJTY2FsYWJsZShib29sKTsKIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBJbnRlcm5hbHMoRG9jdW1lbnQqKTsKKyAgICBleHBsaWNp
dCBJbnRlcm5hbHMoRG9jdW1lbnQmKTsKICAgICBEb2N1bWVudCogY29udGV4dERvY3VtZW50KCkg
Y29uc3Q7CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAKLSAgICBSZW5kZXJlZERvY3VtZW50
TWFya2VyKiBtYXJrZXJBdChOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1h
cmtlckF0KE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yU3R1YkZyb250
ZW5kPiBtX2luc3BlY3RvckZyb250ZW5kOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAppbmRleCA2ZDUzNmI0MDRlMWQwYTdlZDc1OWQ1MjJhZmIyYzM4MjA5MjExM2YwLi5iODVk
ZTQ1ODlmOWZhNGQyNDQ0ZjBjYTY1OGM5MDE4ZTZhZWZlYWFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCkBAIC0yNSw4ICsyNSw4IEBACiAgKi8KIAogZW51bSBQYWdlT3Zlcmxh
eVR5cGUgewotInZpZXciLAotImRvY3VtZW50IgorICAgICJ2aWV3IiwKKyAgICAiZG9jdW1lbnQi
CiB9OwogCiAvLyBUaGVzZSBtYXAgdG8gUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kuCkBAIC02
NCwyNCArNjQsMjMgQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogfTsKIAogWwotICAgIFVz
ZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAotICAgIE5vSW50ZXJm
YWNlT2JqZWN0LAogICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JULAor
ICAgIE5vSW50ZXJmYWNlT2JqZWN0LAogXSBpbnRlcmZhY2UgSW50ZXJuYWxzIHsKICAgICBET01T
dHJpbmcgYWRkcmVzcyhOb2RlIG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4g
bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBE
T01TdHJpbmcgc3R5bGVDaGFuZ2VUeXBlKE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBub2RlTmVl
ZHNTdHlsZVJlY2FsYyhOb2RlIG5vZGUpOworICAgIERPTVN0cmluZyBzdHlsZUNoYW5nZVR5cGUo
Tm9kZSBub2RlKTsKICAgICBET01TdHJpbmcgZGVzY3JpcHRpb24oYW55IHZhbHVlKTsKIAogICAg
IC8vIEFuaW1hdGVkIGltYWdlIHBhdXNpbmcgdGVzdGluZy4KLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSBib29sZWFuIGhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyhFbGVtZW50IGVsZW1lbnQpOworICAg
IGJvb2xlYW4gaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKEVsZW1lbnQgZWxlbWVudCk7CiAKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZWxlbWVudFJlbmRlclRyZWVBc1RleHQoRWxl
bWVudCBlbGVtZW50KTsKICAgICBib29sZWFuIGlzUHJlbG9hZGVkKERPTVN0cmluZyB1cmwpOwog
ICAgIGJvb2xlYW4gaXNMb2FkaW5nRnJvbU1lbW9yeUNhY2hlKERPTVN0cmluZyB1cmwpOwogICAg
IERPTVN0cmluZyB4aHJSZXNwb25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCB4aHIpOwotICAgIGJv
b2xlYW4gaXNTaGFyaW5nU3R5bGVTaGVldENvbnRlbnRzKEVsZW1lbnQgbGlua0EsIEVsZW1lbnQg
bGlua0IpOwotICAgIGJvb2xlYW4gaXNTdHlsZVNoZWV0TG9hZGluZ1N1YnJlc291cmNlcyhFbGVt
ZW50IGxpbmspOworICAgIGJvb2xlYW4gaXNTaGFyaW5nU3R5bGVTaGVldENvbnRlbnRzKEhUTUxM
aW5rRWxlbWVudCBhLCBIVE1MTGlua0VsZW1lbnQgYik7CisgICAgYm9vbGVhbiBpc1N0eWxlU2hl
ZXRMb2FkaW5nU3VicmVzb3VyY2VzKEhUTUxMaW5rRWxlbWVudCBsaW5rKTsKICAgICB2b2lkIGNs
ZWFyTWVtb3J5Q2FjaGUoKTsKICAgICB2b2lkIHBydW5lTWVtb3J5Q2FjaGVUb1NpemUobG9uZyBz
aXplKTsKICAgICBsb25nIG1lbW9yeUNhY2hlU2l6ZSgpOwpAQCAtOTAsMjEgKzg5LDIwIEBAIGVu
dW0gQXV0b0ZpbGxCdXR0b25UeXBlIHsKICAgICB2b2lkIHNldFN0cmljdFJhd1Jlc291cmNlVmFs
aWRhdGlvblBvbGljeURpc2FibGVkKGJvb2xlYW4gZGlzYWJsZWQpOwogCiAgICAgdm9pZCBjbGVh
clBhZ2VDYWNoZSgpOwotICAgIHVuc2lnbmVkIGludCBwYWdlQ2FjaGVTaXplKCk7CisgICAgdW5z
aWduZWQgbG9uZyBwYWdlQ2FjaGVTaXplKCk7CiAKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBDU1NT
dHlsZURlY2xhcmF0aW9uIGNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhOb2RlIG5v
ZGUpOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24gY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKE5vZGUgbm9kZSk7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlIGVuc3VyZVNo
YWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlIGVuc3Vy
ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKKyAgICBOb2RlIGVuc3VyZVVzZXJB
Z2VudFNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2Rl
IGNyZWF0ZVNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBO
b2RlIHNoYWRvd1Jvb3QoRWxlbWVudCBob3N0KTsKKyAgICBOb2RlIHNoYWRvd1Jvb3QoRWxlbWVu
dCBob3N0KTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBzaGFkb3dSb290VHlw
ZShOb2RlIHJvb3QpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIEVsZW1lbnQgaW5jbHVkZXJGb3Io
Tm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgc2hhZG93UHNldWRv
SWQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFNoYWRv
d1BzZXVkb0lkKEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIGlkKTsKLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBOb2RlIHRyZWVTY29wZVJvb3ROb2RlKE5vZGUgbm9kZSk7Ci0gICAgW1JhaXNlc0V4
Y2VwdGlvbl0gTm9kZSBwYXJlbnRUcmVlU2NvcGUoTm9kZSBub2RlKTsKKyAgICBET01TdHJpbmcg
c2hhZG93UHNldWRvSWQoRWxlbWVudCBlbGVtZW50KTsKKyAgICB2b2lkIHNldFNoYWRvd1BzZXVk
b0lkKEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIGlkKTsKKyAgICBOb2RlIHRyZWVTY29wZVJv
b3ROb2RlKE5vZGUgbm9kZSk7CisgICAgTm9kZSBwYXJlbnRUcmVlU2NvcGUoTm9kZSBub2RlKTsK
IAogICAgIC8vIFNwYXRpYWwgTmF2aWdhdGlvbiB0ZXN0aW5nCiAgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdW5zaWduZWQgbG9uZyBsYXN0U3BhdGlhbE5hdmlnYXRpb25DYW5kaWRhdGVDb3VudCgpOwpA
QCAtMTIxLDE2ICsxMTksMTQgQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KERPTVN0
cmluZyBwcm9wZXJ0eU5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50
IGVsZW1lbnQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eSwgdW5yZXN0cmljdGVkIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKIAot
ICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gYXR0YWNoZWQoTm9kZSBub2RlKTsKLQogICAg
IERPTVN0cmluZyB2aXNpYmxlUGxhY2Vob2xkZXIoRWxlbWVudCBlbGVtZW50KTsKLSAgICB2b2lk
IHNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgY29s
b3JWYWx1ZSk7CisgICAgdm9pZCBzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKEhUTUxJbnB1dEVs
ZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIGNvbG9yVmFsdWUpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIERPTVN0cmluZ1tdIGZvcm1Db250cm9sU3RhdGVPZlByZXZpb3VzSGlzdG9yeUl0ZW0oKTsK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEZvcm1Db250cm9sU3RhdGVPZlByZXZpb3Vz
SGlzdG9yeUl0ZW0oc2VxdWVuY2U8RE9NU3RyaW5nPiB2YWx1ZXMpOwogCiAgICAgW1JhaXNlc0V4
Y2VwdGlvbl0gQ2xpZW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAKLSAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBDbGllbnRSZWN0IGJvdW5kaW5nQm94KEVsZW1lbnQgZWxlbWVudCk7CisgICAg
Q2xpZW50UmVjdCBib3VuZGluZ0JveChFbGVtZW50IGVsZW1lbnQpOwogCiAgICAgW1JhaXNlc0V4
Y2VwdGlvbl0gQ2xpZW50UmVjdExpc3QgaW5zcGVjdG9ySGlnaGxpZ2h0UmVjdHMoKTsKICAgICBb
UmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgaW5zcGVjdG9ySGlnaGxpZ2h0T2JqZWN0KCk7CkBA
IC0xNTgsMTAgKzE1NCwxMCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGF2YWlsYWJsZUhlaWdodCk7CiAKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIHdhc0xhc3RDaGFuZ2VVc2VyRWRpdChFbGVtZW50
IHRleHRGaWVsZCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBlbGVtZW50U2hvdWxk
QXV0b0NvbXBsZXRlKEVsZW1lbnQgaW5wdXRFbGVtZW50KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHNldEVkaXRpbmdWYWx1ZShFbGVtZW50IGlucHV0RWxlbWVudCwgRE9NU3RyaW5nIHZh
bHVlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEF1dG9maWxsZWQoRWxlbWVudCBp
bnB1dEVsZW1lbnQsIGJvb2xlYW4gZW5hYmxlZCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBzZXRTaG93QXV0b0ZpbGxCdXR0b24oRWxlbWVudCBpbnB1dEVsZW1lbnQsIEF1dG9GaWxsQnV0
dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUpOworICAgIGJvb2xlYW4gZWxlbWVudFNob3VsZEF1
dG9Db21wbGV0ZShIVE1MSW5wdXRFbGVtZW50IGlucHV0RWxlbWVudCk7CisgICAgdm9pZCBzZXRF
ZGl0aW5nVmFsdWUoSFRNTElucHV0RWxlbWVudCBpbnB1dEVsZW1lbnQsIERPTVN0cmluZyB2YWx1
ZSk7CisgICAgdm9pZCBzZXRBdXRvZmlsbGVkKEhUTUxJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50
LCBib29sZWFuIGVuYWJsZWQpOworICAgIHZvaWQgc2V0U2hvd0F1dG9GaWxsQnV0dG9uKEhUTUxJ
bnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50LCBBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0
b25UeXBlKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGNvdW50TWF0Y2hl
c0ZvclRleHQoRE9NU3RyaW5nIHRleHQsIHVuc2lnbmVkIGxvbmcgZmluZE9wdGlvbnMsIERPTVN0
cmluZyBtYXJrTWF0Y2hlcyk7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgYXV0
b2ZpbGxGaWVsZE5hbWUoRWxlbWVudCBmb3JtQ29udHJvbEVsZW1lbnQpOwpAQCAtMTcwLDExICsx
NjYsMTEgQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogCiAgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQgZWxlbWVudCwgbG9uZyB4LCBsb25n
IHksIGxvbmcgdywgbG9uZyBoKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIFJhbmdlIHJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVsZW1lbnQgc2NvcGUsIGxvbmcgcmFuZ2VMb2NhdGlvbiwg
bG9uZyByYW5nZUxlbmd0aCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBs
b2NhdGlvbkZyb21SYW5nZShFbGVtZW50IHNjb3BlLCBSYW5nZSByYW5nZSk7Ci0gICAgW1JhaXNl
c0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCBzY29wZSwg
UmFuZ2UgcmFuZ2UpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyByYW5nZUFzVGV4
dChSYW5nZSByYW5nZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gUmFuZ2Ugc3VicmFuZ2UoUmFu
Z2UgcmFuZ2UsIGxvbmcgcmFuZ2VMb2NhdGlvbiwgbG9uZyByYW5nZUxlbmd0aCk7CisgICAgUmFu
Z2UgcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCBzY29wZSwgbG9uZyByYW5nZUxv
Y2F0aW9uLCBsb25nIHJhbmdlTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvY2F0aW9uRnJv
bVJhbmdlKEVsZW1lbnQgc2NvcGUsIFJhbmdlIHJhbmdlKTsKKyAgICB1bnNpZ25lZCBsb25nIGxl
bmd0aEZyb21SYW5nZShFbGVtZW50IHNjb3BlLCBSYW5nZSByYW5nZSk7CisgICAgRE9NU3RyaW5n
IHJhbmdlQXNUZXh0KFJhbmdlIHJhbmdlKTsKKyAgICBSYW5nZSBzdWJyYW5nZShSYW5nZSByYW5n
ZSwgbG9uZyByYW5nZUxvY2F0aW9uLCBsb25nIHJhbmdlTGVuZ3RoKTsKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBSYW5nZSByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGxvbmcgeCwg
bG9uZyB5KTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RGVsZWdhdGVzU2Nyb2xs
aW5nKGJvb2xlYW4gZW5hYmxlZCk7CkBAIC0yMTksNyArMjE1LDcgQEAgZW51bSBBdXRvRmlsbEJ1
dHRvblR5cGUgewogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBpc1BhZ2VCb3hWaXNp
YmxlKGxvbmcgcGFnZU51bWJlcik7CiAKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBs
b25nIGltYWdlRnJhbWVJbmRleChFbGVtZW50IGVsZW1lbnQpOworICAgIHVuc2lnbmVkIGxvbmcg
aW1hZ2VGcmFtZUluZGV4KEhUTUxJbWFnZUVsZW1lbnQgZWxlbWVudCk7CiAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgSW50ZXJuYWxTZXR0aW5ncyBzZXR0aW5nczsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyB3b3JrZXJUaHJlYWRDb3VudDsKQEAgLTMzNSwxNyArMzMxLDE3
IEBAIGVudW0gQXV0b0ZpbGxCdXR0b25UeXBlIHsKIAogICAgIC8vIHxub2RlfCBzaG91bGQgYmUg
RG9jdW1lbnQsIEhUTUxJRnJhbWVFbGVtZW50LCBvciB1bnNwZWNpZmllZC4KICAgICAvLyBJZiB8
bm9kZXwgaXMgYW4gSFRNTElGcmFtZUVsZW1lbnQsIGl0IGFzc3VtZXMgbm9kZS5jb250ZW50RG9j
dW1lbnQgaXMKLSAgICAvLyBzcGVjaWZpZWQgd2l0aG91dCBzZWN1cml0eSBjaGVja3MuIFVuc3Bl
Y2lmaWVkIG1lYW5zIHRoaXMgZG9jdW1lbnQuCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Qb3N0TGF5b3V0VGFza3Mo
b3B0aW9uYWwgTm9kZSBub2RlKTsKKyAgICAvLyBzcGVjaWZpZWQgd2l0aG91dCBzZWN1cml0eSBj
aGVja3MuIFVuc3BlY2lmaWVkIG9yIG51bGwgbWVhbnMgdGhpcyBkb2N1bWVudC4KKyAgICBbUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0Fu
ZFJ1blBvc3RMYXlvdXRUYXNrcyhvcHRpb25hbCBOb2RlPyBub2RlKTsKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxheW91dENvdW50OwogCiAgICAgLy8gUmV0dXJucyBh
IHN0cmluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb3VzZSBjdXJzb3IgdXNlZCBhdCB0
aGUgc3BlY2lmaWVkIGNsaWVudCBsb2NhdGlvbi4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01T
dHJpbmcgZ2V0Q3VycmVudEN1cnNvckluZm8oKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIERP
TVN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCBlbGVtZW50KTsKKyAgICBET01T
dHJpbmcgbWFya2VyVGV4dEZvckxpc3RJdGVtKEVsZW1lbnQgZWxlbWVudCk7CiAKLSAgICBbUmFp
c2VzRXhjZXB0aW9uXSBET01TdHJpbmcgdG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQgZWxlbWVu
dCk7CisgICAgRE9NU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwog
CiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVmZmVy
IGJ1ZmZlcik7CiAgICAgQXJyYXlCdWZmZXIgc2VyaWFsaXplT2JqZWN0KFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBvYmopOwpAQCAtMzU5LDE0ICszNTUsMTQgQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5
cGUgewogCiAgICAgdm9pZCBlbmFibGVBdXRvU2l6ZU1vZGUoYm9vbGVhbiBlbmFibGVkLCBsb25n
IG1pbmltdW1XaWR0aCwgbG9uZyBtaW5pbXVtSGVpZ2h0LCBsb25nIG1heGltdW1XaWR0aCwgbG9u
ZyBtYXhpbXVtSGVpZ2h0KTsKIAotICAgIFtDb25kaXRpb25hbD1WSURFT10gdm9pZCBzaW11bGF0
ZUF1ZGlvSW50ZXJydXB0aW9uKE5vZGUgbm9kZSk7Ci0gICAgW0NvbmRpdGlvbmFsPVZJREVPLCBS
YWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gbWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMoTm9k
ZSBub2RlLCBET01TdHJpbmcgY2hhcmFjdGVyaXN0aWMpOworICAgIFtDb25kaXRpb25hbD1WSURF
T10gdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVu
dCk7CisgICAgW0NvbmRpdGlvbmFsPVZJREVPLCBSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gbWVk
aWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMoSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50LCBET01T
dHJpbmcgY2hhcmFjdGVyaXN0aWMpOwogCiAgICAgW0NvbmRpdGlvbmFsPUVOQ1JZUFRFRF9NRURJ
QV9WMl0gdm9pZCBpbml0aWFsaXplTW9ja0NETSgpOwogCiAgICAgW0NvbmRpdGlvbmFsPVNQRUVD
SF9TWU5USEVTSVNdIHZvaWQgZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVyKCk7CiAKLSAgICBb
UmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0SW1hZ2VTb3VyY2VVUkwoRWxlbWVudCBlbGVt
ZW50KTsKKyAgICBET01TdHJpbmcgZ2V0SW1hZ2VTb3VyY2VVUkwoRWxlbWVudCBlbGVtZW50KTsK
IAogICAgIFtDb25kaXRpb25hbD1WSURFT19UUkFDSywgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJp
bmcgY2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9f
VFJBQ0ssIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRDYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlk
ZShET01TdHJpbmcgb3ZlcnJpZGUpOwpAQCAtMzc3LDE0ICszNzMsMTQgQEAgZW51bSBBdXRvRmls
bEJ1dHRvblR5cGUgewogICAgICBlbmRUaW1lcyk7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB1
bnJlc3RyaWN0ZWQgZG91YmxlIGNsb3Nlc3RUaW1lVG9UaW1lUmFuZ2VzKHVucmVzdHJpY3RlZCBk
b3VibGUgdGltZSwgVGltZVJhbmdlcyByYW5nZXMpOwogCi0gICAgYm9vbGVhbiBpc1NlbGVjdFBv
cHVwVmlzaWJsZShOb2RlIG5vZGUpOworICAgIGJvb2xlYW4gaXNTZWxlY3RQb3B1cFZpc2libGUo
SFRNTFNlbGVjdEVsZW1lbnQgZWxlbWVudCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9WSUJSQVRJ
T04pICYmIEVOQUJMRV9WSUJSQVRJT04KICAgICBib29sZWFuIGlzVmlicmF0aW5nKCk7CiAjZW5k
aWYKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaXNQbHVnaW5VbmF2YWlsYWJpbGl0
eUluZGljYXRvck9ic2N1cmVkKEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlv
bl0gYm9vbGVhbiBpc1BsdWdpblNuYXBzaG90dGVkKEVsZW1lbnQgZWxlbWVudCk7CisgICAgYm9v
bGVhbiBpc1BsdWdpblNuYXBzaG90dGVkKEVsZW1lbnQgZWxlbWVudCk7CiAKICAgICBbUmFpc2Vz
RXhjZXB0aW9uXSBDbGllbnRSZWN0IHNlbGVjdGlvbkJvdW5kcygpOwogCkBAIC00MDIsOCArMzk4
LDggQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogICAgIFtDb25kaXRpb25hbD1WSURFT10g
dm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyRm9yZWdyb3VuZCgpOwogICAgIFtDb25kaXRpb25hbD1W
SURFT10gdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQoKTsKICAgICBbQ29uZGl0
aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRNZWRpYVNlc3Npb25SZXN0cmlj
dGlvbnMoRE9NU3RyaW5nIG1lZGlhVHlwZSwgRE9NU3RyaW5nIHJlc3RyaWN0aW9ucyk7Ci0gICAg
W0NvbmRpdGlvbmFsPVZJREVPLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0TWVkaWFFbGVtZW50
UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJlc3RyaWN0
aW9ucyk7Ci0gICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQgY29udGV4dCwgRE9NU3Ry
aW5nIHJlc3RyaWN0aW9ucyk7CisgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2b2lkIHNldE1lZGlh
RWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVkaWFFbGVtZW50IGVsZW1lbnQsIERPTVN0cmluZyBy
ZXN0cmljdGlvbnMpOworICAgIFtDb25kaXRpb25hbD1XRUJfQVVESU9dIHZvaWQgc2V0QXVkaW9D
b250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCBjb250ZXh0LCBET01TdHJpbmcgcmVzdHJp
Y3Rpb25zKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBw
b3N0UmVtb3RlQ29udHJvbENvbW1hbmQoRE9NU3RyaW5nIGNvbW1hbmQpOwogICAgIFtDb25kaXRp
b25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHZvaWQgc2V0TW9ja01lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW0NvbmRpdGlvbmFsPVdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldE1vY2tNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyU3RhdGUoRE9NU3RyaW5nIGRldmljZU5hbWUsIERPTVN0cmlu
ZyBkZXZpY2VTdGF0ZSk7CkBAIC00MTEsNyArNDA3LDcgQEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5
cGUgewogCiAgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2b2lkIHNpbXVsYXRlU3lzdGVtU2xlZXAo
KTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2ltdWxhdGVTeXN0ZW1XYWtlKCk7Ci0g
ICAgW0NvbmRpdGlvbmFsPVZJREVPXSBib29sZWFuIGVsZW1lbnRJc0Jsb2NraW5nRGlzcGxheVNs
ZWVwKEVsZW1lbnQgZWxlbWVudCk7CisgICAgW0NvbmRpdGlvbmFsPVZJREVPXSBib29sZWFuIGVs
ZW1lbnRJc0Jsb2NraW5nRGlzcGxheVNsZWVwKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVudCk7CiAK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSBNb2NrUGFnZU92ZXJsYXkgaW5zdGFsbE1vY2tQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheVR5cGUgdHlwZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3Ry
aW5nIHBhZ2VPdmVybGF5TGF5ZXJUcmVlQXNUZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLm1tCmluZGV4IDQ0M2UyZGViNjc1ODgwYjgwYjE2MDZhNTFjZTY3YmEyMzk3MjE0ODkuLjFi
OTkyMWMxMTRkYzE3MDRmMjk0MjJiOTJkOTAzYzAyMDNmNDkzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLm1tCkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU3RyaW5nIEludGVybmFsczo6dXNlclZpc2libGVTdHJpbmcoY29uc3QgRE9NVVJMKiB1cmwp
CitTdHJpbmcgSW50ZXJuYWxzOjp1c2VyVmlzaWJsZVN0cmluZyhjb25zdCBET01VUkwmIHVybCkK
IHsKLSAgICByZXR1cm4gY29udGV4dERvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLmNsaWVu
dCgpLT51c2VyVmlzaWJsZVN0cmluZyh1cmwtPmhyZWYoKSk7CisgICAgcmV0dXJuIGNvbnRleHRE
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmco
dXJsLmhyZWYoKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmNwcAppbmRleCBmN2M5NzFjODAyZjE2YjE2OTUyMDNjNDAwMmJkNTAw
MWU2ZjcwMDQ4Li43ZjVhNTg1MzgxN2UxZTVlMWYxYzBmNjc5ZTNmYjhkNWQ0MTFmYjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCkBA
IC01MSw3ICs1MSw3IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0KQogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KCpzY3JpcHRDb250ZXh0KSkK
LSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRDb250
ZXh0KSkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pigq
c2NyaXB0Q29udGV4dCkpKSk7CiB9CiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2Jh
bE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFBhZ2UqIHBhZ2UgPSBkb3du
Y2FzdDxEb2N1bWVudD4oc2NyaXB0Q29udGV4dCktPmZyYW1lKCktPnBhZ2UoKTsKLSAgICBJbnRl
cm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUocGFnZSk7CisgICAgSW50ZXJuYWxzOjpyZXNl
dFRvQ29uc2lzdGVudFN0YXRlKCpwYWdlKTsKICAgICBJbnRlcm5hbFNldHRpbmdzOjpmcm9tKHBh
Z2UpLT5yZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzYzUyZjE0N2NlNDNi
NmRlMzFjYjhjZTY0NTgyYjM5NTYyY2ZjZjdkLi45OTZiMWIzZjk4OTU2MTJkOTFhNDBjNjQ5NzQx
YWM1MDc4MzI0NmYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDQtMTMgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBVc2VQb2ludGVyc0V2ZW5G
b3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50cyBmcm9tIEludGVybmFscworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NTM5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NvbG9yL2lu
cHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50LWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWw6IFJlbW92
ZWQgdW5uZWVkZWQgdGVzdCBvZiBob3cgdGhlCisgICAgICAgIGludGVybmFscyBvYmplY3QgaGFu
ZGxlcyBpbmNvcnJlY3QgdmFsdWVzIHBhc3NlZCB0byB0aGUgdGVzdCBmdW5jdGlvbi4gVGhpcyB3
YXNuJ3QgdGVzdGluZworICAgICAgICBhY3R1YWwgV2ViS2l0IGNvZGUgYXQgYWxsLCBpdCB3YXMg
anVzdCBhIHRlc3Qgb2YgdGhlIGludGVybmFscyBvYmplY3QgaW1wbGVtZW50YXRpb24uCisKIDIw
MTYtMDQtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENy
YXNoIGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogYm9vbCBXVEY6OnN0YXJ0c1dpdGg8V1RG
OjpTdHJpbmdJbXBsLCBXVEY6OlN0cmluZ0ltcGw+ICsgOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2
ZW50LWV4cGVjdGVkLnR4dAppbmRleCA4OGNkNzEzOWExOGExZjg3MmMzMzQyMDJhZmU1NzY0M2Vm
YzFiOWQyLi4zYzc3ZTEwZDEwMTg4NWI0OTViMjVkNjIwMDU1MWRmNTQ5NThlMjkzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2
ZW50LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NvbG9yL2lucHV0
LWNvbG9yLW9uY2hhbmdlLWV2ZW50LWV4cGVjdGVkLnR4dApAQCAtNSw5ICs1LDYgQEAgT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUKIAogCiBQQVNTIG9uQ2hhbmdlQ291bnQgaXMgMAotaW50ZXJuYWxz
LnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoe30sICcjZmYwMDAwJyk7Ci1pbnRlcm5hbHMuc2Vs
ZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcihkb2N1bWVudCwgJyNmZjAwMDAnKTsKLVBBU1Mgb25DaGFu
Z2VDb3VudCBpcyAwCiBpbnB1dCBldmVudCBkaXNwYXRjaGVkIC0gdmFsdWUgaXM6ICAjZmYwMDAw
CiBjaGFuZ2UgZXZlbnQgZGlzcGF0Y2hlZCAtIHZhbHVlIGNoYW5nZWQgdG8gI2ZmMDAwMAogUEFT
UyBvbkNoYW5nZUNvdW50IGlzIDEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Y29sb3IvaW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvY29sb3IvaW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQuaHRtbAppbmRleCBjYjY0M2Ew
MGI5OTgxZmJiNzUwNzZjN2Q4MTJlY2VkMGY5ZGQ5MWQ2Li45Zjc3OTg4ODBmZDE4MGI2NTg4YTA1
NGFlZjhiNzdiMjU4YjI5MjgzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Nv
bG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC5odG1sCkBAIC0zNSwxMCAr
MzUsNiBAQCBldmVudFNlbmRlci5tb3VzZURvd24oKTsKIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
IAogc2hvdWxkQmUoJ29uQ2hhbmdlQ291bnQnLCAnMCcpOwotLy8gVGVzdCB0aGF0IGluY29ycmVj
dCBlbGVtZW50IGFyZ3VtZW50cyBhcmUgKG5vdCkgaGFuZGxlZC4KLWV2YWxBbmRMb2coImludGVy
bmFscy5zZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKHt9LCAnI2ZmMDAwMCcpOyIpOwotZXZhbEFu
ZExvZygiaW50ZXJuYWxzLnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoZG9jdW1lbnQsICcjZmYw
MDAwJyk7Iik7Ci1zaG91bGRCZSgnb25DaGFuZ2VDb3VudCcsICcwJyk7CiAKIC8vIGlucHV0Lm9u
Y2hhbmdlIHNob3VsZCBiZSBjYWxsZWQKIGludGVybmFscy5zZWxlY3RDb2xvckluQ29sb3JDaG9v
c2VyKGlucHV0LCAnI2ZmMDAwMCcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276327</attachid>
            <date>2016-04-13 09:25:06 -0700</date>
            <delta_ts>2016-04-13 21:43:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156539-20160413092517.patch</filename>
            <type>text/plain</type>
            <size>105754</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE3ZTljM2ExN2ZhOWM5
ZTc5Y2U0YTRmYjZhNjhjZWZkYTlmNGE0YS4uYzEyZmQ4MmZjYWVhNDc3MTI0NGZmZWE3OTdmNzBh
YWMyOTZjMDdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0wNC0xMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFVzZVBvaW50ZXJz
RXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzIGZyb20gSW50ZXJuYWxzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY1MzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTEltYWdl
RWxlbWVudC5pZGw6IEV4cG9ydGVkIHRoaXMgc28gaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHR5cGUg
Zm9yCisgICAgICAgIGEgZnVuY3Rpb24gYXJndW1lbnQgaW4gSW50ZXJuYWxzLmlkbC4KKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5pZGw6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaWRsOiBEaXR0by4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0dWJGcm9udGVuZDo6SW5zcGVjdG9yU3R1YkZyb250ZW5k
KTogVGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGUpOiBU
YWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29u
c2lzdGVudFN0YXRlKTogVGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpJbnRlcm5hbHMpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXR0aW5ncyk6IFVzZSBudWxscHRyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6YWRkcmVzcyk6IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6bm9kZU5lZWRzU3R5bGVSZWNhbGMpOiBUYWtlIGEgTm9kZSYgYW5kIG5vIEV4
Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5
cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6eGhyUmVzcG9uc2VTb3Vy
Y2UpOiBUYWtlIGFuIFhNTEh0dHBSZXF1ZXN0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6aXNTaGFyaW5nU3R5bGVTaGVldENvbnRlbnRzKTogVGFrZSB0d28KKyAgICAgICAgSFRNTExp
bmtFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTdHlsZVNoZWV0TG9h
ZGluZ1N1YnJlc291cmNlcyk6IFRha2UgYW4gSFRNTExpbmtFbGVtZW50Ji4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6aW1hZ2VGcmFtZUluZGV4KTogVGFrZSBhbiBIVE1MSW1hZ2VFbGVt
ZW50JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuIEFsc28gcmV0dXJuIGFuIHVuc2ln
bmVkIHJhdGhlciB0aGFuIHNpemVfdCwgc2luY2UgdGhlIElETCBleHBlY3RzCisgICAgICAgIHVu
c2lnbmVkIGxvbmcsIHdoaWNoIG1lYW5zIHVuc2lnbmVkIGluIEMrKyBjb2RlLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZSk6IFRha2UgYSBOb2RlJiBhbmQg
bm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhcmVudFRy
ZWVTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6YXR0YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpl
bGVtZW50UmVuZGVyVHJlZUFzVGV4dCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6Omhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyk6IFRha2UgYW4gRWxlbWVu
dCYgYW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOiBUYWtlIGEgTm9kZSYg
YW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjplbnN1cmVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVu
dCYgYW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4
Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dSb290VHlw
ZSk6IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aW5jbHVkZXJG
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dQc2V1ZG9J
ZCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzZXRTaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp2aXNpYmxlUGxhY2Vob2xkZXIpOiBUYWtlIGFuIEVsZW1lbnQmLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKTog
VGFrZSBhbiBIVE1MSW5wdXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
Ym91bmRpbmdCb3gpOiBUYWtlIGFuIEVsZW1lbnQmIGFuZCBubyBFeGNlcHRpb25Db2RlJi4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKTogVGFrZSBhIE5v
ZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJBdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFkZFRleHRNYXRjaE1hcmtlcik6IFRh
a2UgYSBjb25zdCBSYW5nZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNjcm9s
bFZpZXdQb3NpdGlvbik6IFRha2UgaW50IGluc3RlYWQgb2YgbG9uZzsgbG9uZyBpbgorICAgICAg
ICBJREwgbWVhbnMgaW50IGluIEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
Ojp3YXNMYXN0Q2hhbmdlVXNlckVkaXQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjplbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKTogVGFrZSBhbiBIVE1M
SW5wdXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0RWRpdGluZ1Zh
bHVlKTogVGFrZSBhbiBIVE1MSW5wdXRFbGVtZW50JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9u
Q29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEF1dG9maWxsZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0U2hvd0F1dG9GaWxsQnV0dG9uKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3Qp
OiBUYWtlIGFuIEVsZW1lbnQmIGFuZCBpbnQgaW5zdGVhZCBvZiBsb25nLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjphdXRvZmlsbEZpZWxkTmFtZSk6IFRha2UgYW4gRWxlbWVudCYuCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKTog
VGFrZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZSk6IFRha2UgYW4gRWxlbWVudCYgYW5kIGNvbnN0
IFJhbmdlJiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KTogVGFrZSBjb25zdCBSYW5nZSYgYW4gbm8gRXhjZXB0
aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogVGFrZSBS
YW5nZSYgYW4gbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
Om5vZGVzRnJvbVJlY3QpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpvcGVuRHVtbXlJbnNwZWN0b3JGcm9udGVuZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
ZGlzcGxheUxpc3RGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpjb3VudGVyVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cGFnZU51bWJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6d2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudCk6IFJldHVybiB1bnNpZ25lZCBpbnN0ZWFkIG9m
IHVuc2lnbmVkIGxvbmcuCisgICAgICAgIElETCB1bnNpZ25lZCBsb25nIG1lYW5zIHVuc2lnbmVk
IGluIEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZVJlY2FsY0Nv
dW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvbXBvc2l0aW5nVXBk
YXRlQ291bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZGVzZXJpYWxp
emVCdWZmZXIpOiBUYWtlIGFuIEFycmF5QnVmZmVyJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTogVGFrZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhj
ZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJj
ZVVSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaW11bGF0ZUF1ZGlv
SW50ZXJydXB0aW9uKTogVGFrZSBhbiBIVE1MTWVkaWFFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2libGUpOiBUYWtlIGFu
IEhUTUxTZWxlY3RFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y2xvc2Vz
dFRpbWVUb1RpbWVSYW5nZXMpOiBUYWtlIGEgVGltZVJhbmdlJi4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVkKTogVGFr
ZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5TbmFw
c2hvdHRlZCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKTogVGFrZSBh
IFNvdXJjZUJ1ZmZlciYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNob3VsZEdl
bmVyYXRlVGltZXN0YW1wcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpz
ZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbGVtZW50SXNCbG9ja2luZ0Rpc3BsYXlTbGVl
cCk6IFRha2UgYW4gSFRNTE1lZGlhRWxlbWVudCYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyk6IFRha2UgYW4gQXVkaW9Db250ZXh0Ji4K
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsU25hcE9mZnNldHMpOiBUYWtlIGFu
IEVsZW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFD
b250cm9sc1N0YXR1c0ZvckVsZW1lbnQpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VyVmlzaWJsZVN0cmluZyk6IFRha2UgYSBjb25z
dCBET01VUkwmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjb21wb3NlZFRyZWVBc1Rl
eHQpOiBUYWtlIGEgTm9kZSYuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOiBVcGRh
dGUgZm9yIGFsbCB0aGUgY2hhbmdlcyBsaXN0ZWQgYWJvdmUuCisKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFscy5pZGw6IFJlbW92ZWQgVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmpl
Y3RBcmd1bWVudHMuIFJlbW92ZWQKKyAgICAgICAgbWFueSB1bm5lZWRlZCBbUmFpc2VzRXhjZXB0
aW9uXS4gVXNlZCBtb3JlIHNwZWNpZmljIHR5cGVzIGZvciBtYW55IGFyZ3VtZW50cy4gUmVtb3Zl
ZAorICAgICAgICB1bnVzZWQsIGFuZCB1bmltcGxlbWVudGVkLCBhdHRhY2hlZCBhbmQgaW5jbHVk
ZWRGb3IgZnVuY3Rpb25zLiBNYWRlIHRoZSBub2RlIGFyZ3VtZW50IHRvCisgICAgICAgIHVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyBudWxs
YWJsZSBhcyB3ZWxsIGFzIG9wdGlvbmFsLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
bW06CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnVzZXJWaXNpYmxlU3RyaW5nKTogVGFr
ZSBhIGNvbnN0IERPTVVSTCYuCisKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09i
amVjdCk6IFBhc3MgYSBEb2N1bWVudCYgcmF0aGVyIHRoYW4gYSBEb2N1bWVudCouCisgICAgICAg
IChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KTogUGFzcyBhIFBhZ2Um
IHJhdGhlciB0aGFuIGEgUGFnZSouCisKIDIwMTYtMDQtMTMgIEZyZWRlcmljIFdhbmcgIDxmd2Fu
Z0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEZpeCB0d28gY29kaW5nIG1pc3Rha2VzIGluIE1hdGhN
TElubGluZUNvbnRhaW5lckVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5pZGwKaW5kZXggY2Y4ZmI4ZGNmOTMzYzI4MDM4YzE2MzRiYWJl
ZmJjMmZlOWQzZDFjNC4uOTEzYzQ1ZGQ1ZDM4M2RkMTgzZjI4NTk0MTdkMzkyOTk0MzFmMGJlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCkBAIC0xOSw2ICsxOSw3
IEBACiAgKi8KIAogWworICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JU
LAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKIF0gaW50ZXJmYWNlIEhUTUxJbWFnZUVs
ZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcg
bmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCmluZGV4IDBjMGI1
ZDkwODhjMjUwMThlODUzZTk1ZmNhNjUxZjg5NTNhMjMzNjMuLmQ2YjA4OTY2ZmQwOTYwYTczYzAx
YjAyOTMyOTRmZDMwYzQ1YmRmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmlkbApAQCAtMTksNyArMTksMTAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLWludGVyZmFjZSBIVE1MSW5wdXRFbGVtZW50IDogSFRNTEVsZW1lbnQgeworWwor
ICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JULAorICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKK10gaW50ZXJmYWNlIEhUTUxJbnB1dEVsZW1lbnQgOiBIVE1MRWxl
bWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWNjZXB0OwogICAgIFtS
ZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFsdDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGF1dG9jb21wbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtF
bGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmlkbAppbmRl
eCBlZDRiMTI4MWM3YmY2NDdhM2QyOWMyOTI2NzQ4ZDJkYzdlOTljMDdhLi41NDBmNzZlYzk4ODky
NDUzMzViMjkzMGQyY2M2ZGJiMjUzMTAzYzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxMaW5rRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuaWRsCkBAIC0xOSw3ICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotaW50ZXJmYWNlIEhUTUxMaW5rRWxlbWVudCA6IEhUTUxFbGVtZW50IHsK
K1sKKyAgICBFeHBvcnRNYWNybz1XRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCwKKyAgICBKU0dl
bmVyYXRlVG9OYXRpdmVPYmplY3QsCitdIGludGVyZmFjZSBIVE1MTGlua0VsZW1lbnQgOiBIVE1M
RWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIGRpc2FibGVkOwogICAg
IFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNoYXJzZXQ7CiAgICAgW1JlZmxlY3QsIFVS
TF0gYXR0cmlidXRlIERPTVN0cmluZyBocmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmlkbAppbmRleCAzM2ZiMDYzMDlhNTE5YjUyY2ExYWM0NzZiOWE1YjAyZTZmZjM4
NGMzLi4xYmI2MDYxNTQyYjIyM2JkNGUwZjgyNmRiYTY3MjFhMDM5MmU5OGU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbApAQCAtMjAsNiArMjAsOCBAQAogCiBb
CiAgICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKKyAgICBFeHBvcnRNYWNybz1XRUJDT1JFX1RFU1RT
VVBQT1JUX0VYUE9SVCwKKyAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFj
ZSBIVE1MU2VsZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICBbUmVmbGVjdF0gYXR0cmli
dXRlIGJvb2xlYW4gYXV0b2ZvY3VzOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBk
aXNhYmxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBhYzBhZWEwMGI4
YjEyYmExNjNjNjgxZmRhZjZjMWE0ZWQ0ZDU3OWQ0Li4yMWQwZjJkNmE2MjAzZTQ2YzY2Nzc3OGE3
MjM0YmQ5ZTE2N2EwYTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0y
NDIsNyArMjQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY2xhc3MgSW5zcGVj
dG9yU3R1YkZyb250ZW5kIDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwsIHB1
YmxpYyBGcm9udGVuZENoYW5uZWwgewogcHVibGljOgotICAgIEluc3BlY3RvclN0dWJGcm9udGVu
ZChQYWdlKiBpbnNwZWN0ZWRQYWdlLCBSZWZQdHI8RE9NV2luZG93PiYmIGZyb250ZW5kV2luZG93
KTsKKyAgICBJbnNwZWN0b3JTdHViRnJvbnRlbmQoUGFnZSYgaW5zcGVjdGVkUGFnZSwgUmVmUHRy
PERPTVdpbmRvdz4mJiBmcm9udGVuZFdpbmRvdyk7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3R1
YkZyb250ZW5kKCk7CiAKICAgICAvLyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCBBUEkKQEAgLTI3
NCwxNiArMjc0LDE1IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciYgbV9mcm9u
dGVuZENvbnRyb2xsZXI7CiB9OwogCi1JbnNwZWN0b3JTdHViRnJvbnRlbmQ6Okluc3BlY3RvclN0
dWJGcm9udGVuZChQYWdlKiBpbnNwZWN0ZWRQYWdlLCBSZWZQdHI8RE9NV2luZG93PiYmIGZyb250
ZW5kV2luZG93KQotICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCgmaW5zcGVjdGVk
UGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBmcm9udGVuZFdpbmRvdy0+ZG9jdW1lbnQoKS0+
cGFnZSgpLCBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OlNl
dHRpbmdzPigpKQorSW5zcGVjdG9yU3R1YkZyb250ZW5kOjpJbnNwZWN0b3JTdHViRnJvbnRlbmQo
UGFnZSYgaW5zcGVjdGVkUGFnZSwgUmVmUHRyPERPTVdpbmRvdz4mJiBmcm9udGVuZFdpbmRvdykK
KyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoJmluc3BlY3RlZFBhZ2UuaW5zcGVj
dG9yQ29udHJvbGxlcigpLCBmcm9udGVuZFdpbmRvdy0+ZG9jdW1lbnQoKS0+cGFnZSgpLCBzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OlNldHRpbmdzPigpKQog
ICAgICwgbV9mcm9udGVuZFdpbmRvdyhmcm9udGVuZFdpbmRvdy5jb3B5UmVmKCkpCiAgICAgLCBt
X2Zyb250ZW5kQ29udHJvbGxlcihmcm9udGVuZFBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
KQogewotICAgIEFTU0VSVF9BUkcoaW5zcGVjdGVkUGFnZSwgaW5zcGVjdGVkUGFnZSk7CiAgICAg
QVNTRVJUX0FSRyhmcm9udGVuZFdpbmRvdywgZnJvbnRlbmRXaW5kb3cpOwogCiAgICAgbV9mcm9u
dGVuZENvbnRyb2xsZXIuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0gICAgaW5z
cGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCh0aGlzKTsK
KyAgICBpbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQo
dGhpcyk7CiB9CiAKIEluc3BlY3RvclN0dWJGcm9udGVuZDo6fkluc3BlY3RvclN0dWJGcm9udGVu
ZCgpCkBAIC0zNTgsNyArMzU3LDcgQEAgc3RhdGljIGJvb2wgbWFya2VyVHlwZXNGcm9tKGNvbnN0
IFN0cmluZyYgbWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUKIAogY29uc3Qg
Y2hhciogSW50ZXJuYWxzOjppbnRlcm5hbHNJZCA9ICJpbnRlcm5hbHMiOwogCi1SZWY8SW50ZXJu
YWxzPiBJbnRlcm5hbHM6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCitSZWY8SW50ZXJuYWxz
PiBJbnRlcm5hbHM6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW50ZXJuYWxzKGRvY3VtZW50KSk7CiB9CkBAIC0zNjcsMjMgKzM2NiwyMSBA
QCBJbnRlcm5hbHM6On5JbnRlcm5hbHMoKQogewogfQogCi12b2lkIEludGVybmFsczo6cmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZShQYWdlKiBwYWdlKQordm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25z
aXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKIHsKLSAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICBwYWdl
LT5zZXRQYWdlU2NhbGVGYWN0b3IoMSwgSW50UG9pbnQoMCwgMCkpOwotICAgIHBhZ2UtPnNldFBh
Z2luYXRpb24oUGFnaW5hdGlvbigpKTsKLSAgICBwYWdlLT5zZXRQYWdpbmF0aW9uTGluZUdyaWRF
bmFibGVkKGZhbHNlKTsKKyAgICBwYWdlLnNldFBhZ2VTY2FsZUZhY3RvcigxLCBJbnRQb2ludCgw
LCAwKSk7CisgICAgcGFnZS5zZXRQYWdpbmF0aW9uKFBhZ2luYXRpb24oKSk7CisgICAgcGFnZS5z
ZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGZhbHNlKTsKIAotICAgIHBhZ2UtPnNldERlZmVy
c0xvYWRpbmcoZmFsc2UpOworICAgIHBhZ2Uuc2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAgICAg
Ci0gICAgcGFnZS0+bWFpbkZyYW1lKCkuc2V0VGV4dFpvb21GYWN0b3IoMS4wZik7CisgICAgcGFn
ZS5tYWluRnJhbWUoKS5zZXRUZXh0Wm9vbUZhY3RvcigxLjBmKTsKICAgICAKLSAgICBGcmFtZVZp
ZXcqIG1haW5GcmFtZVZpZXcgPSBwYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgRnJhbWVW
aWV3KiBtYWluRnJhbWVWaWV3ID0gcGFnZS5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgaWYgKG1h
aW5GcmFtZVZpZXcpIHsKICAgICAgICAgbWFpbkZyYW1lVmlldy0+c2V0SGVhZGVySGVpZ2h0KDAp
OwogICAgICAgICBtYWluRnJhbWVWaWV3LT5zZXRGb290ZXJIZWlnaHQoMCk7Ci0gICAgICAgIHBh
Z2UtPnNldFRvcENvbnRlbnRJbnNldCgwKTsKKyAgICAgICAgcGFnZS5zZXRUb3BDb250ZW50SW5z
ZXQoMCk7CiAgICAgICAgIG1haW5GcmFtZVZpZXctPnNldFVzZUZpeGVkTGF5b3V0KGZhbHNlKTsK
ICAgICAgICAgbWFpbkZyYW1lVmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUoKSk7CiAg
ICAgfQpAQCAtMzkxLDE2ICszODgsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0
ZW50U3RhdGUoUGFnZSogcGFnZSkKICAgICBXZWJDb3JlOjpvdmVycmlkZVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMoVmVjdG9yPFN0cmluZz4oKSk7CiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVz
ZXNPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSk7CiAgICAgV2ViQ29yZTo6U2V0dGluZ3M6OnNldFVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoZmFsc2UpOwotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5zZXRMZWdhY3lQcm9maWxlckVuYWJsZWQoZmFsc2UpOworICAgIHBhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLnNldExlZ2FjeVByb2ZpbGVyRW5hYmxlZChmYWxzZSk7CiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0
Q2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgcGFnZS0+Z3Jv
dXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5zZXRUZXN0aW5nTW9kZShmYWxzZSk7Ci0jZW5kaWYK
LSAgICBpZiAoIXBhZ2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLnRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7Ci0gICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgpLmVk
aXRvcigpLmlzT3ZlcndyaXRlTW9kZUVuYWJsZWQoKSkKLSAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCkuZWRpdG9yKCkudG9nZ2xlT3ZlcndyaXRlTW9kZUVuYWJsZWQoKTsKLSAgICBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGVhclRlc3RpbmdPdmVycmlkZXMoKTsKKyAgICBwYWdlLmdyb3Vw
KCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0Q2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoZW1w
dHlTdHJpbmcoKSk7CisgICAgcGFnZS5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldFRl
c3RpbmdNb2RlKGZhbHNlKTsKKyNlbmRpZgorICAgIGlmICghcGFnZS5tYWluRnJhbWUoKS5lZGl0
b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICBwYWdlLm1h
aW5GcmFtZSgpLmVkaXRvcigpLnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7CisgICAg
aWYgKHBhZ2UubWFpbkZyYW1lKCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKQor
ICAgICAgICBwYWdlLm1haW5GcmFtZSgpLmVkaXRvcigpLnRvZ2dsZU92ZXJ3cml0ZU1vZGVFbmFi
bGVkKCk7CisgICAgcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGVhclRlc3RpbmdPdmVycmlk
ZXMoKTsKICAgICBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2luZ2xldG9uKCkuc2V0RGVmYXVs
dE9yaWdpblF1b3RhKEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCkpOwogI2lmIEVO
QUJMRShWSURFTykKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5yZXNldFJlc3RyaWN0aW9ucygpOwpAQCAtNDE3LDE5ICs0MTQsMTkgQEAgdm9pZCBJbnRl
cm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSogcGFnZSkKICAgICBNb2NrQ29udGVu
dEZpbHRlclNldHRpbmdzOjpyZXNldCgpOwogI2VuZGlmCiAKLSAgICBwYWdlLT5zZXRTaG93QWxs
UGx1Z2lucyhmYWxzZSk7CisgICAgcGFnZS5zZXRTaG93QWxsUGx1Z2lucyhmYWxzZSk7CiAgICAg
CiAjaWYgUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDAwMDAKICAgICBfQVhTU2V0Rm9yY2VBbGxvd1dlYlNjYWxpbmcoZmFsc2UpOwogI2VuZGlm
CiB9CiAKLUludGVybmFsczo6SW50ZXJuYWxzKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGRvY3VtZW50KQorSW50ZXJuYWxzOjpJbnRlcm5hbHMo
RG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoJmRv
Y3VtZW50KQogewogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBpZiAoZG9jdW1lbnQgJiYg
ZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKS5zZXRUZXN0aW5nTW9kZSh0cnVlKTsKKyAgICBpZiAoZG9jdW1lbnQu
cGFnZSgpKQorICAgICAgICBkb2N1bWVudC5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVu
Y2VzKCkuc2V0VGVzdGluZ01vZGUodHJ1ZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCkBAIC00NDIsOCArNDM5LDggQEAgSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQq
IGRvY3VtZW50KQogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQotICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICBkb2N1bWVu
dC0+cGFnZSgpLT5zZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQodHJ1ZSk7
CisgICAgaWYgKGRvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQucGFnZSgpLT5zZXRN
b2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIH0KIApA
QCAtNDYzLDEwICs0NjAsMTAgQEAgSW50ZXJuYWxTZXR0aW5ncyogSW50ZXJuYWxzOjpzZXR0aW5n
cygpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwogICAgIGlmICghcGFn
ZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVy
biBJbnRlcm5hbFNldHRpbmdzOjpmcm9tKHBhZ2UpOwogfQogCkBAIC00NzUsMTkgKzQ3MiwxNCBA
QCB1bnNpZ25lZCBJbnRlcm5hbHM6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKICAgICByZXR1
cm4gV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgpOwogfQogCi1TdHJpbmcgSW50ZXJu
YWxzOjphZGRyZXNzKE5vZGUqIG5vZGUpCitTdHJpbmcgSW50ZXJuYWxzOjphZGRyZXNzKE5vZGUm
IG5vZGUpCiB7Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcCIsIG5vZGUpOworICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXAiLCAmbm9kZSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxzOjpu
b2RlTmVlZHNTdHlsZVJlY2FsYyhOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBleGNlcHRpb24p
Citib29sIEludGVybmFsczo6bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kZSYgbm9kZSkKIHsKLSAg
ICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGUtPm5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICByZXR1cm4gbm9kZS5uZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKIHN0
YXRpYyBTdHJpbmcgc3R5bGVDaGFuZ2VUeXBlVG9TdHJpbmcoU3R5bGVDaGFuZ2VUeXBlIHR5cGUp
CkBAIC01MDgsMTQgKzUwMCw5IEBAIHN0YXRpYyBTdHJpbmcgc3R5bGVDaGFuZ2VUeXBlVG9TdHJp
bmcoU3R5bGVDaGFuZ2VUeXBlIHR5cGUpCiAgICAgcmV0dXJuICIiOwogfQogCi1TdHJpbmcgSW50
ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZXhjZXB0
aW9uKQorU3RyaW5nIEludGVybmFsczo6c3R5bGVDaGFuZ2VUeXBlKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVDaGFuZ2VUeXBl
VG9TdHJpbmcobm9kZS0+c3R5bGVDaGFuZ2VUeXBlKCkpOworICAgIHJldHVybiBzdHlsZUNoYW5n
ZVR5cGVUb1N0cmluZyhub2RlLnN0eWxlQ2hhbmdlVHlwZSgpKTsKIH0KIAogU3RyaW5nIEludGVy
bmFsczo6ZGVzY3JpcHRpb24oRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUpCkBAIC01NDIs
MTMgKzUyOSwxMSBAQCBib29sIEludGVybmFsczo6aXNMb2FkaW5nRnJvbU1lbW9yeUNhY2hlKGNv
bnN0IFN0cmluZyYgdXJsKQogICAgIHJldHVybiByZXNvdXJjZSAmJiByZXNvdXJjZS0+c3RhdHVz
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZDsKIH0KIAotU3RyaW5nIEludGVybmFsczo6eGhy
UmVzcG9uc2VTb3VyY2UoWE1MSHR0cFJlcXVlc3QqIHhocikKK1N0cmluZyBJbnRlcm5hbHM6Onho
clJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGlmICgheGhy
KQotICAgICAgICByZXR1cm4gIk51bGwgeGhyIjsKLSAgICBpZiAoeGhyLT5yZXNvdXJjZVJlc3Bv
bnNlKCkuaXNOdWxsKCkpCisgICAgaWYgKHJlcXVlc3QucmVzb3VyY2VSZXNwb25zZSgpLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gIk51bGwgcmVzcG9uc2UiOwotICAgIHN3aXRjaCAoeGhyLT5y
ZXNvdXJjZVJlc3BvbnNlKCkuc291cmNlKCkpIHsKKyAgICBzd2l0Y2ggKHJlcXVlc3QucmVzb3Vy
Y2VSZXNwb25zZSgpLnNvdXJjZSgpKSB7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3Vy
Y2U6OlVua25vd246CiAgICAgICAgIHJldHVybiAiVW5rbm93biI7CiAgICAgY2FzZSBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms6CkBAIC01NjYsMjMgKzU1MSwxNiBAQCBTdHJpbmcg
SW50ZXJuYWxzOjp4aHJSZXNwb25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCogeGhyKQogICAgIHJl
dHVybiAiRXJyb3IiOwogfQogCi1ib29sIEludGVybmFsczo6aXNTaGFyaW5nU3R5bGVTaGVldENv
bnRlbnRzKEVsZW1lbnQqIGEsIEVsZW1lbnQqIGIpCitib29sIEludGVybmFsczo6aXNTaGFyaW5n
U3R5bGVTaGVldENvbnRlbnRzKEhUTUxMaW5rRWxlbWVudCYgYSwgSFRNTExpbmtFbGVtZW50JiBi
KQogewotICAgIGlmICghaXM8SFRNTExpbmtFbGVtZW50PihhKSB8fCAhaXM8SFRNTExpbmtFbGVt
ZW50PihiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8mIGFMaW5rID0gZG93bmNh
c3Q8SFRNTExpbmtFbGVtZW50PigqYSk7Ci0gICAgYXV0byYgYkxpbmsgPSBkb3duY2FzdDxIVE1M
TGlua0VsZW1lbnQ+KCpiKTsKLSAgICBpZiAoIWFMaW5rLnNoZWV0KCkgfHwgIWJMaW5rLnNoZWV0
KCkpCisgICAgaWYgKCFhLnNoZWV0KCkgfHwgIWIuc2hlZXQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiAmYUxpbmsuc2hlZXQoKS0+Y29udGVudHMoKSA9PSAmYkxpbmsuc2hl
ZXQoKS0+Y29udGVudHMoKTsKKyAgICByZXR1cm4gJmEuc2hlZXQoKS0+Y29udGVudHMoKSA9PSAm
Yi5zaGVldCgpLT5jb250ZW50cygpOwogfQogCi1ib29sIEludGVybmFsczo6aXNTdHlsZVNoZWV0
TG9hZGluZ1N1YnJlc291cmNlcyhFbGVtZW50KiBsaW5rKQorYm9vbCBJbnRlcm5hbHM6OmlzU3R5
bGVTaGVldExvYWRpbmdTdWJyZXNvdXJjZXMoSFRNTExpbmtFbGVtZW50JiBsaW5rKQogewotICAg
IGlmICghaXM8SFRNTExpbmtFbGVtZW50PihsaW5rKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGF1dG8mIGxpbmtFbGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PigqbGluayk7
Ci0gICAgcmV0dXJuIGxpbmtFbGVtZW50LnNoZWV0KCkgJiYgbGlua0VsZW1lbnQuc2hlZXQoKS0+
Y29udGVudHMoKS5pc0xvYWRpbmdTdWJyZXNvdXJjZXMoKTsKKyAgICByZXR1cm4gbGluay5zaGVl
dCgpICYmIGxpbmsuc2hlZXQoKS0+Y29udGVudHMoKS5pc0xvYWRpbmdTdWJyZXNvdXJjZXMoKTsK
IH0KIAogc3RhdGljIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IHN0cmluZ1RvUmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3koY29uc3QgU3RyaW5nJiBwb2xpY3kpCkBAIC02NTYsMTQgKzYzNCw5
IEBAIHVuc2lnbmVkIEludGVybmFsczo6bWVtb3J5Q2FjaGVTaXplKCkgY29uc3QKICAgICByZXR1
cm4gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLnNpemUoKTsKIH0KIAotc2l6ZV90IEludGVybmFs
czo6aW1hZ2VGcmFtZUluZGV4KEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dW5zaWduZWQgSW50ZXJuYWxzOjppbWFnZUZyYW1lSW5kZXgoSFRNTEltYWdlRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpKSB7Ci0gICAg
ICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KCplbGVtZW50KS5jYWNo
ZWRJbWFnZSgpOworICAgIGF1dG8qIGNhY2hlZEltYWdlID0gZWxlbWVudC5jYWNoZWRJbWFnZSgp
OwogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02ODEsMjMg
KzY1NCwxNCBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnBhZ2VDYWNoZVNpemUoKSBjb25zdAogICAg
IHJldHVybiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBhZ2VDb3VudCgpOwogfQogCi1Ob2RlKiBJ
bnRlcm5hbHM6OnRyZWVTY29wZVJvb3ROb2RlKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorTm9kZSogSW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZShOb2RlJiBub2RlKQogewotICAg
IGlmICghbm9kZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuICZub2RlLT50cmVlU2NvcGUoKS5y
b290Tm9kZSgpOworICAgIHJldHVybiAmbm9kZS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogfQog
Ci1Ob2RlKiBJbnRlcm5hbHM6OnBhcmVudFRyZWVTY29wZShOb2RlKiBub2RlLCBFeGNlcHRpb25D
b2RlJiBlYykKK05vZGUqIEludGVybmFsczo6cGFyZW50VHJlZVNjb3BlKE5vZGUmIG5vZGUpCiB7
Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgY29uc3QgVHJlZVNjb3BlKiBwYXJlbnRU
cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKS5wYXJlbnRUcmVlU2NvcGUoKTsKKyAgICBjb25z
dCBUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IG5vZGUudHJlZVNjb3BlKCkucGFyZW50VHJl
ZVNjb3BlKCk7CiAgICAgcmV0dXJuIHBhcmVudFRyZWVTY29wZSA/ICZwYXJlbnRUcmVlU2NvcGUt
PnJvb3ROb2RlKCkgOiBudWxscHRyOwogfQogCkBAIC03NDksMTggKzcxMywxOCBAQCB2b2lkIElu
dGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucyhFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICBk
b2N1bWVudC0+ZnJhbWUoKS0+YW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9ucygpOwogfQogCi1i
b29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK2Jvb2wgSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1l
bnQmIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVudCB8fCBw
YXVzZVRpbWUgPCAwKSB7CisgICAgaWYgKHBhdXNlVGltZSA8IDApIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0
dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQtPnJl
bmRlcmVyKCksIEF0b21pY1N0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKKyAgICBy
ZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudC5y
ZW5kZXJlcigpLCBBdG9taWNTdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CiB9CiAK
LWJvb2wgSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJbnRl
cm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
U3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFlbGVtZW50
IHx8IHBhdXNlVGltZSA8IDApIHsKKyAgICBpZiAocGF1c2VUaW1lIDwgMCkgewogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAg
LTc3MCw3ICs3MzQsNyBAQCBib29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBz
ZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVk
b0lkID09ICJiZWZvcmUiID8gZWxlbWVudC0+YmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVu
dC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVu
dCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkg
OiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlmICghcHNldWRvRWxlbWVudCkg
ewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzc5LDE4ICs3NDMsMTggQEAgYm9vbCBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwKICAgICByZXR1
cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUocHNldWRvRWxlbWVu
dC0+cmVuZGVyZXIoKSwgQXRvbWljU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwog
fQogCi1ib29sIEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50KiBlbGVtZW50
LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQmIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVu
dCB8fCBwYXVzZVRpbWUgPCAwKSB7CisgICAgaWYgKHBhdXNlVGltZSA8IDApIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgcmV0dXJuIGZyYW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVt
ZW50LT5yZW5kZXJlcigpLCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7CisgICAgcmV0dXJuIGZy
YW1lKCktPmFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LnJlbmRlcmVy
KCksIHByb3BlcnR5TmFtZSwgcGF1c2VUaW1lKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OnBhdXNl
VHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBk
b3VibGUgcGF1c2VUaW1lLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lk
LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBhdXNlVGlt
ZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8IHBhdXNlVGltZSA8IDApIHsKKyAgICBpZiAo
cGF1c2VUaW1lIDwgMCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTgwMCw3ICs3NjQsNyBAQCBib29sIEludGVybmFs
czo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJv
cGVydHksIGRvdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUHNldWRvRWxl
bWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC0+YmVm
b3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAg
UHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxl
bWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgp
OwogICAgIGlmICghcHNldWRvRWxlbWVudCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNT
X0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODA5LDI3ICs3NzMsMTEgQEAgYm9vbCBJ
bnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJp
bmcmIHByb3BlcnR5LCBkb3UKICAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VU
cmFuc2l0aW9uQXRUaW1lKHBzZXVkb0VsZW1lbnQtPnJlbmRlcmVyKCksIHByb3BlcnR5LCBwYXVz
ZVRpbWUpOwogfQogCi0vLyBGSVhNRTogUmVtb3ZlLgotYm9vbCBJbnRlcm5hbHM6OmF0dGFjaGVk
KE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6ZWxlbWVu
dFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgZWxl
bWVudC5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotU3RyaW5nIEludGVybmFs
czo6ZWxlbWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgZWxlbWVudC0+
ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICBTdHJpbmcgcmVwcmVzZW50
YXRpb24gPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKGVsZW1lbnQpOworICAgIFN0cmluZyByZXBy
ZXNlbnRhdGlvbiA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oJmVsZW1lbnQpOwogICAgIGlmIChy
ZXByZXNlbnRhdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTgzOCw3NCArNzg2LDQ4IEBAIFN0cmlu
ZyBJbnRlcm5hbHM6OmVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KEVsZW1lbnQqIGVsZW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByZXByZXNlbnRhdGlvbjsKIH0KIAotYm9vbCBJ
bnRlcm5hbHM6Omhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyhFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK2Jvb2wgSW50ZXJuYWxzOjpoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMo
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aGFzUGF1c2Vk
SW1hZ2VBbmltYXRpb25zKCk7CisgICAgcmV0dXJuIGVsZW1lbnQucmVuZGVyZXIoKSAmJiBlbGVt
ZW50LnJlbmRlcmVyKCktPmhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucygpOwogfQogCi1SZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBJbnRlcm5hbHM6OmNvbXB1dGVkU3R5bGVJbmNs
dWRpbmdWaXNpdGVkSW5mbyhOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1Jl
ZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IEludGVybmFsczo6Y29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKE5vZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFub2Rl
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KICAgICBib29sIGFsbG93VmlzaXRlZFN0eWxlID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobm9kZSwgYWxsb3dWaXNp
dGVkU3R5bGUpOworICAgIHJldHVybiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZSgmbm9kZSwgYWxsb3dWaXNpdGVkU3R5bGUpOwogfQogCi1Ob2RlKiBJbnRlcm5hbHM6OmVuc3Vy
ZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMpCitOb2RlKiBJbnRl
cm5hbHM6OmVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgaWYgKCFob3N0KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9v
dCA9IGhvc3QtPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IGhvc3Quc2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gc2hhZG93Um9vdDsKIAotICAgIHJl
dHVybiBob3N0LT5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKKyAgICByZXR1cm4gaG9zdC5j
cmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKIH0KIAotTm9kZSogSW50ZXJuYWxzOjplbnN1cmVV
c2VyQWdlbnRTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9k
ZSogSW50ZXJuYWxzOjplbnN1cmVVc2VyQWdlbnRTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7
Ci0gICAgaWYgKCFob3N0KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuICZob3N0LT5lbnN1cmVVc2Vy
QWdlbnRTaGFkb3dSb290KCk7CisgICAgcmV0dXJuICZob3N0LmVuc3VyZVVzZXJBZ2VudFNoYWRv
d1Jvb3QoKTsKIH0KIAotTm9kZSogSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQq
IGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSogSW50ZXJuYWxzOjpjcmVhdGVTaGFkb3dS
b290KEVsZW1lbnQmIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghaG9zdCkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiBob3N0LT5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKKyAgICBy
ZXR1cm4gaG9zdC5jcmVhdGVTaGFkb3dSb290KGVjKS5nZXQoKTsKIH0KIAotTm9kZSogSW50ZXJu
YWxzOjpzaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSog
SW50ZXJuYWxzOjpzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpCiB7Ci0gICAgaWYgKCFob3N0KSB7
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgcmV0dXJuIGhvc3QtPnNoYWRvd1Jvb3QoKTsKKyAgICByZXR1cm4gaG9z
dC5zaGFkb3dSb290KCk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNv
bnN0IE5vZGUqIHJvb3QsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIEludGVybmFs
czo6c2hhZG93Um9vdFR5cGUoY29uc3QgTm9kZSYgcm9vdCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiB7CiAgICAgaWYgKCFpczxTaGFkb3dSb290Pihyb290KSkgewogICAgICAgICBlYyA9IElO
VkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAotICAg
IHN3aXRjaCAoZG93bmNhc3Q8U2hhZG93Um9vdD4oKnJvb3QpLnR5cGUoKSkgeworICAgIHN3aXRj
aCAoZG93bmNhc3Q8U2hhZG93Um9vdD4ocm9vdCkudHlwZSgpKSB7CiAgICAgY2FzZSBTaGFkb3dS
b290OjpUeXBlOjpVc2VyQWdlbnQ6CiAgICAgICAgIHJldHVybiBTdHJpbmcoIlVzZXJBZ2VudFNo
YWRvd1Jvb3QiKTsKICAgICBjYXNlIFNoYWRvd1Jvb3Q6OlR5cGU6OkNsb3NlZDoKQEAgLTkxOCwz
MCArODQwLDE0IEBAIFN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUq
IHJvb3QsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgIH0KIH0KIAotRWxlbWVudCogSW50
ZXJuYWxzOjppbmNsdWRlckZvcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50
ZXJuYWxzOjpzaGFkb3dQc2V1ZG9JZChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1TdHJpbmcgSW50ZXJu
YWxzOjpzaGFkb3dQc2V1ZG9JZChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudC0+
c2hhZG93UHNldWRvSWQoKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZWxlbWVudC5zaGFkb3dQc2V1
ZG9JZCgpLnN0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6c2V0U2hhZG93UHNldWRvSWQo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIEludGVybmFsczo6c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
U3RyaW5nJiBpZCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElE
X0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVu
dC0+c2V0UHNldWRvKGlkKTsKKyAgICByZXR1cm4gZWxlbWVudC5zZXRQc2V1ZG8oaWQpOwogfQog
CiBib29sIEludGVybmFsczo6aXNUaW1lclRocm90dGxlZChpbnQgdGltZW91dElkLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTk3MSwxMCArODc3LDEwIEBAIGJvb2wgSW50ZXJuYWxzOjphcmVUaW1l
cnNUaHJvdHRsZWQoKSBjb25zdAogICAgIHJldHVybiBjb250ZXh0RG9jdW1lbnQoKS0+aXNUaW1l
clRocm90dGxpbmdFbmFibGVkKCk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnZpc2libGVQbGFj
ZWhvbGRlcihFbGVtZW50KiBlbGVtZW50KQorU3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNl
aG9sZGVyKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICBjb25zdCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCYgdGV4dEZvcm1Db250cm9sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCk7CisgICAgICAgIGNvbnN0IEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50JiB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpOwogICAgICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuaXNQbGFjZWhvbGRlclZpc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAgICAgaWYgKEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LnBsYWNlaG9sZGVyRWxlbWVudCgpKQpAQCAtOTg0LDEyICs4OTAsOSBA
QCBTdHJpbmcgSW50ZXJuYWxzOjp2aXNpYmxlUGxhY2Vob2xkZXIoRWxlbWVudCogZWxlbWVudCkK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZWxlY3RDb2xvcklu
Q29sb3JDaG9vc2VyKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZSkK
K3ZvaWQgSW50ZXJuYWxzOjpzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKEhUTUxJbnB1dEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZSkKIHsKLSAgICBpZiAoIWlzPEhU
TUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgaW5w
dXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpOwotICAgIGlu
cHV0RWxlbWVudC5zZWxlY3RDb2xvcihDb2xvcihjb2xvclZhbHVlKSk7CisgICAgZWxlbWVudC5z
ZWxlY3RDb2xvcihDb2xvcihjb2xvclZhbHVlKSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEludGVy
bmFsczo6Zm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbShFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTEwNjcsMTUgKzk3MCwxMCBAQCBSZWY8Q2xpZW50UmVjdD4gSW50ZXJuYWxzOjph
YnNvbHV0ZUNhcmV0Qm91bmRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBDbGllbnRS
ZWN0OjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRC
b3VuZHMoKSk7CiB9CiAKLVJlZjxDbGllbnRSZWN0PiBJbnRlcm5hbHM6OmJvdW5kaW5nQm94KEVs
ZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmPENsaWVudFJlY3Q+IEludGVy
bmFsczo6Ym91bmRpbmdCb3goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQp
IHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBDbGll
bnRSZWN0OjpjcmVhdGUoKTsKLSAgICB9Ci0KLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LT5yZW5kZXJlcigpOworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBDbGllbnRSZWN0
OjpjcmVhdGUoKTsKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKHJlbmRlcmVyLT5hYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpKTsKQEAgLTExMDUsMzEgKzEw
MDMsMjEgQEAgU3RyaW5nIEludGVybmFsczo6aW5zcGVjdG9ySGlnaGxpZ2h0T2JqZWN0KEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuYnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVzKCktPnRvSlNPTlN0cmluZygp
OwogfQogCi11bnNpZ25lZCBJbnRlcm5hbHM6Om1hcmtlckNvdW50Rm9yTm9kZShOb2RlKiBub2Rl
LCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordW5zaWduZWQg
SW50ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBt
YXJrZXJUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQog
ICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcyA9IDA7CiAgICAgaWYg
KCFtYXJrZXJUeXBlc0Zyb20obWFya2VyVHlwZSwgbWFya2VyVHlwZXMpKSB7CiAgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7
Ci0KLSAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2Rl
LCBtYXJrZXJUeXBlcykuc2l6ZSgpOworICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0
b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CisgICAgcmV0dXJuIG5vZGUuZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigmbm9kZSwgbWFya2VyVHlwZXMpLnNpemUoKTsK
IH0KIAotUmVuZGVyZWREb2N1bWVudE1hcmtlciogSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlKiBu
b2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9k
ZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBub2Rl
LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAg
ICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMgPSAwOwogICAgIGlmICgh
bWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUsIG1hcmtlclR5cGVzKSkgewpAQCAtMTEzNywyMyAr
MTAyNSwyMyBAQCBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBJbnRlcm5hbHM6Om1hcmtlckF0KE5v
ZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLnVwZGF0
ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKKyAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+
ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogCi0gICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0Zvcihub2RlLCBtYXJrZXJUeXBlcyk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKCZub2RlLCBtYXJrZXJUeXBlcyk7CiAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpIDw9IGluZGV4
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRleF07CiB9
CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCitSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUm
IG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtl
ckF0KG5vZGUsIG1hcmtlclR5cGUsIGluZGV4LCBlYyk7CiAgICAgaWYgKCFtYXJrZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZz
ZXQoKSk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpLCAmbm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpLCAmbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7CiB9CiAK
LVN0cmluZyBJbnRlcm5hbHM6Om1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlKiBub2RlLCBj
b25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKK1N0cmluZyBJbnRlcm5hbHM6Om1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiBub2Rl
LCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJBdChu
b2RlLCBtYXJrZXJUeXBlLCBpbmRleCwgZWMpOwogICAgIGlmICghbWFya2VyKQpAQCAtMTE4OCwx
MCArMTA3NiwxMCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpkdW1wTWFya2VyUmVjdHMoY29uc3QgU3Ry
aW5nJiBtYXJrZXJUeXBlU3RyaW5nLCBFeGNlcHRpb25Db2RlJgogICAgIHJldHVybiByZWN0U3Ry
aW5nLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGlzQWN0aXZlKQordm9pZCBJbnRlcm5hbHM6OmFkZFRl
eHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgaXNBY3RpdmUpCiB7Ci0gICAg
cmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKLSAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hN
YXJrZXIocmFuZ2UsIGlzQWN0aXZlKTsKKyAgICByYW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIoJnJhbmdlLCBpc0FjdGl2ZSk7CiB9CiAK
IHZvaWQgSW50ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wg
ZmxhZywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMjA5LDcgKzEwOTcsNyBAQCB2b2lkIEludGVy
bmFsczo6aW52YWxpZGF0ZUZvbnRDYWNoZSgpCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5p
bnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRTY3JvbGxWaWV3UG9zaXRpb24o
bG9uZyB4LCBsb25nIHksIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldFNj
cm9sbFZpZXdQb3NpdGlvbihpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT52aWV3KCkpIHsKQEAgLTEyMjMsNyArMTExMSw3IEBAIHZvaWQgSW50
ZXJuYWxzOjpzZXRTY3JvbGxWaWV3UG9zaXRpb24obG9uZyB4LCBsb25nIHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogCiAgICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZShmYWxzZSk7CiAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxiYXJzU3VwcHJlc3NlZChmYWxz
ZSk7Ci0gICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzKEludFBvaW50
KHgsIHkpKTsKKyAgICBmcmFtZVZpZXctPnNldFNjcm9sbE9mZnNldEZyb21JbnRlcm5hbHMoeyB4
LCB5IH0pOwogICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoc2Nyb2xsYmFy
c1N1cHByZXNzZWRPbGRWYWx1ZSk7CiAgICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZShjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZU9sZFZhbHVl
KTsKIH0KQEAgLTEyOTksNjYgKzExODcsMzEgQEAgU3RyaW5nIEludGVybmFsczo6Y29uZmlndXJh
dGlvbkZvclZpZXdwb3J0KGZsb2F0IGRldmljZVBpeGVsUmF0aW8sIGludCBkZXZpY2VXaWQKICAg
ICByZXR1cm4gInZpZXdwb3J0IHNpemUgIiArIFN0cmluZzo6bnVtYmVyKGF0dHJpYnV0ZXMubGF5
b3V0U2l6ZS53aWR0aCgpKSArICJ4IiArIFN0cmluZzo6bnVtYmVyKGF0dHJpYnV0ZXMubGF5b3V0
U2l6ZS5oZWlnaHQoKSkgKyAiIHNjYWxlICIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLmlu
aXRpYWxTY2FsZSkgKyAiIHdpdGggbGltaXRzIFsiICsgU3RyaW5nOjpudW1iZXIoYXR0cmlidXRl
cy5taW5pbXVtU2NhbGUpICsgIiwgIiArIFN0cmluZzo6bnVtYmVyKGF0dHJpYnV0ZXMubWF4aW11
bVNjYWxlKSArICJdIGFuZCB1c2VyU2NhbGFibGUgIiArIChhdHRyaWJ1dGVzLnVzZXJTY2FsYWJs
ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogfQogCi1ib29sIEludGVybmFsczo6d2FzTGFzdENoYW5n
ZVVzZXJFZGl0KEVsZW1lbnQqIHRleHRGaWVsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIElu
dGVybmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KEVsZW1lbnQmIHRleHRGaWVsZCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCF0ZXh0RmllbGQpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KHRleHRGaWVsZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50Pih0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCi0g
ICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0RmllbGQpKQotICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnRleHRGaWVsZCkubGFzdENoYW5nZVdhc1VzZXJF
ZGl0KCk7Ci0KLSAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4oKnRleHRGaWVsZCkpCi0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50PigqdGV4dEZpZWxkKS5s
YXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4o
dGV4dEZpZWxkKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+
KHRleHRGaWVsZCkubGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiAKICAgICBlYyA9IElOVkFMSURf
Tk9ERV9UWVBFX0VSUjsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJuYWxzOjpl
bGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorYm9vbCBJbnRlcm5hbHM6OmVsZW1lbnRTaG91bGRBdXRvQ29tcGxldGUoSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICBlYyA9IElOVkFM
SURfTk9ERV9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkuc2hvdWxkQXV0b2NvbXBs
ZXRlKCk7CisgICAgcmV0dXJuIGVsZW1lbnQuc2hvdWxkQXV0b2NvbXBsZXRlKCk7CiB9CiAKLXZv
aWQgSW50ZXJuYWxzOjpzZXRFZGl0aW5nVmFsdWUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIEludGVybmFsczo6c2V0RWRpdGlu
Z1ZhbHVlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVu
dCkuc2V0RWRpdGluZ1ZhbHVlKHZhbHVlKTsKKyAgICBlbGVtZW50LnNldEVkaXRpbmdWYWx1ZSh2
YWx1ZSk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRBdXRvZmlsbGVkKEVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIEludGVybmFsczo6c2V0
QXV0b2ZpbGxlZChIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxl
bWVudCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCku
c2V0QXV0b0ZpbGxlZChlbmFibGVkKTsKKyAgICBlbGVtZW50LnNldEF1dG9GaWxsZWQoZW5hYmxl
ZCk7CiB9CiAKIHN0YXRpYyBBdXRvRmlsbEJ1dHRvblR5cGUgc3RyaW5nVG9BdXRvRmlsbEJ1dHRv
blR5cGUoY29uc3QgU3RyaW5nJiBhdXRvRmlsbEJ1dHRvblR5cGUpCkBAIC0xMzczLDQ1ICsxMjI2
LDMwIEBAIHN0YXRpYyBBdXRvRmlsbEJ1dHRvblR5cGUgc3RyaW5nVG9BdXRvRmlsbEJ1dHRvblR5
cGUoY29uc3QgU3RyaW5nJiBhdXRvRmlsbEJ1dHRvCiAgICAgcmV0dXJuIEF1dG9GaWxsQnV0dG9u
VHlwZTo6Tm9uZTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OnNldFNob3dBdXRvRmlsbEJ1dHRvbihF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGF1dG9GaWxsQnV0dG9uVHlwZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIEludGVybmFsczo6c2V0U2hvd0F1dG9GaWxsQnV0dG9uKEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0b25UeXBlKQog
ewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4o
KmVsZW1lbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1l
bnQpLnNldFNob3dBdXRvRmlsbEJ1dHRvbihzdHJpbmdUb0F1dG9GaWxsQnV0dG9uVHlwZShhdXRv
RmlsbEJ1dHRvblR5cGUpKTsKKyAgICBlbGVtZW50LnNldFNob3dBdXRvRmlsbEJ1dHRvbihzdHJp
bmdUb0F1dG9GaWxsQnV0dG9uVHlwZShhdXRvRmlsbEJ1dHRvblR5cGUpKTsKIH0KIAogCi12b2lk
IEludGVybmFsczo6c2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50KiBlbGVtZW50LCBsb25nIHgs
IGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5h
bHM6OnNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCYgZWxlbWVudCwgaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVudCB8fCAh
ZWxlbWVudC0+ZG9jdW1lbnQoKS52aWV3KCkpIHsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBlbGVtZW50LT5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICBm
cmFtZVZpZXctPnNjcm9sbEVsZW1lbnRUb1JlY3QoKmVsZW1lbnQsIEludFJlY3QoeCwgeSwgdywg
aCkpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsRWxlbWVudFRvUmVjdChlbGVtZW50LCB7IHgsIHks
IHcsIGggfSk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OmF1dG9maWxsRmllbGROYW1lKEVsZW1l
bnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6YXV0b2Zp
bGxGaWVsZE5hbWUoRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
aWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oKmVsZW1lbnQpKSB7CisgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVt
ZW50KSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4oKmVsZW1lbnQpLmF1dG9maWxsRGF0YSgpLmZpZWxkTmFtZTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkuYXV0b2ZpbGxEYXRhKCkuZmll
bGROYW1lOwogfQogCiB2b2lkIEludGVybmFsczo6cGFpbnRDb250cm9sVGludHMoRXhjZXB0aW9u
Q29kZSYgZWMpCkBAIC0xNDI2LDYwICsxMjY0LDM1IEBAIHZvaWQgSW50ZXJuYWxzOjpwYWludENv
bnRyb2xUaW50cyhFeGNlcHRpb25Db2RlJiBlYykKICAgICBmcmFtZVZpZXctPnBhaW50Q29udHJv
bFRpbnRzKCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxl
bmd0aCwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCYgc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBp
bnQgcmFuZ2VMZW5ndGgpCiB7Ci0gICAgaWYgKCFzY29wZSkgewotICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIHJhbmdl
TG9jYXRpb24sIHJhbmdlTGVuZ3RoKTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZy
b21Mb2NhdGlvbkFuZExlbmd0aCgmc2NvcGUsIHJhbmdlTG9jYXRpb24sIHJhbmdlTGVuZ3RoKTsK
IH0KIAotdW5zaWduZWQgSW50ZXJuYWxzOjpsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50KiBzY29w
ZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2lnbmVkIEludGVy
bmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5n
ZSkKIHsKLSAgICBpZiAoIXNjb3BlIHx8ICFyYW5nZSkgewotICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAgc2l6ZV90IGxvY2F0
aW9uID0gMDsKICAgICBzaXplX3QgdW51c2VkTGVuZ3RoID0gMDsKLSAgICBUZXh0SXRlcmF0b3I6
OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNjb3BlLCByYW5nZSwgbG9jYXRpb24sIHVu
dXNlZExlbmd0aCk7CisgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21S
YW5nZSgmc2NvcGUsICZyYW5nZSwgbG9jYXRpb24sIHVudXNlZExlbmd0aCk7CiAgICAgcmV0dXJu
IGxvY2F0aW9uOwogfQogCi11bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVt
ZW50KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2ln
bmVkIEludGVybmFsczo6bGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFzY29wZSB8fCAhcmFuZ2UpIHsKLSAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIHNpemVf
dCB1bnVzZWRMb2NhdGlvbiA9IDA7CiAgICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgVGV4dEl0
ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShzY29wZSwgcmFuZ2UsIHVudXNl
ZExvY2F0aW9uLCBsZW5ndGgpOworICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5n
dGhGcm9tUmFuZ2UoJnNjb3BlLCAmcmFuZ2UsIHVudXNlZExvY2F0aW9uLCBsZW5ndGgpOwogICAg
IHJldHVybiBsZW5ndGg7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0
IFJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5n
ZUFzVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5nZSkgewotICAgICAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IH0KLQotICAgIHJldHVybiByYW5nZS0+dGV4dCgpOworICAgIHJldHVybiByYW5nZS50ZXh0KCk7
CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSogcmFuZ2UsIGlu
dCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVm
UHRyPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgaW50IHJhbmdlTG9j
YXRpb24sIGludCByYW5nZUxlbmd0aCkKIHsKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgcmFuZ2VMb2NhdGlvbiwg
cmFuZ2VMZW5ndGgpOworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCZyYW5nZSwg
cmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGgpOwogfQogCiBSZWZQdHI8UmFuZ2U+IEludGVybmFs
czo6cmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihpbnQgeCwgaW50IHksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMTU5OCwyMSArMTQxMSwyMSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6
OnRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRXhjZXB0aW9uQ29kZSYgZWMpCiAvLyBjb250ZXh0RG9j
dW1lbnQoKSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGEgZmV3IHRlc3RzIHRoYXQgcGFzcyBhCiAv
LyBkaWZmZXJlbnQgZG9jdW1lbnQsIGFuZCBjb3VsZCBqdXN0IG1ha2UgdGhlIGNhbGwgdGhyb3Vn
aCBhbm90aGVyIEludGVybmFscwogLy8gaW5zdGFuY2UgaW5zdGVhZC4KLVJlZlB0cjxOb2RlTGlz
dD4gSW50ZXJuYWxzOjpub2Rlc0Zyb21SZWN0KERvY3VtZW50KiBkb2N1bWVudCwgaW50IGNlbnRl
clgsIGludCBjZW50ZXJZLCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRp
bmcsCitSZWZQdHI8Tm9kZUxpc3Q+IEludGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCYg
ZG9jdW1lbnQsIGludCBjZW50ZXJYLCBpbnQgY2VudGVyWSwgdW5zaWduZWQgdG9wUGFkZGluZywg
dW5zaWduZWQgcmlnaHRQYWRkaW5nLAogICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2ln
bmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29u
dGVudCwgYm9vbCBhbGxvd0NoaWxkRnJhbWVDb250ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1l
bnQtPmZyYW1lKCktPnZpZXcoKSkgeworICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSB8fCAhZG9j
dW1lbnQuZnJhbWUoKS0+dmlldygpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52
aWV3KCk7Ci0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IGRvY3VtZW50LnZpZXcoKTsKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3
ID0gZG9jdW1lbnQucmVuZGVyVmlldygpOwogICAgIGlmICghcmVuZGVyVmlldykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAKICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFj
dG9yKCk7CiAgICAgTGF5b3V0UG9pbnQgcG9pbnQoY2VudGVyWCAqIHpvb21GYWN0b3IgKyBmcmFt
ZVZpZXctPnNjcm9sbFgoKSwgY2VudGVyWSAqIHpvb21GYWN0b3IgKyBmcmFtZVZpZXctPnNjcm9s
bFkoKSk7CkBAIC0xOTM5LDcgKzE3NTIsNyBAQCBSZWZQdHI8RE9NV2luZG93PiBJbnRlcm5hbHM6
Om9wZW5EdW1teUluc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdXJsKQogICAgIFBhZ2Uq
IGluc3BlY3RlZFBhZ2UgPSBjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpOwogICAg
IFJlZlB0cjxET01XaW5kb3c+IHdpbmRvdyA9IGluc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpOwogICAgIFJlZlB0cjxET01XaW5kb3c+IGZyb250ZW5kV2lu
ZG93ID0gd2luZG93LT5vcGVuKHVybCwgIiIsICIiLCAqd2luZG93LCAqd2luZG93KTsKLSAgICBt
X2luc3BlY3RvckZyb250ZW5kID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JTdHViRnJvbnRl
bmQ+KGluc3BlY3RlZFBhZ2UsIGZyb250ZW5kV2luZG93LmNvcHlSZWYoKSk7CisgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yU3R1YkZyb250ZW5kPigq
aW5zcGVjdGVkUGFnZSwgZnJvbnRlbmRXaW5kb3cuY29weVJlZigpKTsKIAogICAgIHJldHVybiBm
cm9udGVuZFdpbmRvdzsKIH0KQEAgLTIwMTQsMTQgKzE4MjcsMTQgQEAgYm9vbCBJbnRlcm5hbHM6
OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VOdW1iZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogLy8g
Y29udGV4dERvY3VtZW50KCksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGZldyB0ZXN0cyB0aGF0
IHBhc3MgYQogLy8gZGlmZmVyZW50IGRvY3VtZW50LCBhbmQgY291bGQganVzdCBtYWtlIHRoZSBj
YWxsIHRocm91Z2ggYW5vdGhlciBJbnRlcm5hbHMKIC8vIGluc3RhbmNlIGluc3RlYWQuCi1TdHJp
bmcgSW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK1N0cmluZyBJbnRlcm5hbHM6OmxheWVyVHJlZUFzVGV4dChEb2N1
bWVudCYgZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIHJldHVybiBs
YXllclRyZWVBc1RleHQoZG9jdW1lbnQsIDAsIGVjKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6
bGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIEludGVybmFsczo6bGF5ZXJUcmVlQXNUZXh0KERv
Y3VtZW50JiBkb2N1bWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewotICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgaWYg
KCFkb2N1bWVudC5mcmFtZSgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQpAQCAtMjAzOCw3ICsxODUxLDcgQEAgU3Ry
aW5nIEludGVybmFsczo6bGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWdu
ZWQgZmxhZ3MsIEV4Y2VwdGlvbkMKICAgICBpZiAoZmxhZ3MgJiBMQVlFUl9UUkVFX0lOQ0xVREVT
X0NPTlRFTlRfTEFZRVJTKQogICAgICAgICBsYXllclRyZWVGbGFncyB8PSBMYXllclRyZWVGbGFn
c0luY2x1ZGVDb250ZW50TGF5ZXJzOwogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5s
YXllclRyZWVBc1RleHQobGF5ZXJUcmVlRmxhZ3MpOworICAgIHJldHVybiBkb2N1bWVudC5mcmFt
ZSgpLT5sYXllclRyZWVBc1RleHQobGF5ZXJUcmVlRmxhZ3MpOwogfQogCiBTdHJpbmcgSW50ZXJu
YWxzOjpyZXBhaW50UmVjdHNBc1RleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkBAIC0yMDk3
LDcgKzE5MTAsNyBAQCBSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEludGVybmFsczo6bm9uRmFzdFNj
cm9sbGFibGVSZWN0cyhFeGNlcHRpb25Db2RlJiBlYykgY29ucwogICAgIHJldHVybiBwYWdlLT5u
b25GYXN0U2Nyb2xsYWJsZVJlY3RzKCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRFbGVtZW50
VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhFbGVtZW50KiBlbGVtZW50LCBib29sIHVzZXNEaXNwbGF5
TGlzdERyYXdpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldEVsZW1l
bnRVc2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PnJlbmRlclZpZXcoKSkgewpAQCAtMjEwNSwyMiArMTkxOCwyMiBAQCB2b2lkIEludGVybmFsczo6
c2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoRWxlbWVudCogZWxlbWVudCwgYm9vbCB1
c2VzRGlzcAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFlbGVtZW50IHx8ICFl
bGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdp
bmcodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CisgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50
PihlbGVtZW50KSkgeworICAgICAgICBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVu
dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh1c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKS0+aGFz
TGF5ZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpKSB7CiAg
ICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5sYXllcigpOworICAgIFJlbmRlckxheWVyKiBs
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQucmVuZGVyZXIo
KSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVkKCkpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMjksNyArMTk0
Miw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhF
bGVtZW50KiBlbGVtZW50LCBib29sIHVzZXNEaXNwCiAgICAgbGF5ZXItPmJhY2tpbmcoKS0+c2V0
VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh1c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAotdm9p
ZCBJbnRlcm5hbHM6OnNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShFbGVtZW50KiBl
bGVtZW50LCBib29sIGlzVHJhY2tpbmdSZXBsYXksIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJ
bnRlcm5hbHM6OnNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShFbGVtZW50JiBlbGVt
ZW50LCBib29sIGlzVHJhY2tpbmdSZXBsYXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTIxMzcsMjIgKzE5NTAsMjIgQEAgdm9p
ZCBJbnRlcm5hbHM6OnNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShFbGVtZW50KiBl
bGVtZW50LCBib29sIGlzVHJhY2sKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
ZWxlbWVudCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5k
ZXJlcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpIHsK
LSAgICAgICAgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KS5zZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsKKyAgICBpZiAoaXM8SFRNTENhbnZh
c0VsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50
PihlbGVtZW50KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKS0+
aGFzTGF5ZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4oZWxlbWVudC0+cmVuZGVyZXIoKSktPmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC5yZW5kZXJlcigp
KS0+bGF5ZXIoKTsKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgewogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSwxMiArMTk3
NCwxMiBAQCB2b2lkIEludGVybmFsczo6c2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNUcmFjawogICAgIGxheWVyLT5iYWNraW5nKCktPnNl
dElzVHJhY2tpbmdEaXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsKIH0KIAotU3Ry
aW5nIEludGVybmFsczo6ZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6ZGlzcGxheUxpc3RGb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIHJldHVybiBkaXNw
bGF5TGlzdEZvckVsZW1lbnQoZWxlbWVudCwgMCwgZWMpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxz
OjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxhZ3Ms
IEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6ZGlzcGxheUxpc3RGb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yMTc0LDcgKzE5ODcs
NyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgfQogCi0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAg
aWYgKCFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0yMTgzLDE1ICsxOTk2LDE1
IEBAIFN0cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0CiAgICAgaWYgKGZsYWdzICYgRElTUExBWV9MSVNU
X0lOQ0xVREVTX1BMQVRGT1JNX09QRVJBVElPTlMpCiAgICAgICAgIGRpc3BsYXlMaXN0RmxhZ3Mg
fD0gRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zOwog
Ci0gICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpLmRpc3BsYXlMaXN0QXNUZXh0
KGRpc3BsYXlMaXN0RmxhZ3MpOworICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCku
ZGlzcGxheUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFncyk7CiAKLSAgICBpZiAoIWVsZW1lbnQt
PnJlbmRlcmVyKCktPmhhc0xheWVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+
aGFzTGF5ZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KIAotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5sYXllcigp
OworICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KGVsZW1lbnQucmVuZGVyZXIoKSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21w
b3NpdGVkKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKQEAgLTIyMDAsMTIgKzIwMTMsMTIgQEAgU3RyaW5nIEludGVybmFsczo6
ZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBF
eGNlcHQKICAgICByZXR1cm4gbGF5ZXItPmJhY2tpbmcoKS0+ZGlzcGxheUxpc3RBc1RleHQoZGlz
cGxheUxpc3RGbGFncyk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJ
bnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICByZXR1cm4gcmVwbGF5RGlzcGxheUxpc3RGb3JFbGVt
ZW50KGVsZW1lbnQsIDAsIGVjKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6cmVwbGF5RGlzcGxh
eUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRp
b25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewpAQCAtMjIxMyw3ICsyMDI2LDcg
QEAgU3RyaW5nIEludGVybmFsczo6cmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzLAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
fQogCi0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgaWYg
KCFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0yMjIyLDE1ICsyMDM1LDE1IEBA
IFN0cmluZyBJbnRlcm5hbHM6OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50LCB1bnNpZ25lZCBmbGFncywKICAgICBpZiAoZmxhZ3MgJiBESVNQTEFZX0xJU1RfSU5D
TFVERVNfUExBVEZPUk1fT1BFUkFUSU9OUykKICAgICAgICAgZGlzcGxheUxpc3RGbGFncyB8PSBE
aXNwbGF5TGlzdDo6QXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnM7CiAKLSAg
ICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkucmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoZGlzcGxheUxpc3RGbGFncyk7CisgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PihlbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihlbGVtZW50
KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChkaXNwbGF5TGlzdEZsYWdzKTsKIAotICAgIGlmICgh
ZWxlbWVudC0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5k
ZXJlcigpLT5oYXNMYXllcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC0+cmVuZGVyZXIoKSkt
PmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oZWxlbWVudC5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKICAgICBpZiAoIWxheWVy
LT5pc0NvbXBvc2l0ZWQoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMjI3NywyMCArMjA5MCwxNCBAQCB2b2lkIEludGVy
bmFsczo6aW5zZXJ0VXNlckNTUyhjb25zdCBTdHJpbmcmIGNzcywgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CiAgICAgZG9jdW1lbnQtPmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuYWRkVXNlclN0eWxl
U2hlZXQoV1RGTW92ZShwYXJzZWRTaGVldCkpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpjb3Vu
dGVyVmFsdWUoRWxlbWVudCogZWxlbWVudCkKK1N0cmluZyBJbnRlcm5hbHM6OmNvdW50ZXJWYWx1
ZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgcmV0dXJuIGNvdW50ZXJWYWx1ZUZvckVsZW1lbnQoZWxlbWVudCk7
CisgICAgcmV0dXJuIGNvdW50ZXJWYWx1ZUZvckVsZW1lbnQoJmVsZW1lbnQpOwogfQogCi1pbnQg
SW50ZXJuYWxzOjpwYWdlTnVtYmVyKEVsZW1lbnQqIGVsZW1lbnQsIGZsb2F0IHBhZ2VXaWR0aCwg
ZmxvYXQgcGFnZUhlaWdodCkKK2ludCBJbnRlcm5hbHM6OnBhZ2VOdW1iZXIoRWxlbWVudCYgZWxl
bWVudCwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogewotICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdl
TnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBGbG9hdFNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0
KSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoJmVsZW1l
bnQsIHsgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0IH0pOwogfQogCiBWZWN0b3I8U3RyaW5nPiBJbnRl
cm5hbHM6OnNob3J0Y3V0SWNvblVSTHMoKSBjb25zdApAQCAtMjQzMiwzNiArMjIzOSwzNiBAQCB2
b2lkIEludGVybmFsczo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQordm9pZCBJbnRlcm5h
bHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBkb2N1bWVudC0+d2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwogfQogCi12b2lkIEludGVybmFs
czo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndl
YmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgZG9jdW1lbnQt
PndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwogfQogCi12b2lk
IEludGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQordm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZG9j
dW1lbnQtPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7CisgICAg
ZG9jdW1lbnQtPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwog
fQogCi12b2lkIEludGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIEludGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5G
b3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7
CisgICAgZG9jdW1lbnQtPndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVu
dCk7CiB9CiAjZW5kaWYKIApAQCAtMjUzOSw3ICsyMzQ2LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnN0
YXJ0VHJhY2tpbmdMYXllckZsdXNoZXMoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZG9jdW1lbnQt
PnJlbmRlclZpZXcoKS0+Y29tcG9zaXRvcigpLnN0YXJ0VHJhY2tpbmdMYXllckZsdXNoZXMoKTsK
IH0KIAotdW5zaWduZWQgbG9uZyBJbnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudChFeGNlcHRpb25D
b2RlJiBlYykKK3Vuc2lnbmVkIEludGVybmFsczo6bGF5ZXJGbHVzaENvdW50KEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwog
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTI1NjAs
NyArMjM2Nyw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzdGFydFRyYWNraW5nU3R5bGVSZWNhbGNzKEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIGRvY3VtZW50LT5zdGFydFRyYWNraW5nU3R5bGVSZWNhbGNz
KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpzdHlsZVJlY2FsY0NvdW50KEV4Y2Vw
dGlvbkNvZGUmIGVjKQordW5zaWduZWQgSW50ZXJuYWxzOjpzdHlsZVJlY2FsY0NvdW50KEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVu
dCgpOwogICAgIGlmICghZG9jdW1lbnQpIHsKQEAgLTI1ODIsNyArMjM4OSw3IEBAIHZvaWQgSW50
ZXJuYWxzOjpzdGFydFRyYWNraW5nQ29tcG9zaXRpbmdVcGRhdGVzKEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0b3IoKS5zdGFydFRyYWNraW5n
Q29tcG9zaXRpbmdVcGRhdGVzKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpjb21w
b3NpdGluZ1VwZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKQordW5zaWduZWQgSW50ZXJuYWxz
Ojpjb21wb3NpdGluZ1VwZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTI3MjIsMTAgKzI1MjksMTAgQEAgUmVmUHRy
PEFycmF5QnVmZmVyPiBJbnRlcm5hbHM6OnNlcmlhbGl6ZU9iamVjdChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4KICAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShieXRlcy5k
YXRhKCksIGJ5dGVzLnNpemUoKSk7CiB9CiAKLVJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IEludGVybmFsczo6ZGVzZXJpYWxpemVCdWZmZXIoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyKSBjb25zdAorUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSW50ZXJuYWxzOjpkZXNl
cmlhbGl6ZUJ1ZmZlcihBcnJheUJ1ZmZlciYgYnVmZmVyKSBjb25zdAogewogICAgIFZlY3Rvcjx1
aW50OF90PiBieXRlczsKLSAgICBieXRlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIGJ5dGVzLmFw
cGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5i
eXRlTGVuZ3RoKCkpOwogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmFkb3B0KFdU
Rk1vdmUoYnl0ZXMpKTsKIH0KIApAQCAtMjc3MCw3NCArMjU3Nyw1MiBAQCB2b2lkIEludGVybmFs
czo6aW5pdGlhbGl6ZU1vY2tDRE0oKQogfQogI2VuZGlmCiAKLVN0cmluZyBJbnRlcm5hbHM6Om1h
cmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykK
K1N0cmluZyBJbnRlcm5hbHM6Om1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50JiBlbGVtZW50
KQogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gV2ViQ29yZTo6
bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOworICAgIHJldHVybiBXZWJDb3JlOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oJmVsZW1lbnQpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjp0b29s
VGlwRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CitTdHJpbmcgSW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkg
Y29uc3QKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9CiAgICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQ7Ci0gICAgcmVzdWx0LnNldElubmVyTm9kZShlbGVtZW50KTsKLSAgICBUZXh0RGly
ZWN0aW9uIGRpcjsKLSAgICByZXR1cm4gcmVzdWx0LnRpdGxlKGRpcik7CisgICAgcmVzdWx0LnNl
dElubmVyTm9kZSgmZWxlbWVudCk7CisgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAg
cmV0dXJuIHJlc3VsdC50aXRsZShkaXJlY3Rpb24pOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpn
ZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1N0
cmluZyBJbnRlcm5hbHM6OmdldEltYWdlU291cmNlVVJMKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBlbGVtZW50LT5pbWFnZVNv
dXJjZVVSTCgpOworICAgIHJldHVybiBlbGVtZW50LmltYWdlU291cmNlVVJMKCk7CiB9CiAKICNp
ZiBFTkFCTEUoVklERU8pCi12b2lkIEludGVybmFsczo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlv
bihOb2RlKiBub2RlKQorCit2b2lkIEludGVybmFsczo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlv
bihIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewogI2lmIFVTRShHU1RSRUFNRVIpCi0gICAg
SFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG5v
ZGUpOwotICAgIGVsZW1lbnQtPnBsYXllcigpLT5zaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKCk7
CisgICAgZWxlbWVudC5wbGF5ZXIoKS0+c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpOwogI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0obm9kZSk7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwog
I2VuZGlmCiB9CiAKLWJvb2wgSW50ZXJuYWxzOjptZWRpYUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3Rp
YyhOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcmlzdGljLCBFeGNlcHRpb25Db2Rl
JiBlYykKK2Jvb2wgSW50ZXJuYWxzOjptZWRpYUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhIVE1M
TWVkaWFFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcmlzdGljLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KCpub2RlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9
IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG5vZGUpOwotCiAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGNoYXJhY3RlcmlzdGljLCAiYXVkaWJsZSIpKQotICAgICAgICBy
ZXR1cm4gZWxlbWVudC0+aGFzQXVkaW8oKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXVk
aW8oKTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY2hhcmFjdGVyaXN0
aWMsICJ2aXN1YWwiKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1ZpZGVvKCk7CisgICAg
ICAgIHJldHVybiBlbGVtZW50Lmhhc1ZpZGVvKCk7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNoYXJhY3RlcmlzdGljLCAibGVnaWJsZSIpKQotICAgICAgICByZXR1cm4g
ZWxlbWVudC0+aGFzQ2xvc2VkQ2FwdGlvbnMoKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFz
Q2xvc2VkQ2FwdGlvbnMoKTsKIAogICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAjZW5kaWYKIAotYm9vbCBJbnRlcm5hbHM6OmlzU2VsZWN0UG9wdXBWaXNpYmxlKE5v
ZGUqIG5vZGUpCitib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2libGUoSFRNTFNlbGVj
dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MU2VsZWN0RWxlbWVudD4oKm5v
ZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2Vs
ZWN0ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KCpub2RlKTsKLQotICAgIGF1dG8qIHJl
bmRlcmVyID0gc2VsZWN0LnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50
LnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICBpZiAoIWlzPFJlbmRlck1l
bnVMaXN0PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODQ2LDcgKzI2
MzEsNyBAQCBib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2libGUoTm9kZSogbm9kZSkK
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWVudUxpc3Q+KCpyZW5kZXJlcikucG9wdXBJc1Zp
c2libGUoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCisjZW5kaWYKIH0KIAogU3RyaW5nIEludGVybmFsczo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGUoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yOTMzLDkgKzI3MTgsOSBAQCBSZWY8VGltZVJh
bmdlcz4gSW50ZXJuYWxzOjpjcmVhdGVUaW1lUmFuZ2VzKEZsb2F0MzJBcnJheSogc3RhcnRUaW1l
cywgRmxvYXQzMkFycgogICAgIHJldHVybiByYW5nZXM7CiB9CiAKLWRvdWJsZSBJbnRlcm5hbHM6
OmNsb3Nlc3RUaW1lVG9UaW1lUmFuZ2VzKGRvdWJsZSB0aW1lLCBUaW1lUmFuZ2VzKiByYW5nZXMp
Citkb3VibGUgSW50ZXJuYWxzOjpjbG9zZXN0VGltZVRvVGltZVJhbmdlcyhkb3VibGUgdGltZSwg
VGltZVJhbmdlcyYgcmFuZ2VzKQogewotICAgIHJldHVybiByYW5nZXMtPm5lYXJlc3QodGltZSk7
CisgICAgcmV0dXJuIHJhbmdlcy5uZWFyZXN0KHRpbWUpOwogfQogI2VuZGlmCiAKQEAgLTI5NjAs
MTQgKzI3NDUsOSBAQCBib29sIEludGVybmFsczo6aXNWaWJyYXRpbmcoKQogfQogI2VuZGlmCiAK
LWJvb2wgSW50ZXJuYWxzOjppc1BsdWdpblVuYXZhaWxhYmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQo
RWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6aXNQ
bHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVkKEVsZW1lbnQmIGVsZW1lbnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElO
VkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1
dG8qIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0Pihy
ZW5kZXJlcikpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI5NzYsMTcgKzI3NTYsMTMgQEAgYm9vbCBJbnRlcm5hbHM6OmlzUGx1
Z2luVW5hdmFpbGFiaWxpdHlJbmRpY2F0b3JPYnNjdXJlZChFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHQKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCpyZW5kZXJlciku
aXNSZXBsYWNlbWVudE9ic2N1cmVkKCk7CiB9CiAgICAgCi1ib29sIEludGVybmFsczo6aXNQbHVn
aW5TbmFwc2hvdHRlZChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wg
SW50ZXJuYWxzOjppc1BsdWdpblNuYXBzaG90dGVkKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
aWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpOwotICAgIHJldHVybiBw
bHVnaW5FbGVtZW50LT5kaXNwbGF5U3RhdGUoKSA8PSBIVE1MUGx1Z0luRWxlbWVudDo6RGlzcGxh
eWluZ1NuYXBzaG90OworICAgIHJldHVybiBpczxIVE1MUGx1Z0luRWxlbWVudD4oZWxlbWVudCkg
JiYgZG93bmNhc3Q8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpLmRpc3BsYXlTdGF0ZSgpIDw9
IEhUTUxQbHVnSW5FbGVtZW50OjpEaXNwbGF5aW5nU25hcHNob3Q7CiB9CiAgICAgCiAjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKKwogdm9pZCBJbnRlcm5hbHM6OmluaXRpYWxpemVNb2NrTWVkaWFT
b3VyY2UoKQogewogI2lmIFVTRShBVkZPVU5EQVRJT04pCkBAIC0yOTk1LDIyICsyNzcxLDIwIEBA
IHZvaWQgSW50ZXJuYWxzOjppbml0aWFsaXplTW9ja01lZGlhU291cmNlKCkKICAgICBNZWRpYVBs
YXllckZhY3RvcnlTdXBwb3J0OjpjYWxsUmVnaXN0ZXJNZWRpYUVuZ2luZShNb2NrTWVkaWFQbGF5
ZXJNZWRpYVNvdXJjZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+
IEludGVybmFsczo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChTb3VyY2VCdWZmZXIqIGJ1ZmZl
ciwgY29uc3QgQXRvbWljU3RyaW5nJiB0cmFja0lEKQorVmVjdG9yPFN0cmluZz4gSW50ZXJuYWxz
OjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKFNvdXJjZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBB
dG9taWNTdHJpbmcmIHRyYWNrSUQpCiB7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwotCi0gICAgcmV0dXJuIGJ1ZmZlci0+YnVmZmVyZWRTYW1wbGVz
Rm9yVHJhY2tJRCh0cmFja0lEKTsKKyAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlcmVkU2FtcGxlc0Zv
clRyYWNrSUQodHJhY2tJRCk7CiB9CiAgICAgCi12b2lkIEludGVybmFsczo6c2V0U2hvdWxkR2Vu
ZXJhdGVUaW1lc3RhbXBzKFNvdXJjZUJ1ZmZlciogYnVmZmVyLCBib29sIGZsYWcpCit2b2lkIElu
dGVybmFsczo6c2V0U2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKFNvdXJjZUJ1ZmZlciYgYnVmZmVy
LCBib29sIGZsYWcpCiB7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRTaG91
bGRHZW5lcmF0ZVRpbWVzdGFtcHMoZmxhZyk7CisgICAgYnVmZmVyLnNldFNob3VsZEdlbmVyYXRl
VGltZXN0YW1wcyhmbGFnKTsKIH0KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCisKIHZv
aWQgSW50ZXJuYWxzOjpiZWdpbk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbihjb25zdCBTdHJpbmcm
IGludGVycnVwdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUGxhdGZvcm1N
ZWRpYVNlc3Npb246OkludGVycnVwdGlvblR5cGUgaW50ZXJydXB0aW9uID0gUGxhdGZvcm1NZWRp
YVNlc3Npb246OlN5c3RlbUludGVycnVwdGlvbjsKQEAgLTMwODMsMTUgKzI4NTcsMTAgQEAgdm9p
ZCBJbnRlcm5hbHM6OnNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZVN0cmluZywgY29uc3QKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5hZGRSZXN0cmljdGlvbihtZWRpYVR5cGUsIHJlc3RyaWN0aW9ucyk7CiB9
CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMoSFRNTE1lZGlh
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnNTdHJpbmcsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9u
cyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9uc1N0
cmluZykKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRpYUVsZW1lbnRTZXNzaW9u
OjpCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBlbGVtZW50LT5tZWRpYVNlc3Np
b24oKS5iZWhhdmlvclJlc3RyaWN0aW9ucygpOwotICAgIGVsZW1lbnQtPm1lZGlhU2Vzc2lvbigp
LnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKKyAgICBNZWRpYUVsZW1l
bnRTZXNzaW9uOjpCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBlbGVtZW50Lm1l
ZGlhU2Vzc2lvbigpLmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7CisgICAgZWxlbWVudC5tZWRpYVNl
c3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiAKICAgICBy
ZXN0cmljdGlvbnMgPSBNZWRpYUVsZW1lbnRTZXNzaW9uOjpOb1Jlc3RyaWN0aW9uczsKIApAQCAt
MzEyNyw3ICsyODk2LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhRWxlbWVudFJlc3RyaWN0
aW9ucyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHIKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlc3RyaWN0aW9uU3RyaW5nLCAib3ZlcnJpZGV1
c2VyZ2VzdHVyZXJlcXVpcmVtZW50Zm9ybWFpbmNvbnRlbnQiKSkKICAgICAgICAgICAgIHJlc3Ry
aWN0aW9ucyB8PSBNZWRpYUVsZW1lbnRTZXNzaW9uOjpPdmVycmlkZVVzZXJHZXN0dXJlUmVxdWly
ZW1lbnRGb3JNYWluQ29udGVudDsKICAgICB9Ci0gICAgZWxlbWVudC0+bWVkaWFTZXNzaW9uKCku
YWRkQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOworICAgIGVsZW1lbnQubWVkaWFT
ZXNzaW9uKCkuYWRkQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogfQogCiB2b2lk
IEludGVybmFsczo6cG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZFN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zMTU4LDE1ICsyOTI3LDE1IEBAIHZvaWQg
SW50ZXJuYWxzOjpwb3N0UmVtb3RlQ29udHJvbENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
U3RyaW5nLCBFeGNlcHRpb25DCiAgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKGNvbW1hbmQpOwogfQog
Ci1ib29sIEludGVybmFsczo6ZWxlbWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK2Jvb2wgSW50ZXJuYWxzOjplbGVtZW50SXNCbG9ja2luZ0Rpc3BsYXlT
bGVlcChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KGVsZW1lbnQp
OwotICAgIHJldHVybiBtZWRpYUVsZW1lbnQgPyBtZWRpYUVsZW1lbnQtPmlzRGlzYWJsaW5nU2xl
ZXAoKSA6IGZhbHNlOworICAgIHJldHVybiBlbGVtZW50LmlzRGlzYWJsaW5nU2xlZXAoKTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQor
CiBzdGF0aWMgTWVkaWFTZXNzaW9uSW50ZXJydXB0aW5nQ2F0ZWdvcnkgaW50ZXJydXB0aW5nQ2F0
ZWdvcnlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgaW50ZXJydXB0aW5nQ2F0ZWdvcnlTdHJpbmcp
CiB7CiAgICAgaWYgKGludGVycnVwdGluZ0NhdGVnb3J5U3RyaW5nID09ICJjb250ZW50IikKQEAg
LTMyMTgsMTggKzI5ODcsMTUgQEAgdm9pZCBJbnRlcm5hbHM6OnNlbmRNZWRpYUNvbnRyb2xFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50KQogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU0VTU0lPTikKIAogI2lmIEVOQUJM
RShXRUJfQVVESU8pCi12b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25z
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nICZyZXN0cmljdGlvbnNTdHJpbmcs
IEV4Y2VwdGlvbkNvZGUgJmVjKQotewotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEF1ZGlv
Q29udGV4dDo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25zID0gY29udGV4dC0+YmVo
YXZpb3JSZXN0cmljdGlvbnMoKTsKLSAgICBjb250ZXh0LT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0
aW9uKHJlc3RyaWN0aW9ucyk7Cit2b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJp
Y3Rpb25zKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnNT
dHJpbmcpCit7CisgICAgQXVkaW9Db250ZXh0OjpCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmlj
dGlvbnMgPSBjb250ZXh0LmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7CisgICAgY29udGV4dC5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiAKICAgICByZXN0cmljdGlvbnMg
PSBBdWRpb0NvbnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogCkBAIC0zMjQzLDggKzMwMDksOSBAQCB2
b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nCiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShyZXN0cmljdGlvblN0cmluZywgInJlcXVpcmVwYWdlY29uc2VudGZvcmF1ZGlvc3Rh
cnQiKSkKICAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBBdWRpb0NvbnRleHQ6OlJlcXVpcmVQ
YWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsKICAgICB9Ci0gICAgY29udGV4dC0+
YWRkQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOworICAgIGNvbnRleHQuYWRkQmVo
YXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogfQorCiAjZW5kaWYKIAogdm9pZCBJbnRl
cm5hbHM6OnNpbXVsYXRlU3lzdGVtU2xlZXAoKSBjb25zdApAQCAtMzI2Miw2ICszMDI5LDcgQEAg
dm9pZCBJbnRlcm5hbHM6OnNpbXVsYXRlU3lzdGVtV2FrZSgpIGNvbnN0CiB9CiAKICNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorCiB2b2lkIEludGVybmFsczo6c2V0TW9ja01l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBQYWdl
KiBwYWdlID0gY29udGV4dERvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKTsKQEAgLTMyOTAsNiAr
MzA1OCw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
clN0YXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlTmFtZSwKIAogICAgIHBhZ2UtPnNldE1vY2tNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyU3RhdGUoZGV2aWNlTmFtZSwgc3RhdGUpOwogfQorCiAjZW5k
aWYKIAogUmVmUHRyPE1vY2tQYWdlT3ZlcmxheT4gSW50ZXJuYWxzOjppbnN0YWxsTW9ja1BhZ2VP
dmVybGF5KGNvbnN0IFN0cmluZyYgb3ZlcmxheVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MzM3MSwxMyArMzE0MCwxNiBAQCB2b2lkIEludGVybmFsczo6cXVldWVNaWNyb1Rhc2soaW50IHRl
c3ROdW1iZXIpCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCisKIE1vY2tDb250
ZW50RmlsdGVyU2V0dGluZ3MmIEludGVybmFsczo6bW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncygp
CiB7CiAgICAgcmV0dXJuIE1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNpbmdsZXRvbigpOwog
fQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKIHN0YXRpYyB2b2lk
IGFwcGVuZE9mZnNldHMoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVmVjdG9yPExheW91
dFVuaXQ+JiBzbmFwT2Zmc2V0cykKIHsKICAgICBib29sIGp1c3RTdGFydGluZyA9IHRydWU7CkBA
IC0zMzk0LDE3ICszMTY2LDEyIEBAIHN0YXRpYyB2b2lkIGFwcGVuZE9mZnNldHMoU3RyaW5nQnVp
bGRlciYgYnVpbGRlciwgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwCiAgICAgYnVpbGRl
ci5hcHBlbmQoIiB9Iik7CiB9CiAgICAgCi1TdHJpbmcgSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zm
c2V0cyhFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5h
bHM6OnNjcm9sbFNuYXBPZmZzZXRzKEVsZW1lbnQmIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyQm94KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICB9CiAKLSAgICBpZiAoIWVsZW1lbnQtPnJlbmRlckJveCgpKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICBSZW5kZXJCb3gmIGJveCA9ICplbGVtZW50LT5yZW5kZXJCb3go
KTsKKyAgICBSZW5kZXJCb3gmIGJveCA9ICplbGVtZW50LnJlbmRlckJveCgpOwogICAgIFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYTsKICAgICAKICAgICBpZiAoYm94LmlzQm9keSgpKSB7
CkBAIC0zNDI5LDIwICszMTk2LDIxIEBAIFN0cmluZyBJbnRlcm5hbHM6OnNjcm9sbFNuYXBPZmZz
ZXRzKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OwogCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU25hcE9mZnNl
dHMoKSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCJob3Jpem9udGFsID0gIik7CisgICAgICAg
IHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJob3Jpem9udGFsID0gIik7CiAgICAgICAgIGFwcGVuZE9m
ZnNldHMocmVzdWx0LCAqc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpKTsK
ICAgICB9CiAKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU25hcE9mZnNldHMoKSkg
ewogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiLCAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoInZlcnRpY2FsID0gIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJ2ZXJ0aWNhbCA9ICIpOwogICAgICAgICBhcHBlbmRPZmZzZXRzKHJlc3VsdCwgKnNj
cm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpOwogICAgIH0KIAogICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKIH0KKwogI2VuZGlmCiAKIGJvb2wgSW50ZXJuYWxzOjp0ZXN0
UHJlbG9hZGVyU2V0dGluZ1ZpZXdwb3J0KCkKQEAgLTM0NzgsMjUgKzMyNDYsMjQgQEAgU3RyaW5n
IEludGVybmFsczo6cGF0aFN0cmluZ1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoVmVjdG9yPGRvdWJs
ZT4gcmVjdENvbXBvbmVudHMKIH0KIAogCi1TdHJpbmcgSW50ZXJuYWxzOjpnZXRDdXJyZW50TWVk
aWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KQorU3RyaW5nIEludGVybmFsczo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JFbGVt
ZW50KEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKIHsKICNpZiAhRU5BQkxFKE1FRElB
X0NPTlRST0xTX1NDUklQVCkKICAgICBVTlVTRURfUEFSQU0obWVkaWFFbGVtZW50KTsKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAjZWxzZQotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5nZXRDdXJyZW50TWVk
aWFDb250cm9sc1N0YXR1cygpOworICAgIHJldHVybiBtZWRpYUVsZW1lbnQuZ2V0Q3VycmVudE1l
ZGlhQ29udHJvbHNTdGF0dXMoKTsKICNlbmRpZgogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQot
U3RyaW5nIEludGVybmFsczo6dXNlclZpc2libGVTdHJpbmcoY29uc3QgRE9NVVJMKikKKworU3Ry
aW5nIEludGVybmFsczo6dXNlclZpc2libGVTdHJpbmcoY29uc3QgRE9NVVJMJikKIHsKLSAgICAv
LyBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZS4KKyAgICAvLyBDb2NvYS1zcGVjaWZpYyBmdW5j
dGlvbi4gQ291bGQgQVNTRVJUX05PVF9SRUFDSEVELCBidXQgdGhhdCdzIHByb2JhYmx5IG92ZXJr
aWxsLgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgSW50ZXJuYWxz
OjpzZXRTaG93QWxsUGx1Z2lucyhib29sIHNob3cpCkBAIC0zNTEzLDYgKzMyODAsNyBAQCB2b2lk
IEludGVybmFsczo6c2V0U2hvd0FsbFBsdWdpbnMoYm9vbCBzaG93KQogfQogCiAjaWYgRU5BQkxF
KFNUUkVBTVNfQVBJKQorCiBib29sIEludGVybmFsczo6aXNSZWFkYWJsZVN0cmVhbURpc3R1cmJl
ZChTY3JpcHRTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgc3RyZWFtKQogewogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CkBAIC0zNTM1
LDYgKzMzMDMsNyBAQCBib29sIEludGVybmFsczo6aXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZChT
Y3JpcHRTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgc3RyZWFtKQogCiAgICAgcmV0dXJuIHJldHVybmVk
VmFsdWUuYXNCb29sZWFuKCk7CiB9CisKICNlbmRpZgogCiBTdHJpbmcgSW50ZXJuYWxzOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRm9yT3JpZ2luKFN0cmluZyBvcmlnaW4pCkBAIC0zNTQ3LDExICsz
MzE2LDExIEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChib29sIGVuYWJsZSkKICAgICBTZXR0aW5nczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoZW5hYmxlKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6Y29tcG9zZWRUcmVlQXNUZXh0
KE5vZGUqIG5vZGUpCitTdHJpbmcgSW50ZXJuYWxzOjpjb21wb3NlZFRyZWVBc1RleHQoTm9kZSYg
bm9kZSkKIHsKICAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQotICAgICAgICByZXR1
cm4gIiI7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvbXBvc2VkVHJlZUFzVGV4dChkb3duY2FzdDxD
b250YWluZXJOb2RlPigqbm9kZSkpOworICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6Y29tcG9zZWRUcmVlQXNUZXh0KGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KG5vZGUpKTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6OnNldFZpZXdwb3J0Rm9yY2VBbHdheXNV
c2VyU2NhbGFibGUoYm9vbCBzY2FsYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmlu
ZGV4IGY0ZGNmMTg4MDg5N2IzZjY3YmU4MTAxMjBkZDFjYzMxZWMyZTM1ZjUuLjUyMzg3MGI3ZjYy
MGQ0ODZlMzBlZDM2OWUyZGJmZTY5MjYzODcyNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaApAQCAtNTIsMTIgKzUyLDE3IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsK
IGNsYXNzIEZpbGU7CiBjbGFzcyBGcmFtZTsKK2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFz
cyBIVE1MSW5wdXRFbGVtZW50OworY2xhc3MgSFRNTExpbmtFbGVtZW50OwogY2xhc3MgSFRNTE1l
ZGlhRWxlbWVudDsKK2NsYXNzIEhUTUxTZWxlY3RFbGVtZW50OwogY2xhc3MgSW5zcGVjdG9yU3R1
YkZyb250ZW5kOwogY2xhc3MgSW50ZXJuYWxTZXR0aW5nczsKIGNsYXNzIE1hbGxvY1N0YXRpc3Rp
Y3M7CiBjbGFzcyBNZWRpYVNlc3Npb247CiBjbGFzcyBNZW1vcnlJbmZvOworY2xhc3MgTW9ja0Nv
bnRlbnRGaWx0ZXJTZXR0aW5nczsKIGNsYXNzIE1vY2tQYWdlT3ZlcmxheTsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBQYWdlOwpAQCAtNzAsMzMgKzc1LDI4IEBAIGNsYXNzIFRpbWVSYW5nZXM7CiBjbGFz
cyBUeXBlQ29udmVyc2lvbnM7CiBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKIAotI2lmIEVOQUJMRShD
T05URU5UX0ZJTFRFUklORykKLWNsYXNzIE1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M7Ci0jZW5k
aWYKLQogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgSW50ZXJuYWxzIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW50ZXJuYWxzPgotICAgICAgICAgICAgICAgICwgcHVibGljIENvbnRl
eHREZXN0cnVjdGlvbk9ic2VydmVyIHsKK2NsYXNzIEludGVybmFscyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEludGVybmFscz4sIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJbnRlcm5hbHM+IGNyZWF0ZShEb2N1bWVudCopOworICAgIHN0
YXRpYyBSZWY8SW50ZXJuYWxzPiBjcmVhdGUoRG9jdW1lbnQmKTsKICAgICB2aXJ0dWFsIH5JbnRl
cm5hbHMoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSop
OworICAgIHN0YXRpYyB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYpOwogCi0gICAg
U3RyaW5nIGVsZW1lbnRSZW5kZXJUcmVlQXNUZXh0KEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgYm9vbCBoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBTdHJpbmcgZWxlbWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBib29sIGhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyhFbGVtZW50Jik7
CiAKLSAgICBTdHJpbmcgYWRkcmVzcyhOb2RlKik7Ci0gICAgYm9vbCBub2RlTmVlZHNTdHlsZVJl
Y2FsYyhOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBzdHlsZUNoYW5nZVR5cGUo
Tm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgYWRkcmVzcyhOb2RlJik7CisgICAg
Ym9vbCBub2RlTmVlZHNTdHlsZVJlY2FsYyhOb2RlJik7CisgICAgU3RyaW5nIHN0eWxlQ2hhbmdl
VHlwZShOb2RlJik7CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKTsKIAogICAgIGJvb2wgaXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIGJv
b2wgaXNMb2FkaW5nRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBTdHJp
bmcgeGhyUmVzcG9uc2VTb3VyY2UoWE1MSHR0cFJlcXVlc3QqKTsKLSAgICBib29sIGlzU2hhcmlu
Z1N0eWxlU2hlZXRDb250ZW50cyhFbGVtZW50KiBsaW5rQSwgRWxlbWVudCogbGlua0IpOwotICAg
IGJvb2wgaXNTdHlsZVNoZWV0TG9hZGluZ1N1YnJlc291cmNlcyhFbGVtZW50KiBsaW5rKTsKKyAg
ICBTdHJpbmcgeGhyUmVzcG9uc2VTb3VyY2UoWE1MSHR0cFJlcXVlc3QmKTsKKyAgICBib29sIGlz
U2hhcmluZ1N0eWxlU2hlZXRDb250ZW50cyhIVE1MTGlua0VsZW1lbnQmIGEsIEhUTUxMaW5rRWxl
bWVudCYgYik7CisgICAgYm9vbCBpc1N0eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEhUTUxM
aW5rRWxlbWVudCYpOwogICAgIHZvaWQgc2V0T3ZlcnJpZGVDYWNoZVBvbGljeShjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHNldENhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlKGJvb2wgYWxsb3cs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldE92ZXJyaWRlUmVzb3VyY2VMb2FkUHJpb3Jp
dHkoY29uc3QgU3RyaW5nJik7CkBAIC0xMDYsMjEgKzEwNiwyMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwcnVuZU1lbW9yeUNhY2hlVG9TaXplKHVuc2lnbmVkIHNpemUpOwogICAgIHVuc2lnbmVkIG1l
bW9yeUNhY2hlU2l6ZSgpIGNvbnN0OwogCi0gICAgc2l6ZV90IGltYWdlRnJhbWVJbmRleChFbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVuc2lnbmVkIGltYWdlRnJhbWVJbmRleChIVE1M
SW1hZ2VFbGVtZW50Jik7CiAKICAgICB2b2lkIGNsZWFyUGFnZUNhY2hlKCk7CiAgICAgdW5zaWdu
ZWQgcGFnZUNhY2hlU2l6ZSgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKE5vZGUqLCBFeGNl
cHRpb25Db2RlJikgY29uc3Q7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bj4gY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKE5vZGUmKSBjb25zdDsKIAotICAg
IE5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIE5vZGUqIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIE5vZGUqIGNyZWF0ZVNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIE5vZGUqIHNoYWRvd1Jvb3QoRWxlbWVudCogaG9zdCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFN0cmluZyBzaGFkb3dSb290VHlwZShjb25zdCBOb2RlKiwgRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OwotICAgIEVsZW1lbnQqIGluY2x1ZGVyRm9yKE5vZGUqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIHNoYWRvd1BzZXVkb0lkKEVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBzZXRTaGFkb3dQc2V1ZG9JZChFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIE5vZGUqIGVuc3VyZVNoYWRvd1Jvb3QoRWxlbWVudCYg
aG9zdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIE5vZGUqIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jv
b3QoRWxlbWVudCYgaG9zdCk7CisgICAgTm9kZSogY3JlYXRlU2hhZG93Um9vdChFbGVtZW50JiBo
b3N0LCBFeGNlcHRpb25Db2RlJik7CisgICAgTm9kZSogc2hhZG93Um9vdChFbGVtZW50JiBob3N0
KTsKKyAgICBTdHJpbmcgc2hhZG93Um9vdFR5cGUoY29uc3QgTm9kZSYsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKyAgICBTdHJpbmcgc2hhZG93UHNldWRvSWQoRWxlbWVudCYpOworICAgIHZvaWQg
c2V0U2hhZG93UHNldWRvSWQoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gRE9N
VGltZXJzIHRocm90dGxpbmcgdGVzdGluZy4KICAgICBib29sIGlzVGltZXJUaHJvdHRsZWQoaW50
IHRpbWVvdXRJZCwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTM1LDQwICsxMzQsMzggQEAgcHVibGlj
OgogICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRlZChFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAg
dm9pZCByZXN1bWVBbmltYXRpb25zKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBib29sIHBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHBh
dXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvSWQs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8v
IENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVP
bkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWVP
blBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBhdXNlVGltZSwg
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAg
IE5vZGUqIHRyZWVTY29wZVJvb3ROb2RlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9k
ZSogcGFyZW50VHJlZVNjb3BlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwg
ZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgIGJvb2wgYXR0YWNoZWQoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBOb2RlKiB0cmVlU2NvcGVSb290Tm9kZShOb2RlJik7CisgICAgTm9kZSogcGFyZW50VHJl
ZVNjb3BlKE5vZGUmKTsKIAotICAgIFN0cmluZyB2aXNpYmxlUGxhY2Vob2xkZXIoRWxlbWVudCop
OwotICAgIHZvaWQgc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJiBjb2xvclZhbHVlKTsKKyAgICBTdHJpbmcgdmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQm
KTsKKyAgICB2b2lkIHNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoSFRNTElucHV0RWxlbWVudCYs
IGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZSk7CiAgICAgVmVjdG9yPFN0cmluZz4gZm9ybUNvbnRy
b2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbShFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBz
ZXRGb3JtQ29udHJvbFN0YXRlT2ZQcmV2aW91c0hpc3RvcnlJdGVtKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUmVmPENsaWVudFJlY3Q+IGFic29sdXRlQ2Fy
ZXRCb3VuZHMoRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUmVmPENsaWVudFJlY3Q+IGJvdW5kaW5n
Qm94KEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmPENsaWVudFJlY3Q+IGJvdW5k
aW5nQm94KEVsZW1lbnQmKTsKIAogICAgIFJlZjxDbGllbnRSZWN0TGlzdD4gaW5zcGVjdG9ySGln
aGxpZ2h0UmVjdHMoRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyBpbnNwZWN0b3JIaWdobGln
aHRPYmplY3QoRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdW5zaWduZWQgbWFya2VyQ291bnRGb3JO
b2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUmVmUHRyPFJh
bmdlPiBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgbWFya2VyRGVzY3Jp
cHRpb25Gb3JOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgbWFya2VyQ291bnRGb3JOb2RlKE5v
ZGUmLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRyPFJhbmdlPiBt
YXJrZXJSYW5nZUZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgbWFya2VyRGVzY3JpcHRpb25G
b3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIGR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcm
IG1hcmtlclR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGFkZFRleHRNYXRjaE1hcmtl
cihjb25zdCBSYW5nZSosIGJvb2wgaXNBY3RpdmUpOworICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFy
a2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBpc0FjdGl2ZSk7CiAgICAgdm9pZCBzZXRNYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQg
aW52YWxpZGF0ZUZvbnRDYWNoZSgpOwogCi0gICAgdm9pZCBzZXRTY3JvbGxWaWV3UG9zaXRpb24o
bG9uZyB4LCBsb25nIHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFNjcm9sbFZpZXdQ
b3NpdGlvbihpbnQgeCwgaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFZpZXdC
YXNlQmFja2dyb3VuZENvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JWYWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgdm9pZCBzZXRQYWdpbmF0aW9uKGNvbnN0IFN0cmluZyYgbW9kZSwgaW50IGdh
cCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0UGFnaW5hdGlvbihtb2RlLCBnYXAsIDAsIGVjKTsg
fQpAQCAtMTc2LDIyICsxNzMsMjIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFnaW5hdGlvbkxp
bmVHcmlkRW5hYmxlZChib29sLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIGNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChmbG9hdCBkZXZpY2VQaXhlbFJhdGlvLCBpbnQgZGV2aWNlV2lkdGgs
IGludCBkZXZpY2VIZWlnaHQsIGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdo
dCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgYm9vbCB3YXNMYXN0Q2hhbmdlVXNlckVkaXQoRWxl
bWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBlbGVtZW50U2hvdWxk
QXV0b0NvbXBsZXRlKEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgc2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChFbGVtZW50KiwgYm9v
bCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRTaG93QXV0b0ZpbGxCdXR0
b24oRWxlbWVudCosIGNvbnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0b25UeXBlLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQqLCBsb25nIHgsIGxv
bmcgeSwgbG9uZyB3LCBsb25nIGgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHdhc0xhc3RD
aGFuZ2VVc2VyRWRpdChFbGVtZW50JiB0ZXh0RmllbGQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBi
b29sIGVsZW1lbnRTaG91bGRBdXRvQ29tcGxldGUoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZv
aWQgc2V0RWRpdGluZ1ZhbHVlKEhUTUxJbnB1dEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHNldEF1dG9maWxsZWQoSFRNTElucHV0RWxlbWVudCYsIGJvb2wgZW5hYmxlZCk7Cisg
ICAgdm9pZCBzZXRTaG93QXV0b0ZpbGxCdXR0b24oSFRNTElucHV0RWxlbWVudCYsIGNvbnN0IFN0
cmluZyYgYXV0b0ZpbGxCdXR0b25UeXBlKTsKKyAgICB2b2lkIHNjcm9sbEVsZW1lbnRUb1JlY3Qo
RWxlbWVudCYsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBFeGNlcHRpb25Db2RlJik7CiAK
LSAgICBTdHJpbmcgYXV0b2ZpbGxGaWVsZE5hbWUoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBTdHJpbmcgYXV0b2ZpbGxGaWVsZE5hbWUoRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIHZvaWQgcGFpbnRDb250cm9sVGludHMoRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50
IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVu
c2lnbmVkIGxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQqIHNjb3BlLCBjb25zdCBSYW5nZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCogc2Nv
cGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByYW5nZUFzVGV4
dChjb25zdCBSYW5nZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHN1YnJh
bmdlKFJhbmdlKiwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxl
bWVudCYgc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgpOworICAgIHVu
c2lnbmVkIGxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aEZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2Um
KTsKKyAgICBTdHJpbmcgcmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmKTsKKyAgICBSZWZQdHI8UmFu
Z2U+IHN1YnJhbmdlKFJhbmdlJiwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCk7
CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGlu
dCB4LCBpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXREZWxlZ2F0ZXNTY3Jv
bGxpbmcoYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CkBAIC0yMDgsNyArMjA1LDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHVuc2lnbmVkIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoRXhjZXB0aW9uQ29kZSYp
OwogCi0gICAgUmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KERvY3VtZW50KiwgaW50IHgs
IGludCB5LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsCisgICAg
UmVmUHRyPE5vZGVMaXN0PiBub2Rlc0Zyb21SZWN0KERvY3VtZW50JiwgaW50IHgsIGludCB5LCB1
bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsCiAgICAgICAgIHVuc2ln
bmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGlnbm9yZUNsaXBw
aW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBhbGxvd0NoaWxkRnJhbWVDb250ZW50
LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKICAgICBTdHJpbmcgcGFyc2VyTWV0YURhdGEoRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSgpKTsKQEAgLTI1
MywyNSArMjUwLDI1IEBAIHB1YmxpYzoKICAgICAgICAgTEFZRVJfVFJFRV9JTkNMVURFU19QQUlO
VElOR19QSEFTRVMgPSA4LAogICAgICAgICBMQVlFUl9UUkVFX0lOQ0xVREVTX0NPTlRFTlRfTEFZ
RVJTID0gMTYKICAgICB9OwotICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoRG9jdW1lbnQqLCB1
bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIFN0cmluZyBsYXllclRy
ZWVBc1RleHQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgU3RyaW5nIGxh
eWVyVHJlZUFzVGV4dChEb2N1bWVudCYsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dChEb2N1bWVudCYsIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKICAgICBTdHJpbmcgcmVwYWludFJlY3RzQXNUZXh0KEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKICAgICBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKICAgICBTdHJpbmcgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMoRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OwogICAgIFJlZlB0cjxDbGllbnRSZWN0TGlzdD4gbm9uRmFzdFNjcm9s
bGFibGVSZWN0cyhFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKLSAgICB2b2lkIHNldEVsZW1lbnRV
c2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQqLCBib29sIHVzZXNEaXNwbGF5TGlzdERyYXdp
bmcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEVsZW1lbnRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShFbGVtZW50KiwgYm9vbCBpc1RyYWNraW5nUmVwbGF5LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhFbGVtZW50JiwgYm9v
bCB1c2VzRGlzcGxheUxpc3REcmF3aW5nLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRF
bGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCYsIGJvb2wgaXNUcmFja2luZ1Jl
cGxheSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgZW51bSB7CiAgICAgICAgIC8vIFZhbHVlcyBu
ZWVkIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIEludGVybmFscy5pZGwuCiAgICAgICAgIERJU1BM
QVlfTElTVF9JTkNMVURFU19QTEFURk9STV9PUEVSQVRJT05TID0gMSwKICAgICB9OwotICAgIFN0
cmluZyBkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCosIHVuc2lnbmVkIGZsYWdzLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVu
dCYsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGRpc3BsYXlM
aXN0Rm9yRWxlbWVudChFbGVtZW50JiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgU3RyaW5nIHJl
cGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgZmxhZ3MsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1l
bnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0Rm9yRWxl
bWVudChFbGVtZW50JiwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJp
bmcgcmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQmLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICB2b2lkIGdhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXMoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogCkBAIC0yODgsOSArMjg1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGVn
YWN5SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JJc1VuZGVyVGVzdChib29sIGlzVW5kZXJUZXN0LCBF
eGNlcHRpb25Db2RlJik7CiAKLSAgICBTdHJpbmcgY291bnRlclZhbHVlKEVsZW1lbnQqKTsKKyAg
ICBTdHJpbmcgY291bnRlclZhbHVlKEVsZW1lbnQmKTsKIAotICAgIGludCBwYWdlTnVtYmVyKEVs
ZW1lbnQqLCBmbG9hdCBwYWdlV2lkdGggPSA4MDAsIGZsb2F0IHBhZ2VIZWlnaHQgPSA2MDApOwor
ICAgIGludCBwYWdlTnVtYmVyKEVsZW1lbnQmLCBmbG9hdCBwYWdlV2lkdGggPSA4MDAsIGZsb2F0
IHBhZ2VIZWlnaHQgPSA2MDApOwogICAgIFZlY3RvcjxTdHJpbmc+IHNob3J0Y3V0SWNvblVSTHMo
KSBjb25zdDsKIAogICAgIGludCBudW1iZXJPZlBhZ2VzKGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxz
ID0gODAwLCBmbG9hdCBwYWdlSGVpZ2h0SW5QaXhlbHMgPSA2MDApOwpAQCAtMzExLDEwICszMDgs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKLSAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYpOworICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50Jik7CisgICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQmKTsKKyAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50Jik7CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JU
IHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyk7
CkBAIC0zMzIsMjAgKzMyOSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wVHJhY2tpbmdSZXBh
aW50cyhFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHN0YXJ0VHJhY2tpbmdMYXllckZsdXNo
ZXMoRXhjZXB0aW9uQ29kZSYpOwotICAgIHVuc2lnbmVkIGxvbmcgbGF5ZXJGbHVzaENvdW50KEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB1bnNpZ25lZCBsYXllckZsdXNoQ291bnQoRXhjZXB0aW9uQ29k
ZSYpOwogICAgIAogICAgIHZvaWQgc3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcyhFeGNlcHRpb25D
b2RlJik7Ci0gICAgdW5zaWduZWQgbG9uZyBzdHlsZVJlY2FsY0NvdW50KEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB1bnNpZ25lZCBzdHlsZVJlY2FsY0NvdW50KEV4Y2VwdGlvbkNvZGUmKTsKIAogICAg
IHZvaWQgc3RhcnRUcmFja2luZ0NvbXBvc2l0aW5nVXBkYXRlcyhFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdW5zaWduZWQgbG9uZyBjb21wb3NpdGluZ1VwZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB1bnNpZ25lZCBjb21wb3NpdGluZ1VwZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmKTsKIAog
ICAgIHZvaWQgdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVuUG9zdExh
eW91dFRhc2tzKEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHVuc2lnbmVkIGxheW91dENvdW50KCkgY29uc3Q7CiAKICAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IHNlcmlhbGl6ZU9iamVjdChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4pIGNvbnN0OwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRlc2VyaWFsaXpl
QnVmZmVyKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KSBjb25zdDsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkZXNlcmlhbGl6ZUJ1ZmZlcihBcnJheUJ1ZmZlciYpIGNvbnN0Owog
CiAgICAgYm9vbCBpc0Zyb21DdXJyZW50V29ybGQoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUpIGNv
bnN0OwogCkBAIC0zNTQsOSArMzUxLDkgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGdldEN1cnJl
bnRDdXJzb3JJbmZvKEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmluZyBtYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0oRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgbWFya2VyVGV4
dEZvckxpc3RJdGVtKEVsZW1lbnQmKTsKIAotICAgIFN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQo
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBTdHJpbmcgdG9vbFRpcEZyb21F
bGVtZW50KEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZvaWQgZm9yY2VSZWxvYWQoYm9vbCBlbmRU
b0VuZCk7CiAKQEAgLTM3OSwxNCArMzc2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZU1v
Y2tSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKTsKICNlbmRpZgogCi0gICAgU3RyaW5nIGdldElt
YWdlU291cmNlVVJMKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldElt
YWdlU291cmNlVVJMKEVsZW1lbnQmKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHNp
bXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oTm9kZSopOwotICAgIGJvb2wgbWVkaWFFbGVtZW50SGFz
Q2hhcmFjdGVyaXN0aWMoTm9kZSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oSFRNTE1lZGlhRWxlbWVudCYpOworICAg
IGJvb2wgbWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMoSFRNTE1lZGlhRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCi0gICAgYm9vbCBpc1NlbGVj
dFBvcHVwVmlzaWJsZShOb2RlKik7CisgICAgYm9vbCBpc1NlbGVjdFBvcHVwVmlzaWJsZShIVE1M
U2VsZWN0RWxlbWVudCYpOwogCiAgICAgU3RyaW5nIGNhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRl
KEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldENhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRl
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTM5NSw3ICszOTIsNyBAQCBwdWJs
aWM6CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgUmVmPFRpbWVSYW5nZXM+IGNyZWF0ZVRpbWVS
YW5nZXMoRmxvYXQzMkFycmF5KiBzdGFydFRpbWVzLCBGbG9hdDMyQXJyYXkqIGVuZFRpbWVzKTsK
LSAgICBkb3VibGUgY2xvc2VzdFRpbWVUb1RpbWVSYW5nZXMoZG91YmxlIHRpbWUsIFRpbWVSYW5n
ZXMqKTsKKyAgICBkb3VibGUgY2xvc2VzdFRpbWVUb1RpbWVSYW5nZXMoZG91YmxlIHRpbWUsIFRp
bWVSYW5nZXMmKTsKICNlbmRpZgogCiAgICAgUmVmPENsaWVudFJlY3Q+IHNlbGVjdGlvbkJvdW5k
cyhFeGNlcHRpb25Db2RlJik7CkBAIC00MDQsMTMgKzQwMSwxMyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc1ZpYnJhdGluZygpOwogI2VuZGlmCiAKLSAgICBib29sIGlzUGx1Z2luVW5hdmFpbGFiaWxp
dHlJbmRpY2F0b3JPYnNjdXJlZChFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wg
aXNQbHVnaW5TbmFwc2hvdHRlZChFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wg
aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVkKEVsZW1lbnQmLCBFeGNlcHRp
b25Db2RlJik7CisgICAgYm9vbCBpc1BsdWdpblNuYXBzaG90dGVkKEVsZW1lbnQmKTsKIAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgV0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQgdm9p
ZCBpbml0aWFsaXplTW9ja01lZGlhU291cmNlKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gYnVmZmVy
ZWRTYW1wbGVzRm9yVHJhY2tJRChTb3VyY2VCdWZmZXIqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFNob3VsZEdlbmVyYXRlVGltZXN0YW1wcyhTb3VyY2VCdWZmZXIqLCBib29s
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKFNvdXJjZUJ1
ZmZlciYsIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZvaWQgc2V0U2hvdWxkR2VuZXJhdGVU
aW1lc3RhbXBzKFNvdXJjZUJ1ZmZlciYsIGJvb2wpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC00MTksMTYgKzQxNiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBsaWNhdGlvbkRp
ZEVudGVyRm9yZWdyb3VuZCgpIGNvbnN0OwogICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJC
YWNrZ3JvdW5kKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNZWRpYVNlc3Npb25SZXN0cmljdGlvbnMo
Y29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25zLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMoSFRNTE1l
ZGlhRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25zLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMoSFRNTE1lZGlhRWxlbWVudCYs
IGNvbnN0IFN0cmluZyYgcmVzdHJpY3Rpb25zKTsKICAgICB2b2lkIHBvc3RSZW1vdGVDb250cm9s
Q29tbWFuZChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBlbGVtZW50
SXNCbG9ja2luZ0Rpc3BsYXlTbGVlcChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBlbGVtZW50
SXNCbG9ja2luZ0Rpc3BsYXlTbGVlcChIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQogICAgIHZvaWQgc2VuZE1lZGlhU2Vzc2lvblN0
YXJ0T2ZJbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBz
ZW5kTWVkaWFTZXNzaW9uRW5kT2ZJbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24oY29uc3QgU3RyaW5n
Jik7Ci0gICAgU3RyaW5nIG1lZGlhU2Vzc2lvbkN1cnJlbnRTdGF0ZShNZWRpYVNlc3Npb24qKSBj
b25zdDsKLSAgICBkb3VibGUgbWVkaWFFbGVtZW50UGxheWVyVm9sdW1lKEhUTUxNZWRpYUVsZW1l
bnQqKSBjb25zdDsKKyAgICBTdHJpbmcgbWVkaWFTZXNzaW9uQ3VycmVudFN0YXRlKE1lZGlhU2Vz
c2lvbiYpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUVsZW1lbnRQbGF5ZXJWb2x1bWUoSFRNTE1l
ZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIHZvaWQgc2VuZE1lZGlhQ29udHJvbEV2ZW50KGNvbnN0
IFN0cmluZyYpOwogI2VuZGlmCiAKQEAgLTQzOCw3ICs0MzUsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgdm9pZCBzZXRBdWRpb0NvbnRleHRSZXN0cmlj
dGlvbnMoQXVkaW9Db250ZXh0KiwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnMsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRl
eHQmLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucyk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2lt
dWxhdGVTeXN0ZW1TbGVlcCgpIGNvbnN0OwpAQCAtNDYxLDE0ICs0NTgsMTQgQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIFN0cmluZyBzY3JvbGxT
bmFwT2Zmc2V0cyhFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBzY3JvbGxT
bmFwT2Zmc2V0cyhFbGVtZW50JiwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICBTdHJp
bmcgcGF0aFN0cmluZ1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoVmVjdG9yPGRvdWJsZT4gcmVjdENv
bXBvbmVudHMsIGRvdWJsZSByYWRpdXMsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmluZyBn
ZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCop
OworICAgIFN0cmluZyBnZXRDdXJyZW50TWVkaWFDb250cm9sc1N0YXR1c0ZvckVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCYpOwogCi0gICAgU3RyaW5nIHVzZXJWaXNpYmxlU3RyaW5nKGNvbnN0IERP
TVVSTCopOworICAgIFN0cmluZyB1c2VyVmlzaWJsZVN0cmluZyhjb25zdCBET01VUkwmKTsKICAg
ICB2b2lkIHNldFNob3dBbGxQbHVnaW5zKGJvb2wpOwogCiAgICAgU3RyaW5nIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NGb3JPcmlnaW4oU3RyaW5nIG9yaWdpbik7CkBAIC00NzgsMTYgKzQ3NSwxNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkKFNjcmlwdFN0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKICNlbmRpZgogCi0gICAgU3RyaW5nIGNvbXBvc2VkVHJlZUFzVGV4
dChOb2RlKik7CisgICAgU3RyaW5nIGNvbXBvc2VkVHJlZUFzVGV4dChOb2RlJik7CiAgICAgCiAg
ICAgdm9pZCBzZXRWaWV3cG9ydEZvcmNlQWx3YXlzVXNlclNjYWxhYmxlKGJvb2wpOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IEludGVybmFscyhEb2N1bWVudCopOworICAgIGV4cGxpY2l0IElu
dGVybmFscyhEb2N1bWVudCYpOwogICAgIERvY3VtZW50KiBjb250ZXh0RG9jdW1lbnQoKSBjb25z
dDsKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKIAotICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqIG1hcmtlckF0KE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2Vy
QXQoTm9kZSYsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JTdHViRnJvbnRlbmQ+
IG1faW5zcGVjdG9yRnJvbnRlbmQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
CmluZGV4IDZkNTM2YjQwNGUxZDBhN2VkNzU5ZDUyMmFmYjJjMzgyMDkyMTEzZjAuLmI4NWRlNDU4
OWY5ZmE0ZDI0NDRmMGNhNjU4YzkwMThlNmFlZmVhYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKQEAgLTI1LDggKzI1LDggQEAKICAqLwogCiBlbnVtIFBhZ2VPdmVybGF5VHlw
ZSB7Ci0idmlldyIsCi0iZG9jdW1lbnQiCisgICAgInZpZXciLAorICAgICJkb2N1bWVudCIKIH07
CiAKIC8vIFRoZXNlIG1hcCB0byBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeS4KQEAgLTY0LDI0
ICs2NCwyMyBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiB9OwogCiBbCi0gICAgVXNlUG9p
bnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMsCi0gICAgTm9JbnRlcmZhY2VP
YmplY3QsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQsCisgICAg
Tm9JbnRlcmZhY2VPYmplY3QsCiBdIGludGVyZmFjZSBJbnRlcm5hbHMgewogICAgIERPTVN0cmlu
ZyBhZGRyZXNzKE5vZGUgbm9kZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBub2Rl
TmVlZHNTdHlsZVJlY2FsYyhOb2RlIG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0
cmluZyBzdHlsZUNoYW5nZVR5cGUoTm9kZSBub2RlKTsKKyAgICBib29sZWFuIG5vZGVOZWVkc1N0
eWxlUmVjYWxjKE5vZGUgbm9kZSk7CisgICAgRE9NU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZShOb2Rl
IG5vZGUpOwogICAgIERPTVN0cmluZyBkZXNjcmlwdGlvbihhbnkgdmFsdWUpOwogCiAgICAgLy8g
QW5pbWF0ZWQgaW1hZ2UgcGF1c2luZyB0ZXN0aW5nLgotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJv
b2xlYW4gaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKEVsZW1lbnQgZWxlbWVudCk7CisgICAgYm9v
bGVhbiBoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVudCBlbGVtZW50KTsKIAogICAgIFtS
YWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBlbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50
IGVsZW1lbnQpOwogICAgIGJvb2xlYW4gaXNQcmVsb2FkZWQoRE9NU3RyaW5nIHVybCk7CiAgICAg
Ym9vbGVhbiBpc0xvYWRpbmdGcm9tTWVtb3J5Q2FjaGUoRE9NU3RyaW5nIHVybCk7CiAgICAgRE9N
U3RyaW5nIHhoclJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0IHhocik7Ci0gICAgYm9vbGVh
biBpc1NoYXJpbmdTdHlsZVNoZWV0Q29udGVudHMoRWxlbWVudCBsaW5rQSwgRWxlbWVudCBsaW5r
Qik7Ci0gICAgYm9vbGVhbiBpc1N0eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEVsZW1lbnQg
bGluayk7CisgICAgYm9vbGVhbiBpc1NoYXJpbmdTdHlsZVNoZWV0Q29udGVudHMoSFRNTExpbmtF
bGVtZW50IGEsIEhUTUxMaW5rRWxlbWVudCBiKTsKKyAgICBib29sZWFuIGlzU3R5bGVTaGVldExv
YWRpbmdTdWJyZXNvdXJjZXMoSFRNTExpbmtFbGVtZW50IGxpbmspOwogICAgIHZvaWQgY2xlYXJN
ZW1vcnlDYWNoZSgpOwogICAgIHZvaWQgcHJ1bmVNZW1vcnlDYWNoZVRvU2l6ZShsb25nIHNpemUp
OwogICAgIGxvbmcgbWVtb3J5Q2FjaGVTaXplKCk7CkBAIC05MCwyMSArODksMjAgQEAgZW51bSBB
dXRvRmlsbEJ1dHRvblR5cGUgewogICAgIHZvaWQgc2V0U3RyaWN0UmF3UmVzb3VyY2VWYWxpZGF0
aW9uUG9saWN5RGlzYWJsZWQoYm9vbGVhbiBkaXNhYmxlZCk7CiAKICAgICB2b2lkIGNsZWFyUGFn
ZUNhY2hlKCk7Ci0gICAgdW5zaWduZWQgaW50IHBhZ2VDYWNoZVNpemUoKTsKKyAgICB1bnNpZ25l
ZCBsb25nIHBhZ2VDYWNoZVNpemUoKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIENTU1N0eWxl
RGVjbGFyYXRpb24gY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKE5vZGUgbm9kZSk7
CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZElu
Zm8oTm9kZSBub2RlKTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgZW5zdXJlU2hhZG93
Um9vdChFbGVtZW50IGhvc3QpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgZW5zdXJlVXNl
ckFnZW50U2hhZG93Um9vdChFbGVtZW50IGhvc3QpOworICAgIE5vZGUgZW5zdXJlVXNlckFnZW50
U2hhZG93Um9vdChFbGVtZW50IGhvc3QpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgY3Jl
YXRlU2hhZG93Um9vdChFbGVtZW50IGhvc3QpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUg
c2hhZG93Um9vdChFbGVtZW50IGhvc3QpOworICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50IGhv
c3QpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKE5v
ZGUgcm9vdCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRWxlbWVudCBpbmNsdWRlckZvcihOb2Rl
IG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBzaGFkb3dQc2V1ZG9JZChF
bGVtZW50IGVsZW1lbnQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0U2hhZG93UHNl
dWRvSWQoRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgaWQpOwotICAgIFtSYWlzZXNFeGNlcHRp
b25dIE5vZGUgdHJlZVNjb3BlUm9vdE5vZGUoTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0
aW9uXSBOb2RlIHBhcmVudFRyZWVTY29wZShOb2RlIG5vZGUpOworICAgIERPTVN0cmluZyBzaGFk
b3dQc2V1ZG9JZChFbGVtZW50IGVsZW1lbnQpOworICAgIHZvaWQgc2V0U2hhZG93UHNldWRvSWQo
RWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgaWQpOworICAgIE5vZGUgdHJlZVNjb3BlUm9vdE5v
ZGUoTm9kZSBub2RlKTsKKyAgICBOb2RlIHBhcmVudFRyZWVTY29wZShOb2RlIG5vZGUpOwogCiAg
ICAgLy8gU3BhdGlhbCBOYXZpZ2F0aW9uIHRlc3RpbmcKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB1
bnNpZ25lZCBsb25nIGxhc3RTcGF0aWFsTmF2aWdhdGlvbkNhbmRpZGF0ZUNvdW50KCk7CkBAIC0x
MjEsMTYgKzExOSwxNCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAgICAgW1JhaXNlc0V4
Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoRE9NU3RyaW5n
IHByb3BlcnR5TmFtZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxl
bWVudCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRp
bWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5nIHByb3BlcnR5LCB1bnJlc3RyaWN0ZWQgZG91Ymxl
IHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcHNldWRvSWQpOwogCi0gICAg
W1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBhdHRhY2hlZChOb2RlIG5vZGUpOwotCiAgICAgRE9N
U3RyaW5nIHZpc2libGVQbGFjZWhvbGRlcihFbGVtZW50IGVsZW1lbnQpOwotICAgIHZvaWQgc2Vs
ZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihFbGVtZW50IGVsZW1lbnQsIERPTVN0cmluZyBjb2xvclZh
bHVlKTsKKyAgICB2b2lkIHNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoSFRNTElucHV0RWxlbWVu
dCBlbGVtZW50LCBET01TdHJpbmcgY29sb3JWYWx1ZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
RE9NU3RyaW5nW10gZm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbSgpOwogICAg
IFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0Rm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNIaXN0
b3J5SXRlbShzZXF1ZW5jZTxET01TdHJpbmc+IHZhbHVlcyk7CiAKICAgICBbUmFpc2VzRXhjZXB0
aW9uXSBDbGllbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKIAotICAgIFtSYWlzZXNFeGNl
cHRpb25dIENsaWVudFJlY3QgYm91bmRpbmdCb3goRWxlbWVudCBlbGVtZW50KTsKKyAgICBDbGll
bnRSZWN0IGJvdW5kaW5nQm94KEVsZW1lbnQgZWxlbWVudCk7CiAKICAgICBbUmFpc2VzRXhjZXB0
aW9uXSBDbGllbnRSZWN0TGlzdCBpbnNwZWN0b3JIaWdobGlnaHRSZWN0cygpOwogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyBpbnNwZWN0b3JIaWdobGlnaHRPYmplY3QoKTsKQEAgLTE1
OCwxMCArMTU0LDEwIEBAIGVudW0gQXV0b0ZpbGxCdXR0b25UeXBlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAgIFtS
YWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gd2FzTGFzdENoYW5nZVVzZXJFZGl0KEVsZW1lbnQgdGV4
dEZpZWxkKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGVsZW1lbnRTaG91bGRBdXRv
Q29tcGxldGUoRWxlbWVudCBpbnB1dEVsZW1lbnQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZv
aWQgc2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQgaW5wdXRFbGVtZW50LCBET01TdHJpbmcgdmFsdWUp
OwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0QXV0b2ZpbGxlZChFbGVtZW50IGlucHV0
RWxlbWVudCwgYm9vbGVhbiBlbmFibGVkKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNl
dFNob3dBdXRvRmlsbEJ1dHRvbihFbGVtZW50IGlucHV0RWxlbWVudCwgQXV0b0ZpbGxCdXR0b25U
eXBlIGF1dG9GaWxsQnV0dG9uVHlwZSk7CisgICAgYm9vbGVhbiBlbGVtZW50U2hvdWxkQXV0b0Nv
bXBsZXRlKEhUTUxJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50KTsKKyAgICB2b2lkIHNldEVkaXRp
bmdWYWx1ZShIVE1MSW5wdXRFbGVtZW50IGlucHV0RWxlbWVudCwgRE9NU3RyaW5nIHZhbHVlKTsK
KyAgICB2b2lkIHNldEF1dG9maWxsZWQoSFRNTElucHV0RWxlbWVudCBpbnB1dEVsZW1lbnQsIGJv
b2xlYW4gZW5hYmxlZCk7CisgICAgdm9pZCBzZXRTaG93QXV0b0ZpbGxCdXR0b24oSFRNTElucHV0
RWxlbWVudCBpbnB1dEVsZW1lbnQsIEF1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5
cGUpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgY291bnRNYXRjaGVzRm9y
VGV4dChET01TdHJpbmcgdGV4dCwgdW5zaWduZWQgbG9uZyBmaW5kT3B0aW9ucywgRE9NU3RyaW5n
IG1hcmtNYXRjaGVzKTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBhdXRvZmls
bEZpZWxkTmFtZShFbGVtZW50IGZvcm1Db250cm9sRWxlbWVudCk7CkBAIC0xNzAsMTEgKzE2Niwx
MSBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCBlbGVtZW50LCBsb25nIHgsIGxvbmcgeSwg
bG9uZyB3LCBsb25nIGgpOwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gUmFuZ2UgcmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCBzY29wZSwgbG9uZyByYW5nZUxvY2F0aW9uLCBsb25n
IHJhbmdlTGVuZ3RoKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGxvY2F0
aW9uRnJvbVJhbmdlKEVsZW1lbnQgc2NvcGUsIFJhbmdlIHJhbmdlKTsKLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSB1bnNpZ25lZCBsb25nIGxlbmd0aEZyb21SYW5nZShFbGVtZW50IHNjb3BlLCBSYW5n
ZSByYW5nZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHJhbmdlQXNUZXh0KFJh
bmdlIHJhbmdlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBSYW5nZSBzdWJyYW5nZShSYW5nZSBy
YW5nZSwgbG9uZyByYW5nZUxvY2F0aW9uLCBsb25nIHJhbmdlTGVuZ3RoKTsKKyAgICBSYW5nZSBy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50IHNjb3BlLCBsb25nIHJhbmdlTG9jYXRp
b24sIGxvbmcgcmFuZ2VMZW5ndGgpOworICAgIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25Gcm9tUmFu
Z2UoRWxlbWVudCBzY29wZSwgUmFuZ2UgcmFuZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3Ro
RnJvbVJhbmdlKEVsZW1lbnQgc2NvcGUsIFJhbmdlIHJhbmdlKTsKKyAgICBET01TdHJpbmcgcmFu
Z2VBc1RleHQoUmFuZ2UgcmFuZ2UpOworICAgIFJhbmdlIHN1YnJhbmdlKFJhbmdlIHJhbmdlLCBs
b25nIHJhbmdlTG9jYXRpb24sIGxvbmcgcmFuZ2VMZW5ndGgpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIFJhbmdlIHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24obG9uZyB4LCBsb25n
IHkpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXREZWxlZ2F0ZXNTY3JvbGxpbmco
Ym9vbGVhbiBlbmFibGVkKTsKQEAgLTIxOSw3ICsyMTUsNyBAQCBlbnVtIEF1dG9GaWxsQnV0dG9u
VHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGlzUGFnZUJveFZpc2libGUo
bG9uZyBwYWdlTnVtYmVyKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcg
aW1hZ2VGcmFtZUluZGV4KEVsZW1lbnQgZWxlbWVudCk7CisgICAgdW5zaWduZWQgbG9uZyBpbWFn
ZUZyYW1lSW5kZXgoSFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsKIAogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJbnRlcm5hbFNldHRpbmdzIHNldHRpbmdzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIHdvcmtlclRocmVhZENvdW50OwpAQCAtMzM1LDE3ICszMzEsMTcgQEAg
ZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogCiAgICAgLy8gfG5vZGV8IHNob3VsZCBiZSBEb2N1
bWVudCwgSFRNTElGcmFtZUVsZW1lbnQsIG9yIHVuc3BlY2lmaWVkLgogICAgIC8vIElmIHxub2Rl
fCBpcyBhbiBIVE1MSUZyYW1lRWxlbWVudCwgaXQgYXNzdW1lcyBub2RlLmNvbnRlbnREb2N1bWVu
dCBpcwotICAgIC8vIHNwZWNpZmllZCB3aXRob3V0IHNlY3VyaXR5IGNoZWNrcy4gVW5zcGVjaWZp
ZWQgbWVhbnMgdGhpcyBkb2N1bWVudC4KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhvcHRp
b25hbCBOb2RlIG5vZGUpOworICAgIC8vIHNwZWNpZmllZCB3aXRob3V0IHNlY3VyaXR5IGNoZWNr
cy4gVW5zcGVjaWZpZWQgb3IgbnVsbCBtZWFucyB0aGlzIGRvY3VtZW50LgorICAgIFtSYWlzZXNF
eGNlcHRpb25dIHZvaWQgdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5kUnVu
UG9zdExheW91dFRhc2tzKG9wdGlvbmFsIE5vZGU/IG5vZGUpOwogCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbGF5b3V0Q291bnQ7CiAKICAgICAvLyBSZXR1cm5zIGEgc3Ry
aW5nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vdXNlIGN1cnNvciB1c2VkIGF0IHRoZSBz
cGVjaWZpZWQgY2xpZW50IGxvY2F0aW9uLgogICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmlu
ZyBnZXRDdXJyZW50Q3Vyc29ySW5mbygpOwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3Ry
aW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50IGVsZW1lbnQpOworICAgIERPTVN0cmlu
ZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCBlbGVtZW50KTsKIAotICAgIFtSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsK
KyAgICBET01TdHJpbmcgdG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7CiAKICAg
ICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlCdWZmZXIgYnVm
ZmVyKTsKICAgICBBcnJheUJ1ZmZlciBzZXJpYWxpemVPYmplY3QoU2VyaWFsaXplZFNjcmlwdFZh
bHVlIG9iaik7CkBAIC0zNTksMTQgKzM1NSwxNCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7
CiAKICAgICB2b2lkIGVuYWJsZUF1dG9TaXplTW9kZShib29sZWFuIGVuYWJsZWQsIGxvbmcgbWlu
aW11bVdpZHRoLCBsb25nIG1pbmltdW1IZWlnaHQsIGxvbmcgbWF4aW11bVdpZHRoLCBsb25nIG1h
eGltdW1IZWlnaHQpOwogCi0gICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2b2lkIHNpbXVsYXRlQXVk
aW9JbnRlcnJ1cHRpb24oTm9kZSBub2RlKTsKLSAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJhaXNl
c0V4Y2VwdGlvbl0gYm9vbGVhbiBtZWRpYUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhOb2RlIG5v
ZGUsIERPTVN0cmluZyBjaGFyYWN0ZXJpc3RpYyk7CisgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2
b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50KTsK
KyAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBtZWRpYUVs
ZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhIVE1MTWVkaWFFbGVtZW50IGVsZW1lbnQsIERPTVN0cmlu
ZyBjaGFyYWN0ZXJpc3RpYyk7CiAKICAgICBbQ29uZGl0aW9uYWw9RU5DUllQVEVEX01FRElBX1Yy
XSB2b2lkIGluaXRpYWxpemVNb2NrQ0RNKCk7CiAKICAgICBbQ29uZGl0aW9uYWw9U1BFRUNIX1NZ
TlRIRVNJU10gdm9pZCBlbmFibGVNb2NrU3BlZWNoU3ludGhlc2l6ZXIoKTsKIAotICAgIFtSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyBnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50IGVsZW1lbnQp
OworICAgIERPTVN0cmluZyBnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50IGVsZW1lbnQpOwogCiAg
ICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBj
YXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwogICAgIFtDb25kaXRpb25hbD1WSURFT19UUkFD
SywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldENhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRlKERP
TVN0cmluZyBvdmVycmlkZSk7CkBAIC0zNzcsMTQgKzM3MywxNCBAQCBlbnVtIEF1dG9GaWxsQnV0
dG9uVHlwZSB7CiAgICAgIGVuZFRpbWVzKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHVucmVz
dHJpY3RlZCBkb3VibGUgY2xvc2VzdFRpbWVUb1RpbWVSYW5nZXModW5yZXN0cmljdGVkIGRvdWJs
ZSB0aW1lLCBUaW1lUmFuZ2VzIHJhbmdlcyk7CiAKLSAgICBib29sZWFuIGlzU2VsZWN0UG9wdXBW
aXNpYmxlKE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBpc1NlbGVjdFBvcHVwVmlzaWJsZShIVE1M
U2VsZWN0RWxlbWVudCBlbGVtZW50KTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX1ZJQlJBVElPTikg
JiYgRU5BQkxFX1ZJQlJBVElPTgogICAgIGJvb2xlYW4gaXNWaWJyYXRpbmcoKTsKICNlbmRpZgog
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBpc1BsdWdpblVuYXZhaWxhYmlsaXR5SW5k
aWNhdG9yT2JzY3VyZWQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBi
b29sZWFuIGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCBlbGVtZW50KTsKKyAgICBib29sZWFu
IGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCBlbGVtZW50KTsKIAogICAgIFtSYWlzZXNFeGNl
cHRpb25dIENsaWVudFJlY3Qgc2VsZWN0aW9uQm91bmRzKCk7CiAKQEAgLTQwMiw4ICszOTgsOCBA
QCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2b2lk
IGFwcGxpY2F0aW9uRGlkRW50ZXJGb3JlZ3JvdW5kKCk7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVP
XSB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpOwogICAgIFtDb25kaXRpb25h
bD1WSURFTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9u
cyhET01TdHJpbmcgbWVkaWFUeXBlLCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKLSAgICBbQ29u
ZGl0aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRNZWRpYUVsZW1lbnRSZXN0
cmljdGlvbnMoSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcmVzdHJpY3Rpb25z
KTsKLSAgICBbQ29uZGl0aW9uYWw9V0VCX0FVRElPLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0
QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCBjb250ZXh0LCBET01TdHJpbmcg
cmVzdHJpY3Rpb25zKTsKKyAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2V0TWVkaWFFbGVt
ZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJlc3Ry
aWN0aW9ucyk7CisgICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJT10gdm9pZCBzZXRBdWRpb0NvbnRl
eHRSZXN0cmljdGlvbnMoQXVkaW9Db250ZXh0IGNvbnRleHQsIERPTVN0cmluZyByZXN0cmljdGlv
bnMpOwogICAgIFtDb25kaXRpb25hbD1WSURFTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHBvc3RS
ZW1vdGVDb250cm9sQ29tbWFuZChET01TdHJpbmcgY29tbWFuZCk7CiAgICAgW0NvbmRpdGlvbmFs
PVdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCBzZXRNb2NrTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlckVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VULCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0TW9ja01lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJTdGF0ZShET01TdHJpbmcgZGV2aWNlTmFtZSwgRE9NU3RyaW5nIGRl
dmljZVN0YXRlKTsKQEAgLTQxMSw3ICs0MDcsNyBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7
CiAKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2ltdWxhdGVTeXN0ZW1TbGVlcCgpOwog
ICAgIFtDb25kaXRpb25hbD1WSURFT10gdm9pZCBzaW11bGF0ZVN5c3RlbVdha2UoKTsKLSAgICBb
Q29uZGl0aW9uYWw9VklERU9dIGJvb2xlYW4gZWxlbWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAo
RWxlbWVudCBlbGVtZW50KTsKKyAgICBbQ29uZGl0aW9uYWw9VklERU9dIGJvb2xlYW4gZWxlbWVu
dElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50KTsKIAogICAg
IFtSYWlzZXNFeGNlcHRpb25dIE1vY2tQYWdlT3ZlcmxheSBpbnN0YWxsTW9ja1BhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5VHlwZSB0eXBlKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcg
cGFnZU92ZXJsYXlMYXllclRyZWVBc1RleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLm1tIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
bW0KaW5kZXggNDQzZTJkZWI2NzU4ODBiODBiMTYwNmE1MWNlNjdiYTIzOTcyMTQ4OS4uMWI5OTIx
YzExNGRjMTcwNGYyOTQyMmI5MmQ5MDNjMDIwM2Y0OTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMubW0KQEAgLTM0LDkgKzM0LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
dHJpbmcgSW50ZXJuYWxzOjp1c2VyVmlzaWJsZVN0cmluZyhjb25zdCBET01VUkwqIHVybCkKK1N0
cmluZyBJbnRlcm5hbHM6OnVzZXJWaXNpYmxlU3RyaW5nKGNvbnN0IERPTVVSTCYgdXJsKQogewot
ICAgIHJldHVybiBjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCkuY2xpZW50KCkt
PnVzZXJWaXNpYmxlU3RyaW5nKHVybC0+aHJlZigpKTsKKyAgICByZXR1cm4gY29udGV4dERvY3Vt
ZW50KCktPmZyYW1lKCktPmVkaXRvcigpLmNsaWVudCgpLT51c2VyVmlzaWJsZVN0cmluZyh1cmwu
aHJlZigpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9X
ZWJDb3JlVGVzdFN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwCmluZGV4IGY3Yzk3MWM4MDJmMTZiMTY5NTIwM2M0MDAyYmQ1MDAxZTZm
NzAwNDguLjdmNWE1ODUzODE3ZTFlNWUxZjFjMGY2NzllM2ZiOGQ1ZDQxMWZiNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKQEAgLTUx
LDcgKzUxLDcgQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIGlmIChpczxEb2N1bWVudD4oKnNjcmlwdENvbnRleHQpKQotICAg
ICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgSW50ZXJuYWxzOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdENvbnRleHQp
KSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3Jp
cHRDb250ZXh0KSkpKTsKIH0KIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCByZXNldEludGVybmFsc09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2Jq
ZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUGFnZSogcGFnZSA9IGRvd25jYXN0
PERvY3VtZW50PihzY3JpcHRDb250ZXh0KS0+ZnJhbWUoKS0+cGFnZSgpOwotICAgIEludGVybmFs
czo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShwYWdlKTsKKyAgICBJbnRlcm5hbHM6OnJlc2V0VG9D
b25zaXN0ZW50U3RhdGUoKnBhZ2UpOwogICAgIEludGVybmFsU2V0dGluZ3M6OmZyb20ocGFnZSkt
PnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDNjNTJmMTQ3Y2U0M2I2ZGUz
MWNiOGNlNjQ1ODJiMzk1NjJjZmNmN2QuLjk5NmIxYjNmOTg5NTYxMmQ5MWE0MGM2NDk3NDFhYzUw
NzgzMjQ2ZjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wNC0xMyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFVzZVBvaW50ZXJzRXZlbkZvck5v
bk51bGxhYmxlT2JqZWN0QXJndW1lbnRzIGZyb20gSW50ZXJuYWxzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY1MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZm9ybXMvY29sb3IvaW5wdXQt
Y29sb3Itb25jaGFuZ2UtZXZlbnQtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvY29sb3IvaW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQuaHRtbDogUmVtb3ZlZCB1
bm5lZWRlZCB0ZXN0IG9mIGhvdyB0aGUKKyAgICAgICAgaW50ZXJuYWxzIG9iamVjdCBoYW5kbGVz
IGluY29ycmVjdCB2YWx1ZXMgcGFzc2VkIHRvIHRoZSB0ZXN0IGZ1bmN0aW9uLiBUaGlzIHdhc24n
dCB0ZXN0aW5nCisgICAgICAgIGFjdHVhbCBXZWJLaXQgY29kZSBhdCBhbGwsIGl0IHdhcyBqdXN0
IGEgdGVzdCBvZiB0aGUgaW50ZXJuYWxzIG9iamVjdCBpbXBsZW1lbnRhdGlvbi4KKwogMjAxNi0w
NC0xMiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
YXQgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlOiBib29sIFdURjo6c3RhcnRzV2l0aDxXVEY6OlN0
cmluZ0ltcGwsIFdURjo6U3RyaW5nSW1wbD4gKyA4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY29sb3IvaW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQt
ZXhwZWN0ZWQudHh0CmluZGV4IDg4Y2Q3MTM5YTE4YTFmODcyYzMzNDIwMmFmZTU3NjQzZWZjMWI5
ZDIuLjNjNzdlMTBkMTAxODg1YjQ5NWIyNWQ2MjAwNTUxZGY1NDk1OGUyOTMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY29sb3IvaW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY29sb3IvaW5wdXQtY29s
b3Itb25jaGFuZ2UtZXZlbnQtZXhwZWN0ZWQudHh0CkBAIC01LDkgKzUsNiBAQCBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURQogCiAKIFBBU1Mgb25DaGFuZ2VDb3VudCBpcyAwCi1pbnRlcm5hbHMuc2Vs
ZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcih7fSwgJyNmZjAwMDAnKTsKLWludGVybmFscy5zZWxlY3RD
b2xvckluQ29sb3JDaG9vc2VyKGRvY3VtZW50LCAnI2ZmMDAwMCcpOwotUEFTUyBvbkNoYW5nZUNv
dW50IGlzIDAKIGlucHV0IGV2ZW50IGRpc3BhdGNoZWQgLSB2YWx1ZSBpczogICNmZjAwMDAKIGNo
YW5nZSBldmVudCBkaXNwYXRjaGVkIC0gdmFsdWUgY2hhbmdlZCB0byAjZmYwMDAwCiBQQVNTIG9u
Q2hhbmdlQ291bnQgaXMgMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jb2xv
ci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9jb2xvci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC5odG1sCmluZGV4IGNiNjQzYTAwYjk5
ODFmYmI3NTA3NmM3ZDgxMmVjZWQwZjlkZDkxZDYuLjlmNzc5ODg4MGZkMTgwYjY1ODhhMDU0YWVm
OGI3N2IyNThiMjkyODMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY29sb3Iv
aW5wdXQtY29sb3Itb25jaGFuZ2UtZXZlbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwKQEAgLTM1LDEwICszNSw2
IEBAIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwogZXZlbnRTZW5kZXIubW91c2VVcCgpOwogCiBz
aG91bGRCZSgnb25DaGFuZ2VDb3VudCcsICcwJyk7Ci0vLyBUZXN0IHRoYXQgaW5jb3JyZWN0IGVs
ZW1lbnQgYXJndW1lbnRzIGFyZSAobm90KSBoYW5kbGVkLgotZXZhbEFuZExvZygiaW50ZXJuYWxz
LnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoe30sICcjZmYwMDAwJyk7Iik7Ci1ldmFsQW5kTG9n
KCJpbnRlcm5hbHMuc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3Nlcihkb2N1bWVudCwgJyNmZjAwMDAn
KTsiKTsKLXNob3VsZEJlKCdvbkNoYW5nZUNvdW50JywgJzAnKTsKIAogLy8gaW5wdXQub25jaGFu
Z2Ugc2hvdWxkIGJlIGNhbGxlZAogaW50ZXJuYWxzLnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIo
aW5wdXQsICcjZmYwMDAwJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276372</attachid>
            <date>2016-04-13 21:43:45 -0700</date>
            <delta_ts>2016-04-14 10:10:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156539-20160413214427.patch</filename>
            <type>text/plain</type>
            <size>103210</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxNi0wNC0xMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFVzZVBvaW50ZXJzRXZl
bkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzIGZyb20gSW50ZXJuYWxzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY1MzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxl
bWVudC5pZGw6IEV4cG9ydGVkIHRoaXMgc28gaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHR5cGUgZm9y
CisgICAgICAgIGEgZnVuY3Rpb24gYXJndW1lbnQgaW4gSW50ZXJuYWxzLmlkbC4KKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxM
aW5rRWxlbWVudC5pZGw6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
aWRsOiBEaXR0by4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0dWJGcm9udGVuZDo6SW5zcGVjdG9yU3R1YkZyb250ZW5kKTog
VGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjcmVhdGUpOiBUYWtl
IGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29uc2lz
dGVudFN0YXRlKTogVGFrZSBhIFBhZ2UmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJ
bnRlcm5hbHMpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpzZXR0aW5ncyk6IFVzZSBudWxscHRyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6YWRkcmVzcyk6IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6bm9kZU5lZWRzU3R5bGVSZWNhbGMpOiBUYWtlIGEgTm9kZSYgYW5kIG5vIEV4Y2Vw
dGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZUNoYW5nZVR5cGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6eGhyUmVzcG9uc2VTb3VyY2Up
OiBUYWtlIGFuIFhNTEh0dHBSZXF1ZXN0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
aXNTaGFyaW5nU3R5bGVTaGVldENvbnRlbnRzKTogVGFrZSB0d28KKyAgICAgICAgSFRNTExpbmtF
bGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTdHlsZVNoZWV0TG9hZGlu
Z1N1YnJlc291cmNlcyk6IFRha2UgYW4gSFRNTExpbmtFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6aW1hZ2VGcmFtZUluZGV4KTogVGFrZSBhbiBIVE1MSW1hZ2VFbGVtZW50
JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuIEFsc28gcmV0dXJuIGFuIHVuc2lnbmVk
IHJhdGhlciB0aGFuIHNpemVfdCwgc2luY2UgdGhlIElETCBleHBlY3RzCisgICAgICAgIHVuc2ln
bmVkIGxvbmcsIHdoaWNoIG1lYW5zIHVuc2lnbmVkIGluIEMrKyBjb2RlLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZSk6IFRha2UgYSBOb2RlJiBhbmQgbm8g
RXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhcmVudFRyZWVT
Y29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6YXR0YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbGVt
ZW50UmVuZGVyVHJlZUFzVGV4dCk6IFRha2UgYW4gRWxlbWVudCYuCisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6Omhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyk6IFRha2UgYW4gRWxlbWVudCYg
YW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOiBUYWtlIGEgTm9kZSYgYW5k
IG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjplbnN1cmVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVudCYg
YW5kIG5vCisgICAgICAgIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpjcmVhdGVTaGFkb3dSb290KTogVGFrZSBhbiBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6c2hhZG93Um9vdCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2Vw
dGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dSb290VHlwZSk6
IFRha2UgYSBOb2RlJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aW5jbHVkZXJGb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaGFkb3dQc2V1ZG9JZCk6
IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpzZXRTaGFkb3dQc2V1ZG9JZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjp2aXNpYmxlUGxhY2Vob2xkZXIpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKTogVGFr
ZSBhbiBIVE1MSW5wdXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Ym91
bmRpbmdCb3gpOiBUYWtlIGFuIEVsZW1lbnQmIGFuZCBubyBFeGNlcHRpb25Db2RlJi4KKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKTogVGFrZSBhIE5vZGUm
LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJBdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFkZFRleHRNYXRjaE1hcmtlcik6IFRha2Ug
YSBjb25zdCBSYW5nZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNjcm9sbFZp
ZXdQb3NpdGlvbik6IFRha2UgaW50IGluc3RlYWQgb2YgbG9uZzsgbG9uZyBpbgorICAgICAgICBJ
REwgbWVhbnMgaW50IGluIEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp3
YXNMYXN0Q2hhbmdlVXNlckVkaXQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjplbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKTogVGFrZSBhbiBIVE1MSW5w
dXRFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0RWRpdGluZ1ZhbHVl
KTogVGFrZSBhbiBIVE1MSW5wdXRFbGVtZW50JiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29k
ZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEF1dG9maWxsZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0U2hvd0F1dG9GaWxsQnV0dG9uKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3QpOiBU
YWtlIGFuIEVsZW1lbnQmIGFuZCBpbnQgaW5zdGVhZCBvZiBsb25nLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjphdXRvZmlsbEZpZWxkTmFtZSk6IFRha2UgYW4gRWxlbWVudCYuCisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKTogVGFr
ZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZSk6IFRha2UgYW4gRWxlbWVudCYgYW5kIGNvbnN0IFJh
bmdlJiBhbmQgbm8KKyAgICAgICAgRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OnJhbmdlQXNUZXh0KTogVGFrZSBjb25zdCBSYW5nZSYgYW4gbm8gRXhjZXB0aW9u
Q29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogVGFrZSBSYW5n
ZSYgYW4gbm8gRXhjZXB0aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om5v
ZGVzRnJvbVJlY3QpOiBUYWtlIGEgRG9jdW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpvcGVuRHVtbXlJbnNwZWN0b3JGcm9udGVuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQpOiBUYWtlIGFuIEVsZW1lbnQmLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbGVtZW50VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZGlz
cGxheUxpc3RGb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnJlcGxheURpc3BsYXlMaXN0Rm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjpjb3VudGVyVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGFnZU51bWJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp3
ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6d2Via2l0
RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudCk6IFJldHVybiB1bnNpZ25lZCBpbnN0ZWFkIG9mIHVu
c2lnbmVkIGxvbmcuCisgICAgICAgIElETCB1bnNpZ25lZCBsb25nIG1lYW5zIHVuc2lnbmVkIGlu
IEMrKyBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdHlsZVJlY2FsY0NvdW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmNvbXBvc2l0aW5nVXBkYXRl
Q291bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZGVzZXJpYWxpemVC
dWZmZXIpOiBUYWtlIGFuIEFycmF5QnVmZmVyJi4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTogVGFrZSBhbiBFbGVtZW50JiBhbmQgbm8gRXhjZXB0
aW9uQ29kZSYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJjZVVS
TCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzaW11bGF0ZUF1ZGlvSW50
ZXJydXB0aW9uKTogVGFrZSBhbiBIVE1MTWVkaWFFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6bWVkaWFFbGVtZW50SGFzQ2hhcmFjdGVyaXN0aWMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNTZWxlY3RQb3B1cFZpc2libGUpOiBUYWtlIGFuIEhU
TUxTZWxlY3RFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y2xvc2VzdFRp
bWVUb1RpbWVSYW5nZXMpOiBUYWtlIGEgVGltZVJhbmdlJi4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRvck9ic2N1cmVkKTogVGFrZSBh
biBFbGVtZW50Ji4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQbHVnaW5TbmFwc2hv
dHRlZCk6IFRha2UgYW4gRWxlbWVudCYgYW5kIG5vIEV4Y2VwdGlvbkNvZGUmLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKTogVGFrZSBhIFNv
dXJjZUJ1ZmZlciYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFNob3VsZEdlbmVy
YXRlVGltZXN0YW1wcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRN
ZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbGVtZW50SXNCbG9ja2luZ0Rpc3BsYXlTbGVlcCk6
IFRha2UgYW4gSFRNTE1lZGlhRWxlbWVudCYuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyk6IFRha2UgYW4gQXVkaW9Db250ZXh0Ji4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsU25hcE9mZnNldHMpOiBUYWtlIGFuIEVs
ZW1lbnQmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpnZXRDdXJyZW50TWVkaWFDb250
cm9sc1N0YXR1c0ZvckVsZW1lbnQpOiBUYWtlIGFuIEhUTUxNZWRpYUVsZW1lbnQmLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VyVmlzaWJsZVN0cmluZyk6IFRha2UgYSBjb25zdCBE
T01VUkwmLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjb21wb3NlZFRyZWVBc1RleHQp
OiBUYWtlIGEgTm9kZSYuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOiBVcGRhdGUg
Zm9yIGFsbCB0aGUgY2hhbmdlcyBsaXN0ZWQgYWJvdmUuCisKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5pZGw6IFJlbW92ZWQgVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RB
cmd1bWVudHMuIFJlbW92ZWQKKyAgICAgICAgbWFueSB1bm5lZWRlZCBbUmFpc2VzRXhjZXB0aW9u
XS4gVXNlZCBtb3JlIHNwZWNpZmljIHR5cGVzIGZvciBtYW55IGFyZ3VtZW50cy4gUmVtb3ZlZAor
ICAgICAgICB1bnVzZWQsIGFuZCB1bmltcGxlbWVudGVkLCBhdHRhY2hlZCBhbmQgaW5jbHVkZWRG
b3IgZnVuY3Rpb25zLiBNYWRlIHRoZSBub2RlIGFyZ3VtZW50IHRvCisgICAgICAgIHVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyBudWxsYWJs
ZSBhcyB3ZWxsIGFzIG9wdGlvbmFsLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMubW06
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnVzZXJWaXNpYmxlU3RyaW5nKTogVGFrZSBh
IGNvbnN0IERPTVVSTCYuCisKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9y
dC5jcHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVj
dCk6IFBhc3MgYSBEb2N1bWVudCYgcmF0aGVyIHRoYW4gYSBEb2N1bWVudCouCisgICAgICAgIChX
ZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KTogUGFzcyBhIFBhZ2UmIHJh
dGhlciB0aGFuIGEgUGFnZSouCisKIDIwMTYtMDQtMTMgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIENTUDogTmVzdGVkIGJyb3dzaW5nIGNvbnRleHQgY3JlYXRl
ZCBmb3IgPG9iamVjdD4gb3IgPGVtYmVkPiBzaG91bGQgcmVzcGVjdCBvYmplY3Qtc3JjIGRpcmVj
dGl2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCShyZXZp
c2lvbiAxOTk1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogWworICAgIEV4cG9ydE1h
Y3JvPVdFQkNPUkVfRVhQT1JULAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKIF0gaW50
ZXJmYWNlIEhUTUxJbWFnZUVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0
dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmlkbAkocmV2aXNpb24gMTk5NTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksMTAgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLWludGVyZmFjZSBIVE1MSW5wdXRF
bGVtZW50IDogSFRNTEVsZW1lbnQgeworWworICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JU
LAorICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKK10gaW50ZXJmYWNlIEhUTUxJbnB1dEVs
ZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcg
YWNjZXB0OwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFsdDsKICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGF1dG9jb21wbGV0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTExpbmtFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMaW5rRWxlbWVudC5pZGwJKHJldmlzaW9uIDE5OTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksMTAgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLWludGVyZmFjZSBIVE1MTGlu
a0VsZW1lbnQgOiBIVE1MRWxlbWVudCB7CitbCisgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBP
UlQsCisgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAorXSBpbnRlcmZhY2UgSFRNTExpbmtF
bGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBk
aXNhYmxlZDsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBjaGFyc2V0OwogICAg
IFtSZWZsZWN0LCBVUkxdIGF0dHJpYnV0ZSBET01TdHJpbmcgaHJlZjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCShyZXZpc2lvbiAxOTk1MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNiArMjAsOCBAQAogCiBbCiAgICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKKyAgICBFeHBv
cnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKKyAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBd
IGludGVyZmFjZSBIVE1MU2VsZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICBbUmVmbGVj
dF0gYXR0cmlidXRlIGJvb2xlYW4gYXV0b2ZvY3VzOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUg
Ym9vbGVhbiBkaXNhYmxlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJ
KHJldmlzaW9uIDE5OTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIGNsYXNzIEluc3BlY3RvclN0dWJGcm9udGVuZCA6IHB1YmxpYyBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLCBwdWJsaWMgRnJvbnRlbmRDaGFubmVsIHsKIHB1YmxpYzoKLSAg
ICBJbnNwZWN0b3JTdHViRnJvbnRlbmQoUGFnZSogaW5zcGVjdGVkUGFnZSwgUmVmUHRyPERPTVdp
bmRvdz4mJiBmcm9udGVuZFdpbmRvdyk7CisgICAgSW5zcGVjdG9yU3R1YkZyb250ZW5kKFBhZ2Um
IGluc3BlY3RlZFBhZ2UsIFJlZlB0cjxET01XaW5kb3c+JiYgZnJvbnRlbmRXaW5kb3cpOwogICAg
IHZpcnR1YWwgfkluc3BlY3RvclN0dWJGcm9udGVuZCgpOwogCiAgICAgLy8gSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQgQVBJCkBAIC0yNzQsMTYgKzI3NCwxNSBAQCBwcml2YXRlOgogICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXImIG1fZnJvbnRlbmRDb250cm9sbGVyOwogfTsKIAotSW5zcGVjdG9yU3R1
YkZyb250ZW5kOjpJbnNwZWN0b3JTdHViRnJvbnRlbmQoUGFnZSogaW5zcGVjdGVkUGFnZSwgUmVm
UHRyPERPTVdpbmRvdz4mJiBmcm9udGVuZFdpbmRvdykKLSAgICA6IEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwoJmluc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgZnJvbnRl
bmRXaW5kb3ctPmRvY3VtZW50KCktPnBhZ2UoKSwgc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpTZXR0aW5ncz4oKSkKK0luc3BlY3RvclN0dWJGcm9udGVuZDo6
SW5zcGVjdG9yU3R1YkZyb250ZW5kKFBhZ2UmIGluc3BlY3RlZFBhZ2UsIFJlZlB0cjxET01XaW5k
b3c+JiYgZnJvbnRlbmRXaW5kb3cpCisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
KCZpbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKSwgZnJvbnRlbmRXaW5kb3ctPmRv
Y3VtZW50KCktPnBhZ2UoKSwgc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsOjpTZXR0aW5ncz4oKSkKICAgICAsIG1fZnJvbnRlbmRXaW5kb3coZnJvbnRlbmRXaW5k
b3cuY29weVJlZigpKQogICAgICwgbV9mcm9udGVuZENvbnRyb2xsZXIoZnJvbnRlbmRQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKSkKIHsKLSAgICBBU1NFUlRfQVJHKGluc3BlY3RlZFBhZ2Us
IGluc3BlY3RlZFBhZ2UpOwogICAgIEFTU0VSVF9BUkcoZnJvbnRlbmRXaW5kb3csIGZyb250ZW5k
V2luZG93KTsKIAogICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KHRoaXMpOwotICAgIGluc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5j
b25uZWN0RnJvbnRlbmQodGhpcyk7CisgICAgaW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDb250cm9s
bGVyKCkuY29ubmVjdEZyb250ZW5kKHRoaXMpOwogfQogCiBJbnNwZWN0b3JTdHViRnJvbnRlbmQ6
On5JbnNwZWN0b3JTdHViRnJvbnRlbmQoKQpAQCAtMzU4LDcgKzM1Nyw3IEBAIHN0YXRpYyBib29s
IG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcKIAogY29uc3QgY2hhciogSW50ZXJuYWxzOjpp
bnRlcm5hbHNJZCA9ICJpbnRlcm5hbHMiOwogCi1SZWY8SW50ZXJuYWxzPiBJbnRlcm5hbHM6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCitSZWY8SW50ZXJuYWxzPiBJbnRlcm5hbHM6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW50ZXJu
YWxzKGRvY3VtZW50KSk7CiB9CkBAIC0zNjcsMjMgKzM2NiwyMSBAQCBJbnRlcm5hbHM6On5JbnRl
cm5hbHMoKQogewogfQogCi12b2lkIEludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShQ
YWdlKiBwYWdlKQordm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYg
cGFnZSkKIHsKLSAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICBwYWdlLT5zZXRQYWdlU2NhbGVGYWN0
b3IoMSwgSW50UG9pbnQoMCwgMCkpOwotICAgIHBhZ2UtPnNldFBhZ2luYXRpb24oUGFnaW5hdGlv
bigpKTsKLSAgICBwYWdlLT5zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGZhbHNlKTsKKyAg
ICBwYWdlLnNldFBhZ2VTY2FsZUZhY3RvcigxLCBJbnRQb2ludCgwLCAwKSk7CisgICAgcGFnZS5z
ZXRQYWdpbmF0aW9uKFBhZ2luYXRpb24oKSk7CisgICAgcGFnZS5zZXRQYWdpbmF0aW9uTGluZUdy
aWRFbmFibGVkKGZhbHNlKTsKIAotICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwor
ICAgIHBhZ2Uuc2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAgICAgCi0gICAgcGFnZS0+bWFpbkZy
YW1lKCkuc2V0VGV4dFpvb21GYWN0b3IoMS4wZik7CisgICAgcGFnZS5tYWluRnJhbWUoKS5zZXRU
ZXh0Wm9vbUZhY3RvcigxLjBmKTsKICAgICAKLSAgICBGcmFtZVZpZXcqIG1haW5GcmFtZVZpZXcg
PSBwYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3
ID0gcGFnZS5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgaWYgKG1haW5GcmFtZVZpZXcpIHsKICAg
ICAgICAgbWFpbkZyYW1lVmlldy0+c2V0SGVhZGVySGVpZ2h0KDApOwogICAgICAgICBtYWluRnJh
bWVWaWV3LT5zZXRGb290ZXJIZWlnaHQoMCk7Ci0gICAgICAgIHBhZ2UtPnNldFRvcENvbnRlbnRJ
bnNldCgwKTsKKyAgICAgICAgcGFnZS5zZXRUb3BDb250ZW50SW5zZXQoMCk7CiAgICAgICAgIG1h
aW5GcmFtZVZpZXctPnNldFVzZUZpeGVkTGF5b3V0KGZhbHNlKTsKICAgICAgICAgbWFpbkZyYW1l
Vmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUoKSk7CiAgICAgfQpAQCAtMzkxLDE2ICsz
ODgsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUAogICAgIFdl
YkNvcmU6Om92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhWZWN0b3I8U3RyaW5nPigpKTsK
ICAgICBXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKTsK
ICAgICBXZWJDb3JlOjpTZXR0aW5nczo6c2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihmYWxzZSk7
Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldExlZ2FjeVByb2ZpbGVyRW5hYmxl
ZChmYWxzZSk7CisgICAgcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0TGVnYWN5UHJvZmls
ZXJFbmFibGVkKGZhbHNlKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgcGFnZS0+Z3Jv
dXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5zZXRDYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZShl
bXB0eVN0cmluZygpKTsKLSAgICBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNl
dFRlc3RpbmdNb2RlKGZhbHNlKTsKKyAgICBwYWdlLmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCkuc2V0Q2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoZW1wdHlTdHJpbmcoKSk7CisgICAgcGFn
ZS5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldFRlc3RpbmdNb2RlKGZhbHNlKTsKICNl
bmRpZgotICAgIGlmICghcGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCkuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkuZWRpdG9yKCku
dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsKLSAgICBpZiAocGFnZS0+bWFpbkZyYW1l
KCkuZWRpdG9yKCkuaXNPdmVyd3JpdGVNb2RlRW5hYmxlZCgpKQotICAgICAgICBwYWdlLT5tYWlu
RnJhbWUoKS5lZGl0b3IoKS50b2dnbGVPdmVyd3JpdGVNb2RlRW5hYmxlZCgpOwotICAgIHBhZ2Ut
Pm1haW5GcmFtZSgpLmxvYWRlcigpLmNsZWFyVGVzdGluZ092ZXJyaWRlcygpOworICAgIGlmICgh
cGFnZS5tYWluRnJhbWUoKS5lZGl0b3IoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpKQorICAgICAgICBwYWdlLm1haW5GcmFtZSgpLmVkaXRvcigpLnRvZ2dsZUNvbnRpbnVvdXNT
cGVsbENoZWNraW5nKCk7CisgICAgaWYgKHBhZ2UubWFpbkZyYW1lKCkuZWRpdG9yKCkuaXNPdmVy
d3JpdGVNb2RlRW5hYmxlZCgpKQorICAgICAgICBwYWdlLm1haW5GcmFtZSgpLmVkaXRvcigpLnRv
Z2dsZU92ZXJ3cml0ZU1vZGVFbmFibGVkKCk7CisgICAgcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIo
KS5jbGVhclRlc3RpbmdPdmVycmlkZXMoKTsKICAgICBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c2luZ2xldG9uKCkuc2V0RGVmYXVsdE9yaWdpblF1b3RhKEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Ojpub1F1b3RhKCkpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lv
bk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZXNldFJlc3RyaWN0aW9ucygpOwpAQCAtNDE3LDE5
ICs0MTQsMTkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUAogICAg
IE1vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnJlc2V0KCk7CiAjZW5kaWYKIAotICAgIHBhZ2Ut
PnNldFNob3dBbGxQbHVnaW5zKGZhbHNlKTsKKyAgICBwYWdlLnNldFNob3dBbGxQbHVnaW5zKGZh
bHNlKTsKICAgICAKICNpZiBQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMDAwMAogICAgIF9BWFNTZXRGb3JjZUFsbG93V2ViU2NhbGluZyhmYWxz
ZSk7CiAjZW5kaWYKIH0KIAotSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQqIGRvY3VtZW50
KQotICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoZG9jdW1lbnQpCitJbnRlcm5hbHM6
OkludGVybmFscyhEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25P
YnNlcnZlcigmZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChk
b2N1bWVudCAmJiBkb2N1bWVudC0+cGFnZSgpKQotICAgICAgICBkb2N1bWVudC0+cGFnZSgpLT5n
cm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldFRlc3RpbmdNb2RlKHRydWUpOworICAgIGlm
IChkb2N1bWVudC5wYWdlKCkpCisgICAgICAgIGRvY3VtZW50LnBhZ2UoKS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKS5zZXRUZXN0aW5nTW9kZSh0cnVlKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKQEAgLTQ0Miw4ICs0MzksOCBAQCBJbnRlcm5hbHM6OkludGVybmFs
cyhEb2N1bWVudCogZG9jdW1lbnQpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCi0gICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5wYWdlKCkpCi0gICAg
ICAgIGRvY3VtZW50LT5wYWdlKCktPnNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5h
YmxlZCh0cnVlKTsKKyAgICBpZiAoZG9jdW1lbnQucGFnZSgpKQorICAgICAgICBkb2N1bWVudC5w
YWdlKCktPnNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZCh0cnVlKTsKICNl
bmRpZgogfQogCkBAIC00NjMsMTAgKzQ2MCwxMCBAQCBJbnRlcm5hbFNldHRpbmdzKiBJbnRlcm5h
bHM6OnNldHRpbmdzKCkgCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3Vt
ZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwogICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiBJbnRlcm5hbFNldHRpbmdzOjpmcm9tKHBhZ2UpOwogfQogCkBAIC00NzUsMTkgKzQ3
MiwxNCBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OndvcmtlclRocmVhZENvdW50KCkgCiAgICAgcmV0
dXJuIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKIH0KIAotU3RyaW5nIEludGVy
bmFsczo6YWRkcmVzcyhOb2RlKiBub2RlKQorU3RyaW5nIEludGVybmFsczo6YWRkcmVzcyhOb2Rl
JiBub2RlKQogewotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAiLCBub2RlKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVwIiwgJm5vZGUpOwogfQogCi1ib29sIEludGVybmFsczo6
bm9kZU5lZWRzU3R5bGVSZWNhbGMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9u
KQorYm9vbCBJbnRlcm5hbHM6Om5vZGVOZWVkc1N0eWxlUmVjYWxjKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IElOVkFMSURfQUNDRVNTX0VSUjsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBub2RlLT5uZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgcmV0dXJuIG5vZGUubmVlZHNTdHlsZVJlY2FsYygpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3RyaW5nKFN0eWxlQ2hhbmdlVHlwZSB0eXBl
KQpAQCAtNTA4LDE0ICs1MDAsOSBAQCBzdGF0aWMgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZVRvU3Ry
aW5nKFN0CiAgICAgcmV0dXJuICIiOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpzdHlsZUNoYW5n
ZVR5cGUoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZXhjZXB0aW9uKQorU3RyaW5nIEludGVy
bmFsczo6c3R5bGVDaGFuZ2VUeXBlKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbiA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVDaGFuZ2VUeXBlVG9TdHJpbmcobm9kZS0+c3R5
bGVDaGFuZ2VUeXBlKCkpOworICAgIHJldHVybiBzdHlsZUNoYW5nZVR5cGVUb1N0cmluZyhub2Rl
LnN0eWxlQ2hhbmdlVHlwZSgpKTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6ZGVzY3JpcHRpb24o
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUpCkBAIC01NDIsMTMgKzUyOSwxMSBAQCBib29s
IEludGVybmFsczo6aXNMb2FkaW5nRnJvbU1lbW9yeUNhY2hlCiAgICAgcmV0dXJuIHJlc291cmNl
ICYmIHJlc291cmNlLT5zdGF0dXMoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkOwogfQogCi1T
dHJpbmcgSW50ZXJuYWxzOjp4aHJSZXNwb25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCogeGhyKQor
U3RyaW5nIEludGVybmFsczo6eGhyUmVzcG9uc2VTb3VyY2UoWE1MSHR0cFJlcXVlc3QmIHJlcXVl
c3QpCiB7Ci0gICAgaWYgKCF4aHIpCi0gICAgICAgIHJldHVybiAiTnVsbCB4aHIiOwotICAgIGlm
ICh4aHItPnJlc291cmNlUmVzcG9uc2UoKS5pc051bGwoKSkKKyAgICBpZiAocmVxdWVzdC5yZXNv
dXJjZVJlc3BvbnNlKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAiTnVsbCByZXNwb25zZSI7
Ci0gICAgc3dpdGNoICh4aHItPnJlc291cmNlUmVzcG9uc2UoKS5zb3VyY2UoKSkgeworICAgIHN3
aXRjaCAocmVxdWVzdC5yZXNvdXJjZVJlc3BvbnNlKCkuc291cmNlKCkpIHsKICAgICBjYXNlIFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjoKICAgICAgICAgcmV0dXJuICJVbmtub3du
IjsKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yazoKQEAgLTU2Niwy
MyArNTUxLDE2IEBAIFN0cmluZyBJbnRlcm5hbHM6OnhoclJlc3BvbnNlU291cmNlKFhNTEgKICAg
ICByZXR1cm4gIkVycm9yIjsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OmlzU2hhcmluZ1N0eWxlU2hl
ZXRDb250ZW50cyhFbGVtZW50KiBhLCBFbGVtZW50KiBiKQorYm9vbCBJbnRlcm5hbHM6OmlzU2hh
cmluZ1N0eWxlU2hlZXRDb250ZW50cyhIVE1MTGlua0VsZW1lbnQmIGEsIEhUTUxMaW5rRWxlbWVu
dCYgYikKIHsKLSAgICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4oYSkgfHwgIWlzPEhUTUxMaW5r
RWxlbWVudD4oYikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvJiBhTGluayA9IGRv
d25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmEpOwotICAgIGF1dG8mIGJMaW5rID0gZG93bmNhc3Q8
SFRNTExpbmtFbGVtZW50PigqYik7Ci0gICAgaWYgKCFhTGluay5zaGVldCgpIHx8ICFiTGluay5z
aGVldCgpKQorICAgIGlmICghYS5zaGVldCgpIHx8ICFiLnNoZWV0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gJmFMaW5rLnNoZWV0KCktPmNvbnRlbnRzKCkgPT0gJmJMaW5r
LnNoZWV0KCktPmNvbnRlbnRzKCk7CisgICAgcmV0dXJuICZhLnNoZWV0KCktPmNvbnRlbnRzKCkg
PT0gJmIuc2hlZXQoKS0+Y29udGVudHMoKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OmlzU3R5bGVT
aGVldExvYWRpbmdTdWJyZXNvdXJjZXMoRWxlbWVudCogbGluaykKK2Jvb2wgSW50ZXJuYWxzOjpp
c1N0eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEhUTUxMaW5rRWxlbWVudCYgbGluaykKIHsK
LSAgICBpZiAoIWlzPEhUTUxMaW5rRWxlbWVudD4obGluaykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvJiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oKmxp
bmspOwotICAgIHJldHVybiBsaW5rRWxlbWVudC5zaGVldCgpICYmIGxpbmtFbGVtZW50LnNoZWV0
KCktPmNvbnRlbnRzKCkuaXNMb2FkaW5nU3VicmVzb3VyY2VzKCk7CisgICAgcmV0dXJuIGxpbmsu
c2hlZXQoKSAmJiBsaW5rLnNoZWV0KCktPmNvbnRlbnRzKCkuaXNMb2FkaW5nU3VicmVzb3VyY2Vz
KCk7CiB9CiAKIHN0YXRpYyBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBzdHJpbmdUb1Jlc291
cmNlUmVxdWVzdENhY2hlUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5KQpAQCAtNjU2LDE0ICs2
MzQsOSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Om1lbW9yeUNhY2hlU2l6ZSgpIGNvCiAgICAgcmV0
dXJuIE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5zaXplKCk7CiB9CiAKLXNpemVfdCBJbnRlcm5h
bHM6OmltYWdlRnJhbWVJbmRleChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykK
K3Vuc2lnbmVkIEludGVybmFsczo6aW1hZ2VGcmFtZUluZGV4KEhUTUxJbWFnZUVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFpczxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYXV0
byogY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PigqZWxlbWVudCkuY2Fj
aGVkSW1hZ2UoKTsKKyAgICBhdXRvKiBjYWNoZWRJbWFnZSA9IGVsZW1lbnQuY2FjaGVkSW1hZ2Uo
KTsKICAgICBpZiAoIWNhY2hlZEltYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjgxLDIz
ICs2NTQsMTQgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpwYWdlQ2FjaGVTaXplKCkgY29ucwogICAg
IHJldHVybiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBhZ2VDb3VudCgpOwogfQogCi1Ob2RlKiBJ
bnRlcm5hbHM6OnRyZWVTY29wZVJvb3ROb2RlKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorTm9kZSogSW50ZXJuYWxzOjp0cmVlU2NvcGVSb290Tm9kZShOb2RlJiBub2RlKQogewotICAg
IGlmICghbm9kZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuICZub2RlLT50cmVlU2NvcGUoKS5y
b290Tm9kZSgpOworICAgIHJldHVybiAmbm9kZS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogfQog
Ci1Ob2RlKiBJbnRlcm5hbHM6OnBhcmVudFRyZWVTY29wZShOb2RlKiBub2RlLCBFeGNlcHRpb25D
b2RlJiBlYykKK05vZGUqIEludGVybmFsczo6cGFyZW50VHJlZVNjb3BlKE5vZGUmIG5vZGUpCiB7
Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgY29uc3QgVHJlZVNjb3BlKiBwYXJlbnRU
cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKS5wYXJlbnRUcmVlU2NvcGUoKTsKKyAgICBjb25z
dCBUcmVlU2NvcGUqIHBhcmVudFRyZWVTY29wZSA9IG5vZGUudHJlZVNjb3BlKCkucGFyZW50VHJl
ZVNjb3BlKCk7CiAgICAgcmV0dXJuIHBhcmVudFRyZWVTY29wZSA/ICZwYXJlbnRUcmVlU2NvcGUt
PnJvb3ROb2RlKCkgOiBudWxscHRyOwogfQogCkBAIC03NDksMTggKzcxMywxOCBAQCB2b2lkIElu
dGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucyhFeGNlcHRpCiAgICAgZG9jdW1lbnQtPmZyYW1lKCkt
PmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OnBh
dXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiti
b29sIEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgcGF1c2VUaW1lIDwgMCkgewor
ICAgIGlmIChwYXVzZVRpbWUgPCAwKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBmcmFtZSgpLT5hbmlt
YXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LT5yZW5kZXJlcigpLCBBdG9taWNT
dHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7CisgICAgcmV0dXJuIGZyYW1lKCktPmFu
aW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQucmVuZGVyZXIoKSwgQXRvbWlj
U3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwogfQogCi1ib29sIEludGVybmFsczo6
cGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IHBzZXVkb0lkLCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgSW50ZXJuYWxzOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxlbWVudCB8fCBwYXVzZVRpbWUgPCAw
KSB7CisgICAgaWYgKHBhdXNlVGltZSA8IDApIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VT
U19FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03NzAsNyArNzM0LDcgQEAg
Ym9vbCBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25QcwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVk
b0lkID09ICJiZWZvcmUiID8gZWxlbWVudC0+YmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVu
dC0+YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CisgICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVu
dCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkg
OiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlmICghcHNldWRvRWxlbWVudCkg
ewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzc5LDE4ICs3NDMsMTggQEAgYm9vbCBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25QcwogICAgIHJldHVybiBmcmFtZSgpLT5hbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0
VGltZShwc2V1ZG9FbGVtZW50LT5yZW5kZXJlcigpLCBBdG9taWNTdHJpbmcoYW5pbWF0aW9uTmFt
ZSksIHBhdXNlVGltZSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRp
bWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJbnRlcm5hbHM6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
ZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgaWYgKCFlbGVtZW50IHx8IHBhdXNlVGltZSA8IDApIHsKKyAgICBpZiAocGF1c2VUaW1l
IDwgMCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VUcmFu
c2l0aW9uQXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCksIHByb3BlcnR5TmFtZSwgcGF1c2VUaW1l
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1l
KGVsZW1lbnQucmVuZGVyZXIoKSwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOwogfQogCi1ib29s
IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0
cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFN0cmluZyYgcHNldWRvSWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJbnRlcm5hbHM6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVk
b0lkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgcGF1c2VUaW1l
IDwgMCkgeworICAgIGlmIChwYXVzZVRpbWUgPCAwKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtODAwLDcgKzc2NCw3
IEBAIGJvb2wgSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblAKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBw
c2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQtPmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVs
ZW1lbnQtPmFmdGVyUHNldWRvRWxlbWVudCgpOworICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0Vs
ZW1lbnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVu
dCgpIDogZWxlbWVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKICAgICBpZiAoIXBzZXVkb0VsZW1l
bnQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTgwOSwyNyArNzczLDExIEBAIGJvb2wgSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPblAKICAgICByZXR1cm4gZnJhbWUoKS0+YW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0
aW9uQXRUaW1lKHBzZXVkb0VsZW1lbnQtPnJlbmRlcmVyKCksIHByb3BlcnR5LCBwYXVzZVRpbWUp
OwogfQogCi0vLyBGSVhNRTogUmVtb3ZlLgotYm9vbCBJbnRlcm5hbHM6OmF0dGFjaGVkKE5vZGUq
IG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6ZWxlbWVudFJlbmRl
clRyZWVBc1RleHQoRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
aWYgKCFub2RlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgZWxlbWVudC5k
b2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAotU3RyaW5nIEludGVybmFsczo6ZWxl
bWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICBTdHJpbmcgcmVwcmVzZW50YXRpb24g
PSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKGVsZW1lbnQpOworICAgIFN0cmluZyByZXByZXNlbnRh
dGlvbiA9IGV4dGVybmFsUmVwcmVzZW50YXRpb24oJmVsZW1lbnQpOwogICAgIGlmIChyZXByZXNl
bnRhdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTgzOCw3NCArNzg2LDQ4IEBAIFN0cmluZyBJbnRl
cm5hbHM6OmVsZW1lbnRSZW5kZXJUcmVlQXNUZXgKICAgICByZXR1cm4gcmVwcmVzZW50YXRpb247
CiB9CiAKLWJvb2wgSW50ZXJuYWxzOjpoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVudCog
ZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6aGFzUGF1c2VkSW1h
Z2VBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0g
ICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpICYmIGVsZW1lbnQtPnJlbmRlcmVy
KCktPmhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucygpOworICAgIHJldHVybiBlbGVtZW50LnJlbmRl
cmVyKCkgJiYgZWxlbWVudC5yZW5kZXJlcigpLT5oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoKTsK
IH0KIAotUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gSW50ZXJuYWxzOjpjb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0CitSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBJbnRlcm5hbHM6
OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyhOb2RlJiBub2RlKSBjb25zdAogewot
ICAgIGlmICghbm9kZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCiAgICAgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSA9
IHRydWU7Ci0gICAgcmV0dXJuIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG5v
ZGUsIGFsbG93VmlzaXRlZFN0eWxlKTsKKyAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoJm5vZGUsIGFsbG93VmlzaXRlZFN0eWxlKTsKIH0KIAotTm9kZSogSW50
ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQqIGhvc3QsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorTm9kZSogSW50ZXJuYWxzOjplbnN1cmVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QgPSBob3N0LT5zaGFkb3dSb290KCkpCisgICAgaWYgKFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QgPSBob3N0LnNoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuIHNoYWRvd1Jv
b3Q7CiAKLSAgICByZXR1cm4gaG9zdC0+Y3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CisgICAg
cmV0dXJuIGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CiB9CiAKLU5vZGUqIEludGVy
bmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25D
b2RlJiBlYykKK05vZGUqIEludGVybmFsczo6ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVt
ZW50JiBob3N0KQogewotICAgIGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiAmaG9z
dC0+ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOworICAgIHJldHVybiAmaG9zdC5lbnN1cmVV
c2VyQWdlbnRTaGFkb3dSb290KCk7CiB9CiAKLU5vZGUqIEludGVybmFsczo6Y3JlYXRlU2hhZG93
Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKK05vZGUqIEludGVybmFsczo6
Y3JlYXRlU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBpZiAoIWhvc3QpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gaG9zdC0+Y3JlYXRlU2hhZG93Um9vdChlYyku
Z2V0KCk7CisgICAgcmV0dXJuIGhvc3QuY3JlYXRlU2hhZG93Um9vdChlYykuZ2V0KCk7CiB9CiAK
LU5vZGUqIEludGVybmFsczo6c2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK05vZGUqIEludGVybmFsczo6c2hhZG93Um9vdChFbGVtZW50JiBob3N0KQogewotICAg
IGlmICghaG9zdCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBob3N0LT5zaGFkb3dSb290KCk7Cisg
ICAgcmV0dXJuIGhvc3Quc2hhZG93Um9vdCgpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpzaGFk
b3dSb290VHlwZShjb25zdCBOb2RlKiByb290LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1N0
cmluZyBJbnRlcm5hbHM6OnNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUmIHJvb3QsIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICghaXM8U2hhZG93Um9vdD4ocm9vdCkpIHsKICAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICB9CiAKLSAgICBzd2l0Y2ggKGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpyb290KS50eXBlKCkp
IHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHJvb3QpLnR5cGUoKSkgewogICAg
IGNhc2UgU2hhZG93Um9vdDo6VHlwZTo6VXNlckFnZW50OgogICAgICAgICByZXR1cm4gU3RyaW5n
KCJVc2VyQWdlbnRTaGFkb3dSb290Iik7CiAgICAgY2FzZSBTaGFkb3dSb290OjpUeXBlOjpDbG9z
ZWQ6CkBAIC05MTgsMzAgKzg0MCwxNCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpzaGFkb3dSb290VHlw
ZShjb25zdCBOCiAgICAgfQogfQogCi1FbGVtZW50KiBJbnRlcm5hbHM6OmluY2x1ZGVyRm9yKE5v
ZGUqLCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1BzZXVkb0lk
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KLVN0cmluZyBJbnRlcm5hbHM6OnNoYWRvd1BzZXVkb0lkKEVs
ZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghZWxlbWVudCkg
ewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpLnN0cmlu
ZygpOworICAgIHJldHVybiBlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkuc3RyaW5nKCk7CiB9CiAK
LXZvaWQgSW50ZXJuYWxzOjpzZXRTaGFkb3dQc2V1ZG9JZChFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBTdHJpbmcmIGlkLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxzOjpzZXRTaGFk
b3dQc2V1ZG9JZChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGlkKQogewotICAgIGlm
ICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50LT5zZXRQc2V1ZG8oaWQpOworICAg
IHJldHVybiBlbGVtZW50LnNldFBzZXVkbyhpZCk7CiB9CiAKIGJvb2wgSW50ZXJuYWxzOjppc1Rp
bWVyVGhyb3R0bGVkKGludCB0aW1lb3V0SWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtOTcxLDEw
ICs4NzcsMTAgQEAgYm9vbCBJbnRlcm5hbHM6OmFyZVRpbWVyc1Rocm90dGxlZCgpIGNvbgogICAg
IHJldHVybiBjb250ZXh0RG9jdW1lbnQoKS0+aXNUaW1lclRocm90dGxpbmdFbmFibGVkKCk7CiB9
CiAKLVN0cmluZyBJbnRlcm5hbHM6OnZpc2libGVQbGFjZWhvbGRlcihFbGVtZW50KiBlbGVtZW50
KQorU3RyaW5nIEludGVybmFsczo6dmlzaWJsZVBsYWNlaG9sZGVyKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkgewot
ICAgICAgICBjb25zdCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dEZvcm1Db250cm9s
RWxlbWVudCA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7
CisgICAgICAgIGNvbnN0IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0ZXh0Rm9ybUNvbnRy
b2xFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQp
OwogICAgICAgICBpZiAoIXRleHRGb3JtQ29udHJvbEVsZW1lbnQuaXNQbGFjZWhvbGRlclZpc2li
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgaWYgKEhUTUxFbGVt
ZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LnBsYWNlaG9s
ZGVyRWxlbWVudCgpKQpAQCAtOTg0LDEyICs4OTAsOSBAQCBTdHJpbmcgSW50ZXJuYWxzOjp2aXNp
YmxlUGxhY2Vob2xkZXIoRWxlCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEludGVy
bmFsczo6c2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBT
dHJpbmcmIGNvbG9yVmFsdWUpCit2b2lkIEludGVybmFsczo6c2VsZWN0Q29sb3JJbkNvbG9yQ2hv
b3NlcihIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGNvbG9yVmFsdWUp
CiB7Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KTsKLSAgICBpbnB1dEVsZW1lbnQuc2VsZWN0Q29sb3IoQ29sb3IoY29sb3JWYWx1
ZSkpOworICAgIGVsZW1lbnQuc2VsZWN0Q29sb3IoQ29sb3IoY29sb3JWYWx1ZSkpOwogfQogCiBW
ZWN0b3I8U3RyaW5nPiBJbnRlcm5hbHM6OmZvcm1Db250cm9sU3RhdGVPZlByZXZpb3VzSGlzdG9y
eUl0ZW0oRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMDY3LDE1ICs5NzAsMTAgQEAgUmVmPENsaWVu
dFJlY3Q+IEludGVybmFsczo6YWJzb2x1dGVDYXJldAogICAgIHJldHVybiBDbGllbnRSZWN0Ojpj
cmVhdGUoZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMo
KSk7CiB9CiAKLVJlZjxDbGllbnRSZWN0PiBJbnRlcm5hbHM6OmJvdW5kaW5nQm94KEVsZW1lbnQq
IGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmPENsaWVudFJlY3Q+IEludGVybmFsczo6
Ym91bmRpbmdCb3goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiBDbGllbnRSZWN0
OjpjcmVhdGUoKTsKLSAgICB9Ci0KLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50
LT5yZW5kZXJlcigpOworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJl
cigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVh
dGUoKTsKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKHJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpKTsKQEAgLTExMDUsMzEgKzEwMDMsMjEg
QEAgU3RyaW5nIEludGVybmFsczo6aW5zcGVjdG9ySGlnaGxpZ2h0T2JqZQogICAgIHJldHVybiBk
b2N1bWVudC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuYnVpbGRPYmplY3RGb3JIaWdo
bGlnaHRlZE5vZGVzKCktPnRvSlNPTlN0cmluZygpOwogfQogCi11bnNpZ25lZCBJbnRlcm5hbHM6
Om1hcmtlckNvdW50Rm9yTm9kZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQordW5zaWduZWQgSW50ZXJuYWxzOjptYXJrZXJDb3VudEZvck5v
ZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXJUeXBlcyA9IDA7CiAgICAgaWYgKCFtYXJrZXJUeXBlc0Zyb20obWFya2VyVHlw
ZSwgbWFya2VyVHlwZXMpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51
cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7Ci0KLSAgICByZXR1cm4gbm9kZS0+ZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOworICAg
IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2No
ZWR1bGVkKCk7CisgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zv
cigmbm9kZSwgbWFya2VyVHlwZXMpLnNpemUoKTsKIH0KIAotUmVuZGVyZWREb2N1bWVudE1hcmtl
ciogSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5
cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqIEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJr
ZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgbm9kZS0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICBp
ZiAoIW5vZGUpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KKyAgICBub2RlLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZXMgbWFya2VyVHlwZXMgPSAwOwogICAgIGlmICghbWFya2VyVHlwZXNGcm9tKG1hcmtlclR5cGUs
IG1hcmtlclR5cGVzKSkgewpAQCAtMTEzNywyMyArMTAyNSwyMyBAQCBSZW5kZXJlZERvY3VtZW50
TWFya2VyKiBJbnRlcm5hbHM6Om1hcmtlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlO
b3dJZlNjaGVkdWxlZCgpOworICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51
cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUs
IG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtYXJrZXJzW2luZGV4XTsKIH0KIAotUmVmUHRy
PFJhbmdlPiBJbnRlcm5hbHM6Om1hcmtlclJhbmdlRm9yTm9kZShOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1Jl
ZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYgbm9kZSwgY29u
c3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2VyQXQobm9kZSwg
bWFya2VyVHlwZSwgaW5kZXgsIGVjKTsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9k
ZSwgbWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKKyAg
ICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShub2RlLmRvY3VtZW50KCksICZub2RlLCBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksICZub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKIH0KIAotU3RyaW5nIElu
dGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmlu
ZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5n
IEludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0
cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlckF0KG5vZGUsIG1hcmtl
clR5cGUsIGluZGV4LCBlYyk7CiAgICAgaWYgKCFtYXJrZXIpCkBAIC0xMTg4LDEwICsxMDc2LDEw
IEBAIFN0cmluZyBJbnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25zdCAKICAgICByZXR1cm4g
cmVjdFN0cmluZy50b1N0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNo
TWFya2VyKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKK3ZvaWQgSW50ZXJuYWxz
OjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGlzQWN0aXZlKQog
ewotICAgIHJhbmdlLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7Ci0gICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4
dE1hdGNoTWFya2VyKHJhbmdlLCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgp
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJhbmdlLm93bmVy
RG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1hdGNoTWFya2VyKCZyYW5nZSwgaXNBY3RpdmUp
OwogfQogCiB2b2lkIEludGVybmFsczo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZChib29sIGZsYWcsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIwOSw3ICsxMDk3LDcgQEAgdm9p
ZCBJbnRlcm5hbHM6OmludmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEludGVybmFsczo6c2V0U2Nyb2xsVmlld1Bv
c2l0aW9uKGxvbmcgeCwgbG9uZyB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxz
OjpzZXRTY3JvbGxWaWV3UG9zaXRpb24oaW50IHgsIGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+dmlldygpKSB7CkBAIC0xMjIzLDcgKzExMTEsNyBAQCB2
b2lkIEludGVybmFsczo6c2V0U2Nyb2xsVmlld1Bvc2l0aW9uKGxvCiAKICAgICBmcmFtZVZpZXct
PnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKICAgICBmcmFtZVZp
ZXctPnNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKGZhbHNlKTsKLSAgICBmcmFtZVZpZXctPnNldFNj
cm9sbE9mZnNldEZyb21JbnRlcm5hbHMoSW50UG9pbnQoeCwgeSkpOworICAgIGZyYW1lVmlldy0+
c2V0U2Nyb2xsT2Zmc2V0RnJvbUludGVybmFscyh7IHgsIHkgfSk7CiAgICAgZnJhbWVWaWV3LT5z
ZXRTY3JvbGxiYXJzU3VwcHJlc3NlZChzY3JvbGxiYXJzU3VwcHJlc3NlZE9sZFZhbHVlKTsKICAg
ICBmcmFtZVZpZXctPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGNvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlT2xkVmFsdWUpOwogfQpAQCAtMTI5OSw2NiArMTE4Nywz
MSBAQCBTdHJpbmcgSW50ZXJuYWxzOjpjb25maWd1cmF0aW9uRm9yVmlld3BvCiAgICAgcmV0dXJu
ICJ2aWV3cG9ydCBzaXplICIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLmxheW91dFNpemUu
d2lkdGgoKSkgKyAieCIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLmxheW91dFNpemUuaGVp
Z2h0KCkpICsgIiBzY2FsZSAiICsgU3RyaW5nOjpudW1iZXIoYXR0cmlidXRlcy5pbml0aWFsU2Nh
bGUpICsgIiB3aXRoIGxpbWl0cyBbIiArIFN0cmluZzo6bnVtYmVyKGF0dHJpYnV0ZXMubWluaW11
bVNjYWxlKSArICIsICIgKyBTdHJpbmc6Om51bWJlcihhdHRyaWJ1dGVzLm1heGltdW1TY2FsZSkg
KyAiXSBhbmQgdXNlclNjYWxhYmxlICIgKyAoYXR0cmlidXRlcy51c2VyU2NhbGFibGUgPyAidHJ1
ZSIgOiAiZmFsc2UiKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6Ondhc0xhc3RDaGFuZ2VVc2VyRWRp
dChFbGVtZW50KiB0ZXh0RmllbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBJbnRlcm5hbHM6
Ondhc0xhc3RDaGFuZ2VVc2VyRWRpdChFbGVtZW50JiB0ZXh0RmllbGQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIGlmICghdGV4dEZpZWxkKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NF
U1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50Pih0ZXh0RmllbGQpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4odGV4dEZpZWxkKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAotICAgIGlmIChp
czxIVE1MSW5wdXRFbGVtZW50PigqdGV4dEZpZWxkKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwot
Ci0gICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpKQotICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKnRleHRGaWVsZCkubGFzdENoYW5n
ZVdhc1VzZXJFZGl0KCk7CisgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KHRleHRGaWVs
ZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Pih0ZXh0Rmll
bGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQ
RV9FUlI7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEludGVybmFsczo6ZWxlbWVudFNo
b3VsZEF1dG9Db21wbGV0ZShFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jv
b2wgSW50ZXJuYWxzOjplbGVtZW50U2hvdWxkQXV0b0NvbXBsZXRlKEhUTUxJbnB1dEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpczxI
VE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNob3VsZEF1dG9jb21wbGV0ZSgpOwor
ICAgIHJldHVybiBlbGVtZW50LnNob3VsZEF1dG9jb21wbGV0ZSgpOwogfQogCi12b2lkIEludGVy
bmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldEVkaXRpbmdWYWx1ZShI
VE1MSW5wdXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlm
ICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQp
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNldEVk
aXRpbmdWYWx1ZSh2YWx1ZSk7CisgICAgZWxlbWVudC5zZXRFZGl0aW5nVmFsdWUodmFsdWUpOwog
fQogCi12b2lkIEludGVybmFsczo6c2V0QXV0b2ZpbGxlZChFbGVtZW50KiBlbGVtZW50LCBib29s
IGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNldEF1dG9maWxs
ZWQoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGVkKQogewotICAgIGlmICgh
ZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKSB7
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNldEF1dG9G
aWxsZWQoZW5hYmxlZCk7CisgICAgZWxlbWVudC5zZXRBdXRvRmlsbGVkKGVuYWJsZWQpOwogfQog
CiBzdGF0aWMgQXV0b0ZpbGxCdXR0b25UeXBlIHN0cmluZ1RvQXV0b0ZpbGxCdXR0b25UeXBlKGNv
bnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAtMTM3Myw0NSArMTIyNiwzMCBAQCBz
dGF0aWMgQXV0b0ZpbGxCdXR0b25UeXBlIHN0cmluZ1RvQXV0b0ZpCiAgICAgcmV0dXJuIEF1dG9G
aWxsQnV0dG9uVHlwZTo6Tm9uZTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OnNldFNob3dBdXRvRmls
bEJ1dHRvbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIGF1dG9GaWxsQnV0dG9uVHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIEludGVybmFsczo6c2V0U2hvd0F1dG9GaWxsQnV0
dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgYXV0b0ZpbGxCdXR0
b25UeXBlKQogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKmVsZW1lbnQpLnNldFNob3dBdXRvRmlsbEJ1dHRvbihzdHJpbmdUb0F1dG9GaWxsQnV0dG9u
VHlwZShhdXRvRmlsbEJ1dHRvblR5cGUpKTsKKyAgICBlbGVtZW50LnNldFNob3dBdXRvRmlsbEJ1
dHRvbihzdHJpbmdUb0F1dG9GaWxsQnV0dG9uVHlwZShhdXRvRmlsbEJ1dHRvblR5cGUpKTsKIH0K
IAogCi12b2lkIEludGVybmFsczo6c2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50KiBlbGVtZW50
LCBsb25nIHgsIGxvbmcgeSwgbG9uZyB3LCBsb25nIGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBJbnRlcm5hbHM6OnNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCYgZWxlbWVudCwgaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghZWxl
bWVudCB8fCAhZWxlbWVudC0+ZG9jdW1lbnQoKS52aWV3KCkpIHsKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcp
IHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBlbGVtZW50LT5kb2N1bWVudCgpLnZpZXco
KTsKLSAgICBmcmFtZVZpZXctPnNjcm9sbEVsZW1lbnRUb1JlY3QoKmVsZW1lbnQsIEludFJlY3Qo
eCwgeSwgdywgaCkpOworICAgIGZyYW1lVmlldy0+c2Nyb2xsRWxlbWVudFRvUmVjdChlbGVtZW50
LCB7IHgsIHksIHcsIGggfSk7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OmF1dG9maWxsRmllbGRO
YW1lKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFs
czo6YXV0b2ZpbGxGaWVsZE5hbWUoRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmICghaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PihlbGVtZW50KSkgewogICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oKmVsZW1lbnQpLmF1dG9maWxsRGF0YSgpLmZpZWxkTmFtZTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkuYXV0b2ZpbGxE
YXRhKCkuZmllbGROYW1lOwogfQogCiB2b2lkIEludGVybmFsczo6cGFpbnRDb250cm9sVGludHMo
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDI2LDYwICsxMjY0LDM1IEBAIHZvaWQgSW50ZXJuYWxz
OjpwYWludENvbnRyb2xUaW50cyhFeGNlcHQKICAgICBmcmFtZVZpZXctPnBhaW50Q29udHJvbFRp
bnRzKCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpCitSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCYgc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQg
cmFuZ2VMZW5ndGgpCiB7Ci0gICAgaWYgKCFzY29wZSkgewotICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIHJhbmdlTG9j
YXRpb24sIHJhbmdlTGVuZ3RoKTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCgmc2NvcGUsIHJhbmdlTG9jYXRpb24sIHJhbmdlTGVuZ3RoKTsKIH0K
IAotdW5zaWduZWQgSW50ZXJuYWxzOjpsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50KiBzY29wZSwg
Y29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2lnbmVkIEludGVybmFs
czo6bG9jYXRpb25Gcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5nZSkK
IHsKLSAgICBpZiAoIXNjb3BlIHx8ICFyYW5nZSkgewotICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAgc2l6ZV90IGxvY2F0aW9u
ID0gMDsKICAgICBzaXplX3QgdW51c2VkTGVuZ3RoID0gMDsKLSAgICBUZXh0SXRlcmF0b3I6Omdl
dExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNjb3BlLCByYW5nZSwgbG9jYXRpb24sIHVudXNl
ZExlbmd0aCk7CisgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5n
ZSgmc2NvcGUsICZyYW5nZSwgbG9jYXRpb24sIHVudXNlZExlbmd0aCk7CiAgICAgcmV0dXJuIGxv
Y2F0aW9uOwogfQogCi11bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50
KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3Vuc2lnbmVk
IEludGVybmFsczo6bGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgaWYgKCFzY29wZSB8fCAhcmFuZ2UpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIHNpemVfdCB1
bnVzZWRMb2NhdGlvbiA9IDA7CiAgICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgVGV4dEl0ZXJh
dG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShzY29wZSwgcmFuZ2UsIHVudXNlZExv
Y2F0aW9uLCBsZW5ndGgpOworICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UoJnNjb3BlLCAmcmFuZ2UsIHVudXNlZExvY2F0aW9uLCBsZW5ndGgpOwogICAgIHJl
dHVybiBsZW5ndGg7CiB9CiAKLVN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJh
bmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFz
VGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5nZSkgewotICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0K
LQotICAgIHJldHVybiByYW5nZS0+dGV4dCgpOworICAgIHJldHVybiByYW5nZS50ZXh0KCk7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSogcmFuZ2UsIGludCBy
YW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUmVmUHRy
PFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgaW50IHJhbmdlTG9jYXRp
b24sIGludCByYW5nZUxlbmd0aCkKIHsKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgcmFuZ2VMb2NhdGlvbiwgcmFu
Z2VMZW5ndGgpOworICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCZyYW5nZSwgcmFu
Z2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGgpOwogfQogCiBSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6
cmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihpbnQgeCwgaW50IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTU5OCwyMSArMTQxMSwyMSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6OnRv
dWNoRXZlbnRIYW5kbGVyQ291CiAvLyBjb250ZXh0RG9jdW1lbnQoKSwgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIGEgZmV3IHRlc3RzIHRoYXQgcGFzcyBhCiAvLyBkaWZmZXJlbnQgZG9jdW1lbnQsIGFu
ZCBjb3VsZCBqdXN0IG1ha2UgdGhlIGNhbGwgdGhyb3VnaCBhbm90aGVyIEludGVybmFscwogLy8g
aW5zdGFuY2UgaW5zdGVhZC4KLVJlZlB0cjxOb2RlTGlzdD4gSW50ZXJuYWxzOjpub2Rlc0Zyb21S
ZWN0KERvY3VtZW50KiBkb2N1bWVudCwgaW50IGNlbnRlclgsIGludCBjZW50ZXJZLCB1bnNpZ25l
ZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsCitSZWZQdHI8Tm9kZUxpc3Q+IElu
dGVybmFsczo6bm9kZXNGcm9tUmVjdChEb2N1bWVudCYgZG9jdW1lbnQsIGludCBjZW50ZXJYLCBp
bnQgY2VudGVyWSwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLAog
ICAgIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBib29sIGln
bm9yZUNsaXBwaW5nLCBib29sIGFsbG93U2hhZG93Q29udGVudCwgYm9vbCBhbGxvd0NoaWxkRnJh
bWVDb250ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAoIWRvY3VtZW50
IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSB8fCAhZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKSkgewor
ICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSB8fCAhZG9jdW1lbnQuZnJhbWUoKS0+dmlldygpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LT52aWV3KCk7Ci0gICAgUmVuZGVyVmlldyog
cmVuZGVyVmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGRvY3VtZW50LnZp
ZXcoKTsKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQucmVuZGVyVmlldygp
OwogICAgIGlmICghcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBk
b2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9j
dW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBmbG9h
dCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiAgICAgTGF5b3V0UG9pbnQg
cG9pbnQoY2VudGVyWCAqIHpvb21GYWN0b3IgKyBmcmFtZVZpZXctPnNjcm9sbFgoKSwgY2VudGVy
WSAqIHpvb21GYWN0b3IgKyBmcmFtZVZpZXctPnNjcm9sbFkoKSk7CkBAIC0xOTM5LDcgKzE3NTIs
NyBAQCBSZWZQdHI8RE9NV2luZG93PiBJbnRlcm5hbHM6Om9wZW5EdW1teUluCiAgICAgUGFnZSog
aW5zcGVjdGVkUGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCk7CiAgICAg
UmVmUHRyPERPTVdpbmRvdz4gd2luZG93ID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkuZG9j
dW1lbnQoKS0+ZG9tV2luZG93KCk7CiAgICAgUmVmUHRyPERPTVdpbmRvdz4gZnJvbnRlbmRXaW5k
b3cgPSB3aW5kb3ctPm9wZW4odXJsLCAiIiwgIiIsICp3aW5kb3csICp3aW5kb3cpOwotICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclN0dWJGcm9udGVu
ZD4oaW5zcGVjdGVkUGFnZSwgZnJvbnRlbmRXaW5kb3cuY29weVJlZigpKTsKKyAgICBtX2luc3Bl
Y3RvckZyb250ZW5kID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JTdHViRnJvbnRlbmQ+KCpp
bnNwZWN0ZWRQYWdlLCBmcm9udGVuZFdpbmRvdy5jb3B5UmVmKCkpOwogCiAgICAgcmV0dXJuIGZy
b250ZW5kV2luZG93OwogfQpAQCAtMjAxNCwxNCArMTgyNywxNCBAQCBib29sIEludGVybmFsczo6
aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnCiAvLyBjb250ZXh0RG9jdW1lbnQoKSwgd2l0aCB0aGUg
ZXhjZXB0aW9uIG9mIGEgZmV3IHRlc3RzIHRoYXQgcGFzcyBhCiAvLyBkaWZmZXJlbnQgZG9jdW1l
bnQsIGFuZCBjb3VsZCBqdXN0IG1ha2UgdGhlIGNhbGwgdGhyb3VnaCBhbm90aGVyIEludGVybmFs
cwogLy8gaW5zdGFuY2UgaW5zdGVhZC4KLVN0cmluZyBJbnRlcm5hbHM6OmxheWVyVHJlZUFzVGV4
dChEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIElu
dGVybmFsczo6bGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50JiBkb2N1bWVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxheWVyVHJlZUFzVGV4dChkb2N1bWVudCwgMCwg
ZWMpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQoRG9jdW1lbnQqIGRv
Y3VtZW50LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitTdHJpbmcg
SW50ZXJuYWxzOjpsYXllclRyZWVBc1RleHQoRG9jdW1lbnQmIGRvY3VtZW50LCB1bnNpZ25lZCBm
bGFncywgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICB9CkBAIC0yMDM4LDcgKzE4NTEsNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpsYXllclRyZWVBc1Rl
eHQoRG9jdW1lCiAgICAgaWYgKGZsYWdzICYgTEFZRVJfVFJFRV9JTkNMVURFU19DT05URU5UX0xB
WUVSUykKICAgICAgICAgbGF5ZXJUcmVlRmxhZ3MgfD0gTGF5ZXJUcmVlRmxhZ3NJbmNsdWRlQ29u
dGVudExheWVyczsKIAotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGF5ZXJUcmVlQXNU
ZXh0KGxheWVyVHJlZUZsYWdzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZnJhbWUoKS0+bGF5ZXJU
cmVlQXNUZXh0KGxheWVyVHJlZUZsYWdzKTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6cmVwYWlu
dFJlY3RzQXNUZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAtMjA5Nyw3ICsxOTEwLDcg
QEAgUmVmUHRyPENsaWVudFJlY3RMaXN0PiBJbnRlcm5hbHM6Om5vbkZhcwogICAgIHJldHVybiBw
YWdlLT5ub25GYXN0U2Nyb2xsYWJsZVJlY3RzKCk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRF
bGVtZW50VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhFbGVtZW50KiBlbGVtZW50LCBib29sIHVzZXNE
aXNwbGF5TGlzdERyYXdpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbnRlcm5hbHM6OnNl
dEVsZW1lbnRVc2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9j
dW1lbnQtPnJlbmRlclZpZXcoKSkgewpAQCAtMjEwNSwyMiArMTkxOCwyMiBAQCB2b2lkIEludGVy
bmFsczo6c2V0RWxlbWVudFVzZXNEaXNwbGF5TGlzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICBpZiAoIWVs
ZW1lbnQucmVuZGVyZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oKmVs
ZW1lbnQpKSB7Ci0gICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCku
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh1c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKKyAgICBp
ZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGRvd25jYXN0PEhU
TUxDYW52YXNFbGVtZW50PihlbGVtZW50KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHVzZXNE
aXNwbGF5TGlzdERyYXdpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFl
bGVtZW50LT5yZW5kZXJlcigpLT5oYXNMYXllcigpKSB7CisgICAgaWYgKCFlbGVtZW50LnJlbmRl
cmVyKCktPmhhc0xheWVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93
bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC0+cmVuZGVyZXIoKSktPmxheWVy
KCk7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4oZWxlbWVudC5yZW5kZXJlcigpKS0+bGF5ZXIoKTsKICAgICBpZiAoIWxheWVyLT5pc0Nv
bXBvc2l0ZWQoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjEyOSw3ICsxOTQyLDcgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEVsZW1lbnRV
c2VzRGlzcGxheUxpcwogICAgIGxheWVyLT5iYWNraW5nKCktPnNldFVzZXNEaXNwbGF5TGlzdERy
YXdpbmcodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjpzZXRF
bGVtZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc1Ry
YWNraW5nUmVwbGF5LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSW50ZXJuYWxzOjpzZXRFbGVt
ZW50VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBpc1RyYWNr
aW5nUmVwbGF5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVu
ZGVyVmlldygpKSB7CkBAIC0yMTM3LDIyICsxOTUwLDIyIEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRF
bGVtZW50VHJhY2tzRGlzcGxheUwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
ZWxlbWVudCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5k
ZXJlcigpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpIHsK
LSAgICAgICAgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KS5zZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsKKyAgICBpZiAoaXM8SFRNTENhbnZh
c0VsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50
PihlbGVtZW50KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShpc1RyYWNraW5nUmVwbGF5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKS0+
aGFzTGF5ZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4oZWxlbWVudC0+cmVuZGVyZXIoKSktPmxheWVyKCk7CisgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oZWxlbWVudC5yZW5kZXJlcigp
KS0+bGF5ZXIoKTsKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgewogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2MSwxMiArMTk3
NCwxMiBAQCB2b2lkIEludGVybmFsczo6c2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMCiAgICAgbGF5
ZXItPmJhY2tpbmcoKS0+c2V0SXNUcmFja2luZ0Rpc3BsYXlMaXN0UmVwbGF5KGlzVHJhY2tpbmdS
ZXBsYXkpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpkaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpkaXNw
bGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgcmV0dXJuIGRpc3BsYXlMaXN0Rm9yRWxlbWVudChlbGVtZW50LCAwLCBlYyk7CiB9CiAK
LVN0cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
LCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpk
aXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsK
QEAgLTIxNzQsNyArMTk4Nyw3IEBAIFN0cmluZyBJbnRlcm5hbHM6OmRpc3BsYXlMaXN0Rm9yRWxl
bWVudCgKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAotICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIGlmICghZWxlbWVudC5yZW5kZXJlcigp
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgfQpAQCAtMjE4MywxNSArMTk5NiwxNSBAQCBTdHJpbmcgSW50ZXJuYWxzOjpk
aXNwbGF5TGlzdEZvckVsZW1lbnQoCiAgICAgaWYgKGZsYWdzICYgRElTUExBWV9MSVNUX0lOQ0xV
REVTX1BMQVRGT1JNX09QRVJBVElPTlMpCiAgICAgICAgIGRpc3BsYXlMaXN0RmxhZ3MgfD0gRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zOwogCi0gICAg
aWYgKGlzPEhUTUxDYW52YXNFbGVtZW50PigqZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpLmRpc3BsYXlMaXN0QXNUZXh0KGRpc3Bs
YXlMaXN0RmxhZ3MpOworICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oZWxlbWVudCkuZGlzcGxh
eUxpc3RBc1RleHQoZGlzcGxheUxpc3RGbGFncyk7CiAKLSAgICBpZiAoIWVsZW1lbnQtPnJlbmRl
cmVyKCktPmhhc0xheWVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKS0+aGFzTGF5
ZXIoKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIH0KIAotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJl
bmRlckxheWVyTW9kZWxPYmplY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5sYXllcigpOworICAg
IFJlbmRlckxheWVyKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KGVs
ZW1lbnQucmVuZGVyZXIoKSktPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVk
KCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKQEAgLTIyMDAsMTIgKzIwMTMsMTIgQEAgU3RyaW5nIEludGVybmFsczo6ZGlzcGxh
eUxpc3RGb3JFbGVtZW50KAogICAgIHJldHVybiBsYXllci0+YmFja2luZygpLT5kaXNwbGF5TGlz
dEFzVGV4dChkaXNwbGF5TGlzdEZsYWdzKTsKIH0KIAotU3RyaW5nIEludGVybmFsczo6cmVwbGF5
RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorU3RyaW5nIEludGVybmFsczo6cmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIHJldHVybiByZXBsYXlEaXNwbGF5
TGlzdEZvckVsZW1lbnQoZWxlbWVudCwgMCwgZWMpOwogfQogCi1TdHJpbmcgSW50ZXJuYWxzOjpy
ZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxh
Z3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6cmVwbGF5RGlzcGxheUxp
c3RGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yMjEz
LDcgKzIwMjYsNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyZXBsYXlEaXNwbGF5TGlzdEZvckVsCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVs
ZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICBpZiAoIWVsZW1lbnQucmVuZGVyZXIoKSkgewogICAg
ICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIH0KQEAgLTIyMjIsMTUgKzIwMzUsMTUgQEAgU3RyaW5nIEludGVybmFsczo6cmVwbGF5RGlz
cGxheUxpc3RGb3JFbAogICAgIGlmIChmbGFncyAmIERJU1BMQVlfTElTVF9JTkNMVURFU19QTEFU
Rk9STV9PUEVSQVRJT05TKQogICAgICAgICBkaXNwbGF5TGlzdEZsYWdzIHw9IERpc3BsYXlMaXN0
OjpBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9uczsKIAotICAgIGlmIChpczxI
VE1MQ2FudmFzRWxlbWVudD4oKmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TENhbnZhc0VsZW1lbnQ+KCplbGVtZW50KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChkaXNwbGF5
TGlzdEZsYWdzKTsKKyAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGVsZW1lbnQpLnJlcGxheURp
c3BsYXlMaXN0QXNUZXh0KGRpc3BsYXlMaXN0RmxhZ3MpOwogCi0gICAgaWYgKCFlbGVtZW50LT5y
ZW5kZXJlcigpLT5oYXNMYXllcigpKSB7CisgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVyKCktPmhh
c0xheWVyKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2Fz
dDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihlbGVtZW50LT5yZW5kZXJlcigpKS0+bGF5ZXIoKTsK
KyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0
PihlbGVtZW50LnJlbmRlcmVyKCkpLT5sYXllcigpOwogICAgIGlmICghbGF5ZXItPmlzQ29tcG9z
aXRlZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CkBAIC0yMjc3LDIwICsyMDkwLDE0IEBAIHZvaWQgSW50ZXJuYWxzOjppbnNl
cnRVc2VyQ1NTKGNvbnN0IFN0cmkKICAgICBkb2N1bWVudC0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMo
KS5hZGRVc2VyU3R5bGVTaGVldChXVEZNb3ZlKHBhcnNlZFNoZWV0KSk7CiB9CiAKLVN0cmluZyBJ
bnRlcm5hbHM6OmNvdW50ZXJWYWx1ZShFbGVtZW50KiBlbGVtZW50KQorU3RyaW5nIEludGVybmFs
czo6Y291bnRlclZhbHVlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gY291bnRlclZhbHVlRm9yRWxl
bWVudChlbGVtZW50KTsKKyAgICByZXR1cm4gY291bnRlclZhbHVlRm9yRWxlbWVudCgmZWxlbWVu
dCk7CiB9CiAKLWludCBJbnRlcm5hbHM6OnBhZ2VOdW1iZXIoRWxlbWVudCogZWxlbWVudCwgZmxv
YXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoraW50IEludGVybmFsczo6cGFnZU51bWJl
cihFbGVtZW50JiBlbGVtZW50LCBmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCiB7
Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBQcmlu
dENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEZsb2F0U2l6ZShwYWdlV2lk
dGgsIHBhZ2VIZWlnaHQpKTsKKyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9y
RWxlbWVudCgmZWxlbWVudCwgeyBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQgfSk7CiB9CiAKIFZlY3Rv
cjxTdHJpbmc+IEludGVybmFsczo6c2hvcnRjdXRJY29uVVJMcygpIGNvbnN0CkBAIC0yNDMyLDM2
ICsyMjM5LDM2IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQKIH0K
IAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQordm9pZCBJbnRlcm5h
bHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICBkb2N1bWVudC0+d2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwogfQogCi12b2lkIEludGVybmFs
czo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndl
YmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgZG9jdW1lbnQt
PndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwogfQogCi12b2lk
IEludGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQordm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZG9j
dW1lbnQtPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7CisgICAg
ZG9jdW1lbnQtPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwog
fQogCi12b2lkIEludGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIEludGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5G
b3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoZWxlbWVudCk7
CisgICAgZG9jdW1lbnQtPndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVu
dCk7CiB9CiAjZW5kaWYKIApAQCAtMjUzOSw3ICsyMzQ2LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnN0
YXJ0VHJhY2tpbmdMYXllckZsdXNoZQogICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmNvbXBv
c2l0b3IoKS5zdGFydFRyYWNraW5nTGF5ZXJGbHVzaGVzKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcg
SW50ZXJuYWxzOjpsYXllckZsdXNoQ291bnQoRXhjZXB0aW9uQ29kZSYgZWMpCit1bnNpZ25lZCBJ
bnRlcm5hbHM6OmxheWVyRmx1c2hDb3VudChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50IHx8
ICFkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7CkBAIC0yNTYwLDcgKzIzNjcsNyBAQCB2b2lkIElu
dGVybmFsczo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjCiAgICAgZG9jdW1lbnQtPnN0YXJ0VHJh
Y2tpbmdTdHlsZVJlY2FsY3MoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBJbnRlcm5hbHM6OnN0eWxl
UmVjYWxjQ291bnQoRXhjZXB0aW9uQ29kZSYgZWMpCit1bnNpZ25lZCBJbnRlcm5hbHM6OnN0eWxl
UmVjYWxjQ291bnQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkgewpAQCAtMjU4Miw3ICsy
Mzg5LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnN0YXJ0VHJhY2tpbmdDb21wb3NpdGluZwogICAgIGRv
Y3VtZW50LT5yZW5kZXJWaWV3KCktPmNvbXBvc2l0b3IoKS5zdGFydFRyYWNraW5nQ29tcG9zaXRp
bmdVcGRhdGVzKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgSW50ZXJuYWxzOjpjb21wb3NpdGluZ1Vw
ZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKQordW5zaWduZWQgSW50ZXJuYWxzOjpjb21wb3Np
dGluZ1VwZGF0ZUNvdW50KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5yZW5kZXJWaWV3KCkpIHsKQEAgLTI3MjIsMTAgKzI1MjksMTAgQEAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBJbnRlcm5hbHM6OnNlcmlhbGl6ZQogICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKTsKIH0KIAotUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gSW50ZXJuYWxzOjpkZXNlcmlhbGl6ZUJ1ZmZlcihQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIpIGNvbnN0CitSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJbnRlcm5h
bHM6OmRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVmZmVyJiBidWZmZXIpIGNvbnN0CiB7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzOwotICAgIGJ5dGVzLmFwcGVuZChzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAg
Ynl0ZXMuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSwg
YnVmZmVyLmJ5dGVMZW5ndGgoKSk7CiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
YWRvcHQoV1RGTW92ZShieXRlcykpOwogfQogCkBAIC0yNzcwLDc0ICsyNTc3LDUyIEBAIHZvaWQg
SW50ZXJuYWxzOjppbml0aWFsaXplTW9ja0NETSgpCiB9CiAjZW5kaWYKIAotU3RyaW5nIEludGVy
bmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorU3RyaW5nIEludGVybmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJDb3JlOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCk7CisgICAgcmV0dXJuIFdlYkNv
cmU6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgmZWxlbWVudCk7CiB9CiAKLVN0cmluZyBJbnRlcm5h
bHM6OnRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKK1N0cmluZyBJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50JiBl
bGVtZW50KSBjb25zdAogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdDsKLSAgICByZXN1bHQuc2V0SW5uZXJOb2RlKGVsZW1lbnQpOwotICAg
IFRleHREaXJlY3Rpb24gZGlyOwotICAgIHJldHVybiByZXN1bHQudGl0bGUoZGlyKTsKKyAgICBy
ZXN1bHQuc2V0SW5uZXJOb2RlKCZlbGVtZW50KTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bjsKKyAgICByZXR1cm4gcmVzdWx0LnRpdGxlKGRpcmVjdGlvbik7CiB9CiAKLVN0cmluZyBJbnRl
cm5hbHM6OmdldEltYWdlU291cmNlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorU3RyaW5nIEludGVybmFsczo6Z2V0SW1hZ2VTb3VyY2VVUkwoRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQt
PmltYWdlU291cmNlVVJMKCk7CisgICAgcmV0dXJuIGVsZW1lbnQuaW1hZ2VTb3VyY2VVUkwoKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLXZvaWQgSW50ZXJuYWxzOjpzaW11bGF0ZUF1ZGlvSW50
ZXJydXB0aW9uKE5vZGUqIG5vZGUpCisKK3ZvaWQgSW50ZXJuYWxzOjpzaW11bGF0ZUF1ZGlvSW50
ZXJydXB0aW9uKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAjaWYgVVNFKEdTVFJFQU1F
UikKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTE1lZGlhRWxl
bWVudD4obm9kZSk7Ci0gICAgZWxlbWVudC0+cGxheWVyKCktPnNpbXVsYXRlQXVkaW9JbnRlcnJ1
cHRpb24oKTsKKyAgICBlbGVtZW50LnBsYXllcigpLT5zaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9u
KCk7CiAjZWxzZQotICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICBVTlVTRURfUEFSQU0oZWxl
bWVudCk7CiAjZW5kaWYKIH0KIAotYm9vbCBJbnRlcm5hbHM6Om1lZGlhRWxlbWVudEhhc0NoYXJh
Y3RlcmlzdGljKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyaXN0aWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorYm9vbCBJbnRlcm5hbHM6Om1lZGlhRWxlbWVudEhhc0NoYXJhY3Rlcmlz
dGljKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyaXN0
aWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghaXM8SFRNTE1lZGlhRWxlbWVudD4o
Km5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBl
bGVtZW50ID0gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obm9kZSk7Ci0KICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY2hhcmFjdGVyaXN0aWMsICJhdWRpYmxlIikpCi0g
ICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNBdWRpbygpOworICAgICAgICByZXR1cm4gZWxlbWVu
dC5oYXNBdWRpbygpOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjaGFy
YWN0ZXJpc3RpYywgInZpc3VhbCIpKQotICAgICAgICByZXR1cm4gZWxlbWVudC0+aGFzVmlkZW8o
KTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVmlkZW8oKTsKICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoY2hhcmFjdGVyaXN0aWMsICJsZWdpYmxlIikpCi0gICAgICAg
IHJldHVybiBlbGVtZW50LT5oYXNDbG9zZWRDYXB0aW9ucygpOworICAgICAgICByZXR1cm4gZWxl
bWVudC5oYXNDbG9zZWRDYXB0aW9ucygpOwogCiAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KICNlbmRpZgogCi1ib29sIEludGVybmFsczo6aXNTZWxlY3RQb3B1cFZp
c2libGUoTm9kZSogbm9kZSkKK2Jvb2wgSW50ZXJuYWxzOjppc1NlbGVjdFBvcHVwVmlzaWJsZShI
VE1MU2VsZWN0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIWlzPEhUTUxTZWxlY3RFbGVt
ZW50Pigqbm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxTZWxlY3RFbGVt
ZW50JiBzZWxlY3QgPSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm5vZGUpOwotCi0gICAg
YXV0byogcmVuZGVyZXIgPSBzZWxlY3QucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgIGlmICghaXM8
UmVuZGVyTWVudUxpc3Q+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4
NDYsNyArMjYzMSw3IEBAIGJvb2wgSW50ZXJuYWxzOjppc1NlbGVjdFBvcHVwVmlzaWJsZShOb2QK
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWVudUxpc3Q+KCpyZW5kZXJlcikucG9wdXBJc1Zp
c2libGUoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCisjZW5kaWYKIH0KIAogU3RyaW5nIEludGVybmFsczo6Y2FwdGlvbnNTdHlsZVNoZWV0T3Zl
cnJpZGUoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yOTMzLDkgKzI3MTgsOSBAQCBSZWY8VGltZVJh
bmdlcz4gSW50ZXJuYWxzOjpjcmVhdGVUaW1lUmFuCiAgICAgcmV0dXJuIHJhbmdlczsKIH0KIAot
ZG91YmxlIEludGVybmFsczo6Y2xvc2VzdFRpbWVUb1RpbWVSYW5nZXMoZG91YmxlIHRpbWUsIFRp
bWVSYW5nZXMqIHJhbmdlcykKK2RvdWJsZSBJbnRlcm5hbHM6OmNsb3Nlc3RUaW1lVG9UaW1lUmFu
Z2VzKGRvdWJsZSB0aW1lLCBUaW1lUmFuZ2VzJiByYW5nZXMpCiB7Ci0gICAgcmV0dXJuIHJhbmdl
cy0+bmVhcmVzdCh0aW1lKTsKKyAgICByZXR1cm4gcmFuZ2VzLm5lYXJlc3QodGltZSk7CiB9CiAj
ZW5kaWYKIApAQCAtMjk2MCwxNCArMjc0NSw5IEBAIGJvb2wgSW50ZXJuYWxzOjppc1ZpYnJhdGlu
ZygpCiB9CiAjZW5kaWYKIAotYm9vbCBJbnRlcm5hbHM6OmlzUGx1Z2luVW5hdmFpbGFiaWxpdHlJ
bmRpY2F0b3JPYnNjdXJlZChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jv
b2wgSW50ZXJuYWxzOjppc1BsdWdpblVuYXZhaWxhYmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQoRWxl
bWVudCYgZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFlbGVtZW50KSB7
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAg
IGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghaXM8UmVuZGVy
RW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKSkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNT
X0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk3NiwxNyArMjc1NiwxMyBAQCBib29s
IEludGVybmFsczo6aXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluCiAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckVtYmVkZGVkT2JqZWN0PigqcmVuZGVyZXIpLmlzUmVwbGFjZW1lbnRPYnNjdXJlZCgp
OwogfQogICAgIAotYm9vbCBJbnRlcm5hbHM6OmlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCog
ZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEludGVybmFsczo6aXNQbHVnaW5TbmFw
c2hvdHRlZChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghZWxlbWVudCkgewotICAgICAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luRWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVn
SW5FbGVtZW50PihlbGVtZW50KTsKLSAgICByZXR1cm4gcGx1Z2luRWxlbWVudC0+ZGlzcGxheVN0
YXRlKCkgPD0gSFRNTFBsdWdJbkVsZW1lbnQ6OkRpc3BsYXlpbmdTbmFwc2hvdDsKKyAgICByZXR1
cm4gaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxQbHVnSW5F
bGVtZW50PihlbGVtZW50KS5kaXNwbGF5U3RhdGUoKSA8PSBIVE1MUGx1Z0luRWxlbWVudDo6RGlz
cGxheWluZ1NuYXBzaG90OwogfQogICAgIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKIHZv
aWQgSW50ZXJuYWxzOjppbml0aWFsaXplTW9ja01lZGlhU291cmNlKCkKIHsKICNpZiBVU0UoQVZG
T1VOREFUSU9OKQpAQCAtMjk5NSwyMiArMjc3MSwyMCBAQCB2b2lkIEludGVybmFsczo6aW5pdGlh
bGl6ZU1vY2tNZWRpYVNvdXJjCiAgICAgTWVkaWFQbGF5ZXJGYWN0b3J5U3VwcG9ydDo6Y2FsbFJl
Z2lzdGVyTWVkaWFFbmdpbmUoTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnJlZ2lzdGVyTWVk
aWFFbmdpbmUpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJbnRlcm5hbHM6OmJ1ZmZlcmVkU2FtcGxl
c0ZvclRyYWNrSUQoU291cmNlQnVmZmVyKiBidWZmZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgdHJh
Y2tJRCkKK1ZlY3RvcjxTdHJpbmc+IEludGVybmFsczo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJ
RChTb3VyY2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiB0cmFja0lEKQogewot
ICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLQotICAg
IHJldHVybiBidWZmZXItPmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQodHJhY2tJRCk7CisgICAg
cmV0dXJuIGJ1ZmZlci5idWZmZXJlZFNhbXBsZXNGb3JUcmFja0lEKHRyYWNrSUQpOwogfQogICAg
IAotdm9pZCBJbnRlcm5hbHM6OnNldFNob3VsZEdlbmVyYXRlVGltZXN0YW1wcyhTb3VyY2VCdWZm
ZXIqIGJ1ZmZlciwgYm9vbCBmbGFnKQordm9pZCBJbnRlcm5hbHM6OnNldFNob3VsZEdlbmVyYXRl
VGltZXN0YW1wcyhTb3VyY2VCdWZmZXImIGJ1ZmZlciwgYm9vbCBmbGFnKQogewotICAgIGlmIChi
dWZmZXIpCi0gICAgICAgIGJ1ZmZlci0+c2V0U2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKGZsYWcp
OworICAgIGJ1ZmZlci5zZXRTaG91bGRHZW5lcmF0ZVRpbWVzdGFtcHMoZmxhZyk7CiB9CisKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQorCiB2b2lkIEludGVybmFsczo6YmVnaW5NZWRpYVNl
c3Npb25JbnRlcnJ1cHRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnJ1cHRpb25TdHJpbmcsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRpb25U
eXBlIGludGVycnVwdGlvbiA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpTeXN0ZW1JbnRlcnJ1cHRp
b247CkBAIC0zMDgzLDE1ICsyODU3LDEwIEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYVNlc3Np
b25SZXN0cmljdGkKICAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5hZGRSZXN0cmljdGlvbihtZWRpYVR5cGUsIHJlc3RyaWN0aW9ucyk7CiB9CiAKLXZvaWQg
SW50ZXJuYWxzOjpzZXRNZWRpYUVsZW1lbnRSZXN0cmljdGlvbnMoSFRNTE1lZGlhRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnNTdHJpbmcsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVk
aWFFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9uc1N0cmluZykKIHsK
LSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNZWRpYUVsZW1lbnRTZXNzaW9uOjpCZWhhdmlv
clJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBlbGVtZW50LT5tZWRpYVNlc3Npb24oKS5iZWhh
dmlvclJlc3RyaWN0aW9ucygpOwotICAgIGVsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLnJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKKyAgICBNZWRpYUVsZW1lbnRTZXNzaW9u
OjpCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBlbGVtZW50Lm1lZGlhU2Vzc2lv
bigpLmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7CisgICAgZWxlbWVudC5tZWRpYVNlc3Npb24oKS5y
ZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiAKICAgICByZXN0cmljdGlv
bnMgPSBNZWRpYUVsZW1lbnRTZXNzaW9uOjpOb1Jlc3RyaWN0aW9uczsKIApAQCAtMzEyNyw3ICsy
ODk2LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhRWxlbWVudFJlc3RyaWN0aQogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJv
dmVycmlkZXVzZXJnZXN0dXJlcmVxdWlyZW1lbnRmb3JtYWluY29udGVudCIpKQogICAgICAgICAg
ICAgcmVzdHJpY3Rpb25zIHw9IE1lZGlhRWxlbWVudFNlc3Npb246Ok92ZXJyaWRlVXNlckdlc3R1
cmVSZXF1aXJlbWVudEZvck1haW5Db250ZW50OwogICAgIH0KLSAgICBlbGVtZW50LT5tZWRpYVNl
c3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CisgICAgZWxlbWVu
dC5tZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiB9
CiAKIHZvaWQgSW50ZXJuYWxzOjpwb3N0UmVtb3RlQ29udHJvbENvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kU3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTMxNTgsMTUgKzI5MjcsMTUg
QEAgdm9pZCBJbnRlcm5hbHM6OnBvc3RSZW1vdGVDb250cm9sQ29tbWFuZAogICAgIFBsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmRpZFJlY2VpdmVSZW1vdGVDb250
cm9sQ29tbWFuZChjb21tYW5kKTsKIH0KIAotYm9vbCBJbnRlcm5hbHM6OmVsZW1lbnRJc0Jsb2Nr
aW5nRGlzcGxheVNsZWVwKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIEludGVybmFsczo6
ZWxlbWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkg
Y29uc3QKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MTWVkaWFFbGVtZW50PihlbGVtZW50KTsKLSAgICByZXR1cm4gbWVkaWFFbGVtZW50ID8gbWVk
aWFFbGVtZW50LT5pc0Rpc2FibGluZ1NsZWVwKCkgOiBmYWxzZTsKKyAgICByZXR1cm4gZWxlbWVu
dC5pc0Rpc2FibGluZ1NsZWVwKCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCiAKICNp
ZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKKwogc3RhdGljIE1lZGlhU2Vzc2lvbkludGVycnVwdGlu
Z0NhdGVnb3J5IGludGVycnVwdGluZ0NhdGVnb3J5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGlu
dGVycnVwdGluZ0NhdGVnb3J5U3RyaW5nKQogewogICAgIGlmIChpbnRlcnJ1cHRpbmdDYXRlZ29y
eVN0cmluZyA9PSAiY29udGVudCIpCkBAIC0zMjE4LDE4ICsyOTg3LDE1IEBAIHZvaWQgSW50ZXJu
YWxzOjpzZW5kTWVkaWFDb250cm9sRXZlbnQoY28KICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NFU1NJT04pCiAKICNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3Ry
aWN0aW9ucyhBdWRpb0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyAmcmVzdHJpY3Rpb25z
U3RyaW5nLCBFeGNlcHRpb25Db2RlICZlYykKLXsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBBdWRpb0NvbnRleHQ6OkJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9ucyA9IGNvbnRl
eHQtPmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7Ci0gICAgY29udGV4dC0+cmVtb3ZlQmVoYXZpb3JS
ZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwordm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4
dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVzdHJp
Y3Rpb25zU3RyaW5nKQoreworICAgIEF1ZGlvQ29udGV4dDo6QmVoYXZpb3JSZXN0cmljdGlvbnMg
cmVzdHJpY3Rpb25zID0gY29udGV4dC5iZWhhdmlvclJlc3RyaWN0aW9ucygpOworICAgIGNvbnRl
eHQucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwogCiAgICAgcmVzdHJp
Y3Rpb25zID0gQXVkaW9Db250ZXh0OjpOb1Jlc3RyaWN0aW9uczsKIApAQCAtMzI0Myw4ICszMDA5
LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aQogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJyZXF1
aXJlcGFnZWNvbnNlbnRmb3JhdWRpb3N0YXJ0IikpCiAgICAgICAgICAgICByZXN0cmljdGlvbnMg
fD0gQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rp
b247CiAgICAgfQotICAgIGNvbnRleHQtPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rp
b25zKTsKKyAgICBjb250ZXh0LmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsK
IH0KKwogI2VuZGlmCiAKIHZvaWQgSW50ZXJuYWxzOjpzaW11bGF0ZVN5c3RlbVNsZWVwKCkgY29u
c3QKQEAgLTMyNjIsNiArMzAyOSw3IEBAIHZvaWQgSW50ZXJuYWxzOjpzaW11bGF0ZVN5c3RlbVdh
a2UoKSBjb24KIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisKIHZv
aWQgSW50ZXJuYWxzOjpzZXRNb2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogICAgIFBhZ2UqIHBhZ2UgPSBjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUo
KS0+cGFnZSgpOwpAQCAtMzI5MCw2ICszMDU4LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnNldE1vY2tN
ZWRpYVBsYXliYWNrVGFyZwogCiAgICAgcGFnZS0+c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJTdGF0ZShkZXZpY2VOYW1lLCBzdGF0ZSk7CiB9CisKICNlbmRpZgogCiBSZWZQdHI8TW9j
a1BhZ2VPdmVybGF5PiBJbnRlcm5hbHM6Omluc3RhbGxNb2NrUGFnZU92ZXJsYXkoY29uc3QgU3Ry
aW5nJiBvdmVybGF5VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zMzcxLDEzICszMTQwLDE2
IEBAIHZvaWQgSW50ZXJuYWxzOjpxdWV1ZU1pY3JvVGFzayhpbnQgdGVzdE4KIH0KIAogI2lmIEVO
QUJMRShDT05URU5UX0ZJTFRFUklORykKKwogTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncyYgSW50
ZXJuYWxzOjptb2NrQ29udGVudEZpbHRlclNldHRpbmdzKCkKIHsKICAgICByZXR1cm4gTW9ja0Nv
bnRlbnRGaWx0ZXJTZXR0aW5nczo6c2luZ2xldG9uKCk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKwogc3RhdGljIHZvaWQgYXBwZW5kT2Zmc2V0cyhTdHJpbmdC
dWlsZGVyJiBidWlsZGVyLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzKQog
ewogICAgIGJvb2wganVzdFN0YXJ0aW5nID0gdHJ1ZTsKQEAgLTMzOTQsMTcgKzMxNjYsMTIgQEAg
c3RhdGljIHZvaWQgYXBwZW5kT2Zmc2V0cyhTdHJpbmdCdWlsZGVyJgogICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgfSIpOwogfQogICAgIAotU3RyaW5nIEludGVybmFsczo6c2Nyb2xsU25hcE9mZnNldHMo
RWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgSW50ZXJuYWxzOjpz
Y3JvbGxTbmFwT2Zmc2V0cyhFbGVtZW50JiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Cisg
ICAgaWYgKCFlbGVtZW50LnJlbmRlckJveCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgfQogCi0gICAgaWYgKCFlbGVtZW50LT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgUmVuZGVyQm94JiBib3ggPSAqZWxlbWVudC0+cmVuZGVyQm94KCk7Cisg
ICAgUmVuZGVyQm94JiBib3ggPSAqZWxlbWVudC5yZW5kZXJCb3goKTsKICAgICBTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgaWYgKGJveC5pc0JvZHkoKSkgewpAQCAt
MzQyOSwyMCArMzE5NiwyMSBAQCBTdHJpbmcgSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyhF
bGVtCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEt
Pmhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoImhvcml6
b250YWwgPSAiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImhvcml6b250YWwgPSAi
KTsKICAgICAgICAgYXBwZW5kT2Zmc2V0cyhyZXN1bHQsICpzY3JvbGxhYmxlQXJlYS0+aG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCkpOwogICAgIH0KIAogICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTbmFwT2Zmc2V0cygpKSB7CiAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiwgIik7CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgidmVydGljYWwgPSAiKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInZlcnRpY2FsID0gIik7CiAgICAgICAgIGFwcGVu
ZE9mZnNldHMocmVzdWx0LCAqc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU25hcE9mZnNldHMoKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQorCiAjZW5kaWYKIAog
Ym9vbCBJbnRlcm5hbHM6OnRlc3RQcmVsb2FkZXJTZXR0aW5nVmlld3BvcnQoKQpAQCAtMzQ3OCwy
NSArMzI0NiwyNCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpwYXRoU3RyaW5nV2l0aFNocmlua1dyCiB9
CiAKIAotU3RyaW5nIEludGVybmFsczo6Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXNGb3JF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1N0cmluZyBJbnRlcm5hbHM6
OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxlbWVudChIVE1MTWVkaWFFbGVtZW50
JiBtZWRpYUVsZW1lbnQpCiB7CiAjaWYgIUVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAg
ICAgVU5VU0VEX1BBUkFNKG1lZGlhRWxlbWVudCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogI2Vs
c2UKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgcmV0dXJuIG1lZGlhRWxlbWVudC0+Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMoKTsK
KyAgICByZXR1cm4gbWVkaWFFbGVtZW50LmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCk7
CiAjZW5kaWYKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVN0cmluZyBJbnRlcm5hbHM6OnVz
ZXJWaXNpYmxlU3RyaW5nKGNvbnN0IERPTVVSTCopCisKK1N0cmluZyBJbnRlcm5hbHM6OnVzZXJW
aXNpYmxlU3RyaW5nKGNvbnN0IERPTVVSTCYpCiB7Ci0gICAgLy8gTm90IGltcGxlbWVudGVkIGlu
IFdlYkNvcmUuCisgICAgLy8gQ29jb2Etc3BlY2lmaWMgZnVuY3Rpb24uIENvdWxkIEFTU0VSVF9O
T1RfUkVBQ0hFRCwgYnV0IHRoYXQncyBwcm9iYWJseSBvdmVya2lsbC4KICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIEludGVybmFsczo6c2V0U2hvd0FsbFBsdWdpbnMo
Ym9vbCBzaG93KQpAQCAtMzUxMyw2ICszMjgwLDcgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFNob3dB
bGxQbHVnaW5zKGJvb2wgcwogfQogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQorCiBib29sIElu
dGVybmFsczo6aXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZChTY3JpcHRTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgc3RyZWFtKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0
ZS52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CkBAIC0zNTM1LDYgKzMzMDMsNyBAQCBib29sIEludGVy
bmFsczo6aXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlCiAKICAgICByZXR1cm4gcmV0dXJuZWRWYWx1
ZS5hc0Jvb2xlYW4oKTsKIH0KKwogI2VuZGlmCiAKIFN0cmluZyBJbnRlcm5hbHM6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NGb3JPcmlnaW4oU3RyaW5nIG9yaWdpbikKQEAgLTM1NDcsMTEgKzMzMTYs
MTEgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIFNldHRp
bmdzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGUpOwogfQogCi1TdHJp
bmcgSW50ZXJuYWxzOjpjb21wb3NlZFRyZWVBc1RleHQoTm9kZSogbm9kZSkKK1N0cmluZyBJbnRl
cm5hbHM6OmNvbXBvc2VkVHJlZUFzVGV4dChOb2RlJiBub2RlKQogewogICAgIGlmICghaXM8Q29u
dGFpbmVyTm9kZT4obm9kZSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6Y29tcG9zZWRUcmVlQXNUZXh0KGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKSk7Cisg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBXZWJDb3JlOjpjb21wb3Nl
ZFRyZWVBc1RleHQoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkpOwogfQogCiB2b2lkIElu
dGVybmFsczo6c2V0Vmlld3BvcnRGb3JjZUFsd2F5c1VzZXJTY2FsYWJsZShib29sIHNjYWxhYmxl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxOTk1MjgpCisr
KyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxMiArNTIsMTcgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmls
ZTsKIGNsYXNzIEZyYW1lOworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1
dEVsZW1lbnQ7CitjbGFzcyBIVE1MTGlua0VsZW1lbnQ7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50
OworY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JTdHViRnJvbnRlbmQ7
CiBjbGFzcyBJbnRlcm5hbFNldHRpbmdzOwogY2xhc3MgTWFsbG9jU3RhdGlzdGljczsKIGNsYXNz
IE1lZGlhU2Vzc2lvbjsKIGNsYXNzIE1lbW9yeUluZm87CitjbGFzcyBNb2NrQ29udGVudEZpbHRl
clNldHRpbmdzOwogY2xhc3MgTW9ja1BhZ2VPdmVybGF5OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBh
Z2U7CkBAIC03MCwzMyArNzUsMjggQEAgY2xhc3MgVGltZVJhbmdlczsKIGNsYXNzIFR5cGVDb252
ZXJzaW9uczsKIGNsYXNzIFhNTEh0dHBSZXF1ZXN0OwogCi0jaWYgRU5BQkxFKENPTlRFTlRfRklM
VEVSSU5HKQotY2xhc3MgTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczsKLSNlbmRpZgotCiB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJbnRlcm5hbHMgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnRlcm5hbHM+Ci0gICAgICAgICAgICAgICAgLCBwdWJsaWMgQ29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIgeworY2xhc3MgSW50ZXJuYWxzIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZXJu
YWxzPiwgcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEludGVybmFscz4gY3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFJlZjxJ
bnRlcm5hbHM+IGNyZWF0ZShEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgfkludGVybmFscygpOwog
Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShQYWdlKik7CisgICAgc3Rh
dGljIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShQYWdlJik7CiAKLSAgICBTdHJpbmcgZWxl
bWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29s
IGhhc1BhdXNlZEltYWdlQW5pbWF0aW9ucyhFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFN0cmluZyBlbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVtZW50JiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIGJvb2wgaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKEVsZW1lbnQmKTsKIAotICAgIFN0
cmluZyBhZGRyZXNzKE5vZGUqKTsKLSAgICBib29sIG5vZGVOZWVkc1N0eWxlUmVjYWxjKE5vZGUq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZShOb2RlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBhZGRyZXNzKE5vZGUmKTsKKyAgICBib29sIG5vZGVO
ZWVkc1N0eWxlUmVjYWxjKE5vZGUmKTsKKyAgICBTdHJpbmcgc3R5bGVDaGFuZ2VUeXBlKE5vZGUm
KTsKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUpOwogCiAg
ICAgYm9vbCBpc1ByZWxvYWRlZChjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgYm9vbCBpc0xvYWRp
bmdGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIFN0cmluZyB4aHJSZXNw
b25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCopOwotICAgIGJvb2wgaXNTaGFyaW5nU3R5bGVTaGVl
dENvbnRlbnRzKEVsZW1lbnQqIGxpbmtBLCBFbGVtZW50KiBsaW5rQik7Ci0gICAgYm9vbCBpc1N0
eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEVsZW1lbnQqIGxpbmspOworICAgIFN0cmluZyB4
aHJSZXNwb25zZVNvdXJjZShYTUxIdHRwUmVxdWVzdCYpOworICAgIGJvb2wgaXNTaGFyaW5nU3R5
bGVTaGVldENvbnRlbnRzKEhUTUxMaW5rRWxlbWVudCYgYSwgSFRNTExpbmtFbGVtZW50JiBiKTsK
KyAgICBib29sIGlzU3R5bGVTaGVldExvYWRpbmdTdWJyZXNvdXJjZXMoSFRNTExpbmtFbGVtZW50
Jik7CiAgICAgdm9pZCBzZXRPdmVycmlkZUNhY2hlUG9saWN5KGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgc2V0Q2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUoYm9vbCBhbGxvdywgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgc2V0T3ZlcnJpZGVSZXNvdXJjZUxvYWRQcmlvcml0eShjb25zdCBT
dHJpbmcmKTsKQEAgLTEwNiwyMSArMTA2LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHBydW5lTWVt
b3J5Q2FjaGVUb1NpemUodW5zaWduZWQgc2l6ZSk7CiAgICAgdW5zaWduZWQgbWVtb3J5Q2FjaGVT
aXplKCkgY29uc3Q7CiAKLSAgICBzaXplX3QgaW1hZ2VGcmFtZUluZGV4KEVsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgaW1hZ2VGcmFtZUluZGV4KEhUTUxJbWFnZUVsZW1l
bnQmKTsKIAogICAgIHZvaWQgY2xlYXJQYWdlQ2FjaGUoKTsKICAgICB1bnNpZ25lZCBwYWdlQ2Fj
aGVTaXplKCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
PiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oTm9kZSosIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRl
ZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oTm9kZSYpIGNvbnN0OwogCi0gICAgTm9kZSogZW5z
dXJlU2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgTm9kZSog
ZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgTm9kZSogY3JlYXRlU2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgTm9kZSogc2hhZG93Um9vdChFbGVtZW50KiBob3N0LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgU3RyaW5nIHNoYWRvd1Jvb3RUeXBlKGNvbnN0IE5vZGUqLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7Ci0gICAgRWxlbWVudCogaW5jbHVkZXJGb3IoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTdHJpbmcgc2hhZG93UHNldWRvSWQoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHNldFNoYWRvd1BzZXVkb0lkKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7CisgICAgTm9kZSogZW5zdXJlU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBFeGNl
cHRpb25Db2RlJik7CisgICAgTm9kZSogZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50
JiBob3N0KTsKKyAgICBOb2RlKiBjcmVhdGVTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBOb2RlKiBzaGFkb3dSb290KEVsZW1lbnQmIGhvc3QpOworICAgIFN0
cmluZyBzaGFkb3dSb290VHlwZShjb25zdCBOb2RlJiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owor
ICAgIFN0cmluZyBzaGFkb3dQc2V1ZG9JZChFbGVtZW50Jik7CisgICAgdm9pZCBzZXRTaGFkb3dQ
c2V1ZG9JZChFbGVtZW50JiwgY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBET01UaW1lcnMgdGhy
b3R0bGluZyB0ZXN0aW5nLgogICAgIGJvb2wgaXNUaW1lclRocm90dGxlZChpbnQgdGltZW91dElk
LCBFeGNlcHRpb25Db2RlJik7CkBAIC0xMzUsNDAgKzEzNCwzOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBhbmltYXRpb25zQXJlU3VzcGVuZGVkKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lk
IHN1c3BlbmRBbmltYXRpb25zKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHJlc3Vt
ZUFuaW1hdGlvbnMoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGJvb2wgcGF1c2VBbmltYXRp
b25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgcGF1c2VBbmltYXRp
b25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3Vi
bGUgcGF1c2VUaW1lLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgY29u
c3QgU3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgLy8gQ1NTIFRyYW5z
aXRpb24gdGVzdGluZy4KLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxl
bWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50Kiwg
Y29uc3QgU3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgTm9kZSogdHJl
ZVNjb3BlUm9vdE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBOb2RlKiBwYXJlbnRU
cmVlU2NvcGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBhdXNl
VGltZSwgRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCwgRXhjZXB0aW9uQ29kZSYp
OwogCi0gICAgYm9vbCBhdHRhY2hlZChOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIE5vZGUq
IHRyZWVTY29wZVJvb3ROb2RlKE5vZGUmKTsKKyAgICBOb2RlKiBwYXJlbnRUcmVlU2NvcGUoTm9k
ZSYpOwogCi0gICAgU3RyaW5nIHZpc2libGVQbGFjZWhvbGRlcihFbGVtZW50Kik7Ci0gICAgdm9p
ZCBzZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGNvbG9y
VmFsdWUpOworICAgIFN0cmluZyB2aXNpYmxlUGxhY2Vob2xkZXIoRWxlbWVudCYpOworICAgIHZv
aWQgc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihIVE1MSW5wdXRFbGVtZW50JiwgY29uc3QgU3Ry
aW5nJiBjb2xvclZhbHVlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBmb3JtQ29udHJvbFN0YXRlT2ZQ
cmV2aW91c0hpc3RvcnlJdGVtKEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEZvcm1Db250
cm9sU3RhdGVPZlByZXZpb3VzSGlzdG9yeUl0ZW0oY29uc3QgVmVjdG9yPFN0cmluZz4mLCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICBSZWY8Q2xpZW50UmVjdD4gYWJzb2x1dGVDYXJldEJvdW5kcyhF
eGNlcHRpb25Db2RlJik7CiAKLSAgICBSZWY8Q2xpZW50UmVjdD4gYm91bmRpbmdCb3goRWxlbWVu
dCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWY8Q2xpZW50UmVjdD4gYm91bmRpbmdCb3goRWxl
bWVudCYpOwogCiAgICAgUmVmPENsaWVudFJlY3RMaXN0PiBpbnNwZWN0b3JIaWdobGlnaHRSZWN0
cyhFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIGluc3BlY3RvckhpZ2hsaWdodE9iamVjdChF
eGNlcHRpb25Db2RlJik7CiAKLSAgICB1bnNpZ25lZCBtYXJrZXJDb3VudEZvck5vZGUoTm9kZSos
IGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmtl
clJhbmdlRm9yTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvck5v
ZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB1bnNpZ25lZCBtYXJrZXJDb3VudEZvck5vZGUoTm9kZSYsIGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8UmFuZ2U+IG1hcmtlclJhbmdl
Rm9yTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9k
ZSYsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBTdHJpbmcgZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0cmluZyYgbWFya2VyVHlw
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJh
bmdlKiwgYm9vbCBpc0FjdGl2ZSk7CisgICAgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3Qg
UmFuZ2UmLCBib29sIGlzQWN0aXZlKTsKICAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoYm9vbCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRl
Rm9udENhY2hlKCk7CiAKLSAgICB2b2lkIHNldFNjcm9sbFZpZXdQb3NpdGlvbihsb25nIHgsIGxv
bmcgeSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0U2Nyb2xsVmlld1Bvc2l0aW9uKGlu
dCB4LCBpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0Vmlld0Jhc2VCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2b2lkIHNldFBhZ2luYXRpb24oY29uc3QgU3RyaW5nJiBtb2RlLCBpbnQgZ2FwLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRQYWdpbmF0aW9uKG1vZGUsIGdhcCwgMCwgZWMpOyB9CkBAIC0xNzYs
MjIgKzE3MywyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFi
bGVkKGJvb2wsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgY29uZmlndXJhdGlvbkZvclZp
ZXdwb3J0KGZsb2F0IGRldmljZVBpeGVsUmF0aW8sIGludCBkZXZpY2VXaWR0aCwgaW50IGRldmlj
ZUhlaWdodCwgaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0LCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICBib29sIHdhc0xhc3RDaGFuZ2VVc2VyRWRpdChFbGVtZW50KiB0ZXh0
RmllbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIGVsZW1lbnRTaG91bGRBdXRvQ29tcGxl
dGUoRWxlbWVudCogaW5wdXRFbGVtZW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRF
ZGl0aW5nVmFsdWUoRWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBzZXRBdXRvZmlsbGVkKEVsZW1lbnQqLCBib29sIGVuYWJsZWQs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFNob3dBdXRvRmlsbEJ1dHRvbihFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiBhdXRvRmlsbEJ1dHRvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCosIGxvbmcgeCwgbG9uZyB5LCBsb25n
IHcsIGxvbmcgaCwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgd2FzTGFzdENoYW5nZVVzZXJF
ZGl0KEVsZW1lbnQmIHRleHRGaWVsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgZWxlbWVu
dFNob3VsZEF1dG9Db21wbGV0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCBzZXRFZGl0
aW5nVmFsdWUoSFRNTElucHV0RWxlbWVudCYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
QXV0b2ZpbGxlZChIVE1MSW5wdXRFbGVtZW50JiwgYm9vbCBlbmFibGVkKTsKKyAgICB2b2lkIHNl
dFNob3dBdXRvRmlsbEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBhdXRv
RmlsbEJ1dHRvblR5cGUpOworICAgIHZvaWQgc2Nyb2xsRWxlbWVudFRvUmVjdChFbGVtZW50Jiwg
aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmlu
ZyBhdXRvZmlsbEZpZWxkTmFtZShFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmlu
ZyBhdXRvZmlsbEZpZWxkTmFtZShFbGVtZW50JiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9p
ZCBwYWludENvbnRyb2xUaW50cyhFeGNlcHRpb25Db2RlJik7CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVsZW1lbnQqIHNjb3BlLCBpbnQgcmFuZ2VMb2Nh
dGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdW5zaWduZWQgbG9j
YXRpb25Gcm9tUmFuZ2UoRWxlbWVudCogc2NvcGUsIGNvbnN0IFJhbmdlKiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHVuc2lnbmVkIGxlbmd0aEZyb21SYW5nZShFbGVtZW50KiBzY29wZSwgY29uc3Qg
UmFuZ2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJhbmdlQXNUZXh0KGNvbnN0IFJh
bmdlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFJlZlB0cjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2Uq
LCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50JiBzY29w
ZSwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCk7CisgICAgdW5zaWduZWQgbG9j
YXRpb25Gcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJik7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYpOworICAgIFN0
cmluZyByYW5nZUFzVGV4dChjb25zdCBSYW5nZSYpOworICAgIFJlZlB0cjxSYW5nZT4gc3VicmFu
Z2UoUmFuZ2UmLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3RoKTsKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oaW50IHgsIGludCB5
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNldERlbGVnYXRlc1Njcm9sbGluZyhib29s
IGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTIwOCw3ICsyMDUsNyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudChFeGNlcHRpb25Db2RlJik7CiAgICAg
dW5zaWduZWQgdG91Y2hFdmVudEhhbmRsZXJDb3VudChFeGNlcHRpb25Db2RlJik7CiAKLSAgICBS
ZWZQdHI8Tm9kZUxpc3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqLCBpbnQgeCwgaW50IHksIHVu
c2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKKyAgICBSZWZQdHI8Tm9k
ZUxpc3Q+IG5vZGVzRnJvbVJlY3QoRG9jdW1lbnQmLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRv
cFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywKICAgICAgICAgdW5zaWduZWQgYm90dG9t
UGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcsIGJvb2wgaWdub3JlQ2xpcHBpbmcsIGJvb2wg
YWxsb3dTaGFkb3dDb250ZW50LCBib29sIGFsbG93Q2hpbGRGcmFtZUNvbnRlbnQsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKIAogICAgIFN0cmluZyBwYXJzZXJNZXRhRGF0YShEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCkpOwpAQCAtMjUzLDI1ICsyNTAs
MjUgQEAgcHVibGljOgogICAgICAgICBMQVlFUl9UUkVFX0lOQ0xVREVTX1BBSU5USU5HX1BIQVNF
UyA9IDgsCiAgICAgICAgIExBWUVSX1RSRUVfSU5DTFVERVNfQ09OVEVOVF9MQVlFUlMgPSAxNgog
ICAgIH07Ci0gICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dChEb2N1bWVudCosIHVuc2lnbmVkIGZs
YWdzLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dChE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBTdHJpbmcgbGF5ZXJUcmVlQXNU
ZXh0KERvY3VtZW50JiwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAg
ICBTdHJpbmcgbGF5ZXJUcmVlQXNUZXh0KERvY3VtZW50JiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIFN0cmluZyByZXBhaW50UmVjdHNBc1RleHQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owog
ICAgIFN0cmluZyBzY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIFN0cmluZyBtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyhFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CiAgICAgUmVmUHRyPENsaWVudFJlY3RMaXN0PiBub25GYXN0U2Nyb2xsYWJsZVJlY3Rz
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RWxlbWVudFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcoRWxlbWVudCosIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZywgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RWxlbWVudFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KEVs
ZW1lbnQqLCBib29sIGlzVHJhY2tpbmdSZXBsYXksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHNldEVsZW1lbnRVc2VzRGlzcGxheUxpc3REcmF3aW5nKEVsZW1lbnQmLCBib29sIHVzZXNEaXNw
bGF5TGlzdERyYXdpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEVsZW1lbnRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheShFbGVtZW50JiwgYm9vbCBpc1RyYWNraW5nUmVwbGF5LCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICBlbnVtIHsKICAgICAgICAgLy8gVmFsdWVzIG5lZWQgdG8gYmUg
a2VwdCBpbiBzeW5jIHdpdGggSW50ZXJuYWxzLmlkbC4KICAgICAgICAgRElTUExBWV9MSVNUX0lO
Q0xVREVTX1BMQVRGT1JNX09QRVJBVElPTlMgPSAxLAogICAgIH07Ci0gICAgU3RyaW5nIGRpc3Bs
YXlMaXN0Rm9yRWxlbWVudChFbGVtZW50KiwgdW5zaWduZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIGRpc3BsYXlMaXN0Rm9yRWxlbWVudChFbGVtZW50JiwgdW5zaWdu
ZWQgZmxhZ3MsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZGlzcGxheUxpc3RGb3JFbGVt
ZW50KEVsZW1lbnQmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxh
eUxpc3RGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFN0cmluZyByZXBsYXlEaXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RGb3JFbGVtZW50KEVsZW1l
bnQmLCB1bnNpZ25lZCBmbGFncywgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyByZXBsYXlE
aXNwbGF5TGlzdEZvckVsZW1lbnQoRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZv
aWQgZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcyhFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAKQEAgLTI4OCw5ICsyODUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMZWdhY3lKYXZhU2Ny
aXB0UHJvZmlsaW5nRW5hYmxlZChib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIHNldEluc3BlY3RvcklzVW5kZXJUZXN0KGJvb2wgaXNVbmRlclRlc3QsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgIFN0cmluZyBjb3VudGVyVmFsdWUoRWxlbWVudCopOworICAgIFN0cmluZyBj
b3VudGVyVmFsdWUoRWxlbWVudCYpOwogCi0gICAgaW50IHBhZ2VOdW1iZXIoRWxlbWVudCosIGZs
b2F0IHBhZ2VXaWR0aCA9IDgwMCwgZmxvYXQgcGFnZUhlaWdodCA9IDYwMCk7CisgICAgaW50IHBh
Z2VOdW1iZXIoRWxlbWVudCYsIGZsb2F0IHBhZ2VXaWR0aCA9IDgwMCwgZmxvYXQgcGFnZUhlaWdo
dCA9IDYwMCk7CiAgICAgVmVjdG9yPFN0cmluZz4gc2hvcnRjdXRJY29uVVJMcygpIGNvbnN0Owog
CiAgICAgaW50IG51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMgPSA4MDAsIGZs
b2F0IHBhZ2VIZWlnaHRJblBpeGVscyA9IDYwMCk7CkBAIC0zMTEsMTAgKzMwOCwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCopOwotICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50Kik7Ci0gICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQqKTsKLSAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50Kik7CisgICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50Jik7CisgICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVs
ZW1lbnQmKTsKKyAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCYpOworICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmKTsKICNlbmRpZgogCiAgICAgV0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQgdm9pZCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nKTsKQEAgLTMzMiwy
MCArMzI5LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BUcmFja2luZ1JlcGFpbnRzKEV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIHZvaWQgc3RhcnRUcmFja2luZ0xheWVyRmx1c2hlcyhFeGNlcHRp
b25Db2RlJik7Ci0gICAgdW5zaWduZWQgbG9uZyBsYXllckZsdXNoQ291bnQoRXhjZXB0aW9uQ29k
ZSYpOworICAgIHVuc2lnbmVkIGxheWVyRmx1c2hDb3VudChFeGNlcHRpb25Db2RlJik7CiAgICAg
CiAgICAgdm9pZCBzdGFydFRyYWNraW5nU3R5bGVSZWNhbGNzKEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1bnNpZ25lZCBsb25nIHN0eWxlUmVjYWxjQ291bnQoRXhjZXB0aW9uQ29kZSYpOworICAgIHVu
c2lnbmVkIHN0eWxlUmVjYWxjQ291bnQoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzdGFy
dFRyYWNraW5nQ29tcG9zaXRpbmdVcGRhdGVzKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25l
ZCBsb25nIGNvbXBvc2l0aW5nVXBkYXRlQ291bnQoRXhjZXB0aW9uQ29kZSYpOworICAgIHVuc2ln
bmVkIGNvbXBvc2l0aW5nVXBkYXRlQ291bnQoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNBbmRSdW5Qb3N0TGF5b3V0VGFza3Mo
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzQW5kUnVuUG9zdExheW91dFRhc2tzKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dW5zaWduZWQgbGF5b3V0Q291bnQoKSBjb25zdDsKIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
c2VyaWFsaXplT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgY29uc3Q7
Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGVzZXJpYWxpemVCdWZmZXIoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4pIGNvbnN0OworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVmZmVyJikgY29uc3Q7CiAKICAgICBib29s
IGlzRnJvbUN1cnJlbnRXb3JsZChEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSkgY29uc3Q7CiAKQEAg
LTM1NCw5ICszNTEsOSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZ2V0Q3VycmVudEN1cnNvcklu
Zm8oRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShF
bGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0
ZW0oRWxlbWVudCYpOwogCi0gICAgU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxl
bWVudCYpIGNvbnN0OwogCiAgICAgdm9pZCBmb3JjZVJlbG9hZChib29sIGVuZFRvRW5kKTsKIApA
QCAtMzc5LDE0ICszNzYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlTW9ja1JUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlcigpOwogI2VuZGlmCiAKLSAgICBTdHJpbmcgZ2V0SW1hZ2VTb3VyY2VV
UkwoRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0SW1hZ2VTb3VyY2VV
UkwoRWxlbWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgc2ltdWxhdGVBdWRp
b0ludGVycnVwdGlvbihOb2RlKik7Ci0gICAgYm9vbCBtZWRpYUVsZW1lbnRIYXNDaGFyYWN0ZXJp
c3RpYyhOb2RlKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2lt
dWxhdGVBdWRpb0ludGVycnVwdGlvbihIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgYm9vbCBtZWRp
YUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhIVE1MTWVkaWFFbGVtZW50JiwgY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKLSAgICBib29sIGlzU2VsZWN0UG9wdXBWaXNp
YmxlKE5vZGUqKTsKKyAgICBib29sIGlzU2VsZWN0UG9wdXBWaXNpYmxlKEhUTUxTZWxlY3RFbGVt
ZW50Jik7CiAKICAgICBTdHJpbmcgY2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgc2V0Q2FwdGlvbnNTdHlsZVNoZWV0T3ZlcnJpZGUoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMzk1LDcgKzM5Miw3IEBAIHB1YmxpYzoKIAogI2lm
IEVOQUJMRShWSURFTykKICAgICBSZWY8VGltZVJhbmdlcz4gY3JlYXRlVGltZVJhbmdlcyhGbG9h
dDMyQXJyYXkqIHN0YXJ0VGltZXMsIEZsb2F0MzJBcnJheSogZW5kVGltZXMpOwotICAgIGRvdWJs
ZSBjbG9zZXN0VGltZVRvVGltZVJhbmdlcyhkb3VibGUgdGltZSwgVGltZVJhbmdlcyopOworICAg
IGRvdWJsZSBjbG9zZXN0VGltZVRvVGltZVJhbmdlcyhkb3VibGUgdGltZSwgVGltZVJhbmdlcyYp
OwogI2VuZGlmCiAKICAgICBSZWY8Q2xpZW50UmVjdD4gc2VsZWN0aW9uQm91bmRzKEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTQwNCwxMyArNDAxLDEzIEBAIHB1YmxpYzoKICAgICBib29sIGlzVmlicmF0
aW5nKCk7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNQbHVnaW5VbmF2YWlsYWJpbGl0eUluZGljYXRv
ck9ic2N1cmVkKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBpc1BsdWdpblNu
YXBzaG90dGVkKEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBpc1BsdWdpblVu
YXZhaWxhYmlsaXR5SW5kaWNhdG9yT2JzY3VyZWQoRWxlbWVudCYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBib29sIGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCYpOwogCiAjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKICAgICBXRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCB2b2lkIGluaXRpYWxp
emVNb2NrTWVkaWFTb3VyY2UoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBidWZmZXJlZFNhbXBsZXNG
b3JUcmFja0lEKFNvdXJjZUJ1ZmZlciosIGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQg
c2V0U2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKFNvdXJjZUJ1ZmZlciosIGJvb2wpOworICAgIFZl
Y3RvcjxTdHJpbmc+IGJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoU291cmNlQnVmZmVyJiwgY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVRpbWVzdGFtcHMo
U291cmNlQnVmZmVyJiwgYm9vbCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTQx
OSwxNiArNDE2LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJGb3Jl
Z3JvdW5kKCkgY29uc3Q7CiAgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQo
KSBjb25zdDsKICAgICB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJp
bmcmIG1lZGlhVHlwZSwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnMsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVkaWFFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiByZXN0cmljdGlvbnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVkaWFFbGVtZW50JiwgY29uc3QgU3Ry
aW5nJiByZXN0cmljdGlvbnMpOwogICAgIHZvaWQgcG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIGVsZW1lbnRJc0Jsb2NraW5n
RGlzcGxheVNsZWVwKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGVsZW1lbnRJc0Jsb2NraW5n
RGlzcGxheVNsZWVwKEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE1FRElBX1NFU1NJT04pCiAgICAgdm9pZCBzZW5kTWVkaWFTZXNzaW9uU3RhcnRPZkludGVy
cnVwdGlvbk5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNlbmRNZWRpYVNl
c3Npb25FbmRPZkludGVycnVwdGlvbk5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmKTsKLSAgICBT
dHJpbmcgbWVkaWFTZXNzaW9uQ3VycmVudFN0YXRlKE1lZGlhU2Vzc2lvbiopIGNvbnN0OwotICAg
IGRvdWJsZSBtZWRpYUVsZW1lbnRQbGF5ZXJWb2x1bWUoSFRNTE1lZGlhRWxlbWVudCopIGNvbnN0
OworICAgIFN0cmluZyBtZWRpYVNlc3Npb25DdXJyZW50U3RhdGUoTWVkaWFTZXNzaW9uJikgY29u
c3Q7CisgICAgZG91YmxlIG1lZGlhRWxlbWVudFBsYXllclZvbHVtZShIVE1MTWVkaWFFbGVtZW50
JikgY29uc3Q7CiAgICAgdm9pZCBzZW5kTWVkaWFDb250cm9sRXZlbnQoY29uc3QgU3RyaW5nJik7
CiAjZW5kaWYKIApAQCAtNDM4LDcgKzQzNSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFdFQl9BVURJTykKLSAgICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRp
b0NvbnRleHQqLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucywgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYgcmVzdHJpY3Rpb25zKTsKICNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0ZVN5c3Rl
bVNsZWVwKCkgY29uc3Q7CkBAIC00NjEsMTQgKzQ1OCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgU3RyaW5nIHNjcm9sbFNuYXBPZmZzZXRz
KEVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIHNjcm9sbFNuYXBPZmZzZXRz
KEVsZW1lbnQmLCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKIAogICAgIFN0cmluZyBwYXRoU3Ry
aW5nV2l0aFNocmlua1dyYXBwZWRSZWN0cyhWZWN0b3I8ZG91YmxlPiByZWN0Q29tcG9uZW50cywg
ZG91YmxlIHJhZGl1cywgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgU3RyaW5nIGdldEN1cnJlbnRN
ZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgU3Ry
aW5nIGdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzRm9yRWxlbWVudChIVE1MTWVkaWFFbGVt
ZW50Jik7CiAKLSAgICBTdHJpbmcgdXNlclZpc2libGVTdHJpbmcoY29uc3QgRE9NVVJMKik7Cisg
ICAgU3RyaW5nIHVzZXJWaXNpYmxlU3RyaW5nKGNvbnN0IERPTVVSTCYpOwogICAgIHZvaWQgc2V0
U2hvd0FsbFBsdWdpbnMoYm9vbCk7CiAKICAgICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0Zvck9yaWdpbihTdHJpbmcgb3JpZ2luKTsKQEAgLTQ3OCwxNiArNDc1LDE2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQoU2NyaXB0U3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwogI2VuZGlmCiAKLSAgICBTdHJpbmcgY29tcG9zZWRUcmVlQXNUZXh0KE5vZGUqKTsK
KyAgICBTdHJpbmcgY29tcG9zZWRUcmVlQXNUZXh0KE5vZGUmKTsKICAgICAKICAgICB2b2lkIHNl
dFZpZXdwb3J0Rm9yY2VBbHdheXNVc2VyU2NhbGFibGUoYm9vbCk7CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgSW50ZXJuYWxzKERvY3VtZW50Kik7CisgICAgZXhwbGljaXQgSW50ZXJuYWxzKERv
Y3VtZW50Jik7CiAgICAgRG9jdW1lbnQqIGNvbnRleHREb2N1bWVudCgpIGNvbnN0OwogICAgIEZy
YW1lKiBmcmFtZSgpIGNvbnN0OwogCi0gICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogbWFya2Vy
QXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiBtYXJrZXJBdChOb2RlJiwg
Y29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclN0dWJGcm9udGVuZD4gbV9pbnNwZWN0
b3JGcm9udGVuZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShy
ZXZpc2lvbiAxOTk1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICAqLwogCiBlbnVtIFBhZ2VPdmVybGF5
VHlwZSB7Ci0idmlldyIsCi0iZG9jdW1lbnQiCisgICAgInZpZXciLAorICAgICJkb2N1bWVudCIK
IH07CiAKIC8vIFRoZXNlIG1hcCB0byBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeS4KQEAgLTY0
LDI0ICs2NCwyMyBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiB9OwogCiBbCi0gICAgVXNl
UG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVPYmplY3RBcmd1bWVudHMsCi0gICAgTm9JbnRlcmZh
Y2VPYmplY3QsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQsCisg
ICAgTm9JbnRlcmZhY2VPYmplY3QsCiBdIGludGVyZmFjZSBJbnRlcm5hbHMgewogICAgIERPTVN0
cmluZyBhZGRyZXNzKE5vZGUgbm9kZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBu
b2RlTmVlZHNTdHlsZVJlY2FsYyhOb2RlIG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIERP
TVN0cmluZyBzdHlsZUNoYW5nZVR5cGUoTm9kZSBub2RlKTsKKyAgICBib29sZWFuIG5vZGVOZWVk
c1N0eWxlUmVjYWxjKE5vZGUgbm9kZSk7CisgICAgRE9NU3RyaW5nIHN0eWxlQ2hhbmdlVHlwZShO
b2RlIG5vZGUpOwogICAgIERPTVN0cmluZyBkZXNjcmlwdGlvbihhbnkgdmFsdWUpOwogCiAgICAg
Ly8gQW5pbWF0ZWQgaW1hZ2UgcGF1c2luZyB0ZXN0aW5nLgotICAgIFtSYWlzZXNFeGNlcHRpb25d
IGJvb2xlYW4gaGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKEVsZW1lbnQgZWxlbWVudCk7CisgICAg
Ym9vbGVhbiBoYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMoRWxlbWVudCBlbGVtZW50KTsKIAogICAg
IFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBlbGVtZW50UmVuZGVyVHJlZUFzVGV4dChFbGVt
ZW50IGVsZW1lbnQpOwogICAgIGJvb2xlYW4gaXNQcmVsb2FkZWQoRE9NU3RyaW5nIHVybCk7CiAg
ICAgYm9vbGVhbiBpc0xvYWRpbmdGcm9tTWVtb3J5Q2FjaGUoRE9NU3RyaW5nIHVybCk7CiAgICAg
RE9NU3RyaW5nIHhoclJlc3BvbnNlU291cmNlKFhNTEh0dHBSZXF1ZXN0IHhocik7Ci0gICAgYm9v
bGVhbiBpc1NoYXJpbmdTdHlsZVNoZWV0Q29udGVudHMoRWxlbWVudCBsaW5rQSwgRWxlbWVudCBs
aW5rQik7Ci0gICAgYm9vbGVhbiBpc1N0eWxlU2hlZXRMb2FkaW5nU3VicmVzb3VyY2VzKEVsZW1l
bnQgbGluayk7CisgICAgYm9vbGVhbiBpc1NoYXJpbmdTdHlsZVNoZWV0Q29udGVudHMoSFRNTExp
bmtFbGVtZW50IGEsIEhUTUxMaW5rRWxlbWVudCBiKTsKKyAgICBib29sZWFuIGlzU3R5bGVTaGVl
dExvYWRpbmdTdWJyZXNvdXJjZXMoSFRNTExpbmtFbGVtZW50IGxpbmspOwogICAgIHZvaWQgY2xl
YXJNZW1vcnlDYWNoZSgpOwogICAgIHZvaWQgcHJ1bmVNZW1vcnlDYWNoZVRvU2l6ZShsb25nIHNp
emUpOwogICAgIGxvbmcgbWVtb3J5Q2FjaGVTaXplKCk7CkBAIC05MCwyMSArODksMjAgQEAgZW51
bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogICAgIHZvaWQgc2V0U3RyaWN0UmF3UmVzb3VyY2VWYWxp
ZGF0aW9uUG9saWN5RGlzYWJsZWQoYm9vbGVhbiBkaXNhYmxlZCk7CiAKICAgICB2b2lkIGNsZWFy
UGFnZUNhY2hlKCk7Ci0gICAgdW5zaWduZWQgaW50IHBhZ2VDYWNoZVNpemUoKTsKKyAgICB1bnNp
Z25lZCBsb25nIHBhZ2VDYWNoZVNpemUoKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIENTU1N0
eWxlRGVjbGFyYXRpb24gY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKE5vZGUgbm9k
ZSk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRl
ZEluZm8oTm9kZSBub2RlKTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgZW5zdXJlU2hh
ZG93Um9vdChFbGVtZW50IGhvc3QpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgZW5zdXJl
VXNlckFnZW50U2hhZG93Um9vdChFbGVtZW50IGhvc3QpOworICAgIE5vZGUgZW5zdXJlVXNlckFn
ZW50U2hhZG93Um9vdChFbGVtZW50IGhvc3QpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUg
Y3JlYXRlU2hhZG93Um9vdChFbGVtZW50IGhvc3QpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5v
ZGUgc2hhZG93Um9vdChFbGVtZW50IGhvc3QpOworICAgIE5vZGUgc2hhZG93Um9vdChFbGVtZW50
IGhvc3QpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHNoYWRvd1Jvb3RUeXBl
KE5vZGUgcm9vdCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRWxlbWVudCBpbmNsdWRlckZvcihO
b2RlIG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBzaGFkb3dQc2V1ZG9J
ZChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0U2hhZG93
UHNldWRvSWQoRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgaWQpOwotICAgIFtSYWlzZXNFeGNl
cHRpb25dIE5vZGUgdHJlZVNjb3BlUm9vdE5vZGUoTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBOb2RlIHBhcmVudFRyZWVTY29wZShOb2RlIG5vZGUpOworICAgIERPTVN0cmluZyBz
aGFkb3dQc2V1ZG9JZChFbGVtZW50IGVsZW1lbnQpOworICAgIHZvaWQgc2V0U2hhZG93UHNldWRv
SWQoRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgaWQpOworICAgIE5vZGUgdHJlZVNjb3BlUm9v
dE5vZGUoTm9kZSBub2RlKTsKKyAgICBOb2RlIHBhcmVudFRyZWVTY29wZShOb2RlIG5vZGUpOwog
CiAgICAgLy8gU3BhdGlhbCBOYXZpZ2F0aW9uIHRlc3RpbmcKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSB1bnNpZ25lZCBsb25nIGxhc3RTcGF0aWFsTmF2aWdhdGlvbkNhbmRpZGF0ZUNvdW50KCk7CkBA
IC0xMjEsMTYgKzExOSwxNCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAgICAgW1JhaXNl
c0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoRE9NU3Ry
aW5nIHByb3BlcnR5TmFtZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQg
ZWxlbWVudCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25B
dFRpbWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5nIHByb3BlcnR5LCB1bnJlc3RyaWN0ZWQgZG91
YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcHNldWRvSWQpOwogCi0g
ICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBhdHRhY2hlZChOb2RlIG5vZGUpOwotCiAgICAg
RE9NU3RyaW5nIHZpc2libGVQbGFjZWhvbGRlcihFbGVtZW50IGVsZW1lbnQpOwotICAgIHZvaWQg
c2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3NlcihFbGVtZW50IGVsZW1lbnQsIERPTVN0cmluZyBjb2xv
clZhbHVlKTsKKyAgICB2b2lkIHNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoSFRNTElucHV0RWxl
bWVudCBlbGVtZW50LCBET01TdHJpbmcgY29sb3JWYWx1ZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gRE9NU3RyaW5nW10gZm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNIaXN0b3J5SXRlbSgpOwog
ICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0Rm9ybUNvbnRyb2xTdGF0ZU9mUHJldmlvdXNI
aXN0b3J5SXRlbShzZXF1ZW5jZTxET01TdHJpbmc+IHZhbHVlcyk7CiAKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBDbGllbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKIAotICAgIFtSYWlzZXNF
eGNlcHRpb25dIENsaWVudFJlY3QgYm91bmRpbmdCb3goRWxlbWVudCBlbGVtZW50KTsKKyAgICBD
bGllbnRSZWN0IGJvdW5kaW5nQm94KEVsZW1lbnQgZWxlbWVudCk7CiAKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBDbGllbnRSZWN0TGlzdCBpbnNwZWN0b3JIaWdobGlnaHRSZWN0cygpOwogICAgIFtS
YWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBpbnNwZWN0b3JIaWdobGlnaHRPYmplY3QoKTsKQEAg
LTE1OCwxMCArMTU0LDEwIEBAIGVudW0gQXV0b0ZpbGxCdXR0b25UeXBlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAg
IFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gd2FzTGFzdENoYW5nZVVzZXJFZGl0KEVsZW1lbnQg
dGV4dEZpZWxkKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGVsZW1lbnRTaG91bGRB
dXRvQ29tcGxldGUoRWxlbWVudCBpbnB1dEVsZW1lbnQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25d
IHZvaWQgc2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQgaW5wdXRFbGVtZW50LCBET01TdHJpbmcgdmFs
dWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0QXV0b2ZpbGxlZChFbGVtZW50IGlu
cHV0RWxlbWVudCwgYm9vbGVhbiBlbmFibGVkKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHNldFNob3dBdXRvRmlsbEJ1dHRvbihFbGVtZW50IGlucHV0RWxlbWVudCwgQXV0b0ZpbGxCdXR0
b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSk7CisgICAgYm9vbGVhbiBlbGVtZW50U2hvdWxkQXV0
b0NvbXBsZXRlKEhUTUxJbnB1dEVsZW1lbnQgaW5wdXRFbGVtZW50KTsKKyAgICB2b2lkIHNldEVk
aXRpbmdWYWx1ZShIVE1MSW5wdXRFbGVtZW50IGlucHV0RWxlbWVudCwgRE9NU3RyaW5nIHZhbHVl
KTsKKyAgICB2b2lkIHNldEF1dG9maWxsZWQoSFRNTElucHV0RWxlbWVudCBpbnB1dEVsZW1lbnQs
IGJvb2xlYW4gZW5hYmxlZCk7CisgICAgdm9pZCBzZXRTaG93QXV0b0ZpbGxCdXR0b24oSFRNTElu
cHV0RWxlbWVudCBpbnB1dEVsZW1lbnQsIEF1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRv
blR5cGUpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgY291bnRNYXRjaGVz
Rm9yVGV4dChET01TdHJpbmcgdGV4dCwgdW5zaWduZWQgbG9uZyBmaW5kT3B0aW9ucywgRE9NU3Ry
aW5nIG1hcmtNYXRjaGVzKTsKIAogICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBhdXRv
ZmlsbEZpZWxkTmFtZShFbGVtZW50IGZvcm1Db250cm9sRWxlbWVudCk7CkBAIC0xNzAsMTEgKzE2
NiwxMSBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHNjcm9sbEVsZW1lbnRUb1JlY3QoRWxlbWVudCBlbGVtZW50LCBsb25nIHgsIGxvbmcg
eSwgbG9uZyB3LCBsb25nIGgpOwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gUmFuZ2UgcmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCBzY29wZSwgbG9uZyByYW5nZUxvY2F0aW9uLCBs
b25nIHJhbmdlTGVuZ3RoKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGxv
Y2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQgc2NvcGUsIFJhbmdlIHJhbmdlKTsKLSAgICBbUmFpc2Vz
RXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGxlbmd0aEZyb21SYW5nZShFbGVtZW50IHNjb3BlLCBS
YW5nZSByYW5nZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHJhbmdlQXNUZXh0
KFJhbmdlIHJhbmdlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBSYW5nZSBzdWJyYW5nZShSYW5n
ZSByYW5nZSwgbG9uZyByYW5nZUxvY2F0aW9uLCBsb25nIHJhbmdlTGVuZ3RoKTsKKyAgICBSYW5n
ZSByYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50IHNjb3BlLCBsb25nIHJhbmdlTG9j
YXRpb24sIGxvbmcgcmFuZ2VMZW5ndGgpOworICAgIHVuc2lnbmVkIGxvbmcgbG9jYXRpb25Gcm9t
UmFuZ2UoRWxlbWVudCBzY29wZSwgUmFuZ2UgcmFuZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgbGVu
Z3RoRnJvbVJhbmdlKEVsZW1lbnQgc2NvcGUsIFJhbmdlIHJhbmdlKTsKKyAgICBET01TdHJpbmcg
cmFuZ2VBc1RleHQoUmFuZ2UgcmFuZ2UpOworICAgIFJhbmdlIHN1YnJhbmdlKFJhbmdlIHJhbmdl
LCBsb25nIHJhbmdlTG9jYXRpb24sIGxvbmcgcmFuZ2VMZW5ndGgpOwogICAgIFtSYWlzZXNFeGNl
cHRpb25dIFJhbmdlIHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24obG9uZyB4LCBs
b25nIHkpOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXREZWxlZ2F0ZXNTY3JvbGxp
bmcoYm9vbGVhbiBlbmFibGVkKTsKQEAgLTIxOSw3ICsyMTUsNyBAQCBlbnVtIEF1dG9GaWxsQnV0
dG9uVHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGlzUGFnZUJveFZpc2li
bGUobG9uZyBwYWdlTnVtYmVyKTsKIAotICAgIFtSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxv
bmcgaW1hZ2VGcmFtZUluZGV4KEVsZW1lbnQgZWxlbWVudCk7CisgICAgdW5zaWduZWQgbG9uZyBp
bWFnZUZyYW1lSW5kZXgoSFRNTEltYWdlRWxlbWVudCBlbGVtZW50KTsKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBJbnRlcm5hbFNldHRpbmdzIHNldHRpbmdzOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIHdvcmtlclRocmVhZENvdW50OwpAQCAtMzM1LDE3ICszMzEsMTcg
QEAgZW51bSBBdXRvRmlsbEJ1dHRvblR5cGUgewogCiAgICAgLy8gfG5vZGV8IHNob3VsZCBiZSBE
b2N1bWVudCwgSFRNTElGcmFtZUVsZW1lbnQsIG9yIHVuc3BlY2lmaWVkLgogICAgIC8vIElmIHxu
b2RlfCBpcyBhbiBIVE1MSUZyYW1lRWxlbWVudCwgaXQgYXNzdW1lcyBub2RlLmNvbnRlbnREb2N1
bWVudCBpcwotICAgIC8vIHNwZWNpZmllZCB3aXRob3V0IHNlY3VyaXR5IGNoZWNrcy4gVW5zcGVj
aWZpZWQgbWVhbnMgdGhpcyBkb2N1bWVudC4KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0FuZFJ1blBvc3RMYXlvdXRUYXNrcyhv
cHRpb25hbCBOb2RlIG5vZGUpOworICAgIC8vIHNwZWNpZmllZCB3aXRob3V0IHNlY3VyaXR5IGNo
ZWNrcy4gVW5zcGVjaWZpZWQgb3IgbnVsbCBtZWFucyB0aGlzIGRvY3VtZW50LgorICAgIFtSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzQW5k
UnVuUG9zdExheW91dFRhc2tzKG9wdGlvbmFsIE5vZGU/IG5vZGUpOwogCiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGF5b3V0Q291bnQ7CiAKICAgICAvLyBSZXR1cm5zIGEg
c3RyaW5nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vdXNlIGN1cnNvciB1c2VkIGF0IHRo
ZSBzcGVjaWZpZWQgY2xpZW50IGxvY2F0aW9uLgogICAgIFtSYWlzZXNFeGNlcHRpb25dIERPTVN0
cmluZyBnZXRDdXJyZW50Q3Vyc29ySW5mbygpOwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9N
U3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50IGVsZW1lbnQpOworICAgIERPTVN0
cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCBlbGVtZW50KTsKIAotICAgIFtSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCBlbGVtZW50
KTsKKyAgICBET01TdHJpbmcgdG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7CiAK
ICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlCdWZmZXIg
YnVmZmVyKTsKICAgICBBcnJheUJ1ZmZlciBzZXJpYWxpemVPYmplY3QoU2VyaWFsaXplZFNjcmlw
dFZhbHVlIG9iaik7CkBAIC0zNTksMTQgKzM1NSwxNCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlw
ZSB7CiAKICAgICB2b2lkIGVuYWJsZUF1dG9TaXplTW9kZShib29sZWFuIGVuYWJsZWQsIGxvbmcg
bWluaW11bVdpZHRoLCBsb25nIG1pbmltdW1IZWlnaHQsIGxvbmcgbWF4aW11bVdpZHRoLCBsb25n
IG1heGltdW1IZWlnaHQpOwogCi0gICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2b2lkIHNpbXVsYXRl
QXVkaW9JbnRlcnJ1cHRpb24oTm9kZSBub2RlKTsKLSAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJh
aXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBtZWRpYUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhOb2Rl
IG5vZGUsIERPTVN0cmluZyBjaGFyYWN0ZXJpc3RpYyk7CisgICAgW0NvbmRpdGlvbmFsPVZJREVP
XSB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50
KTsKKyAgICBbQ29uZGl0aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBtZWRp
YUVsZW1lbnRIYXNDaGFyYWN0ZXJpc3RpYyhIVE1MTWVkaWFFbGVtZW50IGVsZW1lbnQsIERPTVN0
cmluZyBjaGFyYWN0ZXJpc3RpYyk7CiAKICAgICBbQ29uZGl0aW9uYWw9RU5DUllQVEVEX01FRElB
X1YyXSB2b2lkIGluaXRpYWxpemVNb2NrQ0RNKCk7CiAKICAgICBbQ29uZGl0aW9uYWw9U1BFRUNI
X1NZTlRIRVNJU10gdm9pZCBlbmFibGVNb2NrU3BlZWNoU3ludGhlc2l6ZXIoKTsKIAotICAgIFtS
YWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyBnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50IGVsZW1l
bnQpOworICAgIERPTVN0cmluZyBnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50IGVsZW1lbnQpOwog
CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmlu
ZyBjYXB0aW9uc1N0eWxlU2hlZXRPdmVycmlkZSgpOwogICAgIFtDb25kaXRpb25hbD1WSURFT19U
UkFDSywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldENhcHRpb25zU3R5bGVTaGVldE92ZXJyaWRl
KERPTVN0cmluZyBvdmVycmlkZSk7CkBAIC0zNzcsMTQgKzM3MywxNCBAQCBlbnVtIEF1dG9GaWxs
QnV0dG9uVHlwZSB7CiAgICAgIGVuZFRpbWVzKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHVu
cmVzdHJpY3RlZCBkb3VibGUgY2xvc2VzdFRpbWVUb1RpbWVSYW5nZXModW5yZXN0cmljdGVkIGRv
dWJsZSB0aW1lLCBUaW1lUmFuZ2VzIHJhbmdlcyk7CiAKLSAgICBib29sZWFuIGlzU2VsZWN0UG9w
dXBWaXNpYmxlKE5vZGUgbm9kZSk7CisgICAgYm9vbGVhbiBpc1NlbGVjdFBvcHVwVmlzaWJsZShI
VE1MU2VsZWN0RWxlbWVudCBlbGVtZW50KTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX1ZJQlJBVElP
TikgJiYgRU5BQkxFX1ZJQlJBVElPTgogICAgIGJvb2xlYW4gaXNWaWJyYXRpbmcoKTsKICNlbmRp
ZgogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBpc1BsdWdpblVuYXZhaWxhYmlsaXR5
SW5kaWNhdG9yT2JzY3VyZWQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSBib29sZWFuIGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCBlbGVtZW50KTsKKyAgICBib29s
ZWFuIGlzUGx1Z2luU25hcHNob3R0ZWQoRWxlbWVudCBlbGVtZW50KTsKIAogICAgIFtSYWlzZXNF
eGNlcHRpb25dIENsaWVudFJlY3Qgc2VsZWN0aW9uQm91bmRzKCk7CiAKQEAgLTQwMiw4ICszOTgs
OCBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlwZSB7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPXSB2
b2lkIGFwcGxpY2F0aW9uRGlkRW50ZXJGb3JlZ3JvdW5kKCk7CiAgICAgW0NvbmRpdGlvbmFsPVZJ
REVPXSB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpOwogICAgIFtDb25kaXRp
b25hbD1WSURFTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0
aW9ucyhET01TdHJpbmcgbWVkaWFUeXBlLCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKLSAgICBb
Q29uZGl0aW9uYWw9VklERU8sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRNZWRpYUVsZW1lbnRS
ZXN0cmljdGlvbnMoSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcmVzdHJpY3Rp
b25zKTsKLSAgICBbQ29uZGl0aW9uYWw9V0VCX0FVRElPLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCBjb250ZXh0LCBET01TdHJp
bmcgcmVzdHJpY3Rpb25zKTsKKyAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2V0TWVkaWFF
bGVtZW50UmVzdHJpY3Rpb25zKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJl
c3RyaWN0aW9ucyk7CisgICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJT10gdm9pZCBzZXRBdWRpb0Nv
bnRleHRSZXN0cmljdGlvbnMoQXVkaW9Db250ZXh0IGNvbnRleHQsIERPTVN0cmluZyByZXN0cmlj
dGlvbnMpOwogICAgIFtDb25kaXRpb25hbD1WSURFTywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHBv
c3RSZW1vdGVDb250cm9sQ29tbWFuZChET01TdHJpbmcgY29tbWFuZCk7CiAgICAgW0NvbmRpdGlv
bmFsPVdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCBzZXRNb2NrTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlckVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKICAgICBbQ29uZGl0aW9uYWw9V0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VULCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0TW9ja01lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXJTdGF0ZShET01TdHJpbmcgZGV2aWNlTmFtZSwgRE9NU3RyaW5n
IGRldmljZVN0YXRlKTsKQEAgLTQxMSw3ICs0MDcsNyBAQCBlbnVtIEF1dG9GaWxsQnV0dG9uVHlw
ZSB7CiAKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2ltdWxhdGVTeXN0ZW1TbGVlcCgp
OwogICAgIFtDb25kaXRpb25hbD1WSURFT10gdm9pZCBzaW11bGF0ZVN5c3RlbVdha2UoKTsKLSAg
ICBbQ29uZGl0aW9uYWw9VklERU9dIGJvb2xlYW4gZWxlbWVudElzQmxvY2tpbmdEaXNwbGF5U2xl
ZXAoRWxlbWVudCBlbGVtZW50KTsKKyAgICBbQ29uZGl0aW9uYWw9VklERU9dIGJvb2xlYW4gZWxl
bWVudElzQmxvY2tpbmdEaXNwbGF5U2xlZXAoSFRNTE1lZGlhRWxlbWVudCBlbGVtZW50KTsKIAog
ICAgIFtSYWlzZXNFeGNlcHRpb25dIE1vY2tQYWdlT3ZlcmxheSBpbnN0YWxsTW9ja1BhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5VHlwZSB0eXBlKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01TdHJp
bmcgcGFnZU92ZXJsYXlMYXllclRyZWVBc1RleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLm1tCShyZXZpc2lvbiAxOTk1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVN0cmluZyBJbnRlcm5hbHM6OnVzZXJWaXNpYmxlU3RyaW5nKGNvbnN0
IERPTVVSTCogdXJsKQorU3RyaW5nIEludGVybmFsczo6dXNlclZpc2libGVTdHJpbmcoY29uc3Qg
RE9NVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHREb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcodXJsLT5ocmVmKCkpOworICAgIHJl
dHVybiBjb250ZXh0RG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCkuY2xpZW50KCktPnVzZXJW
aXNpYmxlU3RyaW5nKHVybC5ocmVmKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxOTk1Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3Qo
SlNDb250ZXh0UmVmIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KCpzY3JpcHRDb250
ZXh0KSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50PihzY3Jp
cHRDb250ZXh0KSkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0o
KSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBJbnRlcm5hbHM6OmludGVybmFsc0lkKSwg
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEludGVybmFsczo6Y3JlYXRlKGRvd25jYXN0PERvY3Vt
ZW50Pigqc2NyaXB0Q29udGV4dCkpKSk7CiB9CiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgcmVzZXRJbnRlcm5h
bHNPYmplY3QoSlNDb250ZXh0UmVmIGMKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFs
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUGFnZSogcGFnZSA9IGRvd25j
YXN0PERvY3VtZW50PihzY3JpcHRDb250ZXh0KS0+ZnJhbWUoKS0+cGFnZSgpOwotICAgIEludGVy
bmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShwYWdlKTsKKyAgICBJbnRlcm5hbHM6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKnBhZ2UpOwogICAgIEludGVybmFsU2V0dGluZ3M6OmZyb20ocGFn
ZSktPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5
NTI4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTYtMDQtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbW92ZSBVc2VQb2ludGVyc0V2ZW5Gb3JOb25OdWxsYWJsZU9iamVjdEFyZ3VtZW50cyBm
cm9tIEludGVybmFscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU2NTM5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50LWV4cGVj
dGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9y
LW9uY2hhbmdlLWV2ZW50Lmh0bWw6IFJlbW92ZWQgdW5uZWVkZWQgdGVzdCBvZiBob3cgdGhlCisg
ICAgICAgIGludGVybmFscyBvYmplY3QgaGFuZGxlcyBpbmNvcnJlY3QgdmFsdWVzIHBhc3NlZCB0
byB0aGUgdGVzdCBmdW5jdGlvbi4gVGhpcyB3YXNuJ3QgdGVzdGluZworICAgICAgICBhY3R1YWwg
V2ViS2l0IGNvZGUgYXQgYWxsLCBpdCB3YXMganVzdCBhIHRlc3Qgb2YgdGhlIGludGVybmFscyBv
YmplY3QgaW1wbGVtZW50YXRpb24uCisKIDIwMTYtMDQtMTMgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIENTUDogTmVzdGVkIGJyb3dzaW5nIGNvbnRleHQgY3Jl
YXRlZCBmb3IgPG9iamVjdD4gb3IgPGVtYmVkPiBzaG91bGQgcmVzcGVjdCBvYmplY3Qtc3JjIGRp
cmVjdGl2ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xvci1v
bmNoYW5nZS1ldmVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xvci1vbmNoYW5nZS1ldmVudC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE5OTUyOCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvY29sb3IvaW5wdXQtY29s
b3Itb25jaGFuZ2UtZXZlbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDkgKzUs
NiBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBv
bkNoYW5nZUNvdW50IGlzIDAKLWludGVybmFscy5zZWxlY3RDb2xvckluQ29sb3JDaG9vc2VyKHt9
LCAnI2ZmMDAwMCcpOwotaW50ZXJuYWxzLnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoZG9jdW1l
bnQsICcjZmYwMDAwJyk7Ci1QQVNTIG9uQ2hhbmdlQ291bnQgaXMgMAogaW5wdXQgZXZlbnQgZGlz
cGF0Y2hlZCAtIHZhbHVlIGlzOiAgI2ZmMDAwMAogY2hhbmdlIGV2ZW50IGRpc3BhdGNoZWQgLSB2
YWx1ZSBjaGFuZ2VkIHRvICNmZjAwMDAKIFBBU1Mgb25DaGFuZ2VDb3VudCBpcyAxCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jb2xvci9pbnB1dC1jb2xv
ci1vbmNoYW5nZS1ldmVudC5odG1sCShyZXZpc2lvbiAxOTk1MjgpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2NvbG9yL2lucHV0LWNvbG9yLW9uY2hhbmdlLWV2ZW50Lmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEwICszNSw2IEBAIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwogZXZlbnRT
ZW5kZXIubW91c2VVcCgpOwogCiBzaG91bGRCZSgnb25DaGFuZ2VDb3VudCcsICcwJyk7Ci0vLyBU
ZXN0IHRoYXQgaW5jb3JyZWN0IGVsZW1lbnQgYXJndW1lbnRzIGFyZSAobm90KSBoYW5kbGVkLgot
ZXZhbEFuZExvZygiaW50ZXJuYWxzLnNlbGVjdENvbG9ySW5Db2xvckNob29zZXIoe30sICcjZmYw
MDAwJyk7Iik7Ci1ldmFsQW5kTG9nKCJpbnRlcm5hbHMuc2VsZWN0Q29sb3JJbkNvbG9yQ2hvb3Nl
cihkb2N1bWVudCwgJyNmZjAwMDAnKTsiKTsKLXNob3VsZEJlKCdvbkNoYW5nZUNvdW50JywgJzAn
KTsKIAogLy8gaW5wdXQub25jaGFuZ2Ugc2hvdWxkIGJlIGNhbGxlZAogaW50ZXJuYWxzLnNlbGVj
dENvbG9ySW5Db2xvckNob29zZXIoaW5wdXQsICcjZmYwMDAwJyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>