<?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>23797</bug_id>
          
          <creation_ts>2009-02-06 12:45:27 -0800</creation_ts>
          <short_desc>A platform should be able to use more than one media engine for &lt;video&gt; and &lt;audio&gt;</short_desc>
          <delta_ts>2009-03-02 11:51:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108684</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-06 12:45:27 -0800</bug_when>
    <thetext>It is very difficult for a port to use more than one media engine to implement &lt;video&gt; and &lt;audio&gt; (eg. QuickTime and Windows Media on Windows) because there can be only one type of  MediaPlayerPrivate. MediaPlayer should be able to create more than one type of private player, and should have a heuristic for choose the correct engine based on MIME type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108686</commentid>
    <comment_count>1</comment_count>
      <attachid>27409</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-06 12:48:49 -0800</bug_when>
    <thetext>Created attachment 27409
Prototype patch

This patch only supports Mac build for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108695</commentid>
    <comment_count>2</comment_count>
      <attachid>27414</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-06 13:23:17 -0800</bug_when>
    <thetext>Created attachment 27414
patch cleaned up a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108756</commentid>
    <comment_count>3</comment_count>
      <attachid>27414</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-06 16:07:31 -0800</bug_when>
    <thetext>Comment on attachment 27414
patch cleaned up a bit

&gt; -    String pickMedia();
&gt; +    String pickMedia(String&amp; mediaMIMEType);

It&apos;s a little mysterious here what the return value is. Is it a URL? Probably needs a comment.

&gt; +    String type = mimeType.stripWhiteSpace();

I worry a little about a low-ish level function that always strips whitespace. Is this stripping called for? Is it done by other browsers? I only want to strip when it&apos;s really needed. It&apos;s one thing to skip whitespace around a separator and another to just &quot;strip&quot; on general principles.

&gt; +    static String getParameterFromMIMEType(const String&amp; type, const String&amp; parameter);

I think the argument should be named &quot;parameterName&quot;. The returned thing is what I&apos;d call the parameter. Maybe.

&gt; +    MediaPlayerFactory(NewMediaEnginePlayer ctor, MediaEngineSupportedTypes getTypes, MediaEngineSupportsType supportsType) 
&gt; +        : constructor(ctor)
&gt; +        , getSupportedTypes(getTypes)
&gt; +        , supportsTypeAndCodecs(supportsType)  { };

Formatting here should be different. The braces should go on their own separate lines. No semicolon. Also, no need to abbreviate to &quot;ctor&quot;. You can even have the member be named the same thing as the initializer parameter. We&apos;ve tested that elsewhere.

&gt; +static void addMediaEngine(NewMediaEnginePlayer ctor, MediaEngineSupportedTypes getSupportedTypes, MediaEngineSupportsType supportsType);

Should omit the argument names here.

&gt; +static MediaPlayerFactory *chooseBestEngineForTypeAndCodecs(const String&amp; type, const String&amp; codecs);

Should move the * to the left here.

&gt; +static Vector&lt;MediaPlayerFactory*&gt;&amp; installedMediaEngines();

Should not have this declaration since the function is defined below. We only need declarations of internal functions if there are forward references.

&gt; +static MediaPlayerFactory *chooseBestEngineForTypeAndCodecs(const String&amp; type, const String&amp; codecs)

The * needs to be moved left.

&gt; +    Vector&lt;MediaPlayerFactory*&gt;::const_iterator it = engines.begin();
&gt; +    const Vector&lt;MediaPlayerFactory*&gt;::const_iterator end = engines.end();

We normally iterate vectors using indices rather than iterators.

&gt; +        m_private = engine-&gt;constructor(this);
&gt; +
&gt; +    if (m_private)
&gt; +        m_private-&gt;load(url);

Maybe we should create a class for a null engine so we don&apos;t have to pay for null checks everywhere. It doesn&apos;t seem like a case we want to optimize for.

&gt; +    RefPtr&lt;MediaPlayerPrivateInterface&gt; m_private;

It seems strange to ref-count the private interface. Do we need to do that?

&gt; +typedef PassRefPtr&lt;MediaPlayerPrivateInterface&gt; (*NewMediaEnginePlayer)(MediaPlayer *player);

Please leave out the name &quot;player&quot; and move the *.

&gt; +typedef void (*MediaEngineRegistrar)(NewMediaEnginePlayer ctor, MediaEngineSupportedTypes getTypes, MediaEngineSupportsType supportsType); 

Please leave out the argument names here.

Generally looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108757</commentid>
    <comment_count>4</comment_count>
      <attachid>27414</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-02-06 16:08:09 -0800</bug_when>
    <thetext>Comment on attachment 27414
patch cleaned up a bit

I like it. A few random comments from a quick scan, nothing very important:

- MIME stuff seems to be calling for a new type 
- unnecessary parenthesis like this in a few places:
return (m_private ? m_private-&gt;currentTime() : 0);
- &quot;Supported&quot; is too generic name for public WebCore namespace, how about scoping it to MediaPlayer (as in MediaPlayer::Supported)
- MayBeSupported -&gt; MaybeSupported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108837</commentid>
    <comment_count>5</comment_count>
      <attachid>27451</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-07 10:51:19 -0800</bug_when>
    <thetext>Created attachment 27451
updated patch

Updated for Antti and Darin&apos;s comments except for putting MIME type functions into a new type, will do that in a future patch. Includes untested changes for all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108912</commentid>
    <comment_count>6</comment_count>
      <attachid>27469</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-08 14:09:52 -0800</bug_when>
    <thetext>Created attachment 27469
updated patch

Tested on Windows, fixed a few typos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109188</commentid>
    <comment_count>7</comment_count>
      <attachid>27538</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-10 14:15:44 -0800</bug_when>
    <thetext>Created attachment 27538
Updated patch

Updated with fixes based on GTK testing by zecke.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109364</commentid>
    <comment_count>8</comment_count>
      <attachid>27571</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-11 13:38:35 -0800</bug_when>
    <thetext>Created attachment 27571
patch

Final clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109375</commentid>
    <comment_count>9</comment_count>
      <attachid>27571</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-11 14:53:33 -0800</bug_when>
    <thetext>Comment on attachment 27571
patch

I really think we should come up with a better name than &quot;private&quot; for the back end of the media player.

&gt; +                if (end != -1)
&gt; +                    end = type.length();

I think this should be end == -1. How did you test this parsing? Do we have test suite for this mini-parser?

&gt; +    static String getParameterFromMIMEType(const String&amp; type, const String&amp; parameterName);
&gt; +    static String stripParametersFromMIMEType(const String&amp; type);

In other places in our API we don&apos;t use the word get -- we just use nouns for getters. However, you&apos;re just being consistent with the rest of the registry so I&apos;m having a hard time finding fault.

&gt; + * Copyright (C) 2007-2009 Apple Inc.  All rights reserved.

We use comma-separated years, no ranges. (And also just one space, not two spaces after a period.)

&gt; +struct MediaPlayerFactory {
&gt; +    MediaPlayerFactory(CreateMediaEnginePlayer constructor, MediaEngineSupportedTypes getSupportedTypes, MediaEngineSupportsType supportsTypeAndCodecs) 
&gt; +        : constructor(constructor)
&gt; +        , getSupportedTypes(getSupportedTypes)
&gt; +        , supportsTypeAndCodecs(supportsTypeAndCodecs)  
&gt; +    { }

We&apos;d put the braces on separate lines in a case like this.

&gt; +// ++++++++++++++++++++

We rarely use things like this, and when we do, we use --- rather than +++. Maybe just leave it out?

&gt; +    //  if we didn&apos;t find an engine that claims the MIME type, just use the first engine

Extra space at the star of the comment here.

&gt; +        delete m_private;
&gt; +        m_private = 0;
&gt; +        m_private = engine-&gt;constructor(this);

This makes it look like m_private should be an OwnPtr.

&gt; +    Vector&lt;MediaPlayerFactory*&gt;::const_iterator it = engines.begin();
&gt; +    const Vector&lt;MediaPlayerFactory*&gt;::const_iterator end = engines.end();

Preferred style is to iterate vectors using indices, not iterators.

&gt; +class NULLMediaPlayerPrivate : public MediaPlayerPrivateInterface {

I don&apos;t think the word Null should be capitalized here. Also, we normally put class definitions at the top of the file.

&gt; +public:
&gt; +    NULLMediaPlayerPrivate(MediaPlayer*) {};
&gt; +    virtual ~NULLMediaPlayerPrivate() {};

These declarations aren&apos;t needed. You get them automatically. Also, no semicolons after function bodies.

&gt; +    virtual void cancelLoad() { };

No semicolons after function bodies.

&gt; -class MediaPlayerPrivate;
&gt; +class MediaPlayerPrivateInterface;

I guess you&apos;re doing this so the concrete implementations for each platform can still be named MediaPlayerPrivate, but I think that&apos;s only good short term. Eventually their names should be specific to the platform, because we&apos;ll want to compile more than one at a time.

&gt;  class String;
&gt;  
&gt;  class MediaPlayerClient {
&gt; @@ -52,19 +52,23 @@ public:
&gt;      virtual void mediaPlayerRepaint(MediaPlayer*) { }
&gt;  };
&gt;  
&gt; +
&gt;  class MediaPlayer : Noncopyable {

We normally don&apos;t use multiple blank lines for formatting.

&gt; +#include &quot;IntRect.h&quot;

You don&apos;t need the definition of IntRect to compile a function that takes a const IntRect&amp; and ignores it, so this should just be forward-declared in this file.

&gt; +#include &quot;MediaPlayer.h&quot;
&gt; +#include &quot;Timer.h&quot;

Why is this included in MediaPlayerPrivate.h? I see no timer.

&gt; +#include &quot;TimeRanges.h&quot;

Same question. I see no use of TimeRanges.h.

&gt; +class String;

Since we have to include MediaPlayer.h, we don&apos;t need this forward declaration. But I think the real fix is to eliminate the need to include MediaPlayer.h.

&gt; +class MediaPlayerPrivateInterface
&gt; +{

Brace goes on same line with class name.

&gt; +public:
&gt; +    virtual ~MediaPlayerPrivateInterface() {};

Lets be consistent about including spaces between the braces. This should not have a semicolon after it.

&gt; +    virtual void setRate(float inRate) = 0;

We don&apos;t use the &quot;in&quot; prefix.

&gt; +    virtual void setVolume(float inVolume) = 0;

Ditto.

&gt; +    virtual MediaPlayer::NetworkState networkState() const = 0;
&gt; +    virtual MediaPlayer::ReadyState readyState() const = 0;

We should separate these types out and make them non-members. Then we can put them in a separate header and eliminate the need to include MediaPlayer.h here. Or not, if you think that&apos;s too much of a pain.

&gt; +    virtual bool totalBytesKnown() const { return totalBytes() &gt; 0; }

Does this need to be virtual or not?

&gt; +    virtual void setRect(const IntRect&amp; r) = 0;

No need for the &quot;r&quot; here.

&gt; +    // FIXME: do the real thing
&gt; +    notImplemented();
&gt; +    return type == &quot;video/x-theora+ogg&quot; ? (!codecs.isEmpty() ? MediaPlayer::MayBeSupported : MediaPlayer::IsSupported) : MediaPlayer::IsNotSupported;

Could you write a better FIXME here? This one&apos;s a little vague.

&gt; +        MediaPlayerPrivate(MediaPlayer*);
&gt; +Ê ÊÊÊÊÊÊstatic MediaPlayerPrivateInterface* create(MediaPlayer* player);

Looks like this won&apos;t compile.

I&apos;m going to say r=me, but there still seems like some room for improvement as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109547</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-12 13:10:43 -0800</bug_when>
    <thetext>Update for all of Darin&apos;s comments except for changing the names of the concrete platform implementations, will do that in a future check-in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109548</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-12 13:11:00 -0800</bug_when>
    <thetext>Committed revision 40925.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109994</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 12:39:21 -0800</bug_when>
    <thetext>Adding MIMETypeRegistry::getParameterFromMIMEType/stripParametersFromMIMEType breaks both chromium and wx builds (they both have their own impls of MIMETypeRegistry). Since the new methods are static, what do you think about just turning them info functions and moving to header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109996</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 12:55:23 -0800</bug_when>
    <thetext>.. or perhaps a new MimeTypeParameterParser class would work better? I am open to ideas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109997</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-02-17 13:03:03 -0800</bug_when>
    <thetext>I think a new class makes the most sense (this is also what Antti suggested in his review below). &quot;MIMEType&quot; seems the logical class to me, but unfortunately it already exists in WebCore/plugins. Maybe that class can be renamed since it is specific to plug-ins?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110013</commentid>
    <comment_count>15</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 14:58:37 -0800</bug_when>
    <thetext>Eeek. That would be a rather large change, considering that there&apos;s also an IDL by the same name.

Can we instead just have MIMETypeString or something like it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110040</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-02-17 17:28:20 -0800</bug_when>
    <thetext>ContentType and rename to ContentTypeRegistry?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110044</commentid>
    <comment_count>17</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 19:41:29 -0800</bug_when>
    <thetext>anttik, you are awesome. See progress of this change in bug 23999.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27409</attachid>
            <date>2009-02-06 12:48:49 -0800</date>
            <delta_ts>2009-02-06 13:23:17 -0800</delta_ts>
            <desc>Prototype patch</desc>
            <filename>mac-only-prototype-patch.txt</filename>
            <type>text/plain</type>
            <size>48814</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDcyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDA5LTAyLTA2ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1ha2UgaXQgcG9zc2libGUgZm9yIGEgcGxhdGZvcm0gdG8gdXNlIG1vcmUgdGhhbiBvbmUg
bWVkaWEgZW5naW5lIGZvciA8dmlkZW8+IGFuZCA8YXVkaW8+CisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1l
dGVyRnJvbU1JTUVUeXBlKTogTmV3LCBmaW5kIGFuZCByZXR1cm4gYSBNSU1FIHR5cGUgcGFyYW1l
dGVyCisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpzdHJpcFBhcmFtZXRlcnNG
cm9tTUlNRVR5cGUpOiBOZXcsIHN0cmlwIGFsbCBwYXJhbWV0ZXJzIGZyb20gYSBNSU1FIHR5cGUK
KyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5Lmg6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllckZhY3Rvcnk6Ok1lZGlhUGxheWVyRmFjdG9yeSk6IE5ldywgZmFjdG9yeSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZE1lZGlhRW5naW5lcyk6IE5ldywgcmV0dXJu
cyB2ZWN0b3Igb2YgYWxsIGluc3RhbGxlZCBlbmdpbmVzLgorICAgICAgICAoV2ViQ29yZTo6YWRk
TWVkaWFFbmdpbmUpOiBOZXcsIGFkZCBhIG1lZGlhIGVuZ2luZSB0byB0aGUgY2FjaGUuCisgICAg
ICAgIChXZWJDb3JlOjpjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyk6IE5ldywgcmV0
dXJuIGFuIGVuZ2luZSB0aGF0IG1pZ2h0IHN1cHBvcnQgYSBNSU1FIHR5cGUuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6TWVkaWFQbGF5ZXIpOiBEb24ndCBjcmVhdGUgbV9wcml2YXRl
IGluIGNvbnN0cnVjdG9yIGFueSBtb3JlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6
On5NZWRpYVBsYXllcik6IAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmxvYWQpOiBU
YWtlIE1JTUUgdHlwZSBhcyB3ZWxsIGFzIHVybCwgc2luY2Ugd2UgbmVlZCBpdCB0byBmaW5kIHRo
ZSByaWdodAorICAgICAgICAgIG1lZGlhIGVuZ2luZS4gSWYgbm8gTUlNRSB0eXBlIGlzIHByb3Zp
ZGVkLCB0cnkgdG8gZGV2aW5lIG9uZSBmcm9tIHRoZSB1cmwuIENob29zZSBhIG1lZGlhIGVuZ2lu
ZQorICAgICAgICAgIGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllcjo6Y2FuY2VsTG9hZCk6IE5VTEwgY2hlY2sgbV9wcml2YXRlLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpwYXVzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6
OmR1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6Y3VycmVu
dFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzZWVrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6cGF1c2VkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2Vla2luZyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXI6Om5hdHVyYWxTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6aGFzVmlkZW8pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyOjpuZXR3b3JrU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyOjpyZWFkeVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
c2V0Vm9sdW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0UmF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmRhdGFSYXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0RW5kVGltZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1heFRpbWVCdWZmZXJlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1heFRpbWVTZWVrYWJsZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmJ5dGVzTG9hZGVkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dG90YWxCeXRlc0tub3duKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dG90YWxCeXRlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjpzZXRWaXNpYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllcjo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpz
dXBwb3J0c1R5cGUpOiBUYWtlIGNvZGVjcyBwYXJhbSBhcyB3ZWxsIGFzIE1JTUUgdHlwZS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6IEJ1aWxkIHVw
IGxpc3Qgb2YgTUlNRSB0eXBlcyBieSBjb25zdWx0aW5nIGFsbCBlbmdpbmVzLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKTogcmV0dXJuIHRydWUgaWYgYW55IG1l
ZGlhIGVuZ2luZSBpcyBpbnN0YWxsZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllcjo6ZnJhbWVWaWV3KTogYWNjZXNzb3IgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDogTmV3LCBkZWNsYXJlcyBhYnN0cmFj
dCBpbnRlcmZhY2UgZm9yIG1lZGlhIGVuZ2luZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2U6On5NZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp0b3RhbEJ5dGVzS25v
d24pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lmg6IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbTogCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6Y3JlYXRlKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0KTogQ29uc3RydWN0b3IgaXMgbm93IHByaXZhdGUsIG5lZWQgdG8gdXNlIGNyZWF0
ZSgpCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6fk1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0KTogY2hhbmdlZCBjbGFzcyBuYW1lIHRvIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRl
UVRNb3ZpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmNyZWF0ZVFUTW92aWVWaWV3KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZGV0YWNoUVRNb3ZpZVZpZXcpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkZXN0cm95
UVRWaWRlb1JlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6c2V0VXBWaWRlb1JlbmRlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVFRp
bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojps
b2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnBhdXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6ZHVyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjdXJyZW50VGltZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnNlZWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Ojpkb1NlZWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpjYW5jZWxTZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla1RpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRFbmRUaW1lKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRFbmRQb2lu
dFRpbWVySWZOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVraW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNpemUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpoYXNWaWRlbyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFZvbHVtZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpk
YXRhUmF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6Om1heFRpbWVCdWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVTZWVrYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVMb2FkZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpieXRlc0xvYWRlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRvdGFsQnl0ZXNL
bm93bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnRvdGFsQnl0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjYW5jZWxMb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6dXBkYXRlU3RhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bG9hZFN0YXRlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJhdGVDaGFuZ2VkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0aW1l
Q2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRpZEVuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnNldFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpzZXRWaXNpYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cmVwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpt
aW1lVHlwZUNhY2hlKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OmdldFN1cHBvcnRlZFR5cGVzKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdXBwb3J0
c1R5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
Ojppc0F2YWlsYWJsZSk6IGNoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVR
VEtpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkaXNhYmxl
VW5zdXBwb3J0ZWRUcmFja3MpOiBjaGFuZ2VkIGNsYXNzIG5hbWUgdG8gTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuCisgICAgICAgICgtW1dlYkNvcmVNb3ZpZU9ic2VydmVyIGluaXRXaXRoQ2FsbGJh
Y2s6XSk6IGNoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVEtpdC4KKwog
MjAwOS0wMi0wNiAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
IAkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRjBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCAqLzsgfTsKIAkJMDZF
ODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRDYwQUI1
RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovOyB9OwogCQkw
NkU4MUVFQzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRUIw
QUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLzsgfTsK
KwkJMDc5RjVFNEMwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5RjVFNEIwRjNCRUJF
QTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovOyB9OwogCQkwODAwODE5NjBFRDNC
MkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01M
QW5jaG9yRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MDA4MTk3MEVEM0IyREQwMEM1M0JDMCAvKiBX
TUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODAwODE5NTBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5oICov
OyB9OwogCQkwODA0QkY2RTBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDRCRjZDMEVFMDlD
M0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9OwpAQCAtNDkwNyw2ICs0OTA4LDcg
QEAKIAkJMDZFODFFRDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1
REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVk
aWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYz
QkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUZFNTkwMEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxB
bmNob3JFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUw
RUQzQjJERDAwQzUzQkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MQW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMwOTYsNiArMTMwOTgsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplSGFzaC5oICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBN
ZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlh
UGxheWVyLmggKi8sCisJCQkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAq
LywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERE
NDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApAQCAtMTY3
MTUsNiArMTY3MTgsNyBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2
aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzND
QjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OUY1RTRD
MEYzQkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsy
NzEsNyBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdSYXRlKCkKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTdHJpbmcgbWVk
aWFTcmM7CisgICAgU3RyaW5nIG1lZGlhTUlNRVR5cGU7CiAgICAgCiAgICAgLy8gMy4xNC45LjQu
IExvYWRpbmcgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzE4LDcgKzMxOSw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAg
ICAgLy8gNgotICAgIG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBwaWNr
TWVkaWEobWVkaWFNSU1FVHlwZSk7CiAgICAgaWYgKG1lZGlhU3JjLmlzRW1wdHkoKSkgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICBnb3RvIGVuZDsKQEAgLTM0MCw3
ICszNDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQoRXhjZXB0aW9uQ29kCiAgICAg
bV9wbGF5ZXIuY2xlYXIoKTsKICAgICBtX3BsYXllci5zZXQobmV3IE1lZGlhUGxheWVyKHRoaXMp
KTsKICAgICB1cGRhdGVWb2x1bWUoKTsKLSAgICBtX3BsYXllci0+bG9hZChtX2N1cnJlbnRTcmMp
OworICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVudFNyYywgbWVkaWFNSU1FVHlwZSk7CiAgICAg
aWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRlTG9hZEJlbG93TmVzdGluZ0xldmVs
KQogICAgICAgICBnb3RvIGVuZDsKICAgICAKQEAgLTgxMiw3ICs4MTMsNyBAQCBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmNhblBsYXkoKSBjb25zdAogICAgIHJldHVybiBwYXVzZWQoKSB8fCBlbmRl
ZCgpIHx8IG5ldHdvcmtTdGF0ZSgpIDwgTE9BREVEX01FVEFEQVRBOwogfQogCi1TdHJpbmcgSFRN
TE1lZGlhRWxlbWVudDo6cGlja01lZGlhKCkKK1N0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNr
TWVkaWEoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKQogewogICAgIC8vIDMuMTQuOS4yLiBMb2NhdGlv
biBvZiB0aGUgbWVkaWEgcmVzb3VyY2UKICAgICBTdHJpbmcgbWVkaWFTcmMgPSBnZXRBdHRyaWJ1
dGUoc3JjQXR0cik7CkBAIC04MzAsMTQgKzgzMSwzMSBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVu
dDo6cGlja01lZGlhKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZS0+aGFzQXR0cmlidXRlKHR5cGVBdHRyKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgdHlwZSA9IHNvdXJjZS0+dHlwZSgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgY29kZWNzID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJv
bU1JTUVUeXBlKHR5cGUsICJjb2RlY3MiKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNp
bXBsZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpzdHJpcFBhcmFtZXRlcnNGcm9tTUlNRVR5cGUo
dHlwZSk7CiAKKy8qCiAgICAgICAgICAgICAgICAgICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJh
bWV0ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbSBiZWZvcmUgY2hlY2tpbmcgd2l0
aCB0aGUgdHlwZSByZWdpc3RyeQogICAgICAgICAgICAgICAgICAgICBpbnQgc2VtaSA9IHR5cGUu
ZmluZCgnOycpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VtaSAhPSAtMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzZW1pICE9IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RhcnQgPSB0eXBlLmZpbmQoImNvZGVjcyIsIHNlbWkgKyAxLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA9IHR5cGUuZmluZCgnPScsIHN0YXJ0ICsgNik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBlbmQgPSB0eXBlLmZpbmQoJzsnLCBzdGFydCArIDYpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kICE9IC0xKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzID0gdHlwZS5zdWJzdHJpbmcoc3RhcnQgKyAx
LCBlbmQgLSAoc3RhcnQgKyAxKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCQkJdHlwZSA9IHR5
cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
Ki8KIAotICAgICAgICAgICAgICAgICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkTWVkaWFNSU1FVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFNZWRpYVBs
YXllcjo6c3VwcG9ydHNUeXBlKHNpbXBsZVR5cGUsIGNvZGVjcykpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0g
c2ltcGxlVHlwZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMg
PSBzb3VyY2UtPnNyYygpLnN0cmluZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAg
dm9pZCBjaGVja0lmU2Vla05lZWRlZCgpOwogICAgIAotICAgIFN0cmluZyBwaWNrTWVkaWEoKTsK
KyAgICBTdHJpbmcgcGlja01lZGlhKFN0cmluZyYgbWVkaWFNSU1FVHlwZSk7CiAgICAgdm9pZCB1
cGRhdGVWb2x1bWUoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIGZsb2F0IGVm
ZmVjdGl2ZVN0YXJ0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw0MyBAQCBTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0iOwogfQogCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJv
bU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVy
TmFtZSkKK3sKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN0cmlwV2hpdGVTcGFjZSgpOwor
ICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZTsKKworICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBoYXZl
IG9uZSBvciBtb3JlICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2VwYXJh
dGVkIGZyb20gZWFjaCBvdGhlciBieSBzZW1pLWNvbG9ucworICAgIGludCBzZW1pID0gdHlwZS5m
aW5kKCc7Jyk7CisgICAgaWYgKHNlbWkgIT0gLTEpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gdHlw
ZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7CisgICAgICAgIGlmIChzdGFy
dCAhPSAtMSkgeworICAgICAgICAgICAgc3RhcnQgPSB0eXBlLmZpbmQoJz0nLCBzdGFydCArIDYp
OworICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaW50IGVu
ZCA9IHR5cGUuZmluZCgnOycsIHN0YXJ0ICsgNik7CisgICAgICAgICAgICAgICAgaWYgKGVuZCAh
PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwgZW5kIC0g
KHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlOworfQorCitTdHJpbmcgTUlNRVR5
cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCit7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1pbWVUeXBlLnN0cmlwV2hpdGVT
cGFjZSgpOworCisgICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0ZXIgYSBzZW1p
LWNvbG9uLCBzdHJpcCB0aGVtCisgICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycp
OworICAgIGlmIChzZW1pICE9IC0xKQorICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJpcHBlZFR5
cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIHJldHVybiBzdHJpcHBlZFR5
cGU7Cit9CisKKworCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5
KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkocmV2aXNpb24gNDA2NzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiBnZXRFeHRlbnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBzdGF0
aWMgU3RyaW5nIGdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSk7CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldFBhcmFtZXRlckZyb21NSU1FVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOworCiAg
ICAgc3RhdGljIFN0cmluZyBnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsK
IAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVp
bmcgbG9hZGVkIGlubGluZSBhcyBhbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKQEAgLTQ3LDEwICs0OCw3MyBAQAogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IE1lZGlhUGxheWVyRmFjdG9yeSB7CisgICAgTWVkaWFQbGF5
ZXJGYWN0b3J5KE5ld01lZGlhRW5naW5lUGxheWVyIGN0b3IsIE1lZGlhRW5naW5lU3VwcG9ydGVk
VHlwZXMgZ2V0VHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZSkgCisg
ICAgICAgIDogY29uc3RydWN0b3IoY3RvcikKKyAgICAgICAgLCBnZXRTdXBwb3J0ZWRUeXBlcyhn
ZXRUeXBlcykKKyAgICAgICAgLCBzdXBwb3J0c1R5cGVBbmRDb2RlY3Moc3VwcG9ydHNUeXBlKSAg
eyB9OworCisgICAgTmV3TWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3I7CisgICAgTWVkaWFF
bmdpbmVTdXBwb3J0ZWRUeXBlcyBnZXRTdXBwb3J0ZWRUeXBlczsKKyAgICBNZWRpYUVuZ2luZVN1
cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGVBbmRDb2RlY3M7Cit9OworCitzdGF0aWMgdm9pZCBhZGRN
ZWRpYUVuZ2luZShOZXdNZWRpYUVuZ2luZVBsYXllciBjdG9yLCBNZWRpYUVuZ2luZVN1cHBvcnRl
ZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBzdXBwb3J0
c1R5cGUpOworc3RhdGljIE1lZGlhUGxheWVyRmFjdG9yeSAqY2hvb3NlQmVzdEVuZ2luZUZvclR5
cGVBbmRDb2RlY3MoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7Citz
dGF0aWMgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMo
KTsKKworc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgaW5zdGFsbGVkTWVkaWFF
bmdpbmVzKCkgCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8TWVkaWFQbGF5ZXJG
YWN0b3J5Kj4sIGluc3RhbGxlZEVuZ2luZXMsICgpKTsKKyAgICBzdGF0aWMgYm9vbCBlbmdpbmVz
UXVlcmllZCA9IGZhbHNlOworCisgICAgaWYgKCFlbmdpbmVzUXVlcmllZCkgeworICAgICAgICBl
bmdpbmVzUXVlcmllZCA9IHRydWU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7Cisj
ZWxzZQorICAgICAgICBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRk
TWVkaWFFbmdpbmUpOworI2VuZGlmCisgICAgfQogICAgIAotICAgIE1lZGlhUGxheWVyOjpNZWRp
YVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQorICAgIHJldHVybiBpbnN0YWxsZWRF
bmdpbmVzOworfQorCitzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShOZXdNZWRpYUVuZ2luZVBs
YXllciBjdG9yLCBNZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBN
ZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUpCit7CisgICAgQVNTRVJUKGN0b3Ip
OworICAgIEFTU0VSVChnZXRTdXBwb3J0ZWRUeXBlcyk7CisgICAgQVNTRVJUKHN1cHBvcnRzVHlw
ZSk7CisgICAgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkuYXBwZW5kKG5ldyBNZWRpYVBsYXllckZh
Y3RvcnkoY3RvciwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSkpOworfQorCitzdGF0
aWMgTWVkaWFQbGF5ZXJGYWN0b3J5ICpjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyhj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIFZlY3RvcjxN
ZWRpYVBsYXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOwor
CisgICAgaWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZl
Y3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBlbmdpbmVzLmJl
Z2luKCk7CisgICAgY29uc3QgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBlbmdpbmVzLmVuZCgpOworICAgIE1lZGlhUGxheWVyRmFjdG9yeSAqZW5naW5l
ID0gMDsKKyAgICBTdXBwb3J0ZWQgc3VwcG9ydGVkID0gSXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBm
b3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN1cHBvcnRlZCBlbmdpbmVTdXBwb3J0
ID0gKCppdCktPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOworICAgICAgICAK
KyAgICAgICAgaWYgKGVuZ2luZVN1cHBvcnQgPiBzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIHN1
cHBvcnRlZCA9IGVuZ2luZVN1cHBvcnQ7CisgICAgICAgICAgICBlbmdpbmUgPSAqaXQ7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW5naW5lOworfQorCitNZWRpYVBsYXllcjo6TWVk
aWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1fbWVkaWFQbGF5ZXJD
bGllbnQoY2xpZW50KQotICAgICwgbV9wcml2YXRlKG5ldyBNZWRpYVBsYXllclByaXZhdGUodGhp
cykpCiAgICAgLCBtX2ZyYW1lVmlldygwKQogICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAgICwg
bV9yYXRlKDEuMGYpCkBAIC02MCw2MiArMTI0LDc5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
TWVkaWFQbGF5ZXI6On5NZWRpYVBsYXllcigpCiB7Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQ
bGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7
Ci0gICAgbV9wcml2YXRlLT5sb2FkKHVybCk7CisgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUg
TUlNRSB0eXBlLCBzZWUgaWYgdGhlIHBhdGggY2FuIGhlbHAKKyAgICBTdHJpbmcgdHlwZSA9IG1p
bWVUeXBlLmlzRW1wdHkoKSA/IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1
cmwpIDogbWltZVR5cGU7CisgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6Omdl
dFBhcmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisKKyAgICBNZWRpYVBsYXll
ckZhY3RvcnkgKmVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUs
IGNvZGVjcyk7CisKKyAgICAvLyAgaWYgd2UgZGlkbid0IGZpbmQgYW4gZW5naW5lIHRoYXQgY2xh
aW1zIHRoZSBNSU1FIHR5cGUsIGp1c3QgdXNlIHRoZSBmaXJzdCBlbmdpbmUKKyAgICBpZiAoIWVu
Z2luZSkKKyAgICAgICAgZW5naW5lID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVzKClbMF07CisgICAg
CisgICAgaWYgKGVuZ2luZSkKKyAgICAgICAgbV9wcml2YXRlID0gZW5naW5lLT5jb25zdHJ1Y3Rv
cih0aGlzKTsKKworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+bG9hZCh1
cmwpOwogfSAgICAKIAogdm9pZCBNZWRpYVBsYXllcjo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgbV9w
cml2YXRlLT5jYW5jZWxMb2FkKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2
YXRlLT5jYW5jZWxMb2FkKCk7CiB9ICAgIAogCiB2b2lkIE1lZGlhUGxheWVyOjpwbGF5KCkKIHsK
LSAgICBtX3ByaXZhdGUtPnBsYXkoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3By
aXZhdGUtPnBsYXkoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6cGF1c2UoKQogewotICAgIG1f
cHJpdmF0ZS0+cGF1c2UoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUt
PnBhdXNlKCk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyOjpkdXJhdGlvbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/
IG1fcHJpdmF0ZS0+ZHVyYXRpb24oKSA6IDApOwogfQogCiBmbG9hdCBNZWRpYVBsYXllcjo6Y3Vy
cmVudFRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmN1cnJlbnRUaW1lKCk7
ICAKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+Y3VycmVudFRpbWUoKSA6IDAp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpzZWVrKGZsb2F0IHRpbWUpCiB7Ci0gICAgbV9wcml2
YXRlLT5zZWVrKHRpbWUpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+
c2Vlayh0aW1lKTsKIH0KIAogYm9vbCBNZWRpYVBsYXllcjo6cGF1c2VkKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5wYXVzZWQoKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1f
cHJpdmF0ZS0+cGF1c2VkKCkgOiBmYWxzZSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXI6OnNlZWtp
bmcoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPnNlZWtpbmcoKTsKKyAgICByZXR1
cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+c2Vla2luZygpIDogZmFsc2UpOwogfQogCiBJbnRT
aXplIE1lZGlhUGxheWVyOjpuYXR1cmFsU2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bmF0dXJhbFNpemUoKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+bmF0dXJh
bFNpemUoKSA6IEludFNpemUoMCwgMCkpOwogfQogCiBib29sIE1lZGlhUGxheWVyOjpoYXNWaWRl
bygpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzVmlkZW8oKTsKKyAgICByZXR1cm4gKG1f
cHJpdmF0ZSA/IG1fcHJpdmF0ZS0+aGFzVmlkZW8oKSA6IGZhbHNlKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllcjo6aW5NZWRpYURvY3VtZW50KCkKQEAgLTEyOCwxMiArMjA5LDEyIEBAIGJvb2wgTWVk
aWFQbGF5ZXI6OmluTWVkaWFEb2N1bWVudCgpCiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUg
TWVkaWFQbGF5ZXI6Om5ldHdvcmtTdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmV0
d29ya1N0YXRlKCk7CisgICAgcmV0dXJuIChtX3ByaXZhdGUgPyBtX3ByaXZhdGUtPm5ldHdvcmtT
dGF0ZSgpIDogRW1wdHkpOwogfQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXll
cjo6cmVhZHlTdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmVhZHlTdGF0ZSgpOwor
ICAgIHJldHVybiAobV9wcml2YXRlID8gbV9wcml2YXRlLT5yZWFkeVN0YXRlKCkgOiBEYXRhVW5h
dmFpbGFibGUpOwogfQogCiBmbG9hdCBNZWRpYVBsYXllcjo6dm9sdW1lKCkgY29uc3QKQEAgLTE0
NCw3ICsyMjUsOCBAQCBmbG9hdCBNZWRpYVBsYXllcjo6dm9sdW1lKCkgY29uc3QKIHZvaWQgTWVk
aWFQbGF5ZXI6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7CiAgICAgbV92b2x1bWUgPSB2b2x1
bWU7Ci0gICAgbV9wcml2YXRlLT5zZXRWb2x1bWUodm9sdW1lKTsgICAKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnNldFZvbHVtZSh2b2x1bWUpOyAgIAogfQogCiBmbG9h
dCBNZWRpYVBsYXllcjo6cmF0ZSgpIGNvbnN0CkBAIC0xNTUsNDggKzIzNyw1MSBAQCBmbG9hdCBN
ZWRpYVBsYXllcjo6cmF0ZSgpIGNvbnN0CiB2b2lkIE1lZGlhUGxheWVyOjpzZXRSYXRlKGZsb2F0
IHJhdGUpCiB7CiAgICAgbV9yYXRlID0gcmF0ZTsKLSAgICBtX3ByaXZhdGUtPnNldFJhdGUocmF0
ZSk7ICAgCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5zZXRSYXRlKHJh
dGUpOyAgIAogfQogCiBpbnQgTWVkaWFQbGF5ZXI6OmRhdGFSYXRlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5kYXRhUmF0ZSgpOworICAgIHJldHVybiAobV9wcml2YXRlID8gbV9w
cml2YXRlLT5kYXRhUmF0ZSgpIDogMCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OnNldEVuZFRp
bWUoZmxvYXQgdGltZSkKIHsKLSAgICBtX3ByaXZhdGUtPnNldEVuZFRpbWUodGltZSk7CisgICAg
aWYgKG1fcHJpdmF0ZSkgLy8geHh4eHh4CisgICAgICAgIG1fcHJpdmF0ZS0+c2V0RW5kVGltZSh0
aW1lKTsKIH0KIAogZmxvYXQgTWVkaWFQbGF5ZXI6Om1heFRpbWVCdWZmZXJlZCgpCiB7Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bWF4VGltZUJ1ZmZlcmVkKCk7CisgICAgcmV0dXJuIChtX3ByaXZh
dGUgPyBtX3ByaXZhdGUtPm1heFRpbWVCdWZmZXJlZCgpIDogMCk7CiB9CiAKIGZsb2F0IE1lZGlh
UGxheWVyOjptYXhUaW1lU2Vla2FibGUoKQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1heFRp
bWVTZWVrYWJsZSgpOworICAgIHJldHVybiAobV9wcml2YXRlID8gbV9wcml2YXRlLT5tYXhUaW1l
U2Vla2FibGUoKSA6IDApOwogfQogCiB1bnNpZ25lZCBNZWRpYVBsYXllcjo6Ynl0ZXNMb2FkZWQo
KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmJ5dGVzTG9hZGVkKCk7CisgICAgcmV0dXJuICht
X3ByaXZhdGUgPyBtX3ByaXZhdGUtPmJ5dGVzTG9hZGVkKCkgOiAwKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllcjo6dG90YWxCeXRlc0tub3duKCkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50b3Rh
bEJ5dGVzS25vd24oKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+dG90YWxC
eXRlc0tub3duKCkgOiBmYWxzZSk7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyOjp0b3RhbEJ5
dGVzKCkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50b3RhbEJ5dGVzKCk7CisgICAgcmV0dXJu
IChtX3ByaXZhdGUgPyBtX3ByaXZhdGUtPnRvdGFsQnl0ZXMoKSA6IDApOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAogeyAKICAgICBtX3JlY3QgPSBy
OwotICAgIG1fcHJpdmF0ZS0+c2V0UmVjdChyKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAg
ICBtX3ByaXZhdGUtPnNldFJlY3Qocik7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXI6OnZpc2libGUo
KSBjb25zdApAQCAtMjA3LDM1ICsyOTIsNDEgQEAgYm9vbCBNZWRpYVBsYXllcjo6dmlzaWJsZSgp
IGNvbnN0CiB2b2lkIE1lZGlhUGxheWVyOjpzZXRWaXNpYmxlKGJvb2wgYikKIHsKICAgICBtX3Zp
c2libGUgPSBiOwotICAgIG1fcHJpdmF0ZS0+c2V0VmlzaWJsZShiKTsKKyAgICBpZiAobV9wcml2
YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnNldFZpc2libGUoYik7CiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAg
ICBtX3ByaXZhdGUtPnBhaW50KHAsIHIpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1f
cHJpdmF0ZS0+cGFpbnQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCitTdXBwb3J0ZWQgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQogewotICAgIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlczsKLSAgICBnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7Ci0gICAgcmV0
dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZSh0eXBlKSAmJiB0
eXBlcy5jb250YWlucyh0eXBlKTsKKyAgICBNZWRpYVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IGNo
b29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CisKKyAgICBpZiAo
IWVuZ2luZSkKKyAgICAgICAgcmV0dXJuIElzTm90U3VwcG9ydGVkOworCisgICAgcmV0dXJuIGVu
Z2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CiB9CiAKIHZvaWQgTWVk
aWFQbGF5ZXI6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCiB7Ci0g
ICAgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7CisgICAgVmVj
dG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBlbmdpbmVzID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVz
KCk7CisgICAgaWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZW5naW5lcy5i
ZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gZW5naW5lcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAoKml0KS0+Z2V0U3VwcG9ydGVkVHlwZXModHlwZXMpOwogfSAKLSAgICAKKwogYm9v
bCBNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKQogewotICAgIHN0YXRpYyBib29sIGF2YWlsYWJp
dHlLbm93biA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlOwotICAgIGlmICgh
YXZhaWxhYml0eUtub3duKSB7Ci0gICAgICAgIGlzQXZhaWxhYmxlID0gTWVkaWFQbGF5ZXJQcml2
YXRlOjppc0F2YWlsYWJsZSgpOwotICAgICAgICBhdmFpbGFiaXR5S25vd24gPSB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gaXNBdmFpbGFibGU7CisgICAgcmV0dXJuICFpbnN0YWxsZWRNZWRpYUVu
Z2luZXMoKS5pc0VtcHR5KCk7CiB9IAogCiB2b2lkIE1lZGlhUGxheWVyOjpuZXR3b3JrU3RhdGVD
aGFuZ2VkKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJl
dmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKLWNs
YXNzIE1lZGlhUGxheWVyUHJpdmF0ZTsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZTsKIGNsYXNzIFN0cmluZzsKIAogY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQgewpAQCAtNTIsMTkg
KzUyLDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJSZXBhaW50KE1l
ZGlhUGxheWVyKikgeyB9CiB9OwogCitlbnVtIFN1cHBvcnRlZCB7IElzTm90U3VwcG9ydGVkLCBJ
c1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKKwogY2xhc3MgTWVkaWFQbGF5ZXIgOiBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqKTsK
ICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllcigpOwotICAgIAorCiAgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIFN1cHBvcnRlZCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGNvZGVjcyA9ICIiKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKICAgICAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCk7
CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0RnJhbWVWaWV3KEZyYW1l
VmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3OyB9CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQogICAgIGJvb2wgaW5NZWRp
YURvY3VtZW50KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBq
dXN0IGhhdmUgYSBnZXR0ZXIgYW5kIHNldHRlciBmb3Igc2l6ZS4KQEAgLTczLDcgKzc2LDcgQEAg
cHVibGljOgogICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAg
IHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAgICB2b2lkIGxvYWQoY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAgICAgCiAgICAgYm9v
bCB2aXNpYmxlKCkgY29uc3Q7CkBAIC0xMjIsMTEgKzEyNSwxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXBhaW50KCk7CiAgICAgCiBwcml2YXRlOgotICAgICAgICAKLSAgICBmcmllbmQgY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlOwotICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNZWRp
YUVuZ2luZXMoKTsKKwogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtX21lZGlhUGxheWVyQ2xpZW50
OwotICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbV9wcml2YXRlOworICAgIFJlZlB0cjxNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2U+IG1fcHJpdmF0ZTsKICAgICBGcmFtZVZpZXcqIG1fZnJhbWVW
aWV3OwogICAgIEludFJlY3QgbV9yZWN0OwogICAgIGJvb2wgbV92aXNpYmxlOwpAQCAtMTM0LDcg
KzEzNiwxNSBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fdm9sdW1lOwogfTsKIAordHlwZWRlZiBQ
YXNzUmVmUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gKCpOZXdNZWRpYUVuZ2luZVBs
YXllcikoTWVkaWFQbGF5ZXIgKnBsYXllcik7Cit0eXBlZGVmIHZvaWQgKCpNZWRpYUVuZ2luZVN1
cHBvcnRlZFR5cGVzKShIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKK3R5cGVkZWYgU3VwcG9ydGVk
ICgqTWVkaWFFbmdpbmVTdXBwb3J0c1R5cGUpKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBjb2RlY3MpOworCit0eXBlZGVmIHZvaWQgKCpNZWRpYUVuZ2luZVJlZ2lzdHJhcikoTmV3
TWVkaWFFbmdpbmVQbGF5ZXIgY3RvciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcyBnZXRUeXBl
cywgTWVkaWFFbmdpbmVTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKTsgCisKKwogfQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2NyBAQAorCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZV9oCisjZGVm
aW5lIE1lZGlhUGxheWVyUHJpdmF0ZV9oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2U+Cit7CitwdWJsaWM6CisJdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlKCkge307CisKKwl2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOwor
CXZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOworCQorCXZpcnR1YWwgdm9pZCBwbGF5KCkg
PSAwOworCXZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCisKKwl2aXJ0dWFsIEludFNpemUg
bmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CisKKwl2aXJ0dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25z
dCA9IDA7CisKKwl2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSA9IDA7CisKKwl2aXJ0dWFs
IGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgPSAwOworCisJdmlydHVhbCBmbG9hdCBjdXJyZW50VGlt
ZSgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCB0aW1lKSA9IDA7CisJdmly
dHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5k
VGltZShmbG9hdCB0aW1lKSA9IDA7CisKKwl2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJh
dGUpID0gMDsKKwl2aXJ0dWFsIGJvb2wgcGF1c2VkKCkgY29uc3QgPSAwOworCisJdmlydHVhbCB2
b2lkIHNldFZvbHVtZShmbG9hdCBpblZvbHVtZSkgPSAwOworCisgICAgdmlydHVhbCBNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CisKKwl2aXJ0
dWFsIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IG1heFRpbWVCdWZmZXJlZCgpIGNvbnN0ID0gMDsKKworCXZpcnR1YWwgaW50IGRhdGFSYXRlKCkg
Y29uc3QgPSAwOworCisJdmlydHVhbCBib29sIHRvdGFsQnl0ZXNLbm93bigpIGNvbnN0IHsgcmV0
dXJuIHRvdGFsQnl0ZXMoKSA+IDA7IH0KKwl2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBj
b25zdCA9IDA7CisJdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0ID0gMDsKKwor
CXZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpID0gMDsKKworCXZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwIDsKK307CisK
K30KKworI2VuZGlmCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhl
Y3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHJldmlzaW9uIDQwNjc1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogCi0j
aW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNTIs
MTAgKzUyLDEyIEBAIGNsYXNzIFdlYkNvcmVNb3ZpZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IE5vbmNvcHlhYmxlIHsKK2NsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSB7CiBwdWJsaWM6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7Ci0g
ICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZShN
ZWRpYVBsYXllciAqcGxheWVyKTsKKworICAgIH5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpOwog
ICAgIAogICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVv
KCkgY29uc3Q7CkBAIC0xMDEsOSArMTAzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICBzdGF0aWMgdm9pZCBn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgU3Vw
cG9ydGVkIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29k
ZWNzKTsKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogICAgIAogcHJpdmF0ZToKKyAg
ICBNZWRpYVBsYXllclByaXZhdGVRVEtpdChNZWRpYVBsYXllciopOworCiAgICAgdm9pZCBjcmVh
dGVRVE1vdmllKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIHNldFVwVmlkZW9SZW5kZXJp
bmcoKTsKICAgICB2b2lkIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKQEAgLTExNiw4ICsxMjEs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAgICAgdm9pZCBkb1NlZWso
KTsKICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJlZChUaW1l
cjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxN
ZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKTsKKyAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJlZChU
aW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKTsKICAgICBmbG9hdCBtYXhUaW1lTG9hZGVk
KCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogICAgIHZv
aWQgZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCk7
CkBAIC0xMjksOCArMTM0LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8V2ViQ29yZU1vdmll
T2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwogICAgIGZsb2F0IG1fc2Vla1RvOwogICAgIGZsb2F0
IG1fZW5kVGltZTsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fc2Vla1RpbWVyOwot
ICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9lbmRQb2ludFRpbWVyOworICAgIFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0PiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBs
YXllclByaXZhdGVRVEtpdD4gbV9lbmRQb2ludFRpbWVyOwogICAgIE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9y
ZWFkeVN0YXRlOwogICAgIGJvb2wgbV9zdGFydGVkUGxheWluZzsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
Lm1tCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTEgKzEyOCwx
MSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBAaW50ZXJmYWNlIFdlYkNvcmVNb3ZpZU9ic2Vy
dmVyIDogTlNPYmplY3QKIHsKLSAgICBNZWRpYVBsYXllclByaXZhdGUqIG1fY2FsbGJhY2s7Cisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqIG1fY2FsbGJhY2s7CiAgICAgTlNWaWV3KiBtX3Zp
ZXc7CiAgICAgQk9PTCBtX2RlbGF5Q2FsbGJhY2tzOwogfQotLShpZClpbml0V2l0aENhbGxiYWNr
OihNZWRpYVBsYXllclByaXZhdGUqKWNhbGxiYWNrOworLShpZClpbml0V2l0aENhbGxiYWNrOihN
ZWRpYVBsYXllclByaXZhdGVRVEtpdCopY2FsbGJhY2s7CiAtKHZvaWQpZGlzY29ubmVjdDsKIC0o
dm9pZClzZXRWaWV3OihOU1ZpZXcqKXZpZXc7CiAtKHZvaWQpcmVwYWludDsKQEAgLTE1NywxMyAr
MTU3LDI1IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBlbmRQb2ludFRpbWVySW50ZXJ2YWwKIHN0YXRp
YyBjb25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4z
CiAjZW5kaWYKIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikKKworUGFzc1JlZlB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGUoTWVkaWFQbGF5ZXIgKnBsYXllcikgCit7
IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQocGxheWVy
KSk7IAorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFi
bGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBv
cnRzVHlwZSk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVBsYXllclByaXZh
dGVRVEtpdChNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAg
ICwgbV9vYmpjT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlTW92aWVPYnNlcnZlciBhbGxvY10g
aW5pdFdpdGhDYWxsYmFjazp0aGlzXSkKICAgICAsIG1fc2Vla1RvKC0xKQogICAgICwgbV9lbmRU
aW1lKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKLSAgICAsIG1fc2Vla1RpbWVy
KHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQotICAgICwgbV9lbmRQ
b2ludFRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZCkK
KyAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla1Rp
bWVyRmlyZWQpCisgICAgLCBtX2VuZFBvaW50VGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkRhdGFVbmF2YWls
YWJsZSkKICAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCkBAIC0xNzcsNyArMTg5LDcgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTQogewogfQogCi1NZWRpYVBs
YXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6On5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpCiB7CiAgICAgdGVhckRvd25WaWRlb1JlbmRl
cmluZygpOwogCkBAIC0xODUsNyArMTk3LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlKAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBkaXNjb25uZWN0XTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWUoY29uc3QgU3RyaW5nJiB1
cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllKGNvbnN0IFN0
cmluZyYgdXJsKQogewogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCldOwogICAgIApAQCAtMjYxLDcgKzI3
Myw3IEBAIHN0YXRpYyBDbGFzcyBRVFZpZGVvUmVuZGVyZXJDbGFzcygpCiAgICAgIHJldHVybiBR
VFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5Q2xhc3M7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjcmVhdGVRVE1vdmllVmlldygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
cmVhdGVRVE1vdmllVmlldygpCiB7CiAgICAgZGV0YWNoUVRNb3ZpZVZpZXcoKTsKIApAQCAtMjc5
LDcgKzI5MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllVmkKIAog
ICAgIG1fcXRNb3ZpZVZpZXcuYWRvcHROUyhbW1FUTW92aWVWaWV3IGFsbG9jXSBpbml0XSk7CiAg
ICAgc2V0UmVjdChtX3BsYXllci0+cmVjdCgpKTsKLSAgICBOU1ZpZXcqIHBhcmVudFZpZXcgPSBt
X3BsYXllci0+bV9mcmFtZVZpZXctPmRvY3VtZW50VmlldygpOworICAgIE5TVmlldyogcGFyZW50
VmlldyA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgW3BhcmVu
dFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgpXTsKICNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBhIHB1YmxpYyBjYWxsIGluIFRpZ2Vy
LCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5CkBAIC0z
MDEsNyArMzEzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWVWaQog
ICAgICAgICB3a1FUTW92aWVWaWV3U2V0RHJhd1N5bmNocm9ub3VzbHkobV9xdE1vdmllVmlldy5n
ZXQoKSwgWUVTKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRldGFjaFFUTW92aWVW
aWV3KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVWaWV3KCkK
IHsKICAgICBpZiAobV9xdE1vdmllVmlldykgewogICAgICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0
KCkgc2V0VmlldzpuaWxdOwpAQCAtMzE2LDcgKzMyOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpkZXRhY2hRVE1vdmllVmkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y3JlYXRlUVRWaWRlb1JlbmRlcmVyKCkKIHsKICAgICBkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7
CiAKQEAgLTMzNCw3ICszNDYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRW
aWRlb1JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRlc3Ryb3lRVFZpZGVvUmVuZGVyZXIoKQogewogICAgIGlmICghbV9xdFZpZGVvUmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCw5ICszNjIsOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6ZGVzdHJveVFUVmlkZW9SCiAgICAgbV9xdFZpZGVvUmVuZGVyZXIgPSBuaWw7CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZpZGVvUmVuZGVyaW5nKCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQogewotICAgIGlm
ICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0TW92aWUpCisgICAgaWYgKCFtX3BsYXll
ci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAhUVRWaWRlb1JlbmRlcmVyQ2xhc3MoKSAp
CkBAIC0zNjEsNyArMzczLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlkZW9S
ZW5kZQogICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7CiAgICAgaWYgKG1fcXRNb3Zp
ZVZpZXcpCiAgICAgICAgIGRldGFjaFFUTW92aWVWaWV3KCk7CkBAIC0zNjksNyArMzgxLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZQogICAgICAgICBkZXN0cm95
UVRWaWRlb1JlbmRlcmVyKCk7CiB9CiAKLVFUVGltZSBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0
ZVFUVGltZShmbG9hdCB0aW1lKSBjb25zdAorUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpjcmVhdGVRVFRpbWUoZmxvYXQgdGltZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkK
ICAgICAgICAgcmV0dXJuIFFUTWFrZVRpbWUoMCwgNjAwKTsKQEAgLTM3Nyw3ICszODksNyBAQCBR
VFRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVFRpbWUoCiAgICAgcmV0dXJuIFFUTWFr
ZVRpbWUodGltZSAqIHRpbWVTY2FsZSwgdGltZVNjYWxlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0
ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMzk4LDcgKzQxMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVs
YXlDYWxsYmFja3M6Tk9dOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcXRNb3Zp
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDEyLDcgKzQyNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwbGF5KCkKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6cGF1c2UoKQogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm47CkBA
IC00MjYsNyArNDM4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKICAgICBt
X2VuZFBvaW50VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1
cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkdXJhdGlvbigp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDM2
LDcgKzQ0OCw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb24KICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRpbWUudGltZVZhbHVlKSAvIHRpbWUudGltZVNj
YWxlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QK
K2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDQ0LDcgKzQ1Niw3IEBA
IGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSAKICAgICByZXR1cm4gbWlu
KHN0YXRpY19jYXN0PGZsb2F0Pih0aW1lLnRpbWVWYWx1ZSkgLyB0aW1lLnRpbWVTY2FsZSwgbV9l
bmRUaW1lKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWsoZmxvYXQgdGltZSkKIHsKICAgICBj
YW5jZWxTZWVrKCk7CiAgICAgCkBAIC00NjEsNyArNDczLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNlZWsoZmxvYXQgdGltZQogICAgICAgICBtX3NlZWtUaW1lci5zdGFydCgwLCAwLjVm
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKCkgCiB7CiAgICAgUVRUaW1lIHF0dGltZSA9IGNyZWF0
ZVFUVGltZShtX3NlZWtUbyk7CiAgICAgLy8gc2V0Q3VycmVudFRpbWUgZ2VuZXJhdGVzIHNldmVy
YWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcwpAQCAtNDc3LDEzICs0ODksMTMg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAogICAgIFttX29iamNPYnNlcnZl
ci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNhbmNlbFNl
ZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9zZWVrVGltZXIuc3RvcCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrVGltZXJGaXJl
ZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKQogeyAgICAgICAgCiAgICAgaWYgKCFt
X3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGltZSgpID09IG1fc2Vla1RvKSB7CiAg
ICAgICAgIGNhbmNlbFNlZWsoKTsKQEAgLTUwNCwxOSArNTE2LDE5IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7CiAgICAgbV9lbmRUaW1lID0gdGltZTsKICAg
ICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChtX2VuZFRp
bWUgPCBkdXJhdGlvbigpICYmIG1fc3RhcnRlZFBsYXlpbmcgJiYgIW1fZW5kUG9pbnRUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX2VuZFBvaW50VGltZXIuc3RhcnRSZXBlYXRpbmcoZW5kUG9p
bnRUaW1lckludGVydmFsKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50
VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVR
VEtpdD4qKQogewogICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIApAQCAtNTI3
LDQyICs1MzksNDIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaQog
ICAgIH0KIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Citib29s
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQoKSBjb25zdAogewogICAgIGlmICghbV9x
dE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gW21fcXRNb3ZpZS5nZXQo
KSByYXRlXSA9PSAwOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNv
bnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVraW5nKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3Nl
ZWtUbyA+PSAwOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUo
KSBjb25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNpemUoKSBj
b25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwog
ICAgIHJldHVybiBJbnRTaXplKFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1v
dmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0pOwogfQogCi1ib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpR
VE1vdmllSGFzVmlkZW9BdHRyaWJ1dGVdIGJvb2xWYWx1ZV07CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0Vm9sdW1lOnZvbHVtZV07
ICAKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICBp
ZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDcgKzU4Miw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHIKICAgICAgICAgW21fcXRNb3ZpZS5n
ZXQoKSBzZXRSYXRlOnJhdGVdOwogfQogCi1pbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0
ZSgpIGNvbnN0CitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRhdGFSYXRlKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NzgsMjYgKzU5
MCwyNiBAQCBpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0CiB9CiAKIAot
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVCdWZmZXJlZCgpIGNvbnN0CiB7CiAgICAg
Ly8gcnRzcCBzdHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKICAgICByZXR1cm4gbV9pc1N0cmVhbWlu
ZyA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6
bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpt
YXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5z
IGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuIGlzaW5mKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVM
b2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkg
Y29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lTG9hZGVkKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IHdrUVRNb3ZpZU1heFRpbWVMb2FkZWQobV9xdE1vdmllLmdldCgpKTsgCiB9CiAKLXVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBmbG9hdCBkdXIg
PSBkdXJhdGlvbigpOwogICAgIGlmICghZHVyKQpAQCAtNjA1LDE5ICs2MTcsMTkgQEAgdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVybiB0b3RhbEJ5dGVz
KCkgKiBtYXhUaW1lTG9hZGVkKCkgLyBkdXI7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAgICByZXR1cm4gdG90YWxCeXRlcygpID4gMDsK
IH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFtbbV9xdE1v
dmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllRGF0YVNpemVBdHRyaWJ1dGVdIGludFZh
bHVlXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCgpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgdGhpcz8KICAgICBpZiAobV9uZXR3b3Jr
U3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBs
YXllcjo6TG9hZGVkKQpAQCAtNjI5LDcgKzY0MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjYW5jZWxMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp1
cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xk
UmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTY4MywyNyArNjk1LDI3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBzZXRVcFZpZGVvUmVuZGVy
aW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkU3RhdGVDaGFuZ2VkKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQoKQogewogICAg
IHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmF0ZUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmF0ZUNoYW5nZWQoKQogewogICAg
IHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2l6ZUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQoKQogewogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGltZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6dGltZUNoYW5nZWQoKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogICAg
IG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpZEVuZCgpCiB7CiAgICAg
bV9lbmRQb2ludFRpbWVyLnN0b3AoKTsKICAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7CkBA
IC03MTQsNyArNzI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCiAgICAg
bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSAKIHsgCiAgICAgaWYgKCFtX3F0TW92aWVWaWV3KSAK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRSZWN0KGNvbnN0IEkKICAgICB9ICAgCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRWaXNpYmxlKGJvb2wgYikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNl
dFZpc2libGUoYm9vbCBiKQogewogICAgIGlmIChtX3Zpc2libGUgIT0gYikgewogICAgICAgICBt
X3Zpc2libGUgPSBiOwpAQCAtNzQzLDcgKzc1NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZXRWaXNpYmxlKGJvb2wKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpy
ZXBhaW50KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlcGFpbnQoKQogewogI2lm
IERSQVdfRlJBTUVfUkFURQogICAgIGlmIChtX3N0YXJ0ZWRQbGF5aW5nKSB7CkBAIC03NTcsNyAr
NzY5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQogICAgIG1fcGxheWVy
LT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNzg3LDcgKzc5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChH
cmFwaGljc0MKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICAvLyBEcmF3IHRoZSBmcmFtZSByYXRl
IG9ubHkgYWZ0ZXIgaGF2aW5nIHBsYXllZCBtb3JlIHRoYW4gMTAgZnJhbWVzLgogICAgIGlmICht
X2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPiAxMCkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBt
X3BsYXllci0+bV9mcmFtZVZpZXcgPyBtX3BsYXllci0+bV9mcmFtZVZpZXctPmZyYW1lKCkgOiBO
VUxMOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3Bs
YXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiBOVUxMOwogICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogTlVMTDsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPnJlbmRlcmVyKCkgOiBOVUxM
OwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyID8gcmVuZGVyZXIt
PnN0eWxlKCkgOiBOVUxMOwpAQCAtODEzLDIzICs4MjUsNDMgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50KEdyYXBoaWNzQwogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxh
eUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBt
aW1lVHlwZUNhY2hlKCkKIHsKLSAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3ZpZSBtb3Zp
ZUZpbGVUeXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107Ci0gICAgaW50IGNvdW50ID0gW2ZpbGVU
eXBlcyBjb3VudF07Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAg
ICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KFtmaWxl
VHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFn
Q2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7Ci0gICAgICAgIGlmICghdXRpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWlt
ZShBZG9wdENGLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aS5nZXQoKSwga1VU
VGFnQ2xhc3NNSU1FVHlwZSkpOwotICAgICAgICBpZiAoIW1pbWUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdHlwZXMuYWRkKG1pbWUuZ2V0KCkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVM
aXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkg
eworICAgICAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3ZpZSBtb3ZpZUZpbGVUeXBlczpR
VEluY2x1ZGVDb21tb25UeXBlc107CisgICAgICAgIGludCBjb3VudCA9IFtmaWxlVHlwZXMgY291
bnRdOworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKyAgICAgICAg
ICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KFtmaWxl
VHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHV0aShBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtV
VFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dCwgTlVMTCkpOworICAgICAgICAgICAgaWYg
KCF1dGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG1pbWUoQWRvcHRDRiwgVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFz
cyh1dGkuZ2V0KCksIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKKyAgICAgICAgICAgIGlmICghbWlt
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhY2hlLmFkZChtaW1l
LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsK
ICAgICB9Ci19IAogICAgIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkK
KyAgICByZXR1cm4gY2FjaGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5cGVzID0g
bWltZVR5cGVDYWNoZSgpOworfSAKKworU3VwcG9ydGVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykK
K3sKKyAgICAvLyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVj
cyBwYXJhbWV0ZXIgZm9yIG5vdworICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMo
dHlwZSkgPyAoY29kZWNzICYmICFjb2RlY3MuaXNFbXB0eSgpID8gTWF5QmVTdXBwb3J0ZWQgOiBJ
c1N1cHBvcnRlZCkgOiBJc05vdFN1cHBvcnRlZDsKK30KKworCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Ojppc0F2YWlsYWJsZSgpCiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAg
ICBTSW50MzIgdmVyc2lvbjsKQEAgLTg1MCw3ICs4ODIsNyBAQCBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZTo6aXNBdmFpbGFibGUoKQogI2VuZGlmCiB9CiAgICAgCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3Vu
dCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNr
cyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFtX3F0TW92aWUpIHsK
ICAgICAgICAgZW5hYmxlZFRyYWNrQ291bnQgPSAwOwpAQCAtOTM5LDcgKzk3MSw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpkaXNhYmxlVW5zdXBwb3IKIAogQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVNb3ZpZU9ic2VydmVyCiAKLS0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVy
UHJpdmF0ZSAqKWNhbGxiYWNrCistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclBy
aXZhdGVRVEtpdCAqKWNhbGxiYWNrCiB7CiAgICAgbV9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAg
IHJldHVybiBbc3VwZXIgaW5pdF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27414</attachid>
            <date>2009-02-06 13:23:17 -0800</date>
            <delta_ts>2009-02-07 10:51:19 -0800</delta_ts>
            <desc>patch cleaned up a bit</desc>
            <filename>mac-only-prototype-patch.txt</filename>
            <type>text/plain</type>
            <size>48193</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDcyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDA5LTAyLTA2ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1ha2UgaXQgcG9zc2libGUgZm9yIGEgcGxhdGZvcm0gdG8gdXNlIG1vcmUgdGhhbiBvbmUg
bWVkaWEgZW5naW5lIGZvciA8dmlkZW8+IGFuZCA8YXVkaW8+CisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGlja01lZGlhKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1l
dGVyRnJvbU1JTUVUeXBlKTogTmV3LCBmaW5kIGFuZCByZXR1cm4gYSBNSU1FIHR5cGUgcGFyYW1l
dGVyCisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpzdHJpcFBhcmFtZXRlcnNG
cm9tTUlNRVR5cGUpOiBOZXcsIHN0cmlwIGFsbCBwYXJhbWV0ZXJzIGZyb20gYSBNSU1FIHR5cGUK
KyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5Lmg6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllckZhY3Rvcnk6Ok1lZGlhUGxheWVyRmFjdG9yeSk6IE5ldywgZmFjdG9yeSBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKFdlYkNvcmU6Omluc3RhbGxlZE1lZGlhRW5naW5lcyk6IE5ldywgcmV0dXJu
cyB2ZWN0b3Igb2YgYWxsIGluc3RhbGxlZCBlbmdpbmVzLgorICAgICAgICAoV2ViQ29yZTo6YWRk
TWVkaWFFbmdpbmUpOiBOZXcsIGFkZCBhIG1lZGlhIGVuZ2luZSB0byB0aGUgY2FjaGUuCisgICAg
ICAgIChXZWJDb3JlOjpjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyk6IE5ldywgcmV0
dXJuIGFuIGVuZ2luZSB0aGF0IG1pZ2h0IHN1cHBvcnQgYSBNSU1FIHR5cGUuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6TWVkaWFQbGF5ZXIpOiBEb24ndCBjcmVhdGUgbV9wcml2YXRl
IGluIGNvbnN0cnVjdG9yIGFueSBtb3JlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6
On5NZWRpYVBsYXllcik6IAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmxvYWQpOiBU
YWtlIE1JTUUgdHlwZSBhcyB3ZWxsIGFzIHVybCwgc2luY2Ugd2UgbmVlZCBpdCB0byBmaW5kIHRo
ZSByaWdodAorICAgICAgICAgIG1lZGlhIGVuZ2luZS4gSWYgbm8gTUlNRSB0eXBlIGlzIHByb3Zp
ZGVkLCB0cnkgdG8gZGV2aW5lIG9uZSBmcm9tIHRoZSB1cmwuIENob29zZSBhIG1lZGlhIGVuZ2lu
ZQorICAgICAgICAgIGJhc2VkIG9uIHRoZSBNSU1FIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllcjo6Y2FuY2VsTG9hZCk6IE5VTEwgY2hlY2sgbV9wcml2YXRlLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyOjpwYXVzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6
OmR1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6Y3VycmVu
dFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzZWVrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6cGF1c2VkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2Vla2luZyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXI6Om5hdHVyYWxTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllcjo6aGFzVmlkZW8pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyOjpuZXR3b3JrU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyOjpyZWFkeVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
c2V0Vm9sdW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0UmF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmRhdGFSYXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0RW5kVGltZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1heFRpbWVCdWZmZXJlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Om1heFRpbWVTZWVrYWJsZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmJ5dGVzTG9hZGVkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dG90YWxCeXRlc0tub3duKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6dG90YWxCeXRlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OnNldFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjpzZXRWaXNpYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllcjo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpz
dXBwb3J0c1R5cGUpOiBUYWtlIGNvZGVjcyBwYXJhbSBhcyB3ZWxsIGFzIE1JTUUgdHlwZS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6IEJ1aWxkIHVw
IGxpc3Qgb2YgTUlNRSB0eXBlcyBieSBjb25zdWx0aW5nIGFsbCBlbmdpbmVzLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKTogcmV0dXJuIHRydWUgaWYgYW55IG1l
ZGlhIGVuZ2luZSBpcyBpbnN0YWxsZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllcjo6ZnJhbWVWaWV3KTogYWNjZXNzb3IgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDogTmV3LCBkZWNsYXJlcyBhYnN0cmFj
dCBpbnRlcmZhY2UgZm9yIG1lZGlhIGVuZ2luZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2U6On5NZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp0b3RhbEJ5dGVzS25v
d24pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lmg6IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbTogCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6Y3JlYXRlKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0KTogQ29uc3RydWN0b3IgaXMgbm93IHByaXZhdGUsIG5lZWQgdG8gdXNlIGNyZWF0
ZSgpCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6fk1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0KTogY2hhbmdlZCBjbGFzcyBuYW1lIHRvIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRl
UVRNb3ZpZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmNyZWF0ZVFUTW92aWVWaWV3KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZGV0YWNoUVRNb3ZpZVZpZXcpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkZXN0cm95
UVRWaWRlb1JlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6c2V0VXBWaWRlb1JlbmRlcmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVFRp
bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojps
b2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cGxheSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnBhdXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6ZHVyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjdXJyZW50VGltZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnNlZWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Ojpkb1NlZWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpjYW5jZWxTZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla1RpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRFbmRUaW1lKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRFbmRQb2lu
dFRpbWVySWZOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVraW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNpemUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpoYXNWaWRlbyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFZvbHVtZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpk
YXRhUmF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6Om1heFRpbWVCdWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVTZWVrYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVMb2FkZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpieXRlc0xvYWRlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRvdGFsQnl0ZXNL
bm93bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OnRvdGFsQnl0ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjYW5jZWxMb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6dXBkYXRlU3RhdGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bG9hZFN0YXRlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJhdGVDaGFuZ2VkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0aW1l
Q2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRpZEVuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnNldFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpzZXRWaXNpYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cmVwYWludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpt
aW1lVHlwZUNhY2hlKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OmdldFN1cHBvcnRlZFR5cGVzKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdXBwb3J0
c1R5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
Ojppc0F2YWlsYWJsZSk6IGNoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVR
VEtpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkaXNhYmxl
VW5zdXBwb3J0ZWRUcmFja3MpOiBjaGFuZ2VkIGNsYXNzIG5hbWUgdG8gTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuCisgICAgICAgICgtW1dlYkNvcmVNb3ZpZU9ic2VydmVyIGluaXRXaXRoQ2FsbGJh
Y2s6XSk6IGNoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVEtpdC4KKwog
MjAwOS0wMi0wNiAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
IAkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRjBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCAqLzsgfTsKIAkJMDZF
ODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRDYwQUI1
RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovOyB9OwogCQkw
NkU4MUVFQzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRUIw
QUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLzsgfTsK
KwkJMDc5RjVFNEMwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5RjVFNEIwRjNCRUJF
QTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovOyB9OwogCQkwODAwODE5NjBFRDNC
MkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01M
QW5jaG9yRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MDA4MTk3MEVEM0IyREQwMEM1M0JDMCAvKiBX
TUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODAwODE5NTBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5oICov
OyB9OwogCQkwODA0QkY2RTBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDRCRjZDMEVFMDlD
M0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9OwpAQCAtNDkwNyw2ICs0OTA4LDcg
QEAKIAkJMDZFODFFRDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1
REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVk
aWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYz
QkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUZFNTkwMEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxB
bmNob3JFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUw
RUQzQjJERDAwQzUzQkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MQW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMwOTYsNiArMTMwOTgsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplSGFzaC5oICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBN
ZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlh
UGxheWVyLmggKi8sCisJCQkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAq
LywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERE
NDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApAQCAtMTY3
MTUsNiArMTY3MTgsNyBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2
aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzND
QjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OUY1RTRD
MEYzQkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsy
NzEsNyBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdSYXRlKCkKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTdHJpbmcgbWVk
aWFTcmM7CisgICAgU3RyaW5nIG1lZGlhTUlNRVR5cGU7CiAgICAgCiAgICAgLy8gMy4xNC45LjQu
IExvYWRpbmcgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzE4LDcgKzMxOSw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAg
ICAgLy8gNgotICAgIG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBwaWNr
TWVkaWEobWVkaWFNSU1FVHlwZSk7CiAgICAgaWYgKG1lZGlhU3JjLmlzRW1wdHkoKSkgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICBnb3RvIGVuZDsKQEAgLTM0MCw3
ICszNDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQoRXhjZXB0aW9uQ29kCiAgICAg
bV9wbGF5ZXIuY2xlYXIoKTsKICAgICBtX3BsYXllci5zZXQobmV3IE1lZGlhUGxheWVyKHRoaXMp
KTsKICAgICB1cGRhdGVWb2x1bWUoKTsKLSAgICBtX3BsYXllci0+bG9hZChtX2N1cnJlbnRTcmMp
OworICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVudFNyYywgbWVkaWFNSU1FVHlwZSk7CiAgICAg
aWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRlTG9hZEJlbG93TmVzdGluZ0xldmVs
KQogICAgICAgICBnb3RvIGVuZDsKICAgICAKQEAgLTgxMiw3ICs4MTMsNyBAQCBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmNhblBsYXkoKSBjb25zdAogICAgIHJldHVybiBwYXVzZWQoKSB8fCBlbmRl
ZCgpIHx8IG5ldHdvcmtTdGF0ZSgpIDwgTE9BREVEX01FVEFEQVRBOwogfQogCi1TdHJpbmcgSFRN
TE1lZGlhRWxlbWVudDo6cGlja01lZGlhKCkKK1N0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNr
TWVkaWEoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKQogewogICAgIC8vIDMuMTQuOS4yLiBMb2NhdGlv
biBvZiB0aGUgbWVkaWEgcmVzb3VyY2UKICAgICBTdHJpbmcgbWVkaWFTcmMgPSBnZXRBdHRyaWJ1
dGUoc3JjQXR0cik7CkBAIC04MzAsMTQgKzgzMSwxMyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVu
dDo6cGlja01lZGlhKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHNv
dXJjZS0+aGFzQXR0cmlidXRlKHR5cGVBdHRyKSkgewogICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgdHlwZSA9IHNvdXJjZS0+dHlwZSgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgY29kZWNzID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJv
bU1JTUVUeXBlKHR5cGUsICJjb2RlY3MiKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNp
bXBsZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpzdHJpcFBhcmFtZXRlcnNGcm9tTUlNRVR5cGUo
dHlwZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRl
cnMgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBzdHJpcCB0aGVtIGJlZm9yZSBjaGVja2luZyB3aXRoIHRo
ZSB0eXBlIHJlZ2lzdHJ5Ci0gICAgICAgICAgICAgICAgICAgIGludCBzZW1pID0gdHlwZS5maW5k
KCc7Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZW1pICE9IC0xKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IHR5cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVk
aWFNSU1FVHlwZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFNZWRpYVBsYXllcjo6
c3VwcG9ydHNUeXBlKHNpbXBsZVR5cGUsIGNvZGVjcykpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gc2ltcGxl
VHlwZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3Vy
Y2UtPnNyYygpLnN0cmluZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBj
aGVja0lmU2Vla05lZWRlZCgpOwogICAgIAotICAgIFN0cmluZyBwaWNrTWVkaWEoKTsKKyAgICBT
dHJpbmcgcGlja01lZGlhKFN0cmluZyYgbWVkaWFNSU1FVHlwZSk7CiAgICAgdm9pZCB1cGRhdGVW
b2x1bWUoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIGZsb2F0IGVmZmVjdGl2
ZVN0YXJ0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw0MyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JQCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0iOwogfQogCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJvbU1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSkK
K3sKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIFN0
cmluZyBwYXJhbWV0ZXJWYWx1ZTsKKworICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBoYXZlIG9uZSBv
ciBtb3JlICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2VwYXJhdGVkIGZy
b20gZWFjaCBvdGhlciBieSBzZW1pLWNvbG9ucworICAgIGludCBzZW1pID0gdHlwZS5maW5kKCc7
Jyk7CisgICAgaWYgKHNlbWkgIT0gLTEpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gdHlwZS5maW5k
KHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7CisgICAgICAgIGlmIChzdGFydCAhPSAt
MSkgeworICAgICAgICAgICAgc3RhcnQgPSB0eXBlLmZpbmQoJz0nLCBzdGFydCArIDYpOworICAg
ICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaW50IGVuZCA9IHR5
cGUuZmluZCgnOycsIHN0YXJ0ICsgNik7CisgICAgICAgICAgICAgICAgaWYgKGVuZCAhPSAtMSkK
KyAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJWYWx1ZSA9IHR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwgZW5kIC0gKHN0YXJ0
ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlOworfQorCitTdHJpbmcgTUlNRVR5cGVSZWdp
c3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1pbWVUeXBlLnN0cmlwV2hpdGVTcGFjZSgp
OworCisgICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0ZXIgYSBzZW1pLWNvbG9u
LCBzdHJpcCB0aGVtCisgICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycpOworICAg
IGlmIChzZW1pICE9IC0xKQorICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJpcHBlZFR5cGUubGVm
dChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIHJldHVybiBzdHJpcHBlZFR5cGU7Cit9
CisKKworCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkocmV2aXNpb24gNDA2NzUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVGb3JFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBleHQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBnZXRF
eHRlbnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBzdGF0aWMgU3Ry
aW5nIGdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7
CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldFBhcmFtZXRlckZyb21NSU1FVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyKTsKKyAgICBzdGF0aWMgU3RyaW5nIHN0
cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOworCiAgICAgc3Rh
dGljIFN0cmluZyBnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAg
IC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcgbG9h
ZGVkIGlubGluZSBhcyBhbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKQEAgLTQ3LDEwICs0OCw3MyBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IE1lZGlhUGxheWVyRmFjdG9yeSB7CisgICAgTWVkaWFQbGF5ZXJGYWN0
b3J5KE5ld01lZGlhRW5naW5lUGxheWVyIGN0b3IsIE1lZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMg
Z2V0VHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZSkgCisgICAgICAg
IDogY29uc3RydWN0b3IoY3RvcikKKyAgICAgICAgLCBnZXRTdXBwb3J0ZWRUeXBlcyhnZXRUeXBl
cykKKyAgICAgICAgLCBzdXBwb3J0c1R5cGVBbmRDb2RlY3Moc3VwcG9ydHNUeXBlKSAgeyB9Owor
CisgICAgTmV3TWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3I7CisgICAgTWVkaWFFbmdpbmVT
dXBwb3J0ZWRUeXBlcyBnZXRTdXBwb3J0ZWRUeXBlczsKKyAgICBNZWRpYUVuZ2luZVN1cHBvcnRz
VHlwZSBzdXBwb3J0c1R5cGVBbmRDb2RlY3M7Cit9OworCitzdGF0aWMgdm9pZCBhZGRNZWRpYUVu
Z2luZShOZXdNZWRpYUVuZ2luZVBsYXllciBjdG9yLCBNZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVz
IGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUp
Oworc3RhdGljIE1lZGlhUGxheWVyRmFjdG9yeSAqY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRD
b2RlY3MoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CitzdGF0aWMg
VmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKTsKKwor
c3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgaW5zdGFsbGVkTWVkaWFFbmdpbmVz
KCkgCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5
Kj4sIGluc3RhbGxlZEVuZ2luZXMsICgpKTsKKyAgICBzdGF0aWMgYm9vbCBlbmdpbmVzUXVlcmll
ZCA9IGZhbHNlOworCisgICAgaWYgKCFlbmdpbmVzUXVlcmllZCkgeworICAgICAgICBlbmdpbmVz
UXVlcmllZCA9IHRydWU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZWxzZQor
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFF
bmdpbmUpOworI2VuZGlmCisgICAgfQogICAgIAotICAgIE1lZGlhUGxheWVyOjpNZWRpYVBsYXll
cihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQorICAgIHJldHVybiBpbnN0YWxsZWRFbmdpbmVz
OworfQorCitzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShOZXdNZWRpYUVuZ2luZVBsYXllciBj
dG9yLCBNZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVu
Z2luZVN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUpCit7CisgICAgQVNTRVJUKGN0b3IpOworICAg
IEFTU0VSVChnZXRTdXBwb3J0ZWRUeXBlcyk7CisgICAgQVNTRVJUKHN1cHBvcnRzVHlwZSk7Cisg
ICAgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkuYXBwZW5kKG5ldyBNZWRpYVBsYXllckZhY3Rvcnko
Y3RvciwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSkpOworfQorCitzdGF0aWMgTWVk
aWFQbGF5ZXJGYWN0b3J5ICpjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyhjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIFZlY3RvcjxNZWRpYVBs
YXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOworCisgICAg
aWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFZlY3RvcjxN
ZWRpYVBsYXllckZhY3RvcnkqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBlbmdpbmVzLmJlZ2luKCk7
CisgICAgY29uc3QgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBlbmdpbmVzLmVuZCgpOworICAgIE1lZGlhUGxheWVyRmFjdG9yeSAqZW5naW5lID0gMDsK
KyAgICBTdXBwb3J0ZWQgc3VwcG9ydGVkID0gSXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN1cHBvcnRlZCBlbmdpbmVTdXBwb3J0ID0gKCpp
dCktPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGVuZ2luZVN1cHBvcnQgPiBzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIHN1cHBvcnRl
ZCA9IGVuZ2luZVN1cHBvcnQ7CisgICAgICAgICAgICBlbmdpbmUgPSAqaXQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZW5naW5lOworfQorCitNZWRpYVBsYXllcjo6TWVkaWFQbGF5
ZXIoTWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1fbWVkaWFQbGF5ZXJDbGllbnQo
Y2xpZW50KQotICAgICwgbV9wcml2YXRlKG5ldyBNZWRpYVBsYXllclByaXZhdGUodGhpcykpCiAg
ICAgLCBtX2ZyYW1lVmlldygwKQogICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAgICwgbV9yYXRl
KDEuMGYpCkBAIC02MCw2MiArMTI0LDc5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWVkaWFQ
bGF5ZXI6On5NZWRpYVBsYXllcigpCiB7Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXI6
OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAg
bV9wcml2YXRlLT5sb2FkKHVybCk7CisgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUgTUlNRSB0
eXBlLCBzZWUgaWYgdGhlIHBhdGggY2FuIGhlbHAKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBl
LmlzRW1wdHkoKSA/IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1cmwpIDog
bWltZVR5cGU7CisgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFt
ZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisKKyAgICBNZWRpYVBsYXllckZhY3Rv
cnkgKmVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVj
cyk7CisKKyAgICAvLyAgaWYgd2UgZGlkbid0IGZpbmQgYW4gZW5naW5lIHRoYXQgY2xhaW1zIHRo
ZSBNSU1FIHR5cGUsIGp1c3QgdXNlIHRoZSBmaXJzdCBlbmdpbmUKKyAgICBpZiAoIWVuZ2luZSkK
KyAgICAgICAgZW5naW5lID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVzKClbMF07CisgICAgCisgICAg
aWYgKGVuZ2luZSkKKyAgICAgICAgbV9wcml2YXRlID0gZW5naW5lLT5jb25zdHJ1Y3Rvcih0aGlz
KTsKKworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+bG9hZCh1cmwpOwog
fSAgICAKIAogdm9pZCBNZWRpYVBsYXllcjo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgbV9wcml2YXRl
LT5jYW5jZWxMb2FkKCk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5j
YW5jZWxMb2FkKCk7CiB9ICAgIAogCiB2b2lkIE1lZGlhUGxheWVyOjpwbGF5KCkKIHsKLSAgICBt
X3ByaXZhdGUtPnBsYXkoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUt
PnBsYXkoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6cGF1c2UoKQogewotICAgIG1fcHJpdmF0
ZS0+cGF1c2UoKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPnBhdXNl
KCk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyOjpkdXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJp
dmF0ZS0+ZHVyYXRpb24oKSA6IDApOwogfQogCiBmbG9hdCBNZWRpYVBsYXllcjo6Y3VycmVudFRp
bWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmN1cnJlbnRUaW1lKCk7ICAKKyAg
ICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+Y3VycmVudFRpbWUoKSA6IDApOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyOjpzZWVrKGZsb2F0IHRpbWUpCiB7Ci0gICAgbV9wcml2YXRlLT5z
ZWVrKHRpbWUpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+c2Vlayh0
aW1lKTsKIH0KIAogYm9vbCBNZWRpYVBsYXllcjo6cGF1c2VkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5wYXVzZWQoKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0
ZS0+cGF1c2VkKCkgOiBmYWxzZSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXI6OnNlZWtpbmcoKSBj
b25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPnNlZWtpbmcoKTsKKyAgICByZXR1cm4gKG1f
cHJpdmF0ZSA/IG1fcHJpdmF0ZS0+c2Vla2luZygpIDogZmFsc2UpOwogfQogCiBJbnRTaXplIE1l
ZGlhUGxheWVyOjpuYXR1cmFsU2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmF0dXJh
bFNpemUoKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+bmF0dXJhbFNpemUo
KSA6IEludFNpemUoMCwgMCkpOwogfQogCiBib29sIE1lZGlhUGxheWVyOjpoYXNWaWRlbygpCiB7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzVmlkZW8oKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0
ZSA/IG1fcHJpdmF0ZS0+aGFzVmlkZW8oKSA6IGZhbHNlKTsKIH0KIAogYm9vbCBNZWRpYVBsYXll
cjo6aW5NZWRpYURvY3VtZW50KCkKQEAgLTEyOCwxMiArMjA5LDEyIEBAIGJvb2wgTWVkaWFQbGF5
ZXI6OmluTWVkaWFEb2N1bWVudCgpCiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQ
bGF5ZXI6Om5ldHdvcmtTdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmV0d29ya1N0
YXRlKCk7CisgICAgcmV0dXJuIChtX3ByaXZhdGUgPyBtX3ByaXZhdGUtPm5ldHdvcmtTdGF0ZSgp
IDogRW1wdHkpOwogfQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllcjo6cmVh
ZHlTdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cmVhZHlTdGF0ZSgpOworICAgIHJl
dHVybiAobV9wcml2YXRlID8gbV9wcml2YXRlLT5yZWFkeVN0YXRlKCkgOiBEYXRhVW5hdmFpbGFi
bGUpOwogfQogCiBmbG9hdCBNZWRpYVBsYXllcjo6dm9sdW1lKCkgY29uc3QKQEAgLTE0NCw3ICsy
MjUsOCBAQCBmbG9hdCBNZWRpYVBsYXllcjo6dm9sdW1lKCkgY29uc3QKIHZvaWQgTWVkaWFQbGF5
ZXI6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCiB7CiAgICAgbV92b2x1bWUgPSB2b2x1bWU7Ci0g
ICAgbV9wcml2YXRlLT5zZXRWb2x1bWUodm9sdW1lKTsgICAKKyAgICBpZiAobV9wcml2YXRlKQor
ICAgICAgICBtX3ByaXZhdGUtPnNldFZvbHVtZSh2b2x1bWUpOyAgIAogfQogCiBmbG9hdCBNZWRp
YVBsYXllcjo6cmF0ZSgpIGNvbnN0CkBAIC0xNTUsNDggKzIzNyw1MSBAQCBmbG9hdCBNZWRpYVBs
YXllcjo6cmF0ZSgpIGNvbnN0CiB2b2lkIE1lZGlhUGxheWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUp
CiB7CiAgICAgbV9yYXRlID0gcmF0ZTsKLSAgICBtX3ByaXZhdGUtPnNldFJhdGUocmF0ZSk7ICAg
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5zZXRSYXRlKHJhdGUpOyAg
IAogfQogCiBpbnQgTWVkaWFQbGF5ZXI6OmRhdGFSYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5kYXRhUmF0ZSgpOworICAgIHJldHVybiAobV9wcml2YXRlID8gbV9wcml2YXRl
LT5kYXRhUmF0ZSgpIDogMCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OnNldEVuZFRpbWUoZmxv
YXQgdGltZSkKIHsKLSAgICBtX3ByaXZhdGUtPnNldEVuZFRpbWUodGltZSk7CisgICAgaWYgKG1f
cHJpdmF0ZSkgLy8geHh4eHh4CisgICAgICAgIG1fcHJpdmF0ZS0+c2V0RW5kVGltZSh0aW1lKTsK
IH0KIAogZmxvYXQgTWVkaWFQbGF5ZXI6Om1heFRpbWVCdWZmZXJlZCgpCiB7Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bWF4VGltZUJ1ZmZlcmVkKCk7CisgICAgcmV0dXJuIChtX3ByaXZhdGUgPyBt
X3ByaXZhdGUtPm1heFRpbWVCdWZmZXJlZCgpIDogMCk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVy
OjptYXhUaW1lU2Vla2FibGUoKQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1heFRpbWVTZWVr
YWJsZSgpOworICAgIHJldHVybiAobV9wcml2YXRlID8gbV9wcml2YXRlLT5tYXhUaW1lU2Vla2Fi
bGUoKSA6IDApOwogfQogCiB1bnNpZ25lZCBNZWRpYVBsYXllcjo6Ynl0ZXNMb2FkZWQoKQogewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmJ5dGVzTG9hZGVkKCk7CisgICAgcmV0dXJuIChtX3ByaXZh
dGUgPyBtX3ByaXZhdGUtPmJ5dGVzTG9hZGVkKCkgOiAwKTsKIH0KIAogYm9vbCBNZWRpYVBsYXll
cjo6dG90YWxCeXRlc0tub3duKCkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50b3RhbEJ5dGVz
S25vd24oKTsKKyAgICByZXR1cm4gKG1fcHJpdmF0ZSA/IG1fcHJpdmF0ZS0+dG90YWxCeXRlc0tu
b3duKCkgOiBmYWxzZSk7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyOjp0b3RhbEJ5dGVzKCkK
IHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50b3RhbEJ5dGVzKCk7CisgICAgcmV0dXJuIChtX3By
aXZhdGUgPyBtX3ByaXZhdGUtPnRvdGFsQnl0ZXMoKSA6IDApOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAogeyAKICAgICBtX3JlY3QgPSByOwotICAg
IG1fcHJpdmF0ZS0+c2V0UmVjdChyKTsKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3By
aXZhdGUtPnNldFJlY3Qocik7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXI6OnZpc2libGUoKSBjb25z
dApAQCAtMjA3LDM1ICsyOTIsNDEgQEAgYm9vbCBNZWRpYVBsYXllcjo6dmlzaWJsZSgpIGNvbnN0
CiB2b2lkIE1lZGlhUGxheWVyOjpzZXRWaXNpYmxlKGJvb2wgYikKIHsKICAgICBtX3Zpc2libGUg
PSBiOwotICAgIG1fcHJpdmF0ZS0+c2V0VmlzaWJsZShiKTsKKyAgICBpZiAobV9wcml2YXRlKQor
ICAgICAgICBtX3ByaXZhdGUtPnNldFZpc2libGUoYik7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBtX3By
aXZhdGUtPnBhaW50KHAsIHIpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0
ZS0+cGFpbnQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUpCitTdXBwb3J0ZWQgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQogewotICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlczsKLSAgICBnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7Ci0gICAgcmV0dXJuIE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZSh0eXBlKSAmJiB0eXBlcy5j
b250YWlucyh0eXBlKTsKKyAgICBNZWRpYVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IGNob29zZUJl
c3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CisKKyAgICBpZiAoIWVuZ2lu
ZSkKKyAgICAgICAgcmV0dXJuIElzTm90U3VwcG9ydGVkOworCisgICAgcmV0dXJuIGVuZ2luZS0+
c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5
ZXI6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCiB7Ci0gICAgTWVk
aWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7CisgICAgVmVjdG9yPE1l
ZGlhUGxheWVyRmFjdG9yeSo+JiBlbmdpbmVzID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCk7Cisg
ICAgaWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
TWVkaWFQbGF5ZXJGYWN0b3J5Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZW5naW5lcy5iZWdpbigp
OworICAgIGNvbnN0IFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gZW5naW5lcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAoKml0KS0+Z2V0U3VwcG9ydGVkVHlwZXModHlwZXMpOwogfSAKLSAgICAKKwogYm9vbCBNZWRp
YVBsYXllcjo6aXNBdmFpbGFibGUoKQogewotICAgIHN0YXRpYyBib29sIGF2YWlsYWJpdHlLbm93
biA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlOwotICAgIGlmICghYXZhaWxh
Yml0eUtub3duKSB7Ci0gICAgICAgIGlzQXZhaWxhYmxlID0gTWVkaWFQbGF5ZXJQcml2YXRlOjpp
c0F2YWlsYWJsZSgpOwotICAgICAgICBhdmFpbGFiaXR5S25vd24gPSB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gaXNBdmFpbGFibGU7CisgICAgcmV0dXJuICFpbnN0YWxsZWRNZWRpYUVuZ2luZXMo
KS5pc0VtcHR5KCk7CiB9IAogCiB2b2lkIE1lZGlhUGxheWVyOjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9u
IDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKLWNsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZTsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTsKIGNs
YXNzIFN0cmluZzsKIAogY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQgewpAQCAtNTIsMTkgKzUyLDIy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJSZXBhaW50KE1lZGlhUGxh
eWVyKikgeyB9CiB9OwogCitlbnVtIFN1cHBvcnRlZCB7IElzTm90U3VwcG9ydGVkLCBJc1N1cHBv
cnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKKwogY2xhc3MgTWVkaWFQbGF5ZXIgOiBOb25jb3B5YWJs
ZSB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2
aXJ0dWFsIH5NZWRpYVBsYXllcigpOwotICAgIAorCiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFi
bGUoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIFN1cHBvcnRlZCBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGNvZGVjcyA9ICIiKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mKTsKICAgICAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCk7CiAgICAg
Ym9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0RnJhbWVWaWV3KEZyYW1lVmlldyog
ZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3OyB9CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQogICAgIGJvb2wgaW5NZWRpYURvY3Vt
ZW50KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBqdXN0IGhh
dmUgYSBnZXR0ZXIgYW5kIHNldHRlciBmb3Igc2l6ZS4KQEAgLTczLDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIHZvaWQg
c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAgICB2b2lkIGxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpOworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAgICAgCiAgICAgYm9vbCB2aXNp
YmxlKCkgY29uc3Q7CkBAIC0xMjIsMTEgKzEyNSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBh
aW50KCk7CiAgICAgCiBwcml2YXRlOgotICAgICAgICAKLSAgICBmcmllbmQgY2xhc3MgTWVkaWFQ
bGF5ZXJQcml2YXRlOwotICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNZWRpYUVuZ2lu
ZXMoKTsKKwogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtX21lZGlhUGxheWVyQ2xpZW50OwotICAg
IE1lZGlhUGxheWVyUHJpdmF0ZSogbV9wcml2YXRlOworICAgIFJlZlB0cjxNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U+IG1fcHJpdmF0ZTsKICAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3Owog
ICAgIEludFJlY3QgbV9yZWN0OwogICAgIGJvb2wgbV92aXNpYmxlOwpAQCAtMTM0LDcgKzEzNiwx
NSBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fdm9sdW1lOwogfTsKIAordHlwZWRlZiBQYXNzUmVm
UHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gKCpOZXdNZWRpYUVuZ2luZVBsYXllciko
TWVkaWFQbGF5ZXIgKnBsYXllcik7Cit0eXBlZGVmIHZvaWQgKCpNZWRpYUVuZ2luZVN1cHBvcnRl
ZFR5cGVzKShIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKK3R5cGVkZWYgU3VwcG9ydGVkICgqTWVk
aWFFbmdpbmVTdXBwb3J0c1R5cGUpKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBj
b2RlY3MpOworCit0eXBlZGVmIHZvaWQgKCpNZWRpYUVuZ2luZVJlZ2lzdHJhcikoTmV3TWVkaWFF
bmdpbmVQbGF5ZXIgY3RvciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcyBnZXRUeXBlcywgTWVk
aWFFbmdpbmVTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKTsgCisKKwogfQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU8pCisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NyBAQAorCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZV9oCisjZGVmaW5lIE1l
ZGlhUGxheWVyUHJpdmF0ZV9oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2U+Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
KCkge307CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCisKKyAgICB2
aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2VlayhmbG9hdCB0aW1lKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5kVGltZShmbG9hdCB0aW1lKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJhdGUpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGF1c2VkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShm
bG9hdCBpblZvbHVtZSkgPSAwOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG1h
eFRpbWVTZWVrYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVCdWZm
ZXJlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGRhdGFSYXRlKCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBib29sIHRvdGFsQnl0ZXNLbm93bigpIGNvbnN0IHsgcmV0dXJuIHRv
dGFsQnl0ZXMoKSA+IDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwIDsK
K307CisKK30KKworI2VuZGlmCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHJldmlzaW9uIDQwNjc1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVP
KQogCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApA
QCAtNTIsMTAgKzUyLDEyIEBAIGNsYXNzIFdlYkNvcmVNb3ZpZU9ic2VydmVyOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IE5vbmNvcHlhYmxlIHsK
K2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVy
Kik7Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
TWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNy
ZWF0ZShNZWRpYVBsYXllciAqcGxheWVyKTsKKworICAgIH5NZWRpYVBsYXllclByaXZhdGVRVEtp
dCgpOwogICAgIAogICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKICAgICBib29sIGhh
c1ZpZGVvKCkgY29uc3Q7CkBAIC0xMDEsOSArMTAzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICBzdGF0aWMg
dm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0
aWMgU3VwcG9ydGVkIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgY29kZWNzKTsKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogICAgIAogcHJpdmF0
ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVRVEtpdChNZWRpYVBsYXllciopOworCiAgICAgdm9p
ZCBjcmVhdGVRVE1vdmllKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIHNldFVwVmlkZW9S
ZW5kZXJpbmcoKTsKICAgICB2b2lkIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKQEAgLTExNiw4
ICsxMjEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAgICAgdm9pZCBk
b1NlZWsoKTsKICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKLSAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJl
ZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CisgICAgdm9pZCBzZWVrVGltZXJGaXJlZChU
aW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKTsKKyAgICB2b2lkIGVuZFBvaW50VGltZXJG
aXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKTsKICAgICBmbG9hdCBtYXhUaW1l
TG9hZGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwog
ICAgIHZvaWQgZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tD
b3VudCk7CkBAIC0xMjksOCArMTM0LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8V2ViQ29y
ZU1vdmllT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwogICAgIGZsb2F0IG1fc2Vla1RvOwogICAg
IGZsb2F0IG1fZW5kVGltZTsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fc2Vla1Rp
bWVyOwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9lbmRQb2ludFRpbWVyOworICAg
IFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0PiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxN
ZWRpYVBsYXllclByaXZhdGVRVEtpdD4gbV9lbmRQb2ludFRpbWVyOwogICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgbV9yZWFkeVN0YXRlOwogICAgIGJvb2wgbV9zdGFydGVkUGxheWluZzsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTEg
KzEyOCwxMSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBAaW50ZXJmYWNlIFdlYkNvcmVNb3Zp
ZU9ic2VydmVyIDogTlNPYmplY3QKIHsKLSAgICBNZWRpYVBsYXllclByaXZhdGUqIG1fY2FsbGJh
Y2s7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqIG1fY2FsbGJhY2s7CiAgICAgTlNWaWV3
KiBtX3ZpZXc7CiAgICAgQk9PTCBtX2RlbGF5Q2FsbGJhY2tzOwogfQotLShpZClpbml0V2l0aENh
bGxiYWNrOihNZWRpYVBsYXllclByaXZhdGUqKWNhbGxiYWNrOworLShpZClpbml0V2l0aENhbGxi
YWNrOihNZWRpYVBsYXllclByaXZhdGVRVEtpdCopY2FsbGJhY2s7CiAtKHZvaWQpZGlzY29ubmVj
dDsKIC0odm9pZClzZXRWaWV3OihOU1ZpZXcqKXZpZXc7CiAtKHZvaWQpcmVwYWludDsKQEAgLTE1
NywxMyArMTU3LDI1IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBlbmRQb2ludFRpbWVySW50ZXJ2YWwK
IHN0YXRpYyBjb25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsg
Ly8gNy4zCiAjZW5kaWYKIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUo
TWVkaWFQbGF5ZXIqIHBsYXllcikKKworUGFzc1JlZlB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGUoTWVkaWFQbGF5ZXIgKnBsYXll
cikgCit7IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQo
cGxheWVyKSk7IAorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNB
dmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMs
IHN1cHBvcnRzVHlwZSk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdChNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVy
KQogICAgICwgbV9vYmpjT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlTW92aWVPYnNlcnZlciBh
bGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkKICAgICAsIG1fc2Vla1RvKC0xKQogICAgICwg
bV9lbmRUaW1lKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKLSAgICAsIG1fc2Vl
a1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQotICAgICwg
bV9lbmRQb2ludFRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJG
aXJlZCkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX2VuZFBvaW50VGltZXIodGhpcywgJk1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShN
ZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkRhdGFV
bmF2YWlsYWJsZSkKICAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCkBAIC0xNzcsNyArMTg5
LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTQogewogfQogCi1N
ZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6On5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpCiB7CiAgICAgdGVhckRvd25WaWRl
b1JlbmRlcmluZygpOwogCkBAIC0xODUsNyArMTk3LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+
TWVkaWFQbGF5ZXJQcml2YXRlKAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBkaXNjb25uZWN0
XTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWUoY29uc3QgU3Ry
aW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllKGNv
bnN0IFN0cmluZyYgdXJsKQogewogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCldOwogICAgIApAQCAtMjYx
LDcgKzI3Myw3IEBAIHN0YXRpYyBDbGFzcyBRVFZpZGVvUmVuZGVyZXJDbGFzcygpCiAgICAgIHJl
dHVybiBRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5Q2xhc3M7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllVmlldygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpjcmVhdGVRVE1vdmllVmlldygpCiB7CiAgICAgZGV0YWNoUVRNb3ZpZVZpZXcoKTsKIApA
QCAtMjc5LDcgKzI5MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmll
VmkKIAogICAgIG1fcXRNb3ZpZVZpZXcuYWRvcHROUyhbW1FUTW92aWVWaWV3IGFsbG9jXSBpbml0
XSk7CiAgICAgc2V0UmVjdChtX3BsYXllci0+cmVjdCgpKTsKLSAgICBOU1ZpZXcqIHBhcmVudFZp
ZXcgPSBtX3BsYXllci0+bV9mcmFtZVZpZXctPmRvY3VtZW50VmlldygpOworICAgIE5TVmlldyog
cGFyZW50VmlldyA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCk7CiAgICAg
W3BhcmVudFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgpXTsKICNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBhIHB1YmxpYyBjYWxsIGlu
IFRpZ2VyLCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5
CkBAIC0zMDEsNyArMzEzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92
aWVWaQogICAgICAgICB3a1FUTW92aWVWaWV3U2V0RHJhd1N5bmNocm9ub3VzbHkobV9xdE1vdmll
Vmlldy5nZXQoKSwgWUVTKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRldGFjaFFU
TW92aWVWaWV3KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVW
aWV3KCkKIHsKICAgICBpZiAobV9xdE1vdmllVmlldykgewogICAgICAgICBbbV9vYmpjT2JzZXJ2
ZXIuZ2V0KCkgc2V0VmlldzpuaWxdOwpAQCAtMzE2LDcgKzMyOCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpkZXRhY2hRVE1vdmllVmkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6Y3JlYXRlUVRWaWRlb1JlbmRlcmVyKCkKIHsKICAgICBkZXN0cm95UVRWaWRlb1JlbmRl
cmVyKCk7CiAKQEAgLTMzNCw3ICszNDYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlUVRWaWRlb1JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OmRlc3Ryb3lRVFZpZGVvUmVuZGVyZXIoKQogewogICAgIGlmICghbV9xdFZpZGVv
UmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCw5ICszNjIsOSBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6ZGVzdHJveVFUVmlkZW9SCiAgICAgbV9xdFZpZGVvUmVuZGVyZXIgPSBu
aWw7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZpZGVvUmVuZGVyaW5nKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQogewot
ICAgIGlmICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0TW92aWUpCisgICAgaWYgKCFt
X3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAhUVRWaWRlb1JlbmRlcmVyQ2xh
c3MoKSApCkBAIC0zNjEsNyArMzczLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVw
VmlkZW9SZW5kZQogICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKTsKIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7CiAgICAgaWYgKG1f
cXRNb3ZpZVZpZXcpCiAgICAgICAgIGRldGFjaFFUTW92aWVWaWV3KCk7CkBAIC0zNjksNyArMzgx
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZQogICAgICAgICBk
ZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7CiB9CiAKLVFUVGltZSBNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZVFUVGltZShmbG9hdCB0aW1lKSBjb25zdAorUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpjcmVhdGVRVFRpbWUoZmxvYXQgdGltZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRN
b3ZpZSkKICAgICAgICAgcmV0dXJuIFFUTWFrZVRpbWUoMCwgNjAwKTsKQEAgLTM3Nyw3ICszODks
NyBAQCBRVFRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVFRpbWUoCiAgICAgcmV0dXJu
IFFUTWFrZVRpbWUodGltZSAqIHRpbWVTY2FsZSwgdGltZVNjYWxlKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChtX25ldHdv
cmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMzk4LDcgKzQxMCw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkg
c2V0RGVsYXlDYWxsYmFja3M6Tk9dOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxh
eSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCkKIHsKICAgICBpZiAoIW1f
cXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDEyLDcgKzQyNCw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwbGF5KCkKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6cGF1c2UoKQogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1
cm47CkBAIC00MjYsNyArNDM4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkK
ICAgICBtX2VuZFBvaW50VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZh
dGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkdXJh
dGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNDM2LDcgKzQ0OCw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBj
b24KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRpbWUudGltZVZhbHVlKSAvIHRpbWUu
dGltZVNjYWxlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkg
Y29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjdXJyZW50VGltZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDQ0LDcgKzQ1
Niw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSAKICAgICByZXR1
cm4gbWluKHN0YXRpY19jYXN0PGZsb2F0Pih0aW1lLnRpbWVWYWx1ZSkgLyB0aW1lLnRpbWVTY2Fs
ZSwgbV9lbmRUaW1lKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQg
dGltZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWsoZmxvYXQgdGltZSkKIHsK
ICAgICBjYW5jZWxTZWVrKCk7CiAgICAgCkBAIC00NjEsNyArNDczLDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZQogICAgICAgICBtX3NlZWtUaW1lci5zdGFydCgw
LCAwLjVmKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKCkgCiB7CiAgICAgUVRUaW1lIHF0dGltZSA9
IGNyZWF0ZVFUVGltZShtX3NlZWtUbyk7CiAgICAgLy8gc2V0Q3VycmVudFRpbWUgZ2VuZXJhdGVz
IHNldmVyYWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcwpAQCAtNDc3LDEzICs0
ODksMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAogICAgIFttX29iamNP
YnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNh
bmNlbFNlZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9zZWVrVGltZXIuc3RvcCgp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVk
aWFQbGF5ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrVGlt
ZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKQogeyAgICAgICAgCiAgICAg
aWYgKCFtX3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGltZSgpID09IG1fc2Vla1Rv
KSB7CiAgICAgICAgIGNhbmNlbFNlZWsoKTsKQEAgLTUwNCwxOSArNTE2LDE5IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7CiAgICAgbV9lbmRUaW1lID0gdGlt
ZTsKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQogewogICAgIGlmICht
X2VuZFRpbWUgPCBkdXJhdGlvbigpICYmIG1fc3RhcnRlZFBsYXlpbmcgJiYgIW1fZW5kUG9pbnRU
aW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2VuZFBvaW50VGltZXIuc3RhcnRSZXBlYXRpbmco
ZW5kUG9pbnRUaW1lckludGVydmFsKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVu
ZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclBy
aXZhdGVRVEtpdD4qKQogewogICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIApA
QCAtNTI3LDQyICs1MzksNDIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGlt
ZXJGaQogICAgIH0KIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQoKSBjb25zdAogewogICAgIGlm
ICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gW21fcXRNb3Zp
ZS5nZXQoKSByYXRlXSA9PSAwOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2lu
ZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVraW5nKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBtX3NlZWtUbyA+PSAwOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJh
bFNpemUoKSBjb25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNp
emUoKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwogICAgIHJldHVybiBJbnRTaXplKFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktl
eTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0pOwogfQogCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZv
cktleTpRVE1vdmllSGFzVmlkZW9BdHRyaWJ1dGVdIGJvb2xWYWx1ZV07CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fcXRN
b3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0Vm9sdW1lOnZv
bHVtZV07ICAKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0
ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsK
ICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDcgKzU4Miw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHIKICAgICAgICAgW21fcXRN
b3ZpZS5nZXQoKSBzZXRSYXRlOnJhdGVdOwogfQogCi1pbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpk
YXRhUmF0ZSgpIGNvbnN0CitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRhdGFSYXRlKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01Nzgs
MjYgKzU5MCwyNiBAQCBpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0CiB9
CiAKIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVCdWZmZXJlZCgpIGNvbnN0CiB7
CiAgICAgLy8gcnRzcCBzdHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKICAgICByZXR1cm4gbV9pc1N0
cmVhbWluZyA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGluZmluaXRlIGR1cmF0aW9u
IG1lYW5zIGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuIGlzaW5mKGR1cmF0aW9uKCkpID8gMCA6IG1h
eFRpbWVMb2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9h
ZGVkKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lTG9hZGVk
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
cmV0dXJuIHdrUVRNb3ZpZU1heFRpbWVMb2FkZWQobV9xdE1vdmllLmdldCgpKTsgCiB9CiAKLXVu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBmbG9h
dCBkdXIgPSBkdXJhdGlvbigpOwogICAgIGlmICghZHVyKQpAQCAtNjA1LDE5ICs2MTcsMTkgQEAg
dW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVybiB0b3Rh
bEJ5dGVzKCkgKiBtYXhUaW1lTG9hZGVkKCkgLyBkdXI7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAgICByZXR1cm4gdG90YWxCeXRlcygp
ID4gMDsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29u
c3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3RhbEJ5dGVzKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFtb
bV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllRGF0YVNpemVBdHRyaWJ1dGVd
IGludFZhbHVlXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCgpCiB7CiAgICAgLy8gRklY
TUU6IElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgdGhpcz8KICAgICBpZiAobV9u
ZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBN
ZWRpYVBsYXllcjo6TG9hZGVkKQpAQCAtNjI5LDcgKzY0MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpjYW5jZWxMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xk
TmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTY4MywyNyArNjk1LDI3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBzZXRVcFZpZGVv
UmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkU3RhdGVDaGFu
Z2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQoKQog
ewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmF0
ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmF0ZUNoYW5nZWQoKQog
ewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2l6
ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQoKQog
ewogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGltZUNoYW5nZWQoKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6dGltZUNoYW5nZWQoKQogewogICAgIHVwZGF0ZVN0YXRlcygp
OwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpZEVuZCgpCiB7
CiAgICAgbV9lbmRQb2ludFRpbWVyLnN0b3AoKTsKICAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFs
c2U7CkBAIC03MTQsNyArNzI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgp
CiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSAKIHsgCiAgICAgaWYgKCFtX3F0TW92aWVW
aWV3KSAKICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRSZWN0KGNvbnN0IEkKICAgICB9ICAgCiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgYikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OnNldFZpc2libGUoYm9vbCBiKQogewogICAgIGlmIChtX3Zpc2libGUgIT0gYikgewogICAg
ICAgICBtX3Zpc2libGUgPSBiOwpAQCAtNzQzLDcgKzc1NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRWaXNpYmxlKGJvb2wKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpyZXBhaW50KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlcGFpbnQoKQog
ewogI2lmIERSQVdfRlJBTUVfUkFURQogICAgIGlmIChtX3N0YXJ0ZWRQbGF5aW5nKSB7CkBAIC03
NTcsNyArNzY5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQogICAgIG1f
cGxheWVyLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzg3LDcgKzc5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpw
YWludChHcmFwaGljc0MKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICAvLyBEcmF3IHRoZSBmcmFt
ZSByYXRlIG9ubHkgYWZ0ZXIgaGF2aW5nIHBsYXllZCBtb3JlIHRoYW4gMTAgZnJhbWVzLgogICAg
IGlmIChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPiAxMCkgewotICAgICAgICBGcmFtZSogZnJh
bWUgPSBtX3BsYXllci0+bV9mcmFtZVZpZXcgPyBtX3BsYXllci0+bV9mcmFtZVZpZXctPmZyYW1l
KCkgOiBOVUxMOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkg
PyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiBOVUxMOwogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogTlVMTDsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPnJlbmRlcmVyKCkg
OiBOVUxMOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyID8gcmVu
ZGVyZXItPnN0eWxlKCkgOiBOVUxMOwpAQCAtODEzLDIzICs4MjUsNDMgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQwogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBz
ZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQorc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKLSAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3Zp
ZSBtb3ZpZUZpbGVUeXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107Ci0gICAgaW50IGNvdW50ID0g
W2ZpbGVUeXBlcyBjb3VudF07Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7
Ci0gICAgICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+
KFtmaWxlVHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWco
a1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7Ci0gICAgICAgIGlmICgh
dXRpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gbWltZShBZG9wdENGLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aS5nZXQo
KSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwotICAgICAgICBpZiAoIW1pbWUpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdHlwZXMuYWRkKG1pbWUuZ2V0KCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOworICAgIHN0YXRpYyBib29s
IHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICghdHlwZUxpc3RJbml0aWFs
aXplZCkgeworICAgICAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3ZpZSBtb3ZpZUZpbGVU
eXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107CisgICAgICAgIGludCBjb3VudCA9IFtmaWxlVHlw
ZXMgY291bnRdOworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKyAg
ICAgICAgICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+
KFtmaWxlVHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aShBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9y
VGFnKGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dCwgTlVMTCkpOworICAgICAgICAg
ICAgaWYgKCF1dGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IG1pbWUoQWRvcHRDRiwgVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dp
dGhDbGFzcyh1dGkuZ2V0KCksIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKKyAgICAgICAgICAgIGlm
ICghbWltZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhY2hlLmFk
ZChtaW1lLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICB0eXBlTGlzdEluaXRpYWxpemVkID0g
dHJ1ZTsKICAgICB9Ci19IAogICAgIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxh
YmxlKCkKKyAgICByZXR1cm4gY2FjaGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5
cGVzID0gbWltZVR5cGVDYWNoZSgpOworfSAKKworU3VwcG9ydGVkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNv
ZGVjcykKK3sKKyAgICAvLyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5v
IGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdworICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29u
dGFpbnModHlwZSkgPyAoY29kZWNzICYmICFjb2RlY3MuaXNFbXB0eSgpID8gTWF5QmVTdXBwb3J0
ZWQgOiBJc1N1cHBvcnRlZCkgOiBJc05vdFN1cHBvcnRlZDsKK30KKworCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0Ojppc0F2YWlsYWJsZSgpCiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKICAgICBTSW50MzIgdmVyc2lvbjsKQEAgLTg1MCw3ICs4ODIsNyBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUoKQogI2VuZGlmCiB9CiAgICAgCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJh
Y2tDb3VudCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpc2FibGVVbnN1cHBvcnRl
ZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFtX3F0TW92
aWUpIHsKICAgICAgICAgZW5hYmxlZFRyYWNrQ291bnQgPSAwOwpAQCAtOTM5LDcgKzk3MSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkaXNhYmxlVW5zdXBwb3IKIAogQGltcGxlbWVudGF0
aW9uIFdlYkNvcmVNb3ZpZU9ic2VydmVyCiAKLS0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlh
UGxheWVyUHJpdmF0ZSAqKWNhbGxiYWNrCistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBs
YXllclByaXZhdGVRVEtpdCAqKWNhbGxiYWNrCiB7CiAgICAgbV9jYWxsYmFjayA9IGNhbGxiYWNr
OwogICAgIHJldHVybiBbc3VwZXIgaW5pdF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27451</attachid>
            <date>2009-02-07 10:51:19 -0800</date>
            <delta_ts>2009-02-08 14:09:52 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>all-platform-prototype-patch.txt</filename>
            <type>text/plain</type>
            <size>74255</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDc1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTk5IEBACisyMDA5LTAyLTA3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQnVnIDIzNzk3OiBBIHBsYXRmb3JtIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBt
b3JlIHRoYW4gb25lIG1lZGlhIGVuZ2luZSBmb3IgPHZpZGVvPiBhbmQgPGF1ZGlvPgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3OTcKKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogYWRkIE1lZGlhUGxheWVyUHJp
dmF0ZS5oCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZCk6IHNlbGVjdE1lZGlhVVJMIG5vdyByZXR1
cm5zIGEgTUlNRSB0eXBlLCBwYXNzIGl0IHRvCisgICAgICAgIE1lZGlhUGxheWVyOjpsb2FkIHNv
IGl0IGNhbiBjaG9vc2UgdGhlIHJpZ2h0IG1lZGlhIGVuZ2luZQorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFVUkwpOiByZW5hbWVkIGZyb20gcGlja01lZGlh
LiB1c2UgTUlNRVR5cGVSZWdpc3RyeQorICAgICAgICBmdW5jdGlvbnMgdG8gc3RyaXAgcGFyYW1z
IGZyb20gdGhlIHVybCBhbmQgZXh0cmFjdCB0aGUgY29kZWNzIHBhcmFtZXRlci4gY2FsbCAKKyAg
ICAgICAgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZSB0byBzZWUgaWYgd2UgY2FuIG9wZW4gdGhl
IGZpbGUgc2luY2Ugb25seSBhIG1lZG9hIGVuZ2luZSBjYW4KKyAgICAgICAgYW5zd2VyIHF1ZXN0
aW9ucyBhYm91dCBzdXBwb3J0ZWQgdHlwZStjb2RlY3MuCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21NSU1F
VHlwZSk6IE5ldywgZmluZCBhbmQgcmV0dXJuIGEgTUlNRSB0eXBlIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBl
KTogTmV3LCBzdHJpcCBhbGwgcGFyYW1ldGVycyBmcm9tIGEgTUlNRSB0eXBlCisgICAgICAgICog
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJGYWN0b3J5
OjpNZWRpYVBsYXllckZhY3RvcnkpOiBOZXcsIGZhY3RvcnkgY29uc3RydWN0b3IuCisgICAgICAg
IChXZWJDb3JlOjppbnN0YWxsZWRNZWRpYUVuZ2luZXMpOiBOZXcsIHJldHVybnMgdmVjdG9yIG9m
IGFsbCBpbnN0YWxsZWQgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6OmFkZE1lZGlhRW5naW5l
KTogTmV3LCBhZGQgYSBtZWRpYSBlbmdpbmUgdG8gdGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29y
ZTo6Y2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3MpOiBOZXcsIHJldHVybiBhbiBlbmdp
bmUgdGhhdCBtaWdodCBzdXBwb3J0IGEgTUlNRSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6Ok1lZGlhUGxheWVyKTogY3JlYXRlIE5VTEwgbWVkaWEgcGxheWVyIHNvIHdlIGhh
dmUgYSBkZWZhdWx0CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IFRha2Ug
TUlNRSB0eXBlIGFzIHdlbGwgYXMgdXJsLCBzaW5jZSB3ZSBuZWVkIGl0IHRvIGZpbmQgdGhlIHJp
Z2h0CisgICAgICAgICAgbWVkaWEgZW5naW5lLiBJZiBubyBNSU1FIHR5cGUgaXMgcHJvdmlkZWQs
IHRyeSB0byBkZXZpbmUgb25lIGZyb20gdGhlIHVybC4gQ2hvb3NlIGEgbWVkaWEgZW5naW5lCisg
ICAgICAgICAgYmFzZWQgb24gdGhlIE1JTUUgdHlwZSBhbmQgY29kZWNzIHBhcmFtZXRlci4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpjdXJyZW50VGltZSk6IHJlbW92ZSBleGNlc3Mg
d2hpdGUgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBl
KTogIFRha2UgY29kZWNzIHBhcmFtIGFzIHdlbGwgYXMgTUlNRSB0eXBlLiBSZXR1cm4gZW51bSBz
byB3ZSBjYW4KKyAgICAgICAgaW5kaWNhdGUgIm1heWJlIiBjb25kaXRpb24uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOiBCdWlsZCB1cCBsaXN0IG9m
IE1JTUUgdHlwZXMgYnkgY29uc3VsdGluZyBhbGwgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSk6IHJldHVybiB0cnVlIGlmIGFueSBtZWRpYSBlbmdp
bmUgaXMgaW5zdGFsbGVkLgorCisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlKTogCisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVk
aWFQbGF5ZXJQcml2YXRlOjp+TlVMTE1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5V
TExNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVM
TE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQ
cml2YXRlOjpuYXR1cmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZh
dGU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6
OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bik6
CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlTnVsbE1lZGlhUGxheWVyKToKKyAgICAgICAgRG8gbm90aGluZyBtZWRp
YSBwbGF5ZXIgc28gTWVkaWFQbGF5ZXIgZG9lc24ndCBoYXZlIHRvIE5VTEwgY2hlY2sgYmVmb3Jl
IGNhbGxpbmcgY3VycmVudCBlbmdpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Oik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllcjo6ZnJhbWVWaWV3KTogYWNjZXNzb3IgZnVuY3Rpb24uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDogTmV3LCBk
ZWNsYXJlcyBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIG1lZGlhIGVuZ2luZXMuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6On5NZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
Ojp0b3RhbEJ5dGVzS25vd24pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaDogYWRkIHN1cHBvcnQgZm9yIGVuZ2luZSBm
YWN0b3J5IAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZSk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rpb24KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IHJlZ2lzdGVy
IGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGUpOiBOZXcsIG1lZGlhIGVuZ2luZSBmYWN0
b3J5IGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IFJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZh
Y3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdCk6IENvbnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlLCBuZWVkIHRvIHVz
ZSBjcmVhdGUoKQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6On5N
ZWRpYVBsYXllclByaXZhdGVRVEtpdCk6IENoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXll
clByaXZhdGVRVEtpdAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmNyZWF0ZVFUTW92aWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllVmlldyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVWaWV3KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRWaWRlb1JlbmRl
cmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
ZGVzdHJveVFUVmlkZW9SZW5kZXJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3Jl
YXRlUVRUaW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6bG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpwYXVzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OmR1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6Y3VycmVudFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsU2Vlayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWtUaW1lckZpcmVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0RW5kVGltZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0YXJ0
RW5kUG9pbnRUaW1lcklmTmVlZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZW5kUG9pbnRUaW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGF1c2VkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla2luZyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om5hdHVyYWxTaXplKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzVmlkZW8p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRW
b2x1bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpzZXRSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6ZGF0YVJhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjptYXhUaW1lQnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lU2Vla2FibGUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lTG9hZGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Ynl0ZXNMb2FkZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3Rh
bEJ5dGVzS25vd24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Ojp0b3RhbEJ5dGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnVwZGF0ZVN0YXRlcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyYXRlQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNpemVD
aGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6dGltZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpkaWRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpzZXRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6c2V0VmlzaWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlcGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6bWltZVR5cGVDYWNoZSk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpnZXRTdXBwb3J0ZWRUeXBlcyk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3Rv
cnkgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZW51bSBpbnN0
ZWFkIG9mIGJvb2wKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpp
c0F2YWlsYWJsZSk6IENoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVEtp
dAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpc2FibGVVbnN1
cHBvcnRlZFRyYWNrcyk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciBp
bml0V2l0aENhbGxiYWNrOl0pOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZSk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rp
b24KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVu
Z2luZSk6IHJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6Y3JlYXRlKTogTmV3LCBt
ZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IFJlZ2lzdGVyIGVuZ2luZSB3
aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUV2luOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbik6IENvbnN0cnVjdG9yIGlzIG5vdyBw
cml2YXRlLCBuZWVkIHRvIHVzZSBjcmVhdGUoKQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRXaW46On5NZWRpYVBsYXllclByaXZhdGVRVFdpbik6IENoYW5nZWQgY2xhc3Mg
bmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVFdpbgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OmxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVFUV2luOjpwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6cGF1c2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpkdXJhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c2Vlayk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmRvU2Vlayk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNhbmNlbFNlZWspOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZWVrVGltZXJG
aXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OnNldEVuZFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUV2luOjpzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmVuZFBvaW50VGltZXJGaXJlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnBhdXNlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnNlZWtpbmcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpuYXR1
cmFsU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRX
aW46Omhhc1ZpZGVvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRVFdpbjo6c2V0Vm9sdW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVFdpbjo6c2V0UmF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OmRhdGFSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUJ1ZmZlcmVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZVNlZWthYmxlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUxv
YWRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OmJ5dGVzTG9hZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRVFdpbjo6dG90YWxCeXRlc0tub3duKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6dG90YWxCeXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNhbmNlbExvYWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjp1cGRhdGVTdGF0ZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpkaWRFbmQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZXRSZWN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c2V0Vmlz
aWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogTmV3Lgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmdldFN1cHBvcnRlZFR5
cGVzKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjppc0F2YWlsYWJsZSk6IENoYW5nZWQgY2xhc3Mg
bmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVFdpbgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OnN1cHBvcnRzVHlwZSk6IHJldHVybiBNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIGVudW0gaW5zdGVhZCBvZiBib29sCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6bW92aWVFbmRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllTG9hZFN0YXRlQ2hhbmdlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllVGltZUNoYW5n
ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpt
b3ZpZU5ld0ltYWdlQXZhaWxhYmxlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oOgorCiAyMDA5LTAyLTA3ICBT
aW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
IAkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRjBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCAqLzsgfTsKIAkJMDZF
ODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRDYwQUI1
RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovOyB9OwogCQkw
NkU4MUVFQzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRUIw
QUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLzsgfTsK
KwkJMDc5RjVFNEMwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5RjVFNEIwRjNCRUJF
QTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovOyB9OwogCQkwODAwODE5NjBFRDNC
MkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01M
QW5jaG9yRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MDA4MTk3MEVEM0IyREQwMEM1M0JDMCAvKiBX
TUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODAwODE5NTBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5oICov
OyB9OwogCQkwODA0QkY2RTBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDRCRjZDMEVFMDlD
M0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9OwpAQCAtNDkwNyw2ICs0OTA4LDcg
QEAKIAkJMDZFODFFRDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1
REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVk
aWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYz
QkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUZFNTkwMEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxB
bmNob3JFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUw
RUQzQjJERDAwQzUzQkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MQW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMwOTYsNiArMTMwOTgsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplSGFzaC5oICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBN
ZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlh
UGxheWVyLmggKi8sCisJCQkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAq
LywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERE
NDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApAQCAtMTY3
MTUsNiArMTY3MTgsNyBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2
aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzND
QjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OUY1RTRD
MEYzQkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsy
NzEsNyBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdSYXRlKCkKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTdHJpbmcgbWVk
aWFTcmM7CisgICAgU3RyaW5nIG1lZGlhTUlNRVR5cGU7CiAgICAgCiAgICAgLy8gMy4xNC45LjQu
IExvYWRpbmcgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzE4LDcgKzMxOSw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAg
ICAgLy8gNgotICAgIG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBzZWxl
Y3RNZWRpYVVSTChtZWRpYU1JTUVUeXBlKTsKICAgICBpZiAobWVkaWFTcmMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIGdvdG8gZW5kOwpAQCAt
MzQwLDcgKzM0MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QK
ICAgICBtX3BsYXllci5jbGVhcigpOwogICAgIG1fcGxheWVyLnNldChuZXcgTWVkaWFQbGF5ZXIo
dGhpcykpOwogICAgIHVwZGF0ZVZvbHVtZSgpOwotICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVu
dFNyYyk7CisgICAgbV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBtZWRpYU1JTUVUeXBlKTsK
ICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5n
TGV2ZWwpCiAgICAgICAgIGdvdG8gZW5kOwogICAgIApAQCAtODEyLDcgKzgxMyw3IEBAIGJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6Y2FuUGxheSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhdXNlZCgpIHx8
IGVuZGVkKCkgfHwgbmV0d29ya1N0YXRlKCkgPCBMT0FERURfTUVUQURBVEE7CiB9CiAKLVN0cmlu
ZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNrTWVkaWEoKQorU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OnNlbGVjdE1lZGlhVVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSkKIHsKICAgICAvLyAzLjE0Ljku
Mi4gTG9jYXRpb24gb2YgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgU3RyaW5nIG1lZGlhU3JjID0g
Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwpAQCAtODMwLDE0ICs4MzEsMTQgQEAgU3RyaW5nIEhUTUxN
ZWRpYUVsZW1lbnQ6OnBpY2tNZWRpYSgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBh
cmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBzaW1wbGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJv
bU1JTUVUeXBlKHR5cGUpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vICJ0eXBlIiBjYW4gaGF2
ZSBwYXJhbWV0ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbSBiZWZvcmUgY2hlY2tp
bmcgd2l0aCB0aGUgdHlwZSByZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICBpbnQgc2VtaSA9
IHR5cGUuZmluZCgnOycpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VtaSAhPSAtMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNw
YWNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE1lZGlhTUlNRVR5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghTWVk
aWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5
cGUgd2l0aCBhbGwgcGFyYW1ldGVycyBpbiBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1
c2UgdGhlbQorICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpLnN0
cmluZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2Vl
ayhmbG9hdCB0aW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBjaGVja0lmU2Vla05l
ZWRlZCgpOwogICAgIAotICAgIFN0cmluZyBwaWNrTWVkaWEoKTsKKyAgICBTdHJpbmcgc2VsZWN0
TWVkaWFVUkwoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKTsKICAgICB2b2lkIHVwZGF0ZVZvbHVtZSgp
OwogICAgIHZvaWQgdXBkYXRlUGxheVN0YXRlKCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlU3RhcnQo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNp
b24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDQyIEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvclAKICAgICByZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiB9
CiAKK1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlck5hbWUpCit7CisgICAgU3Ry
aW5nIHBhcmFtZXRlclZhbHVlOworCisgICAgLy8gYSBNSU1FIHR5cGUgY2FuIGhhdmUgb25lIG9y
IG1vcmUgInBhcmFtPXZhbHVlIiBhZnRlciBhIHNlbWktY29sb24gYW5kIHNlcGFyYXRlZCBmcm9t
IGVhY2ggb3RoZXIgYnkgc2VtaS1jb2xvbnMKKyAgICBpbnQgc2VtaSA9IHR5cGUuZmluZCgnOycp
OworICAgIGlmIChzZW1pICE9IC0xKSB7CisgICAgICAgIGludCBzdGFydCA9IHR5cGUuZmluZChw
YXJhbWV0ZXJOYW1lLCBzZW1pICsgMSwgZmFsc2UpOworICAgICAgICBpZiAoc3RhcnQgIT0gLTEp
IHsKKyAgICAgICAgICAgIHN0YXJ0ID0gdHlwZS5maW5kKCc9Jywgc3RhcnQgKyA2KTsKKyAgICAg
ICAgICAgIGlmIChzdGFydCAhPSAtMSkgeworICAgICAgICAgICAgICAgIGludCBlbmQgPSB0eXBl
LmZpbmQoJzsnLCBzdGFydCArIDYpOworICAgICAgICAgICAgICAgIGlmIChlbmQgIT0gLTEpCisg
ICAgICAgICAgICAgICAgICAgIGVuZCA9IHR5cGUubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyVmFsdWUgPSB0eXBlLnN1YnN0cmluZyhzdGFydCArIDEsIGVuZCAtIChzdGFydCAr
IDEpKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBwYXJhbWV0ZXJWYWx1ZTsKK30KKworU3RyaW5nIE1JTUVUeXBlUmVnaXN0
cnk6OnN0cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIFN0cmluZyBzdHJpcHBlZFR5cGUgPSBtaW1lVHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsK
KworICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJhbWV0ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwg
c3RyaXAgdGhlbQorICAgIGludCBzZW1pID0gc3RyaXBwZWRUeXBlLmZpbmQoJzsnKTsKKyAgICBp
ZiAoc2VtaSAhPSAtMSkKKyAgICAgICAgc3RyaXBwZWRUeXBlID0gc3RyaXBwZWRUeXBlLmxlZnQo
c2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICByZXR1cm4gc3RyaXBwZWRUeXBlOworfQor
CisKKwogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDQwNjc1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGdldE1JTUVUeXBlRm9yRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgZXh0KTsKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0RXh0
ZW5zaW9uc0Zvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyBnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOwor
CisgICAgc3RhdGljIFN0cmluZyBnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlck5hbWUpOworICAgIHN0YXRpYyBTdHJpbmcg
c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7CisKICAgICBz
dGF0aWMgU3RyaW5nIGdldE1JTUVUeXBlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGEgbWltZSB0eXBlIGlzIHN1aXRhYmxlIGZvciBiZWluZyBs
b2FkZWQgaW5saW5lIGFzIGFuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKQEAgLTQ3LDEwICs0OCw4MSBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gKysrKysrKysrKysrKysrKysrKysKKy8vIGVuZ2luZSBzdXBwb3J0CisKK3N0
cnVjdCBNZWRpYVBsYXllckZhY3RvcnkgeworICAgIE1lZGlhUGxheWVyRmFjdG9yeShDcmVhdGVN
ZWRpYUVuZ2luZVBsYXllciBjb25zdHJ1Y3RvciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcyBn
ZXRTdXBwb3J0ZWRUeXBlcywgTWVkaWFFbmdpbmVTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlQW5k
Q29kZWNzKSAKKyAgICAgICAgOiBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikKKyAgICAgICAgLCBn
ZXRTdXBwb3J0ZWRUeXBlcyhnZXRTdXBwb3J0ZWRUeXBlcykKKyAgICAgICAgLCBzdXBwb3J0c1R5
cGVBbmRDb2RlY3Moc3VwcG9ydHNUeXBlQW5kQ29kZWNzKSAgCisgICAgeyB9CisKKyAgICBDcmVh
dGVNZWRpYUVuZ2luZVBsYXllciBjb25zdHJ1Y3RvcjsKKyAgICBNZWRpYUVuZ2luZVN1cHBvcnRl
ZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzOworICAgIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlIHN1
cHBvcnRzVHlwZUFuZENvZGVjczsKK307CisKK3N0YXRpYyB2b2lkIGFkZE1lZGlhRW5naW5lKENy
ZWF0ZU1lZGlhRW5naW5lUGxheWVyLCBNZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVzLCBNZWRpYUVu
Z2luZVN1cHBvcnRzVHlwZSk7CitzdGF0aWMgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0
RW5naW5lRm9yVHlwZUFuZENvZGVjcyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
Y29kZWNzKTsKKworc3RhdGljIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgaW5zdGFsbGVk
TWVkaWFFbmdpbmVzKCkgCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8TWVkaWFQ
bGF5ZXJGYWN0b3J5Kj4sIGluc3RhbGxlZEVuZ2luZXMsICgpKTsKKyAgICBzdGF0aWMgYm9vbCBl
bmdpbmVzUXVlcmllZCA9IGZhbHNlOworCisgICAgaWYgKCFlbmdpbmVzUXVlcmllZCkgeworICAg
ICAgICBlbmdpbmVzUXVlcmllZCA9IHRydWU7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2lu
ZSk7CisjZWxzZQorICAgICAgICBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdp
bmUoYWRkTWVkaWFFbmdpbmUpOworI2VuZGlmCisgICAgfQogICAgIAotICAgIE1lZGlhUGxheWVy
OjpNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQorICAgIHJldHVybiBpbnN0
YWxsZWRFbmdpbmVzOworfQorCitzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShDcmVhdGVNZWRp
YUVuZ2luZVBsYXllciBjdG9yLCBNZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVzIGdldFN1cHBvcnRl
ZFR5cGVzLCBNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUpCit7CisgICAgQVNT
RVJUKGN0b3IpOworICAgIEFTU0VSVChnZXRTdXBwb3J0ZWRUeXBlcyk7CisgICAgQVNTRVJUKHN1
cHBvcnRzVHlwZSk7CisgICAgaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkuYXBwZW5kKG5ldyBNZWRp
YVBsYXllckZhY3RvcnkoY3RvciwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSkpOwor
fQorCitzdGF0aWMgTWVkaWFQbGF5ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFu
ZENvZGVjcyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAg
IFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5n
aW5lcygpOworCisgICAgaWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIE1lZGlhUGxheWVyRmFjdG9yeSAqZW5naW5lID0gMDsKKyAgICBNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIHN1cHBvcnRlZCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKwor
ICAgIHVuc2lnbmVkIGNvdW50ID0gZW5naW5lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBu
ZHggPSAwOyBuZHggPCBjb3VudDsgKytuZHgpIHsKKyAgICAgICAgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBlbmdpbmVTdXBwb3J0ID0gZW5naW5lc1tuZHhdLT5zdXBwb3J0c1R5cGVBbmRDb2Rl
Y3ModHlwZSwgY29kZWNzKTsKKyAgICAgICAgaWYgKGVuZ2luZVN1cHBvcnQgPiBzdXBwb3J0ZWQp
IHsKKyAgICAgICAgICAgIHN1cHBvcnRlZCA9IGVuZ2luZVN1cHBvcnQ7CisgICAgICAgICAgICBl
bmdpbmUgPSBlbmdpbmVzW25keF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW5n
aW5lOworfQorCisvLyArKysrKysrKysrKysrKysrKysrKworLy8gbWVkaWEgcGxheWVyCisKK3N0
YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZU51bGxNZWRpYVBsYXllcihN
ZWRpYVBsYXllciAqcGxheWVyKTsKKworTWVkaWFQbGF5ZXI6Ok1lZGlhUGxheWVyKE1lZGlhUGxh
eWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX21lZGlhUGxheWVyQ2xpZW50KGNsaWVudCkKLSAg
ICAsIG1fcHJpdmF0ZShuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHRoaXMpKQorICAgICwgbV9wcml2
YXRlKGNyZWF0ZU51bGxNZWRpYVBsYXllcih0aGlzKSkKKyAgICAsIG1fY3VycmVudE1lZGlhRW5n
aW5lKDApCiAgICAgLCBtX2ZyYW1lVmlldygwKQogICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAg
ICwgbV9yYXRlKDEuMGYpCkBAIC02Myw5ICsxMzUsMzAgQEAgTWVkaWFQbGF5ZXI6On5NZWRpYVBs
YXllcigpCiAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllcjo6bG9h
ZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgbV9wcml2YXRlLT5sb2FkKHVy
bCk7CisgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUgTUlNRSB0eXBlLCBzZWUgaWYgdGhlIHBh
dGggY2FuIGhlbHAKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLmlzRW1wdHkoKSA/IE1JTUVU
eXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1cmwpIDogbWltZVR5cGU7CisgICAgU3Ry
aW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21NSU1FVHlwZSh0
eXBlLCAiY29kZWNzIik7CisKKyAgICBNZWRpYVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IGNob29z
ZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CisKKyAgICAvLyAgaWYg
d2UgZGlkbid0IGZpbmQgYW4gZW5naW5lIHRoYXQgY2xhaW1zIHRoZSBNSU1FIHR5cGUsIGp1c3Qg
dXNlIHRoZSBmaXJzdCBlbmdpbmUKKyAgICBpZiAoIWVuZ2luZSkKKyAgICAgICAgZW5naW5lID0g
aW5zdGFsbGVkTWVkaWFFbmdpbmVzKClbMF07CisgICAgCisgICAgLy8gZG9uJ3QgZGVsZXRlIGFu
ZCByZWNyZWF0ZSB0aGUgcGxheWVyIHVubGVzcyBpdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IGVu
Z2luZQorICAgIGlmIChlbmdpbmUgJiYgbV9jdXJyZW50TWVkaWFFbmdpbmUgIT0gZW5naW5lKSB7
CisgICAgICAgIG1fY3VycmVudE1lZGlhRW5naW5lID0gZW5naW5lOworICAgICAgICBkZWxldGUg
bV9wcml2YXRlOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgICAgICBtX3ByaXZhdGUgPSBl
bmdpbmUtPmNvbnN0cnVjdG9yKHRoaXMpOworICAgIH0KKworICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+bG9hZCh1cmwpOworICAgIGVsc2UKKyAgICAgICAgbV9wcml2YXRl
ID0gY3JlYXRlTnVsbE1lZGlhUGxheWVyKHRoaXMpOwogfSAgICAKIAogdm9pZCBNZWRpYVBsYXll
cjo6Y2FuY2VsTG9hZCgpCkBAIC05MCw3ICsxODMsNyBAQCBmbG9hdCBNZWRpYVBsYXllcjo6ZHVy
YXRpb24oKSBjb25zdAogCiBmbG9hdCBNZWRpYVBsYXllcjo6Y3VycmVudFRpbWUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPmN1cnJlbnRUaW1lKCk7ICAKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5jdXJyZW50VGltZSgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpzZWVrKGZsb2F0
IHRpbWUpCkBAIC0yMTUsMjcgKzMwOCwzMSBAQCB2b2lkIE1lZGlhUGxheWVyOjpwYWludChHcmFw
aGljc0NvbnRleHQqCiAgICAgbV9wcml2YXRlLT5wYWludChwLCByKTsKIH0KIAotYm9vbCBNZWRp
YVBsYXllcjo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK01lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgY29kZWNzKQogewotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKLSAg
ICBnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7Ci0gICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZSh0eXBlKSAmJiB0eXBlcy5jb250YWlucyh0eXBlKTsK
KyAgICBNZWRpYVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBl
QW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7CisKKyAgICBpZiAoIWVuZ2luZSkKKyAgICAgICAgcmV0
dXJuIElzTm90U3VwcG9ydGVkOworCisgICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5k
Q29kZWNzKHR5cGUsIGNvZGVjcyk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCiB7Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRl
OjpnZXRTdXBwb3J0ZWRUeXBlcyh0eXBlcyk7CisgICAgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9y
eSo+JiBlbmdpbmVzID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCk7CisgICAgaWYgKGVuZ2luZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0
b3J5Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZW5naW5lcy5iZWdpbigpOworICAgIGNvbnN0IFZl
Y3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZW5naW5lcy5l
bmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+Z2V0U3Vw
cG9ydGVkVHlwZXModHlwZXMpOwogfSAKLSAgICAKKwogYm9vbCBNZWRpYVBsYXllcjo6aXNBdmFp
bGFibGUoKQogewotICAgIHN0YXRpYyBib29sIGF2YWlsYWJpdHlLbm93biA9IGZhbHNlOwotICAg
IHN0YXRpYyBib29sIGlzQXZhaWxhYmxlOwotICAgIGlmICghYXZhaWxhYml0eUtub3duKSB7Ci0g
ICAgICAgIGlzQXZhaWxhYmxlID0gTWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpOwot
ICAgICAgICBhdmFpbGFiaXR5S25vd24gPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gaXNBdmFp
bGFibGU7CisgICAgcmV0dXJuICFpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKS5pc0VtcHR5KCk7CiB9
IAogCiB2b2lkIE1lZGlhUGxheWVyOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCkKQEAgLTI2OCw1ICsz
NjUsNjEgQEAgdm9pZCBNZWRpYVBsYXllcjo6cmVwYWludCgpCiAgICAgICAgIG1fbWVkaWFQbGF5
ZXJDbGllbnQtPm1lZGlhUGxheWVyUmVwYWludCh0aGlzKTsKIH0KIAorCisvLyArKysrKysrKysr
KysrKysrKysrKworLy8gYSBudWxsIHBsYXllciB0byBtYWtlIE1lZGlhUGxheWVyIGxvZ2ljIHNp
bXBsZXIKKworY2xhc3MgTlVMTE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UgeworcHVibGljOgorICAgIE5VTExNZWRpYVBsYXllclByaXZhdGUo
TWVkaWFQbGF5ZXIqKSB7fTsKKyAgICB2aXJ0dWFsIH5OVUxMTWVkaWFQbGF5ZXJQcml2YXRlKCkg
e307CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsTG9hZCgpIHsgfTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgp
IHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSB7IH07ICAgIAorCisgICAgdmlydHVhbCBJ
bnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQorCisg
ICAgdmlydHVhbCBib29sIGhhc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIHsgfTsKKworICAgIHZpcnR1YWwgZmxvYXQg
ZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJl
bnRUaW1lKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0
KSB7IH07CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIHNldEVuZFRpbWUoZmxvYXQpIHsgfTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRSYXRlKGZsb2F0KSB7IH07CisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0
KSB7IH07CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0
YXRlKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQbGF5ZXI6OkVtcHR5OyB9CisgICAgdmlydHVhbCBN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQ
bGF5ZXI6OkRhdGFVbmF2YWlsYWJsZTsgfQorCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vl
a2FibGUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lQnVm
ZmVyZWQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGludCBkYXRhUmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgYm9vbCB0b3RhbEJ5dGVzS25vd24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgdG90YWxCeXRl
cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzTG9hZGVk
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3Qg
SW50UmVjdCYpIHsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JikgeyB9IDsKK307CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSogY3JlYXRlTnVsbE1lZGlhUGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICBy
ZXR1cm4gbmV3IE5VTExNZWRpYVBsYXllclByaXZhdGUocGxheWVyKTsgCit9CisKIH0KICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24g
NDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE1lZGlhUGxheWVyOwotY2xhc3MgTWVk
aWFQbGF5ZXJQcml2YXRlOworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOwogY2xh
c3MgU3RyaW5nOwogCiBjbGFzcyBNZWRpYVBsYXllckNsaWVudCB7CkBAIC01MiwxOSArNTIsMjMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlcGFpbnQoTWVkaWFQbGF5
ZXIqKSB7IH0KIH07CiAKKwogY2xhc3MgTWVkaWFQbGF5ZXIgOiBOb25jb3B5YWJsZSB7CiBwdWJs
aWM6CiAgICAgTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5N
ZWRpYVBsYXllcigpOwotICAgIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gbWVkaWEg
ZW5naW5lIHN1cHBvcnQKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVkLCBJ
c1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcyA9ICIiKTsKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0
PFN0cmluZz4mKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogICAgIAogICAgIElu
dFNpemUgbmF0dXJhbFNpemUoKTsKICAgICBib29sIGhhc1ZpZGVvKCk7CiAgICAgCiAgICAgdm9p
ZCBzZXRGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpIHsgbV9mcmFtZVZpZXcgPSBmcmFt
ZVZpZXc7IH0KKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldygpIHsgcmV0dXJuIG1fZnJhbWVWaWV3
OyB9CiAgICAgYm9vbCBpbk1lZGlhRG9jdW1lbnQoKTsKICAgICAKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhIGdldHRlciBhbmQgc2V0dGVyIGZvciBzaXpl
LgpAQCAtNzMsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CiAgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpOwogICAg
IAotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBsb2FkKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICB2b2lkIGNhbmNlbExv
YWQoKTsKICAgICAKICAgICBib29sIHZpc2libGUoKSBjb25zdDsKQEAgLTEyMiwxMSArMTI2LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcGFpbnQoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgICAg
IAotICAgIGZyaWVuZCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGU7Ci0gICAgCisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZU1lZGlhRW5naW5lcygpOworCiAgICAgTWVkaWFQbGF5ZXJDbGllbnQq
IG1fbWVkaWFQbGF5ZXJDbGllbnQ7Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtX3ByaXZhdGU7
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBtX3ByaXZhdGU7CisgICAgdm9pZCAq
bV9jdXJyZW50TWVkaWFFbmdpbmU7CiAgICAgRnJhbWVWaWV3KiBtX2ZyYW1lVmlldzsKICAgICBJ
bnRSZWN0IG1fcmVjdDsKICAgICBib29sIG1fdmlzaWJsZTsKQEAgLTEzNCw3ICsxMzgsMTUgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX3ZvbHVtZTsKIH07CiAKK3R5cGVkZWYgTWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlKiAoKkNyZWF0ZU1lZGlhRW5naW5lUGxheWVyKShNZWRpYVBsYXllciop
OwordHlwZWRlZiB2b2lkICgqTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcykoSGFzaFNldDxTdHJp
bmc+JiB0eXBlcyk7Cit0eXBlZGVmIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgKCpNZWRpYUVu
Z2luZVN1cHBvcnRzVHlwZSkoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVj
cyk7CisKK3R5cGVkZWYgdm9pZCAoKk1lZGlhRW5naW5lUmVnaXN0cmFyKShDcmVhdGVNZWRpYUVu
Z2luZVBsYXllciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcywgTWVkaWFFbmdpbmVTdXBwb3J0
c1R5cGUpOyAKKworCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2
YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisKKyNpZm5kZWYgTWVk
aWFQbGF5ZXJQcml2YXRlX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlX2gKKworI2lmIEVO
QUJMRShWSURFTykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXll
ci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJp
bmc7CisKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5NZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UoKSB7fTsKKworICAgIHZpcnR1YWwgdm9pZCBs
b2FkKGNvbnN0IFN0cmluZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSA9IDA7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgPSAwOyAgICAKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpID0gMDsKKworICAgIHZpcnR1YWwgZmxv
YXQgZHVyYXRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1l
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0IHRpbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2Vla2luZygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbmRUaW1lKGZsb2F0IHRpbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZs
b2F0IGluUmF0ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSA9IDA7CisKKyAgICB2
aXJ0dWFsIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCBpbnQgZGF0YVJhdGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgdG90YWxC
eXRlc0tub3duKCkgY29uc3QgeyByZXR1cm4gdG90YWxCeXRlcygpID4gMDsgfQorICAgIHZpcnR1
YWwgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGJ5dGVzTG9hZGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29u
c3QgSW50UmVjdCYgcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmKSA9IDAgOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
clByaXZhdGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTMgQEAKIAogI2lmIEVOQUJMRShWSURFTykK
IAotI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVk
aWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5n
aW5lUmVnaXN0cmFyKTsKICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICBJbnRTaXpl
IG5hdHVyYWxTaXplKCkgY29uc3Q7CkBAIC03OCw5ICs3OCw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgc3RhdGlj
IHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7Ci0gICAgc3RhdGljIGJv
b2wgaXNBdmFpbGFibGUoKTsKLQogICAgIC8vIFB1YmxpYyBtZXRob2RzIHRvIGJlIGNhbGxlZCBi
eSBXZWJNZWRpYVBsYXllcgogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCk7CiAgICAgdm9pZCBu
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBAIC05MCw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXBhaW50KCk7CiAKIHByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxh
eWVyKik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5
ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIgKnBsYXllcik7CisgICAgc3RhdGljIHZvaWQg
Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CisgICAgc3RhdGljIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBjb2RlY3MpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKICAgICBN
ZWRpYVBsYXllciogbV9wbGF5ZXI7CiAgICAgdm9pZCogbV9kYXRhOwogfTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNiArMTAxLDE3IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUJ1ZmZl
cmluZ0NhbGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKSAKK3sg
CisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3Ry
YXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQorICAgICAgICByZWdpc3Ry
YXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKwogTWVkaWFQ
bGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAg
ICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fcGxheUJpbigwKQpAQCAtNTkyLDYgKzYwMywx
MyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwCiAgICAgdHlwZXMu
YWRkKFN0cmluZygidmlkZW8veC10aGVvcmErb2dnIikpOwogfQogCitNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gRklYTUU6IGRvIHRoZSByZWFs
IHRoaW5nCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHlwZSA9PSAidmlkZW8v
eC10aGVvcmErb2dnIiA/IChjb2RlY3MgJiYgIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRl
R1NUUGxheUJpbihTdHJpbmcgdXJsKQogewogICAgIEFTU0VSVCghbV9wbGF5QmluKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CkBAIC00NCwxNCArNDQsMTUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxi
YWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKICAg
ICBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBH
c3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKIAotICAgIGNsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZSA6IE5vbmNvcHlhYmxlCisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDog
cHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZQogICAgIHsKICAgICBmcmllbmQgZ2Jv
b2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRXJyb3JDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVz
c2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgZnJpZW5kIGdib29sZWFuIG1lZGlh
UGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdl
LCBncG9pbnRlciBkYXRhKTsKICAgICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRl
U3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIg
ZGF0YSk7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBs
YXllciopOworCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFF
bmdpbmVSZWdpc3RyYXIpOwogICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICAg
ICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpOwpAQCAtOTksMTEgKzEwMCwxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCByZXBhaW50KCk7CiAgICAgICAgIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
aXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBwcml2YXRlOgogCisgICAgICAg
IE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworICAgICAgICBzdGF0aWMgTWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBs
YXllciAqcGxheWVyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+Jik7CisgICAgICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsK
KyAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKICAg
ICAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKICAgICAgICAgdm9pZCBjYW5jZWxTZWVrKCk7CiAg
ICAgICAgIHZvaWQgZW5kUG9pbnRUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4q
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCkBAIC01MiwxMSArNTIsMjggQEAg
Y2xhc3MgV2ViQ29yZU1vdmllT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogTm9uY29weWFibGUgeworY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKLSAgICB+TWVkaWFQbGF5
ZXJQcml2YXRlKCk7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoKTsK
KworICAgIHZvaWQgcmVwYWludCgpOworICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOworICAg
IHZvaWQgcmF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CisgICAgdm9pZCB0
aW1lQ2hhbmdlZCgpOworICAgIHZvaWQgZGlkRW5kKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQoTWVkaWFQbGF5ZXIqKTsKKworICAgIC8vIGVuZ2luZSBzdXBwb3J0
CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OmNyZWF0ZShNZWRpYVBsYXllciAqcGxheWVyKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKwog
ICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29u
c3Q7CiAgICAgCkBAIC05MSwxOSArMTA4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmlzaWJs
ZShib29sKTsKICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcik7CiAgICAgCi0gICAg
dm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCgpOwotICAgIHZv
aWQgc2l6ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRF
bmQoKTsKLSAgICAKLSAgICB2b2lkIHJlcGFpbnQoKTsKICAgICB2b2lkIHBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2
YWlsYWJsZSgpOwotICAgIAotcHJpdmF0ZToKKwogICAgIHZvaWQgY3JlYXRlUVRNb3ZpZShjb25z
dCBTdHJpbmcmIHVybCk7CiAgICAgdm9pZCBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CiAgICAgdm9p
ZCB0ZWFyRG93blZpZGVvUmVuZGVyaW5nKCk7CkBAIC0xMTYsOCArMTIyLDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogICAgIHZvaWQgZG9TZWVrKCk7CiAgICAgdm9pZCBj
YW5jZWxTZWVrKCk7Ci0gICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclBy
aXZhdGU+Kik7Ci0gICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlPiopOworICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ+Kik7CisgICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ+Kik7CiAgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwogICAg
IHZvaWQgc3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGRpc2FibGVVbnN1
cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQpOwpAQCAtMTI5LDggKzEz
NSw4IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPFdlYkNvcmVNb3ZpZU9ic2VydmVyPiBtX29i
amNPYnNlcnZlcjsKICAgICBmbG9hdCBtX3NlZWtUbzsKICAgICBmbG9hdCBtX2VuZFRpbWU7Ci0g
ICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3NlZWtUaW1lcjsKLSAgICBUaW1lcjxNZWRp
YVBsYXllclByaXZhdGU+IG1fZW5kUG9pbnRUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclBy
aXZhdGVRVEtpdD4gbV9zZWVrVGltZXI7CisgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ+IG1fZW5kUG9pbnRUaW1lcjsKICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0
d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAg
ICBib29sIG1fc3RhcnRlZFBsYXlpbmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNpb24g
NDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI4LDExICsxMjgsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogQGludGVyZmFjZSBXZWJDb3JlTW92aWVPYnNlcnZlciA6IE5TT2JqZWN0
CiB7Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtX2NhbGxiYWNrOworICAgIE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0KiBtX2NhbGxiYWNrOwogICAgIE5TVmlldyogbV92aWV3OwogICAgIEJPT0wg
bV9kZWxheUNhbGxiYWNrczsKIH0KLS0oaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQ
cml2YXRlKiljYWxsYmFjazsKKy0oaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQqKWNhbGxiYWNrOwogLSh2b2lkKWRpc2Nvbm5lY3Q7CiAtKHZvaWQpc2V0Vmlldzoo
TlNWaWV3Kil2aWV3OwogLSh2b2lkKXJlcGFpbnQ7CkBAIC0xNTcsMTMgKzE1NywyNSBAQCBzdGF0
aWMgY29uc3QgZmxvYXQgZW5kUG9pbnRUaW1lckludGVydmFsCiBzdGF0aWMgY29uc3QgbG9uZyBt
aW5pbXVtUXVpY2tUaW1lVmVyc2lvbiA9IDB4MDczMDAwMDA7IC8vIDcuMwogI2VuZGlmCiAKLU1l
ZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIp
CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRpYVBs
YXllclByaXZhdGVRVEtpdChwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikK
K3sKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0
U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdChNZWRpYVBsYXllciogcGxheWVyKQogICAgIDog
bV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9vYmpjT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3Jl
TW92aWVPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkKICAgICAsIG1fc2Vl
a1RvKC0xKQogICAgICwgbV9lbmRUaW1lKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkKLSAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1l
ckZpcmVkKQotICAgICwgbV9lbmRQb2ludFRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6
OmVuZFBvaW50VGltZXJGaXJlZCkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6c2Vla1RpbWVyRmlyZWQpCisgICAgLCBtX2VuZFBvaW50VGltZXIodGhp
cywgJk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpCiAgICAgLCBt
X25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OkRhdGFVbmF2YWlsYWJsZSkKICAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2Up
CkBAIC0xNzcsNyArMTg5LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZh
dGUoTQogewogfQogCi1NZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQor
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6On5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpCiB7CiAg
ICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwogCkBAIC0xODUsNyArMTk3LDcgQEAgTWVkaWFQ
bGF5ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKAogICAgIFttX29iamNPYnNlcnZlci5n
ZXQoKSBkaXNjb25uZWN0XTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFU
TW92aWUoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
cmVhdGVRVE1vdmllKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCld
OwogICAgIApAQCAtMjYxLDcgKzI3Myw3IEBAIHN0YXRpYyBDbGFzcyBRVFZpZGVvUmVuZGVyZXJD
bGFzcygpCiAgICAgIHJldHVybiBRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5Q2xhc3M7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllVmlldygpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllVmlldygpCiB7CiAgICAgZGV0YWNoUVRN
b3ZpZVZpZXcoKTsKIApAQCAtMjc5LDcgKzI5MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjcmVhdGVRVE1vdmllVmkKIAogICAgIG1fcXRNb3ZpZVZpZXcuYWRvcHROUyhbW1FUTW92aWVW
aWV3IGFsbG9jXSBpbml0XSk7CiAgICAgc2V0UmVjdChtX3BsYXllci0+cmVjdCgpKTsKLSAgICBO
U1ZpZXcqIHBhcmVudFZpZXcgPSBtX3BsYXllci0+bV9mcmFtZVZpZXctPmRvY3VtZW50Vmlldygp
OworICAgIE5TVmlldyogcGFyZW50VmlldyA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZG9jdW1l
bnRWaWV3KCk7CiAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgp
XTsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBh
IHB1YmxpYyBjYWxsIGluIFRpZ2VyLCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhl
IGNvbXBpbGVyIGhhcHB5CkBAIC0zMDEsNyArMzEzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmNyZWF0ZVFUTW92aWVWaQogICAgICAgICB3a1FUTW92aWVWaWV3U2V0RHJhd1N5bmNocm9u
b3VzbHkobV9xdE1vdmllVmlldy5nZXQoKSwgWUVTKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRldGFjaFFUTW92aWVWaWV3KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmRldGFjaFFUTW92aWVWaWV3KCkKIHsKICAgICBpZiAobV9xdE1vdmllVmlldykgewogICAgICAg
ICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0VmlldzpuaWxdOwpAQCAtMzE2LDcgKzMyOCw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkZXRhY2hRVE1vdmllVmkKICAgICB9CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRWaWRlb1JlbmRlcmVyKCkKIHsKICAgICBkZXN0
cm95UVRWaWRlb1JlbmRlcmVyKCk7CiAKQEAgLTMzNCw3ICszNDYsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6Y3JlYXRlUVRWaWRlb1JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRlc3Ryb3lRVFZpZGVvUmVuZGVyZXIoKQogewogICAg
IGlmICghbV9xdFZpZGVvUmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCw5ICszNjIs
OSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGVzdHJveVFUVmlkZW9SCiAgICAgbV9xdFZp
ZGVvUmVuZGVyZXIgPSBuaWw7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZp
ZGVvUmVuZGVyaW5nKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9S
ZW5kZXJpbmcoKQogewotICAgIGlmICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0TW92
aWUpCisgICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAhUVRW
aWRlb1JlbmRlcmVyQ2xhc3MoKSApCkBAIC0zNjEsNyArMzczLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNldFVwVmlkZW9SZW5kZQogICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIo
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmco
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygp
CiB7CiAgICAgaWYgKG1fcXRNb3ZpZVZpZXcpCiAgICAgICAgIGRldGFjaFFUTW92aWVWaWV3KCk7
CkBAIC0zNjksNyArMzgxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlk
ZW9SZQogICAgICAgICBkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7CiB9CiAKLVFUVGltZSBNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZVFUVGltZShmbG9hdCB0aW1lKSBjb25zdAorUVRUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVFRpbWUoZmxvYXQgdGltZSkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIFFUTWFrZVRpbWUoMCwgNjAwKTsK
QEAgLTM3Nyw3ICszODksNyBAQCBRVFRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVFRp
bWUoCiAgICAgcmV0dXJuIFFUTWFrZVRpbWUodGltZSAqIHRpbWVTY2FsZSwgdGltZVNjYWxlKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewog
ICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMzk4LDcgKzQxMCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKICAgICBbbV9vYmpj
T2JzZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6Tk9dOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGxheSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCkK
IHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDEyLDcgKzQyNCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKICAgICBzdGFydEVuZFBvaW50VGlt
ZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGF1c2UoKQogewogICAgIGlmICghbV9xdE1vdmll
KQogICAgICAgICByZXR1cm47CkBAIC00MjYsNyArNDM4LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhdXNlKCkKICAgICBtX2VuZFBvaW50VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBN
ZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpkdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtNDM2LDcgKzQ0OCw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb24oKSBjb24KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRpbWUudGlt
ZVZhbHVlKSAvIHRpbWUudGltZVNjYWxlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6
OmN1cnJlbnRUaW1lKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjdXJy
ZW50VGltZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNDQ0LDcgKzQ1Niw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRp
bWUoKSAKICAgICByZXR1cm4gbWluKHN0YXRpY19jYXN0PGZsb2F0Pih0aW1lLnRpbWVWYWx1ZSkg
LyB0aW1lLnRpbWVTY2FsZSwgbV9lbmRUaW1lKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNlZWsoZmxvYXQgdGltZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWso
ZmxvYXQgdGltZSkKIHsKICAgICBjYW5jZWxTZWVrKCk7CiAgICAgCkBAIC00NjEsNyArNDczLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZQogICAgICAgICBtX3Nl
ZWtUaW1lci5zdGFydCgwLCAwLjVmKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRv
U2VlaygpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKCkgCiB7CiAgICAg
UVRUaW1lIHF0dGltZSA9IGNyZWF0ZVFUVGltZShtX3NlZWtUbyk7CiAgICAgLy8gc2V0Q3VycmVu
dFRpbWUgZ2VuZXJhdGVzIHNldmVyYWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJk
cwpAQCAtNDc3LDEzICs0ODksMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2Vlaygp
IAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OmNhbmNlbFNlZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9z
ZWVrVGltZXIuc3RvcCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVy
RmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKQog
eyAgICAgICAgCiAgICAgaWYgKCFtX3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGlt
ZSgpID09IG1fc2Vla1RvKSB7CiAgICAgICAgIGNhbmNlbFNlZWsoKTsKQEAgLTUwNCwxOSArNTE2
LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7CiAgICAg
bV9lbmRUaW1lID0gdGltZTsKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQo
KQogewogICAgIGlmIChtX2VuZFRpbWUgPCBkdXJhdGlvbigpICYmIG1fc3RhcnRlZFBsYXlpbmcg
JiYgIW1fZW5kUG9pbnRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2VuZFBvaW50VGltZXIu
c3RhcnRSZXBlYXRpbmcoZW5kUG9pbnRUaW1lckludGVydmFsKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+
KikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmVuZFBvaW50VGltZXJGaXJlZChUaW1l
cjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKQogewogICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50
VGltZSgpOwogICAgIApAQCAtNTI3LDQyICs1MzksNDIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmVuZFBvaW50VGltZXJGaQogICAgIH0KIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
OnBhdXNlZCgpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQoKSBj
b25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gW21fcXRNb3ZpZS5nZXQoKSByYXRlXSA9PSAwOwogfQogCi1ib29sIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpz
ZWVraW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBtX3NlZWtUbyA+PSAwOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVy
UHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6bmF0dXJhbFNpemUoKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwogICAgIHJldHVybiBJbnRTaXplKFtbbV9xdE1vdmllLmdldCgp
IGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0p
OwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9x
dE1vdmllKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFtbbV9xdE1vdmllLmdl
dCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllSGFzVmlkZW9BdHRyaWJ1dGVdIGJvb2xWYWx1ZV07
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsK
ICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAgIFttX3F0TW92aWUuZ2V0
KCkgc2V0Vm9sdW1lOnZvbHVtZV07ICAKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dFJhdGUoZmxvYXQgcmF0ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJhdGUo
ZmxvYXQgcmF0ZSkKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NTcwLDcgKzU4Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHIK
ICAgICAgICAgW21fcXRNb3ZpZS5nZXQoKSBzZXRSYXRlOnJhdGVdOwogfQogCi1pbnQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0CitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRhdGFSYXRlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC01NzgsMjYgKzU5MCwyNiBAQCBpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRh
UmF0ZSgpIGNvbnN0CiB9CiAKIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVm
ZmVyZWQoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVCdWZm
ZXJlZCgpIGNvbnN0CiB7CiAgICAgLy8gcnRzcCBzdHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKICAg
ICByZXR1cm4gbV9pc1N0cmVhbWluZyA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGlu
ZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuIGlzaW5mKGR1cmF0
aW9uKCkpID8gMCA6IG1heFRpbWVMb2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2
YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIHdrUVRNb3ZpZU1heFRpbWVMb2FkZWQobV9xdE1vdmllLmdl
dCgpKTsgCiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmJ5dGVzTG9hZGVkKCkgY29u
c3QKIHsKICAgICBmbG9hdCBkdXIgPSBkdXJhdGlvbigpOwogICAgIGlmICghZHVyKQpAQCAtNjA1
LDE5ICs2MTcsMTkgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAog
ICAgIHJldHVybiB0b3RhbEJ5dGVzKCkgKiBtYXhUaW1lTG9hZGVkKCkgLyBkdXI7CiB9CiAKLWJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAgICByZXR1
cm4gdG90YWxCeXRlcygpID4gMDsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0
b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3Rh
bEJ5dGVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllRGF0
YVNpemVBdHRyaWJ1dGVdIGludFZhbHVlXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OmNhbmNlbExvYWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCgp
CiB7CiAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgdGhp
cz8KICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25l
dHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKQpAQCAtNjI5LDcgKzY0MSw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0Ojp1cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTY4Mywy
NyArNjk1LDI3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAg
ICAgICBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojpsb2FkU3RhdGVDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRT
dGF0ZUNoYW5nZWQoKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmF0ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cmF0ZUNoYW5nZWQoKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2l6ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c2l6ZUNoYW5nZWQoKQogewogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGltZUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dGltZUNoYW5nZWQoKQogewogICAg
IHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRpZEVuZCgpCiB7CiAgICAgbV9lbmRQb2ludFRpbWVyLnN0b3AoKTsKICAgICBtX3N0YXJ0
ZWRQbGF5aW5nID0gZmFsc2U7CkBAIC03MTQsNyArNzI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OmRpZEVuZCgpCiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAordm9pZCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSAKIHsgCiAgICAg
aWYgKCFtX3F0TW92aWVWaWV3KSAKICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzc0Myw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSZWN0KGNvbnN0IEkKICAgICB9ICAgCiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wgYikKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnNldFZpc2libGUoYm9vbCBiKQogewogICAgIGlmIChtX3Zpc2li
bGUgIT0gYikgewogICAgICAgICBtX3Zpc2libGUgPSBiOwpAQCAtNzQzLDcgKzc1NSw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKGJvb2wKICAgICB9CiB9CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpyZXBhaW50KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OnJlcGFpbnQoKQogewogI2lmIERSQVdfRlJBTUVfUkFURQogICAgIGlmIChtX3N0YXJ0ZWRQ
bGF5aW5nKSB7CkBAIC03NTcsNyArNzY5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJl
cGFpbnQoKQogICAgIG1fcGxheWVyLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzg3LDcgKzc5OSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0MKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICAv
LyBEcmF3IHRoZSBmcmFtZSByYXRlIG9ubHkgYWZ0ZXIgaGF2aW5nIHBsYXllZCBtb3JlIHRoYW4g
MTAgZnJhbWVzLgogICAgIGlmIChtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPiAxMCkgewotICAg
ICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+bV9mcmFtZVZpZXcgPyBtX3BsYXllci0+bV9m
cmFtZVZpZXctPmZyYW1lKCkgOiBOVUxMOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXll
ci0+ZnJhbWVWaWV3KCkgPyBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiBOVUxMOwog
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDog
TlVMTDsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRvY3VtZW50ID8gZG9jdW1l
bnQtPnJlbmRlcmVyKCkgOiBOVUxMOwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9
IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiBOVUxMOwpAQCAtODEzLDIzICs4MjUsNDMg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQwogICAgIFttX29iamNP
YnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQorc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKLSAgICBOU0FycmF5KiBmaWxl
VHlwZXMgPSBbUVRNb3ZpZSBtb3ZpZUZpbGVUeXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107Ci0g
ICAgaW50IGNvdW50ID0gW2ZpbGVUeXBlcyBjb3VudF07Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4g
PCBjb3VudDsgbisrKSB7Ci0gICAgICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZTdHJpbmdSZWY+KFtmaWxlVHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7Ci0gICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElk
ZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7
Ci0gICAgICAgIGlmICghdXRpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWltZShBZG9wdENGLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0
aENsYXNzKHV0aS5nZXQoKSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwotICAgICAgICBpZiAoIW1p
bWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdHlwZXMuYWRkKG1pbWUuZ2V0KCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOwor
ICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICgh
dHlwZUxpc3RJbml0aWFsaXplZCkgeworICAgICAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRN
b3ZpZSBtb3ZpZUZpbGVUeXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107CisgICAgICAgIGludCBj
b3VudCA9IFtmaWxlVHlwZXMgY291bnRdOworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNv
dW50OyBuKyspIHsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZTdHJpbmdSZWY+KFtmaWxlVHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7CisgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aShBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJy
ZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dCwgTlVM
TCkpOworICAgICAgICAgICAgaWYgKCF1dGkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG1pbWUoQWRvcHRDRiwgVVRUeXBlQ29w
eVByZWZlcnJlZFRhZ1dpdGhDbGFzcyh1dGkuZ2V0KCksIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsK
KyAgICAgICAgICAgIGlmICghbWltZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGNhY2hlLmFkZChtaW1lLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICB0eXBlTGlz
dEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9Ci19IAogICAgIAotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGU6OmlzQXZhaWxhYmxlKCkKKyAgICByZXR1cm4gY2FjaGU7Cit9IAorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5
cGVzKQoreworICAgIHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOworfSAKKworTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3VwcG9ydHNUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gb25seSByZXR1
cm4gIklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZvciBub3cg
YXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFzayBRVCBpZiBpdCBzdXBwb3J0cyBhbgorICAgIC8vICBl
eHRlbmRlZCBNSU1FIHR5cGUgeWV0CisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlu
cyh0eXBlKSA/IChjb2RlY3MgJiYgIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5
QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6Oklz
Tm90U3VwcG9ydGVkOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojppc0F2YWls
YWJsZSgpCiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICBTSW50MzIgdmVyc2lvbjsK
QEAgLTg1MCw3ICs4ODIsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUo
KQogI2VuZGlmCiB9CiAgICAgCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlzYWJsZVVuc3Vw
cG9ydGVkVHJhY2tzKHVuc2lnbmVkJiBlbmFibGVkVHJhY2tDb3VudCkKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxl
ZFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFtX3F0TW92aWUpIHsKICAgICAgICAgZW5hYmxlZFRy
YWNrQ291bnQgPSAwOwpAQCAtOTM5LDcgKzk3MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpkaXNhYmxlVW5zdXBwb3IKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVNb3ZpZU9ic2VydmVy
CiAKLS0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVyUHJpdmF0ZSAqKWNhbGxiYWNr
CistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVRVEtpdCAqKWNhbGxi
YWNrCiB7CiAgICAgbV9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIHJldHVybiBbc3VwZXIgaW5p
dF07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0
ZVBob25vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9N
ZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwLDYgKzExMCwxOCBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZShNCiAgICAgY29ubmVjdChtX21lZGlhT2JqZWN0LCBTSUdOQUwodG90YWxUaW1l
Q2hhbmdlZChxaW50NjQpKSwgdGhpcywgU0xPVCh0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCkpKTsK
IH0KIAorTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNy
ZWF0ZShNZWRpYVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXll
clByaXZhdGUocGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVy
TWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChp
c0F2YWlsYWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBl
cywgc3VwcG9ydHNUeXBlKTsKK30KKworCiBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXll
clByaXZhdGUoKQogewogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6
ZHRvciBkZWxldGluZyB2aWRlb3dpZGdldCIpOwpAQCAtMTMxLDYgKzE0MywxMyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAorTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAg
IC8vIEZJWE1FOiBkbyB0aGUgcmVhbCB0aGluZworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwogYm9vbCBNZWRpYVBsYXll
clByaXZhdGU6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBib29sIGhhc1ZpZGVvID0gbV9tZWRp
YU9iamVjdC0+aGFzVmlkZW8oKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaAkocmV2aXNpb24gNDA2NzUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw3IEBACiAjaWZuZGVmIE1lZGlhUGxheWVy
UHJpdmF0ZVBob25vbl9oCiAjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbl9oCiAKLSNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNs
dWRlIDxwaG9ub25uYW1lc3BhY2UuaD4KQEAgLTQwLDEyICszOSwxMiBAQCBRVF9FTkRfTkFNRVNQ
QUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZSA6IHB1YmxpYyBRT2JqZWN0LCBOb25jb3B5YWJsZSB7CisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQ
cml2YXRlIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2UgewogCiAgICAgICAgIFFfT0JKRUNUCiAKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lZGlhUGxh
eWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICAgICAgfk1lZGlhUGxheWVyUHJp
dmF0ZSgpOwogCiAgICAgICAgIC8vIFRoZXNlIGVudW1zIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcK
QEAgLTExMiw4ICsxMTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0Jik7CiAKICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgp
ICAgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBib29sIGV2ZW50
RmlsdGVyKFFPYmplY3QqLCBRRXZlbnQqKTsKQEAgLTEzMCw2ICsxMjcsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHRvdGFsVGltZUNoYW5nZWQocWludDY0KTsKIAogICAg
IHByaXZhdGU6CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworICAg
ICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZh
dGU6OmNyZWF0ZShNZWRpYVBsYXllciAqcGxheWVyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0
U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CisgICAgICAgIHN0YXRpYyBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgY29kZWNzKTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJl
dHVybiB0cnVlOyB9CisKICAgICAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKIAogICAgICAgICBN
ZWRpYVBsYXllciogbV9wbGF5ZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5j
cHAJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQg
KzQ4LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
CitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpj
cmVhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5
ZXJQcml2YXRlUVRXaW4ocGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdp
bjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7
CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1
cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCiBzdGF0aWMgY29uc3QgZG91YmxlIGVu
ZFBvaW50VGltZXJJbnRlcnZhbCA9IDAuMDIwOwotICAgIAotTWVkaWFQbGF5ZXJQcml2YXRlOjpN
ZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKKworTWVkaWFQbGF5ZXJQcml2
YXRlUVRXaW46Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAg
ICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3NlZWtUbygtMSkKICAgICAsIG1fZW5kVGlt
ZShudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpCi0gICAgLCBtX3NlZWtUaW1lcih0
aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCkKLSAgICAsIG1fZW5kUG9p
bnRUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlOjplbmRQb2ludFRpbWVyRmlyZWQpCisg
ICAgLCBtX3NlZWtUaW1lcih0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnNlZWtUaW1l
ckZpcmVkKQorICAgICwgbV9lbmRQb2ludFRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVR
VFdpbjo6ZW5kUG9pbnRUaW1lckZpcmVkKQogICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5
ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpEYXRhVW5hdmFpbGFi
bGUpCiAgICAgLCBtX3N0YXJ0ZWRQbGF5aW5nKGZhbHNlKQpAQCAtNjgsMTEgKzgwLDExIEBAIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE0KIHsKIH0KIAotTWVkaWFQbGF5
ZXJQcml2YXRlOjp+TWVkaWFQbGF5ZXJQcml2YXRlKCkKK01lZGlhUGxheWVyUHJpdmF0ZVFUV2lu
Ojp+TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW4oKQogewogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRX
aW46OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCFRVE1vdmllV2luOjppbml0
aWFsaXplUXVpY2tUaW1lKCkpIHsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6TG9hZEZhaWxlZDsKQEAgLTk3LDcgKzEwOSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
Ojpsb2FkKGNvbnN0IFN0cmkKICAgICBtX3F0TW92aWUtPnNldFZpc2libGUobV9wbGF5ZXItPm1f
dmlzaWJsZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5KCkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRXaW46OnBsYXkoKQogewogICAgIGlmICghbV9xdE1vdmllKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTAsNyArMTIyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6
OnBsYXkoKQogICAgIHN0YXJ0RW5kUG9pbnRUaW1lcklmTmVlZGVkKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpw
YXVzZSgpCiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMiwy
MSArMTM0LDIxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCiAgICAgbV9lbmRQ
b2ludFRpbWVyLnN0b3AoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkdXJhdGlv
bigpIGNvbnN0CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6ZHVyYXRpb24oKSBjb25z
dAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
bV9xdE1vdmllLT5kdXJhdGlvbigpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1
cnJlbnRUaW1lKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpjdXJyZW50
VGltZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBtaW4obV9xdE1vdmllLT5jdXJyZW50VGltZSgpLCBtX2VuZFRpbWUpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2VlayhmbG9hdCB0aW1lKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6c2VlayhmbG9hdCB0aW1lKQogewogICAgIGNhbmNlbFNlZWsoKTsK
ICAgICAKQEAgLTE1Myw3ICsxNjUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayhm
bG9hdCB0aW1lCiAgICAgICAgIG1fc2Vla1RpbWVyLnN0YXJ0KDAsIDAuNWYpOwogfQogICAgIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVFdpbjo6ZG9TZWVrKCkgCiB7CiAgICAgZmxvYXQgb2xkUmF0ZSA9IG1fcXRNb3ZpZS0+cmF0
ZSgpOwogICAgIG1fcXRNb3ZpZS0+c2V0UmF0ZSgwKTsKQEAgLTE2NSwxMyArMTc3LDEzIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkb1NlZWsoKSAKICAgICBjYW5jZWxTZWVrKCk7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRXaW46OmNhbmNlbFNlZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9z
ZWVrVGltZXIuc3RvcCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVy
RmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUV2luOjpzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVFdpbj4qKQog
eyAgICAgICAgCiAgICAgaWYgKCFtX3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGlt
ZSgpID09IG1fc2Vla1RvKSB7CiAgICAgICAgIGNhbmNlbFNlZWsoKTsKQEAgLTE5MiwxOSArMjA0
LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7CiAgICAg
bV9lbmRUaW1lID0gdGltZTsKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQo
KQogewogICAgIGlmIChtX2VuZFRpbWUgPCBkdXJhdGlvbigpICYmIG1fc3RhcnRlZFBsYXlpbmcg
JiYgIW1fZW5kUG9pbnRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2VuZFBvaW50VGltZXIu
c3RhcnRSZXBlYXRpbmcoZW5kUG9pbnRUaW1lckludGVydmFsKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+
KikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmVuZFBvaW50VGltZXJGaXJlZChUaW1l
cjxNZWRpYVBsYXllclByaXZhdGVRVFdpbj4qKQogewogICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50
VGltZSgpOwogICAgIGlmICh0aW1lID49IG1fZW5kVGltZSkgewpAQCAtMjEzLDIxICsyMjUsMjEg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaQogICAgIH0KIH0KIAot
Ym9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Citib29sIE1lZGlhUGxheWVy
UHJpdmF0ZVFUV2luOjpwYXVzZWQoKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gbV9xdE1vdmllLT5yYXRlKCkgPT0gMC4wZjsK
IH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtpbmcoKSBjb25zdAorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6c2Vla2luZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92
aWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9zZWVrVG8gPj0gMDsKIH0K
IAotSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKCkgY29uc3QKK0ludFNp
emUgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKQEAgLTIzNywyMSArMjQ5
LDIxIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSgKICAgICByZXR1
cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6
Omhhc1ZpZGVvKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Omhhc1ZpZGVv
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBtX3F0TW92aWUtPmhhc1ZpZGVvKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VFdpbjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKHZvbHVtZSk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUV2luOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7CiAgICAgaWYgKCFtX3F0TW92
aWUpCiAgICAgICAgIHJldHVybjsKQEAgLTI1OSwzMiArMjcxLDMyIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHIKICAgICAgICAgbV9xdE1vdmllLT5zZXRSYXRlKHJh
dGUpOwogfQogCi1pbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0CitpbnQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmRhdGFSYXRlKCkgY29uc3QKIHsKICAgICAvLyBUaGlz
IGlzIG5vdCB1c2VkIGF0IHRoZSBtb21lbnQKICAgICByZXR1cm4gMDsKIH0KIAotZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlUVRXaW46Om1heFRpbWVCdWZmZXJlZCgpIGNvbnN0CiB7CiAgICAgLy8gcnRzcCBz
dHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKICAgICByZXR1cm4gbV9pc1N0cmVhbWluZyA/IDAgOiBt
YXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNl
ZWthYmxlKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjptYXhUaW1lU2Vl
a2FibGUoKSBjb25zdAogewogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3Ry
ZWFtCiAgICAgcmV0dXJuICFpc2Zpbml0ZShkdXJhdGlvbigpKSA/IDAgOiBtYXhUaW1lTG9hZGVk
KCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUxvYWRlZCgpIGNvbnN0
CitmbG9hdCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX3F0
TW92aWUtPm1heFRpbWVMb2FkZWQoKTsgCiB9CiAKLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0yOTUsMTkgKzMwNywxOSBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OmJ5dGVzTG9hZGVkCiAgICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSAqIG1heFRpbWUgLyBkdXI7CiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAorYm9v
bCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gdG90YWxCeXRlcygpID4gMDsKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2lu
Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1fcXRNb3ZpZS0+ZGF0YVNpemUoKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdp
bjo6Y2FuY2VsTG9hZCgpCiB7CiAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6
OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzE4LDcgKzMzMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpj
YW5jZWxMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjp1cGRh
dGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0
YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVh
ZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTM2OSw3ICszODEsNyBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKIH0KIAogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmRpZEVuZCgpCiB7CiAg
ICAgbV9lbmRQb2ludFRpbWVyLnN0b3AoKTsKICAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7
CkBAIC0zODAsMjAgKzM5MiwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlkRW5kKCkK
ICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
V2luOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAogeyAKICAgICBpZiAobV9xdE1vdmllKQog
ICAgICAgICBtX3F0TW92aWUtPnNldFNpemUoci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUoYm9vbCBiKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6c2V0VmlzaWJsZShib29sIGIpCiB7CiAgICAgaWYgKCFtX3F0TW92
aWUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3F0TW92aWUtPnNldFZpc2libGUoYik7CiB9CiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0
IEludFJlY3QmIHIpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHAtPnBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhbV9xdE1vdmllKQogICAgICAgICByZXR1cm47CkBAIC00MjcsNDMgKzQzOSw2
NCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAjZW5kaWYKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3Ry
aW5nPiYgdHlwZXMpCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewot
ICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygpOwot
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxlbjsKLSAgICAgICAgUVRNb3Zp
ZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7Ci0gICAgICAgIGlmIChs
ZW4pCi0gICAgICAgICAgICB0eXBlcy5hZGQoU3RyaW5nKGNoYXJhY3RlciwgbGVuKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7CisgICAgc3Rh
dGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0eXBlTGlz
dEluaXRpYWxpemVkKSB7CisJCXVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBw
b3J0ZWRUeXBlcygpOworCQlmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewor
CQkJY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKKwkJCXVuc2lnbmVkIGxlbjsKKwkJCVFUTW92aWVX
aW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOworCQkJaWYgKGxlbikKKwkJ
CQljYWNoZS5hZGQoU3RyaW5nKGNoYXJhY3RlciwgbGVuKSk7CisJCX0KKworICAgICAgICB0eXBl
TGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgcmV0dXJuIGNhY2hlOwog
fSAKIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlw
ZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9IAorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUV2luOjppc0F2YWlsYWJsZSgpCiB7CiAgICAgcmV0dXJuIFFUTW92aWVXaW46
OmluaXRpYWxpemVRdWlja1RpbWUoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1v
dmllRW5kZWQoUVRNb3ZpZVdpbiogbW92aWUpCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICAvLyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQi
IGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3
YXkgdG8gYXNrIFFUIGlmIGl0IHN1cHBvcnRzIGFuCisgICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlw
ZQorICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkgPyAoY29kZWNzICYm
ICFjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVkaWFQ
bGF5ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bW92aWVFbmRlZChRVE1vdmllV2luKiBtb3Zp
ZSkKIHsKICAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKICAgICBkaWRFbmQo
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6Om1vdmllTG9hZFN0YXRlQ2hhbmdlZChR
VE1vdmllV2luKiBtb3ZpZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllTG9h
ZFN0YXRlQ2hhbmdlZChRVE1vdmllV2luKiBtb3ZpZSkKIHsKICAgICBBU1NFUlQobV9xdE1vdmll
LmdldCgpID09IG1vdmllKTsKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6Om1vdmllVGltZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUV2luOjptb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmll
KQogewogICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUpOwogICAgIHVwZGF0ZVN0
YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKiBtb3ZpZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3Zp
ZVdpbiogbW92aWUpCiB7CiAgICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CiAj
aWYgRFJBV19GUkFNRV9SQVRFCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAkocmV2
aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKFZJREVPKQogCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPFFU
TW92aWVXaW4uaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NCwxMCArNDQsMTEgQEAg
Y2xhc3MgSW50U2l6ZTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIE1l
ZGlhUGxheWVyUHJpdmF0ZSA6IFFUTW92aWVXaW5DbGllbnQsIE5vbmNvcHlhYmxlIHsKK2NsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSwgcHVibGljIFFUTW92aWVXaW5DbGllbnQgewogcHVibGljOgotICAgIE1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciopOwotICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsKKyAgICBz
dGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKwor
ICAgIH5NZWRpYVBsYXllclByaXZhdGVRVFdpbigpOwogICAgIAogICAgIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CkBAIC04OCwxNSArODks
MTUgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAK
IHByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW4oTWVkaWFQbGF5ZXIqKTsKKwog
ICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAgICAgdm9pZCBkb1NlZWsoKTsKICAgICB2b2lkIGNh
bmNlbFNlZWsoKTsKLSAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJp
dmF0ZT4qKTsKLSAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclBy
aXZhdGU+Kik7CisgICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZh
dGVRVFdpbj4qKTsKKyAgICB2b2lkIGVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXll
clByaXZhdGVRVFdpbj4qKTsKICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCkgY29uc3Q7CiAgICAg
dm9pZCBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogCkBAIC0xMDQsMTMgKzEwNSwxOSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3Zp
ZVdpbiopOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKik7Ci0g
ICAgICAKKworICAgIC8vIGVuZ2luZSBzdXBwb3J0CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNyZWF0ZShNZWRpYVBsYXll
ciopOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYg
dHlwZXMpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMg
Ym9vbCBpc0F2YWlsYWJsZSgpOworCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIE93
blB0cjxRVE1vdmllV2luPiBtX3F0TW92aWU7CiAgICAgZmxvYXQgbV9zZWVrVG87CiAgICAgZmxv
YXQgbV9lbmRUaW1lOwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9zZWVrVGltZXI7
Ci0gICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX2VuZFBvaW50VGltZXI7CisgICAgVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW4+IG1fc2Vla1RpbWVyOworICAgIFRpbWVyPE1lZGlh
UGxheWVyUHJpdmF0ZVFUV2luPiBtX2VuZFBvaW50VGltZXI7CiAgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CiAgICAgYm9vbCBtX3N0YXJ0ZWRQbGF5aW5nOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27469</attachid>
            <date>2009-02-08 14:09:52 -0800</date>
            <delta_ts>2009-02-10 14:15:44 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>all-platform-prototype-patch.txt</filename>
            <type>text/plain</type>
            <size>75735</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDc1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTk5IEBACisyMDA5LTAyLTA3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQnVnIDIzNzk3OiBBIHBsYXRmb3JtIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBt
b3JlIHRoYW4gb25lIG1lZGlhIGVuZ2luZSBmb3IgPHZpZGVvPiBhbmQgPGF1ZGlvPgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3OTcKKworICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogYWRkIE1lZGlhUGxheWVyUHJp
dmF0ZS5oCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZCk6IHNlbGVjdE1lZGlhVVJMIG5vdyByZXR1
cm5zIGEgTUlNRSB0eXBlLCBwYXNzIGl0IHRvCisgICAgICAgIE1lZGlhUGxheWVyOjpsb2FkIHNv
IGl0IGNhbiBjaG9vc2UgdGhlIHJpZ2h0IG1lZGlhIGVuZ2luZQorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFVUkwpOiByZW5hbWVkIGZyb20gcGlja01lZGlh
LiB1c2UgTUlNRVR5cGVSZWdpc3RyeQorICAgICAgICBmdW5jdGlvbnMgdG8gc3RyaXAgcGFyYW1z
IGZyb20gdGhlIHVybCBhbmQgZXh0cmFjdCB0aGUgY29kZWNzIHBhcmFtZXRlci4gY2FsbCAKKyAg
ICAgICAgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZSB0byBzZWUgaWYgd2UgY2FuIG9wZW4gdGhl
IGZpbGUgc2luY2Ugb25seSBhIG1lZG9hIGVuZ2luZSBjYW4KKyAgICAgICAgYW5zd2VyIHF1ZXN0
aW9ucyBhYm91dCBzdXBwb3J0ZWQgdHlwZStjb2RlY3MuCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21NSU1F
VHlwZSk6IE5ldywgZmluZCBhbmQgcmV0dXJuIGEgTUlNRSB0eXBlIHBhcmFtZXRlcgorICAgICAg
ICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBl
KTogTmV3LCBzdHJpcCBhbGwgcGFyYW1ldGVycyBmcm9tIGEgTUlNRSB0eXBlCisgICAgICAgICog
cGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJGYWN0b3J5
OjpNZWRpYVBsYXllckZhY3RvcnkpOiBOZXcsIGZhY3RvcnkgY29uc3RydWN0b3IuCisgICAgICAg
IChXZWJDb3JlOjppbnN0YWxsZWRNZWRpYUVuZ2luZXMpOiBOZXcsIHJldHVybnMgdmVjdG9yIG9m
IGFsbCBpbnN0YWxsZWQgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6OmFkZE1lZGlhRW5naW5l
KTogTmV3LCBhZGQgYSBtZWRpYSBlbmdpbmUgdG8gdGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29y
ZTo6Y2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3MpOiBOZXcsIHJldHVybiBhbiBlbmdp
bmUgdGhhdCBtaWdodCBzdXBwb3J0IGEgTUlNRSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXI6Ok1lZGlhUGxheWVyKTogY3JlYXRlIE5VTEwgbWVkaWEgcGxheWVyIHNvIHdlIGhh
dmUgYSBkZWZhdWx0CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IFRha2Ug
TUlNRSB0eXBlIGFzIHdlbGwgYXMgdXJsLCBzaW5jZSB3ZSBuZWVkIGl0IHRvIGZpbmQgdGhlIHJp
Z2h0CisgICAgICAgICAgbWVkaWEgZW5naW5lLiBJZiBubyBNSU1FIHR5cGUgaXMgcHJvdmlkZWQs
IHRyeSB0byBkZXZpbmUgb25lIGZyb20gdGhlIHVybC4gQ2hvb3NlIGEgbWVkaWEgZW5naW5lCisg
ICAgICAgICAgYmFzZWQgb24gdGhlIE1JTUUgdHlwZSBhbmQgY29kZWNzIHBhcmFtZXRlci4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpjdXJyZW50VGltZSk6IHJlbW92ZSBleGNlc3Mg
d2hpdGUgc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBl
KTogIFRha2UgY29kZWNzIHBhcmFtIGFzIHdlbGwgYXMgTUlNRSB0eXBlLiBSZXR1cm4gZW51bSBz
byB3ZSBjYW4KKyAgICAgICAgaW5kaWNhdGUgIm1heWJlIiBjb25kaXRpb24uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOiBCdWlsZCB1cCBsaXN0IG9m
IE1JTUUgdHlwZXMgYnkgY29uc3VsdGluZyBhbGwgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSk6IHJldHVybiB0cnVlIGlmIGFueSBtZWRpYSBlbmdp
bmUgaXMgaW5zdGFsbGVkLgorCisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlKTogCisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVk
aWFQbGF5ZXJQcml2YXRlOjp+TlVMTE1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5V
TExNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVM
TE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQ
cml2YXRlOjpuYXR1cmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZh
dGU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6
OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFZvbHVtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bik6
CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlTnVsbE1lZGlhUGxheWVyKToKKyAgICAgICAgRG8gbm90aGluZyBtZWRp
YSBwbGF5ZXIgc28gTWVkaWFQbGF5ZXIgZG9lc24ndCBoYXZlIHRvIE5VTEwgY2hlY2sgYmVmb3Jl
IGNhbGxpbmcgY3VycmVudCBlbmdpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Oik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllcjo6ZnJhbWVWaWV3KTogYWNjZXNzb3IgZnVuY3Rpb24uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDogTmV3LCBk
ZWNsYXJlcyBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIG1lZGlhIGVuZ2luZXMuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6On5NZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
Ojp0b3RhbEJ5dGVzS25vd24pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaDogYWRkIHN1cHBvcnQgZm9yIGVuZ2luZSBm
YWN0b3J5IAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6
OmNyZWF0ZSk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rpb24KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IHJlZ2lzdGVy
IGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGUpOiBOZXcsIG1lZGlhIGVuZ2luZSBmYWN0
b3J5IGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IFJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZh
Y3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdCk6IENvbnN0cnVjdG9yIGlzIG5vdyBwcml2YXRlLCBuZWVkIHRvIHVz
ZSBjcmVhdGUoKQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6On5N
ZWRpYVBsYXllclByaXZhdGVRVEtpdCk6IENoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXll
clByaXZhdGVRVEtpdAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmNyZWF0ZVFUTW92aWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllVmlldyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVWaWV3KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRWaWRlb1JlbmRl
cmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
ZGVzdHJveVFUVmlkZW9SZW5kZXJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0ZWFyRG93blZpZGVvUmVuZGVyaW5n
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3Jl
YXRlUVRUaW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6bG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnBsYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjpwYXVzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OmR1cmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6Y3VycmVudFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsU2Vlayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWtUaW1lckZpcmVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0RW5kVGltZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0YXJ0
RW5kUG9pbnRUaW1lcklmTmVlZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZW5kUG9pbnRUaW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGF1c2VkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla2luZyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om5hdHVyYWxTaXplKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzVmlkZW8p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRW
b2x1bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpzZXRSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6ZGF0YVJhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjptYXhUaW1lQnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lU2Vla2FibGUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lTG9hZGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Ynl0ZXNMb2FkZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3Rh
bEJ5dGVzS25vd24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Ojp0b3RhbEJ5dGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnVwZGF0ZVN0YXRlcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyYXRlQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNpemVD
aGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6dGltZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpkaWRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpzZXRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6c2V0VmlzaWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlcGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWludCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6bWltZVR5cGVDYWNoZSk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpnZXRTdXBwb3J0ZWRUeXBlcyk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3Rv
cnkgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZW51bSBpbnN0
ZWFkIG9mIGJvb2wKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpp
c0F2YWlsYWJsZSk6IENoYW5nZWQgY2xhc3MgbmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVEtp
dAorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpc2FibGVVbnN1
cHBvcnRlZFRyYWNrcyk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlTW92aWVPYnNlcnZlciBp
bml0V2l0aENhbGxiYWNrOl0pOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OmNyZWF0ZSk6IE5ldywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rp
b24KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVu
Z2luZSk6IHJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6Y3JlYXRlKTogTmV3LCBt
ZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IFJlZ2lzdGVyIGVuZ2luZSB3
aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVFUV2luOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbik6IENvbnN0cnVjdG9yIGlzIG5vdyBw
cml2YXRlLCBuZWVkIHRvIHVzZSBjcmVhdGUoKQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRXaW46On5NZWRpYVBsYXllclByaXZhdGVRVFdpbik6IENoYW5nZWQgY2xhc3Mg
bmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVFdpbgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OmxvYWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVFUV2luOjpwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6cGF1c2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpkdXJhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c2Vlayk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmRvU2Vlayk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNhbmNlbFNlZWspOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZWVrVGltZXJG
aXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OnNldEVuZFRpbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVFUV2luOjpzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmVuZFBvaW50VGltZXJGaXJlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnBhdXNlZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnNlZWtpbmcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpuYXR1
cmFsU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRX
aW46Omhhc1ZpZGVvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRVFdpbjo6c2V0Vm9sdW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVRVFdpbjo6c2V0UmF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OmRhdGFSYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUJ1ZmZlcmVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZVNlZWthYmxlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUxv
YWRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OmJ5dGVzTG9hZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVRVFdpbjo6dG90YWxCeXRlc0tub3duKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6dG90YWxCeXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNhbmNlbExvYWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjp1cGRhdGVTdGF0ZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpkaWRFbmQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZXRSZWN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c2V0Vmlz
aWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OnBhaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogTmV3Lgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmdldFN1cHBvcnRlZFR5
cGVzKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjppc0F2YWlsYWJsZSk6IENoYW5nZWQgY2xhc3Mg
bmFtZSB0byBNZWRpYVBsYXllclByaXZhdGVRVFdpbgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OnN1cHBvcnRzVHlwZSk6IHJldHVybiBNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIGVudW0gaW5zdGVhZCBvZiBib29sCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6bW92aWVFbmRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllTG9hZFN0YXRlQ2hhbmdlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllVGltZUNoYW5n
ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpt
b3ZpZU5ld0ltYWdlQXZhaWxhYmxlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oOgorCiAyMDA5LTAyLTA3ICBT
aW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
IAkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRjBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCAqLzsgfTsKIAkJMDZF
ODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRDYwQUI1
RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovOyB9OwogCQkw
NkU4MUVFQzBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDZFODFFRUIw
QUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLzsgfTsK
KwkJMDc5RjVFNEMwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5RjVFNEIwRjNCRUJF
QTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovOyB9OwogCQkwODAwODE5NjBFRDNC
MkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01M
QW5jaG9yRWxlbWVudC5jcHAgKi87IH07CiAJCTA4MDA4MTk3MEVEM0IyREQwMEM1M0JDMCAvKiBX
TUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODAwODE5NTBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5oICov
OyB9OwogCQkwODA0QkY2RTBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MDRCRjZDMEVFMDlD
M0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9OwpAQCAtNDkwNyw2ICs0OTA4LDcg
QEAKIAkJMDZFODFFRDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1
REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVk
aWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYz
QkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUZFNTkwMEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxB
bmNob3JFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUw
RUQzQjJERDAwQzUzQkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MQW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMwOTYsNiArMTMwOTgsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplSGFzaC5oICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBN
ZWRpYVBsYXllci5jcHAgKi8sCiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlh
UGxheWVyLmggKi8sCisJCQkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovLAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAq
LywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERE
NDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApAQCAtMTY3
MTUsNiArMTY3MTgsNyBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2
aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzND
QjMgLyogUmVuZGVyQm94TW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OUY1RTRD
MEYzQkVCRUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsy
NzEsNyBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdSYXRlKCkKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBTdHJpbmcgbWVk
aWFTcmM7CisgICAgU3RyaW5nIG1lZGlhTUlNRVR5cGU7CiAgICAgCiAgICAgLy8gMy4xNC45LjQu
IExvYWRpbmcgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzE4LDcgKzMxOSw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAg
ICAgLy8gNgotICAgIG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBzZWxl
Y3RNZWRpYVVSTChtZWRpYU1JTUVUeXBlKTsKICAgICBpZiAobWVkaWFTcmMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIGdvdG8gZW5kOwpAQCAt
MzQwLDcgKzM0MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QK
ICAgICBtX3BsYXllci5jbGVhcigpOwogICAgIG1fcGxheWVyLnNldChuZXcgTWVkaWFQbGF5ZXIo
dGhpcykpOwogICAgIHVwZGF0ZVZvbHVtZSgpOwotICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVu
dFNyYyk7CisgICAgbV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBtZWRpYU1JTUVUeXBlKTsK
ICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5n
TGV2ZWwpCiAgICAgICAgIGdvdG8gZW5kOwogICAgIApAQCAtODEyLDcgKzgxMyw3IEBAIGJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6Y2FuUGxheSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhdXNlZCgpIHx8
IGVuZGVkKCkgfHwgbmV0d29ya1N0YXRlKCkgPCBMT0FERURfTUVUQURBVEE7CiB9CiAKLVN0cmlu
ZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNrTWVkaWEoKQorU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OnNlbGVjdE1lZGlhVVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSkKIHsKICAgICAvLyAzLjE0Ljku
Mi4gTG9jYXRpb24gb2YgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgU3RyaW5nIG1lZGlhU3JjID0g
Z2V0QXR0cmlidXRlKHNyY0F0dHIpOwpAQCAtODMwLDE0ICs4MzEsMTQgQEAgU3RyaW5nIEhUTUxN
ZWRpYUVsZW1lbnQ6OnBpY2tNZWRpYSgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBh
cmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBzaW1wbGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJv
bU1JTUVUeXBlKHR5cGUpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vICJ0eXBlIiBjYW4gaGF2
ZSBwYXJhbWV0ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbSBiZWZvcmUgY2hlY2tp
bmcgd2l0aCB0aGUgdHlwZSByZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICBpbnQgc2VtaSA9
IHR5cGUuZmluZCgnOycpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VtaSAhPSAtMSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNw
YWNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE1lZGlhTUlNRVR5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghTWVk
aWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5
cGUgd2l0aCBhbGwgcGFyYW1ldGVycyBpbiBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1
c2UgdGhlbQorICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpLnN0
cmluZygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2Vl
ayhmbG9hdCB0aW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgdm9pZCBjaGVja0lmU2Vla05l
ZWRlZCgpOwogICAgIAotICAgIFN0cmluZyBwaWNrTWVkaWEoKTsKKyAgICBTdHJpbmcgc2VsZWN0
TWVkaWFVUkwoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKTsKICAgICB2b2lkIHVwZGF0ZVZvbHVtZSgp
OwogICAgIHZvaWQgdXBkYXRlUGxheVN0YXRlKCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlU3RhcnQo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNp
b24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDQyIEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvclAKICAgICByZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiB9
CiAKK1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlck5hbWUpCit7CisgICAgU3Ry
aW5nIHBhcmFtZXRlclZhbHVlOworCisgICAgLy8gYSBNSU1FIHR5cGUgY2FuIGhhdmUgb25lIG9y
IG1vcmUgInBhcmFtPXZhbHVlIiBhZnRlciBhIHNlbWktY29sb24sIGFuZCBzZXBhcmF0ZWQgZnJv
bSBlYWNoIG90aGVyIGJ5IHNlbWktY29sb25zCisgICAgaW50IHNlbWkgPSB0eXBlLmZpbmQoJzsn
KTsKKyAgICBpZiAoc2VtaSAhPSAtMSkgeworICAgICAgICBpbnQgc3RhcnQgPSB0eXBlLmZpbmQo
cGFyYW1ldGVyTmFtZSwgc2VtaSArIDEsIGZhbHNlKTsKKyAgICAgICAgaWYgKHN0YXJ0ICE9IC0x
KSB7CisgICAgICAgICAgICBzdGFydCA9IHR5cGUuZmluZCgnPScsIHN0YXJ0ICsgNik7CisgICAg
ICAgICAgICBpZiAoc3RhcnQgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5kID0gdHlw
ZS5maW5kKCc7Jywgc3RhcnQgKyA2KTsKKyAgICAgICAgICAgICAgICBpZiAoZW5kICE9IC0xKQor
ICAgICAgICAgICAgICAgICAgICBlbmQgPSB0eXBlLmxlbmd0aCgpOworICAgICAgICAgICAgICAg
IHBhcmFtZXRlclZhbHVlID0gdHlwZS5zdWJzdHJpbmcoc3RhcnQgKyAxLCBlbmQgLSAoc3RhcnQg
KyAxKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcGFyYW1ldGVyVmFsdWU7Cit9CisKK1N0cmluZyBNSU1FVHlwZVJlZ2lz
dHJ5OjpzdHJpcFBhcmFtZXRlcnNGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICBTdHJpbmcgc3RyaXBwZWRUeXBlID0gbWltZVR5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7
CisKKyAgICAvLyAidHlwZSIgY2FuIGhhdmUgcGFyYW1ldGVycyBhZnRlciBhIHNlbWktY29sb24s
IHN0cmlwIHRoZW0KKyAgICBpbnQgc2VtaSA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jyk7CisgICAg
aWYgKHNlbWkgIT0gLTEpCisgICAgICAgIHN0cmlwcGVkVHlwZSA9IHN0cmlwcGVkVHlwZS5sZWZ0
KHNlbWkpLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgcmV0dXJuIHN0cmlwcGVkVHlwZTsKK30K
KworCisKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCShyZXZpc2lvbiA0MDY3NSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGV4dCk7CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGdldEV4
dGVuc2lvbnNGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHN0YXRpYyBTdHJp
bmcgZ2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsK
KworICAgIHN0YXRpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJOYW1lKTsKKyAgICBzdGF0aWMgU3RyaW5n
IHN0cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOworCiAgICAg
c3RhdGljIFN0cmluZyBnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAog
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcg
bG9hZGVkIGlubGluZSBhcyBhbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDctMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoVklERU8pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCkBAIC00NywxMCArNDgsODMgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vICsrKysrKysrKysrKysrKysrKysrCisvLyBlbmdpbmUgc3VwcG9ydAorCitz
dHJ1Y3QgTWVkaWFQbGF5ZXJGYWN0b3J5IHsKKyAgICBNZWRpYVBsYXllckZhY3RvcnkoQ3JlYXRl
TWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3IsIE1lZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMg
Z2V0U3VwcG9ydGVkVHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZUFu
ZENvZGVjcykgCisgICAgICAgIDogY29uc3RydWN0b3IoY29uc3RydWN0b3IpCisgICAgICAgICwg
Z2V0U3VwcG9ydGVkVHlwZXMoZ2V0U3VwcG9ydGVkVHlwZXMpCisgICAgICAgICwgc3VwcG9ydHNU
eXBlQW5kQ29kZWNzKHN1cHBvcnRzVHlwZUFuZENvZGVjcykgIAorICAgIHsgfQorCisgICAgQ3Jl
YXRlTWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3I7CisgICAgTWVkaWFFbmdpbmVTdXBwb3J0
ZWRUeXBlcyBnZXRTdXBwb3J0ZWRUeXBlczsKKyAgICBNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBz
dXBwb3J0c1R5cGVBbmRDb2RlY3M7Cit9OworCitzdGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShD
cmVhdGVNZWRpYUVuZ2luZVBsYXllciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcywgTWVkaWFF
bmdpbmVTdXBwb3J0c1R5cGUpOworc3RhdGljIE1lZGlhUGxheWVyRmFjdG9yeSogY2hvb3NlQmVz
dEVuZ2luZUZvclR5cGVBbmRDb2RlY3MoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcyk7CisKK3N0YXRpYyBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj4mIGluc3RhbGxl
ZE1lZGlhRW5naW5lcygpIAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPE1lZGlh
UGxheWVyRmFjdG9yeSo+LCBpbnN0YWxsZWRFbmdpbmVzLCAoKSk7CisgICAgc3RhdGljIGJvb2wg
ZW5naW5lc1F1ZXJpZWQgPSBmYWxzZTsKKworICAgIGlmICghZW5naW5lc1F1ZXJpZWQpIHsKKyAg
ICAgICAgZW5naW5lc1F1ZXJpZWQgPSB0cnVlOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdp
bmUpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBNZWRpYVBsYXllclByaXZhdGVRVFdp
bjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShhZGRNZWRpYUVuZ2luZSk7CisjZWxzZQorICAgICAgICBN
ZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwor
I2VuZGlmCisgICAgfQogICAgIAotICAgIE1lZGlhUGxheWVyOjpNZWRpYVBsYXllcihNZWRpYVBs
YXllckNsaWVudCogY2xpZW50KQorICAgIHJldHVybiBpbnN0YWxsZWRFbmdpbmVzOworfQorCitz
dGF0aWMgdm9pZCBhZGRNZWRpYUVuZ2luZShDcmVhdGVNZWRpYUVuZ2luZVBsYXllciBjdG9yLCBN
ZWRpYUVuZ2luZVN1cHBvcnRlZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVuZ2luZVN1
cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUpCit7CisgICAgQVNTRVJUKGN0b3IpOworICAgIEFTU0VS
VChnZXRTdXBwb3J0ZWRUeXBlcyk7CisgICAgQVNTRVJUKHN1cHBvcnRzVHlwZSk7CisgICAgaW5z
dGFsbGVkTWVkaWFFbmdpbmVzKCkuYXBwZW5kKG5ldyBNZWRpYVBsYXllckZhY3RvcnkoY3Rvciwg
Z2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSkpOworfQorCitzdGF0aWMgTWVkaWFQbGF5
ZXJGYWN0b3J5KiBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyhjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIFZlY3RvcjxNZWRpYVBsYXllckZh
Y3RvcnkqPiYgZW5naW5lcyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOworCisgICAgaWYgKGVu
Z2luZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE1lZGlhUGxheWVyRmFj
dG9yeSAqZW5naW5lID0gMDsKKyAgICBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRl
ZCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKworICAgIHVuc2lnbmVkIGNvdW50ID0g
ZW5naW5lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBuZHggPSAwOyBuZHggPCBjb3VudDsg
KytuZHgpIHsKKyAgICAgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBlbmdpbmVTdXBwb3J0
ID0gZW5naW5lc1tuZHhdLT5zdXBwb3J0c1R5cGVBbmRDb2RlY3ModHlwZSwgY29kZWNzKTsKKyAg
ICAgICAgaWYgKGVuZ2luZVN1cHBvcnQgPiBzdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIHN1cHBv
cnRlZCA9IGVuZ2luZVN1cHBvcnQ7CisgICAgICAgICAgICBlbmdpbmUgPSBlbmdpbmVzW25keF07
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZW5naW5lOworfQorCisvLyArKysrKysr
KysrKysrKysrKysrKworLy8gbWVkaWEgcGxheWVyCisKK3N0YXRpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UqIGNyZWF0ZU51bGxNZWRpYVBsYXllcihNZWRpYVBsYXllciAqcGxheWVyKTsK
KworTWVkaWFQbGF5ZXI6Ok1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX21lZGlhUGxheWVyQ2xpZW50KGNsaWVudCkKLSAgICAsIG1fcHJpdmF0ZShuZXcgTWVk
aWFQbGF5ZXJQcml2YXRlKHRoaXMpKQorICAgICwgbV9wcml2YXRlKGNyZWF0ZU51bGxNZWRpYVBs
YXllcih0aGlzKSkKKyAgICAsIG1fY3VycmVudE1lZGlhRW5naW5lKDApCiAgICAgLCBtX2ZyYW1l
VmlldygwKQogICAgICwgbV92aXNpYmxlKGZhbHNlKQogICAgICwgbV9yYXRlKDEuMGYpCkBAIC02
Myw5ICsxMzcsMzAgQEAgTWVkaWFQbGF5ZXI6On5NZWRpYVBsYXllcigpCiAgICAgZGVsZXRlIG1f
cHJpdmF0ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkK
K3ZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCiB7Ci0gICAgbV9wcml2YXRlLT5sb2FkKHVybCk7CisgICAgLy8gaWYgd2UgZG9u
J3Qga25vdyB0aGUgTUlNRSB0eXBlLCBzZWUgaWYgdGhlIHBhdGggY2FuIGhlbHAKKyAgICBTdHJp
bmcgdHlwZSA9IG1pbWVUeXBlLmlzRW1wdHkoKSA/IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVU
eXBlRm9yUGF0aCh1cmwpIDogbWltZVR5cGU7CisgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisKKyAg
ICBNZWRpYVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5k
Q29kZWNzKHR5cGUsIGNvZGVjcyk7CisKKyAgICAvLyAgaWYgd2UgZGlkbid0IGZpbmQgYW4gZW5n
aW5lIHRoYXQgY2xhaW1zIHRoZSBNSU1FIHR5cGUsIGp1c3QgdXNlIHRoZSBmaXJzdCBlbmdpbmUK
KyAgICBpZiAoIWVuZ2luZSkKKyAgICAgICAgZW5naW5lID0gaW5zdGFsbGVkTWVkaWFFbmdpbmVz
KClbMF07CisgICAgCisgICAgLy8gZG9uJ3QgZGVsZXRlIGFuZCByZWNyZWF0ZSB0aGUgcGxheWVy
IHVubGVzcyBpdCBjb21lcyBmcm9tIGEgZGlmZmVyZW50IGVuZ2luZQorICAgIGlmIChlbmdpbmUg
JiYgbV9jdXJyZW50TWVkaWFFbmdpbmUgIT0gZW5naW5lKSB7CisgICAgICAgIG1fY3VycmVudE1l
ZGlhRW5naW5lID0gZW5naW5lOworICAgICAgICBkZWxldGUgbV9wcml2YXRlOworICAgICAgICBt
X3ByaXZhdGUgPSAwOworICAgICAgICBtX3ByaXZhdGUgPSBlbmdpbmUtPmNvbnN0cnVjdG9yKHRo
aXMpOworICAgIH0KKworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+bG9h
ZCh1cmwpOworICAgIGVsc2UKKyAgICAgICAgbV9wcml2YXRlID0gY3JlYXRlTnVsbE1lZGlhUGxh
eWVyKHRoaXMpOwogfSAgICAKIAogdm9pZCBNZWRpYVBsYXllcjo6Y2FuY2VsTG9hZCgpCkBAIC05
MCw3ICsxODUsNyBAQCBmbG9hdCBNZWRpYVBsYXllcjo6ZHVyYXRpb24oKSBjb25zdAogCiBmbG9h
dCBNZWRpYVBsYXllcjo6Y3VycmVudFRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZh
dGUtPmN1cnJlbnRUaW1lKCk7ICAKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jdXJyZW50VGltZSgp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpzZWVrKGZsb2F0IHRpbWUpCkBAIC0yMTUsMjcgKzMx
MCwzMSBAQCB2b2lkIE1lZGlhUGxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqCiAgICAgbV9w
cml2YXRlLT5wYWludChwLCByKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSkKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNz
KQogewotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKLSAgICBnZXRTdXBwb3J0ZWRUeXBlcyh0
eXBlcyk7Ci0gICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1F
VHlwZSh0eXBlKSAmJiB0eXBlcy5jb250YWlucyh0eXBlKTsKKyAgICBNZWRpYVBsYXllckZhY3Rv
cnkgKmVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVj
cyk7CisKKyAgICBpZiAoIWVuZ2luZSkKKyAgICAgICAgcmV0dXJuIElzTm90U3VwcG9ydGVkOwor
CisgICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
PiYgdHlwZXMpCiB7Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyh0
eXBlcyk7CisgICAgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+JiBlbmdpbmVzID0gaW5zdGFs
bGVkTWVkaWFFbmdpbmVzKCk7CisgICAgaWYgKGVuZ2luZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0b3J5Kj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gZW5naW5lcy5iZWdpbigpOworICAgIGNvbnN0IFZlY3RvcjxNZWRpYVBsYXllckZhY3Rv
cnkqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZW5naW5lcy5lbmQoKTsKKyAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+Z2V0U3VwcG9ydGVkVHlwZXModHlwZXMpOwog
fSAKLSAgICAKKwogYm9vbCBNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKQogewotICAgIHN0YXRp
YyBib29sIGF2YWlsYWJpdHlLbm93biA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlOwotICAgIGlmICghYXZhaWxhYml0eUtub3duKSB7Ci0gICAgICAgIGlzQXZhaWxhYmxlID0g
TWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSgpOwotICAgICAgICBhdmFpbGFiaXR5S25v
d24gPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gaXNBdmFpbGFibGU7CisgICAgcmV0dXJuICFp
bnN0YWxsZWRNZWRpYUVuZ2luZXMoKS5pc0VtcHR5KCk7CiB9IAogCiB2b2lkIE1lZGlhUGxheWVy
OjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCkKQEAgLTI2OCw1ICszNjcsNjEgQEAgdm9pZCBNZWRpYVBs
YXllcjo6cmVwYWludCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVy
UmVwYWludCh0aGlzKTsKIH0KIAorCisvLyArKysrKysrKysrKysrKysrKysrKworLy8gYSBudWxs
IHBsYXllciB0byBtYWtlIE1lZGlhUGxheWVyIGxvZ2ljIHNpbXBsZXIKKworY2xhc3MgTlVMTE1l
ZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2Ugewor
cHVibGljOgorICAgIE5VTExNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKSB7fTsKKyAg
ICB2aXJ0dWFsIH5OVUxMTWVkaWFQbGF5ZXJQcml2YXRlKCkge307CisKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZChjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgp
IHsgfTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIHsgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGF1c2UoKSB7IH07ICAgIAorCisgICAgdmlydHVhbCBJbnRTaXplIG5hdHVyYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gSW50U2l6ZSgwLCAwKTsgfQorCisgICAgdmlydHVhbCBib29sIGhhc1Zp
ZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpIHsgfTsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0KSB7IH07CisgICAgdmlydHVhbCBi
b29sIHNlZWtpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lk
IHNldEVuZFRpbWUoZmxvYXQpIHsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0
KSB7IH07CisgICAgdmlydHVhbCBib29sIHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSB7IH07CisKKyAgICB2aXJ0dWFs
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgeyByZXR1cm4g
TWVkaWFQbGF5ZXI6OkVtcHR5OyB9CisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQbGF5ZXI6OkRhdGFVbmF2YWlsYWJs
ZTsgfQorCisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBmbG9hdCBtYXhUaW1lQnVmZmVyZWQoKSBjb25zdCB7IHJldHVy
biAwOyB9CisKKyAgICB2aXJ0dWFsIGludCBkYXRhUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KworICAgIHZpcnR1YWwgYm9vbCB0b3RhbEJ5dGVzS25vd24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorCisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYpIHsgfTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgeyB9
IDsKK307CisKK01lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlTnVsbE1lZGlhUGxh
eWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE5VTExNZWRpYVBs
YXllclByaXZhdGUocGxheWVyKTsgCit9CisKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50
U2l6ZTsKIGNsYXNzIE1lZGlhUGxheWVyOwotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlOworY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOwogY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBN
ZWRpYVBsYXllckNsaWVudCB7CkBAIC01MiwxOSArNTIsMjMgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBtZWRpYVBsYXllclJlcGFpbnQoTWVkaWFQbGF5ZXIqKSB7IH0KIH07CiAKKwogY2xh
c3MgTWVkaWFQbGF5ZXIgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXIo
TWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllcigpOwotICAgIAot
ICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gbWVkaWEgZW5naW5lIHN1cHBvcnQKKyAgICBl
bnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVkLCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBw
b3J0ZWQgfTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyA9ICIiKTsKICAgICBz
dGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogICAgIAogICAgIEludFNpemUgbmF0dXJhbFNpemUoKTsK
ICAgICBib29sIGhhc1ZpZGVvKCk7CiAgICAgCiAgICAgdm9pZCBzZXRGcmFtZVZpZXcoRnJhbWVW
aWV3KiBmcmFtZVZpZXcpIHsgbV9mcmFtZVZpZXcgPSBmcmFtZVZpZXc7IH0KKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldygpIHsgcmV0dXJuIG1fZnJhbWVWaWV3OyB9CiAgICAgYm9vbCBpbk1lZGlh
RG9jdW1lbnQoKTsKICAgICAKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGp1
c3QgaGF2ZSBhIGdldHRlciBhbmQgc2V0dGVyIGZvciBzaXplLgpAQCAtNzMsNyArNzcsNyBAQCBw
dWJsaWM6CiAgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAg
dm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpOwogICAgIAotICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKICAgICB2b2lkIGNhbmNlbExvYWQoKTsKICAgICAKICAgICBib29s
IHZpc2libGUoKSBjb25zdDsKQEAgLTEyMiwxMSArMTI2LDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlcGFpbnQoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgICAgIAotICAgIGZyaWVuZCBjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGU7Ci0gICAgCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU1lZGlh
RW5naW5lcygpOworCiAgICAgTWVkaWFQbGF5ZXJDbGllbnQqIG1fbWVkaWFQbGF5ZXJDbGllbnQ7
Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKiBtX3ByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBtX3ByaXZhdGU7CisgICAgdm9pZCAqbV9jdXJyZW50TWVkaWFFbmdpbmU7
CiAgICAgRnJhbWVWaWV3KiBtX2ZyYW1lVmlldzsKICAgICBJbnRSZWN0IG1fcmVjdDsKICAgICBi
b29sIG1fdmlzaWJsZTsKQEAgLTEzNCw3ICsxMzgsMTUgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBt
X3ZvbHVtZTsKIH07CiAKK3R5cGVkZWYgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiAoKkNy
ZWF0ZU1lZGlhRW5naW5lUGxheWVyKShNZWRpYVBsYXllciopOwordHlwZWRlZiB2b2lkICgqTWVk
aWFFbmdpbmVTdXBwb3J0ZWRUeXBlcykoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7Cit0eXBlZGVm
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgKCpNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSkoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisKK3R5cGVkZWYgdm9pZCAo
Kk1lZGlhRW5naW5lUmVnaXN0cmFyKShDcmVhdGVNZWRpYUVuZ2luZVBsYXllciwgTWVkaWFFbmdp
bmVTdXBwb3J0ZWRUeXBlcywgTWVkaWFFbmdpbmVTdXBwb3J0c1R5cGUpOyAKKworCiB9CiAKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY3IEBACisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlX2gKKyNk
ZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShWSURFTykKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZT4KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UoKSB7fTsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgdXJs
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQoKSA9IDA7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAK
KworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpID0gMDsKKworICAgIHZpcnR1YWwgZmxvYXQgZHVyYXRpb24oKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZWVrKGZsb2F0IHRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2Vla2lu
ZygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmRUaW1lKGZsb2F0IHRpbWUp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGZsb2F0IGluUmF0ZSkgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Vm9sdW1lKGZsb2F0IGluVm9sdW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
ZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgbWF4
VGltZUJ1ZmZlcmVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQgZGF0YVJhdGUoKSBj
b25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgdG90YWxCeXRlc0tub3duKCkgY29uc3QgeyBy
ZXR1cm4gdG90YWxCeXRlcygpID4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgdG90YWxCeXRl
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KSA9IDAgOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNo
cm9taXVtLmgJKHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxMyArMzMsMTMgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAotI2luY2x1ZGUgIk1lZGlhUGxh
eWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
IHB1YmxpYzoKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0
aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICB+
TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7
CkBAIC03OCw5ICs3OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQog
ICAgIC8vIFB1YmxpYyBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSBXZWJNZWRpYVBsYXllcgogICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3KCk7CiAgICAgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKCk7
CkBAIC05MCw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBhaW50KCk7CiAKIHByaXZh
dGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisgICAgc3RhdGljIE1l
ZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVk
aWFQbGF5ZXIgKnBsYXllcik7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFz
aFNldDxTdHJpbmc+Jik7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3Vw
cG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAg
IHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7
CiAgICAgdm9pZCogbV9kYXRhOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAko
cmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDE3
IEBAIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUJ1ZmZlcmluZ0NhbGwKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZh
dGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRp
YVBsYXllclByaXZhdGUocGxheWVyKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJl
Z2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IGlmIChpc0F2YWlsYWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0
ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30KKwogTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBs
YXllclByaXZhdGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fcGxheWVyKHBsYXllcikK
ICAgICAsIG1fcGxheUJpbigwKQpAQCAtNTkyLDYgKzYwMywxMyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwCiAgICAgdHlwZXMuYWRkKFN0cmluZygidmlkZW8veC10
aGVvcmErb2dnIikpOwogfQogCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBj
b2RlY3MpCit7CisgICAgLy8gRklYTUU6IGRvIHRoZSByZWFsIHRoaW5nCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHlwZSA9PSAidmlkZW8veC10aGVvcmErb2dnIiA/IChjb2Rl
Y3MgJiYgIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBN
ZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwor
fQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlR1NUUGxheUJpbihTdHJpbmcgdXJs
KQogewogICAgIEFTU0VSVCghbV9wbGF5QmluKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKICNpbmNsdWRl
IDxndGsvZ3RrLmg+CkBAIC00NCwxNCArNDQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RN
ZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKICAgICBnYm9vbGVhbiBtZWRpYVBsYXll
clByaXZhdGVTdGF0ZUNhbGxiYWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBn
cG9pbnRlciBkYXRhKTsKIAotICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IE5vbmNvcHlh
YmxlCisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZQogICAgIHsKICAgICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2
YXRlRXJyb3JDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50
ZXIgZGF0YSk7CiAgICAgZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZUVPU0NhbGxi
YWNrKEdzdEJ1cyogYnVzLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKTsKICAg
ICBmcmllbmQgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMq
IGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworCisgICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogICAg
ICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICAgICAgSW50U2l6ZSBuYXR1cmFsU2l6
ZSgpOwpAQCAtOTksMTEgKzEwMCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCByZXBhaW50KCk7CiAgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBwcml2YXRlOgogCisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShN
ZWRpYVBsYXllciopOworICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
KiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciAqcGxheWVyKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CisgICAg
ICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgdm9pZCB1cGRhdGVTdGF0
ZXMoKTsKICAgICAgICAgdm9pZCBjYW5jZWxTZWVrKCk7CiAgICAgICAgIHZvaWQgZW5kUG9pbnRU
aW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQu
aAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogCkBAIC01MiwxMSArNTIsMjggQEAgY2xhc3MgV2ViQ29yZU1vdmllT2Jz
ZXJ2ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRl
IDogTm9uY29weWFibGUgeworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQgOiBwdWJsaWMg
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBNZWRpYVBsYXllclBy
aXZhdGUoTWVkaWFQbGF5ZXIqKTsKLSAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7Ci0gICAgCisg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
CisKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoKTsKKworICAgIHZvaWQgcmVwYWludCgp
OworICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsK
KyAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CisgICAgdm9pZCB0aW1lQ2hhbmdlZCgpOworICAgIHZv
aWQgZGlkRW5kKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoTWVk
aWFQbGF5ZXIqKTsKKworICAgIC8vIGVuZ2luZSBzdXBwb3J0CisgICAgc3RhdGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZShNZWRp
YVBsYXllciAqcGxheWVyKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKwogICAgIEludFNpemUgbmF0dXJhbFNp
emUoKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAgICAgCkBAIC05MSwxOSAr
MTA4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKICAgICB2b2lkIHNl
dFJlY3QoY29uc3QgSW50UmVjdCYgcik7CiAgICAgCi0gICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2Vk
KCk7Ci0gICAgdm9pZCByYXRlQ2hhbmdlZCgpOwotICAgIHZvaWQgc2l6ZUNoYW5nZWQoKTsKLSAg
ICB2b2lkIHRpbWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRFbmQoKTsKLSAgICAKLSAgICB2b2lk
IHJlcGFpbnQoKTsKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0
cmluZz4mIHR5cGVzKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotICAgIAotcHJp
dmF0ZToKKwogICAgIHZvaWQgY3JlYXRlUVRNb3ZpZShjb25zdCBTdHJpbmcmIHVybCk7CiAgICAg
dm9pZCBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7CiAgICAgdm9pZCB0ZWFyRG93blZpZGVvUmVuZGVy
aW5nKCk7CkBAIC0xMTYsOCArMTIyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVN0YXRl
cygpOwogICAgIHZvaWQgZG9TZWVrKCk7CiAgICAgdm9pZCBjYW5jZWxTZWVrKCk7Ci0gICAgdm9p
ZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7Ci0gICAgdm9pZCBl
bmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOworICAgIHZvaWQg
c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ+Kik7CisgICAgdm9p
ZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ+Kik7CiAg
ICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRFbmRQb2ludFRp
bWVySWZOZWVkZWQoKTsKICAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25l
ZCYgZW5hYmxlZFRyYWNrQ291bnQpOwpAQCAtMTI5LDggKzEzNSw4IEBAIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPFdlYkNvcmVNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKICAgICBmbG9h
dCBtX3NlZWtUbzsKICAgICBmbG9hdCBtX2VuZFRpbWU7Ci0gICAgVGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlPiBtX3NlZWtUaW1lcjsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fZW5k
UG9pbnRUaW1lcjsKKyAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4gbV9zZWVrVGlt
ZXI7CisgICAgVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ+IG1fZW5kUG9pbnRUaW1lcjsK
ICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBib29sIG1fc3RhcnRlZFBsYXlp
bmc7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTI4LDExICsxMjgsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogQGludGVy
ZmFjZSBXZWJDb3JlTW92aWVPYnNlcnZlciA6IE5TT2JqZWN0CiB7Ci0gICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBtX2NhbGxiYWNrOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0KiBtX2NhbGxi
YWNrOwogICAgIE5TVmlldyogbV92aWV3OwogICAgIEJPT0wgbV9kZWxheUNhbGxiYWNrczsKIH0K
LS0oaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlKiljYWxsYmFjazsKKy0o
aWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqKWNhbGxiYWNrOwog
LSh2b2lkKWRpc2Nvbm5lY3Q7CiAtKHZvaWQpc2V0VmlldzooTlNWaWV3Kil2aWV3OwogLSh2b2lk
KXJlcGFpbnQ7CkBAIC0xNTcsMTMgKzE1NywyNSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgZW5kUG9p
bnRUaW1lckludGVydmFsCiBzdGF0aWMgY29uc3QgbG9uZyBtaW5pbXVtUXVpY2tUaW1lVmVyc2lv
biA9IDB4MDczMDAwMDA7IC8vIDcuMwogI2VuZGlmCiAKLU1lZGlhUGxheWVyUHJpdmF0ZTo6TWVk
aWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisKK01lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZShNZWRpYVBsYXllciog
cGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGVRVEtpdChwbGF5
ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFi
bGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBv
cnRzVHlwZSk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVBsYXllclByaXZh
dGVRVEtpdChNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAg
ICwgbV9vYmpjT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlTW92aWVPYnNlcnZlciBhbGxvY10g
aW5pdFdpdGhDYWxsYmFjazp0aGlzXSkKICAgICAsIG1fc2Vla1RvKC0xKQogICAgICwgbV9lbmRU
aW1lKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKLSAgICAsIG1fc2Vla1RpbWVy
KHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQotICAgICwgbV9lbmRQ
b2ludFRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZCkK
KyAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vla1Rp
bWVyRmlyZWQpCisgICAgLCBtX2VuZFBvaW50VGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0OjplbmRQb2ludFRpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6RW1wdHkpCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkRhdGFVbmF2YWls
YWJsZSkKICAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCkBAIC0xNzcsNyArMTg5LDcgQEAg
TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTQogewogfQogCi1NZWRpYVBs
YXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6On5NZWRpYVBsYXllclByaXZhdGVRVEtpdCgpCiB7CiAgICAgdGVhckRvd25WaWRlb1JlbmRl
cmluZygpOwogCkBAIC0xODUsNyArMTk3LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlKAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBkaXNjb25uZWN0XTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWUoY29uc3QgU3RyaW5nJiB1
cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjcmVhdGVRVE1vdmllKGNvbnN0IFN0
cmluZyYgdXJsKQogewogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCldOwogICAgIApAQCAtMjYxLDcgKzI3
Myw3IEBAIHN0YXRpYyBDbGFzcyBRVFZpZGVvUmVuZGVyZXJDbGFzcygpCiAgICAgIHJldHVybiBR
VFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5Q2xhc3M7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjcmVhdGVRVE1vdmllVmlldygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpj
cmVhdGVRVE1vdmllVmlldygpCiB7CiAgICAgZGV0YWNoUVRNb3ZpZVZpZXcoKTsKIApAQCAtMjc5
LDcgKzI5MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVE1vdmllVmkKIAog
ICAgIG1fcXRNb3ZpZVZpZXcuYWRvcHROUyhbW1FUTW92aWVWaWV3IGFsbG9jXSBpbml0XSk7CiAg
ICAgc2V0UmVjdChtX3BsYXllci0+cmVjdCgpKTsKLSAgICBOU1ZpZXcqIHBhcmVudFZpZXcgPSBt
X3BsYXllci0+bV9mcmFtZVZpZXctPmRvY3VtZW50VmlldygpOworICAgIE5TVmlldyogcGFyZW50
VmlldyA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgW3BhcmVu
dFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgpXTsKICNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBhIHB1YmxpYyBjYWxsIGluIFRpZ2Vy
LCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5CkBAIC0z
MDEsNyArMzEzLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWVWaQog
ICAgICAgICB3a1FUTW92aWVWaWV3U2V0RHJhd1N5bmNocm9ub3VzbHkobV9xdE1vdmllVmlldy5n
ZXQoKSwgWUVTKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRldGFjaFFUTW92aWVW
aWV3KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRldGFjaFFUTW92aWVWaWV3KCkK
IHsKICAgICBpZiAobV9xdE1vdmllVmlldykgewogICAgICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0
KCkgc2V0VmlldzpuaWxdOwpAQCAtMzE2LDcgKzMyOCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpkZXRhY2hRVE1vdmllVmkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y3JlYXRlUVRWaWRlb1JlbmRlcmVyKCkKIHsKICAgICBkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7
CiAKQEAgLTMzNCw3ICszNDYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRW
aWRlb1JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmRlc3Ryb3lRVFZpZGVvUmVuZGVyZXIoKQogewogICAgIGlmICghbV9xdFZpZGVvUmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCw5ICszNjIsOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6ZGVzdHJveVFUVmlkZW9SCiAgICAgbV9xdFZpZGVvUmVuZGVyZXIgPSBuaWw7CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZpZGVvUmVuZGVyaW5nKCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmcoKQogewotICAgIGlm
ICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0TW92aWUpCisgICAgaWYgKCFtX3BsYXll
ci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAhUVRWaWRlb1JlbmRlcmVyQ2xhc3MoKSAp
CkBAIC0zNjEsNyArMzczLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlkZW9S
ZW5kZQogICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCiB7CiAgICAgaWYgKG1fcXRNb3Zp
ZVZpZXcpCiAgICAgICAgIGRldGFjaFFUTW92aWVWaWV3KCk7CkBAIC0zNjksNyArMzgxLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnRlYXJEb3duVmlkZW9SZQogICAgICAgICBkZXN0cm95
UVRWaWRlb1JlbmRlcmVyKCk7CiB9CiAKLVFUVGltZSBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0
ZVFUVGltZShmbG9hdCB0aW1lKSBjb25zdAorUVRUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpjcmVhdGVRVFRpbWUoZmxvYXQgdGltZSkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkK
ICAgICAgICAgcmV0dXJuIFFUTWFrZVRpbWUoMCwgNjAwKTsKQEAgLTM3Nyw3ICszODksNyBAQCBR
VFRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVRVFRpbWUoCiAgICAgcmV0dXJuIFFUTWFr
ZVRpbWUodGltZSAqIHRpbWVTY2FsZSwgdGltZVNjYWxlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChtX25ldHdvcmtTdGF0
ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkaW5nOwpAQCAtMzk4LDcgKzQxMCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpsb2FkKGNvbnN0IFN0cmkKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVs
YXlDYWxsYmFja3M6Tk9dOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCkKIHsKICAgICBpZiAoIW1fcXRNb3Zp
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDEyLDcgKzQyNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpwbGF5KCkKICAgICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2UoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVR
VEtpdDo6cGF1c2UoKQogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm47CkBA
IC00MjYsNyArNDM4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKICAgICBt
X2VuZFBvaW50VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1
cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkdXJhdGlvbigp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDM2
LDcgKzQ0OCw3IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb24KICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRpbWUudGltZVZhbHVlKSAvIHRpbWUudGltZVNj
YWxlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgY29uc3QK
K2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjdXJyZW50VGltZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDQ0LDcgKzQ1Niw3IEBA
IGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUoKSAKICAgICByZXR1cm4gbWlu
KHN0YXRpY19jYXN0PGZsb2F0Pih0aW1lLnRpbWVWYWx1ZSkgLyB0aW1lLnRpbWVTY2FsZSwgbV9l
bmRUaW1lKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWsoZmxvYXQgdGltZSkKIHsKICAgICBj
YW5jZWxTZWVrKCk7CiAgICAgCkBAIC00NjEsNyArNDczLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnNlZWsoZmxvYXQgdGltZQogICAgICAgICBtX3NlZWtUaW1lci5zdGFydCgwLCAwLjVm
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6ZG9TZWVrKCkgCiB7CiAgICAgUVRUaW1lIHF0dGltZSA9IGNyZWF0
ZVFUVGltZShtX3NlZWtUbyk7CiAgICAgLy8gc2V0Q3VycmVudFRpbWUgZ2VuZXJhdGVzIHNldmVy
YWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcwpAQCAtNDc3LDEzICs0ODksMTMg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAogICAgIFttX29iamNPYnNlcnZl
ci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjYW5jZWxTZWVrKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNhbmNlbFNl
ZWsoKQogewogICAgIG1fc2Vla1RvID0gLTE7CiAgICAgbV9zZWVrVGltZXIuc3RvcCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlPiopCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVrVGltZXJGaXJl
ZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVRVEtpdD4qKQogeyAgICAgICAgCiAgICAgaWYgKCFt
X3F0TW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGltZSgpID09IG1fc2Vla1RvKSB7CiAg
ICAgICAgIGNhbmNlbFNlZWsoKTsKQEAgLTUwNCwxOSArNTE2LDE5IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZWVrVGltZXJGaXJlZCgKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpzZXRFbmRUaW1lKGZsb2F0IHRpbWUpCiB7CiAgICAgbV9lbmRUaW1lID0gdGltZTsKICAg
ICBzdGFydEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6c3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChtX2VuZFRp
bWUgPCBkdXJhdGlvbigpICYmIG1fc3RhcnRlZFBsYXlpbmcgJiYgIW1fZW5kUG9pbnRUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX2VuZFBvaW50VGltZXIuc3RhcnRSZXBlYXRpbmcoZW5kUG9p
bnRUaW1lckludGVydmFsKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50
VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OmVuZFBvaW50VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVR
VEtpdD4qKQogewogICAgIGZsb2F0IHRpbWUgPSBjdXJyZW50VGltZSgpOwogICAgIApAQCAtNTI3
LDQyICs1MzksNDIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaQog
ICAgIH0KIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlZCgpIGNvbnN0Citib29s
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYXVzZWQoKSBjb25zdAogewogICAgIGlmICghbV9x
dE1vdmllKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gW21fcXRNb3ZpZS5nZXQo
KSByYXRlXSA9PSAwOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNv
bnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZWVraW5nKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3Nl
ZWtUbyA+PSAwOwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUo
KSBjb25zdAorSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6bmF0dXJhbFNpemUoKSBj
b25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwog
ICAgIHJldHVybiBJbnRTaXplKFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1v
dmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0pOwogfQogCi1ib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpR
VE1vdmllSGFzVmlkZW9BdHRyaWJ1dGVdIGJvb2xWYWx1ZV07CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0Vm9sdW1lOnZvbHVtZV07
ICAKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICBp
ZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTcwLDcgKzU4Miw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRSYXRlKGZsb2F0IHIKICAgICAgICAgW21fcXRNb3ZpZS5n
ZXQoKSBzZXRSYXRlOnJhdGVdOwogfQogCi1pbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0
ZSgpIGNvbnN0CitpbnQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRhdGFSYXRlKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NzgsMjYgKzU5
MCwyNiBAQCBpbnQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkYXRhUmF0ZSgpIGNvbnN0CiB9CiAKIAot
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQoKSBjb25zdAorZmxvYXQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om1heFRpbWVCdWZmZXJlZCgpIGNvbnN0CiB7CiAgICAg
Ly8gcnRzcCBzdHJlYW1zIGFyZSBub3QgYnVmZmVyZWQKICAgICByZXR1cm4gbV9pc1N0cmVhbWlu
ZyA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6
bWF4VGltZVNlZWthYmxlKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpt
YXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5z
IGxpdmUgc3RyZWFtCiAgICAgcmV0dXJuIGlzaW5mKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVM
b2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkg
Y29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjptYXhUaW1lTG9hZGVkKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IHdrUVRNb3ZpZU1heFRpbWVMb2FkZWQobV9xdE1vdmllLmdldCgpKTsgCiB9CiAKLXVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBjb25zdAordW5zaWduZWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OmJ5dGVzTG9hZGVkKCkgY29uc3QKIHsKICAgICBmbG9hdCBkdXIg
PSBkdXJhdGlvbigpOwogICAgIGlmICghZHVyKQpAQCAtNjA1LDE5ICs2MTcsMTkgQEAgdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVybiB0b3RhbEJ5dGVz
KCkgKiBtYXhUaW1lTG9hZGVkKCkgLyBkdXI7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
Ojp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAgICByZXR1cm4gdG90YWxCeXRlcygpID4gMDsK
IH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3Vu
c2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFtbbV9xdE1v
dmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllRGF0YVNpemVBdHRyaWJ1dGVdIGludFZh
bHVlXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExvYWQoKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuY2VsTG9hZCgpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgYmV0dGVyIHdheSB0byBjaGVjayBmb3IgdGhpcz8KICAgICBpZiAobV9uZXR3b3Jr
U3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBs
YXllcjo6TG9hZGVkKQpAQCAtNjI5LDcgKzY0MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpjYW5jZWxMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnVwZGF0ZVN0YXRlcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp1
cGRhdGVTdGF0ZXMoKQogewogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xk
UmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKQEAgLTY4MywyNyArNjk1LDI3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICBzZXRVcFZpZGVvUmVuZGVy
aW5nKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkU3RhdGVDaGFuZ2VkKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRTdGF0ZUNoYW5nZWQoKQogewogICAg
IHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmF0ZUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmF0ZUNoYW5nZWQoKQogewogICAg
IHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2l6ZUNoYW5n
ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQoKQogewogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dGltZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVRVEtpdDo6dGltZUNoYW5nZWQoKQogewogICAgIHVwZGF0ZVN0YXRlcygpOwogICAg
IG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6
ZGlkRW5kKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpZEVuZCgpCiB7CiAgICAg
bV9lbmRQb2ludFRpbWVyLnN0b3AoKTsKICAgICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7CkBA
IC03MTQsNyArNzI2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpZEVuZCgpCiAgICAg
bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSAKIHsgCiAgICAgaWYgKCFtX3F0TW92aWVWaWV3KSAK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzc0Myw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRSZWN0KGNvbnN0IEkKICAgICB9ICAgCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpzZXRWaXNpYmxlKGJvb2wgYikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNl
dFZpc2libGUoYm9vbCBiKQogewogICAgIGlmIChtX3Zpc2libGUgIT0gYikgewogICAgICAgICBt
X3Zpc2libGUgPSBiOwpAQCAtNzQzLDcgKzc1NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
OjpzZXRWaXNpYmxlKGJvb2wKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpy
ZXBhaW50KCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlcGFpbnQoKQogewogI2lm
IERSQVdfRlJBTUVfUkFURQogICAgIGlmIChtX3N0YXJ0ZWRQbGF5aW5nKSB7CkBAIC03NTcsNyAr
NzY5LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlcGFpbnQoKQogICAgIG1fcGxheWVy
LT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNzg3LDcgKzc5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChH
cmFwaGljc0MKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICAgICAvLyBEcmF3IHRoZSBmcmFtZSByYXRl
IG9ubHkgYWZ0ZXIgaGF2aW5nIHBsYXllZCBtb3JlIHRoYW4gMTAgZnJhbWVzLgogICAgIGlmICht
X2ZyYW1lQ291bnRXaGlsZVBsYXlpbmcgPiAxMCkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBt
X3BsYXllci0+bV9mcmFtZVZpZXcgPyBtX3BsYXllci0+bV9mcmFtZVZpZXctPmZyYW1lKCkgOiBO
VUxMOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCkgPyBtX3Bs
YXllci0+ZnJhbWVWaWV3KCktPmZyYW1lKCkgOiBOVUxMOwogICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogTlVMTDsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPnJlbmRlcmVyKCkgOiBOVUxM
OwogICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRlcmVyID8gcmVuZGVyZXIt
PnN0eWxlKCkgOiBOVUxMOwpAQCAtODEzLDIzICs4MjUsNDMgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50KEdyYXBoaWNzQwogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxh
eUNhbGxiYWNrczpOT107CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQorc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBt
aW1lVHlwZUNhY2hlKCkKIHsKLSAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3ZpZSBtb3Zp
ZUZpbGVUeXBlczpRVEluY2x1ZGVDb21tb25UeXBlc107Ci0gICAgaW50IGNvdW50ID0gW2ZpbGVU
eXBlcyBjb3VudF07Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAg
ICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KFtmaWxl
VHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFn
Q2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7Ci0gICAgICAgIGlmICghdXRpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWlt
ZShBZG9wdENGLCBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aS5nZXQoKSwga1VU
VGFnQ2xhc3NNSU1FVHlwZSkpOwotICAgICAgICBpZiAoIW1pbWUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdHlwZXMuYWRkKG1pbWUuZ2V0KCkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVM
aXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkg
eworICAgICAgICBOU0FycmF5KiBmaWxlVHlwZXMgPSBbUVRNb3ZpZSBtb3ZpZUZpbGVUeXBlczpR
VEluY2x1ZGVDb21tb25UeXBlc107CisgICAgICAgIGludCBjb3VudCA9IFtmaWxlVHlwZXMgY291
bnRdOworICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKyAgICAgICAg
ICAgIENGU3RyaW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KFtmaWxl
VHlwZXMgb2JqZWN0QXRJbmRleDpuXSk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHV0aShBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtV
VFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIGV4dCwgTlVMTCkpOworICAgICAgICAgICAgaWYg
KCF1dGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG1pbWUoQWRvcHRDRiwgVVRUeXBlQ29weVByZWZlcnJlZFRhZ1dpdGhDbGFz
cyh1dGkuZ2V0KCksIGtVVFRhZ0NsYXNzTUlNRVR5cGUpKTsKKyAgICAgICAgICAgIGlmICghbWlt
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhY2hlLmFkZChtaW1l
LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsK
ICAgICB9Ci19IAogICAgIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkK
KyAgICByZXR1cm4gY2FjaGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpn
ZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5cGVzID0g
bWltZVR5cGVDYWNoZSgpOworfSAKKworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gb25seSByZXR1cm4gIklzU3VwcG9ydGVkIiBpZiB0
aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZvciBub3cgYXMgdGhlcmUgaXMgbm8gd2F5IHRv
IGFzayBRVCBpZiBpdCBzdXBwb3J0cyBhbgorICAgIC8vICBleHRlbmRlZCBNSU1FIHR5cGUgeWV0
CisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBlKSA/IChjb2RlY3MgJiYg
IWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBs
YXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojppc0F2YWlsYWJsZSgpCiB7CiAjaWZkZWYgQlVJ
TERJTkdfT05fVElHRVIKICAgICBTSW50MzIgdmVyc2lvbjsKQEAgLTg1MCw3ICs4ODIsNyBAQCBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUoKQogI2VuZGlmCiB9CiAgICAgCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJhY2tzKHVuc2lnbmVk
JiBlbmFibGVkVHJhY2tDb3VudCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRpc2Fi
bGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQpCiB7CiAgICAg
aWYgKCFtX3F0TW92aWUpIHsKICAgICAgICAgZW5hYmxlZFRyYWNrQ291bnQgPSAwOwpAQCAtOTM5
LDcgKzk3MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkaXNhYmxlVW5zdXBwb3IKIAog
QGltcGxlbWVudGF0aW9uIFdlYkNvcmVNb3ZpZU9ic2VydmVyCiAKLS0gKGlkKWluaXRXaXRoQ2Fs
bGJhY2s6KE1lZGlhUGxheWVyUHJpdmF0ZSAqKWNhbGxiYWNrCistIChpZClpbml0V2l0aENhbGxi
YWNrOihNZWRpYVBsYXllclByaXZhdGVRVEtpdCAqKWNhbGxiYWNrCiB7CiAgICAgbV9jYWxsYmFj
ayA9IGNhbGxiYWNrOwogICAgIHJldHVybiBbc3VwZXIgaW5pdF07CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9u
b24uY3BwCShyZXZpc2lvbiA0MDY3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzEx
MCwxOCBAQCBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNCiAgICAgY29u
bmVjdChtX21lZGlhT2JqZWN0LCBTSUdOQUwodG90YWxUaW1lQ2hhbmdlZChxaW50NjQpKSwgdGhp
cywgU0xPVCh0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCkpKTsKIH0KIAorTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXllciogcGxh
eWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGUocGxheWVyKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdp
bmVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQorICAgICAg
ICByZWdpc3RyYXIoY3JlYXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlKTsKK30K
KworCiBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUoKQogewogICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVBob25vbjo6ZHRvciBkZWxldGluZyB2aWRlb3dp
ZGdldCIpOwpAQCAtMTMxLDYgKzE0MywxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0
U3VwcG9ydGVkVHlwCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIEZJWE1FOiBkbyB0aGUgcmVh
bCB0aGluZworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJ
c05vdFN1cHBvcnRlZDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKCkg
Y29uc3QKIHsKICAgICBib29sIGhhc1ZpZGVvID0gbV9tZWRpYU9iamVjdC0+aGFzVmlkZW8oKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBs
YXllclByaXZhdGVQaG9ub24uaAkocmV2aXNpb24gNDA2NzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMCw4ICsyMCw3IEBACiAjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbl9oCiAjZGVm
aW5lIE1lZGlhUGxheWVyUHJpdmF0ZVBob25vbl9oCiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgogCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRlIDxwaG9ub25uYW1lc3BhY2Uu
aD4KQEAgLTQwLDEyICszOSwxMiBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBO
b25jb3B5YWJsZSB7CisgICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGljIFFPYmpl
Y3QsIHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogCiAgICAgICAgIFFfT0JK
RUNUCiAKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXll
ciopOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5l
UmVnaXN0cmFyKTsKICAgICAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwogCiAgICAgICAgIC8v
IFRoZXNlIGVudW1zIGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcKQEAgLTExMiw4ICsxMTEsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0Jik7
CiAKICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpICAgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBib29sIGV2ZW50RmlsdGVyKFFPYmplY3QqLCBRRXZl
bnQqKTsKQEAgLTEzMCw2ICsxMjcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHRvdGFsVGltZUNoYW5nZWQocWludDY0KTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBsYXllciopOworICAgICAgICBzdGF0aWMgTWVkaWFQbGF5
ZXJQcml2YXRlSW50ZXJmYWNlKiBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZShNZWRpYVBsYXll
ciAqcGxheWVyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNl
dDxTdHJpbmc+Jik7CisgICAgICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1
cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSB7IHJldHVybiB0cnVlOyB9CisKICAgICAg
ICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKIAogICAgICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAJKHJldmlzaW9uIDQwNjc1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsMTAgQEAKICNpbmNsdWRlICJL
VVJMLmgiCiAjaW5jbHVkZSAiUVRNb3ZpZVdpbi5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAog
I2lmIERSQVdfRlJBTUVfUkFURQogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTQ4LDE0ICs1MSwyNSBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK01lZGlhUGxh
eWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmNyZWF0ZShNZWRp
YVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllclByaXZhdGVR
VFdpbihwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpyZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAo
aXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlw
ZXMsIHN1cHBvcnRzVHlwZSk7Cit9CisKIHN0YXRpYyBjb25zdCBkb3VibGUgZW5kUG9pbnRUaW1l
ckludGVydmFsID0gMC4wMjA7Ci0gICAgCi1NZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciogcGxheWVyKQorCitNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6
TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW4oTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fcGxh
eWVyKHBsYXllcikKICAgICAsIG1fc2Vla1RvKC0xKQogICAgICwgbV9lbmRUaW1lKG51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKLSAgICAsIG1fc2Vla1RpbWVyKHRoaXMsICZNZWRp
YVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKQotICAgICwgbV9lbmRQb2ludFRpbWVyKHRo
aXMsICZNZWRpYVBsYXllclByaXZhdGU6OmVuZFBvaW50VGltZXJGaXJlZCkKKyAgICAsIG1fc2Vl
a1RpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6c2Vla1RpbWVyRmlyZWQpCisg
ICAgLCBtX2VuZFBvaW50VGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjplbmRQ
b2ludFRpbWVyRmlyZWQpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkp
CiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkRhdGFVbmF2YWlsYWJsZSkKICAgICAs
IG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCkBAIC02OCwxMSArODIsMTEgQEAgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpNZWRpYVBsYXllclByaXZhdGUoTQogewogfQogCi1NZWRpYVBsYXllclByaXZhdGU6
On5NZWRpYVBsYXllclByaXZhdGUoKQorTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46On5NZWRpYVBs
YXllclByaXZhdGVRVFdpbigpCiB7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bG9hZChj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVRdWlj
a1RpbWUoKSkgewogICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkRmFp
bGVkOwpAQCAtOTMsMTEgKzEwNywxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChj
b25zdCBTdHJpCiAKICAgICBtX3F0TW92aWUuc2V0KG5ldyBRVE1vdmllV2luKHRoaXMpKTsKICAg
ICBtX3F0TW92aWUtPmxvYWQodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0aCgpKTsKLSAgICBt
X3F0TW92aWUtPnNldFZvbHVtZShtX3BsYXllci0+bV92b2x1bWUpOwotICAgIG1fcXRNb3ZpZS0+
c2V0VmlzaWJsZShtX3BsYXllci0+bV92aXNpYmxlKTsKKyAgICBtX3F0TW92aWUtPnNldFZvbHVt
ZShtX3BsYXllci0+dm9sdW1lKCkpOworICAgIG1fcXRNb3ZpZS0+c2V0VmlzaWJsZShtX3BsYXll
ci0+dmlzaWJsZSgpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBsYXkoKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6cGxheSgpCiB7CiAgICAgaWYgKCFtX3F0TW92aWUp
CiAgICAgICAgIHJldHVybjsKQEAgLTExMCw3ICsxMjQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cGxheSgpCiAgICAgc3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRX
aW46OnBhdXNlKCkKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTIyLDIxICsxMzYsMjEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKCkKICAgICBt
X2VuZFBvaW50VGltZXIuc3RvcCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1
cmF0aW9uKCkgY29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpkdXJhdGlvbigp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJl
dHVybiBtX3F0TW92aWUtPmR1cmF0aW9uKCk7CiB9CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3VycmVudFRpbWUoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmN1
cnJlbnRUaW1lKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIG1pbihtX3F0TW92aWUtPmN1cnJlbnRUaW1lKCksIG1fZW5kVGltZSk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVrKGZsb2F0IHRpbWUpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZWVrKGZsb2F0IHRpbWUpCiB7CiAgICAgY2FuY2VsU2Vl
aygpOwogICAgIApAQCAtMTUzLDcgKzE2Nyw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpz
ZWVrKGZsb2F0IHRpbWUKICAgICAgICAgbV9zZWVrVGltZXIuc3RhcnQoMCwgMC41Zik7CiB9CiAg
ICAgCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZG9TZWVrKCkgCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVFUV2luOjpkb1NlZWsoKSAKIHsKICAgICBmbG9hdCBvbGRSYXRlID0gbV9xdE1vdmll
LT5yYXRlKCk7CiAgICAgbV9xdE1vdmllLT5zZXRSYXRlKDApOwpAQCAtMTY1LDEzICsxNzksMTMg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRvU2VlaygpIAogICAgIGNhbmNlbFNlZWsoKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbFNlZWsoKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVFdpbjo6Y2FuY2VsU2VlaygpCiB7CiAgICAgbV9zZWVrVG8gPSAtMTsKICAg
ICBtX3NlZWtUaW1lci5zdG9wKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVr
VGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+KikKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRXaW46OnNlZWtUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVFUV2lu
PiopCiB7ICAgICAgICAKICAgICBpZiAoIW1fcXRNb3ZpZSB8fCAhc2Vla2luZygpIHx8IGN1cnJl
bnRUaW1lKCkgPT0gbV9zZWVrVG8pIHsKICAgICAgICAgY2FuY2VsU2VlaygpOwpAQCAtMTkyLDE5
ICsyMDYsMTkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNlZWtUaW1lckZpcmVkKAogICAg
IH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldEVuZFRpbWUoZmxvYXQgdGltZSkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnNldEVuZFRpbWUoZmxvYXQgdGltZSkKIHsK
ICAgICBtX2VuZFRpbWUgPSB0aW1lOwogICAgIHN0YXJ0RW5kUG9pbnRUaW1lcklmTmVlZGVkKCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdGFydEVuZFBvaW50VGltZXJJZk5lZWRl
ZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzdGFydEVuZFBvaW50VGltZXJJZk5l
ZWRlZCgpCiB7CiAgICAgaWYgKG1fZW5kVGltZSA8IGR1cmF0aW9uKCkgJiYgbV9zdGFydGVkUGxh
eWluZyAmJiAhbV9lbmRQb2ludFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZW5kUG9pbnRU
aW1lci5zdGFydFJlcGVhdGluZyhlbmRQb2ludFRpbWVySW50ZXJ2YWwpOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6ZW5kUG9pbnRUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJp
dmF0ZT4qKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6ZW5kUG9pbnRUaW1lckZpcmVk
KFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luPiopCiB7CiAgICAgZmxvYXQgdGltZSA9IGN1
cnJlbnRUaW1lKCk7CiAgICAgaWYgKHRpbWUgPj0gbV9lbmRUaW1lKSB7CkBAIC0yMTMsMjEgKzIy
NywyMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6ZW5kUG9pbnRUaW1lckZpCiAgICAgfQog
fQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGF1c2VkKCkgY29uc3QKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW46OnBhdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3F0TW92aWUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBtX3F0TW92aWUtPnJhdGUoKSA9PSAw
LjBmOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0Citib29s
IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZWVraW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
cXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3NlZWtUbyA+PSAw
OwogfQogCi1JbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAor
SW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bmF0dXJhbFNpemUoKSBjb25zdAogewog
ICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwpAQCAtMjM3LDIx
ICsyNTEsMjEgQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKAogICAg
IHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZTo6aGFzVmlkZW8oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6aGFz
VmlkZW8oKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIG1fcXRNb3ZpZS0+aGFzVmlkZW8oKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVFUV2luOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQogewogICAgIGlmICghbV9xdE1vdmll
KQogICAgICAgICByZXR1cm47CiAgICAgbV9xdE1vdmllLT5zZXRWb2x1bWUodm9sdW1lKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRXaW46OnNldFJhdGUoZmxvYXQgcmF0ZSkKIHsKICAgICBpZiAoIW1f
cXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5LDMyICsyNzMsMzIgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6OnNldFJhdGUoZmxvYXQgcgogICAgICAgICBtX3F0TW92aWUtPnNldFJh
dGUocmF0ZSk7CiB9CiAKLWludCBNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKCkgY29uc3QK
K2ludCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6ZGF0YVJhdGUoKSBjb25zdAogewogICAgIC8v
IFRoaXMgaXMgbm90IHVzZWQgYXQgdGhlIG1vbWVudAogICAgIHJldHVybiAwOwogfQogCi1mbG9h
dCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVCdWZmZXJlZCgpIGNvbnN0CitmbG9hdCBNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6bWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QKIHsKICAgICAvLyBy
dHNwIHN0cmVhbXMgYXJlIG5vdCBidWZmZXJlZAogICAgIHJldHVybiBtX2lzU3RyZWFtaW5nID8g
MCA6IG1heFRpbWVMb2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhU
aW1lU2Vla2FibGUoKSBjb25zdAorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2
ZSBzdHJlYW0KICAgICByZXR1cm4gIWlzZmluaXRlKGR1cmF0aW9uKCkpID8gMCA6IG1heFRpbWVM
b2FkZWQoKTsKIH0KIAotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkg
Y29uc3QKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjptYXhUaW1lTG9hZGVkKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcXRNb3ZpZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IG1fcXRNb3ZpZS0+bWF4VGltZUxvYWRlZCgpOyAKIH0KIAotdW5zaWduZWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpieXRlc0xvYWRlZCgpIGNvbnN0Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVR
VFdpbjo6Ynl0ZXNMb2FkZWQoKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTI5NSwxOSArMzA5LDE5IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Ynl0ZXNMb2FkZWQKICAgICByZXR1cm4gdG90YWxCeXRlcygpICogbWF4VGltZSAvIGR1
cjsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjp0b3RhbEJ5dGVzS25vd24oKSBjb25zdAog
ewogICAgIHJldHVybiB0b3RhbEJ5dGVzKCkgPiAwOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXll
clByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRl
UVRXaW46OnRvdGFsQnl0ZXMoKSBjb25zdAogewogICAgIGlmICghbV9xdE1vdmllKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9xdE1vdmllLT5kYXRhU2l6ZSgpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2FuY2VsTG9hZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVFUV2luOjpjYW5jZWxMb2FkKCkKIHsKICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBs
YXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKQog
ICAgICAgICByZXR1cm47CkBAIC0zMTgsNyArMzMyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmNhbmNlbExvYWQoKQogICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6dXBkYXRlU3RhdGVzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46
OnVwZGF0ZVN0YXRlcygpCiB7CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3
b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBv
bGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwpAQCAtMzY5LDcgKzM4Myw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjp1cGRhdGVTdGF0ZXMoKQogfQogCiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpkaWRFbmQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6ZGlkRW5kKCkK
IHsKICAgICBtX2VuZFBvaW50VGltZXIuc3RvcCgpOwogICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBm
YWxzZTsKQEAgLTM4MCwyMCArMzk0LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpkaWRF
bmQoKQogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUVRXaW46OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgCiB7IAogICAgIGlmIChtX3F0TW92
aWUpCiAgICAgICAgIG1fcXRNb3ZpZS0+c2V0U2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0VmlzaWJsZShib29sIGIpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpzZXRWaXNpYmxlKGJvb2wgYikKIHsKICAgICBpZiAoIW1f
cXRNb3ZpZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcXRNb3ZpZS0+c2V0VmlzaWJsZShiKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwg
Y29uc3QgSW50UmVjdCYgcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocC0+cGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFtX3F0TW92aWUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMyw3ICs0
MTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAKICNpZiBE
UkFXX0ZSQU1FX1JBVEUKICAgICBpZiAobV9mcmFtZUNvdW50V2hpbGVQbGF5aW5nID4gMTApIHsK
LSAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9wbGF5ZXItPm1fZnJhbWVWaWV3ID8gbV9wbGF5ZXIt
Pm1fZnJhbWVWaWV3LT5mcmFtZSgpIDogTlVMTDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9w
bGF5ZXItPmZyYW1lVmlldygpID8gbV9wbGF5ZXItPmZyYW1lVmlldygpLT5mcmFtZSgpIDogTlVM
TDsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUgPyBmcmFtZS0+ZG9jdW1lbnQo
KSA6IE5VTEw7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkb2N1bWVudCA/IGRv
Y3VtZW50LT5yZW5kZXJlcigpIDogTlVMTDsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9V
c2UgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogTlVMTDsKQEAgLTQyNyw0MyArNDQx
LDY0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludChHcmFwaGljc0MKICNlbmRpZgog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxT
dHJpbmc+JiB0eXBlcykKK3N0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCiB7
Ci0gICAgdW5zaWduZWQgY291bnQgPSBRVE1vdmllV2luOjpjb3VudFN1cHBvcnRlZFR5cGVzKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLSAgICAgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcjsKLSAgICAgICAgdW5zaWduZWQgbGVuOwotICAgICAgICBRVE1v
dmllV2luOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKLSAgICAgICAgaWYg
KGxlbikKLSAgICAgICAgICAgIHR5cGVzLmFkZChTdHJpbmcoY2hhcmFjdGVyLCBsZW4pKTsKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUNhY2hlLCAoKSk7Cisg
ICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0
eXBlTGlzdEluaXRpYWxpemVkKSB7CisJCXVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291
bnRTdXBwb3J0ZWRUeXBlcygpOworCQlmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7IG4r
KykgeworCQkJY29uc3QgVUNoYXIqIGNoYXJhY3RlcjsKKwkJCXVuc2lnbmVkIGxlbjsKKwkJCVFU
TW92aWVXaW46OmdldFN1cHBvcnRlZFR5cGUobiwgY2hhcmFjdGVyLCBsZW4pOworCQkJaWYgKGxl
bikKKwkJCQl0eXBlQ2FjaGUuYWRkKFN0cmluZyhjaGFyYWN0ZXIsIGxlbikpOworCQl9CisKKyAg
ICAgICAgdHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQorICAgIAorICAgIHJldHVy
biB0eXBlQ2FjaGU7Cit9IAorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKQoreworICAgIHR5cGVzID0gbWltZVR5
cGVDYWNoZSgpOwogfSAKIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OmlzQXZhaWxhYmxlKCkK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OmlzQXZhaWxhYmxlKCkKIHsKICAgICByZXR1
cm4gUVRNb3ZpZVdpbjo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmllV2luKiBtb3ZpZSkKK01lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46OnN1cHBvcnRzVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKQoreworICAgIC8vIG9ubHkgcmV0dXJu
ICJJc1N1cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFz
IHRoZXJlIGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KKyAgICAvLyAgZXh0
ZW5kZWQgTUlNRSB0eXBlCisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyh0eXBl
KSA/ICghY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1l
ZGlhUGxheWVyOjpJc1N1cHBvcnRlZCkgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRXaW46Om1vdmllRW5kZWQoUVRNb3ZpZVdpbiog
bW92aWUpCiB7CiAgICAgQVNTRVJUKG1fcXRNb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CiAgICAgZGlk
RW5kKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5n
ZWQoUVRNb3ZpZVdpbiogbW92aWUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjptb3Zp
ZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdpbiogbW92aWUpCiB7CiAgICAgQVNTRVJUKG1fcXRN
b3ZpZS5nZXQoKSA9PSBtb3ZpZSk7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjptb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qIG1vdmllKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVFdpbjo6bW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2luKiBt
b3ZpZSkKIHsKICAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKICAgICB1cGRh
dGVTdGF0ZXMoKTsKICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGU6Om1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiogbW92aWUp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjptb3ZpZU5ld0ltYWdlQXZhaWxhYmxlKFFU
TW92aWVXaW4qIG1vdmllKQogewogICAgIEFTU0VSVChtX3F0TW92aWUuZ2V0KCkgPT0gbW92aWUp
OwogI2lmIERSQVdfRlJBTUVfUkFURQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgJ
KHJldmlzaW9uIDQwNjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShWSURFTykKIAotI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDxRVE1vdmllV2luLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDQsMTAgKzQ0LDEx
IEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgU3RyaW5nOwogCi1jbGFz
cyBNZWRpYVBsYXllclByaXZhdGUgOiBRVE1vdmllV2luQ2xpZW50LCBOb25jb3B5YWJsZSB7Citj
bGFzcyBNZWRpYVBsYXllclByaXZhdGVRVFdpbiA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UsIHB1YmxpYyBRVE1vdmllV2luQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBNZWRpYVBs
YXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKLSAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7Cisg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
CisKKyAgICB+TWVkaWFQbGF5ZXJQcml2YXRlUVRXaW4oKTsKICAgICAKICAgICBJbnRTaXplIG5h
dHVyYWxTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwpAQCAtODgsMTUg
Kzg5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKICAgICAKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgp
OwogCiBwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luKE1lZGlhUGxheWVyKik7
CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogICAgIHZvaWQgZG9TZWVrKCk7CiAgICAgdm9p
ZCBjYW5jZWxTZWVrKCk7Ci0gICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXll
clByaXZhdGU+Kik7Ci0gICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5
ZXJQcml2YXRlPiopOworICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQ
cml2YXRlUVRXaW4+Kik7CisgICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVkaWFQ
bGF5ZXJQcml2YXRlUVRXaW4+Kik7CiAgICAgZmxvYXQgbWF4VGltZUxvYWRlZCgpIGNvbnN0Owog
ICAgIHZvaWQgc3RhcnRFbmRQb2ludFRpbWVySWZOZWVkZWQoKTsKIApAQCAtMTA0LDEzICsxMDUs
MTkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFU
TW92aWVXaW4qKTsKICAgICB2aXJ0dWFsIHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllV2lu
Kik7CiAgICAgdmlydHVhbCB2b2lkIG1vdmllTmV3SW1hZ2VBdmFpbGFibGUoUVRNb3ZpZVdpbiop
OwotICAgICAgCisKKyAgICAvLyBlbmdpbmUgc3VwcG9ydAorICAgIHN0YXRpYyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
Zz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0
c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3Rh
dGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAg
ICBPd25QdHI8UVRNb3ZpZVdpbj4gbV9xdE1vdmllOwogICAgIGZsb2F0IG1fc2Vla1RvOwogICAg
IGZsb2F0IG1fZW5kVGltZTsKLSAgICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fc2Vla1Rp
bWVyOwotICAgIFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4gbV9lbmRQb2ludFRpbWVyOworICAg
IFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVFUV2luPiBtX3NlZWtUaW1lcjsKKyAgICBUaW1lcjxN
ZWRpYVBsYXllclByaXZhdGVRVFdpbj4gbV9lbmRQb2ludFRpbWVyOwogICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgbV9yZWFkeVN0YXRlOwogICAgIGJvb2wgbV9zdGFydGVkUGxheWluZzsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCShyZXZpc2lvbiA0MDY3
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTAsNyArNzEwLDYgQEAgdm9pZCBRVE1vdmllV2luOjpkaXNhYmxlVW5z
dXBwb3J0ZWRUcmFjawogICAgIH0KIH0KIAotCiBib29sIFFUTW92aWVXaW46Omhhc1ZpZGVvKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27538</attachid>
            <date>2009-02-10 14:15:44 -0800</date>
            <delta_ts>2009-02-11 13:38:35 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>54305</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDgzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDA5LTAyLTEwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIEFudHRpIEtvaXZpc3RvLCBEYXJpbiBBZGxlciwgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAgICAgICAgCisgICAgICAgIEJ1ZyAyMzc5NzogQSBwbGF0
Zm9ybSBzaG91bGQgYmUgYWJsZSB0byB1c2UgbW9yZSB0aGFuIG9uZSBtZWRpYSBlbmdpbmUgZm9y
IDx2aWRlbz4gYW5kIDxhdWRpbz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNzk3CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IGFkZCBNZWRpYVBsYXllclByaXZhdGUuaAorCisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omxv
YWQpOiBzZWxlY3RNZWRpYVVSTCBub3cgcmV0dXJucyBhIE1JTUUgdHlwZSwgcGFzcyBpdCB0bwor
ICAgICAgICBNZWRpYVBsYXllcjo6bG9hZCBzbyBpdCBjYW4gY2hvb3NlIHRoZSByaWdodCBtZWRp
YSBlbmdpbmUKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlh
VVJMKTogcmVuYW1lZCBmcm9tIHBpY2tNZWRpYS4gdXNlIE1JTUVUeXBlUmVnaXN0cnkKKyAgICAg
ICAgZnVuY3Rpb25zIHRvIHN0cmlwIHBhcmFtcyBmcm9tIHRoZSB1cmwgYW5kIGV4dHJhY3QgdGhl
IGNvZGVjcyBwYXJhbWV0ZXIuIGNhbGwgCisgICAgICAgIE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5
cGUgdG8gc2VlIGlmIHdlIGNhbiBvcGVuIHRoZSBmaWxlIHNpbmNlIG9ubHkgYSBtZWRvYSBlbmdp
bmUgY2FuCisgICAgICAgIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgc3VwcG9ydGVkIHR5cGUrY29k
ZWNzLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUpOiBOZXcsIGZpbmQgYW5kIHJldHVybiBh
IE1JTUUgdHlwZSBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OnN0cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZSk6IE5ldywgc3RyaXAgYWxsIHBhcmFtZXRlcnMg
ZnJvbSBhIE1JTUUgdHlwZQorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaDoK
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyRmFjdG9yeTo6TWVkaWFQbGF5ZXJGYWN0b3J5KTogTmV3LCBm
YWN0b3J5IGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6aW5zdGFsbGVkTWVkaWFFbmdp
bmVzKTogTmV3LCByZXR1cm5zIHZlY3RvciBvZiBhbGwgaW5zdGFsbGVkIGVuZ2luZXMuCisgICAg
ICAgIChXZWJDb3JlOjphZGRNZWRpYUVuZ2luZSk6IE5ldywgYWRkIGEgbWVkaWEgZW5naW5lIHRv
IHRoZSBjYWNoZS4KKyAgICAgICAgKFdlYkNvcmU6OmNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5k
Q29kZWNzKTogTmV3LCByZXR1cm4gYW4gZW5naW5lIHRoYXQgbWlnaHQgc3VwcG9ydCBhIE1JTUUg
dHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpNZWRpYVBsYXllcik6IGNyZWF0
ZSBOVUxMIG1lZGlhIHBsYXllciBzbyB3ZSBoYXZlIGEgZGVmYXVsdAorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OmxvYWQpOiBUYWtlIE1JTUUgdHlwZSBhcyB3ZWxsIGFzIHVybCwgc2lu
Y2Ugd2UgbmVlZCBpdCB0byBmaW5kIHRoZSByaWdodAorICAgICAgICAgIG1lZGlhIGVuZ2luZS4g
SWYgbm8gTUlNRSB0eXBlIGlzIHByb3ZpZGVkLCB0cnkgdG8gZGV2aW5lIG9uZSBmcm9tIHRoZSB1
cmwuIENob29zZSBhIG1lZGlhIGVuZ2luZQorICAgICAgICAgIGJhc2VkIG9uIHRoZSBNSU1FIHR5
cGUgYW5kIGNvZGVjcyBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
Y3VycmVudFRpbWUpOiBSZW1vdmUgZXhjZXNzIHdoaXRlIHNwYWNlLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZSk6ICBUYWtlIGNvZGVjcyBwYXJhbSBhcyB3ZWxs
IGFzIE1JTUUgdHlwZS4gUmV0dXJuIGVudW0gc28gd2UgY2FuCisgICAgICAgIGluZGljYXRlICJt
YXliZSIgY29uZGl0aW9uLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmdldFN1cHBv
cnRlZFR5cGVzKTogQnVpbGQgdXAgbGlzdCBvZiBNSU1FIHR5cGVzIGJ5IGNvbnN1bHRpbmcgYWxs
IGVuZ2luZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUpOiBy
ZXR1cm4gdHJ1ZSBpZiBhbnkgbWVkaWEgZW5naW5lIGlzIGluc3RhbGxlZC4KKworICAgICAgICAo
V2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjp+TlVMTE1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjps
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmNhbmNlbExv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbyk6CisgICAgICAgIChX
ZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TlVM
TE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZyk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVk
aWFQbGF5ZXJQcml2YXRlOjpzZXRFbmRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRp
YVBsYXllclByaXZhdGU6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxh
eWVyUHJpdmF0ZTo6cGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclBy
aXZhdGU6OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjpuZXR3b3JrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlOjptYXhUaW1lU2Vla2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVy
UHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBs
YXllclByaXZhdGU6OmRhdGFSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXll
clByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bik6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBs
YXllclByaXZhdGU6OmJ5dGVzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBs
YXllclByaXZhdGU6OnNldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVy
UHJpdmF0ZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTnVsbE1lZGlhUGxheWVy
KToKKyAgICAgICAgRG8gbm90aGluZyBtZWRpYSBwbGF5ZXIgc28gTWVkaWFQbGF5ZXIgZG9lc24n
dCBoYXZlIHRvIE5VTEwgY2hlY2sgYmVmb3JlIGNhbGxpbmcgY3VycmVudCBlbmdpbmUuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6ZnJhbWVW
aWV3KTogYWNjZXNzb3IgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaDogTmV3LCBkZWNsYXJlcyBhYnN0cmFjdCBpbnRlcmZhY2UgZm9y
IG1lZGlhIGVuZ2luZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2U6On5NZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp0b3RhbEJ5dGVzS25vd24pOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
aDogQWRkIHN1cHBvcnQgZm9yIGVuZ2luZSBmYWN0b3J5IAorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZSk6IE5ldywgbWVkaWEgZW5naW5lIGZh
Y3RvcnkgZnVuY3Rpb24KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6cmVn
aXN0ZXJNZWRpYUVuZ2luZSk6IFJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3Rv
cnkKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZCk6IFVSTCBpcyBh
IGNvbnN0IFN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVy
YXRpb24pOiBEZWNsYXJlIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlOjpuYXR1cmFsU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpoYXNWaWRlbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpuZXR3b3JrU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZTo6cmVhZHlTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmxlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlc0tub3duKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBl
KTogUmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJs
ZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y3JlYXRlKTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOiBSZWdp
c3RlciBlbmdpbmUgd2l0aCBNZWRpYVBsYXllciBmYWN0b3J5CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZVFUTW92aWVWaWV3KTogZG9uJ3QgYWNjZXNzIE1lZGlh
UGxheWVyLT5tX2ZyYW1lVmlldyBkaXJlY3RseSwKKyAgICAgICAgdXNlIGFjY2Vzc29yIGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcFZpZGVvUmVu
ZGVyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBh
aW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZUNhY2hlKTogTmV3LgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXBlcyk6IE5l
dywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGU6OnN1cHBvcnRzVHlwZSk6IHJldHVybiBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIGVudW0gaW5zdGVhZCBvZiBib29sCisgICAgICAgICgtW1dlYkNvcmVNb3ZpZU9ic2Vy
dmVyIGluaXRXaXRoQ2FsbGJhY2s6XSk6IGZpeCBmb3JtYXR0aW5nCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZCk6IFVSTCBpcyBhIGNvbnN0IFN0cmluZy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUpOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZSk6IE5l
dywgbWVkaWEgZW5naW5lIGZhY3RvcnkgZnVuY3Rpb24KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6IE5ldywgcmVnaXN0ZXIgZW5naW5l
IHdpdGggTWVkaWFQbGF5ZXIgZmFjdG9yeQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlOjpsb2FkKTogVVJMIGlzIGEgY29uc3QgU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpwYWludCk6IGRvbid0IGFjY2VzcyBNZWRpYVBsYXllci0+bV9m
cmFtZVZpZXcgZGlyZWN0bHksCisgICAgICAgIHVzZSBhY2Nlc3NvciBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Om1pbWVUeXBlQ2FjaGUpOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVRVFdpbjo6Z2V0U3VwcG9ydGVkVHlwZXMpOiBOZXcsIG1lZGlhIGVuZ2lu
ZSBmYWN0b3J5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
UVRXaW46OnN1cHBvcnRzVHlwZSk6IHJldHVybiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGVu
dW0gaW5zdGVhZCBvZiBib29sCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oOgorCiAyMDA5LTAyLTEwICBEaW1pdHJpIEdsYXpr
b3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNDA4MjgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkwOSw2ICs0OTA5LDcgQEAKIAkJMDZFODFFRDYwQUI1
RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1REE5NzAwQzg3ODM3IC8qIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcyN0RFQiAvKiBtZWRpYUNvbnRy
b2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYzQkVCRUEwMDVFMDc4MiAvKiBN
ZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVk
aWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QUZFNTkw
MEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3NzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5j
c3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUwRUQzQjJERDAwQzUzQkMwIC8q
IFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
QW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMDAsNiAr
MTMxMDEsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5o
ICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBNZWRpYVBsYXllci5jcHAgKi8s
CiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmggKi8sCisJCQkJ
MDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICovLAogCQkJ
CUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAqLywKIAkJCQlCMjc1MzU1MzBC
MDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERENDg4MEI0NjI5QjAwMEMwMjk5
MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDA4MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw2ICsyNzksNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmxvYWQoRXhjZXB0aW9uQ29kCiAgICAgfQogCiAgICAgU3RyaW5nIG1lZGlhU3JjOwor
ICAgIFN0cmluZyBtZWRpYU1JTUVUeXBlOwogCiAgICAgLy8gMy4xNC45LjQuIExvYWRpbmcgdGhl
IG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzI2LDcgKzMyNyw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAgICAgLy8gNgotICAg
IG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBzZWxlY3RNZWRpYVVSTCht
ZWRpYU1JTUVUeXBlKTsKICAgICBpZiAobWVkaWFTcmMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIGdvdG8gZW5kOwpAQCAtMzQ4LDcgKzM0OSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICBtX3BsYXll
ci5jbGVhcigpOwogICAgIG1fcGxheWVyLnNldChuZXcgTWVkaWFQbGF5ZXIodGhpcykpOwogICAg
IHVwZGF0ZVZvbHVtZSgpOwotICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVudFNyYyk7CisgICAg
bV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBtZWRpYU1JTUVUeXBlKTsKICAgICBpZiAobV9s
b2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwpCiAgICAg
ICAgIGdvdG8gZW5kOwogICAgIApAQCAtODUyLDcgKzg1Myw3IEBAIGJvb2wgSFRNTE1lZGlhRWxl
bWVudDo6Y2FuUGxheSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhdXNlZCgpIHx8IGVuZGVkKCkgfHwg
bmV0d29ya1N0YXRlKCkgPCBMT0FERURfTUVUQURBVEE7CiB9CiAKLVN0cmluZyBIVE1MTWVkaWFF
bGVtZW50OjpwaWNrTWVkaWEoKQorU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlh
VVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSkKIHsKICAgICAvLyAzLjE0LjkuMi4gTG9jYXRpb24g
b2YgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgU3RyaW5nIG1lZGlhU3JjID0gZ2V0QXR0cmlidXRl
KHNyY0F0dHIpOwpAQCAtODcwLDE0ICs4NzEsMTQgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OnBpY2tNZWRpYSgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21N
SU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzaW1w
bGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKHR5
cGUpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJhbWV0ZXJz
IGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbSBiZWZvcmUgY2hlY2tpbmcgd2l0aCB0aGUg
dHlwZSByZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICBpbnQgc2VtaSA9IHR5cGUuZmluZCgn
OycpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VtaSAhPSAtMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSB0eXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlh
TUlNRVR5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghTWVkaWFQbGF5ZXI6OnN1
cHBvcnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUgd2l0aCBhbGwg
cGFyYW1ldGVycyBpbiBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1c2UgdGhlbQorICAg
ICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpLnN0cmluZygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lv
biA0MDgyOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgcGlja01lZGlhKCk7CisgICAgU3Ry
aW5nIHNlbGVjdE1lZGlhVVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSk7CiAgICAgdm9pZCB1cGRh
dGVWb2x1bWUoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIGZsb2F0IGVmZmVj
dGl2ZVN0YXJ0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDQwODI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw0MiBAQCBTdHJpbmcgTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iOwogfQogCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJvbU1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJOYW1lKQor
eworICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZTsKKworICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBo
YXZlIG9uZSBvciBtb3JlICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2Vw
YXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSBzZW1pLWNvbG9ucworICAgIGludCBzZW1pID0gdHlw
ZS5maW5kKCc7Jyk7CisgICAgaWYgKHNlbWkgIT0gLTEpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0g
dHlwZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7CisgICAgICAgIGlmIChz
dGFydCAhPSAtMSkgeworICAgICAgICAgICAgc3RhcnQgPSB0eXBlLmZpbmQoJz0nLCBzdGFydCAr
IDYpOworICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaW50
IGVuZCA9IHR5cGUuZmluZCgnOycsIHN0YXJ0ICsgNik7CisgICAgICAgICAgICAgICAgaWYgKGVu
ZCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwgZW5k
IC0gKHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlOworfQorCitTdHJpbmcgTUlN
RVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1pbWVUeXBlLnN0cmlwV2hp
dGVTcGFjZSgpOworCisgICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0ZXIgYSBz
ZW1pLWNvbG9uLCBzdHJpcCB0aGVtCisgICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgn
OycpOworICAgIGlmIChzZW1pICE9IC0xKQorICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJpcHBl
ZFR5cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIHJldHVybiBzdHJpcHBl
ZFR5cGU7Cit9CisKKworCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0Vt
cHR5KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkocmV2aXNpb24gNDA4
MjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5
cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHQpOwogICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBnZXRFeHRlbnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBz
dGF0aWMgU3RyaW5nIGdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldFBhcmFtZXRlckZyb21NSU1FVHlwZShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSk7CisgICAgc3Rh
dGljIFN0cmluZyBzdHJpcFBhcmFtZXRlcnNGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KTsKKwogICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVGb3JQYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBtaW1lIHR5cGUgaXMgc3VpdGFibGUg
Zm9yIGJlaW5nIGxvYWRlZCBpbmxpbmUgYXMgYW4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiA0MDgyOCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDcsMTAgKzQ4LDgzIEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyArKysrKysrKysrKysrKysrKysrKworLy8gZW5naW5lIHN1
cHBvcnQKKworc3RydWN0IE1lZGlhUGxheWVyRmFjdG9yeSB7CisgICAgTWVkaWFQbGF5ZXJGYWN0
b3J5KENyZWF0ZU1lZGlhRW5naW5lUGxheWVyIGNvbnN0cnVjdG9yLCBNZWRpYUVuZ2luZVN1cHBv
cnRlZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVuZ2luZVN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGVBbmRDb2RlY3MpIAorICAgICAgICA6IGNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKQor
ICAgICAgICAsIGdldFN1cHBvcnRlZFR5cGVzKGdldFN1cHBvcnRlZFR5cGVzKQorICAgICAgICAs
IHN1cHBvcnRzVHlwZUFuZENvZGVjcyhzdXBwb3J0c1R5cGVBbmRDb2RlY3MpICAKKyAgICB7IH0K
KworICAgIENyZWF0ZU1lZGlhRW5naW5lUGxheWVyIGNvbnN0cnVjdG9yOworICAgIE1lZGlhRW5n
aW5lU3VwcG9ydGVkVHlwZXMgZ2V0U3VwcG9ydGVkVHlwZXM7CisgICAgTWVkaWFFbmdpbmVTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlQW5kQ29kZWNzOworfTsKKworc3RhdGljIHZvaWQgYWRkTWVk
aWFFbmdpbmUoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5ZXIsIE1lZGlhRW5naW5lU3VwcG9ydGVkVHlw
ZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlKTsKK3N0YXRpYyBNZWRpYVBsYXllckZhY3Rvcnkq
IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBjb2RlY3MpOworCitzdGF0aWMgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+
JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKSAKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZl
Y3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiwgaW5zdGFsbGVkRW5naW5lcywgKCkpOworICAgIHN0
YXRpYyBib29sIGVuZ2luZXNRdWVyaWVkID0gZmFsc2U7CisKKyAgICBpZiAoIWVuZ2luZXNRdWVy
aWVkKSB7CisgICAgICAgIGVuZ2luZXNRdWVyaWVkID0gdHJ1ZTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpyZWdpc3Rlck1lZGlhRW5naW5lKGFk
ZE1lZGlhRW5naW5lKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRXaW46OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOworI2Vsc2UK
KyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlh
RW5naW5lKTsKKyNlbmRpZgorICAgIH0KICAgICAKLSAgICBNZWRpYVBsYXllcjo6TWVkaWFQbGF5
ZXIoTWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICByZXR1cm4gaW5zdGFsbGVkRW5naW5l
czsKK30KKworc3RhdGljIHZvaWQgYWRkTWVkaWFFbmdpbmUoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5
ZXIgY3RvciwgTWVkaWFFbmdpbmVTdXBwb3J0ZWRUeXBlcyBnZXRTdXBwb3J0ZWRUeXBlcywgTWVk
aWFFbmdpbmVTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKQoreworICAgIEFTU0VSVChjdG9yKTsK
KyAgICBBU1NFUlQoZ2V0U3VwcG9ydGVkVHlwZXMpOworICAgIEFTU0VSVChzdXBwb3J0c1R5cGUp
OworICAgIGluc3RhbGxlZE1lZGlhRW5naW5lcygpLmFwcGVuZChuZXcgTWVkaWFQbGF5ZXJGYWN0
b3J5KGN0b3IsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpKTsKK30KKworc3RhdGlj
IE1lZGlhUGxheWVyRmFjdG9yeSogY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3MoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICBWZWN0b3I8TWVk
aWFQbGF5ZXJGYWN0b3J5Kj4mIGVuZ2luZXMgPSBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKTsKKwor
ICAgIGlmIChlbmdpbmVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBNZWRp
YVBsYXllckZhY3RvcnkgKmVuZ2luZSA9IDA7CisgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0ZWQgPSBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IGVuZ2luZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbmR4ID0gMDsgbmR4
IDwgY291bnQ7ICsrbmR4KSB7CisgICAgICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZW5n
aW5lU3VwcG9ydCA9IGVuZ2luZXNbbmR4XS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNv
ZGVjcyk7CisgICAgICAgIGlmIChlbmdpbmVTdXBwb3J0ID4gc3VwcG9ydGVkKSB7CisgICAgICAg
ICAgICBzdXBwb3J0ZWQgPSBlbmdpbmVTdXBwb3J0OworICAgICAgICAgICAgZW5naW5lID0gZW5n
aW5lc1tuZHhdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVuZ2luZTsKK30KKwor
Ly8gKysrKysrKysrKysrKysrKysrKysKKy8vIG1lZGlhIHBsYXllcgorCitzdGF0aWMgTWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlKiBjcmVhdGVOdWxsTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIg
KnBsYXllcik7CisKK01lZGlhUGxheWVyOjpNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCog
Y2xpZW50KQogICAgIDogbV9tZWRpYVBsYXllckNsaWVudChjbGllbnQpCi0gICAgLCBtX3ByaXZh
dGUobmV3IE1lZGlhUGxheWVyUHJpdmF0ZSh0aGlzKSkKKyAgICAsIG1fcHJpdmF0ZShjcmVhdGVO
dWxsTWVkaWFQbGF5ZXIodGhpcykpCisgICAgLCBtX2N1cnJlbnRNZWRpYUVuZ2luZSgwKQogICAg
ICwgbV9mcmFtZVZpZXcoMCkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkKICAgICAsIG1fcmF0ZSgx
LjBmKQpAQCAtNjMsOSArMTM3LDMwIEBAIE1lZGlhUGxheWVyOjp+TWVkaWFQbGF5ZXIoKQogICAg
IGRlbGV0ZSBtX3ByaXZhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCit2b2lkIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIG1fcHJpdmF0ZS0+bG9hZCh1cmwpOworICAgIC8v
IGlmIHdlIGRvbid0IGtub3cgdGhlIE1JTUUgdHlwZSwgc2VlIGlmIHRoZSBwYXRoIGNhbiBoZWxw
CisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5pc0VtcHR5KCkgPyBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsKSA6IG1pbWVUeXBlOworICAgIFN0cmluZyBjb2RlY3Mg
PSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUodHlwZSwgImNvZGVj
cyIpOworCisgICAgTWVkaWFQbGF5ZXJGYWN0b3J5ICplbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5l
Rm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MpOworCisgICAgLy8gIGlmIHdlIGRpZG4ndCBm
aW5kIGFuIGVuZ2luZSB0aGF0IGNsYWltcyB0aGUgTUlNRSB0eXBlLCBqdXN0IHVzZSB0aGUgZmly
c3QgZW5naW5lCisgICAgaWYgKCFlbmdpbmUpCisgICAgICAgIGVuZ2luZSA9IGluc3RhbGxlZE1l
ZGlhRW5naW5lcygpWzBdOworICAgIAorICAgIC8vIGRvbid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUg
dGhlIHBsYXllciB1bmxlc3MgaXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBlbmdpbmUKKyAgICBp
ZiAoZW5naW5lICYmIG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeworICAgICAgICBt
X2N1cnJlbnRNZWRpYUVuZ2luZSA9IGVuZ2luZTsKKyAgICAgICAgZGVsZXRlIG1fcHJpdmF0ZTsK
KyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICAgICAgbV9wcml2YXRlID0gZW5naW5lLT5jb25z
dHJ1Y3Rvcih0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3By
aXZhdGUtPmxvYWQodXJsKTsKKyAgICBlbHNlCisgICAgICAgIG1fcHJpdmF0ZSA9IGNyZWF0ZU51
bGxNZWRpYVBsYXllcih0aGlzKTsKIH0gICAgCiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmNhbmNlbExv
YWQoKQpAQCAtOTAsNyArMTg1LDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXI6OmR1cmF0aW9uKCkgY29u
c3QKIAogZmxvYXQgTWVkaWFQbGF5ZXI6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5jdXJyZW50VGltZSgpOyAgCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3Vy
cmVudFRpbWUoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6c2VlayhmbG9hdCB0aW1lKQpAQCAt
MjE1LDI3ICszMTAsMzEgQEAgdm9pZCBNZWRpYVBsYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KgogICAgIG1fcHJpdmF0ZS0+cGFpbnQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OnN1
cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGNvZGVjcykKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZ2V0U3VwcG9y
dGVkVHlwZXModHlwZXMpOwotICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZE1lZGlhTUlNRVR5cGUodHlwZSkgJiYgdHlwZXMuY29udGFpbnModHlwZSk7CisgICAgTWVkaWFQ
bGF5ZXJGYWN0b3J5ICplbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0
eXBlLCBjb2RlY3MpOworCisgICAgaWYgKCFlbmdpbmUpCisgICAgICAgIHJldHVybiBJc05vdFN1
cHBvcnRlZDsKKworICAgIHJldHVybiBlbmdpbmUtPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0eXBl
LCBjb2RlY3MpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mIHR5cGVzKQogewotICAgIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9y
dGVkVHlwZXModHlwZXMpOworICAgIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgZW5naW5l
cyA9IGluc3RhbGxlZE1lZGlhRW5naW5lcygpOworICAgIGlmIChlbmdpbmVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGVuZ2luZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8TWVkaWFQ
bGF5ZXJGYWN0b3J5Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGVuZ2luZXMuZW5kKCk7CisgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPmdldFN1cHBvcnRlZFR5cGVz
KHR5cGVzKTsKIH0gCi0gICAgCisKIGJvb2wgTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkKIHsK
LSAgICBzdGF0aWMgYm9vbCBhdmFpbGFiaXR5S25vd24gPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9v
bCBpc0F2YWlsYWJsZTsKLSAgICBpZiAoIWF2YWlsYWJpdHlLbm93bikgewotICAgICAgICBpc0F2
YWlsYWJsZSA9IE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUoKTsKLSAgICAgICAgYXZh
aWxhYml0eUtub3duID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQXZhaWxhYmxlOworICAg
IHJldHVybiAhaW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkuaXNFbXB0eSgpOwogfSAKIAogdm9pZCBN
ZWRpYVBsYXllcjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCkBAIC0yNjgsNSArMzY3LDYxIEBAIHZv
aWQgTWVkaWFQbGF5ZXI6OnJlcGFpbnQoKQogICAgICAgICBtX21lZGlhUGxheWVyQ2xpZW50LT5t
ZWRpYVBsYXllclJlcGFpbnQodGhpcyk7CiB9CiAKKworLy8gKysrKysrKysrKysrKysrKysrKysK
Ky8vIGEgbnVsbCBwbGF5ZXIgdG8gbWFrZSBNZWRpYVBsYXllciBsb2dpYyBzaW1wbGVyCisKK2Ns
YXNzIE5VTExNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBOVUxMTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVy
Kikge307CisgICAgdmlydHVhbCB+TlVMTE1lZGlhUGxheWVyUHJpdmF0ZSgpIHt9OworCisgICAg
dmlydHVhbCB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNh
bmNlbExvYWQoKSB7IH07CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSB7IH07CisgICAg
dmlydHVhbCB2b2lkIHBhdXNlKCkgeyB9OyAgICAKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoMCwgMCk7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZShib29sKSB7IH07CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgeyB9OworICAg
IHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBzZXRFbmRUaW1lKGZsb2F0KSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmF0ZShmbG9hdCkgeyB9OworICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCkgeyB9OworCisg
ICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIE1lZGlhUGxheWVyOjpFbXB0eTsgfQorICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhUGxheWVyOjpEYXRh
VW5hdmFpbGFibGU7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBpbnQgZGF0YVJhdGUoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdG90YWxCeXRlc0tub3duKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdCB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7
IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpIHsgfSA7Cit9OworCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZU51
bGxNZWRpYVBsYXllcihNZWRpYVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBO
VUxMTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcik7IAorfQorCiB9CiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDQwODI4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw3ICszOSw3IEBAIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIEludFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKLWNsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZTsKK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTsKIGNsYXNzIFN0cmluZzsK
IAogY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQgewpAQCAtNTIsMTkgKzUyLDIzIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJSZXBhaW50KE1lZGlhUGxheWVyKikgeyB9CiB9
OwogCisKIGNsYXNzIE1lZGlhUGxheWVyIDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIE1l
ZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXIo
KTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIG1lZGlhIGVuZ2luZSBzdXBw
b3J0CisgICAgZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0ZWQs
IE1heUJlU3VwcG9ydGVkIH07CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MgPSAi
Iik7CiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7
CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKICAgICAKICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCk7CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0RnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3OyB9Cisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQogICAgIGJv
b2wgaW5NZWRpYURvY3VtZW50KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJl
dHRlciB0byBqdXN0IGhhdmUgYSBnZXR0ZXIgYW5kIHNldHRlciBmb3Igc2l6ZS4KQEAgLTczLDcg
Kzc3LDcgQEAgcHVibGljOgogICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAgICB2b2lk
IGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAgICAg
CiAgICAgYm9vbCB2aXNpYmxlKCkgY29uc3Q7CkBAIC0xMjIsMTEgKzEyNiwxMSBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXBhaW50KCk7CiAgICAgCiBwcml2YXRlOgotICAgICAgICAKLSAgICBmcmll
bmQgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlOwotICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVNZWRpYUVuZ2luZXMoKTsKKwogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtX21lZGlhUGxh
eWVyQ2xpZW50OwotICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbV9wcml2YXRlOworICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogbV9wcml2YXRlOworICAgIHZvaWQgKm1fY3VycmVudE1l
ZGlhRW5naW5lOwogICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAgICAgSW50UmVjdCBtX3Jl
Y3Q7CiAgICAgYm9vbCBtX3Zpc2libGU7CkBAIC0xMzQsNyArMTM4LDE1IEBAIHByaXZhdGU6CiAg
ICAgZmxvYXQgbV92b2x1bWU7CiB9OwogCit0eXBlZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSogKCpDcmVhdGVNZWRpYUVuZ2luZVBsYXllcikoTWVkaWFQbGF5ZXIqKTsKK3R5cGVkZWYg
dm9pZCAoKk1lZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMpKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMp
OwordHlwZWRlZiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlICgqTWVkaWFFbmdpbmVTdXBwb3J0
c1R5cGUpKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworCit0eXBl
ZGVmIHZvaWQgKCpNZWRpYUVuZ2luZVJlZ2lzdHJhcikoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5ZXIs
IE1lZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlKTsgCisK
KwogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQ
bGF5ZXJQcml2YXRlX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlX2gKKworI2lmIEVOQUJM
RShWSURFTykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRl
SW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlKCkge307CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBwbGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCisK
KyAgICB2aXJ0dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVmlkZW8oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlz
aWJsZShib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2VlayhmbG9hdCB0aW1lKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmco
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5kVGltZShmbG9hdCB0aW1lKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJhdGUpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGF1c2VkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFZv
bHVtZShmbG9hdCBpblZvbHVtZSkgPSAwOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0
d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGZs
b2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRp
bWVCdWZmZXJlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGRhdGFSYXRlKCkgY29u
c3QgPSAwOworCisgICAgdmlydHVhbCBib29sIHRvdGFsQnl0ZXNLbm93bigpIGNvbnN0IHsgcmV0
dXJuIHRvdGFsQnl0ZXMoKSA+IDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0ID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jikg
PSAwIDsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5oCShyZXZpc2lvbiA0MDgyOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTMgKzMzLDEzIEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJNZWRpYVBsYXll
ci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Citj
bGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlIHsKIHB1YmxpYzoKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsK
ICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkg
Y29uc3Q7CkBAIC03OCw5ICs3OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9y
dGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KTsKLQogICAgIC8vIFB1YmxpYyBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSBXZWJNZWRpYVBsYXll
cgogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCk7CiAgICAgdm9pZCBuZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CkBAIC05MCw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBhaW50KCk7CiAK
IHByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisgICAgc3Rh
dGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyICpwbGF5
ZXIpOworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYp
OworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMgYm9vbCBp
c0F2YWlsYWJsZSgpOworCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIHZvaWQqIG1f
ZGF0YTsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHJldmlzaW9uIDQwODI4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxNyBAQCBnYm9vbGVhbiBt
ZWRpYVBsYXllclByaXZhdGVCdWZmZXJpbmdDYWxsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK01l
ZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVk
aWFQbGF5ZXIqIHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
KHBsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFi
bGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBv
cnRzVHlwZSk7Cit9CisKIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3BsYXlC
aW4oMCkKQEAgLTE0MCw3ICsxNTEsNyBAQCBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXll
clByaXZhdGUoCiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChTdHJp
bmcgdXJsKQordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
CiB7CiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJMb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkp
OwogICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewpAQCAt
MTc1LDcgKzE4Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCiAgICAgbV9z
dGFydGVkUGxheWluZyA9IGZhbHNlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1
cmF0aW9uKCkKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAogewog
ICAgIGlmICghbV9wbGF5QmluKQogICAgICAgICByZXR1cm4gMC4wOwpAQCAtMjg4LDcgKzI5OSw3
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKIH0KIAogLy8gUmV0
dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpu
YXR1cmFsU2l6ZSgpCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBj
b25zdAogewogICAgIGlmICghaGFzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsK
QEAgLTMwMiw3ICszMTMsNyBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNp
emUoCiAgICAgcmV0dXJuIEludFNpemUoeCwgeSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlOjpoYXNWaWRlbygpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25z
dAogewogICAgIGdpbnQgY3VycmVudFZpZGVvID0gLTE7CiAgICAgaWYgKG1fcGxheUJpbikKQEAg
LTM1NSwxNyArMzY2LDE3IEBAIGludCBNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKCkgY29u
c3QKICAgICByZXR1cm4gMTsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBs
YXllclByaXZhdGU6Om5ldHdvcmtTdGF0ZSgpCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RhdGU7CiB9CiAKLU1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmVhZHlTdGF0ZSgpCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclBy
aXZhdGU6OnJlYWR5U3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlYWR5U3RhdGU7CiB9
CiAKLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKCkKK2Zsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZUJ1ZmZlcmVkIik7CkBA
IC0zNzMsNyArMzg0LDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVy
ZQogICAgIHJldHVybiBtX2lzU3RyZWFtaW5nID8gMCA6IG1heFRpbWVMb2FkZWQoKTsKIH0KIAot
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKQorZmxvYXQgTWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIFRPRE8KICAg
ICBMT0dfVkVSQk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIpOwpAQCAtMzgzLDcgKzM5NCw3
IEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmwKICAgICByZXR1cm4g
bWF4VGltZUxvYWRlZCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVM
b2FkZWQoKQorZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
IHsKICAgICAvLyBUT0RPCiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lTG9hZGVkIik7
CkBAIC0zOTEsNyArNDAyLDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9h
ZGVkKAogICAgIHJldHVybiBkdXJhdGlvbigpOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXllclBy
aXZhdGU6OmJ5dGVzTG9hZGVkKCkKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNM
b2FkZWQoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX1ZFUkJPU0Uo
TWVkaWEsICJieXRlc0xvYWRlZCIpOwpAQCAtNDA0LDE0ICs0MTUsMTQgQEAgdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVybiAxOy8vdG90YWxCeXRlcygp
ICogbWF4VGltZSAvIGR1cjsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0
ZXNLbm93bigpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlc0tub3duKCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90
YWxCeXRlc0tub3duIik7CiAgICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSA+IDA7CiB9CiAKLXVuc2ln
bmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpCit1bnNpZ25lZCBNZWRpYVBsYXll
clByaXZhdGU6OnRvdGFsQnl0ZXMoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CkBAIC01OTIsNiArNjAzLDEzIEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXAKICAgICB0eXBlcy5hZGQo
U3RyaW5nKCJ2aWRlby94LXRoZW9yYStvZ2ciKSk7CiB9CiAKK01lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICAvLyBGSVhNRTogZG8gdGhlIHJlYWwgdGhp
bmcKKyAgICBub3RJbXBsZW1lbnRlZCgpOworCXJldHVybiB0eXBlID09ICJ2aWRlby94LXRoZW9y
YStvZ2ciID8gKCFjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVk
IDogTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRl
ZDsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5n
IHVybCkKIHsKICAgICBBU1NFUlQoIW1fcGxheUJpbik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAkocmV2aXNpb24gNDA4MjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5j
bHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDQsMjAgKzQ0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1NDYWxsYmFjayhHc3RCdXMqIGJ1cywg
R3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgZ2Jvb2xlYW4gbWVkaWFQ
bGF5ZXJQcml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2Fn
ZSwgZ3BvaW50ZXIgZGF0YSk7CiAKLSAgICBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBOb25j
b3B5YWJsZQorICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2UKICAgICB7CiAgICAgZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVy
UHJpdmF0ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdw
b2ludGVyIGRhdGEpOwogICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1ND
YWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7
CiAgICAgZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVN0YXRlQ2FsbGJhY2soR3N0
QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogCiAgICAgcHVi
bGljOgotICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKworICAgICAg
ICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsK
ICAgICAgICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwogCi0gICAgICAgIEludFNpemUgbmF0dXJh
bFNpemUoKTsKLSAgICAgICAgYm9vbCBoYXNWaWRlbygpOworICAgICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKIAotICAgICAg
ICB2b2lkIGxvYWQoU3RyaW5nIHVybCk7CisgICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcg
JnVybCk7CiAgICAgICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogCiAgICAgICAgIHZvaWQgcGxheSgp
OwpAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGF1
c2VkKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OwogCi0gICAgICAgIGZs
b2F0IGR1cmF0aW9uKCk7CisgICAgICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7CiAgICAgICAg
IGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2VlayhmbG9hdCk7CiAg
ICAgICAgIHZvaWQgc2V0RW5kVGltZShmbG9hdCk7CkBAIC03NywxNCArNzgsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIGludCBkYXRhUmF0ZSgpIGNvbnN0OwogCi0gICAgICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCk7Ci0gICAgICAgIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKTsKKyAgICAgICAgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdDsKKyAgICAgICAgTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCi0gICAgICAgIGZsb2F0IG1heFRpbWVCdWZm
ZXJlZCgpOwotICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKTsKLSAgICAgICAgdW5zaWdu
ZWQgYnl0ZXNMb2FkZWQoKTsKLSAgICAgICAgYm9vbCB0b3RhbEJ5dGVzS25vd24oKTsKLSAgICAg
ICAgdW5zaWduZWQgdG90YWxCeXRlcygpOworICAgICAgICBmbG9hdCBtYXhUaW1lQnVmZmVyZWQo
KSBjb25zdDsKKyAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgICAg
IHVuc2lnbmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgdG90YWxCeXRlc0tu
b3duKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKIAogICAg
ICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJ
bnRSZWN0Jik7CkBAIC05OSwxNSArMTAwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2b2lkIHJlcGFpbnQoKTsKICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVz
KEhhc2hTZXQ8U3RyaW5nPiYpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHByaXZhdGU6CiAKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2
YXRlKE1lZGlhUGxheWVyKik7CivKIMrKysrKynN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRl
cmZhY2UqIGNyZWF0ZShNZWRpYVBsYXllciAqcGxheWVyKTsKKworICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICAgICAgc3RhdGljIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgp
IHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogICAgICAg
ICB2b2lkIGNhbmNlbFNlZWsoKTsKICAgICAgICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopOwotICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCk7
CisgICAgICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBzdGFy
dEVuZFBvaW50VGltZXJJZk5lZWRlZCgpOwogCiAgICAgICAgIHZvaWQgY3JlYXRlR1NUUGxheUJp
bihTdHJpbmcgdXJsKTsKQEAgLTEyNCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICAgICAgYm9vbCBtX3N0
YXJ0ZWRQbGF5aW5nOwotICAgICAgICBib29sIG1faXNTdHJlYW1pbmc7CisgICAgICAgIG11dGFi
bGUgYm9vbCBtX2lzU3RyZWFtaW5nOwogICAgICAgICBJbnRSZWN0IG1fcmVjdDsKICAgICAgICAg
Ym9vbCBtX3Zpc2libGU7CiAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXll
clByaXZhdGVRVEtpdC5oCShyZXZpc2lvbiA0MDgyOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAotI2luY2x1ZGUgIk1lZGlhUGxheWVy
LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTUyLDExICs1MiwyOCBAQCBjbGFzcyBX
ZWJDb3JlTW92aWVPYnNlcnZlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBOb25jb3B5YWJsZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBNZWRp
YVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1l
ZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKwogICAgIH5NZWRpYVBsYXllclByaXZh
dGUoKTsKLSAgICAKKworICAgIHZvaWQgcmVwYWludCgpOworICAgIHZvaWQgbG9hZFN0YXRlQ2hh
bmdlZCgpOworICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNpemVDaGFuZ2VkKCk7
CisgICAgdm9pZCB0aW1lQ2hhbmdlZCgpOworICAgIHZvaWQgZGlkRW5kKCk7CisKK3ByaXZhdGU6
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICAvLyBlbmdpbmUg
c3VwcG9ydAorICAgIHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyICpwbGF5ZXIpOworICAgIHN0YXRpYyB2b2lk
IGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOworICAgIHN0YXRpYyBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwor
CiAgICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBj
b25zdDsKICAgICAKQEAgLTkxLDE5ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpOwogICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAg
ICB2b2lkIGxvYWRTdGF0ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHJhdGVDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBzaXplQ2hhbmdlZCgpOwotICAgIHZvaWQgdGltZUNoYW5nZWQoKTsKLSAgICB2b2lkIGRp
ZEVuZCgpOwotICAgIAotICAgIHZvaWQgcmVwYWludCgpOwogICAgIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIGdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwotICAgIHN0YXRpYyBib29sIGlz
QXZhaWxhYmxlKCk7Ci0gICAgCi1wcml2YXRlOgorCiAgICAgdm9pZCBjcmVhdGVRVE1vdmllKGNv
bnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKICAgICB2
b2lkIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZp
c2lvbiA0MDgyOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDE4IEBAIHN0YXRp
YyBjb25zdCBmbG9hdCBlbmRQb2ludFRpbWVySW50ZXJ2YWwKIHN0YXRpYyBjb25zdCBsb25nIG1p
bmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCiAjZW5kaWYKIAorCitN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0
ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVu
Z2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxh
YmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBw
b3J0c1R5cGUpOworfQorCiBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShN
ZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9vYmpj
T2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlTW92aWVPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhD
YWxsYmFjazp0aGlzXSkKQEAgLTI3OSw3ICsyOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3JlYXRlUVRNb3ZpZVZpCiAKICAgICBtX3F0TW92aWVWaWV3LmFkb3B0TlMoW1tRVE1vdmll
VmlldyBhbGxvY10gaW5pdF0pOwogICAgIHNldFJlY3QobV9wbGF5ZXItPnJlY3QoKSk7Ci0gICAg
TlNWaWV3KiBwYXJlbnRWaWV3ID0gbV9wbGF5ZXItPm1fZnJhbWVWaWV3LT5kb2N1bWVudFZpZXco
KTsKKyAgICBOU1ZpZXcqIHBhcmVudFZpZXcgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmRvY3Vt
ZW50VmlldygpOwogICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6bV9xdE1vdmllVmlldy5nZXQo
KV07CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAvLyBzZXREZWxlZ2F0ZTogaXNuJ3Qg
YSBwdWJsaWMgY2FsbCBpbiBUaWdlciwgc28gdXNlIHBlcmZvcm1TZWxlY3RvciB0byBrZWVwIHRo
ZSBjb21waWxlciBoYXBweQpAQCAtMzUyLDcgKzM2NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpkZXN0cm95UVRWaWRlb1IKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlk
ZW9SZW5kZXJpbmcoKQogewotICAgIGlmICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0
TW92aWUpCisgICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAh
UVRWaWRlb1JlbmRlcmVyQ2xhc3MoKSApCkBAIC03ODcsNyArNzk5LDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQwogI2lmIERSQVdfRlJBTUVfUkFURQogICAgIC8v
IERyYXcgdGhlIGZyYW1lIHJhdGUgb25seSBhZnRlciBoYXZpbmcgcGxheWVkIG1vcmUgdGhhbiAx
MCBmcmFtZXMuCiAgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7Ci0gICAg
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5tX2ZyYW1lVmlldyA/IG1fcGxheWVyLT5tX2Zy
YW1lVmlldy0+ZnJhbWUoKSA6IE5VTEw7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVy
LT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6IE5VTEw7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50KCkgOiBO
VUxMOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZG9jdW1lbnQgPyBkb2N1bWVu
dC0+cmVuZGVyZXIoKSA6IE5VTEw7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0g
cmVuZGVyZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IE5VTEw7CkBAIC04MTMsMjIgKzgyNSw0MiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAgICAgW21fb2JqY09i
c2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOk5PXTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCitzdGF0
aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewotICAgIE5TQXJyYXkqIGZpbGVU
eXBlcyA9IFtRVE1vdmllIG1vdmllRmlsZVR5cGVzOlFUSW5jbHVkZUNvbW1vblR5cGVzXTsKLSAg
ICBpbnQgY291bnQgPSBbZmlsZVR5cGVzIGNvdW50XTsKLSAgICBmb3IgKGludCBuID0gMDsgbiA8
IGNvdW50OyBuKyspIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYgZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxDRlN0cmluZ1JlZj4oW2ZpbGVUeXBlcyBvYmplY3RBdEluZGV4Om5dKTsKLSAgICAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiB1dGkoQWRvcHRDRiwgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRl
bnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBleHQsIE5VTEwpKTsK
LSAgICAgICAgaWYgKCF1dGkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBtaW1lKEFkb3B0Q0YsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRo
Q2xhc3ModXRpLmdldCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgIGlmICghbWlt
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0eXBlcy5hZGQobWltZS5nZXQoKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7Cisg
ICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0
eXBlTGlzdEluaXRpYWxpemVkKSB7CisgICAgICAgIE5TQXJyYXkqIGZpbGVUeXBlcyA9IFtRVE1v
dmllIG1vdmllRmlsZVR5cGVzOlFUSW5jbHVkZUNvbW1vblR5cGVzXTsKKyAgICAgICAgaW50IGNv
dW50ID0gW2ZpbGVUeXBlcyBjb3VudF07CisgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgY291
bnQ7IG4rKykgeworICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxDRlN0cmluZ1JlZj4oW2ZpbGVUeXBlcyBvYmplY3RBdEluZGV4Om5dKTsKKyAgICAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJl
ZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxM
KSk7CisgICAgICAgICAgICBpZiAoIXV0aSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWltZShBZG9wdENGLCBVVFR5cGVDb3B5
UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aS5nZXQoKSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwor
ICAgICAgICAgICAgaWYgKCFtaW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgY2FjaGUuYWRkKG1pbWUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHR5cGVMaXN0
SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KLX0gCiAgICAgCisgICAgcmV0dXJuIGNhY2hlOwor
fSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9IAorCitN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gb25s
eSByZXR1cm4gIklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZv
ciBub3cgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFzayBRVCBpZiBpdCBzdXBwb3J0cyBhbgorICAg
IC8vICBleHRlbmRlZCBNSU1FIHR5cGUgeWV0CisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5j
b250YWlucyh0eXBlKSA/IChjb2RlY3MgJiYgIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXll
cjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOworfQorCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFp
bGFibGUoKQogewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCkBAIC05MzksNyArOTcxLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmRpc2FibGVVbnN1cHBvcgogCiBAaW1wbGVtZW50YXRp
b24gV2ViQ29yZU1vdmllT2JzZXJ2ZXIKIAotLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQ
bGF5ZXJQcml2YXRlICopY2FsbGJhY2sKKy0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxh
eWVyUHJpdmF0ZSopY2FsbGJhY2sKIHsKICAgICBtX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAg
cmV0dXJuIFtzdXBlciBpbml0XTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
TWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAJKHJldmlzaW9uIDQw
ODI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQ
aG9ub24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDE4IEBAIE1lZGlhUGxheWVy
UHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE0KICAgICBjb25uZWN0KG1fbWVkaWFPYmplY3Qs
IFNJR05BTCh0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCkpLCB0aGlzLCBTTE9UKHRvdGFsVGltZUNo
YW5nZWQocWludDY0KSkpOwogfQogCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1
cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUs
IGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCisKIE1lZGlhUGxheWVyUHJp
dmF0ZTo6fk1lZGlhUGxheWVyUHJpdmF0ZSgpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIHZpZGVvd2lkZ2V0Iik7CkBAIC0xMzEsNiAr
MTQzLDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXAKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBjb2RlY3MpCit7CisgICAgLy8gRklYTUU6IGRvIHRoZSByZWFsIHRoaW5nCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQor
CiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGJvb2wg
aGFzVmlkZW8gPSBtX21lZGlhT2JqZWN0LT5oYXNWaWRlbygpOwpAQCAtMTM4LDcgKzE1Nyw3IEBA
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnMKICAgICByZXR1cm4gaGFz
VmlkZW87CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKFN0cmluZyB1cmwpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmxvYWQoXCIlc1wiKSIsIHVybC51
dGY4KCkuZGF0YSgpKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRp
YVBsYXllclByaXZhdGVQaG9ub24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCShyZXZpc2lvbiA0MDgyOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDcgQEAKICNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2
YXRlUGhvbm9uX2gKICNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uX2gKIAotI2luY2x1
ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUg
PHBob25vbm5hbWVzcGFjZS5oPgpAQCAtNDAsMTIgKzM5LDEyIEBAIFFUX0VORF9OQU1FU1BBQ0UK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDog
cHVibGljIFFPYmplY3QsIE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGUgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7
CiAKICAgICAgICAgUV9PQkpFQ1QKIAogICAgIHB1YmxpYzoKLSAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKE1lZGlhUGxheWVyKik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFF
bmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRl
KCk7CiAKICAgICAgICAgLy8gVGhlc2UgZW51bXMgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZwpAQCAt
NzksNyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFNpemUgbmF0dXJh
bFNpemUoKSBjb25zdDsKICAgICAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwogCi0gICAgICAg
IHZvaWQgbG9hZChTdHJpbmcgdXJsKTsKKyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAm
dXJsKTsKICAgICAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAKICAgICAgICAgdm9pZCBwbGF5KCk7
CkBAIC0xMTIsOCArMTExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNl
dFJlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUo
KSAgIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBldmVu
dEZpbHRlcihRT2JqZWN0KiwgUUV2ZW50Kik7CkBAIC0xMzAsNiArMTI3LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCk7CiAKICAg
ICBwcml2YXRlOgorICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAg
ICAgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxh
eWVyICpwbGF5ZXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nPiYpOworICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CisgICAgICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCiAg
ICAgICAgIHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAKICAgICAgICAgTWVkaWFQbGF5ZXIqIG1fcGxh
eWVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCShyZXZpc2lvbiA0MDgy
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBACiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3
LmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKICNpZiBEUkFXX0ZSQU1FX1JBVEUKICNpbmNsdWRlICJGb250LmgiCkBAIC00OCw4ICs1MSwx
OSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK01lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBs
YXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5l
KE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFibGUo
KSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRz
VHlwZSk7Cit9CisKIHN0YXRpYyBjb25zdCBkb3VibGUgZW5kUG9pbnRUaW1lckludGVydmFsID0g
MC4wMjA7Ci0gICAgCisKIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1l
ZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3NlZWtU
bygtMSkKQEAgLTkzLDggKzEwNyw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNv
bnN0IFN0cmkKIAogICAgIG1fcXRNb3ZpZS5zZXQobmV3IFFUTW92aWVXaW4odGhpcykpOwogICAg
IG1fcXRNb3ZpZS0+bG9hZCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCkpOwotICAgIG1f
cXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxheWVyLT5tX3ZvbHVtZSk7Ci0gICAgbV9xdE1vdmllLT5z
ZXRWaXNpYmxlKG1fcGxheWVyLT5tX3Zpc2libGUpOworICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1l
KG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVy
LT52aXNpYmxlKCkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCkBAIC00
MDMsNyArNDE3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQwog
CiAjaWYgRFJBV19GUkFNRV9SQVRFCiAgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+
IDEwKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5tX2ZyYW1lVmlldyA/IG1f
cGxheWVyLT5tX2ZyYW1lVmlldy0+ZnJhbWUoKSA6IE5VTEw7CisgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUo
KSA6IE5VTEw7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRv
Y3VtZW50KCkgOiBOVUxMOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZG9jdW1l
bnQgPyBkb2N1bWVudC0+cmVuZGVyZXIoKSA6IE5VTEw7CiAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZVRvVXNlID0gcmVuZGVyZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IE5VTEw7CkBAIC00Mjcs
MTYgKzQ0MSwzMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAj
ZW5kaWYKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nPiYgdHlwZXMpCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2Fj
aGUoKQogewotICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRU
eXBlcygpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxlbjsKLSAgICAg
ICAgUVRNb3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7Ci0gICAg
ICAgIGlmIChsZW4pCi0gICAgICAgICAgICB0eXBlcy5hZGQoU3RyaW5nKGNoYXJhY3RlciwgbGVu
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIHR5cGVDYWNoZSwg
KCkpOworICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAg
IGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkgeworCQl1bnNpZ25lZCBjb3VudCA9IFFUTW92aWVX
aW46OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKwkJZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNv
dW50OyBuKyspIHsKKwkJCWNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7CisJCQl1bnNpZ25lZCBsZW47
CisJCQlRVE1vdmllV2luOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKwkJ
CWlmIChsZW4pCisJCQkJdHlwZUNhY2hlLmFkZChTdHJpbmcoY2hhcmFjdGVyLCBsZW4pKTsKKwkJ
fQorCisgICAgICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdHlwZUNhY2hlOworfSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1l
VHlwZUNhY2hlKCk7CiB9IAogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUo
KQpAQCAtNDQ0LDYgKzQ3MiwxMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFi
bGUoKQogICAgIHJldHVybiBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9CiAK
K01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5
cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICAvLyBv
bmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIg
Zm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFUIGlmIGl0IHN1cHBvcnRzIGFuCisg
ICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlwZQorICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29u
dGFpbnModHlwZSkgPyAoIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBw
b3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90U3Vw
cG9ydGVkOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1vdmll
V2luKiBtb3ZpZSkKIHsKICAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCShyZXZpc2lvbiA0MDgyOCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8p
CiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8UVRNb3ZpZVdpbi5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ0LDkgKzQ0LDEwIEBAIGNsYXNzIEludFNpemU7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBR
VE1vdmllV2luQ2xpZW50LCBOb25jb3B5YWJsZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgUVRNb3ZpZVdpbkNs
aWVudCB7CiBwdWJsaWM6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7Cisg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7
CisKICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAgICAgCiAgICAgSW50U2l6ZSBuYXR1cmFs
U2l6ZSgpIGNvbnN0OwpAQCAtODgsMTAgKzg5LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKLSAgICBzdGF0
aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCiBwcml2YXRlOgorICAgIE1lZGlhUGxheWVyUHJp
dmF0ZShNZWRpYVBsYXllciopOworCiAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKICAgICB2b2lk
IGRvU2VlaygpOwogICAgIHZvaWQgY2FuY2VsU2VlaygpOwpAQCAtMTA0LDcgKzEwNSwxMyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZVdp
biopOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKik7Ci0gICAg
ICAKKworICAgIC8vIGVuZ2luZSBzdXBwb3J0CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsK
KyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGljIGJvb2wgaXNB
dmFpbGFibGUoKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBPd25QdHI8UVRN
b3ZpZVdpbj4gbV9xdE1vdmllOwogICAgIGZsb2F0IG1fc2Vla1RvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27571</attachid>
            <date>2009-02-11 13:38:35 -0800</date>
            <delta_ts>2009-02-11 14:53:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>54251</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDA5LTAyLTEwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgorCisgICAgICAgIEFudHRpIEtvaXZpc3RvLCBEYXJpbiBBZGxlciwgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAgICAgICAgCisgICAgICAgIEJ1ZyAyMzc5NzogQSBwbGF0
Zm9ybSBzaG91bGQgYmUgYWJsZSB0byB1c2UgbW9yZSB0aGFuIG9uZSBtZWRpYSBlbmdpbmUgZm9y
IDx2aWRlbz4gYW5kIDxhdWRpbz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNzk3CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IGFkZCBNZWRpYVBsYXllclByaXZhdGUuaAorCisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omxv
YWQpOiBzZWxlY3RNZWRpYVVSTCBub3cgYWxzbyByZXR1cm5zIGEgTUlNRSB0eXBlLCBwYXNzIGl0
IHRvCisgICAgICAgIE1lZGlhUGxheWVyOjpsb2FkIHNvIGl0IGNhbiBjaG9vc2UgdGhlIHJpZ2h0
IG1lZGlhIGVuZ2luZQorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0
TWVkaWFVUkwpOiByZW5hbWVkIGZyb20gcGlja01lZGlhLiB1c2UgTUlNRVR5cGVSZWdpc3RyeQor
ICAgICAgICBmdW5jdGlvbnMgdG8gc3RyaXAgcGFyYW1zIGZyb20gdGhlIHVybCBhbmQgZXh0cmFj
dCB0aGUgY29kZWNzIHBhcmFtZXRlci4gY2FsbCAKKyAgICAgICAgTWVkaWFQbGF5ZXI6OnN1cHBv
cnRzVHlwZSB0byBzZWUgaWYgd2UgY2FuIG9wZW4gdGhlIGZpbGUgc2luY2Ugb25seSBhIG1lZGlh
IGVuZ2luZSBjYW4KKyAgICAgICAgYW5zd2VyIHF1ZXN0aW9ucyBhYm91dCBzdXBwb3J0ZWQgdHlw
ZStjb2RlY3MuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVU
eXBlUmVnaXN0cnk6OmdldFBhcmFtZXRlckZyb21NSU1FVHlwZSk6IE5ldywgZmluZCBhbmQgcmV0
dXJuIGEgTUlNRSB0eXBlIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdp
c3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKTogTmV3LCBzdHJpcCBhbGwgcGFyYW1l
dGVycyBmcm9tIGEgTUlNRSB0eXBlCisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJGYWN0b3J5OjpNZWRpYVBsYXllckZhY3RvcnkpOiBO
ZXcsIGZhY3RvcnkgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjppbnN0YWxsZWRNZWRp
YUVuZ2luZXMpOiBOZXcsIHJldHVybnMgdmVjdG9yIG9mIGFsbCBpbnN0YWxsZWQgZW5naW5lcy4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZE1lZGlhRW5naW5lKTogTmV3LCBhZGQgYSBtZWRpYSBlbmdp
bmUgdG8gdGhlIGNhY2hlLgorICAgICAgICAoV2ViQ29yZTo6Y2hvb3NlQmVzdEVuZ2luZUZvclR5
cGVBbmRDb2RlY3MpOiBOZXcsIHJldHVybiBhbiBlbmdpbmUgdGhhdCBtaWdodCBzdXBwb3J0IGEg
TUlNRSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6Ok1lZGlhUGxheWVyKTog
Y3JlYXRlIE5VTEwgbWVkaWEgcGxheWVyIHNvIHdlIGhhdmUgYSBkZWZhdWx0CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6IFRha2UgTUlNRSB0eXBlIGFzIHdlbGwgYXMgdXJs
LCBzaW5jZSB3ZSBuZWVkIGl0IHRvIGZpbmQgdGhlIHJpZ2h0CisgICAgICAgICAgbWVkaWEgZW5n
aW5lLiBJZiBubyBNSU1FIHR5cGUgaXMgcHJvdmlkZWQsIHRyeSB0byBkZXZpbmUgb25lIGZyb20g
dGhlIHVybC4gQ2hvb3NlIGEgbWVkaWEgZW5naW5lCisgICAgICAgICAgYmFzZWQgb24gdGhlIE1J
TUUgdHlwZSBhbmQgY29kZWNzIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyOjpjdXJyZW50VGltZSk6IFJlbW92ZSBleGNlc3Mgd2hpdGUgc3BhY2UuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKTogIFRha2UgY29kZWNzIHBhcmFtIGFz
IHdlbGwgYXMgTUlNRSB0eXBlLiBSZXR1cm4gZW51bSBzbyB3ZSBjYW4KKyAgICAgICAgaW5kaWNh
dGUgIm1heWJlIiBjb25kaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6Z2V0
U3VwcG9ydGVkVHlwZXMpOiBCdWlsZCB1cCBsaXN0IG9mIE1JTUUgdHlwZXMgYnkgY29uc3VsdGlu
ZyBhbGwgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjppc0F2YWlsYWJs
ZSk6IHJldHVybiB0cnVlIGlmIGFueSBtZWRpYSBlbmdpbmUgaXMgaW5zdGFsbGVkLgorCisgICAg
ICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpOVUxMTWVkaWFQbGF5ZXJQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6On5OVUxMTWVk
aWFQbGF5ZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZh
dGU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6Y2Fu
Y2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpwbGF5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6Om5hdHVyYWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6Omhhc1ZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXllclByaXZhdGU6OnNldFZpc2libGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6TlVMTE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3Jl
OjpOVUxMTWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok5V
TExNZWRpYVBsYXllclByaXZhdGU6OnNldEVuZFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TlVM
TE1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVk
aWFQbGF5ZXJQcml2YXRlOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlhUGxh
eWVyUHJpdmF0ZTo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXll
clByaXZhdGU6Om5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQbGF5
ZXJQcml2YXRlOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExNZWRpYVBsYXll
clByaXZhdGU6Om1heFRpbWVTZWVrYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1l
ZGlhUGxheWVyUHJpdmF0ZTo6ZGF0YVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1lZGlh
UGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlc0tub3duKToKKyAgICAgICAgKFdlYkNvcmU6Ok5VTExN
ZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1l
ZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TlVMTE1l
ZGlhUGxheWVyUHJpdmF0ZTo6c2V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVOdWxsTWVkaWFQ
bGF5ZXIpOgorICAgICAgICBEbyBub3RoaW5nIG1lZGlhIHBsYXllciBzbyBNZWRpYVBsYXllciBk
b2Vzbid0IGhhdmUgdG8gTlVMTCBjaGVjayBiZWZvcmUgY2FsbGluZyBjdXJyZW50IGVuZ2luZS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpm
cmFtZVZpZXcpOiBhY2Nlc3NvciBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOiBOZXcsIGRlY2xhcmVzIGFic3RyYWN0IGludGVyZmFj
ZSBmb3IgbWVkaWEgZW5naW5lcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OnRvdGFsQnl0ZXNLbm93bik6CisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5oOiBBZGQgc3VwcG9ydCBmb3IgZW5naW5lIGZhY3RvcnkgCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKTogTmV3LCBtZWRpYSBlbmdp
bmUgZmFjdG9yeSBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpyZWdpc3Rlck1lZGlhRW5naW5lKTogUmVnaXN0ZXIgZW5naW5lIHdpdGggTWVkaWFQbGF5ZXIg
ZmFjdG9yeQorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKTogVVJM
IGlzIGEgY29uc3QgU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
OjpkdXJhdGlvbik6IERlY2xhcmUgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGU6Om5hdHVyYWxTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Omhhc1ZpZGVvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6Om5ldHdvcmtTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWFkeVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVCdWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUxvYWRlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpieXRlc0xvYWRlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjp0b3RhbEJ5dGVzS25vd24p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRl
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c1R5cGUpOiBSZXR1cm4gTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBlbnVtIGluc3RlYWQgb2Yg
Ym9vbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmlzQXZh
aWxhYmxlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXll
clByaXZhdGVRVEtpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpjcmVhdGUpOiBOZXcsIG1lZGlhIGVuZ2luZSBmYWN0b3J5IGZ1bmN0aW9uCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6
IFJlZ2lzdGVyIGVuZ2luZSB3aXRoIE1lZGlhUGxheWVyIGZhY3RvcnkKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZVZpZXcpOiBkb24ndCBhY2Nlc3Mg
TWVkaWFQbGF5ZXItPm1fZnJhbWVWaWV3IGRpcmVjdGx5LAorICAgICAgICB1c2UgYWNjZXNzb3Ig
ZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlk
ZW9SZW5kZXJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZTo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlQ2FjaGUpOiBOZXcu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVz
KTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKC1bV2ViQ29yZU1vdmll
T2JzZXJ2ZXIgaW5pdFdpdGhDYWxsYmFjazpdKTogZml4IGZvcm1hdHRpbmcKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKTogVVJMIGlzIGEgY29uc3QgU3RyaW5nLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5o
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjppc0F2YWlsYWJsZSk6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRl
KTogTmV3LCBtZWRpYSBlbmdpbmUgZmFjdG9yeSBmdW5jdGlvbgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKTogTmV3LCByZWdpc3RlciBl
bmdpbmUgd2l0aCBNZWRpYVBsYXllciBmYWN0b3J5CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OmxvYWQpOiBVUkwgaXMgYSBjb25zdCBTdHJpbmcuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KTogZG9uJ3QgYWNjZXNzIE1lZGlhUGxheWVy
LT5tX2ZyYW1lVmlldyBkaXJlY3RseSwKKyAgICAgICAgdXNlIGFjY2Vzc29yIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6bWltZVR5cGVDYWNoZSk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZVFUV2luOjpnZXRTdXBwb3J0ZWRUeXBlcyk6IE5ldywgbWVkaWEg
ZW5naW5lIGZhY3RvcnkgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRVFdpbjo6c3VwcG9ydHNUeXBlKTogcmV0dXJuIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgZW51bSBpbnN0ZWFkIG9mIGJvb2wKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmg6CisKIDIwMDktMDItMTAgIEp1bGllbiBD
aGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gNDA4NTQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDkxOSw2ICs0OTE5LDcgQEAKIAkJMDZFODFF
RDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDZFODFFRUIwQUI1REE5NzAwQzg3ODM3
IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcyN0RFQiAvKiBtZWRp
YUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gbWVkaWFDb250cm9scy5j
c3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3OUY1RTRCMEYzQkVCRUEwMDVFMDc4
MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
QUZFNTkwMEYxNDQ2QkQwMDg0MTYxNyAvKiBtZWRpYUNvbnRyb2xzUVQuY3NzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUVQuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODAwODE5NDBFRDNCMkREMDBDNTNCQzAgLyogV01MQW5jaG9yRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwMDgxOTUwRUQzQjJERDAwQzUz
QkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MQW5jaG9yRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMx
MjQsNiArMTMxMjUsNyBAQAogCQkJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXpl
SGFzaC5oICovLAogCQkJCUU0QjQxRTBDMENCRjkwQkQwMEFGMkVDRSAvKiBNZWRpYVBsYXllci5j
cHAgKi8sCiAJCQkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmggKi8s
CisJCQkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVyUHJpdmF0ZS5oICov
LAogCQkJCUIyNzUzNTUyMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAqLywKIAkJCQlCMjc1
MzU1MzBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERENDg4MEI0NjI5QjAw
MEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovLApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDA4NTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw2ICsyNzksNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmxvYWQoRXhjZXB0aW9uQ29kCiAgICAgfQogCiAgICAgU3RyaW5nIG1lZGlh
U3JjOworICAgIFN0cmluZyBtZWRpYU1JTUVUeXBlOwogCiAgICAgLy8gMy4xNC45LjQuIExvYWRp
bmcgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gMQpAQCAtMzI2LDcgKzMyNyw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICB9CiAgICAgCiAgICAgLy8g
NgotICAgIG1lZGlhU3JjID0gcGlja01lZGlhKCk7CisgICAgbWVkaWFTcmMgPSBzZWxlY3RNZWRp
YVVSTChtZWRpYU1JTUVUeXBlKTsKICAgICBpZiAobWVkaWFTcmMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIGdvdG8gZW5kOwpAQCAtMzQ4LDcg
KzM0OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZChFeGNlcHRpb25Db2QKICAgICBt
X3BsYXllci5jbGVhcigpOwogICAgIG1fcGxheWVyLnNldChuZXcgTWVkaWFQbGF5ZXIodGhpcykp
OwogICAgIHVwZGF0ZVZvbHVtZSgpOwotICAgIG1fcGxheWVyLT5sb2FkKG1fY3VycmVudFNyYyk7
CisgICAgbV9wbGF5ZXItPmxvYWQobV9jdXJyZW50U3JjLCBtZWRpYU1JTUVUeXBlKTsKICAgICBp
ZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwp
CiAgICAgICAgIGdvdG8gZW5kOwogICAgIApAQCAtODUyLDcgKzg1Myw3IEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6Y2FuUGxheSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhdXNlZCgpIHx8IGVuZGVk
KCkgfHwgbmV0d29ya1N0YXRlKCkgPCBMT0FERURfTUVUQURBVEE7CiB9CiAKLVN0cmluZyBIVE1M
TWVkaWFFbGVtZW50OjpwaWNrTWVkaWEoKQorU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVj
dE1lZGlhVVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSkKIHsKICAgICAvLyAzLjE0LjkuMi4gTG9j
YXRpb24gb2YgdGhlIG1lZGlhIHJlc291cmNlCiAgICAgU3RyaW5nIG1lZGlhU3JjID0gZ2V0QXR0
cmlidXRlKHNyY0F0dHIpOwpAQCAtODcwLDE0ICs4NzEsMTQgQEAgU3RyaW5nIEhUTUxNZWRpYUVs
ZW1lbnQ6OnBpY2tNZWRpYSgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRl
ckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisgICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyBzaW1wbGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVU
eXBlKHR5cGUpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJh
bWV0ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbSBiZWZvcmUgY2hlY2tpbmcgd2l0
aCB0aGUgdHlwZSByZWdpc3RyeQotICAgICAgICAgICAgICAgICAgICBpbnQgc2VtaSA9IHR5cGUu
ZmluZCgnOycpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VtaSAhPSAtMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZE1lZGlhTUlNRVR5cGUodHlwZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghTWVkaWFQbGF5
ZXI6OnN1cHBvcnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUgd2l0
aCBhbGwgcGFyYW1ldGVycyBpbiBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1c2UgdGhl
bQorICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFTcmMgPSBzb3VyY2UtPnNyYygpLnN0cmluZygp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShy
ZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgcGlja01lZGlhKCk7Cisg
ICAgU3RyaW5nIHNlbGVjdE1lZGlhVVJMKFN0cmluZyYgbWVkaWFNSU1FVHlwZSk7CiAgICAgdm9p
ZCB1cGRhdGVWb2x1bWUoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZSgpOwogICAgIGZsb2F0
IGVmZmVjdGl2ZVN0YXJ0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBl
UmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDQwODU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw0MiBAQCBTdHJpbmcgTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0iOwogfQogCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVy
RnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJO
YW1lKQoreworICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZTsKKworICAgIC8vIGEgTUlNRSB0eXBl
IGNhbiBoYXZlIG9uZSBvciBtb3JlICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBh
bmQgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSBzZW1pLWNvbG9ucworICAgIGludCBzZW1p
ID0gdHlwZS5maW5kKCc7Jyk7CisgICAgaWYgKHNlbWkgIT0gLTEpIHsKKyAgICAgICAgaW50IHN0
YXJ0ID0gdHlwZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7CisgICAgICAg
IGlmIChzdGFydCAhPSAtMSkgeworICAgICAgICAgICAgc3RhcnQgPSB0eXBlLmZpbmQoJz0nLCBz
dGFydCArIDYpOworICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgaW50IGVuZCA9IHR5cGUuZmluZCgnOycsIHN0YXJ0ICsgNik7CisgICAgICAgICAgICAgICAg
aWYgKGVuZCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsg
MSwgZW5kIC0gKHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlOworfQorCitTdHJp
bmcgTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1pbWVUeXBlLnN0
cmlwV2hpdGVTcGFjZSgpOworCisgICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0
ZXIgYSBzZW1pLWNvbG9uLCBzdHJpcCB0aGVtCisgICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUu
ZmluZCgnOycpOworICAgIGlmIChzZW1pICE9IC0xKQorICAgICAgICBzdHJpcHBlZFR5cGUgPSBz
dHJpcHBlZFR5cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIHJldHVybiBz
dHJpcHBlZFR5cGU7Cit9CisKKworCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlw
ZS5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkocmV2aXNp
b24gNDA4NTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZ2V0
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHQpOwogICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBnZXRFeHRlbnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsK
ICAgICBzdGF0aWMgU3RyaW5nIGdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSk7CisKKyAgICBzdGF0aWMgU3RyaW5nIGdldFBhcmFtZXRlckZyb21NSU1F
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSk7Cisg
ICAgc3RhdGljIFN0cmluZyBzdHJpcFBhcmFtZXRlcnNGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKTsKKwogICAgIHN0YXRpYyBTdHJpbmcgZ2V0TUlNRVR5cGVGb3JQYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBtaW1lIHR5cGUgaXMgc3Vp
dGFibGUgZm9yIGJlaW5nIGxvYWRlZCBpbmxpbmUgYXMgYW4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDcsMTAgKzQ4LDc5IEBACiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyArKysrKysrKysrKysrKysrKysrKworLy8gZW5n
aW5lIHN1cHBvcnQKKworc3RydWN0IE1lZGlhUGxheWVyRmFjdG9yeSB7CisgICAgTWVkaWFQbGF5
ZXJGYWN0b3J5KENyZWF0ZU1lZGlhRW5naW5lUGxheWVyIGNvbnN0cnVjdG9yLCBNZWRpYUVuZ2lu
ZVN1cHBvcnRlZFR5cGVzIGdldFN1cHBvcnRlZFR5cGVzLCBNZWRpYUVuZ2luZVN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGVBbmRDb2RlY3MpIAorICAgICAgICA6IGNvbnN0cnVjdG9yKGNvbnN0cnVj
dG9yKQorICAgICAgICAsIGdldFN1cHBvcnRlZFR5cGVzKGdldFN1cHBvcnRlZFR5cGVzKQorICAg
ICAgICAsIHN1cHBvcnRzVHlwZUFuZENvZGVjcyhzdXBwb3J0c1R5cGVBbmRDb2RlY3MpICAKKyAg
ICB7IH0KKworICAgIENyZWF0ZU1lZGlhRW5naW5lUGxheWVyIGNvbnN0cnVjdG9yOworICAgIE1l
ZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMgZ2V0U3VwcG9ydGVkVHlwZXM7CisgICAgTWVkaWFFbmdp
bmVTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlQW5kQ29kZWNzOworfTsKKworc3RhdGljIHZvaWQg
YWRkTWVkaWFFbmdpbmUoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5ZXIsIE1lZGlhRW5naW5lU3VwcG9y
dGVkVHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlKTsKK3N0YXRpYyBNZWRpYVBsYXllckZh
Y3RvcnkqIGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNzKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworCitzdGF0aWMgVmVjdG9yPE1lZGlhUGxheWVyRmFj
dG9yeSo+JiBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKSAKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiwgaW5zdGFsbGVkRW5naW5lcywgKCkpOwor
ICAgIHN0YXRpYyBib29sIGVuZ2luZXNRdWVyaWVkID0gZmFsc2U7CisKKyAgICBpZiAoIWVuZ2lu
ZXNRdWVyaWVkKSB7CisgICAgICAgIGVuZ2luZXNRdWVyaWVkID0gdHJ1ZTsKKyAgICAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKGFkZE1lZGlhRW5naW5lKTsKKwor
ICAgICAgICAvLyByZWdpc3RlciBhZGRpdGlvbmFsIGVuZ2luZXMgaGVyZQorICAgIH0KICAgICAK
LSAgICBNZWRpYVBsYXllcjo6TWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqIGNsaWVudCkK
KyAgICByZXR1cm4gaW5zdGFsbGVkRW5naW5lczsKK30KKworc3RhdGljIHZvaWQgYWRkTWVkaWFF
bmdpbmUoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5ZXIgY29uc3RydWN0b3IsIE1lZGlhRW5naW5lU3Vw
cG9ydGVkVHlwZXMgZ2V0U3VwcG9ydGVkVHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlIHN1
cHBvcnRzVHlwZSkKK3sKKyAgICBBU1NFUlQoY29uc3RydWN0b3IpOworICAgIEFTU0VSVChnZXRT
dXBwb3J0ZWRUeXBlcyk7CisgICAgQVNTRVJUKHN1cHBvcnRzVHlwZSk7CisgICAgaW5zdGFsbGVk
TWVkaWFFbmdpbmVzKCkuYXBwZW5kKG5ldyBNZWRpYVBsYXllckZhY3RvcnkoY29uc3RydWN0b3Is
IGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpKTsKK30KKworc3RhdGljIE1lZGlhUGxh
eWVyRmFjdG9yeSogY2hvb3NlQmVzdEVuZ2luZUZvclR5cGVBbmRDb2RlY3MoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICBWZWN0b3I8TWVkaWFQbGF5ZXJG
YWN0b3J5Kj4mIGVuZ2luZXMgPSBpbnN0YWxsZWRNZWRpYUVuZ2luZXMoKTsKKworICAgIGlmIChl
bmdpbmVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBNZWRpYVBsYXllckZh
Y3RvcnkqIGVuZ2luZSA9IDA7CisgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0
ZWQgPSBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9
IGVuZ2luZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbmR4ID0gMDsgbmR4IDwgY291bnQ7
ICsrbmR4KSB7CisgICAgICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZW5naW5lU3VwcG9y
dCA9IGVuZ2luZXNbbmR4XS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHR5cGUsIGNvZGVjcyk7Cisg
ICAgICAgIGlmIChlbmdpbmVTdXBwb3J0ID4gc3VwcG9ydGVkKSB7CisgICAgICAgICAgICBzdXBw
b3J0ZWQgPSBlbmdpbmVTdXBwb3J0OworICAgICAgICAgICAgZW5naW5lID0gZW5naW5lc1tuZHhd
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVuZ2luZTsKK30KKworLy8gKysrKysr
KysrKysrKysrKysrKysKKy8vIG1lZGlhIHBsYXllcgorCitzdGF0aWMgTWVkaWFQbGF5ZXJQcml2
YXRlSW50ZXJmYWNlKiBjcmVhdGVOdWxsTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXIqIHBsYXllcik7
CisKK01lZGlhUGxheWVyOjpNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQog
ICAgIDogbV9tZWRpYVBsYXllckNsaWVudChjbGllbnQpCi0gICAgLCBtX3ByaXZhdGUobmV3IE1l
ZGlhUGxheWVyUHJpdmF0ZSh0aGlzKSkKKyAgICAsIG1fcHJpdmF0ZShjcmVhdGVOdWxsTWVkaWFQ
bGF5ZXIodGhpcykpCisgICAgLCBtX2N1cnJlbnRNZWRpYUVuZ2luZSgwKQogICAgICwgbV9mcmFt
ZVZpZXcoMCkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkKICAgICAsIG1fcmF0ZSgxLjBmKQpAQCAt
NjMsOSArMTMzLDMwIEBAIE1lZGlhUGxheWVyOjp+TWVkaWFQbGF5ZXIoKQogICAgIGRlbGV0ZSBt
X3ByaXZhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwp
Cit2b2lkIE1lZGlhUGxheWVyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogewotICAgIG1fcHJpdmF0ZS0+bG9hZCh1cmwpOworICAgIC8vIGlmIHdlIGRv
bid0IGtub3cgdGhlIE1JTUUgdHlwZSwgc2VlIGlmIHRoZSBwYXRoIGNhbiBoZWxwCisgICAgU3Ry
aW5nIHR5cGUgPSBtaW1lVHlwZS5pc0VtcHR5KCkgPyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvclBhdGgodXJsKSA6IG1pbWVUeXBlOworICAgIFN0cmluZyBjb2RlY3MgPSBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUodHlwZSwgImNvZGVjcyIpOworCisg
ICAgTWVkaWFQbGF5ZXJGYWN0b3J5KiBlbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFu
ZENvZGVjcyh0eXBlLCBjb2RlY3MpOworCisgICAgLy8gIGlmIHdlIGRpZG4ndCBmaW5kIGFuIGVu
Z2luZSB0aGF0IGNsYWltcyB0aGUgTUlNRSB0eXBlLCBqdXN0IHVzZSB0aGUgZmlyc3QgZW5naW5l
CisgICAgaWYgKCFlbmdpbmUpCisgICAgICAgIGVuZ2luZSA9IGluc3RhbGxlZE1lZGlhRW5naW5l
cygpWzBdOworICAgIAorICAgIC8vIGRvbid0IGRlbGV0ZSBhbmQgcmVjcmVhdGUgdGhlIHBsYXll
ciB1bmxlc3MgaXQgY29tZXMgZnJvbSBhIGRpZmZlcmVudCBlbmdpbmUKKyAgICBpZiAoZW5naW5l
ICYmIG1fY3VycmVudE1lZGlhRW5naW5lICE9IGVuZ2luZSkgeworICAgICAgICBtX2N1cnJlbnRN
ZWRpYUVuZ2luZSA9IGVuZ2luZTsKKyAgICAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICAgICAg
bV9wcml2YXRlID0gMDsKKyAgICAgICAgbV9wcml2YXRlID0gZW5naW5lLT5jb25zdHJ1Y3Rvcih0
aGlzKTsKKyAgICB9CisKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmxv
YWQodXJsKTsKKyAgICBlbHNlCisgICAgICAgIG1fcHJpdmF0ZSA9IGNyZWF0ZU51bGxNZWRpYVBs
YXllcih0aGlzKTsKIH0gICAgCiAKIHZvaWQgTWVkaWFQbGF5ZXI6OmNhbmNlbExvYWQoKQpAQCAt
OTAsNyArMTgxLDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXI6OmR1cmF0aW9uKCkgY29uc3QKIAogZmxv
YXQgTWVkaWFQbGF5ZXI6OmN1cnJlbnRUaW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5jdXJyZW50VGltZSgpOyAgCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3VycmVudFRpbWUo
KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6c2VlayhmbG9hdCB0aW1lKQpAQCAtMjE1LDI3ICsz
MDYsMzEgQEAgdm9pZCBNZWRpYVBsYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KgogICAgIG1f
cHJpdmF0ZS0+cGFpbnQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxh
eWVyOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVj
cykKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZ2V0U3VwcG9ydGVkVHlwZXMo
dHlwZXMpOwotICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlhTUlN
RVR5cGUodHlwZSkgJiYgdHlwZXMuY29udGFpbnModHlwZSk7CisgICAgTWVkaWFQbGF5ZXJGYWN0
b3J5KiBlbmdpbmUgPSBjaG9vc2VCZXN0RW5naW5lRm9yVHlwZUFuZENvZGVjcyh0eXBlLCBjb2Rl
Y3MpOworCisgICAgaWYgKCFlbmdpbmUpCisgICAgICAgIHJldHVybiBJc05vdFN1cHBvcnRlZDsK
KworICAgIHJldHVybiBlbmdpbmUtPnN1cHBvcnRzVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3Mp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
Zz4mIHR5cGVzKQogewotICAgIE1lZGlhUGxheWVyUHJpdmF0ZTo6Z2V0U3VwcG9ydGVkVHlwZXMo
dHlwZXMpOworICAgIFZlY3RvcjxNZWRpYVBsYXllckZhY3RvcnkqPiYgZW5naW5lcyA9IGluc3Rh
bGxlZE1lZGlhRW5naW5lcygpOworICAgIGlmIChlbmdpbmVzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPE1lZGlhUGxheWVyRmFjdG9yeSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGVuZ2luZXMuYmVnaW4oKTsKKyAgICBjb25zdCBWZWN0b3I8TWVkaWFQbGF5ZXJGYWN0
b3J5Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGVuZ2luZXMuZW5kKCk7CisgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPmdldFN1cHBvcnRlZFR5cGVzKHR5cGVzKTsK
IH0gCi0gICAgCisKIGJvb2wgTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICBzdGF0
aWMgYm9vbCBhdmFpbGFiaXR5S25vd24gPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWls
YWJsZTsKLSAgICBpZiAoIWF2YWlsYWJpdHlLbm93bikgewotICAgICAgICBpc0F2YWlsYWJsZSA9
IE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUoKTsKLSAgICAgICAgYXZhaWxhYml0eUtu
b3duID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQXZhaWxhYmxlOworICAgIHJldHVybiAh
aW5zdGFsbGVkTWVkaWFFbmdpbmVzKCkuaXNFbXB0eSgpOwogfSAKIAogdm9pZCBNZWRpYVBsYXll
cjo6bmV0d29ya1N0YXRlQ2hhbmdlZCgpCkBAIC0yNjgsNSArMzYzLDYxIEBAIHZvaWQgTWVkaWFQ
bGF5ZXI6OnJlcGFpbnQoKQogICAgICAgICBtX21lZGlhUGxheWVyQ2xpZW50LT5tZWRpYVBsYXll
clJlcGFpbnQodGhpcyk7CiB9CiAKKworLy8gKysrKysrKysrKysrKysrKysrKysKKy8vIGEgbnVs
bCBwbGF5ZXIgdG8gbWFrZSBNZWRpYVBsYXllciBsb2dpYyBzaW1wbGVyCisKK2NsYXNzIE5VTExN
ZWRpYVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsK
K3B1YmxpYzoKKyAgICBOVUxMTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKikge307Cisg
ICAgdmlydHVhbCB+TlVMTE1lZGlhUGxheWVyUHJpdmF0ZSgpIHt9OworCisgICAgdmlydHVhbCB2
b2lkIGxvYWQoY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbExvYWQo
KSB7IH07CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSB7IH07CisgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgeyB9OyAgICAKKworICAgIHZpcnR1YWwgSW50U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIEludFNpemUoMCwgMCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNW
aWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlz
aWJsZShib29sKSB7IH07CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VlayhmbG9hdCkgeyB9OworICAgIHZpcnR1YWwg
Ym9vbCBzZWVraW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbmRUaW1lKGZsb2F0KSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9h
dCkgeyB9OworICAgIHZpcnR1YWwgYm9vbCBwYXVzZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCkgeyB9OworCisgICAgdmlydHVh
bCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IE1lZGlhUGxheWVyOjpFbXB0eTsgfQorICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhUGxheWVyOjpEYXRhVW5hdmFpbGFi
bGU7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCBpbnQgZGF0YVJhdGUoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgdG90YWxCeXRlc0tub3duKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IH07CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsg
fSA7Cit9OworCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIGNyZWF0ZU51bGxNZWRpYVBs
YXllcihNZWRpYVBsYXllciogcGxheWVyKSAKK3sgCisgICAgcmV0dXJuIG5ldyBOVUxMTWVkaWFQ
bGF5ZXJQcml2YXRlKHBsYXllcik7IAorfQorCiB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDQwODU0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIElu
dFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZTsKK2Ns
YXNzIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTsKIGNsYXNzIFN0cmluZzsKIAogY2xhc3Mg
TWVkaWFQbGF5ZXJDbGllbnQgewpAQCAtNTIsMTkgKzUyLDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgbWVkaWFQbGF5ZXJSZXBhaW50KE1lZGlhUGxheWVyKikgeyB9CiB9OwogCisKIGNs
YXNzIE1lZGlhUGxheWVyIDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIE1lZGlhUGxheWVy
KE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXIoKTsKLSAgICAK
LSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRz
VHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIG1lZGlhIGVuZ2luZSBzdXBwb3J0CisgICAg
ZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0ZWQsIE1heUJlU3Vw
cG9ydGVkIH07CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MgPSAiIik7CiAgICAg
c3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+Jik7CisgICAgc3Rh
dGljIGJvb2wgaXNBdmFpbGFibGUoKTsKICAgICAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCk7
CiAgICAgYm9vbCBoYXNWaWRlbygpOwogICAgIAogICAgIHZvaWQgc2V0RnJhbWVWaWV3KEZyYW1l
VmlldyogZnJhbWVWaWV3KSB7IG1fZnJhbWVWaWV3ID0gZnJhbWVWaWV3OyB9CisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcoKSB7IHJldHVybiBtX2ZyYW1lVmlldzsgfQogICAgIGJvb2wgaW5NZWRp
YURvY3VtZW50KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBq
dXN0IGhhdmUgYSBnZXR0ZXIgYW5kIHNldHRlciBmb3Igc2l6ZS4KQEAgLTczLDcgKzc3LDcgQEAg
cHVibGljOgogICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAg
IHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAgICB2b2lkIGxvYWQoY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAgICAgCiAgICAgYm9v
bCB2aXNpYmxlKCkgY29uc3Q7CkBAIC0xMjIsMTEgKzEyNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXBhaW50KCk7CiAgICAgCiBwcml2YXRlOgotICAgICAgICAKLSAgICBmcmllbmQgY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlOwotICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNZWRp
YUVuZ2luZXMoKTsKKwogICAgIE1lZGlhUGxheWVyQ2xpZW50KiBtX21lZGlhUGxheWVyQ2xpZW50
OwotICAgIE1lZGlhUGxheWVyUHJpdmF0ZSogbV9wcml2YXRlOworICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogbV9wcml2YXRlOworICAgIHZvaWQqIG1fY3VycmVudE1lZGlhRW5naW5l
OwogICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAgICAgSW50UmVjdCBtX3JlY3Q7CiAgICAg
Ym9vbCBtX3Zpc2libGU7CkBAIC0xMzQsNyArMTM4LDE1IEBAIHByaXZhdGU6CiAgICAgZmxvYXQg
bV92b2x1bWU7CiB9OwogCit0eXBlZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogKCpD
cmVhdGVNZWRpYUVuZ2luZVBsYXllcikoTWVkaWFQbGF5ZXIqKTsKK3R5cGVkZWYgdm9pZCAoKk1l
ZGlhRW5naW5lU3VwcG9ydGVkVHlwZXMpKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwordHlwZWRl
ZiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlICgqTWVkaWFFbmdpbmVTdXBwb3J0c1R5cGUpKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworCit0eXBlZGVmIHZvaWQg
KCpNZWRpYUVuZ2luZVJlZ2lzdHJhcikoQ3JlYXRlTWVkaWFFbmdpbmVQbGF5ZXIsIE1lZGlhRW5n
aW5lU3VwcG9ydGVkVHlwZXMsIE1lZGlhRW5naW5lU3VwcG9ydHNUeXBlKTsgCisKKwogfQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2
YXRlX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlX2gKKworI2lmIEVOQUJMRShWSURFTykK
KworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlKCkg
e307CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIHVybCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxMb2FkKCkgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBw
bGF5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCisKKyAgICB2aXJ0
dWFsIEludFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzVmlkZW8oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29s
KSA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgPSAwOworCisgICAg
dmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2VlayhmbG9hdCB0aW1lKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5kVGltZShmbG9hdCB0aW1lKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmF0ZShmbG9hdCBpblJhdGUpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGF1c2VkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9h
dCBpblZvbHVtZSkgPSAwOworCisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRp
bWVTZWVrYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1heFRpbWVCdWZmZXJl
ZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50IGRhdGFSYXRlKCkgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCBib29sIHRvdGFsQnl0ZXNLbm93bigpIGNvbnN0IHsgcmV0dXJuIHRvdGFs
Qnl0ZXMoKSA+IDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwIDsKK307
CisKK30KKworI2VuZGlmCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oCShy
ZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVk
aWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDEz
IEBACiAKICNpZiBFTkFCTEUoVklERU8pCiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitjbGFzcyBNZWRp
YVBsYXllclByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1
YmxpYzoKLSAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMg
dm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICB+TWVk
aWFQbGF5ZXJQcml2YXRlKCk7CiAKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Q7CkBA
IC03OCw5ICs3OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmc+Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQogICAg
IC8vIFB1YmxpYyBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSBXZWJNZWRpYVBsYXllcgogICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3KCk7CiAgICAgdm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CkBA
IC05MCw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBhaW50KCk7CiAKIHByaXZhdGU6
CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisgICAgc3RhdGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworICAg
IHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYpOworICAgIHN0
YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJs
ZSgpOworCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIHZvaWQqIG1fZGF0YTsKIH07
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHJldmlzaW9uIDQwODU0KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxNyBAQCBnYm9vbGVhbiBtZWRpYVBsYXll
clByaXZhdGVCdWZmZXJpbmdDYWxsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK01lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcik7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkKKyAg
ICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7
Cit9CisKIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVy
KiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3BsYXlCaW4oMCkKQEAg
LTE0MCw3ICsxNTEsNyBAQCBNZWRpYVBsYXllclByaXZhdGU6On5NZWRpYVBsYXllclByaXZhdGUo
CiAgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChTdHJpbmcgdXJsKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
TE9HX1ZFUkJPU0UoTWVkaWEsICJMb2FkICVzIiwgdXJsLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlm
IChtX25ldHdvcmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewpAQCAtMTc1LDcgKzE4
Niw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpwYXVzZSgpCiAgICAgbV9zdGFydGVkUGxh
eWluZyA9IGZhbHNlOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6OmR1cmF0aW9uKCkK
K2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZTo6ZHVyYXRpb24oKSBjb25zdAogewogICAgIGlmICgh
bV9wbGF5QmluKQogICAgICAgICByZXR1cm4gMC4wOwpAQCAtMjg4LDcgKzI5OSw3IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpzZWVraW5nKCkgY29uc3QKIH0KIAogLy8gUmV0dXJucyB0aGUg
c2l6ZSBvZiB0aGUgdmlkZW8KLUludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlOjpuYXR1cmFsU2l6
ZSgpCitJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoKSBjb25zdAogewog
ICAgIGlmICghaGFzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKQEAgLTMwMiw3
ICszMTMsNyBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZTo6bmF0dXJhbFNpemUoCiAgICAg
cmV0dXJuIEludFNpemUoeCwgeSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNW
aWRlbygpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAogewogICAg
IGdpbnQgY3VycmVudFZpZGVvID0gLTE7CiAgICAgaWYgKG1fcGxheUJpbikKQEAgLTM1NSwxNyAr
MzY2LDE3IEBAIGludCBNZWRpYVBsYXllclByaXZhdGU6OmRhdGFSYXRlKCkgY29uc3QKICAgICBy
ZXR1cm4gMTsKIH0KIAotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZh
dGU6Om5ldHdvcmtTdGF0ZSgpCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVy
UHJpdmF0ZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9uZXR3b3JrU3Rh
dGU7CiB9CiAKLU1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVh
ZHlTdGF0ZSgpCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGU6OnJl
YWR5U3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKLWZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKCkKK2Zsb2F0IE1lZGlhUGxheWVy
UHJpdmF0ZTo6bWF4VGltZUJ1ZmZlcmVkKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAibWF4VGltZUJ1ZmZlcmVkIik7CkBAIC0zNzMsNyAr
Mzg0LDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lQnVmZmVyZQogICAgIHJl
dHVybiBtX2lzU3RyZWFtaW5nID8gMCA6IG1heFRpbWVMb2FkZWQoKTsKIH0KIAotZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lU2Vla2FibGUoKQorZmxvYXQgTWVkaWFQbGF5ZXJQcml2
YXRlOjptYXhUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIC8vIFRPRE8KICAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIm1heFRpbWVTZWVrYWJsZSIpOwpAQCAtMzgzLDcgKzM5NCw3IEBAIGZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZTo6bWF4VGltZVNlZWthYmwKICAgICByZXR1cm4gbWF4VGltZUxv
YWRlZCgpOwogfQogCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGU6Om1heFRpbWVMb2FkZWQoKQor
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKICAgICAv
LyBUT0RPCiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJtYXhUaW1lTG9hZGVkIik7CkBAIC0zOTEs
NyArNDAyLDcgQEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlOjptYXhUaW1lTG9hZGVkKAogICAg
IHJldHVybiBkdXJhdGlvbigpOwogfQogCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6OmJ5
dGVzTG9hZGVkKCkKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Ynl0ZXNMb2FkZWQoKSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJi
eXRlc0xvYWRlZCIpOwpAQCAtNDA0LDE0ICs0MTUsMTQgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQ
cml2YXRlOjpieXRlc0xvYWRlZAogICAgIHJldHVybiAxOy8vdG90YWxCeXRlcygpICogbWF4VGlt
ZSAvIGR1cjsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGU6OnRvdGFsQnl0ZXNLbm93bigp
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlc0tub3duKCkgY29uc3QKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlc0tu
b3duIik7CiAgICAgcmV0dXJuIHRvdGFsQnl0ZXMoKSA+IDA7CiB9CiAKLXVuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6dG90YWxCeXRlcygpCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGU6
OnRvdGFsQnl0ZXMoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzIik7CkBAIC01OTIsNiArNjAzLDEzIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXAKICAgICB0eXBlcy5hZGQoU3RyaW5nKCJ2
aWRlby94LXRoZW9yYStvZ2ciKSk7CiB9CiAKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVk
aWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGNvZGVjcykKK3sKKyAgICAvLyBGSVhNRTogZG8gdGhlIHJlYWwgdGhpbmcKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0eXBlID09ICJ2aWRlby94LXRoZW9yYStvZ2ci
ID8gKCFjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVk
aWFQbGF5ZXI6OklzU3VwcG9ydGVkKSA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKK30K
Kwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmNyZWF0ZUdTVFBsYXlCaW4oU3RyaW5nIHVybCkK
IHsKICAgICBBU1NFUlQoIW1fcGxheUJpbik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAko
cmV2aXNpb24gNDA4NTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
CiAjaWYgRU5BQkxFKFZJREVPKQogCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8
Z3RrL2d0ay5oPgpAQCAtNDQsMjAgKzQ0LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBn
Ym9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1NDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVz
c2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQ
cml2YXRlU3RhdGVDYWxsYmFjayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3Bv
aW50ZXIgZGF0YSk7CiAKLSAgICBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBOb25jb3B5YWJs
ZQorICAgIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UKICAgICB7CiAgICAgZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0
ZUVycm9yQ2FsbGJhY2soR3N0QnVzKiBidXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVy
IGRhdGEpOwogICAgIGZyaWVuZCBnYm9vbGVhbiBtZWRpYVBsYXllclByaXZhdGVFT1NDYWxsYmFj
ayhHc3RCdXMqIGJ1cywgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSk7CiAgICAg
ZnJpZW5kIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZVN0YXRlQ2FsbGJhY2soR3N0QnVzKiBi
dXMsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOwogCiAgICAgcHVibGljOgot
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKworICAgICAgICBzdGF0
aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICAg
ICAgfk1lZGlhUGxheWVyUHJpdmF0ZSgpOwogCi0gICAgICAgIEludFNpemUgbmF0dXJhbFNpemUo
KTsKLSAgICAgICAgYm9vbCBoYXNWaWRlbygpOworICAgICAgICBJbnRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKIAotICAgICAgICB2b2lk
IGxvYWQoU3RyaW5nIHVybCk7CisgICAgICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcgJnVybCk7
CiAgICAgICAgIHZvaWQgY2FuY2VsTG9hZCgpOwogCiAgICAgICAgIHZvaWQgcGxheSgpOwpAQCAt
NjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGF1c2VkKCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OwogCi0gICAgICAgIGZsb2F0IGR1
cmF0aW9uKCk7CisgICAgICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0
IGN1cnJlbnRUaW1lKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2VlayhmbG9hdCk7CiAgICAgICAg
IHZvaWQgc2V0RW5kVGltZShmbG9hdCk7CkBAIC03NywxNCArNzgsMTQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIGludCBkYXRhUmF0ZSgpIGNvbnN0OwogCi0gICAgICAgIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCk7Ci0gICAgICAgIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKTsKKyAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZSBuZXR3b3JrU3RhdGUoKSBjb25zdDsKKyAgICAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCi0gICAgICAgIGZsb2F0IG1heFRpbWVCdWZmZXJlZCgp
OwotICAgICAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKTsKLSAgICAgICAgdW5zaWduZWQgYnl0
ZXNMb2FkZWQoKTsKLSAgICAgICAgYm9vbCB0b3RhbEJ5dGVzS25vd24oKTsKLSAgICAgICAgdW5z
aWduZWQgdG90YWxCeXRlcygpOworICAgICAgICBmbG9hdCBtYXhUaW1lQnVmZmVyZWQoKSBjb25z
dDsKKyAgICAgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7CisgICAgICAgIHVuc2ln
bmVkIGJ5dGVzTG9hZGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgdG90YWxCeXRlc0tub3duKCkg
Y29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXMoKSBjb25zdDsKIAogICAgICAgICB2
b2lkIHNldFZpc2libGUoYm9vbCk7CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0
Jik7CkBAIC05OSwxNSArMTAwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
b2lkIHJlcGFpbnQoKTsKICAgICAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hT
ZXQ8U3RyaW5nPiYpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpIHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIHByaXZhdGU6CiAKKyAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1l
ZGlhUGxheWVyKik7CivKIMrKysrKynN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2Uq
IGNyZWF0ZShNZWRpYVBsYXllciogcGxheWVyKTsKKworICAgICAgICBzdGF0aWMgdm9pZCBnZXRT
dXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mKTsKKyAgICAgICAgc3RhdGljIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBjb2RlY3MpOworICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpIHsgcmV0
dXJuIHRydWU7IH0KKwogICAgICAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwogICAgICAgICB2b2lk
IGNhbmNlbFNlZWsoKTsKICAgICAgICAgdm9pZCBlbmRQb2ludFRpbWVyRmlyZWQoVGltZXI8TWVk
aWFQbGF5ZXJQcml2YXRlPiopOwotICAgICAgICBmbG9hdCBtYXhUaW1lTG9hZGVkKCk7CisgICAg
ICAgIGZsb2F0IG1heFRpbWVMb2FkZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBzdGFydEVuZFBv
aW50VGltZXJJZk5lZWRlZCgpOwogCiAgICAgICAgIHZvaWQgY3JlYXRlR1NUUGxheUJpbihTdHJp
bmcgdXJsKTsKQEAgLTEyNCw3ICsxMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgICAgIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICAgICAgYm9vbCBtX3N0YXJ0ZWRQ
bGF5aW5nOwotICAgICAgICBib29sIG1faXNTdHJlYW1pbmc7CisgICAgICAgIG11dGFibGUgYm9v
bCBtX2lzU3RyZWFtaW5nOwogICAgICAgICBJbnRSZWN0IG1fcmVjdDsKICAgICAgICAgYm9vbCBt
X3Zpc2libGU7CiAgICAgICAgIGNhaXJvX3N1cmZhY2VfdCogbV9zdXJmYWNlOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZh
dGVRVEtpdC5oCShyZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShWSURFTykKIAotI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTUyLDExICs1MiwyOCBAQCBjbGFzcyBXZWJDb3Jl
TW92aWVPYnNlcnZlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGUgOiBOb25jb3B5YWJsZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBwdWJs
aWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBNZWRpYVBsYXll
clByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKKwogICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsK
LSAgICAKKworICAgIHZvaWQgcmVwYWludCgpOworICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgp
OworICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CisgICAg
dm9pZCB0aW1lQ2hhbmdlZCgpOworICAgIHZvaWQgZGlkRW5kKCk7CisKK3ByaXZhdGU6CisgICAg
TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7CisKKyAgICAvLyBlbmdpbmUgc3VwcG9y
dAorICAgIHN0YXRpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJp
dmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpOworICAgIHN0YXRpYyB2b2lkIGdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOworICAgIHN0YXRpYyBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgY29kZWNzKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCiAgICAg
SW50U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsK
ICAgICAKQEAgLTkxLDE5ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaXNpYmxlKGJv
b2wpOwogICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKTsKICAgICAKLSAgICB2b2lk
IGxvYWRTdGF0ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHJhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBz
aXplQ2hhbmdlZCgpOwotICAgIHZvaWQgdGltZUNoYW5nZWQoKTsKLSAgICB2b2lkIGRpZEVuZCgp
OwotICAgIAotICAgIHZvaWQgcmVwYWludCgpOwogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIAotICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRl
ZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7Ci0gICAgCi1wcml2YXRlOgorCiAgICAgdm9pZCBjcmVhdGVRVE1vdmllKGNvbnN0IFN0
cmluZyYgdXJsKTsKICAgICB2b2lkIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKICAgICB2b2lkIHRl
YXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA0
MDg1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0
ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDE4IEBAIHN0YXRpYyBjb25z
dCBmbG9hdCBlbmRQb2ludFRpbWVySW50ZXJ2YWwKIHN0YXRpYyBjb25zdCBsb25nIG1pbmltdW1R
dWlja1RpbWVWZXJzaW9uID0gMHgwNzMwMDAwMDsgLy8gNy4zCiAjZW5kaWYKIAorCitNZWRpYVBs
YXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5
ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgaWYgKGlzQXZhaWxhYmxlKCkp
CisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5
cGUpOworfQorCiBNZWRpYVBsYXllclByaXZhdGU6Ok1lZGlhUGxheWVyUHJpdmF0ZShNZWRpYVBs
YXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9vYmpjT2JzZXJ2
ZXIoQWRvcHROUywgW1tXZWJDb3JlTW92aWVPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFj
azp0aGlzXSkKQEAgLTI3OSw3ICsyOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlUVRNb3ZpZVZpCiAKICAgICBtX3F0TW92aWVWaWV3LmFkb3B0TlMoW1tRVE1vdmllVmlldyBh
bGxvY10gaW5pdF0pOwogICAgIHNldFJlY3QobV9wbGF5ZXItPnJlY3QoKSk7Ci0gICAgTlNWaWV3
KiBwYXJlbnRWaWV3ID0gbV9wbGF5ZXItPm1fZnJhbWVWaWV3LT5kb2N1bWVudFZpZXcoKTsKKyAg
ICBOU1ZpZXcqIHBhcmVudFZpZXcgPSBtX3BsYXllci0+ZnJhbWVWaWV3KCktPmRvY3VtZW50Vmll
dygpOwogICAgIFtwYXJlbnRWaWV3IGFkZFN1YnZpZXc6bV9xdE1vdmllVmlldy5nZXQoKV07CiAj
aWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAvLyBzZXREZWxlZ2F0ZTogaXNuJ3QgYSBwdWJs
aWMgY2FsbCBpbiBUaWdlciwgc28gdXNlIHBlcmZvcm1TZWxlY3RvciB0byBrZWVwIHRoZSBjb21w
aWxlciBoYXBweQpAQCAtMzUyLDcgKzM2NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpk
ZXN0cm95UVRWaWRlb1IKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldFVwVmlkZW9SZW5k
ZXJpbmcoKQogewotICAgIGlmICghbV9wbGF5ZXItPm1fZnJhbWVWaWV3IHx8ICFtX3F0TW92aWUp
CisgICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fcXRNb3ZpZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSB8fCAhUVRWaWRl
b1JlbmRlcmVyQ2xhc3MoKSApCkBAIC03ODcsNyArNzk5LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGU6OnBhaW50KEdyYXBoaWNzQwogI2lmIERSQVdfRlJBTUVfUkFURQogICAgIC8vIERyYXcg
dGhlIGZyYW1lIHJhdGUgb25seSBhZnRlciBoYXZpbmcgcGxheWVkIG1vcmUgdGhhbiAxMCBmcmFt
ZXMuCiAgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7Ci0gICAgICAgIEZy
YW1lKiBmcmFtZSA9IG1fcGxheWVyLT5tX2ZyYW1lVmlldyA/IG1fcGxheWVyLT5tX2ZyYW1lVmll
dy0+ZnJhbWUoKSA6IE5VTEw7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5mcmFt
ZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6IE5VTEw7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50KCkgOiBOVUxMOwog
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+cmVu
ZGVyZXIoKSA6IE5VTEw7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gcmVuZGVy
ZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IE5VTEw7CkBAIC04MTMsMjIgKzgyNSw0MiBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAgICAgW21fb2JqY09ic2VydmVy
LmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOk5PXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCitzdGF0aWMgSGFz
aFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewotICAgIE5TQXJyYXkqIGZpbGVUeXBlcyA9
IFtRVE1vdmllIG1vdmllRmlsZVR5cGVzOlFUSW5jbHVkZUNvbW1vblR5cGVzXTsKLSAgICBpbnQg
Y291bnQgPSBbZmlsZVR5cGVzIGNvdW50XTsKLSAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50
OyBuKyspIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYgZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxDRlN0
cmluZ1JlZj4oW2ZpbGVUeXBlcyBvYmplY3RBdEluZGV4Om5dKTsKLSAgICAgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiB1dGkoQWRvcHRDRiwgVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmll
ckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCBleHQsIE5VTEwpKTsKLSAgICAg
ICAgaWYgKCF1dGkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBtaW1lKEFkb3B0Q0YsIFVUVHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3Mo
dXRpLmdldCgpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7Ci0gICAgICAgIGlmICghbWltZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0eXBlcy5hZGQobWltZS5nZXQoKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7CisgICAgc3Rh
dGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKCF0eXBlTGlz
dEluaXRpYWxpemVkKSB7CisgICAgICAgIE5TQXJyYXkqIGZpbGVUeXBlcyA9IFtRVE1vdmllIG1v
dmllRmlsZVR5cGVzOlFUSW5jbHVkZUNvbW1vblR5cGVzXTsKKyAgICAgICAgaW50IGNvdW50ID0g
W2ZpbGVUeXBlcyBjb3VudF07CisgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgY291bnQ7IG4r
KykgeworICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxDRlN0
cmluZ1JlZj4oW2ZpbGVUeXBlcyBvYmplY3RBdEluZGV4Om5dKTsKKyAgICAgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXRpKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50
aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7Cisg
ICAgICAgICAgICBpZiAoIXV0aSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWltZShBZG9wdENGLCBVVFR5cGVDb3B5UHJlZmVy
cmVkVGFnV2l0aENsYXNzKHV0aS5nZXQoKSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOworICAgICAg
ICAgICAgaWYgKCFtaW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Y2FjaGUuYWRkKG1pbWUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHR5cGVMaXN0SW5pdGlh
bGl6ZWQgPSB0cnVlOwogICAgIH0KLX0gCiAgICAgCisgICAgcmV0dXJuIGNhY2hlOworfSAKKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5n
PiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9IAorCitNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCit7CisgICAgLy8gb25seSByZXR1
cm4gIklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFyYW1ldGVyIGZvciBub3cg
YXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFzayBRVCBpZiBpdCBzdXBwb3J0cyBhbgorICAgIC8vICBl
eHRlbmRlZCBNSU1FIHR5cGUgeWV0CisgICAgcmV0dXJuIG1pbWVUeXBlQ2FjaGUoKS5jb250YWlu
cyh0eXBlKSA/IChjb2RlY3MgJiYgIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5
QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6Oklz
Tm90U3VwcG9ydGVkOworfQorCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFibGUo
KQogewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCkBAIC05MzksNyArOTcxLDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGU6OmRpc2FibGVVbnN1cHBvcgogCiBAaW1wbGVtZW50YXRpb24gV2Vi
Q29yZU1vdmllT2JzZXJ2ZXIKIAotLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQ
cml2YXRlICopY2FsbGJhY2sKKy0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVyUHJp
dmF0ZSopY2FsbGJhY2sKIHsKICAgICBtX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgcmV0dXJu
IFtzdXBlciBpbml0XTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUGhvbm9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5jcHAJKHJldmlzaW9uIDQwODU0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVQaG9ub24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDE4IEBAIE1lZGlhUGxheWVyUHJpdmF0
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE0KICAgICBjb25uZWN0KG1fbWVkaWFPYmplY3QsIFNJR05B
TCh0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCkpLCB0aGlzLCBTTE9UKHRvdGFsVGltZUNoYW5nZWQo
cWludDY0KSkpOwogfQogCitNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UqIE1lZGlhUGxheWVy
UHJpdmF0ZTo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpIAoreyAKKyAgICByZXR1cm4gbmV3
IE1lZGlhUGxheWVyUHJpdmF0ZShwbGF5ZXIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7
CisgICAgaWYgKGlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJlZ2lzdHJhcihjcmVhdGUsIGdldFN1
cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUpOworfQorCisKIE1lZGlhUGxheWVyUHJpdmF0ZTo6
fk1lZGlhUGxheWVyUHJpdmF0ZSgpCiB7CiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlUGhvbm9uOjpkdG9yIGRlbGV0aW5nIHZpZGVvd2lkZ2V0Iik7CkBAIC0xMzEsNiArMTQzLDEz
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRTdXBwb3J0ZWRUeXAKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJp
dmF0ZTo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2Rl
Y3MpCit7CisgICAgLy8gRklYTUU6IGRvIHRoZSByZWFsIHRoaW5nCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworfQorCiBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZTo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIGJvb2wgaGFzVmlk
ZW8gPSBtX21lZGlhT2JqZWN0LT5oYXNWaWRlbygpOwpAQCAtMTM4LDcgKzE1Nyw3IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlOjpoYXNWaWRlbygpIGNvbnMKICAgICByZXR1cm4gaGFzVmlkZW87
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKFN0cmluZyB1cmwpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVQaG9ub246OmxvYWQoXCIlc1wiKSIsIHVybC51dGY4KCku
ZGF0YSgpKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXll
clByaXZhdGVQaG9ub24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L01lZGlhUGxheWVyUHJpdmF0ZVBob25vbi5oCShyZXZpc2lvbiA0MDg1NCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDggKzIwLDcgQEAKICNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUGhv
bm9uX2gKICNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2YXRlUGhvbm9uX2gKIAotI2luY2x1ZGUgIk1l
ZGlhUGxheWVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlLmgiCiAKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPHBob25v
bm5hbWVzcGFjZS5oPgpAQCAtNDAsMTIgKzM5LDEyIEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlIDogcHVibGlj
IFFPYmplY3QsIE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBNZWRpYVBsYXllclByaXZhdGUgOiBw
dWJsaWMgUU9iamVjdCwgcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiAKICAg
ICAgICAgUV9PQkpFQ1QKIAogICAgIHB1YmxpYzoKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
KE1lZGlhUGxheWVyKik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogICAgICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAK
ICAgICAgICAgLy8gVGhlc2UgZW51bXMgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZwpAQCAtNzksNyAr
NzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEludFNpemUgbmF0dXJhbFNpemUo
KSBjb25zdDsKICAgICAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwogCi0gICAgICAgIHZvaWQg
bG9hZChTdHJpbmcgdXJsKTsKKyAgICAgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyAmdXJsKTsK
ICAgICAgICAgdm9pZCBjYW5jZWxMb2FkKCk7CiAKICAgICAgICAgdm9pZCBwbGF5KCk7CkBAIC0x
MTIsOCArMTExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFJlY3Qo
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZz4mKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKSAgIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBldmVudEZpbHRl
cihRT2JqZWN0KiwgUUV2ZW50Kik7CkBAIC0xMzAsNiArMTI3LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCB0b3RhbFRpbWVDaGFuZ2VkKHFpbnQ2NCk7CiAKICAgICBwcml2
YXRlOgorICAgICAgICBNZWRpYVBsYXllclByaXZhdGUoTWVkaWFQbGF5ZXIqKTsKKyAgICAgICAg
c3RhdGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSogY3JlYXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYpOworICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBw
b3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAg
ICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgICAg
IHZvaWQgdXBkYXRlU3RhdGVzKCk7CiAKICAgICAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCShyZXZpc2lvbiA0MDg1NCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisj
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNp
ZiBEUkFXX0ZSQU1FX1JBVEUKICNpbmNsdWRlICJGb250LmgiCkBAIC00OCw4ICs1MSwxOSBAQCB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK01lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikgCit7IAorICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBsYXllcik7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlh
RW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBpZiAoaXNBdmFpbGFibGUoKSkKKyAg
ICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSk7
Cit9CisKIHN0YXRpYyBjb25zdCBkb3VibGUgZW5kUG9pbnRUaW1lckludGVydmFsID0gMC4wMjA7
Ci0gICAgCisKIE1lZGlhUGxheWVyUHJpdmF0ZTo6TWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3NlZWtUbygtMSkK
QEAgLTkzLDggKzEwNyw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0
cmkKIAogICAgIG1fcXRNb3ZpZS5zZXQobmV3IFFUTW92aWVXaW4odGhpcykpOwogICAgIG1fcXRN
b3ZpZS0+bG9hZCh1cmwuY2hhcmFjdGVycygpLCB1cmwubGVuZ3RoKCkpOwotICAgIG1fcXRNb3Zp
ZS0+c2V0Vm9sdW1lKG1fcGxheWVyLT5tX3ZvbHVtZSk7Ci0gICAgbV9xdE1vdmllLT5zZXRWaXNp
YmxlKG1fcGxheWVyLT5tX3Zpc2libGUpOworICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7CisgICAgbV9xdE1vdmllLT5zZXRWaXNpYmxlKG1fcGxheWVyLT52aXNp
YmxlKCkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGxheSgpCkBAIC00MDMsNyAr
NDE3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnBhaW50KEdyYXBoaWNzQwogCiAjaWYg
RFJBV19GUkFNRV9SQVRFCiAgICAgaWYgKG1fZnJhbWVDb3VudFdoaWxlUGxheWluZyA+IDEwKSB7
Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5tX2ZyYW1lVmlldyA/IG1fcGxheWVy
LT5tX2ZyYW1lVmlldy0+ZnJhbWUoKSA6IE5VTEw7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6IE5V
TEw7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50
KCkgOiBOVUxMOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZG9jdW1lbnQgPyBk
b2N1bWVudC0+cmVuZGVyZXIoKSA6IE5VTEw7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZVRv
VXNlID0gcmVuZGVyZXIgPyByZW5kZXJlci0+c3R5bGUoKSA6IE5VTEw7CkBAIC00MjcsMTYgKzQ0
MSwzMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAjZW5kaWYK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nPiYgdHlwZXMpCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQog
ewotICAgIHVuc2lnbmVkIGNvdW50ID0gUVRNb3ZpZVdpbjo6Y291bnRTdXBwb3J0ZWRUeXBlcygp
OwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGxlbjsKLSAgICAgICAgUVRN
b3ZpZVdpbjo6Z2V0U3VwcG9ydGVkVHlwZShuLCBjaGFyYWN0ZXIsIGxlbik7Ci0gICAgICAgIGlm
IChsZW4pCi0gICAgICAgICAgICB0eXBlcy5hZGQoU3RyaW5nKGNoYXJhY3RlciwgbGVuKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIHR5cGVDYWNoZSwgKCkpOwor
ICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmICgh
dHlwZUxpc3RJbml0aWFsaXplZCkgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFFUTW92aWVX
aW46OmNvdW50U3VwcG9ydGVkVHlwZXMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IGNvdW50OyBuKyspIHsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsZW47CisgICAgICAgICAgICBRVE1vdmllV2luOjpnZXRTdXBw
b3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVuKTsKKyAgICAgICAgICAgIGlmIChsZW4pCisgICAg
ICAgICAgICAgICAgdHlwZUNhY2hlLmFkZChTdHJpbmcoY2hhcmFjdGVyLCBsZW4pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KKyAgICAK
KyAgICByZXR1cm4gdHlwZUNhY2hlOworfSAKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6Omdl
dFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCit7CisgICAgdHlwZXMgPSBt
aW1lVHlwZUNhY2hlKCk7CiB9IAogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFpbGFi
bGUoKQpAQCAtNDQ0LDYgKzQ3MiwxMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6aXNBdmFp
bGFibGUoKQogICAgIHJldHVybiBRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCk7CiB9
CiAKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlOjpzdXBwb3J0
c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sKKyAgICAv
LyBvbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0
ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFUIGlmIGl0IHN1cHBvcnRzIGFu
CisgICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlwZQorICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCku
Y29udGFpbnModHlwZSkgPyAoIWNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVT
dXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDogTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW92aWVFbmRlZChRVE1v
dmllV2luKiBtb3ZpZSkKIHsKICAgICBBU1NFUlQobV9xdE1vdmllLmdldCgpID09IG1vdmllKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCShyZXZpc2lvbiA0MDg1NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklE
RU8pCiAKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8UVRNb3ZpZVdpbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ0LDkgKzQ0LDEwIEBAIGNsYXNzIEludFNpemU7CiBj
bGFzcyBJbnRSZWN0OwogY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGUg
OiBRVE1vdmllV2luQ2xpZW50LCBOb25jb3B5YWJsZSB7CitjbGFzcyBNZWRpYVBsYXllclByaXZh
dGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgUVRNb3ZpZVdp
bkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlKE1lZGlhUGxheWVyKik7
CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJh
cik7CisKICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlKCk7CiAgICAgCiAgICAgSW50U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0OwpAQCAtODgsMTAgKzg5LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAKLSAgICBz
dGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCiBwcml2YXRlOgorICAgIE1lZGlhUGxheWVy
UHJpdmF0ZShNZWRpYVBsYXllciopOworCiAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKICAgICB2
b2lkIGRvU2VlaygpOwogICAgIHZvaWQgY2FuY2VsU2VlaygpOwpAQCAtMTA0LDcgKzEwNSwxMyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3Zp
ZVdpbiopOwogICAgIHZpcnR1YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWVXaW4qKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllV2luKik7Ci0g
ICAgICAKKworICAgIC8vIGVuZ2luZSBzdXBwb3J0CisgICAgc3RhdGljIE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQbGF5ZXIqKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVz
KTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7CisgICAgc3RhdGljIGJvb2wg
aXNBdmFpbGFibGUoKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBPd25QdHI8
UVRNb3ZpZVdpbj4gbV9xdE1vdmllOwogICAgIGZsb2F0IG1fc2Vla1RvOwo=
</data>
<flag name="review"
          id="13363"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>