<?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>30457</bug_id>
          
          <creation_ts>2009-10-16 14:07:39 -0700</creation_ts>
          <short_desc>Allow image requests started from unload handlers to outlive the page</short_desc>
          <delta_ts>2010-08-24 11:11:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          <dependson>32529</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Abd-El-Malek">jam</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>155223</commentid>
    <comment_count>0</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2009-10-16 14:07:39 -0700</bug_when>
    <thetext>Creating a bug from the discussion on webkit-dev.  There&apos;s consensus for allowing images loaded in unload handlers to outlive the page, in order to maintain compatibility with IE.  This hack is used by a bunch of ad networks for tracking purposes.  Since the image doesn&apos;t currently outlive the page, they resort to simulating sleep() in JavaScript by busy looping.  By letting the image load outlive the page, the goal is that web developers won&apos;t resort to such hacks which hurt the user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155261</commentid>
    <comment_count>1</comment_count>
    <who name="John Abd-El-Malek">jam</who>
    <bug_when>2009-10-16 14:52:57 -0700</bug_when>
    <thetext>The webkit-dev thread: https://lists.webkit.org/pipermail/webkit-dev/2009-September/thread.html#9925</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168848</commentid>
    <comment_count>2</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-04 11:08:37 -0800</bug_when>
    <thetext>I&apos;ve been working on this, I hope to have a patch ready for review by end of day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170175</commentid>
    <comment_count>3</comment_count>
      <attachid>44561</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-09 14:29:46 -0800</bug_when>
    <thetext>Created attachment 44561
patch

Patch, with thanks to jam@chromium.org for starting it and giving me something to work with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170177</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-09 14:31:58 -0800</bug_when>
    <thetext>Attachment 44561 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/loader/loader.cpp:571:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170190</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-09 14:41:39 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 44561 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebCore/loader/loader.cpp:571:  Boolean expressions that span multiple lines
&gt; should have their operators on the left side of the line instead of the right
&gt; side.  [whitespace/operators] [4]
&gt; Total errors found: 1

Fixed, but I won&apos;t bother uploading a new patch for a single line style change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170810</commentid>
    <comment_count>6</comment_count>
      <attachid>44561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 10:13:55 -0800</bug_when>
    <thetext>Comment on attachment 44561
patch

Thanks for taking this on. This is looking good!

I have one or two significant design comments and lots of minor naming and structure comments.

&gt; +    , m_beforeUnloadEventBeingDispatched(false)

Best practice for boolean data and function members is to name them with an adjective phrase like this &quot;frame loader &lt;xxx&gt;&quot;.

So following that, the name would be m_isDispatchingBeforeUnloadEvent.

&gt; +    m_beforeUnloadEventBeingDispatched = true;
&gt;      bool canContinue = shouldContinue &amp;&amp; (!isLoadingMainFrame() || m_frame-&gt;shouldClose());
&gt; +    m_beforeUnloadEventBeingDispatched = false;

Can this ever re-enter? Maybe we should assert !m_beforeUnloadEventBeingDispatched to catch it if it ever is in a debug build.

&gt; +        void setOutlivePage(bool outlivePage) { m_outlivePage = outlivePage; }
&gt; +        bool outlivePage() const { return m_outlivePage; }

Best practice for getter functions is to make sure their names are not something that sound like a verb phrase. So these should be:

    setShouldOutlivePage
    shouldOutlivePage
    m_shouldOutlivePage
    m_shouldSkipSecurityCheck

If the thing is named like a verb, then the getter function sounds like a function that will take action.

&gt; +    , m_createdDuringUnload(isDispatchingUnloadEvent)

Should be m_wasCreatedDuringUnload and wasCreatedDuringUnload for reasons similar to those mentioned above.

&gt; +    , m_frameForOutlivingRequests(0)

No need for this line of code. RefPtr starts out 0 without an explicit initializer.

&gt; -    CachedImage(const String&amp; url);
&gt; +    CachedImage(const String&amp; url, bool isDispatchingUnloadEvent);

I don&apos;t think this design is quite right. You might already have a CachedImage because some other page tried to load the same image. The CachedImage itself is shared among multiple requesters of the image. So it doesn&apos;t make logical sense to have that shared CachedImage object have a boolean that depends on the timing of the first requestImage call.

If we do need to keep the boolean, I think &quot;wasFirstRequestedDuringUnload&quot; is more precise than &quot;createdDuringUnload&quot; and draws attention to this curious rule in a way I think could be helpful in understanding behavior in the future.

I think the right way to do this is probably to look at the outstanding requests and answer a question about whether at least one or whether all are last-minute requests rather than storing a boolean in the CachedImage.

&gt; -PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, bool skipCanLoadCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff)
&gt; +PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, bool skipSecurityCheck, bool outlivePage, bool sendResourceLoadCallbacks, bool shouldContentSniff)

Name should be &quot;shouldOutlivePage&quot;.

&gt; +    void incrementOutlivePageRequestCount();
&gt; +    void decrementOutlivePageRequestCount();
&gt; +    int outlivePageRequestCount() const { return m_outlivePageRequestCount; }
&gt; +    Frame* frameForOutlivingRequests() { return m_frameForOutlivingRequests.get(); }

&gt; +    int m_outlivePageRequestCount;
&gt; +    RefPtr&lt;Frame&gt; m_frameForOutlivingRequests;

These names are awkward. We should try to do better. A good technique is to write out an English sentence explaining what a function does or data is, and then extract words from the sentence and use them in that order. You can&apos;t make the words &quot;increment outlive page request count&quot; into a sentence, because &quot;outlive page request&quot; doesn&apos;t work well. And I think we could find a name that doesn&apos;t require that wording.

Maybe we can come up with a term for these requests that is clearer than &quot;outliving requests&quot; and use that term in a lot more of this code. What&apos;s a term that in plain English would sound like this concept? Maybe something crazy like &quot;last gasp requests&quot;? That&apos;s not so good, but I think it&apos;s better than &quot;outliving requests&quot;. And I think it&apos;s critical that we call them the same thing in the various functions. Here we call them &quot;outliving requests&quot; and &quot;outlive page requests&quot; side by side -- we should choose one term or the other.

I&apos;m also concerned that the increment/decrement API here makes it easy to get off by one and leak. The code that manages the count needs to be extra clear.

&gt; -        RefPtr&lt;SubresourceLoader&gt; loader = SubresourceLoader::create(docLoader-&gt;doc()-&gt;frame(),
&gt; -            this, resourceRequest, request-&gt;shouldSkipCanLoadCheck(), request-&gt;sendResourceLoadCallbacks());
&gt; +        bool outlivePage = request-&gt;outlivePage();
&gt; +        Frame* frame = outlivePage ? docLoader-&gt;frameForOutlivingRequests() : docLoader-&gt;doc()-&gt;frame();
&gt; +        RefPtr&lt;SubresourceLoader&gt; loader = SubresourceLoader::create(frame,
&gt; +            this, resourceRequest, request-&gt;skipSecurityCheck(), outlivePage, request-&gt;sendResourceLoadCallbacks());

I think this would be slightly better if factored differently. The function in DocLoader would take a Request* argument and return the frame to use for the load. The policy that it&apos;s the &quot;outliving requests&quot; that use a different frame would be in DocLoader.

&gt; +            if (outlivePage)
&gt; +                docLoader-&gt;decrementOutlivePageRequestCount();

We have a minor design problem here. This Loader function is one of five different places that call the decrementOutlivePageRequestCount function. It&apos;s quite difficult to read the Loader code and spot whether there are any mismatches between increment and decrement. We should look to see if we can change the structure so that it&apos;s tighter and a little more clear that the increments and decrements will always be balanced.

Maybe the best way to do it would be to pass the Request* to increment/decrementRequestCount instead of having a separate increment/decrement for requests that will outlive the page.

&gt; +            newImage = new CachedImage(sourceURI(attr), document-&gt;docLoader()-&gt;frame()-&gt;loader()-&gt;isDispatchingUnloadEvent());

Can any of the items in this expression be zero? For example, can the frame be zero?

&gt; -        bool skipCanLoadCheck = false;
&gt; -        loadRequest(request, skipCanLoadCheck);
&gt; +        bool skipSecurityCheck = false;
&gt; +        loadRequest(request, skipSecurityCheck);

Our best practice for this is now to use an enum rather than a boolean. This would avoid the curious local variable that is declared simply to give a new name to &quot;false&quot;. Since you are changing all these call sites it might be nice to move from a boolean to an enum. In fact, the rename from skipCanLoadCheck to skipSecurityCheck really ought to happen in a separate patch, first. That would help this work get done more quickly, I think. Smaller patches are better.

&gt; +    bool m_beforeUnloadEventBeingDispatched;
&gt;      bool m_unloadEventBeingDispatched;

Your new boolean should be named m_isDipatchingBeforeUnloadEvent. And at some point the old boolean should be renamed m_isDispatchingUnloadEvent.

Given all the different code paths, I think we need more test cases. For example, I could probably remove some of the calls to decrementOutlivePageRequestCount without making the test fail. We should strive to have tests that would fail if we do the code wrong.

review- because I&apos;d like to see the CachedImage boolean reconsidered and like to see quite a few more tests if possible

It would also be good to consider my other comments and suggestions, especially the one about doing the rename in a separate earlier patch, and the increment/decrement tightening and simplification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170822</commentid>
    <comment_count>7</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-11 10:29:58 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 44561 [details])
&gt; Thanks for taking this on. This is looking good!
&gt; 
&gt; I have one or two significant design comments and lots of minor naming and
&gt; structure comments.
&gt; 
&gt; &gt; +    , m_beforeUnloadEventBeingDispatched(false)
&gt; 
&gt; Best practice for boolean data and function members is to name them with an
&gt; adjective phrase like this &quot;frame loader &lt;xxx&gt;&quot;.
&gt; 
&gt; So following that, the name would be m_isDispatchingBeforeUnloadEvent.
&gt; 
&gt; &gt; +    m_beforeUnloadEventBeingDispatched = true;
&gt; &gt;      bool canContinue = shouldContinue &amp;&amp; (!isLoadingMainFrame() || m_frame-&gt;shouldClose());
&gt; &gt; +    m_beforeUnloadEventBeingDispatched = false;
&gt; 
&gt; Can this ever re-enter? Maybe we should assert
&gt; !m_beforeUnloadEventBeingDispatched to catch it if it ever is in a debug build.
&gt; 
&gt; &gt; +        void setOutlivePage(bool outlivePage) { m_outlivePage = outlivePage; }
&gt; &gt; +        bool outlivePage() const { return m_outlivePage; }
&gt; 
&gt; Best practice for getter functions is to make sure their names are not
&gt; something that sound like a verb phrase. So these should be:
&gt; 
&gt;     setShouldOutlivePage
&gt;     shouldOutlivePage
&gt;     m_shouldOutlivePage
&gt;     m_shouldSkipSecurityCheck
&gt; 
&gt; If the thing is named like a verb, then the getter function sounds like a
&gt; function that will take action.
&gt; 
&gt; &gt; +    , m_createdDuringUnload(isDispatchingUnloadEvent)
&gt; 
&gt; Should be m_wasCreatedDuringUnload and wasCreatedDuringUnload for reasons
&gt; similar to those mentioned above.
&gt; 
&gt; &gt; +    , m_frameForOutlivingRequests(0)
&gt; 
&gt; No need for this line of code. RefPtr starts out 0 without an explicit
&gt; initializer.
&gt; 
&gt; &gt; -    CachedImage(const String&amp; url);
&gt; &gt; +    CachedImage(const String&amp; url, bool isDispatchingUnloadEvent);
&gt; 
&gt; I don&apos;t think this design is quite right. You might already have a CachedImage
&gt; because some other page tried to load the same image. The CachedImage itself is
&gt; shared among multiple requesters of the image. So it doesn&apos;t make logical sense
&gt; to have that shared CachedImage object have a boolean that depends on the
&gt; timing of the first requestImage call.
&gt; 
&gt; If we do need to keep the boolean, I think &quot;wasFirstRequestedDuringUnload&quot; is
&gt; more precise than &quot;createdDuringUnload&quot; and draws attention to this curious
&gt; rule in a way I think could be helpful in understanding behavior in the future.
&gt; 
&gt; I think the right way to do this is probably to look at the outstanding
&gt; requests and answer a question about whether at least one or whether all are
&gt; last-minute requests rather than storing a boolean in the CachedImage.
&gt; 
&gt; &gt; -PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, bool skipCanLoadCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff)
&gt; &gt; +PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, bool skipSecurityCheck, bool outlivePage, bool sendResourceLoadCallbacks, bool shouldContentSniff)
&gt; 
&gt; Name should be &quot;shouldOutlivePage&quot;.
&gt; 
&gt; &gt; +    void incrementOutlivePageRequestCount();
&gt; &gt; +    void decrementOutlivePageRequestCount();
&gt; &gt; +    int outlivePageRequestCount() const { return m_outlivePageRequestCount; }
&gt; &gt; +    Frame* frameForOutlivingRequests() { return m_frameForOutlivingRequests.get(); }
&gt; 
&gt; &gt; +    int m_outlivePageRequestCount;
&gt; &gt; +    RefPtr&lt;Frame&gt; m_frameForOutlivingRequests;
&gt; 
&gt; These names are awkward. We should try to do better. A good technique is to
&gt; write out an English sentence explaining what a function does or data is, and
&gt; then extract words from the sentence and use them in that order. You can&apos;t make
&gt; the words &quot;increment outlive page request count&quot; into a sentence, because
&gt; &quot;outlive page request&quot; doesn&apos;t work well. And I think we could find a name that
&gt; doesn&apos;t require that wording.
&gt; 
&gt; Maybe we can come up with a term for these requests that is clearer than
&gt; &quot;outliving requests&quot; and use that term in a lot more of this code. What&apos;s a
&gt; term that in plain English would sound like this concept? Maybe something crazy
&gt; like &quot;last gasp requests&quot;? That&apos;s not so good, but I think it&apos;s better than
&gt; &quot;outliving requests&quot;. And I think it&apos;s critical that we call them the same
&gt; thing in the various functions. Here we call them &quot;outliving requests&quot; and
&gt; &quot;outlive page requests&quot; side by side -- we should choose one term or the other.
&gt; 
&gt; I&apos;m also concerned that the increment/decrement API here makes it easy to get
&gt; off by one and leak. The code that manages the count needs to be extra clear.
&gt; 
&gt; &gt; -        RefPtr&lt;SubresourceLoader&gt; loader = SubresourceLoader::create(docLoader-&gt;doc()-&gt;frame(),
&gt; &gt; -            this, resourceRequest, request-&gt;shouldSkipCanLoadCheck(), request-&gt;sendResourceLoadCallbacks());
&gt; &gt; +        bool outlivePage = request-&gt;outlivePage();
&gt; &gt; +        Frame* frame = outlivePage ? docLoader-&gt;frameForOutlivingRequests() : docLoader-&gt;doc()-&gt;frame();
&gt; &gt; +        RefPtr&lt;SubresourceLoader&gt; loader = SubresourceLoader::create(frame,
&gt; &gt; +            this, resourceRequest, request-&gt;skipSecurityCheck(), outlivePage, request-&gt;sendResourceLoadCallbacks());
&gt; 
&gt; I think this would be slightly better if factored differently. The function in
&gt; DocLoader would take a Request* argument and return the frame to use for the
&gt; load. The policy that it&apos;s the &quot;outliving requests&quot; that use a different frame
&gt; would be in DocLoader.
&gt; 
&gt; &gt; +            if (outlivePage)
&gt; &gt; +                docLoader-&gt;decrementOutlivePageRequestCount();
&gt; 
&gt; We have a minor design problem here. This Loader function is one of five
&gt; different places that call the decrementOutlivePageRequestCount function. It&apos;s
&gt; quite difficult to read the Loader code and spot whether there are any
&gt; mismatches between increment and decrement. We should look to see if we can
&gt; change the structure so that it&apos;s tighter and a little more clear that the
&gt; increments and decrements will always be balanced.
&gt; 
&gt; Maybe the best way to do it would be to pass the Request* to
&gt; increment/decrementRequestCount instead of having a separate
&gt; increment/decrement for requests that will outlive the page.
&gt; 
&gt; &gt; +            newImage = new CachedImage(sourceURI(attr), document-&gt;docLoader()-&gt;frame()-&gt;loader()-&gt;isDispatchingUnloadEvent());
&gt; 
&gt; Can any of the items in this expression be zero? For example, can the frame be
&gt; zero?
&gt; 
&gt; &gt; -        bool skipCanLoadCheck = false;
&gt; &gt; -        loadRequest(request, skipCanLoadCheck);
&gt; &gt; +        bool skipSecurityCheck = false;
&gt; &gt; +        loadRequest(request, skipSecurityCheck);
&gt; 
&gt; Our best practice for this is now to use an enum rather than a boolean. This
&gt; would avoid the curious local variable that is declared simply to give a new
&gt; name to &quot;false&quot;. Since you are changing all these call sites it might be nice
&gt; to move from a boolean to an enum. In fact, the rename from skipCanLoadCheck to
&gt; skipSecurityCheck really ought to happen in a separate patch, first. That would
&gt; help this work get done more quickly, I think. Smaller patches are better.
&gt; 
&gt; &gt; +    bool m_beforeUnloadEventBeingDispatched;
&gt; &gt;      bool m_unloadEventBeingDispatched;
&gt; 
&gt; Your new boolean should be named m_isDipatchingBeforeUnloadEvent. And at some
&gt; point the old boolean should be renamed m_isDispatchingUnloadEvent.
&gt; 
&gt; Given all the different code paths, I think we need more test cases. For
&gt; example, I could probably remove some of the calls to
&gt; decrementOutlivePageRequestCount without making the test fail. We should strive
&gt; to have tests that would fail if we do the code wrong.
&gt; 
&gt; review- because I&apos;d like to see the CachedImage boolean reconsidered and like
&gt; to see quite a few more tests if possible
&gt; 
&gt; It would also be good to consider my other comments and suggestions, especially
&gt; the one about doing the rename in a separate earlier patch, and the
&gt; increment/decrement tightening and simplification.

This all seems reasonable.

I had been wondering about the leak potential with the increment/decrement and considered something very similar to what you suggested, but I wasn&apos;t confident enough in my judgment to do it without outside confirmation :-)

I&apos;ll split the renaming out into a separate patch and get that on its way before I get another patch for this out again.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170825</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 10:35:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I think the right way to do this is probably to look at the outstanding
&gt; requests and answer a question about whether at least one or whether all are
&gt; last-minute requests rather than storing a boolean in the CachedImage.

Since that might not be efficient in cases where there are a huge number of requests for the same image (say a spacer image with tons of separate &lt;img&gt; elements on a page), another possibility is for CachedImage to keep a count of the total number of requests and of requests that are the last-minute type. I can&apos;t remember enough about the design here to know exactly what to suggest. Obviously having another count that can get out of whack is not so great either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170986</commentid>
    <comment_count>9</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-11 16:22:24 -0800</bug_when>
    <thetext>
&gt; I&apos;ll split the renaming out into a separate patch and get that on its way
&gt; before I get another patch for this out again.

Do you have a preference where I define the enum to take the place of skipSecurityCheck?  I&apos;m not seeing an obvious place that won&apos;t require adding in new #includes in several places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170987</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-11 16:25:16 -0800</bug_when>
    <thetext>&gt; Do you have a preference where I define the enum to take the place of
&gt; skipSecurityCheck?  I&apos;m not seeing an obvious place that won&apos;t require adding
&gt; in new #includes in several places.

If you can&apos;t find an existing header to put it in, I&apos;d put it in one of the &quot;types-only&quot; headers, like FrameLoaderTypes.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172413</commentid>
    <comment_count>11</comment_count>
      <attachid>44996</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-16 11:04:13 -0800</bug_when>
    <thetext>Created attachment 44996
Attempt #2

I believe I either addressed or obsoleted all of your code concerns.

I renamed m_unloadEventBeingDispatched to m_isDispatchingUnloadEvent in this patch, but I can break that into a separate patch too if you like

Finally, I didn&apos;t add any new tests yet.  I wouldn&apos;t be surprised if they&apos;re still needed, but since this patch is much less spread out than the first attempt, I figured I&apos;d ask a second opinion before actually going to the trouble of writing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172414</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 11:05:31 -0800</bug_when>
    <thetext>Attachment 44996 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/loader/DocLoader.cpp:44:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172565</commentid>
    <comment_count>13</comment_count>
      <attachid>44996</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-16 16:20:46 -0800</bug_when>
    <thetext>Comment on attachment 44996
Attempt #2

&gt; -                m_unloadEventBeingDispatched = true;
&gt; +                m_isDispatchingUnloadEvent = true;

Maybe we should assert !m_isDispatchingUnloadEvent here?/

&gt; -                m_unloadEventBeingDispatched = false;
&gt; +                m_isDispatchingUnloadEvent = false;

Maybe we should assert !m_isDispatchingUnloadEvent here.

&gt; +    m_isDispatchingBeforeUnloadEvent = false;

Maybe we should assert ! m_isDispatchingBeforeUnloadEvent here.

&gt; -    m_unloadEventBeingDispatched = true;
&gt; +    m_isDispatchingUnloadEvent = true;

Likewise.

&gt; -    m_unloadEventBeingDispatched = false;
&gt; +    m_isDispatchingUnloadEvent = false;

And again.

&gt; -void DocLoader::incrementRequestCount()
&gt; +void DocLoader::addRequest(Request* request)
&gt;  {
&gt;      ++m_requestCount;
&gt; +    if (request-&gt;shouldOutlivePage()) {
&gt; +        if (!m_requestsThatOutlivePageCount++)
&gt; +            m_frameForRequestsThatOutlivePage = m_doc-&gt;frame();
&gt; +    }
&gt; +        
&gt;  }

Extra blank line there.

It seems kind of strange to choose the Frame based on the first request that should outlive the page. Is it really right for all those later requests for the same resource to also share that one frame? I think the code at least needs a comment to make it clear what the policy is and why that&apos;s OK.

&gt; +    int requestsThatOutlivePageCount() { return m_requestsThatOutlivePageCount; }

It&apos;s a little strange to expose this just so we can use it in an assertion. Maybe just expose the boolean condition instead? Or not have the assertion?

&gt; +    OutlivePagePolicy shouldOutlivePage = resource-&gt;isImage() &amp;&amp; docLoader &amp;&amp; docLoader-&gt;frame() 
&gt; +        &amp;&amp; docLoader-&gt;frame()-&gt;loader()-&gt;isDispatchingUnloadEvent()
&gt; +        ? OutlivePage : DoNotOutlivePage;

I think this should go in a paragraph of its own and have its own comment. The comment should explain why images have a different policy than other loads.

&gt; +    // If we&apos;re doing a load that can outlive the current page, we don&apos;t want this request to block navigating
&gt; +    // away from the current document.
&gt; +    if (request-&gt;shouldOutlivePage() == DoNotOutlivePage &amp;&amp; (priority &gt; Low || !url.protocolInHTTPFamily() || !hadRequests)) {

The comment is a good idea, but its worded backward from the code, and so a bit hard to read. If you really wanted code that matched that comment, then you&apos;d probably say:

    if (request-&gt;shouldOutlivePage() == DoNotOutlivePage)
        priority = Low;

&gt; +    bool isDispatchingUnloadEvent() const { return m_isDispatchingBeforeUnloadEvent || m_isDispatchingUnloadEvent; }

I think it&apos;s confusing to have a function member and a data member with the same name, but different meanings. I think the function needs to be renamed.

I&apos;m going to say review+ but I think you might decide to do a new patch based on at least one of my comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173293</commentid>
    <comment_count>14</comment_count>
      <attachid>45176</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-18 13:16:14 -0800</bug_when>
    <thetext>Created attachment 45176
Attempt #3

Added ASSERTs in FrameLoader, reworked comments, removed assert in loader::cancelRequests.

The frame for these types of requests is now stored in Request.  You made a good point, logically the frame should be decided each time a Request is created (if needed of course).  This, combined with the removal of the ASSERT in loader::cancelRequests, removes the need for any changes to DocLoader, so I reverted those changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173297</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-18 13:19:52 -0800</bug_when>
    <thetext>Attachment 45176 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/loader/Request.cpp:25:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173369</commentid>
    <comment_count>16</comment_count>
      <attachid>45176</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-18 16:03:17 -0800</bug_when>
    <thetext>Comment on attachment 45176
Attempt #3

&gt;  #include &quot;config.h&quot;
&gt; +#include &quot;DocLoader.h&quot;
&gt; +#include &quot;Frame.h&quot;
&gt;  #include &quot;Request.h&quot;
&gt;  
&gt;  #include &quot;CachedResource.h&quot;

The style-check script is correct. These new includes should be added after &quot;CachedResource.h&quot; rather than before &quot;Request.h&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173378</commentid>
    <comment_count>17</comment_count>
      <attachid>45176</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-18 16:10:07 -0800</bug_when>
    <thetext>Comment on attachment 45176
Attempt #3

&gt; -PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff)
&gt; +PassRefPtr&lt;SubresourceLoader&gt; SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest&amp; request, SecurityCheckPolicy securityCheck, OutlivePagePolicy outlivePage, bool sendResourceLoadCallbacks, bool shouldContentSniff)
&gt;  {
&gt;      if (!frame)
&gt;          return 0;
&gt;  
&gt;      FrameLoader* fl = frame-&gt;loader();
&gt; -    if (securityCheck == DoSecurityCheck &amp;&amp; (fl-&gt;state() == FrameStateProvisional || fl-&gt;activeDocumentLoader()-&gt;isStopping()))
&gt; +    if (outlivePage == DoNotOutlivePage &amp;&amp; (fl-&gt;state() == FrameStateProvisional || fl-&gt;activeDocumentLoader()-&gt;isStopping()))

Argument name here is not great. It&apos;s not an outlive, nor a page. I think outlivePagePolicy or shouldOutlivePage would be better, even though they are long. Same for securityCheck.

&gt; +    // If we are loading an image during an unlaod event, we want to allow the request to outlive the page

Typo here: &quot;unlaod&quot;.

&gt; +    // that we are leaving.  Some sites (most commonly ad networks) rely on image requests in beforeunload
&gt; +    // or unload event handlers to track time spent on the page.  This will allow them to do the tracking

We use one space after a period, not two.

&gt; +    , m_shouldOutlivePage(shouldOutlivePage)

I noticed that m_frameForRequestThatOutlivesPage and m_shouldOutlivePage always match.

Because of that, you could eliminate m_shouldOutlivePage, and instead have the shouldOutlivePage() function just check if m_frameForRequestThatOutlivesPage is 0 or not. I think it would be nice to save that data member and probably wouldn&apos;t hurt the clarity of the code.

m_frameForRequestThatOutlivesPage is not quite right, because it&apos;s used even when the request does not outlive the page. Maybe m_frameForRequestThatCanOutlivePage or m_frameForRequestThatShouldOutlivePage?

Maybe all the things named shouldOutlivePage should be renamed canOutlivePage.

review- just because of the header thing -- the code itself seems fine to me, but that&apos;s too blatant a (minor) style violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173400</commentid>
    <comment_count>18</comment_count>
      <attachid>45206</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-18 16:32:02 -0800</bug_when>
    <thetext>Created attachment 45206
Attempt #4

Yeah, sorry about that.  I&apos;m still trying to get in the habit of run check-webkit-style before uploading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173402</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-18 16:33:28 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45206 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173445</commentid>
    <comment_count>20</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-18 18:31:14 -0800</bug_when>
    <thetext>That&apos;s hot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173988</commentid>
    <comment_count>21</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 09:40:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/52446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183910</commentid>
    <comment_count>22</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-22 18:07:39 -0800</bug_when>
    <thetext>Rolled out in http://trac.webkit.org/changeset/52456.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184293</commentid>
    <comment_count>23</comment_count>
      <attachid>47350</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-25 09:25:36 -0800</bug_when>
    <thetext>Created attachment 47350
Patch without the crash

The additions to http://trac.webkit.org/changeset/52446 can be summarized as such:
Request.h/cpp : In addition to the Frame, maintain RefPtrs to the Document and
DocumentLoader in the case of a request that can outlive the page.
DocumentLoader.cpp / ResourceLoader.cpp : Allow for the possibility that
Frame::page() and Frame::settings() may be null (as can now be the case if the
unload event is triggered by closing rather than navigating).
FrameLoader.h/cpp : Keep a count of the number of requests that may outlive the
page that refer to this FrameLoader, and don&apos;t allow m_documentLoader to be
nulled if that count is non-zero.

I&apos;m not sure that this is a good solution, but it does appear to stop the
crashing.  It seems to me, though, that I&apos;ve allowed the possibility that, when
an OutlivePage Request is executed, FrameLoader::m_documentLoader will not be
the DocumentLoader that originally associated with the Request.  Is that a Bad
Thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184305</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-25 09:55:35 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; I&apos;m not sure that this is a good solution, but it does appear to stop the
&gt; crashing.  It seems to me, though, that I&apos;ve allowed the possibility that, when
&gt; an OutlivePage Request is executed, FrameLoader::m_documentLoader will not be
&gt; the DocumentLoader that originally associated with the Request.  Is that a Bad
&gt; Thing?

There’s no simple answer to that question. You’ll need to look at the specific state the document loader contains and figure out what specifically could go wrong. For example, there is the m_responses vector which is used for loading a page from the page cache. So there could be problems relating to “go back”. There could also be problems when a page like this is loaded from a web archive because of the m_pendingSubstituteResources map. Or problems having to do with the application cache. I’m just looking through the data members of the document loader class to come up with these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184716</commentid>
    <comment_count>25</comment_count>
      <attachid>44996</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:03:31 -0800</bug_when>
    <thetext>Comment on attachment 44996
Attempt #2

Clearing darin&apos;s r+ from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184717</commentid>
    <comment_count>26</comment_count>
      <attachid>45206</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:03:47 -0800</bug_when>
    <thetext>Comment on attachment 45206
Attempt #4

Clearing darin&apos;s r+ from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186475</commentid>
    <comment_count>27</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-01 10:31:48 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; I&apos;m not sure that this is a good solution, but it does appear to stop the
&gt; &gt; crashing.  It seems to me, though, that I&apos;ve allowed the possibility that, when
&gt; &gt; an OutlivePage Request is executed, FrameLoader::m_documentLoader will not be
&gt; &gt; the DocumentLoader that originally associated with the Request.  Is that a Bad
&gt; &gt; Thing?
&gt; 
&gt; There’s no simple answer to that question. You’ll need to look at the specific
&gt; state the document loader contains and figure out what specifically could go
&gt; wrong. For example, there is the m_responses vector which is used for loading a
&gt; page from the page cache. So there could be problems relating to “go back”.
&gt; There could also be problems when a page like this is loaded from a web archive
&gt; because of the m_pendingSubstituteResources map. Or problems having to do with
&gt; the application cache. I’m just looking through the data members of the
&gt; document loader class to come up with these.

Sorry for my silence.  I&apos;ve gotten sucked into other things, but I&apos;m hoping to return to this patch in the next day or two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191229</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-17 14:43:58 -0800</bug_when>
    <thetext>I&apos;m not sure what the current state of this patch should be.  From the comments above it sounds like we should r- this patch until Nate and Darin agree this is non-harmful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191232</commentid>
    <comment_count>29</comment_count>
      <attachid>47350</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-02-17 14:46:12 -0800</bug_when>
    <thetext>Comment on attachment 47350
Patch without the crash

Clearing flags.  I&apos;ve once again gotten side tracked with other things.  If this bug becomes a higher priority or urgent, let me know.  Otherwise, it may be a bit before I get back to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217353</commentid>
    <comment_count>30</comment_count>
      <attachid>54346</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-04-26 16:40:38 -0700</bug_when>
    <thetext>Created attachment 54346
Attempt #6 (or thereabouts)

Sorry for the months-long delay.

The main differences between this and the previous version are the creation of dummy objects, rather than keeping the old objects alive.  When a new Request is constructed to outlive its page, it holds a RefPtr to the relevant Frame, but it creates a dummy Document and DocLoader to use for the load.  If we try to null the main document loader of a FrameLoader that has a pending outliving page request, we replace the current document loader with a dummy instead of a null.

The layout tests should be identical to the previous version. I&apos;ve tested every example I knew of that triggered the crash in the original commit and it appears to be resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220328</commentid>
    <comment_count>31</comment_count>
      <attachid>54968</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-03 15:29:38 -0700</bug_when>
    <thetext>Created attachment 54968
Attempt #7 (clean up weird layering)

In previous iterations, I was doing the check for whether we were loading an image from an unload event handler in Loader::load().  This version exposes an OutlivePagePolicy parameter on this function, so that the image-specific logic can be in CachedImage::load().

This also makes things more generic, in particular giving us the option of adding other loads that occur asynchronously through navigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226843</commentid>
    <comment_count>32</comment_count>
      <attachid>56254</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-05-17 11:38:54 -0700</bug_when>
    <thetext>Created attachment 56254
Merge in recent changes to FrameLoader

Resolved conflicts with http://trac.webkit.org/changeset/59374.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226940</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-17 15:29:43 -0700</bug_when>
    <thetext>See also: bug 39209.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238168</commentid>
    <comment_count>34</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-06-14 17:45:43 -0700</bug_when>
    <thetext>When I started to look at this, I realized that per function comments in the ChangeLog would make this a lot more reviewable (for me at least).

For example, a change log entry for FrameLoader::checkLoadComplete would tell me why &quot;ASSERT(m_client-&gt;hasWebView());&quot; was removed so I don&apos;t have to figure it out again.

Please consider adding these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238532</commentid>
    <comment_count>35</comment_count>
      <attachid>58815</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-15 13:54:03 -0700</bug_when>
    <thetext>Created attachment 58815
+ more thorough ChangeLog

I think I&apos;ve got everything non-trivial explained in the ChangeLog now.  Hope that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254503</commentid>
    <comment_count>36</comment_count>
      <attachid>58815</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-21 13:52:59 -0700</bug_when>
    <thetext>Comment on attachment 58815
+ more thorough ChangeLog

I&apos;m going to remove the review? flag on this patch.  I have some ideas on how to rewrite this to minimize side effects, so I don&apos;t think there&apos;s any sense in leaving this draft up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254930</commentid>
    <comment_count>37</comment_count>
      <attachid>62328</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-22 12:59:02 -0700</bug_when>
    <thetext>Created attachment 62328
Rewrite at ResourceHandleClient level

This patch uses a new class, PingLoader, to handle this family of loads.  PingLoader subclasses ResourceHandleClient, so it doesn&apos;t need to keep any external references (except to the ResourceHandle it created) and won&apos;t be cancelable when a FrameLoader is stopped.  The PingLoader triggers a load by creating a ResourceHandle and waits for a callback indicating that a response was received or that the load failed.  As soon as such a callback is received, the load is cancelled and the PingLoader deletes itself.

Testing this patch is a bit tricky.  Because we aren&apos;t making use of ResourceLoader, these loads are invisible to layoutTestController.dumpResourceLoadCallbacks().  The attached test creates an image load in the unload handler, and the resource loaded as an image sets a cookie.  We then wait for the document.cookie to visible to be set and pass when it does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254973</commentid>
    <comment_count>38</comment_count>
      <attachid>62328</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-22 14:01:41 -0700</bug_when>
    <thetext>Comment on attachment 62328
Rewrite at ResourceHandleClient level

The C++ code looks good to me, but I don&apos;t know the resource loading pipeline well enough to r+ this.

&gt; +++ LayoutTests/http/tests/navigation/image-load-in-unload-handler.html	(revision 0)
&gt; +function checkCookie() {
&gt; +    if (document.cookie) {
&gt; +        log(&quot;PASS: Cookie found.&quot;);
&gt; +        if (window.layoutTestController)
&gt; +            layoutTestController.notifyDone();
&gt; +    } else
&gt; +        setTimeout(checkCookie, 50);
&gt; +}

Instead of checking for a cookie, can we listen to onload/onerror on the image? setTimeouts often lead to flaky tests and should be avoided whenever possible.

Does this mean that we won&apos;t navigate away from a page until the image has loaded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254975</commentid>
    <comment_count>39</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-22 14:12:38 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 62328 [details])
&gt; The C++ code looks good to me, but I don&apos;t know the resource loading pipeline well enough to r+ this.
&gt; 
&gt; &gt; +++ LayoutTests/http/tests/navigation/image-load-in-unload-handler.html	(revision 0)
&gt; &gt; +function checkCookie() {
&gt; &gt; +    if (document.cookie) {
&gt; &gt; +        log(&quot;PASS: Cookie found.&quot;);
&gt; &gt; +        if (window.layoutTestController)
&gt; &gt; +            layoutTestController.notifyDone();
&gt; &gt; +    } else
&gt; &gt; +        setTimeout(checkCookie, 50);
&gt; &gt; +}
&gt; 
&gt; Instead of checking for a cookie, can we listen to onload/onerror on the image? setTimeouts often lead to flaky tests and should be avoided whenever possible.

I&apos;ll look into that, sure.

&gt; 
&gt; Does this mean that we won&apos;t navigate away from a page until the image has loaded?

This should mean that there is absolutely no way for an image to block a navigation, since the Frame will not have any reference to the request (and therefore no way to cancel or block on it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256316</commentid>
    <comment_count>40</comment_count>
      <attachid>62328</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-26 16:06:56 -0700</bug_when>
    <thetext>Comment on attachment 62328
Rewrite at ResourceHandleClient level

Clearing review? flag until I get the layout test sorted out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266338</commentid>
    <comment_count>41</comment_count>
      <attachid>64760</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-08-18 13:29:16 -0700</bug_when>
    <thetext>Created attachment 64760
ResourceHandleClient-level solution + rewritten layout test

Thanks to David Levin for suggesting how to properly test this behavior.

The layout test now uses php scripts saving and checking a timestamp in a file to determine whether the load in the unload handler was actually sent to the server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267366</commentid>
    <comment_count>42</comment_count>
      <attachid>64760</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-20 13:10:11 -0700</bug_when>
    <thetext>Comment on attachment 64760
ResourceHandleClient-level solution + rewritten layout test

I like the approach as it is very simple. My biggest concern is if the ResourceHandle may have an unfortunate amount of knowledge about the frame (see below).


WebCore/loader/DocLoader.cpp:126
 +          if (f-&gt;loader()-&gt;pageDismissalEventBeingDispatched()) {
Shouldn&apos;t this be after the allowImages check just below this?

It seems odd that the user would disable this and then we have a loophole here.

WebCore/loader/PingLoader.cpp:41
 +  void PingLoader::loadOutlivingImage(Frame* frame, const String&amp; url)
How about just naming this loadImage?
(I can&apos;t parse loadOutlivingImage without already knowing what it does already.)


WebCore/loader/PingLoader.cpp:42
 +  {
Shouldn&apos;t we check to see if the url is valid? (after completing it).


WebCore/loader/PingLoader.cpp:43
 +      if (SecurityOrigin::restrictAccessToLocal() &amp;&amp; !SecurityOrigin::canLoad(KURL(ParsedURLString, url), String(), frame-&gt;document())) {
Shouldn&apos;t the canLoad call be done using the &quot;completeURL&quot;?


WebCore/loader/PingLoader.cpp:48
 +      ResourceRequest r(frame-&gt;document()-&gt;completeURL(url));
Please avoid using abbreviates for variables &quot;r&quot;.

WebCore/loader/PingLoader.cpp:54
 +      new PingLoader(frame, r);
This needs a PassOwnPtr and leakPtr around it.


WebCore/loader/PingLoader.cpp:59
 +      m_handle = ResourceHandle::create(request, this, frame, false, false);
How does this live past the lifetime of the frame? Does any platform store information from the frame that will live on past this request? And if so, how does that work?

For example WebCore/platform/network/qt/ResourceHandleQt.cpp, does this
    getInternal()-&gt;m_frame = static_cast&lt;FrameLoaderClientQt*&gt;(frame-&gt;loader()-&gt;client())-&gt;webFrame();

WebCore/loader/DocLoader.cpp:127
 +              PingLoader::loadOutlivingImage(f, url);
It looks like this also skips checks that would normally be done for image loading in DocLoader::canRequest.

WebCore/loader/PingLoader.h:47
 +  // and don&apos;t depend on their Frame staying alive (i.e., auditing pingbacks).
Consider:
  
Triggers asynchronous loads independent of Frame staying alive (i.e., auditing pingbacks).


WebCore/loader/PingLoader.h:58
 +      ~PingLoader() { m_handle-&gt;cancel(); }
Please move the destructor to the cpp file, and then get rid of the &quot;#include &quot;ResourceHandle.h&quot;&quot; from this header file.


LayoutTests/http/tests/navigation/resources/check-ping.php:7
 +      // This refresh header is teh sadness, but if the file doesn&apos;t
typo:teh Also, I understand what you are saying but it seems like a colloquialism and I&apos;m not sure how well it will work for non-native speakers.

Perhaps, you might want to consider something more standard like &quot;Unfortunately, we have to do a refresh because...&quot;


LayoutTests/http/tests/navigation/resources/check-ping.php:19
 +  $result = ($expectedPingValue == $actualPingValue) ? &quot;PASS&quot; : &quot;FAIL&quot;;
Should this be part of the &quot;refresh&quot; sequence? Just because the file exists does that mean that its contents have been flushed to disk? (and the unlink done after this step).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267398</commentid>
    <comment_count>43</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-08-20 14:00:05 -0700</bug_when>
    <thetext>Ok.

(In reply to comment #42)
&gt; (From update of attachment 64760 [details])
&gt; WebCore/loader/PingLoader.cpp:59
&gt;  +      m_handle = ResourceHandle::create(request, this, frame, false, false);
&gt; How does this live past the lifetime of the frame? Does any platform store information from the frame that will live on past this request? And if so, how does that work?
&gt; 
&gt; For example WebCore/platform/network/qt/ResourceHandleQt.cpp, does this
&gt;     getInternal()-&gt;m_frame = static_cast&lt;FrameLoaderClientQt*&gt;(frame-&gt;loader()-&gt;client())-&gt;webFrame();

I need to look at this in depth to figure out whether this is a problem.  Most platforms use the frame during creation, then throw it away, but it&apos;s possible this will cause a problem on other platforms.

&gt; LayoutTests/http/tests/navigation/resources/check-ping.php:7
&gt;  +      // This refresh header is teh sadness, but if the file doesn&apos;t
&gt; typo:teh Also, I understand what you are saying but it seems like a colloquialism and I&apos;m not sure how well it will work for non-native speakers.
&gt; 
&gt; Perhaps, you might want to consider something more standard like &quot;Unfortunately, we have to do a refresh because...&quot;

Sorry, I was feeling a bit cranky when I wrote that comment (having just spent hours trying to figure out why my pings weren&apos;t being detected), and I forgot to edit it before upload :)


&gt; LayoutTests/http/tests/navigation/resources/check-ping.php:19
&gt;  +  $result = ($expectedPingValue == $actualPingValue) ? &quot;PASS&quot; : &quot;FAIL&quot;;
&gt; Should this be part of the &quot;refresh&quot; sequence? Just because the file exists does that mean that its contents have been flushed to disk? (and the unlink done after this step).

The load of delete-ping.php in image-load-in-unload-handler.html should have guaranteed unlink (even if a file was left around by a previous test), but if you think it would improve test stability, I&apos;ll switch it around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267408</commentid>
    <comment_count>44</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-20 14:26:05 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; LayoutTests/http/tests/navigation/resources/check-ping.php:19
&gt; &gt;  +  $result = ($expectedPingValue == $actualPingValue) ? &quot;PASS&quot; : &quot;FAIL&quot;;
&gt; &gt; Should this be part of the &quot;refresh&quot; sequence? Just because the file exists does that mean that its contents have been flushed to disk? (and the unlink done after this step).
&gt; 
&gt; The load of delete-ping.php in image-load-in-unload-handler.html should have guaranteed unlink (even if a file was left around by a previous test), but if you think it would improve test stability, I&apos;ll switch it around.

I trust that. What I don&apos;t know is when the new file is created do we know that the contents of the file is flushed to disk on creation.

i.e. Does new file existing mean that it has the full contents? (Yes it seems reasonable, but I don&apos;t know and I&apos;d like to avoid a flaky test.)

btw, because of the delete ping at the beginning of the test, I&apos;d be fine with just omitting the date time check (which would fix this issue).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267451</commentid>
    <comment_count>45</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-08-20 15:29:46 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Ok.
&gt; 
&gt; (In reply to comment #42)
&gt; &gt; (From update of attachment 64760 [details] [details])
&gt; &gt; WebCore/loader/PingLoader.cpp:59
&gt; &gt;  +      m_handle = ResourceHandle::create(request, this, frame, false, false);
&gt; &gt; How does this live past the lifetime of the frame? Does any platform store information from the frame that will live on past this request? And if so, how does that work?
&gt; &gt; 
&gt; &gt; For example WebCore/platform/network/qt/ResourceHandleQt.cpp, does this
&gt; &gt;     getInternal()-&gt;m_frame = static_cast&lt;FrameLoaderClientQt*&gt;(frame-&gt;loader()-&gt;client())-&gt;webFrame();
&gt; 
&gt; I need to look at this in depth to figure out whether this is a problem.  Most platforms use the frame during creation, then throw it away, but it&apos;s possible this will cause a problem on other platforms.

qt and gtk both save the frame for later use.

gtk only uses it for triggering authentication dialogs.  I probably need to double-check with a gtk/soup expert, but I don&apos;t think that&apos;ll be relevant, since PingLoader uses ResourceHandleClient&apos;s empty functions for authentication-related callbacks.

qt appears to be ok (at least for now), because the frame is only actually used:
1. In a test that&apos;s not covering this case
2. In a synchronous call from the constructor unless the load is deferred (and the parameters we&apos;re passing into the ResourceHandle constructor guarantee it won&apos;t be deferred).

So while I think it&apos;s ok now, it&apos;s certainly possible something will change to break these loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268085</commentid>
    <comment_count>46</comment_count>
      <attachid>65159</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-08-23 13:26:58 -0700</bug_when>
    <thetext>Created attachment 65159
Addressing levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268087</commentid>
    <comment_count>47</comment_count>
      <attachid>65159</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-23 13:40:30 -0700</bug_when>
    <thetext>Comment on attachment 65159
Addressing levin&apos;s comments

WebCore/loader/PingLoader.cpp:55
 +      PassOwnPtr&lt;PingLoader&gt; pingLoader(new PingLoader(frame, request));
When I mentioned using PassOwnPtr, I was thinking of a static create method, but given the usage I suppose that would be overkill.

Since this is a local variable, use OwnPtr instead of PassOwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268638</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-24 10:43:39 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65910 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268661</commentid>
    <comment_count>49</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-08-24 11:11:06 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; http://trac.webkit.org/changeset/65910 might have broken Chromium Linux Release

http://trac.webkit.org/changeset/65910
http://trac.webkit.org/changeset/65911</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44561</attachid>
            <date>2009-12-09 14:29:46 -0800</date>
            <delta_ts>2009-12-16 11:04:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>34233</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDktMTItMDkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgaW4gYW4gdW5sb2FkIG9yIGJlZm9yZXVubG9hZCBo
YW5kbGVyLCBhbGxvdyBpdAorICAgICAgICB0byBsb2FkIGFzeW5jaHJvbm91c2x5IGFuZCBvdXRs
aXZlIHRoZSBwYWdlLCBzbyB0aGF0IGEgc2xvdyBsb2FkIGRvZXNuJ3QKKyAgICAgICAgaW1wZWRl
IG5hdmlnYXRpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwKKworICAg
ICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlOjpyZXZhbGlkYXRlUmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Q2FjaGVkSW1h
Z2UpOiBBZGQgcGFyYW1ldGVyIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGltYWdlIGlzIGJlaW5n
IGNyZWF0ZWQgZHVyaW5nIGFuIHVubG9hZCBldmVudC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
SW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjcmVhdGVkRHVyaW5nVW5s
b2FkKTogQWRkZWQuIAorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6IFJlbmFt
ZSBza2lwQ2FuTG9hZENoZWNrIHRvIHNraXBTZWN1cml0eUNoZWNrLgorICAgICAgICAqIGxvYWRl
ci9DYWNoZWRSZXNvdXJjZS5oOiBSZW5hbWUgc2tpcENhbkxvYWRDaGVjayB0byBza2lwU2VjdXJp
dHlDaGVjay4KKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY0xvYWRlcjo6RG9jTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6
aW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY0xvYWRlcjo6ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpOiBBZGRlZC4K
KyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2Fk
ZXI6Om91dGxpdmVQYWdlUmVxdWVzdENvdW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2NMb2FkZXI6OmZyYW1lRm9yT3V0bGl2aW5nUmVxdWVzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogUmVuYW1lIHNraXBDYW5Mb2FkQ2hl
Y2sgdG8gc2tpcFNlY3VyaXR5Q2hlY2suCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5oOiBSZW5hbWUgc2tpcENhbkxvYWRDaGVjayB0byBza2lwU2VjdXJpdHlDaGVj
ay4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOiBBZGQgYm9vbCB0byB0cmFjayB3
aGV0aGVyIGEgYmVmb3JldW5sb2FkIGV2ZW50IGlzIGluIHByb2dyZXNzLgorICAgICAgICAqIGxv
YWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzRGlz
cGF0Y2hpbmdVbmxvYWRFdmVudCk6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQp
OiBVcGRhdGUgY2FsbCB0aGUgQ2FjaGVkSW1hZ2UgY29uc3RydWN0b3IuCisgICAgICAgICogbG9h
ZGVyL1JlcXVlc3QuY3BwOiAgUmVuYW1lIHNraXBDYW5Mb2FkQ2hlY2sgdG8gc2tpcFNlY3VyaXR5
Q2hlY2suCisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuaDogCisgICAgICAgIChXZWJDb3JlOjpS
ZXF1ZXN0Ojpza2lwU2VjdXJpdHlDaGVjayk6IFJlbmFtZSBza2lwQ2FuTG9hZENoZWNrIHRvIHNr
aXBTZWN1cml0eUNoZWNrLgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6c2V0T3V0bGl2ZVBh
Z2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6Om91dGxpdmVQYWdlKTogQWRk
ZWQuCisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUpOiBTcGxpdCBza2lwQ2FuTG9hZENoZWNr
IGludG8gc2tpcFNlY3VyaXR5Q2hlY2sgYW5kIG91dGxpdmVQYWdlLgorICAgICAgICAqIGxvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5oOiBTcGxpdCBza2lwQ2FuTG9hZENoZWNrIGludG8gc2tpcFNl
Y3VyaXR5Q2hlY2sgYW5kIG91dGxpdmVQYWdlLgorICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKTogRW5zdXJlIGV2ZW50cyBjcmVhdGVk
IGR1cmluZyB1bmxvYWQgYXJlIHJ1biBhc3luY2hyb25vdXNseSBzbyBvdGhlciBsb2FkcyBjYW4g
Y29udGludWUuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKTogQWNj
b3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIHJlcXVlc3RzIG91dGxpdmluZyB0aGUgcGFnZQor
ICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IAor
ICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2Fk
ZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogbG9hZGVyL2xvYWRl
ci5oOiBSZW5hbWUgc2tpcENhbkxvYWRDaGVjayB0byBza2lwU2VjdXJpdHlDaGVjay4KKwogMjAw
OS0xMi0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCShyZXZpc2lvbiA1MTkyMCkKKysrIFdl
YkNvcmUvbG9hZGVyL2xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAg
ICAgICAgIExvYWRlcigpOwogICAgICAgICB+TG9hZGVyKCk7CiAKLSAgICAgICAgdm9pZCBsb2Fk
KERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCA9IHRydWUsIGJv
b2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3MgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNl
KiwgYm9vbCBpbmNyZW1lbnRhbCA9IHRydWUsIGJvb2wgc2tpcFNlY3VyaXR5Q2hlY2sgPSBmYWxz
ZSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7CiAKICAgICAgICAgdm9p
ZCBjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDYgKzE3OSw3IEBACiAgICAgLCBtX2lzRXhlY3V0
aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2RpZENhbGxJbXBsaWNpdENs
b3NlKGZhbHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCisgICAgLCBt
X2JlZm9yZVVubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKGZhbHNlKQogICAgICwgbV91bmxvYWRF
dmVudEJlaW5nRGlzcGF0Y2hlZChmYWxzZSkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAg
ICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQpAQCAtMzQzMCw3ICszNDMxLDkgQEAK
ICAgICAvLyAgICAgICBpcyB0aGUgdXNlciByZXNwb25kaW5nIENhbmNlbCB0byB0aGUgZm9ybSBy
ZXBvc3QgbmFnIHNoZWV0LgogICAgIC8vICAgIDIpIFVzZXIgcmVzcG9uZGVkIENhbmNlbCB0byBh
biBhbGVydCBwb3BwZWQgdXAgYnkgdGhlIGJlZm9yZSB1bmxvYWQgZXZlbnQgaGFuZGxlci4KICAg
ICAvLyBUaGUgImJlZm9yZSB1bmxvYWQiIGV2ZW50IGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUg
bWFpbiBmcmFtZS4KKyAgICBtX2JlZm9yZVVubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1
ZTsKICAgICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgKCFpc0xvYWRpbmdN
YWluRnJhbWUoKSB8fCBtX2ZyYW1lLT5zaG91bGRDbG9zZSgpKTsKKyAgICBtX2JlZm9yZVVubG9h
ZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7
CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0
IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0byBpZ25vcmUgaXQsIHRoZW4gd2UgCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDUxOTIwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQAogICAg
IHZpcnR1YWwgfkNhY2hlZFJlc291cmNlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGxvYWQo
RG9jTG9hZGVyKiBkb2NMb2FkZXIpICB7IGxvYWQoZG9jTG9hZGVyLCBmYWxzZSwgZmFsc2UsIHRy
dWUpOyB9Ci0gICAgdm9pZCBsb2FkKERvY0xvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIGJvb2wg
c2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICB2
b2lkIGxvYWQoRG9jTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBza2lwU2VjdXJpdHlD
aGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKSB7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBlbmNv
ZGluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9S
ZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCShyZXZpc2lv
biA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQAogCiAgICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiAgICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291cmNl
KiwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MpOworICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJl
c291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBza2lwU2VjdXJpdHlDaGVjaywgYm9vbCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICAgICAgflJlcXVlc3QoKTsKICAgICAgICAg
CiAgICAgICAgIFZlY3RvcjxjaGFyPiYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAg
LTQ1LDggKzQ1LDExIEBACiAgICAgICAgIGJvb2wgaXNNdWx0aXBhcnQoKSB7IHJldHVybiBtX211
bHRpcGFydDsgfQogICAgICAgICB2b2lkIHNldElzTXVsdGlwYXJ0KGJvb2wgYiA9IHRydWUpIHsg
bV9tdWx0aXBhcnQgPSBiOyB9CiAKLSAgICAgICAgYm9vbCBzaG91bGRTa2lwQ2FuTG9hZENoZWNr
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTa2lwQ2FuTG9hZENoZWNrOyB9CisgICAgICAgIGJv
b2wgc2tpcFNlY3VyaXR5Q2hlY2soKSBjb25zdCB7IHJldHVybiBtX3NraXBTZWN1cml0eUNoZWNr
OyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0
dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQorCisgICAgICAgIHZvaWQgc2V0T3V0
bGl2ZVBhZ2UoYm9vbCBvdXRsaXZlUGFnZSkgeyBtX291dGxpdmVQYWdlID0gb3V0bGl2ZVBhZ2U7
IH0KKyAgICAgICAgYm9vbCBvdXRsaXZlUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0bGl2ZVBh
Z2U7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fYnVm
ZmVyOwpAQCAtNTQsOCArNTcsOSBAQAogICAgICAgICBEb2NMb2FkZXIqIG1fZG9jTG9hZGVyOwog
ICAgICAgICBib29sIG1faW5jcmVtZW50YWw7CiAgICAgICAgIGJvb2wgbV9tdWx0aXBhcnQ7Ci0g
ICAgICAgIGJvb2wgbV9zaG91bGRTa2lwQ2FuTG9hZENoZWNrOworICAgICAgICBib29sIG1fc2tp
cFNlY3VyaXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
OworICAgICAgICBib29sIG1fb3V0bGl2ZVBhZ2U7CiAgICAgfTsKIAogfSAvL25hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA1MTkyMCkKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdl
KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFN0cmlu
ZyYgdXJsLCBib29sIGlzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICA6IENhY2hlZFJlc291
cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKICAgICAsIG1faW1hZ2UoMCkKICAgICAsIG1fZGVjb2Rl
ZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlv
blRpbWVyRmlyZWQpCiAgICAgLCBtX2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkK
KyAgICAsIG1fY3JlYXRlZER1cmluZ1VubG9hZChpc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiB7
CiAgICAgbV9zdGF0dXMgPSBVbmtub3duOwogfQpAQCAtNjMsNiArNjQsNyBAQAogICAgICwgbV9p
bWFnZShpbWFnZSkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNo
ZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAgLCBtX2h0dHBTdGF0
dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKKyAgICAsIG1fY3JlYXRlZER1cmluZ1VubG9hZChm
YWxzZSkKIHsKICAgICBtX3N0YXR1cyA9IENhY2hlZDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDUxOTIwKQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTAg
KzEwMywxMCBAQAogICAgICAgICBtX2RvY0xvYWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2UodGhp
cyk7CiB9CiAgICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKERvY0xvYWRlciogZG9jTG9h
ZGVyLCBib29sIGluY3JlbWVudGFsLCBib29sIHNraXBDYW5Mb2FkQ2hlY2ssIGJvb2wgc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoRG9jTG9hZGVy
KiBkb2NMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIGJvb2wgc2tpcFNlY3VyaXR5Q2hlY2ssIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX3NlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgIGNhY2hlKCktPmxvYWRl
cigpLT5sb2FkKGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNraXBDYW5Mb2FkQ2hlY2ss
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2Fk
KGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNraXBTZWN1cml0eUNoZWNrLCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICBtX2xvYWRpbmcgPSB0cnVlOwogfQogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0RvY0xvYWRlci5jcHAJKHJldmlzaW9uIDUxOTIwKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQAogICAgIDogbV9jYWNoZShj
YWNoZSgpKQogICAgICwgbV9kb2MoZG9jKQogICAgICwgbV9yZXF1ZXN0Q291bnQoMCkKKyAgICAs
IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoMCkKKyAgICAsIG1fZnJhbWVGb3JPdXRsaXZpbmdS
ZXF1ZXN0cygwKQogICAgICwgbV9hdXRvTG9hZEltYWdlcyh0cnVlKQogICAgICwgbV9sb2FkSW5Q
cm9ncmVzcyhmYWxzZSkKICAgICAsIG1fYWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSkKQEAgLTQz
Miw2ICs0MzQsMTggQEAKICAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVhcigpOwogfQogCit2b2lk
IERvY0xvYWRlcjo6aW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKQoreworICAgIGlm
ICghbV9vdXRsaXZlUGFnZVJlcXVlc3RDb3VudCsrKQorICAgICAgICBtX2ZyYW1lRm9yT3V0bGl2
aW5nUmVxdWVzdHMgPSBtX2RvYy0+ZnJhbWUoKTsKK30KKwordm9pZCBEb2NMb2FkZXI6OmRlY3Jl
bWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCkKK3sKKyAgICBpZiAoIS0tbV9vdXRsaXZlUGFn
ZVJlcXVlc3RDb3VudCkKKyAgICAgICAgbV9mcmFtZUZvck91dGxpdmluZ1JlcXVlc3RzID0gMDsK
K30KKwogI2lmIFBSRUxPQURfREVCVUcKIHZvaWQgRG9jTG9hZGVyOjpwcmludFByZWxvYWRTdGF0
cygpCiB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDUxOTIwKQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAog
ICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKIAogcHVibGljOgotICAgIENhY2hlZEltYWdlKGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBDYWNoZWRJbWFnZShjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBp
c0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOwogICAgIENhY2hlZEltYWdlKEltYWdlKik7CiAgICAg
dmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKICAgICAKQEAgLTgyLDYgKzgyLDggQEAKICAgICBib29s
IHN0aWxsTmVlZHNMb2FkKCkgY29uc3QgeyByZXR1cm4gIW1fZXJyb3JPY2N1cnJlZCAmJiBtX3N0
YXR1cyA9PSBVbmtub3duICYmIG1fbG9hZGluZyA9PSBmYWxzZTsgfQogICAgIHZvaWQgbG9hZCgp
OwogCisgICAgYm9vbCBjcmVhdGVkRHVyaW5nVW5sb2FkKCkgY29uc3QgeyByZXR1cm4gbV9jcmVh
dGVkRHVyaW5nVW5sb2FkOyB9CisKICAgICAvLyBJbWFnZU9ic2VydmVyCiAgICAgdmlydHVhbCB2
b2lkIGRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKTsKQEAgLTEwMCw2ICsxMDIsNyBA
QAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBUaW1lcjxDYWNoZWRJbWFnZT4gbV9k
ZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CiAgICAgYm9vbCBtX2h0dHBTdGF0dXNDb2RlRXJyb3JP
Y2N1cnJlZDsKKyAgICBib29sIG1fY3JlYXRlZER1cmluZ1VubG9hZDsKIH07CiAKIH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA1MTky
MCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIHZvaWQgcHJlZmxpZ2h0U3VjY2Vzcygp
OwogICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1cmUoKTsKIAotICAgICAgICB2b2lkIGxvYWRS
ZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2tpcENhbkxvYWRDaGVjayk7Cisg
ICAgICAgIHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBza2lw
U2VjdXJpdHlDaGVjayk7CiAgICAgICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgS1VS
TCYpOwogCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA1MTkyMCkKKysrIFdl
YkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEs
MTggKzYxLDE4IEBACiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBza2lw
Q2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKQorUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VM
b2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGll
bnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBza2lwU2VjdXJpdHlDaGVj
aywgYm9vbCBvdXRsaXZlUGFnZSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZikKIHsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIEZyYW1lTG9hZGVyKiBmbCA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIXNr
aXBDYW5Mb2FkQ2hlY2sgJiYgKGZsLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8
fCBmbC0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkKKyAgICBpZiAoIW91
dGxpdmVQYWdlICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0OwogCi0gICAgaWYg
KCFza2lwQ2FuTG9hZENoZWNrCisgICAgaWYgKCFza2lwU2VjdXJpdHlDaGVjawogICAgICAgICAg
ICAgJiYgU2VjdXJpdHlPcmlnaW46OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpCiAgICAgICAgICAg
ICAmJiAhU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQocmVxdWVzdC51cmwoKSwgU3RyaW5nKCksIGZy
YW1lLT5kb2N1bWVudCgpKSkgewogICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2Fk
RmFpbGVkKGZyYW1lLCByZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0RvY0xvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5o
CShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NSw2ICs5Niwx
MSBAQAogICAgIHZvaWQgaW5jcmVtZW50UmVxdWVzdENvdW50KCk7CiAgICAgdm9pZCBkZWNyZW1l
bnRSZXF1ZXN0Q291bnQoKTsKICAgICBpbnQgcmVxdWVzdENvdW50KCk7CisKKyAgICB2b2lkIGlu
Y3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRPdXRs
aXZlUGFnZVJlcXVlc3RDb3VudCgpOworICAgIGludCBvdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQ7IH0KKyAgICBGcmFtZSog
ZnJhbWVGb3JPdXRsaXZpbmdSZXF1ZXN0cygpIHsgcmV0dXJuIG1fZnJhbWVGb3JPdXRsaXZpbmdS
ZXF1ZXN0cy5nZXQoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOwogICAgIHZv
aWQgY2xlYXJQZW5kaW5nUHJlbG9hZHMoKTsKQEAgLTExNiw2ICsxMjIsOSBAQAogICAgIERvY3Vt
ZW50KiBtX2RvYzsKICAgICAKICAgICBpbnQgbV9yZXF1ZXN0Q291bnQ7CisKKyAgICBpbnQgbV9v
dXRsaXZlUGFnZVJlcXVlc3RDb3VudDsKKyAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JPdXRs
aXZpbmdSZXF1ZXN0czsKICAgICAKICAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1f
cHJlbG9hZHM7CiAgICAgc3RydWN0IFBlbmRpbmdQcmVsb2FkIHsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJl
dmlzaW9uIDUxOTIwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NiwxMSArNjYsMTEgQEAKIHsKIH0KIAotc3RhdGljIENhY2hlZFJlc291cmNlKiBjcmVh
dGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKK3N0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQsIERvY0xvYWRlciogZG9jTG9hZGVyKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkSW1hZ2UodXJsLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNo
ZWRJbWFnZSh1cmwuc3RyaW5nKCksIGRvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmlzRGlz
cGF0Y2hpbmdVbmxvYWRFdmVudCgpKTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHls
ZVNoZWV0OgogICAgICAgICByZXR1cm4gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQodXJsLnN0cmlu
ZygpLCBjaGFyc2V0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CkBAIC0xMTQs
NyArMTE0LDcgQEAKICAgICAKICAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAgIC8vIFRoZSBy
ZXNvdXJjZSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgotICAgICAgICByZXNvdXJjZSA9IGNy
ZWF0ZVJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCk7CisgICAgICAgIHJlc291cmNlID0gY3Jl
YXRlUmVzb3VyY2UodHlwZSwgdXJsLCBjaGFyc2V0LCBkb2NMb2FkZXIpOwogICAgICAgICBBU1NF
UlQocmVzb3VyY2UpOwogCiAgICAgICAgIC8vIFByZXRlbmQgdGhlIHJlc291cmNlIGlzIGluIHRo
ZSBjYWNoZSwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGRlbGV0ZWQgZHVyaW5nIHRoZSBsb2Fk
KCkgY2FsbC4KQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNvbnN0IFN0cmluZyYgdXJsID0gcmVzb3VyY2UtPnVybCgpOwotICAgIENhY2hlZFJlc291cmNl
KiBuZXdSZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLT50eXBlKCksIEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmwpLCByZXNvdXJjZS0+ZW5jb2RpbmcoKSk7CisgICAgQ2FjaGVkUmVz
b3VyY2UqIG5ld1Jlc291cmNlID0gY3JlYXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUoKSwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHJlc291cmNlLT5lbmNvZGluZygpLCBkb2NMb2FkZXIp
OwogICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShyZXNvdXJjZSk7CiAg
ICAgZXZpY3QocmVzb3VyY2UpOwogICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIG5ld1Jlc291cmNl
KTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gNTE5MjApCisrKyBXZWJDb3JlL2xvYWRlci9s
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTAgKzExNywxMCBAQAogI2VuZGlmCiB9
CiAKLXZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywgYm9v
bCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQordm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVy
KiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwg
Ym9vbCBza2lwU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQog
ewogICAgIEFTU0VSVChkb2NMb2FkZXIpOwotICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVx
dWVzdChkb2NMb2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2tpcENhbkxvYWRDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBS
ZXF1ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBza2lwU2VjdXJpdHlDaGVj
aywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAKICAgICBSZWZQdHI8SG9zdD4gaG9zdDsK
ICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSk7CkBAIC0xMzks
NyArMTM5LDExIEBACiAgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7CiAg
ICAgZG9jTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKIAotICAgIGlmIChwcmlvcml0
eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSB7
CisgICAgLy8gSWYgd2UncmUgZG9pbmcgYSBsb2FkIGR1cmluZyBhbiB1bmxvYWQgZXZlbnQsIHdl
IGRvbid0IHdhbnQgdGhpcyByZXF1ZXN0IHRvIGJsb2NrIG5hdmlnYXRpbmcKKyAgICAvLyBhd2F5
IGZyb20gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCisgICAgYm9vbCBhc3luY2hyb25vdXNVbmxvYWRF
dmVudExvYWQgPSBkb2NMb2FkZXItPmZyYW1lKCkgJiYgZG9jTG9hZGVyLT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+aXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KCk7CisKKyAgICBpZiAoIWFzeW5jaHJvbm91
c1VubG9hZEV2ZW50TG9hZCAmJiAocHJpb3JpdHkgPiBMb3cgfHwgIXVybC5wcm90b2NvbEluSFRU
UEZhbWlseSgpIHx8ICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3Qg
aW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseQogICAgICAgICBob3N0LT5zZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyhwcmlvcml0eSk7CiAgICAgfSBlbHNlIHsKQEAgLTI0OSw3ICsyNTMsNyBAQAog
CiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgIAotICAgIEFTU0VSVChk
b2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09IChkb2NMb2FkZXItPmxvYWRJblByb2dyZXNzKCkg
PyAxIDogMCkpOworICAgIEFTU0VSVChkb2NMb2FkZXItPm91dGxpdmVQYWdlUmVxdWVzdENvdW50
KCkgfHwgKGRvY0xvYWRlci0+cmVxdWVzdENvdW50KCkgPT0gKGRvY0xvYWRlci0+bG9hZEluUHJv
Z3Jlc3MoKSA/IDEgOiAwKSkpOwogfQogCiBMb2FkZXI6Okhvc3Q6Okhvc3QoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQpAQCAtMzQ2LDggKzM1
MCwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRvY0xvYWRl
ci0+ZG9jKCktPmZyYW1lKCksCi0gICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJl
cXVlc3QtPnNob3VsZFNraXBDYW5Mb2FkQ2hlY2soKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcygpKTsKKyAgICAgICAgYm9vbCBvdXRsaXZlUGFnZSA9IHJlcXVlc3QtPm91dGxp
dmVQYWdlKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG91dGxpdmVQYWdlID8gZG9jTG9hZGVy
LT5mcmFtZUZvck91dGxpdmluZ1JlcXVlc3RzKCkgOiBkb2NMb2FkZXItPmRvYygpLT5mcmFtZSgp
OworICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUoZnJhbWUsCisgICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3Qs
IHJlcXVlc3QtPnNraXBTZWN1cml0eUNoZWNrKCksIG91dGxpdmVQYWdlLCByZXF1ZXN0LT5zZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogICAgICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAg
ICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQobG9hZGVyLnJlbGVhc2UoKSwgcmVxdWVzdCk7CiAg
ICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0
d29ya2luZ0xheWVyKCk7CkBAIC0zNTYsNiArMzYyLDggQEAKICNlbmRpZgogICAgICAgICB9IGVs
c2UgeyAgICAgICAgICAgIAogICAgICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0
Q291bnQoKTsKKyAgICAgICAgICAgIGlmIChvdXRsaXZlUGFnZSkKKyAgICAgICAgICAgICAgICBk
b2NMb2FkZXItPmRlY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CiAgICAgICAgICAg
ICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwogICAgICAgICAgICAgcmVxdWVz
dC0+Y2FjaGVkUmVzb3VyY2UoKS0+ZXJyb3IoKTsKICAgICAgICAgICAgIGRvY0xvYWRlci0+c2V0
TG9hZEluUHJvZ3Jlc3MoZmFsc2UpOwpAQCAtMzc4LDggKzM4NiwxMSBAQAogICAgIC8vIFByZXZl
bnQgdGhlIGRvY3VtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkIGJlZm9yZSB3ZSBhcmUgZG9uZSB3
aXRoCiAgICAgLy8gdGhlIGRvY0xvYWRlciB0aGF0IGl0IHdpbGwgZGVsZXRlIHdoZW4gdGhlIGRv
Y3VtZW50IGdldHMgZGVsZXRlZC4KICAgICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3Rvcihkb2NM
b2FkZXItPmRvYygpKTsKLSAgICBpZiAoIXJlcXVlc3QtPmlzTXVsdGlwYXJ0KCkpCisgICAgaWYg
KCFyZXF1ZXN0LT5pc011bHRpcGFydCgpKSB7CiAgICAgICAgIGRvY0xvYWRlci0+ZGVjcmVtZW50
UmVxdWVzdENvdW50KCk7CisgICAgICAgIGlmIChyZXF1ZXN0LT5vdXRsaXZlUGFnZSgpKQorICAg
ICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgpOwor
ICAgIH0KIAogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hlZFJl
c291cmNlKCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7
CkBAIC00MjYsOCArNDM3LDExIEBACiAgICAgLy8gUHJldmVudCB0aGUgZG9jdW1lbnQgZnJvbSBi
ZWluZyBkZXN0cm95ZWQgYmVmb3JlIHdlIGFyZSBkb25lIHdpdGgKICAgICAvLyB0aGUgZG9jTG9h
ZGVyIHRoYXQgaXQgd2lsbCBkZWxldGUgd2hlbiB0aGUgZG9jdW1lbnQgZ2V0cyBkZWxldGVkLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOwotICAgIGlm
ICghcmVxdWVzdC0+aXNNdWx0aXBhcnQoKSkKKyAgICBpZiAoIXJlcXVlc3QtPmlzTXVsdGlwYXJ0
KCkpIHsKICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICAg
ICAgaWYgKHJlcXVlc3QtPm91dGxpdmVQYWdlKCkpCisgICAgICAgICAgICBkb2NMb2FkZXItPmRl
Y3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgfQogCiAgICAgQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKTsKICAgICAKQEAgLTQ3
Myw2ICs0ODcsOCBAQAogICAgICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKGxvYWRl
cik7CiAgICAgICAgICAgICBsb2FkZXItPmNsZWFyQ2xpZW50KCk7CiAgICAgICAgICAgICByZXF1
ZXN0LT5kb2NMb2FkZXIoKS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgICAgICAgICBp
ZiAocmVxdWVzdC0+b3V0bGl2ZVBhZ2UoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LT5kb2NM
b2FkZXIoKS0+ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKIAogICAgICAgICAg
ICAgLy8gRXhpc3RpbmcgcmVzb3VyY2UgaXMgb2ssIGp1c3QgdXNlIGl0IHVwZGF0aW5nIHRoZSBl
eHBpcmF0aW9uIHRpbWUuCiAgICAgICAgICAgICBjYWNoZSgpLT5yZXZhbGlkYXRpb25TdWNjZWVk
ZWQocmVzb3VyY2UsIHJlc3BvbnNlKTsKQEAgLTUwNSw2ICs1MjEsOCBAQAogICAgICAgICAKICAg
ICAgICAgLy8gV2UgZG9uJ3QgY291bnQgbXVsdGlQYXJ0cyBpbiBhIERvY0xvYWRlcidzIHJlcXVl
c3QgY291bnQKICAgICAgICAgcmVxdWVzdC0+ZG9jTG9hZGVyKCktPmRlY3JlbWVudFJlcXVlc3RD
b3VudCgpOworICAgICAgICBpZiAocmVxdWVzdC0+b3V0bGl2ZVBhZ2UoKSkKKyAgICAgICAgICAg
IHJlcXVlc3QtPmRvY0xvYWRlcigpLT5kZWNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgp
OwogCiAgICAgICAgIC8vIElmIHdlIGdldCBhIG11bHRpcGFydCByZXNwb25zZSwgd2UgbXVzdCBo
YXZlIGEgaGFuZGxlCiAgICAgICAgIEFTU0VSVChsb2FkZXItPmhhbmRsZSgpKTsKQEAgLTU1MCw3
ICs1NjgsMTMgQEAKICAgICBSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IHJlcXVlc3RzUGVu
ZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQgPSByZXF1ZXN0
c1BlbmRpbmcuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlcXVlc3QqIHJl
cXVlc3QgPSAqaXQ7Ci0gICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKSA9PSBkb2NMb2Fk
ZXIpIHsKKyAgICAgICAgYm9vbCBvdXRsaXZlUGFnZSA9IHJlcXVlc3QtPmNhY2hlZFJlc291cmNl
KCktPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSAmJgorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKS0+
Y3JlYXRlZER1cmluZ1VubG9hZCgpOyAgICAKKyAgICAgICAgaWYgKG91dGxpdmVQYWdlKSB7Cisg
ICAgICAgICAgICByZXF1ZXN0LT5zZXRPdXRsaXZlUGFnZSh0cnVlKTsKKyAgICAgICAgICAgIGRv
Y0xvYWRlci0+aW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIW91dGxpdmVQYWdlICYmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKSA9PSBkb2NM
b2FkZXIpKSB7CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKSk7CiAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKICAgICAgICAgICAgIGRvY0xv
YWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFn
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMzIsNyArMTM0LDcgQEAKICAgICBpZiAoIShhdHRy
LmlzTnVsbCgpIHx8IChhdHRyLmlzRW1wdHkoKSAmJiBkb2N1bWVudC0+YmFzZVVSSSgpLmlzTG9j
YWxGaWxlKCkpKSkgewogICAgICAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKICAgICAgICAgICAg
IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+c2V0QXV0b0xvYWRJbWFnZXMoZmFsc2UpOwotICAgICAg
ICAgICAgbmV3SW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2Uoc291cmNlVVJJKGF0dHIpKTsKKyAgICAg
ICAgICAgIG5ld0ltYWdlID0gbmV3IENhY2hlZEltYWdlKHNvdXJjZVVSSShhdHRyKSwgZG9jdW1l
bnQtPmRvY0xvYWRlcigpLT5mcmFtZSgpLT5sb2FkZXIoKS0+aXNEaXNwYXRjaGluZ1VubG9hZEV2
ZW50KCkpOwogICAgICAgICAgICAgbmV3SW1hZ2UtPnNldExvYWRpbmcodHJ1ZSk7CiAgICAgICAg
ICAgICBuZXdJbWFnZS0+c2V0RG9jTG9hZGVyKGRvY3VtZW50LT5kb2NMb2FkZXIoKSk7CiAgICAg
ICAgICAgICBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPm1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KG5l
d0ltYWdlLT51cmwoKSwgbmV3SW1hZ2UpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcw
LDggQEAKICAgICBBU1NFUlQoY2xpZW50KTsKIAogICAgIGlmIChtX3NhbWVPcmlnaW5SZXF1ZXN0
IHx8IG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdp
blJlcXVlc3RzKSB7Ci0gICAgICAgIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlOwotICAg
ICAgICBsb2FkUmVxdWVzdChyZXF1ZXN0LCBza2lwQ2FuTG9hZENoZWNrKTsKKyAgICAgICAgYm9v
bCBza2lwU2VjdXJpdHlDaGVjayA9IGZhbHNlOworICAgICAgICBsb2FkUmVxdWVzdChyZXF1ZXN0
LCBza2lwU2VjdXJpdHlDaGVjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMSw4
ICsxMTEsOCBAQAogICAgIGNyb3NzT3JpZ2luUmVxdWVzdC5zZXRBbGxvd0Nvb2tpZXMobV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMpOwogICAgIGNyb3NzT3JpZ2luUmVxdWVzdC5zZXRIVFRQT3Jp
Z2luKG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwogCi0gICAgYm9v
bCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2U7Ci0gICAgbG9hZFJlcXVlc3QoY3Jvc3NPcmlnaW5S
ZXF1ZXN0LCBza2lwQ2FuTG9hZENoZWNrKTsKKyAgICBib29sIHNraXBTZWN1cml0eUNoZWNrID0g
ZmFsc2U7CisgICAgbG9hZFJlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1ZXN0LCBza2lwU2VjdXJpdHlD
aGVjayk7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCkBAIC0xNDIsOCArMTQyLDggQEAKICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRv
cHQoaGVhZGVyQnVmZmVyKSk7CiAgICAgfQogCi0gICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0g
ZmFsc2U7Ci0gICAgbG9hZFJlcXVlc3QocHJlZmxpZ2h0UmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
ayk7CisgICAgYm9vbCBza2lwU2VjdXJpdHlDaGVjayA9IGZhbHNlOworICAgIGxvYWRSZXF1ZXN0
KHByZWZsaWdodFJlcXVlc3QsIHNraXBTZWN1cml0eUNoZWNrKTsKIH0KIAogRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKQEAgLTI4NCw4ICsyODQs
OCBAQAogICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IGFjdHVhbFJlcXVlc3Q7CiAgICAgYWN0
dWFsUmVxdWVzdC5zd2FwKG1fYWN0dWFsUmVxdWVzdCk7CiAKLSAgICBib29sIHNraXBDYW5Mb2Fk
Q2hlY2sgPSB0cnVlOyAgLy8gb2sgdG8gc2tpcCBsb2FkIGNoZWNrIHNpbmNlIHdlIGFscmVhZHkg
YXNrZWQgYWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0Ci0gICAgbG9hZFJlcXVlc3QoKmFjdHVh
bFJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2spOworICAgIGJvb2wgc2tpcFNlY3VyaXR5Q2hlY2sg
PSB0cnVlOyAgLy8gb2sgdG8gc2tpcCBsb2FkIGNoZWNrIHNpbmNlIHdlIGFscmVhZHkgYXNrZWQg
YWJvdXQgdGhlIHByZWZsaWdodCByZXF1ZXN0CisgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVl
c3QsIHNraXBTZWN1cml0eUNoZWNrKTsKIH0KIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnByZWZsaWdodEZhaWx1cmUoKQpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKIH0KIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBz
a2lwQ2FuTG9hZENoZWNrKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBza2lwU2VjdXJpdHlDaGVj
aykKIHsKICAgICBpZiAobV9hc3luYykgewogICAgICAgICAvLyBEb24ndCBzbmlmZiBjb250ZW50
IG9yIHNlbmQgbG9hZCBjYWxsYmFja3MgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KQEAgLTMw
Miw3ICszMDIsNyBAQAogCiAgICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhhdCBhbnkg
Y2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBoYXZlIHRo
ZSBvbGQgbG9hZGVyLgogICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9hZGVyID0g
U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1
ZXN0LCBza2lwQ2FuTG9hZENoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsK
KyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQt
PmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNraXBTZWN1cml0eUNoZWNrLCBmYWxzZSwgc2VuZExv
YWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDUxOTIwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDYgKzMzNiw4IEBACiAKICAg
ICBzdGF0aWMgT2JqZWN0Q29udGVudFR5cGUgZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKKyAgICBib29sIGlzRGlzcGF0
Y2hpbmdVbmxvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgfHwgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZDsgfQorCiBwcml2YXRl
OgogICAgIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpOwogI2lmbmRlZiBO
REVCVUcKQEAgLTQ3OSw2ICs0ODEsNyBAQAogCiAgICAgYm9vbCBtX2RpZENhbGxJbXBsaWNpdENs
b3NlOwogICAgIGJvb2wgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQ7CisgICAgYm9vbCBtX2JlZm9y
ZVVubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkOwogICAgIGJvb2wgbV91bmxvYWRFdmVudEJlaW5n
RGlzcGF0Y2hlZDsKICAgICBib29sIG1faXNDb21wbGV0ZTsKICAgICBib29sIG1faXNMb2FkaW5n
TWFpblJlc291cmNlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHJldmlzaW9uIDUxOTIwKQorKysgV2Vi
Q29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBk
b2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIGJvb2wg
c2hvdWxkU2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQor
UmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9i
amVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBza2lwU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgIDogbV9vYmplY3Qob2JqZWN0KQogICAgICwgbV9k
b2NMb2FkZXIoZG9jTG9hZGVyKQogICAgICwgbV9pbmNyZW1lbnRhbChpbmNyZW1lbnRhbCkKICAg
ICAsIG1fbXVsdGlwYXJ0KGZhbHNlKQotICAgICwgbV9zaG91bGRTa2lwQ2FuTG9hZENoZWNrKHNo
b3VsZFNraXBDYW5Mb2FkQ2hlY2spCisgICAgLCBtX3NraXBTZWN1cml0eUNoZWNrKHNraXBTZWN1
cml0eUNoZWNrKQogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpCisgICAgLCBtX291dGxpdmVQYWdlKGZhbHNlKQogewogICAgIG1fb2Jq
ZWN0LT5zZXRSZXF1ZXN0KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oCShyZXZpc2lvbiA1MTkyMCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAKICAgICBjbGFzcyBTdWJy
ZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUxvYWRlciB7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gY3JlYXRlKEZyYW1lKiwg
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNr
aXBDYW5Mb2FkQ2hlY2sgPSBmYWxzZSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0g
dHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBza2lwU2VjdXJpdHlDaGVj
ayA9IGZhbHNlLCBib29sIG91dGxpdmVQYWdlID0gZmFsc2UsIGJvb2wgc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSk7CiAKICAg
ICAgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CiAKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1o
YW5kbGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1h
Z2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOCBAQAorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxO
U0Vycm9yIGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9h
ZC1oYW5kbGVyLmh0bWwiPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJl
cXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBo
dHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIHdpbGxT
ZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgbWFpbiBkb2N1bWVudCBVUkwg
aHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxv
YWQtaGFuZGxlci5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwp
CitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5v
dGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9u
ZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExv
YWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJl
c291cmNlLTEtc2VjLnBsIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2Vj
LnBsLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZwor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1i
ZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzIEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVy
PC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZpZ2F0ZSgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGluayIp
OworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDIs
IHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJl
cXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdlKDEsIDEpOworICAgIGltZy5z
cmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwiOworfQorPC9zY3JpcHQ+PC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJuYXZpZ2F0ZSgpOyIgb25iZWZvcmV1bmxvYWQ9InJlcXVlc3RJ
bWFnZSgpOyI+Cis8YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sIj5saW5rPC9hPgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNl
cy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+DQorPHNjcmlwdD4NCisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgew0KKyAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsNCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7DQorICAgICAgICB9LCAxNTAwKTsNCisgICAgfQ0KKzwvc2NyaXB0Pg0KKzwvaHRtbD4NCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxv
YWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkgQEAKK21haW4gZnJhbWUgLSBoYXMgMSBvbnVubG9hZCBoYW5kbGVyKHMpCis8dW5rbm93
bj4gLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogPE5TRXJyb3IgZG9tYWluIE5TVVJMRXJyb3JE
b21haW4sIGNvZGUgLTk5OSwgZmFpbGluZyBVUkwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbCI+CitodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwg
LSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBtYWluIGRv
Y3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2Fp
dC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25z
ZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxSZXNwb25z
ZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5v
dGlmeS1kb25lLmh0bWwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDovLzEyNy4wLjAuMTo4
MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlk
RmluaXNoTG9hZGluZworaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBV
UkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3Vy
Y2UtMS1zZWMucGwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2Qg
R0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSBkaWRSZWNlaXZlUmVzcG9u
c2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMu
cGwgLSBkaWRGaW5pc2hMb2FkaW5nCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhh
bmRsZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQgQEAKKzxodG1sPjxoZWFkPgorPHRpdGxlPkltYWdlIGxvYWQgaW4gdW5sb2FkIGhh
bmRsZXI8L3RpdGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIG5hdmlnYXRlKCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
aW5rIik7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0
ICsgMiwgdGFyZ2V0Lm9mZnNldFRvcCArIDIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZURv
d24oKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIH0KK30KKworZnVuY3Rp
b24gcmVxdWVzdEltYWdlKCkgeworICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoMSwgMSk7CisgICAg
aW1nLnNyYyA9ICJyZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCI7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9udW5sb2FkPSJyZXF1ZXN0
SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1
MTkyMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDA5LTEyLTA5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDQ1Ny4KKworICAgICAg
ICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5k
bGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sOiBBZGRlZC4K
KwogMjAwOS0xMi0wOSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNv
bGxhYm9yYS5jby51az4KIAogICAgICAgICBTa2lwIGEgZmFpbGluZyB0ZXN0IHRoYXQgbmVlZHMg
RFJUIHN1cHBvcnQgdG8gb3ZlcnJpZGUgc3RhbmRhcmQK
</data>
<flag name="review"
          id="26452"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44996</attachid>
            <date>2009-12-16 11:04:13 -0800</date>
            <delta_ts>2010-01-26 14:03:31 -0800</delta_ts>
            <desc>Attempt #2</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28329</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjIwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMTItMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jTG9hZGVyOjpEb2NMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjph
ZGRSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIGluY3JlbWVudFJlcXVlc3RDb3VudCwgbm93IHRha2Vz
IGEgUmVxdWVzdCogcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpyZW1v
dmVSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIGRlY3JlbWVudFJlcXVlc3RDb3VudCwgbm93IHRha2Vz
IGEgUmVxdWVzdCogcGFyYW1ldGVyLgorICAgICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6cmVxdWVzdHNUaGF0T3V0bGl2ZVBhZ2VDb3VudCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpmcmFtZUZvclJlcXVlc3QpOiBB
ZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QpOiAK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOiBSZW5hbWUgbV91bmxvYWRFdmVudEJl
aW5nRGlzcGF0Y2hlZCB0byBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omxv
YWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRXaXRoRG9jdW1lbnRM
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN0b3BBbGxMb2FkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnYXRp
b25Qb2xpY3kpOiBTZXQgbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6cGFnZUhpZGRlbik6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aXNEaXNwYXRjaGlu
Z1VubG9hZEV2ZW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6UmVxdWVzdCk6IEFkZCBPdXRsaXZlUGFnZVBvbGljeSB0
byBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLgorICAgICAgICAqIGxvYWRlci9SZXF1ZXN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjopOiBBZGQgT3V0bGl2ZVBhZ2VQb2xpY3kgZW51bS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlcXVlc3Q6OnNob3VsZE91dGxpdmVQYWdlKTogQWRkZWQuCisgICAgICAgICog
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291
cmNlTG9hZGVyOjpjcmVhdGUpOiBDaGFuZ2Ugb25lIG9mIHRoZSBzZWN1cml0eSBjaGVja3MgdG8g
YW4gb3V0bGl2ZSBwYWdlIGNoZWNrLgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oOgorICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyOjpsb2FkKTogQWRkIE91dGxpdmVQYWdlUG9saWN5IHRvIFJlcXVlc3QgY29uc3RydWN0b3Ig
Y2FsbCwKKyAgICAgICAgICAgICBlbnN1cmUgcmVxdWVzdHMgdGhhdCBzaG91bGQgb3V0bGl2ZSBw
YWdlIGFyZSBkb25lIGFzeW5jaHJvbm91c2x5LgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpj
YW5jZWxSZXF1ZXN0cyk6IEFjY291bnQgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiByZXF1ZXN0cyBv
dXRsaXZpbmcgdGhlIHBhZ2UgaW4gZmluYWwgQVNTRVJULgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyOjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IFVzZSB0aGUgY29ycmVjdCBmcmFtZSBp
biB0aGUgY2FzZSBvZiBhIHJlcXVlc3Qgb3V0bGl2aW5nIGl0cyBwYWdlLgorICAgICAgICAoV2Vi
Q29yZTo6TG9hZGVyOjpIb3N0OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRlcjo6SG9zdDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNh
bmNlbFBlbmRpbmdSZXF1ZXN0cyk6IEVuc3VyZSB3ZSBkb24ndCBjYW5jZWwgcmVxdWVzdCB0aGF0
IHNob3VsZCBvdXRsaXZlIHRoZWlyIHBhZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhv
c3Q6OmNhbmNlbFJlcXVlc3RzKTogRW5zdXJlIHdlIGRvbid0IGNhbmNlbCByZXF1ZXN0IHRoYXQg
c2hvdWxkIG91dGxpdmUgdGhlaXIgcGFnZS4KKwogMjAwOS0xMi0xNiAgRW5yaWNhIENhc3VjY2kg
IDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29u
LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNTIyMDEpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksOCBA
QAogICAgICwgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uKGZhbHNlKQogICAgICwg
bV9kaWRDYWxsSW1wbGljaXRDbG9zZShmYWxzZSkKICAgICAsIG1fd2FzVW5sb2FkRXZlbnRFbWl0
dGVkKGZhbHNlKQotICAgICwgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZChmYWxzZSkKKyAg
ICAsIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KGZhbHNlKQorICAgICwgbV9pc0Rp
c3BhdGNoaW5nVW5sb2FkRXZlbnQoZmFsc2UpCiAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCiAg
ICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHNDbGVhcihm
YWxzZSkKQEAgLTUxNiwxNCArNTE3LDE0IEBACiAgICAgICAgICAgICAgICAgTm9kZSogY3VycmVu
dEZvY3VzZWROb2RlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudEZvY3VzZWROb2RlKQogICAgICAgICAgICAgICAgICAgICBj
dXJyZW50Rm9jdXNlZE5vZGUtPmFib3V0VG9VbmxvYWQoKTsKLSAgICAgICAgICAgICAgICBtX3Vu
bG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2lzRGlz
cGF0Y2hpbmdVbmxvYWRFdmVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUt
PmRvbVdpbmRvdygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBvbGlj
eSA9PSBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5pblBhZ2VDYWNoZSgpKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBtX2Zy
YW1lLT5kb21XaW5kb3coKS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgbV93
YXNVbmxvYWRFdmVudEVtaXR0ZWQgPSB0cnVlOwpAQCAtMTkwNyw3ICsxOTA4LDcgQEAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVk
KQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJMLCBuZXdMb2FkVHlwZSwgaXNGb3Jt
U3VibWlzc2lvbiwgZXZlbnQpOwpAQCAtMjAzMyw3ICsyMDM0LDcgQEAKIAogICAgIEFTU0VSVCht
X2ZyYW1lLT52aWV3KCkpOwogCi0gICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQp
CisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQogICAgICAgICByZXR1cm47CiAK
ICAgICBwb2xpY3lDaGVja2VyKCktPnNldExvYWRUeXBlKHR5cGUpOwpAQCAtMjI3NSw3ICsyMjc2
LDcgQEAKIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3BBbGxMb2FkZXJzKERhdGFiYXNlUG9saWN5IGRh
dGFiYXNlUG9saWN5KQogewogICAgIEFTU0VSVCghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSk7Ci0gICAgaWYgKG1fdW5sb2FkRXZlbnRC
ZWluZ0Rpc3BhdGNoZWQpCisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRo
aW4gdGhpcyBtZXRob2QsIGluZmluaXRlIHJlY3Vyc2lvbiBjYW4gb2NjdXIgKDM0NDIyMTgpLiBB
dm9pZCB0aGlzLgpAQCAtMzQzMiw3ICszNDMzLDEwIEBACiAgICAgLy8gICAgICAgaXMgdGhlIHVz
ZXIgcmVzcG9uZGluZyBDYW5jZWwgdG8gdGhlIGZvcm0gcmVwb3N0IG5hZyBzaGVldC4KICAgICAv
LyAgICAyKSBVc2VyIHJlc3BvbmRlZCBDYW5jZWwgdG8gYW4gYWxlcnQgcG9wcGVkIHVwIGJ5IHRo
ZSBiZWZvcmUgdW5sb2FkIGV2ZW50IGhhbmRsZXIuCiAgICAgLy8gVGhlICJiZWZvcmUgdW5sb2Fk
IiBldmVudCBoYW5kbGVyIHJ1bnMgb25seSBmb3IgdGhlIG1haW4gZnJhbWUuCisgICAgQVNTRVJU
KCFtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudCk7CisgICAgbV9pc0Rpc3BhdGNoaW5n
QmVmb3JlVW5sb2FkRXZlbnQgPSB0cnVlOwogICAgIGJvb2wgY2FuQ29udGludWUgPSBzaG91bGRD
b250aW51ZSAmJiAoIWlzTG9hZGluZ01haW5GcmFtZSgpIHx8IG1fZnJhbWUtPnNob3VsZENsb3Nl
KCkpOworICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gZmFsc2U7CiAKICAg
ICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3Ig
YSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0byBpZ25v
cmUgaXQsIHRoZW4gd2UgCkBAIC0zNjI2LDEwICszNjMwLDEwIEBACiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OnBhZ2VIaWRkZW4oKQogewotICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0
cnVlOworICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICBpZiAobV9m
cmFtZS0+ZG9tV2luZG93KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRj
aEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCwgdHJ1ZSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIG1fdW5sb2FkRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgPSBmYWxzZTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCA9IGZh
bHNlOwogCiAgICAgLy8gU2VuZCBwYWdlaGlkZSBldmVudCBmb3Igc3ViZnJhbWVzIGFzIHdlbGwK
ICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3Qu
aAkocmV2aXNpb24gNTIyMDEpCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDEwICszMCwxNSBAQAogCiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAg
ICAgY2xhc3MgRG9jTG9hZGVyOworICAgIAorICAgIGVudW0gT3V0bGl2ZVBhZ2VQb2xpY3kgewor
ICAgICAgICBEb05vdE91dGxpdmVQYWdlLAorICAgICAgICBPdXRsaXZlUGFnZQorICAgIH07CiAK
ICAgICBjbGFzcyBSZXF1ZXN0IDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFJlcXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVu
dGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mp
OworICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNy
ZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAgICAgICAgIH5SZXF1ZXN0KCk7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC00
OSw2ICs1NCw4IEBACiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2hvdWxkRG9TZWN1cml0
eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREb1NlY3VyaXR5Q2hlY2s7IH0KICAgICAg
ICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9zZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9CiAgICAgICAgIAorICAgICAgICBPdXRsaXZlUGFnZVBv
bGljeSBzaG91bGRPdXRsaXZlUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkT3V0bGl2ZVBh
Z2U7IH0gCisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX2J1
ZmZlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fb2JqZWN0OwpAQCAtNTYsNiArNjMsNyBA
QAogICAgICAgICBib29sIG1faW5jcmVtZW50YWw7CiAgICAgICAgIGJvb2wgbV9tdWx0aXBhcnQ7
CiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3VyaXR5Q2hlY2s7Cisg
ICAgICAgIGNvbnN0IE91dGxpdmVQYWdlUG9saWN5IG1fc2hvdWxkT3V0bGl2ZVBhZ2U7CiAgICAg
ICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwogICAgIH07CiAKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RG9jTG9hZGVyLmNwcAkocmV2aXNpb24gNTIyMDEpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1
ZGUgIlJlcXVlc3QuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAKQEAgLTUyLDYgKzUzLDcgQEAKICAgICA6IG1fY2FjaGUoY2FjaGUoKSkKICAg
ICAsIG1fZG9jKGRvYykKICAgICAsIG1fcmVxdWVzdENvdW50KDApCisgICAgLCBtX3JlcXVlc3Rz
VGhhdE91dGxpdmVQYWdlQ291bnQoMCkKICAgICAsIG1fYXV0b0xvYWRJbWFnZXModHJ1ZSkKICAg
ICAsIG1fbG9hZEluUHJvZ3Jlc3MoZmFsc2UpCiAgICAgLCBtX2FsbG93U3RhbGVSZXNvdXJjZXMo
ZmFsc2UpCkBAIC0zNDksMTUgKzM1MSwyNSBAQAogICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2Fk
ZWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShyZXNvdXJjZSk7CiB9CiAKLXZvaWQgRG9jTG9hZGVy
OjppbmNyZW1lbnRSZXF1ZXN0Q291bnQoKQordm9pZCBEb2NMb2FkZXI6OmFkZFJlcXVlc3QoUmVx
dWVzdCogcmVxdWVzdCkKIHsKICAgICArK21fcmVxdWVzdENvdW50OworICAgIGlmIChyZXF1ZXN0
LT5zaG91bGRPdXRsaXZlUGFnZSgpKSB7CisgICAgICAgIGlmICghbV9yZXF1ZXN0c1RoYXRPdXRs
aXZlUGFnZUNvdW50KyspCisgICAgICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdHNUaGF0T3V0bGl2
ZVBhZ2UgPSBtX2RvYy0+ZnJhbWUoKTsKKyAgICB9CisgICAgICAgIAogfQogCi12b2lkIERvY0xv
YWRlcjo6ZGVjcmVtZW50UmVxdWVzdENvdW50KCkKK3ZvaWQgRG9jTG9hZGVyOjpyZW1vdmVSZXF1
ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgLS1tX3JlcXVlc3RDb3VudDsKKyAgICBpZiAo
cmVxdWVzdC0+c2hvdWxkT3V0bGl2ZVBhZ2UoKSkgeworICAgICAgICBpZiAoIS0tbV9yZXF1ZXN0
c1RoYXRPdXRsaXZlUGFnZUNvdW50KQorICAgICAgICAgICAgbV9mcmFtZUZvclJlcXVlc3RzVGhh
dE91dGxpdmVQYWdlID0gMDsKKyAgICB9CiAgICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID4gLTEp
OworICAgIEFTU0VSVChtX3JlcXVlc3RzVGhhdE91dGxpdmVQYWdlQ291bnQgPiAtMSk7CiB9CiAK
IGludCBEb2NMb2FkZXI6OnJlcXVlc3RDb3VudCgpCkBAIC0zNjcsNiArMzc5LDExIEBACiAgICAg
cmV0dXJuIG1fcmVxdWVzdENvdW50OwogfQogICAgIAorRnJhbWUqIERvY0xvYWRlcjo6ZnJhbWVG
b3JSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QtPnNob3Vs
ZE91dGxpdmVQYWdlKCkgPyBtX2ZyYW1lRm9yUmVxdWVzdHNUaGF0T3V0bGl2ZVBhZ2UuZ2V0KCkg
OiBmcmFtZSgpOworfQorCiB2b2lkIERvY0xvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29s
IHJlZmVyZW5jZWRGcm9tQm9keSkKIHsKICAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jLT5i
b2R5KCkgJiYgbV9kb2MtPmJvZHkoKS0+cmVuZGVyZXIoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDUyMjAxKQorKysgV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMyArNjEsMTMgQEAKICNl
bmRpZgogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3Vy
aXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250
ZW50U25pZmYpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3Vy
aXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5IG91dGxpdmVQYWdlLCBib29sIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgRnJhbWVMb2FkZXIqIGZsID0gZnJhbWUtPmxv
YWRlcigpOwotICAgIGlmIChzZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZmwt
PnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8IGZsLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpLT5pc1N0b3BwaW5nKCkpKQorICAgIGlmIChvdXRsaXZlUGFnZSA9PSBEb05vdE91dGxp
dmVQYWdlICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0OwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRG9jTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9h
ZGVyLmgJKHJldmlzaW9uIDUyMjAxKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkyLDkg
KzkzLDExIEBACiAgICAgCiAgICAgdm9pZCBzZXRBbGxvd1N0YWxlUmVzb3VyY2VzKGJvb2wgYWxs
b3dTdGFsZVJlc291cmNlcykgeyBtX2FsbG93U3RhbGVSZXNvdXJjZXMgPSBhbGxvd1N0YWxlUmVz
b3VyY2VzOyB9CiAKLSAgICB2b2lkIGluY3JlbWVudFJlcXVlc3RDb3VudCgpOwotICAgIHZvaWQg
ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgdm9pZCBhZGRSZXF1ZXN0KFJlcXVlc3QqKTsK
KyAgICB2b2lkIHJlbW92ZVJlcXVlc3QoUmVxdWVzdCopOwogICAgIGludCByZXF1ZXN0Q291bnQo
KTsKKyAgICBpbnQgcmVxdWVzdHNUaGF0T3V0bGl2ZVBhZ2VDb3VudCgpIHsgcmV0dXJuIG1fcmVx
dWVzdHNUaGF0T3V0bGl2ZVBhZ2VDb3VudDsgfQorICAgIEZyYW1lKiBmcmFtZUZvclJlcXVlc3Qo
UmVxdWVzdCopOwogICAgIAogICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOwogICAgIHZvaWQgY2xl
YXJQZW5kaW5nUHJlbG9hZHMoKTsKQEAgLTExNiw2ICsxMTksOCBAQAogICAgIERvY3VtZW50KiBt
X2RvYzsKICAgICAKICAgICBpbnQgbV9yZXF1ZXN0Q291bnQ7CisgICAgaW50IG1fcmVxdWVzdHNU
aGF0T3V0bGl2ZVBhZ2VDb3VudDsKKyAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JSZXF1ZXN0
c1RoYXRPdXRsaXZlUGFnZTsKICAgICAKICAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+
IG1fcHJlbG9hZHM7CiAgICAgc3RydWN0IFBlbmRpbmdQcmVsb2FkIHsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNw
cAkocmV2aXNpb24gNTIyMDEpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjAsNyArMTIwLDEwIEBACiB2b2lkIExvYWRlcjo6bG9hZChEb2NMb2FkZXIq
IGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3JlbWVudGFsLCBT
ZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcykKIHsKICAgICBBU1NFUlQoZG9jTG9hZGVyKTsKLSAgICBSZXF1ZXN0KiByZXF1ZXN0
ID0gbmV3IFJlcXVlc3QoZG9jTG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5
Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIE91dGxpdmVQYWdlUG9saWN5
IHNob3VsZE91dGxpdmVQYWdlID0gcmVzb3VyY2UtPmlzSW1hZ2UoKSAmJiBkb2NMb2FkZXIgJiYg
ZG9jTG9hZGVyLT5mcmFtZSgpIAorICAgICAgICAmJiBkb2NMb2FkZXItPmZyYW1lKCktPmxvYWRl
cigpLT5pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQoKQorICAgICAgICA/IE91dGxpdmVQYWdlIDog
RG9Ob3RPdXRsaXZlUGFnZTsKKyAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZG9j
TG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNob3VsZE91dGxp
dmVQYWdlLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKIAogICAgIFJlZlB0cjxIb3N0PiBo
b3N0OwogICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2UtPnVybCgpKTsKQEAg
LTEzNyw5ICsxNDAsMTEgQEAKICAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+aGFzUmVxdWVz
dHMoKTsKICAgICBQcmlvcml0eSBwcmlvcml0eSA9IGRldGVybWluZVByaW9yaXR5KHJlc291cmNl
KTsKICAgICBob3N0LT5hZGRSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKLSAgICBkb2NMb2Fk
ZXItPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOwotCi0gICAgaWYgKHByaW9yaXR5ID4gTG93IHx8
ICF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVxdWVzdHMpIHsKKyAgICBkb2NM
b2FkZXItPmFkZFJlcXVlc3QocmVxdWVzdCk7CisgICAgCisgICAgLy8gSWYgd2UncmUgZG9pbmcg
YSBsb2FkIHRoYXQgY2FuIG91dGxpdmUgdGhlIGN1cnJlbnQgcGFnZSwgd2UgZG9uJ3Qgd2FudCB0
aGlzIHJlcXVlc3QgdG8gYmxvY2sgbmF2aWdhdGluZworICAgIC8vIGF3YXkgZnJvbSB0aGUgY3Vy
cmVudCBkb2N1bWVudC4KKyAgICBpZiAocmVxdWVzdC0+c2hvdWxkT3V0bGl2ZVBhZ2UoKSA9PSBE
b05vdE91dGxpdmVQYWdlICYmIChwcmlvcml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQ
RmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBp
bXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZlUGVuZGlu
Z1JlcXVlc3RzKHByaW9yaXR5KTsKICAgICB9IGVsc2UgewpAQCAtMjQ5LDcgKzI1NCw3IEBACiAK
ICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgCi0gICAgQVNTRVJUKGRv
Y0xvYWRlci0+cmVxdWVzdENvdW50KCkgPT0gKGRvY0xvYWRlci0+bG9hZEluUHJvZ3Jlc3MoKSA/
IDEgOiAwKSk7CisgICAgQVNTRVJUKGRvY0xvYWRlci0+cmVxdWVzdHNUaGF0T3V0bGl2ZVBhZ2VD
b3VudCgpIHx8IChkb2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09IChkb2NMb2FkZXItPmxvYWRJ
blByb2dyZXNzKCkgPyAxIDogMCkpKTsKIH0KIAogTG9hZGVyOjpIb3N0OjpIb3N0KGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKQEAgLTM0Niwx
NiArMzUxLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8
U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9j
TG9hZGVyLT5kb2MoKS0+ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVz
dCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKSk7CisgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9h
ZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmZyYW1lRm9yUmVxdWVz
dChyZXF1ZXN0KSwKKyAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgcmVxdWVzdC0+
c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVlc3QtPnNob3VsZE91dGxpdmVQYWdlKCksIHJl
cXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CiAgICAgICAgIGlmIChsb2FkZXIp
IHsKICAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVsZWFzZSgpLCBy
ZXF1ZXN0KTsKICAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnNldFJlcXVl
c3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKICNpZiBSRVFVRVNUX0RFQlVHCiAgICAgICAgICAg
ICBwcmludGYoIkhPU1QgJXMgQ09VTlQgJWQgTE9BRElORyAlc1xuIiwgcmVzb3VyY2VSZXF1ZXN0
LnVybCgpLmhvc3QoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSwg
cmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKICNlbmRp
ZgotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIAotICAgICAgICAgICAgZG9jTG9hZGVyLT5k
ZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRv
Y0xvYWRlci0+cmVtb3ZlUmVxdWVzdChyZXF1ZXN0KTsKICAgICAgICAgICAgIGRvY0xvYWRlci0+
c2V0TG9hZEluUHJvZ3Jlc3ModHJ1ZSk7CiAgICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNv
dXJjZSgpLT5lcnJvcigpOwogICAgICAgICAgICAgZG9jTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVz
cyhmYWxzZSk7CkBAIC0zNzksNyArMzg0LDcgQEAKICAgICAvLyB0aGUgZG9jTG9hZGVyIHRoYXQg
aXQgd2lsbCBkZWxldGUgd2hlbiB0aGUgZG9jdW1lbnQgZ2V0cyBkZWxldGVkLgogICAgIFJlZlB0
cjxEb2N1bWVudD4gcHJvdGVjdG9yKGRvY0xvYWRlci0+ZG9jKCkpOwogICAgIGlmICghcmVxdWVz
dC0+aXNNdWx0aXBhcnQoKSkKLSAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291
bnQoKTsKKyAgICAgICAgZG9jTG9hZGVyLT5yZW1vdmVSZXF1ZXN0KHJlcXVlc3QpOwogCiAgICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKTsKICAg
ICBBU1NFUlQoIXJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKQEAgLTQyNyw3ICs0
MzIsNyBAQAogICAgIC8vIHRoZSBkb2NMb2FkZXIgdGhhdCBpdCB3aWxsIGRlbGV0ZSB3aGVuIHRo
ZSBkb2N1bWVudCBnZXRzIGRlbGV0ZWQuCiAgICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3Io
ZG9jTG9hZGVyLT5kb2MoKSk7CiAgICAgaWYgKCFyZXF1ZXN0LT5pc011bHRpcGFydCgpKQotICAg
ICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgICAgICBkb2NMb2Fk
ZXItPnJlbW92ZVJlcXVlc3QocmVxdWVzdCk7CiAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UgPSByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpOwogICAgIApAQCAtNDcyLDcgKzQ3Nyw3IEBA
CiAgICAgICAgICAgICAvLyAzMDQgTm90IG1vZGlmaWVkIC8gVXNlIGxvY2FsIGNvcHkKICAgICAg
ICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShsb2FkZXIpOwogICAgICAgICAgICAgbG9h
ZGVyLT5jbGVhckNsaWVudCgpOwotICAgICAgICAgICAgcmVxdWVzdC0+ZG9jTG9hZGVyKCktPmRl
Y3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgICAgICAgICAgcmVxdWVzdC0+ZG9jTG9hZGVyKCkt
PnJlbW92ZVJlcXVlc3QocmVxdWVzdCk7CiAKICAgICAgICAgICAgIC8vIEV4aXN0aW5nIHJlc291
cmNlIGlzIG9rLCBqdXN0IHVzZSBpdCB1cGRhdGluZyB0aGUgZXhwaXJhdGlvbiB0aW1lLgogICAg
ICAgICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0aW9uU3VjY2VlZGVkKHJlc291cmNlLCByZXNwb25z
ZSk7CkBAIC01MDQsNyArNTA5LDcgQEAKICAgICAgICAgcmVxdWVzdC0+c2V0SXNNdWx0aXBhcnQo
dHJ1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGlu
IGEgRG9jTG9hZGVyJ3MgcmVxdWVzdCBjb3VudAotICAgICAgICByZXF1ZXN0LT5kb2NMb2FkZXIo
KS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgICAgIHJlcXVlc3QtPmRvY0xvYWRlcigp
LT5yZW1vdmVSZXF1ZXN0KHJlcXVlc3QpOwogCiAgICAgICAgIC8vIElmIHdlIGdldCBhIG11bHRp
cGFydCByZXNwb25zZSwgd2UgbXVzdCBoYXZlIGEgaGFuZGxlCiAgICAgICAgIEFTU0VSVChsb2Fk
ZXItPmhhbmRsZSgpKTsKQEAgLTU1MCwxMCArNTU1LDEwIEBACiAgICAgUmVxdWVzdFF1ZXVlOjpp
dGVyYXRvciBlbmQgPSByZXF1ZXN0c1BlbmRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0UXVl
dWU6Oml0ZXJhdG9yIGl0ID0gcmVxdWVzdHNQZW5kaW5nLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gKml0OwotICAgICAgICBpZiAocmVxdWVz
dC0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0LT5zaG91
bGRPdXRsaXZlUGFnZSgpID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgcmVxdWVzdC0+ZG9jTG9hZGVy
KCkgPT0gZG9jTG9hZGVyKSB7CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKSk7CisgICAgICAgICAgICBkb2NMb2FkZXItPnJlbW92ZVJlcXVlc3Qo
cmVxdWVzdCk7CiAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKLSAgICAgICAgICAgIGRvY0xv
YWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgcmVtYWluaW5nLmFwcGVuZChyZXF1ZXN0KTsKICAgICB9CkBAIC01NzAsNyArNTc1LDcgQEAK
ICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsK
ICAgICBmb3IgKFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0g
ICAgICAgIGlmIChyLT5kb2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpCisgICAgICAgIGlmIChyLT5z
aG91bGRPdXRsaXZlUGFnZSgpID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgci0+ZG9jTG9hZGVyKCkg
PT0gZG9jTG9hZGVyKQogICAgICAgICAgICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVuZChpLT5maXJz
dC5nZXQoKSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDUyMjAxKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBA
CiAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxsYmFja3MgZnJv
bSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9sZCBsb2FkZXIu
CiAgICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxv
YWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5
Q2hlY2ssIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOworICAgICAgICBtX2xvYWRl
ciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywg
cmVxdWVzdCwgc2VjdXJpdHlDaGVjaywgRG9Ob3RPdXRsaXZlUGFnZSwgc2VuZExvYWRDYWxsYmFj
a3MsIHNuaWZmQ29udGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDUyMjAxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDYgKzMzMyw4IEBACiAgICAgdm9pZCBjb250
aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7CiAgICAgCiAgICAgYm9vbCBzdXBwcmVzc09w
ZW5lckluTmV3RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFt
ZTsgfQorICAgIAorICAgIGJvb2wgaXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQgfHwgbV9pc0Rpc3BhdGNoaW5n
VW5sb2FkRXZlbnQ7IH0KIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsK
IApAQCAtNDc5LDcgKzQ4MSw4IEBACiAKICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7
CiAgICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKLSAgICBib29sIG1fdW5sb2FkRXZl
bnRCZWluZ0Rpc3BhdGNoZWQ7CisgICAgYm9vbCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRF
dmVudDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50OwogICAgIGJvb2wgbV9p
c0NvbXBsZXRlOwogICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7CiAKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jl
cXVlc3QuY3BwCShyZXZpc2lvbiA1MjIwMSkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1SZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJj
ZSogb2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERv
U2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorUmVxdWVzdDo6
UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9v
bCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ss
IE91dGxpdmVQYWdlUG9saWN5IHNob3VsZE91dGxpdmVQYWdlLCBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MpCiAgICAgOiBtX29iamVjdChvYmplY3QpCiAgICAgLCBtX2RvY0xvYWRlcihk
b2NMb2FkZXIpCiAgICAgLCBtX2luY3JlbWVudGFsKGluY3JlbWVudGFsKQogICAgICwgbV9tdWx0
aXBhcnQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERvU2VjdXJpdHlDaGVjayhzaG91bGREb1NlY3Vy
aXR5Q2hlY2spCisgICAgLCBtX3Nob3VsZE91dGxpdmVQYWdlKHNob3VsZE91dGxpdmVQYWdlKQog
ICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3MpCiB7CiAgICAgbV9vYmplY3QtPnNldFJlcXVlc3QodGhpcyk7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDUyMjAxKQorKysgV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmlu
ZSBTdWJyZXNvdXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisj
aW5jbHVkZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVz
b3VyY2VMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlD
aGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1Bv
bGljeSA9IERvU2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQ
YWdlLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZiA9IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xp
ZW50ID0gMDsgfQogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1h
Z2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3Jl
dW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRp
ZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwg
Y29kZSAtOTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24v
aW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAt
IHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9j
dW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNl
IChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ct
cmVzb3VyY2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0
cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1z
ZWMucGwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VU
PiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3Bv
bnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291
cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+Cito
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlm
eS1kb25lLmh0bWwgLSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2
aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNw
b25zZSA8TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNl
Yy5wbCAtIGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1i
ZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1h
Z2UgbG9hZCBpbiB1bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2
aWdhdGUoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8odGFyZ2V0Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAg
IGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CisgICAgfQorfQorCitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5l
dyBJbWFnZSgxLCAxKTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEt
c2VjLnBsIjsKK30KKzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsi
IG9uYmVmb3JldW5sb2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJl
c291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dh
aXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAK
KzxodG1sPg0KKzxzY3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsNCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0N
Cis8L3NjcmlwdD4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVu
bG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251
bmxvYWQgaGFuZGxlcihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxO
U0Vycm9yIGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5k
bGVyLmh0bWwiPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dh
aXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3Qg
VVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1l
dGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNl
aXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2Rl
IDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNl
bmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlm
eS1kb25lLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEt
c2VjLnBsIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRw
IHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291
cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFu
ZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxl
ci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRs
ZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlv
biBuYXZpZ2F0ZSgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAg
ICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
VXAoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1n
ID0gbmV3IEltYWdlKDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3Vy
Y2UtMS1zZWMucGwiOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmln
YXRlKCk7IiBvbnVubG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJy
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTIyMDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0xNSAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzA0NTcuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5k
bGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1s
b2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTYgIEVucmljYSBDYXN1Y2NpICA8
ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45176</attachid>
            <date>2009-12-18 13:16:14 -0800</date>
            <delta_ts>2009-12-18 16:32:02 -0800</delta_ts>
            <desc>Attempt #3</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>24109</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjMyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMTItMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6
IAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6IFJlbmFtZSBtX3VubG9hZEV2ZW50
QmVpbmdEaXNwYXRjaGVkIHRvIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50LgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1bWVu
dExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeSk6IFNldCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKToKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppc0Rpc3BhdGNo
aW5nVW5sb2FkRmFtaWx5RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVxdWVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpSZXF1ZXN0KTogQWRkIE91dGxpdmVQYWdl
UG9saWN5IHRvIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMKKyAgICAgICAgKiBsb2FkZXIvUmVxdWVz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6KTogQWRkIE91dGxpdmVQYWdlUG9saWN5IGVudW0uCisg
ICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpzaG91bGRPdXRsaXZlUGFnZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZSk6IENoYW5nZSBvbmUgb2YgdGhlIHNlY3VyaXR5IGNoZWNrcyB0byBhbiBvdXRs
aXZlIHBhZ2UgY2hlY2suCisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6Cisg
ICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Omxv
YWQpOiBBZGQgT3V0bGl2ZVBhZ2VQb2xpY3kgdG8gUmVxdWVzdCBjb25zdHJ1Y3RvciBjYWxsLAor
ICAgICAgICAgICAgIGVuc3VyZSByZXF1ZXN0cyB0aGF0IHNob3VsZCBvdXRsaXZlIHBhZ2UgYXJl
IGRvbmUgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmNhbmNlbFJl
cXVlc3RzKTogUmVtb3ZlIGVuZGluZyBBU1NFUlQgc2luY2UgaXQgd2lsbCBub3cgYmUgaGFyZCB0
byBwcmVkaWN0IGhvdworICAgICAgICAgICAgIG1hbnkgcmVxdWVzdHMgbWlnaHQgcG9zc2libHkg
b3V0bGl2ZSBhIGNhbmNlbCBpbiBldmVyeSBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVy
OjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IFVzZSB0aGUgY29ycmVjdCBmcmFtZSBpbiB0
aGUgY2FzZSBvZiBhIHJlcXVlc3Qgb3V0bGl2aW5nIGl0cyBwYWdlLgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxQZW5kaW5nUmVxdWVzdHMpOiBFbnN1cmUgd2UgZG9uJ3Qg
Y2FuY2VsIHJlcXVlc3QgdGhhdCBzaG91bGQgb3V0bGl2ZSB0aGVpciBwYWdlLgorICAgICAgICAo
V2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyk6IEVuc3VyZSB3ZSBkb24ndCBj
YW5jZWwgcmVxdWVzdCB0aGF0IHNob3VsZCBvdXRsaXZlIHRoZWlyIHBhZ2UuCisKIDIwMDktMTIt
MTggIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENocm9taXVtIGJ1
aWxkIGZpeApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNTIzMjApCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsx
ODAsOCBAQAogICAgICwgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRDYWxsSW1wbGljaXRDbG9zZShmYWxzZSkKICAgICAsIG1fd2FzVW5sb2FkRXZl
bnRFbWl0dGVkKGZhbHNlKQotICAgICwgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZChmYWxz
ZSkKKyAgICAsIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KGZhbHNlKQorICAgICwg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQoZmFsc2UpCiAgICAgLCBtX2lzQ29tcGxldGUoZmFs
c2UpCiAgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHND
bGVhcihmYWxzZSkKQEAgLTUxNywxNCArNTE4LDE2IEBACiAgICAgICAgICAgICAgICAgTm9kZSog
Y3VycmVudEZvY3VzZWROb2RlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvY3VzZWROb2RlKQogICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50Rm9jdXNlZE5vZGUtPmFib3V0VG9VbmxvYWQoKTsKLSAgICAgICAgICAgICAg
ICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIW1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICAgICAgICAgICAgICBtX2lz
RGlzcGF0Y2hpbmdVbmxvYWRFdmVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWUtPmRvbVdpbmRvdygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBv
bGljeSA9PSBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5z
aXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBt
X2ZyYW1lLT5kb21XaW5kb3coKS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgICAgICAg
ICAgICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICBtX3dh
c1VubG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7CkBAIC0xOTA4LDcgKzE5MTEsNyBAQAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQp
CisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQogICAgICAgICByZXR1cm47CiAK
ICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbihuZXdVUkwsIG5ld0xvYWRUeXBlLCBpc0Zvcm1T
dWJtaXNzaW9uLCBldmVudCk7CkBAIC0yMDM0LDcgKzIwMzcsNyBAQAogCiAgICAgQVNTRVJUKG1f
ZnJhbWUtPnZpZXcoKSk7CiAKLSAgICBpZiAobV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCkK
KyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHBvbGljeUNoZWNrZXIoKS0+c2V0TG9hZFR5cGUodHlwZSk7CkBAIC0yMjc2LDcgKzIyNzks
NyBAQAogdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMoRGF0YWJhc2VQb2xpY3kgZGF0
YWJhc2VQb2xpY3kpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKLSAgICBpZiAobV91bmxvYWRFdmVudEJl
aW5nRGlzcGF0Y2hlZCkKKyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHdpdGhp
biB0aGlzIG1ldGhvZCwgaW5maW5pdGUgcmVjdXJzaW9uIGNhbiBvY2N1ciAoMzQ0MjIxOCkuIEF2
b2lkIHRoaXMuCkBAIC0zNDMzLDcgKzM0MzYsMTEgQEAKICAgICAvLyAgICAgICBpcyB0aGUgdXNl
ciByZXNwb25kaW5nIENhbmNlbCB0byB0aGUgZm9ybSByZXBvc3QgbmFnIHNoZWV0LgogICAgIC8v
ICAgIDIpIFVzZXIgcmVzcG9uZGVkIENhbmNlbCB0byBhbiBhbGVydCBwb3BwZWQgdXAgYnkgdGhl
IGJlZm9yZSB1bmxvYWQgZXZlbnQgaGFuZGxlci4KICAgICAvLyBUaGUgImJlZm9yZSB1bmxvYWQi
IGV2ZW50IGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KKyAgICBBU1NFUlQo
IW1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdC
ZWZvcmVVbmxvYWRFdmVudCA9IHRydWU7CiAgICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENv
bnRpbnVlICYmICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwgbV9mcmFtZS0+c2hvdWxkQ2xvc2Uo
KSk7CisgICAgQVNTRVJUKG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBt
X2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudCA9IGZhbHNlOwogCiAgICAgaWYgKCFjYW5D
b250aW51ZSkgewogICAgICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVk
aXJlY3QsIGJ1dCB0aGUgcG9saWN5IGRlbGVnYXRlIGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVu
IHdlIApAQCAtMzYyNywxMCArMzYzNCwxMiBAQAogCiB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlk
ZGVuKCkKIHsKLSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICBB
U1NFUlQoIW1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdV
bmxvYWRFdmVudCA9IHRydWU7CiAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpKQogICAgICAg
ICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIHRydWUpLCBtX2ZyYW1lLT5kb2N1
bWVudCgpKTsKLSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7CisgICAg
QVNTRVJUKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdV
bmxvYWRFdmVudCA9IGZhbHNlOwogCiAgICAgLy8gU2VuZCBwYWdlaGlkZSBldmVudCBmb3Igc3Vi
ZnJhbWVzIGFzIHdlbGwKICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygp
KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1JlcXVlc3QuaAkocmV2aXNpb24gNTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE2ICsyNCwyMyBAQAogI2RlZmluZSBSZXF1ZXN0
X2gKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBEb2NMb2FkZXI7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgCisgICAgZW51bSBPdXRsaXZlUGFnZVBvbGljeSB7CisgICAgICAgIERvTm90
T3V0bGl2ZVBhZ2UsCisgICAgICAgIE91dGxpdmVQYWdlCisgICAgfTsKIAogICAgIGNsYXNzIFJl
cXVlc3QgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVxdWVz
dChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5
Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgICAgIFJl
cXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1
cml0eUNoZWNrUG9saWN5LCBPdXRsaXZlUGFnZVBvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKTsKICAgICAgICAgflJlcXVlc3QoKTsKICAgICAgICAgCiAgICAgICAgIFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAgLTQ5LDYgKzU2LDkgQEAK
ICAgICAgICAgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2soKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZERvU2VjdXJpdHlDaGVjazsgfQogICAgICAgICBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3M7IH0KICAgICAgICAgCisgICAgICAgIE91dGxpdmVQYWdlUG9saWN5IHNob3VsZE91
dGxpdmVQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRPdXRsaXZlUGFnZTsgfQorICAgICAg
ICBGcmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAg
VmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7
CkBAIC01Niw3ICs2Niw5IEBACiAgICAgICAgIGJvb2wgbV9pbmNyZW1lbnRhbDsKICAgICAgICAg
Ym9vbCBtX211bHRpcGFydDsKICAgICAgICAgU2VjdXJpdHlDaGVja1BvbGljeSBtX3Nob3VsZERv
U2VjdXJpdHlDaGVjazsKKyAgICAgICAgY29uc3QgT3V0bGl2ZVBhZ2VQb2xpY3kgbV9zaG91bGRP
dXRsaXZlUGFnZTsKICAgICAgICAgYm9vbCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Cisg
ICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZUZvclJlcXVlc3RUaGF0T3V0bGl2ZXNQYWdlOwog
ICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEzICs2MSwxMyBAQAogI2VuZGlm
CiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlD
aGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZikKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlD
aGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2UsIGJvb2wgc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGcmFtZUxvYWRlciogZmwgPSBmcmFtZS0+bG9hZGVy
KCk7Ci0gICAgaWYgKHNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmIChmbC0+c3Rh
dGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCktPmlzU3RvcHBpbmcoKSkpCisgICAgaWYgKG91dGxpdmVQYWdlID09IERvTm90T3V0bGl2ZVBh
Z2UgJiYgKGZsLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZl
RG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3Q7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJ
KHJldmlzaW9uIDUyMzIwKQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDcgKzEyMCwxNiBAQAogdm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBk
b2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwgU2Vj
dXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MpCiB7CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAgUmVxdWVzdCogcmVxdWVzdCA9
IG5ldyBSZXF1ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNo
ZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUg
bG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sYW9kIGV2ZW50LCB3ZSB3YW50IHRvIGFsbG93
IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAvLyB0aGF0IHdlIGFyZSBsZWF2
aW5nLiAgU29tZSBzaXRlcyAobW9zdCBjb21tb25seSBhZCBuZXR3b3JrcykgcmVseSBvbiBpbWFn
ZSByZXF1ZXN0cyBpbiBiZWZvcmV1bmxvYWQKKyAgICAvLyBvciB1bmxvYWQgZXZlbnQgaGFuZGxl
cnMgdG8gdHJhY2sgdGltZSBzcGVudCBvbiB0aGUgcGFnZS4gIFRoaXMgd2lsbCBhbGxvdyB0aGVt
IHRvIGRvIHRoZSB0cmFja2luZworICAgIC8vIHRoYXQgdGhleSBhcmUgZ29pbmcgdG8gZG8gYW55
d2F5LCBidXQgYXN5bmNocm9ub3VzbHkgc28gdGhhdCB0aGV5IGRvbid0IHNsb3cgZG93biBuYXZp
Z2F0aW9uLgorICAgIE91dGxpdmVQYWdlUG9saWN5IHNob3VsZE91dGxpdmVQYWdlID0gcmVzb3Vy
Y2UtPmlzSW1hZ2UoKSAmJiBkb2NMb2FkZXIgJiYgZG9jTG9hZGVyLT5mcmFtZSgpIAorICAgICAg
ICAmJiBkb2NMb2FkZXItPmZyYW1lKCktPmxvYWRlcigpLT5pc0Rpc3BhdGNoaW5nVW5sb2FkRmFt
aWx5RXZlbnQoKQorICAgICAgICA/IE91dGxpdmVQYWdlIDogRG9Ob3RPdXRsaXZlUGFnZTsKKyAg
ICAKKyAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZG9jTG9hZGVyLCByZXNvdXJj
ZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNob3VsZE91dGxpdmVQYWdlLCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKTsKIAogICAgIFJlZlB0cjxIb3N0PiBob3N0OwogICAgIEtVUkwg
dXJsKFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2UtPnVybCgpKTsKQEAgLTEzOCw4ICsxNDcsMTAg
QEAKICAgICBQcmlvcml0eSBwcmlvcml0eSA9IGRldGVybWluZVByaW9yaXR5KHJlc291cmNlKTsK
ICAgICBob3N0LT5hZGRSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKICAgICBkb2NMb2FkZXIt
PmluY3JlbWVudFJlcXVlc3RDb3VudCgpOwotCi0gICAgaWYgKHByaW9yaXR5ID4gTG93IHx8ICF1
cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVxdWVzdHMpIHsKKyAgICAKKyAgICAv
LyBXZSB3YW50IHRvIGd1YXJhbnRlZSB0aGF0IHJlcXVlc3RzIHdoaWNoIG91dGxpdmUgdGhlIHBh
Z2UgYXJlIHJ1biBhc3luY2hyb25vdXNseSwgc28gb25seQorICAgIC8vIHNlcnZlIHRoZSByZXF1
ZXN0IGltbWVkaWF0ZWx5IGlmIHRoZSByZXF1ZXN0IGRvZXNuJ3QgbmVlZCB0byBvdXRsaXZlIHRo
ZSBwYWdlLgorICAgIGlmIChyZXF1ZXN0LT5zaG91bGRPdXRsaXZlUGFnZSgpID09IERvTm90T3V0
bGl2ZVBhZ2UgJiYgKHByaW9yaXR5ID4gTG93IHx8ICF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHko
KSB8fCAhaGFkUmVxdWVzdHMpKSB7CiAgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFu
dCByZXNvdXJjZXMgaW1tZWRpYXRlbHkKICAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5nUmVxdWVz
dHMocHJpb3JpdHkpOwogICAgIH0gZWxzZSB7CkBAIC0yNDgsOCArMjU5LDYgQEAKICAgICB9CiAK
ICAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAgCi0gICAgQVNTRVJUKGRv
Y0xvYWRlci0+cmVxdWVzdENvdW50KCkgPT0gKGRvY0xvYWRlci0+bG9hZEluUHJvZ3Jlc3MoKSA/
IDEgOiAwKSk7CiB9CiAKIExvYWRlcjo6SG9zdDo6SG9zdChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCkBAIC0zNDYsOCArMzU1LDggQEAKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRl
cj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmRvYygpLT5m
cmFtZSgpLAotICAgICAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91
bGREb1NlY3VyaXR5Q2hlY2soKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
KTsKKyAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKHJlcXVlc3QtPmZyYW1lKCksCisgICAgICAgICAgICB0aGlzLCByZXNv
dXJjZVJlcXVlc3QsIHJlcXVlc3QtPnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5z
aG91bGRPdXRsaXZlUGFnZSgpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkp
OwogICAgICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5h
ZGQobG9hZGVyLnJlbGVhc2UoKSwgcmVxdWVzdCk7CiAgICAgICAgICAgICByZXF1ZXN0LT5jYWNo
ZWRSZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CkBAIC01NTAs
NyArNTU5LDcgQEAKICAgICBSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IHJlcXVlc3RzUGVu
ZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQgPSByZXF1ZXN0
c1BlbmRpbmcuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlcXVlc3QqIHJl
cXVlc3QgPSAqaXQ7Ci0gICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKSA9PSBkb2NMb2Fk
ZXIpIHsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnNob3VsZE91dGxpdmVQYWdlKCkgPT0gRG9Ob3RP
dXRsaXZlUGFnZSAmJiByZXF1ZXN0LT5kb2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpIHsKICAgICAg
ICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKICAgICAg
ICAgICAgIGRlbGV0ZSByZXF1ZXN0OwogICAgICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoKTsKQEAgLTU3MCw3ICs1NzksNyBAQAogICAgIFJlcXVlc3RNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdE1hcDo6
aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsK
ICAgICAgICAgUmVxdWVzdCogciA9IGktPnNlY29uZDsKLSAgICAgICAgaWYgKHItPmRvY0xvYWRl
cigpID09IGRvY0xvYWRlcikKKyAgICAgICAgaWYgKHItPnNob3VsZE91dGxpdmVQYWdlKCkgPT0g
RG9Ob3RPdXRsaXZlUGFnZSAmJiByLT5kb2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpCiAgICAgICAg
ICAgICBsb2FkZXJzVG9DYW5jZWwuYXBwZW5kKGktPmZpcnN0LmdldCgpKTsKICAgICB9CiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNp
b24gNTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAKIAogICAgICAgICAvLyBDbGVhciB0
aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxiYWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xkIGxvYWRlci4KICAgICAgICAgbV9sb2FkZXIgPSAw
OwotICAgICAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUobV9kb2N1bWVu
dC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgc2VjdXJpdHlDaGVjaywgc2VuZExvYWRDYWxsYmFj
a3MsIHNuaWZmQ29udGVudCk7CisgICAgICAgIG1fbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6
OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBzZWN1cml0eUNoZWNr
LCBEb05vdE91dGxpdmVQYWdlLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNp
b24gNTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzMsNiArMzMzLDggQEAKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1p
dEZvcm0oKTsKICAgICAKICAgICBib29sIHN1cHByZXNzT3BlbmVySW5OZXdGcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lOyB9CisgICAgCisgICAgYm9vbCBp
c0Rpc3BhdGNoaW5nVW5sb2FkRmFtaWx5RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGlzcGF0
Y2hpbmdCZWZvcmVVbmxvYWRFdmVudCB8fCBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudDsgfQog
CiAgICAgc3RhdGljIE9iamVjdENvbnRlbnRUeXBlIGRlZmF1bHRPYmplY3RDb250ZW50VHlwZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCkBAIC00NzksNyArNDgx
LDggQEAKIAogICAgIGJvb2wgbV9kaWRDYWxsSW1wbGljaXRDbG9zZTsKICAgICBib29sIG1fd2Fz
VW5sb2FkRXZlbnRFbWl0dGVkOwotICAgIGJvb2wgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hl
ZDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50OworICAgIGJvb2wg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQ7CiAgICAgYm9vbCBtX2lzQ29tcGxldGU7CiAgICAg
Ym9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHJldmlz
aW9uIDUyMzIwKQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDI2ICsyMiwzNiBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgog
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogb2Jq
ZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJp
dHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorUmVxdWVzdDo6UmVxdWVz
dChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNy
ZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIE91dGxp
dmVQYWdlUG9saWN5IHNob3VsZE91dGxpdmVQYWdlLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MpCiAgICAgOiBtX29iamVjdChvYmplY3QpCiAgICAgLCBtX2RvY0xvYWRlcihkb2NMb2Fk
ZXIpCiAgICAgLCBtX2luY3JlbWVudGFsKGluY3JlbWVudGFsKQogICAgICwgbV9tdWx0aXBhcnQo
ZmFsc2UpCiAgICAgLCBtX3Nob3VsZERvU2VjdXJpdHlDaGVjayhzaG91bGREb1NlY3VyaXR5Q2hl
Y2spCisgICAgLCBtX3Nob3VsZE91dGxpdmVQYWdlKHNob3VsZE91dGxpdmVQYWdlKQogICAgICwg
bV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7
CiAgICAgbV9vYmplY3QtPnNldFJlcXVlc3QodGhpcyk7CisgICAgaWYgKHNob3VsZE91dGxpdmVQ
YWdlID09IE91dGxpdmVQYWdlKQorICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRPdXRsaXZl
c1BhZ2UgPSBkb2NMb2FkZXItPmZyYW1lKCk7CiB9CiAKIFJlcXVlc3Q6On5SZXF1ZXN0KCkKIHsK
ICAgICBtX29iamVjdC0+c2V0UmVxdWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0Ojpm
cmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkT3V0bGl2ZVBhZ2UgPT0gT3V0bGl2
ZVBhZ2UgPyBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRPdXRsaXZlc1BhZ2UuZ2V0KCkgOiBtX2RvY0xv
YWRlci0+ZnJhbWUoKTsKK30KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDUyMzIwKQorKysgV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2Rl
ZmluZSBTdWJyZXNvdXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
CisjaW5jbHVkZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3Vi
cmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSos
IFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJp
dHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVj
a1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxp
dmVQYWdlLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZiA9IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1f
Y2xpZW50ID0gMDsgfQogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
aW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVm
b3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRs
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAt
IGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFp
biwgY29kZSAtOTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRt
bCAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4g
ZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93
YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3Bv
bnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Ns
b3ctcmVzb3VyY2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwg
aHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2Ut
MS1zZWMucGwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2Qg
R0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJl
c3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+
CitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5v
dGlmeS1kb25lLmh0bWwgLSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVS
ZXNwb25zZSA8TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+Cito
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0x
LXNlYy5wbCAtIGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+
SW1hZ2UgbG9hZCBpbiB1bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24g
bmF2aWdhdGUoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAg
ICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7CisgICAgfQorfQorCitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9
IG5ldyBJbWFnZSgxLCAxKTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNl
LTEtc2VjLnBsIjsKK30KKzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUo
KTsiIG9uYmVmb3JldW5sb2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9
InJlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkg
QEAKKzxodG1sPg0KKzxzY3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsNCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAg
IH0NCis8L3NjcmlwdD4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWlu
LXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEg
b251bmxvYWQgaGFuZGxlcihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6
IDxOU0Vycm9yIGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJM
ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1o
YW5kbGVyLmh0bWwiPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVl
c3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4
MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRw
IG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRS
ZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBj
b2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2ls
bFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVS
TCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5v
dGlmeS1kb25lLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkK
K2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNl
LTEtc2VjLnBsIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBo
dHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQt
aGFuZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFu
ZGxlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0
aXRsZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBuYXZpZ2F0ZSgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsK
KyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1v
dXNlVXAoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIg
aW1nID0gbmV3IEltYWdlKDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVz
b3VyY2UtMS1zZWMucGwiOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5h
dmlnYXRlKCk7IiBvbnVubG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVm
PSJyZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTIzMjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0xNSAgTmF0ZSBDaGFw
aW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzA0NTcuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1h
Z2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1o
YW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTggIFNodSBDaGFuZyAgPENo
YW5nLlNodUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCg==
</data>
<flag name="review"
          id="27158"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45206</attachid>
            <date>2009-12-18 16:32:02 -0800</date>
            <delta_ts>2010-01-26 14:03:47 -0800</delta_ts>
            <desc>Attempt #4</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>24262</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjMyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMTItMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6
IAorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6IFJlbmFtZSBtX3VubG9hZEV2ZW50
QmVpbmdEaXNwYXRjaGVkIHRvIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50LgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1bWVu
dExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeSk6IFNldCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKToKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppc0Rpc3BhdGNo
aW5nVW5sb2FkRmFtaWx5RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVxdWVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpSZXF1ZXN0KTogQWRkIE91dGxpdmVQYWdl
UG9saWN5IHRvIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMKKyAgICAgICAgKiBsb2FkZXIvUmVxdWVz
dC5oOgorICAgICAgICAoV2ViQ29yZTo6KTogQWRkIE91dGxpdmVQYWdlUG9saWN5IGVudW0uCisg
ICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpzaG91bGRPdXRsaXZlUGFnZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZSk6IENoYW5nZSBvbmUgb2YgdGhlIHNlY3VyaXR5IGNoZWNrcyB0byBhbiBvdXRs
aXZlIHBhZ2UgY2hlY2suCisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6Cisg
ICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Omxv
YWQpOiBBZGQgT3V0bGl2ZVBhZ2VQb2xpY3kgdG8gUmVxdWVzdCBjb25zdHJ1Y3RvciBjYWxsLAor
ICAgICAgICAgICAgIGVuc3VyZSByZXF1ZXN0cyB0aGF0IHNob3VsZCBvdXRsaXZlIHBhZ2UgYXJl
IGRvbmUgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmNhbmNlbFJl
cXVlc3RzKTogUmVtb3ZlIGVuZGluZyBBU1NFUlQgc2luY2UgaXQgd2lsbCBub3cgYmUgaGFyZCB0
byBwcmVkaWN0IGhvdworICAgICAgICAgICAgIG1hbnkgcmVxdWVzdHMgbWlnaHQgcG9zc2libHkg
b3V0bGl2ZSBhIGNhbmNlbCBpbiBldmVyeSBjYXNlLgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVy
OjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IFVzZSB0aGUgY29ycmVjdCBmcmFtZSBpbiB0
aGUgY2FzZSBvZiBhIHJlcXVlc3Qgb3V0bGl2aW5nIGl0cyBwYWdlLgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxQZW5kaW5nUmVxdWVzdHMpOiBFbnN1cmUgd2UgZG9uJ3Qg
Y2FuY2VsIHJlcXVlc3QgdGhhdCBzaG91bGQgb3V0bGl2ZSB0aGVpciBwYWdlLgorICAgICAgICAo
V2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyk6IEVuc3VyZSB3ZSBkb24ndCBj
YW5jZWwgcmVxdWVzdCB0aGF0IHNob3VsZCBvdXRsaXZlIHRoZWlyIHBhZ2UuCisKIDIwMDktMTIt
MTggIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENocm9taXVtIGJ1
aWxkIGZpeApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNTIzMjApCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsx
ODAsOCBAQAogICAgICwgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRGb3JtQWN0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRDYWxsSW1wbGljaXRDbG9zZShmYWxzZSkKICAgICAsIG1fd2FzVW5sb2FkRXZl
bnRFbWl0dGVkKGZhbHNlKQotICAgICwgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZChmYWxz
ZSkKKyAgICAsIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KGZhbHNlKQorICAgICwg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQoZmFsc2UpCiAgICAgLCBtX2lzQ29tcGxldGUoZmFs
c2UpCiAgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHND
bGVhcihmYWxzZSkKQEAgLTUxNywxNCArNTE4LDE2IEBACiAgICAgICAgICAgICAgICAgTm9kZSog
Y3VycmVudEZvY3VzZWROb2RlID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvY3VzZWROb2RlKQogICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50Rm9jdXNlZE5vZGUtPmFib3V0VG9VbmxvYWQoKTsKLSAgICAgICAgICAgICAg
ICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIW1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICAgICAgICAgICAgICBtX2lz
RGlzcGF0Y2hpbmdVbmxvYWRFdmVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWUtPmRvbVdpbmRvdygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBv
bGljeSA9PSBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5z
aXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBt
X2ZyYW1lLT5kb21XaW5kb3coKS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgICAgICAg
ICAgICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICBtX3dh
c1VubG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7CkBAIC0xOTA4LDcgKzE5MTEsNyBAQAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQp
CisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQogICAgICAgICByZXR1cm47CiAK
ICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbihuZXdVUkwsIG5ld0xvYWRUeXBlLCBpc0Zvcm1T
dWJtaXNzaW9uLCBldmVudCk7CkBAIC0yMDM0LDcgKzIwMzcsNyBAQAogCiAgICAgQVNTRVJUKG1f
ZnJhbWUtPnZpZXcoKSk7CiAKLSAgICBpZiAobV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCkK
KyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHBvbGljeUNoZWNrZXIoKS0+c2V0TG9hZFR5cGUodHlwZSk7CkBAIC0yMjc2LDcgKzIyNzks
NyBAQAogdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMoRGF0YWJhc2VQb2xpY3kgZGF0
YWJhc2VQb2xpY3kpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKLSAgICBpZiAobV91bmxvYWRFdmVudEJl
aW5nRGlzcGF0Y2hlZCkKKyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHdpdGhp
biB0aGlzIG1ldGhvZCwgaW5maW5pdGUgcmVjdXJzaW9uIGNhbiBvY2N1ciAoMzQ0MjIxOCkuIEF2
b2lkIHRoaXMuCkBAIC0zNDMzLDcgKzM0MzYsMTEgQEAKICAgICAvLyAgICAgICBpcyB0aGUgdXNl
ciByZXNwb25kaW5nIENhbmNlbCB0byB0aGUgZm9ybSByZXBvc3QgbmFnIHNoZWV0LgogICAgIC8v
ICAgIDIpIFVzZXIgcmVzcG9uZGVkIENhbmNlbCB0byBhbiBhbGVydCBwb3BwZWQgdXAgYnkgdGhl
IGJlZm9yZSB1bmxvYWQgZXZlbnQgaGFuZGxlci4KICAgICAvLyBUaGUgImJlZm9yZSB1bmxvYWQi
IGV2ZW50IGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KKyAgICBBU1NFUlQo
IW1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdC
ZWZvcmVVbmxvYWRFdmVudCA9IHRydWU7CiAgICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENv
bnRpbnVlICYmICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwgbV9mcmFtZS0+c2hvdWxkQ2xvc2Uo
KSk7CisgICAgQVNTRVJUKG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBt
X2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudCA9IGZhbHNlOwogCiAgICAgaWYgKCFjYW5D
b250aW51ZSkgewogICAgICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVk
aXJlY3QsIGJ1dCB0aGUgcG9saWN5IGRlbGVnYXRlIGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVu
IHdlIApAQCAtMzYyNywxMCArMzYzNCwxMiBAQAogCiB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlk
ZGVuKCkKIHsKLSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICBB
U1NFUlQoIW1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdV
bmxvYWRFdmVudCA9IHRydWU7CiAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpKQogICAgICAg
ICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIHRydWUpLCBtX2ZyYW1lLT5kb2N1
bWVudCgpKTsKLSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7CisgICAg
QVNTRVJUKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdV
bmxvYWRFdmVudCA9IGZhbHNlOwogCiAgICAgLy8gU2VuZCBwYWdlaGlkZSBldmVudCBmb3Igc3Vi
ZnJhbWVzIGFzIHdlbGwKICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygp
KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1JlcXVlc3QuaAkocmV2aXNpb24gNTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE2ICsyNCwyMyBAQAogI2RlZmluZSBSZXF1ZXN0
X2gKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBEb2NMb2FkZXI7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgCisgICAgZW51bSBPdXRsaXZlUGFnZVBvbGljeSB7CisgICAgICAgIERvTm90
T3V0bGl2ZVBhZ2UsCisgICAgICAgIE91dGxpdmVQYWdlCisgICAgfTsKIAogICAgIGNsYXNzIFJl
cXVlc3QgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUmVxdWVz
dChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5
Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgICAgIFJl
cXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1
cml0eUNoZWNrUG9saWN5LCBPdXRsaXZlUGFnZVBvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKTsKICAgICAgICAgflJlcXVlc3QoKTsKICAgICAgICAgCiAgICAgICAgIFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAgLTQ5LDYgKzU2LDkgQEAK
ICAgICAgICAgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2soKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZERvU2VjdXJpdHlDaGVjazsgfQogICAgICAgICBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3M7IH0KICAgICAgICAgCisgICAgICAgIE91dGxpdmVQYWdlUG9saWN5IGNhbk91dGxp
dmVQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBh
Z2UgPyBPdXRsaXZlUGFnZSA6IERvTm90T3V0bGl2ZVBhZ2U7IH0KKyAgICAgICAgRnJhbWUqIGZy
YW1lKCkgY29uc3Q7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxjaGFy
PiBtX2J1ZmZlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fb2JqZWN0OwpAQCAtNTcsNiAr
NjcsNyBAQAogICAgICAgICBib29sIG1fbXVsdGlwYXJ0OwogICAgICAgICBTZWN1cml0eUNoZWNr
UG9saWN5IG1fc2hvdWxkRG9TZWN1cml0eUNoZWNrOwogICAgICAgICBib29sIG1fc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrczsKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lRm9yUmVxdWVz
dFRoYXRDYW5PdXRsaXZlUGFnZTsKICAgICB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDUyMzIwKQorKysg
V2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSwxOCArNjEsMTggQEAKICNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0
eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCitQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTZWN1cml0
eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxpdmVQYWdlUG9saWN5IG91dGxp
dmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgRnJhbWVMb2FkZXIqIGZsID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmIChzZWN1cml0eUNo
ZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZmwtPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zp
c2lvbmFsIHx8IGZsLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpKQorICAg
IGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBEb05vdE91dGxpdmVQYWdlICYmIChmbC0+c3RhdGUo
KSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkt
PmlzU3RvcHBpbmcoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0
IG5ld1JlcXVlc3QgPSByZXF1ZXN0OwogCi0gICAgaWYgKHNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1
cml0eUNoZWNrCisgICAgaWYgKHNlY3VyaXR5Q2hlY2tQb2xpY3kgPT0gRG9TZWN1cml0eUNoZWNr
CiAgICAgICAgICAgICAmJiBTZWN1cml0eU9yaWdpbjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkK
ICAgICAgICAgICAgICYmICFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChyZXF1ZXN0LnVybCgpLCBT
dHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCkpKSB7CiAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBv
cnRMb2NhbExvYWRGYWlsZWQoZnJhbWUsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9s
b2FkZXIuY3BwCShyZXZpc2lvbiA1MjMyMCkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsMTYgQEAKIHZvaWQgTG9hZGVyOjpsb2FkKERv
Y0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVt
ZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKQogewogICAgIEFTU0VSVChkb2NMb2FkZXIpOwotICAgIFJlcXVlc3Qq
IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NMb2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwg
c2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgCisgICAgLy8g
SWYgd2UgYXJlIGxvYWRpbmcgYW4gaW1hZ2UgZHVyaW5nIGFuIHVubG9hZCBldmVudCwgd2Ugd2Fu
dCB0byBhbGxvdyB0aGUgcmVxdWVzdCB0byBvdXRsaXZlIHRoZSBwYWdlCisgICAgLy8gdGhhdCB3
ZSBhcmUgbGVhdmluZy4gU29tZSBzaXRlcyAobW9zdCBjb21tb25seSBhZCBuZXR3b3JrcykgcmVs
eSBvbiBpbWFnZSByZXF1ZXN0cyBpbiBiZWZvcmV1bmxvYWQKKyAgICAvLyBvciB1bmxvYWQgZXZl
bnQgaGFuZGxlcnMgdG8gdHJhY2sgdGltZSBzcGVudCBvbiB0aGUgcGFnZS4gVGhpcyB3aWxsIGFs
bG93IHRoZW0gdG8gZG8gdGhlIHRyYWNraW5nCisgICAgLy8gdGhhdCB0aGV5IGFyZSBnb2luZyB0
byBkbyBhbnl3YXksIGJ1dCBhc3luY2hyb25vdXNseSBzbyB0aGF0IHRoZXkgZG9uJ3Qgc2xvdyBk
b3duIG5hdmlnYXRpb24uCisgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3kg
PSByZXNvdXJjZS0+aXNJbWFnZSgpICYmIGRvY0xvYWRlciAmJiBkb2NMb2FkZXItPmZyYW1lKCkg
CisgICAgICAgICYmIGRvY0xvYWRlci0+ZnJhbWUoKS0+bG9hZGVyKCktPmlzRGlzcGF0Y2hpbmdV
bmxvYWRGYW1pbHlFdmVudCgpCisgICAgICAgID8gT3V0bGl2ZVBhZ2UgOiBEb05vdE91dGxpdmVQ
YWdlOworICAgIAorICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NMb2FkZXIs
IHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQb2xpY3ks
IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogCiAgICAgUmVmUHRyPEhvc3Q+IGhvc3Q7CiAg
ICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCByZXNvdXJjZS0+dXJsKCkpOwpAQCAtMTM4LDgg
KzE0NywxMCBAQAogICAgIFByaW9yaXR5IHByaW9yaXR5ID0gZGV0ZXJtaW5lUHJpb3JpdHkocmVz
b3VyY2UpOwogICAgIGhvc3QtPmFkZFJlcXVlc3QocmVxdWVzdCwgcHJpb3JpdHkpOwogICAgIGRv
Y0xvYWRlci0+aW5jcmVtZW50UmVxdWVzdENvdW50KCk7Ci0KLSAgICBpZiAocHJpb3JpdHkgPiBM
b3cgfHwgIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpIHx8ICFoYWRSZXF1ZXN0cykgeworICAg
IAorICAgIC8vIFdlIHdhbnQgdG8gZ3VhcmFudGVlIHRoYXQgcmVxdWVzdHMgd2hpY2ggb3V0bGl2
ZSB0aGUgcGFnZSBhcmUgcnVuIGFzeW5jaHJvbm91c2x5LCBzbyBvbmx5CisgICAgLy8gc2VydmUg
dGhlIHJlcXVlc3QgaW1tZWRpYXRlbHkgaWYgdGhlIHJlcXVlc3QgZG9lc24ndCBuZWVkIHRvIG91
dGxpdmUgdGhlIHBhZ2UuCisgICAgaWYgKHJlcXVlc3QtPmNhbk91dGxpdmVQYWdlKCkgPT0gRG9O
b3RPdXRsaXZlUGFnZSAmJiAocHJpb3JpdHkgPiBMb3cgfHwgIXVybC5wcm90b2NvbEluSFRUUEZh
bWlseSgpIHx8ICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1w
b3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseQogICAgICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhwcmlvcml0eSk7CiAgICAgfSBlbHNlIHsKQEAgLTI0OCw4ICsyNTksNiBAQAogICAg
IH0KIAogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKLSAgICAKLSAgICBBU1NF
UlQoZG9jTG9hZGVyLT5yZXF1ZXN0Q291bnQoKSA9PSAoZG9jTG9hZGVyLT5sb2FkSW5Qcm9ncmVz
cygpID8gMSA6IDApKTsKIH0KIAogTG9hZGVyOjpIb3N0OjpIb3N0KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKQEAgLTM0Niw4ICszNTUsOCBA
QAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFN1YnJlc291cmNl
TG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRvY0xvYWRlci0+ZG9j
KCktPmZyYW1lKCksCi0gICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJlcXVlc3Qt
PnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKCkpOworICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJl
c291cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdC0+ZnJhbWUoKSwKKyAgICAgICAgICAgIHRoaXMs
IHJlc291cmNlUmVxdWVzdCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVl
c3QtPmNhbk91dGxpdmVQYWdlKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSk7CiAgICAgICAgIGlmIChsb2FkZXIpIHsKICAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5n
LmFkZChsb2FkZXIucmVsZWFzZSgpLCByZXF1ZXN0KTsKICAgICAgICAgICAgIHJlcXVlc3QtPmNh
Y2hlZFJlc291cmNlKCktPnNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKQEAgLTU1
MCw3ICs1NTksNyBAQAogICAgIFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgZW5kID0gcmVxdWVzdHNQ
ZW5kaW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBpdCA9IHJlcXVl
c3RzUGVuZGluZy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVxdWVzdCog
cmVxdWVzdCA9ICppdDsKLSAgICAgICAgaWYgKHJlcXVlc3QtPmRvY0xvYWRlcigpID09IGRvY0xv
YWRlcikgeworICAgICAgICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91
dGxpdmVQYWdlICYmIHJlcXVlc3QtPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgewogICAgICAg
ICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCkpOwogICAgICAg
ICAgICAgZGVsZXRlIHJlcXVlc3Q7CiAgICAgICAgICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJl
cXVlc3RDb3VudCgpOwpAQCAtNTcwLDcgKzU3OSw3IEBACiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0
b3IgZW5kID0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjpp
dGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewog
ICAgICAgICBSZXF1ZXN0KiByID0gaS0+c2Vjb25kOwotICAgICAgICBpZiAoci0+ZG9jTG9hZGVy
KCkgPT0gZG9jTG9hZGVyKQorICAgICAgICBpZiAoci0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05v
dE91dGxpdmVQYWdlICYmIHItPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikKICAgICAgICAgICAg
IGxvYWRlcnNUb0NhbmNlbC5hcHBlbmQoaS0+Zmlyc3QuZ2V0KCkpOwogICAgIH0KIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA1
MjMyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQAogCiAgICAgICAgIC8vIENsZWFyIHRoZSBs
b2FkZXIgc28gdGhhdCBhbnkgY2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZSB3aWxsIG5vdCBoYXZlIHRoZSBvbGQgbG9hZGVyLgogICAgICAgICBtX2xvYWRlciA9IDA7Ci0g
ICAgICAgIG1fbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5m
cmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywg
c25pZmZDb250ZW50KTsKKyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3Jl
YXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIERv
Tm90T3V0bGl2ZVBhZ2UsIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1
MjMyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzMyw2ICszMzMsOCBAQAogICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9y
bSgpOwogICAgIAogICAgIGJvb2wgc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWU7IH0KKyAgICAKKyAgICBib29sIGlzRGlz
cGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEaXNwYXRjaGlu
Z0JlZm9yZVVubG9hZEV2ZW50IHx8IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50OyB9CiAKICAg
ICBzdGF0aWMgT2JqZWN0Q29udGVudFR5cGUgZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKQEAgLTQ3OSw3ICs0ODEsOCBA
QAogCiAgICAgYm9vbCBtX2RpZENhbGxJbXBsaWNpdENsb3NlOwogICAgIGJvb2wgbV93YXNVbmxv
YWRFdmVudEVtaXR0ZWQ7Ci0gICAgYm9vbCBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkOwor
ICAgIGJvb2wgbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQ7CisgICAgYm9vbCBtX2lz
RGlzcGF0Y2hpbmdVbmxvYWRFdmVudDsKICAgICBib29sIG1faXNDb21wbGV0ZTsKICAgICBib29s
IG1faXNMb2FkaW5nTWFpblJlc291cmNlOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmNwcAkocmV2aXNpb24g
NTIzMjApCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTAgKzI1LDEyIEBACiAjaW5jbHVkZSAiUmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NM
b2FkZXIsIENhY2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5
Q2hlY2tQb2xpY3kgc2hvdWxkRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCitSZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRS
ZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNo
b3VsZERvU2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3ks
IGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICA6IG1fb2JqZWN0KG9iamVjdCkK
ICAgICAsIG1fZG9jTG9hZGVyKGRvY0xvYWRlcikKICAgICAsIG1faW5jcmVtZW50YWwoaW5jcmVt
ZW50YWwpCkBAIC0zNywxMSArMzksMTggQEAKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fb2JqZWN0LT5zZXRSZXF1
ZXN0KHRoaXMpOworICAgIGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBPdXRsaXZlUGFnZSkKKyAg
ICAgICAgbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UgPSBkb2NMb2FkZXItPmZy
YW1lKCk7CiB9CiAKIFJlcXVlc3Q6On5SZXF1ZXN0KCkKIHsKICAgICBtX29iamVjdC0+c2V0UmVx
dWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9mcmFtZUZvclJl
cXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJhbWUoKTsKK30K
IAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgJKHJldmlzaW9uIDUyMzIwKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJyZXNvdXJjZUxv
YWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VMb2FkZXIgOiBw
dWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVy
Q2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERv
U2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwgYm9v
bCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJp
dHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRy
dWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQogCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZv
cmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxMb2FkaW5nV2l0
aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAtOTk5LCBmYWls
aW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1i
ZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxTZW5kUmVxdWVz
dCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRv
bmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMu
cGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4
MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIG1haW4gZG9j
dW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4t
YmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3Bv
bnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dh
aXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3Bv
bnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBk
aWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxSZXNw
b25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNv
dXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZEZpbmlz
aExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFu
ZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1bmxv
YWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNl
dExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2VuZGVyLm1v
dXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQorfQorCitm
dW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAxKTsK
KyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsKK30KKzwv
c2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVmb3JldW5sb2Fk
PSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3Rp
ZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPg0KKzxzY3Jp
cHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3NjcmlwdD4NCis8
L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxv
YWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihz
KQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFpbiBO
U1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwiPgoraHR0
cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRt
bCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJlZGly
ZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5T
VVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dh
aXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9u
L3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VS
TFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9z
bG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0
dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkUmVj
ZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1cyBjb2RlIDIw
MD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291
cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWlu
LXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2FkIGlu
IHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZpZ2F0ZSgpIHsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQu
b2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdlKDEs
IDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwiOwor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbnVubG9h
ZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2FpdC10
aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNTIzMjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMi0xNSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0NTcu
CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1
bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1o
YW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRt
bDogQWRkZWQuCisKIDIwMDktMTItMTggIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47350</attachid>
            <date>2010-01-25 09:25:36 -0800</date>
            <delta_ts>2010-02-17 14:46:11 -0800</delta_ts>
            <desc>Patch without the crash</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28091</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDEtMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuICBPcmlnaW5hbGx5IGxhbmRlZCBhcyBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC81MjQ0Ni4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzODkKKworICAgICAgICBUZXN0czogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAorICAg
ICAgICAgICAgICAgaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhh
bmRsZXIuaHRtbAorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzY2hlZHVsZUFyY2hpdmVMb2FkKToKKyAgICAg
ICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QpOgorICAgICAgICAqIGxv
YWRlci9GcmFtZUxvYWRlci5jcHA6IFJlbmFtZSBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVk
IHRvIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9w
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNldERvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KTogU2V0IG1faXNEaXNw
YXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OnBhZ2VIaWRkZW4pOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzRGlzcGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluY3JlbWVudE91dGxpdmVQYWdl
UmVxdWVzdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZWNyZW1lbnRP
dXRsaXZlUGFnZVJlcXVlc3RDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
b3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpOgorICAgICAgICAqIGxvYWRlci9SZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OlJlcXVlc3QpOiBBZGQgT3V0bGl2ZVBhZ2VQb2xp
Y3kgdG8gY29uc3RydWN0b3IgcGFyYW1ldGVycworICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6
flJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUpOgorICAgICAgICAq
IGxvYWRlci9SZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6UmVxdWVzdDo6Y2FuT3V0bGl2ZVBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OlJlc291
cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3QpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvYWRlcjo6bG9hZCk6IEFkZCBPdXRsaXZlUGFnZVBvbGljeSB0byBSZXF1
ZXN0IGNvbnN0cnVjdG9yIGNhbGwsCisgICAgICAgICAgICAgZW5zdXJlIHJlcXVlc3RzIHRoYXQg
c2hvdWxkIG91dGxpdmUgcGFnZSBhcmUgZG9uZSBhc3luY2hyb25vdXNseS4KKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRlcjo6Y2FuY2VsUmVxdWVzdHMpOiBSZW1vdmUgZW5kaW5nIEFTU0VSVCBzaW5j
ZSBpdCB3aWxsIG5vdyBiZSBoYXJkIHRvIHByZWRpY3QgaG93CisgICAgICAgICAgICAgbWFueSBy
ZXF1ZXN0cyBtaWdodCBwb3NzaWJseSBvdXRsaXZlIGEgY2FuY2VsIGluIGV2ZXJ5IGNhc2UuCisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKTogVXNl
IHRoZSBjb3JyZWN0IGZyYW1lIGluIHRoZSBjYXNlIG9mIGEgcmVxdWVzdCBvdXRsaXZpbmcgaXRz
IHBhZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1
ZXN0cyk6IEVuc3VyZSB3ZSBkb24ndCBjYW5jZWwgcmVxdWVzdCB0aGF0IHNob3VsZCBvdXRsaXZl
IHRoZWlyIHBhZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFJlcXVl
c3RzKTogRW5zdXJlIHdlIGRvbid0IGNhbmNlbCByZXF1ZXN0IHRoYXQgc2hvdWxkIG91dGxpdmUg
dGhlaXIgcGFnZS4KKwogMjAxMC0wMS0wOCAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiA1MzAwMykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw5IEBACiAgICAgLCBtX2lzRXhlY3V0
aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2RpZENhbGxJbXBsaWNpdENs
b3NlKGZhbHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCi0gICAgLCBt
X3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKGZhbHNlKQorICAgICwgbV9pc0Rpc3BhdGNoaW5n
QmVmb3JlVW5sb2FkRXZlbnQoZmFsc2UpCisgICAgLCBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVu
dChmYWxzZSkKKyAgICAsIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoMCkKICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKICAgICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAg
ICwgbV9uZWVkc0NsZWFyKGZhbHNlKQpAQCAtNTE3LDE0ICs1MTksMTYgQEAKICAgICAgICAgICAg
ICAgICBOb2RlKiBjdXJyZW50Rm9jdXNlZE5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZE5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkTm9kZS0+YWJvdXRUb1VubG9hZCgpOwotICAg
ICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgICAgICAg
ICAgICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVu
bG9hZEV2ZW50UG9saWN5ID09IFVubG9hZEV2ZW50UG9saWN5VW5sb2FkQW5kUGFnZUhpZGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVu
dChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQs
IG1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpLCBtX2ZyYW1lLT5kb2N1bWVudCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VD
YWNoZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGZhbHNl
LCBmYWxzZSksIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCk7
CisgICAgICAgICAgICAgICAgbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICAg
ICAgICAgIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkID0gdHJ1ZTsKQEAgLTE5MDgsNyArMTkxMiw3
IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV91bmxvYWRFdmVudEJlaW5n
RGlzcGF0Y2hlZCkKKyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uKG5ld1VSTCwgbmV3TG9hZFR5
cGUsIGlzRm9ybVN1Ym1pc3Npb24sIGV2ZW50KTsKQEAgLTIwMzQsNyArMjAzOCw3IEBACiAKICAg
ICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKIAotICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdE
aXNwYXRjaGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcG9saWN5Q2hlY2tlcigpLT5zZXRMb2FkVHlwZSh0eXBlKTsKQEAgLTIy
NzYsNyArMjI4MCw3IEBACiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhEYXRhYmFz
ZVBvbGljeSBkYXRhYmFzZVBvbGljeSkKIHsKICAgICBBU1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50
KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwotICAgIGlmIChtX3Vu
bG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRF
dmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVk
IGZyb20gd2l0aGluIHRoaXMgbWV0aG9kLCBpbmZpbml0ZSByZWN1cnNpb24gY2FuIG9jY3VyICgz
NDQyMjE4KS4gQXZvaWQgdGhpcy4KQEAgLTIzMzMsNyArMjMzNyw3IEBACiAKIHZvaWQgRnJhbWVM
b2FkZXI6OnNldERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAg
aWYgKCFsb2FkZXIgJiYgIW1fZG9jdW1lbnRMb2FkZXIpCisgICAgaWYgKCFsb2FkZXIgJiYgKCFt
X2RvY3VtZW50TG9hZGVyIHx8IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgQVNTRVJUKGxvYWRlciAhPSBtX2RvY3VtZW50TG9hZGVyKTsKQEAg
LTMwODcsOCArMzA5MSw2IEBACiAvLyBDYWxsZWQgZXZlcnkgdGltZSBhIHJlc291cmNlIGlzIGNv
bXBsZXRlbHkgbG9hZGVkLCBvciBhbiBlcnJvciBpcyByZWNlaXZlZC4KIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNoZWNrTG9hZENvbXBsZXRlKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQtPmhhc1dlYlZp
ZXcoKSk7Ci0gICAgCiAgICAgbV9zaG91bGRDYWxsQ2hlY2tMb2FkQ29tcGxldGUgPSBmYWxzZTsK
IAogICAgIC8vIEZJWE1FOiBBbHdheXMgdHJhdmVyc2luZyB0aGUgZW50aXJlIGZyYW1lIHRyZWUg
aXMgYSBiaXQgaW5lZmZpY2llbnQsIGJ1dCAKQEAgLTM0MzMsNyArMzQzNSwxMSBAQAogICAgIC8v
ICAgICAgIGlzIHRoZSB1c2VyIHJlc3BvbmRpbmcgQ2FuY2VsIHRvIHRoZSBmb3JtIHJlcG9zdCBu
YWcgc2hlZXQuCiAgICAgLy8gICAgMikgVXNlciByZXNwb25kZWQgQ2FuY2VsIHRvIGFuIGFsZXJ0
IHBvcHBlZCB1cCBieSB0aGUgYmVmb3JlIHVubG9hZCBldmVudCBoYW5kbGVyLgogICAgIC8vIFRo
ZSAiYmVmb3JlIHVubG9hZCIgZXZlbnQgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBtYWluIGZy
YW1lLgorICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICBib29sIGNhbkNv
bnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgKCFpc0xvYWRpbmdNYWluRnJhbWUoKSB8fCBtX2Zy
YW1lLT5zaG91bGRDbG9zZSgpKTsKKyAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5s
b2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gZmFsc2U7
CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGlu
ZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0
byBpZ25vcmUgaXQsIHRoZW4gd2UgCkBAIC0zNjI3LDEwICszNjMzLDEyIEBACiAKIHZvaWQgRnJh
bWVMb2FkZXI6OnBhZ2VIaWRkZW4oKQogewotICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSB0cnVlOworICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICBpZiAobV9mcmFtZS0+ZG9t
V2luZG93KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBh
Z2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1
ZSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gZmFsc2U7CiAKICAgICAvLyBTZW5kIHBhZ2Vo
aWRlIGV2ZW50IGZvciBzdWJmcmFtZXMgYXMgd2VsbAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
bV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCktPm5leHRTaWJsaW5nKCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCShyZXZpc2lvbiA1MzAwMykKKysrIFdl
YkNvcmUvbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDI1IEBA
CiAjZGVmaW5lIFJlcXVlc3RfaAogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwogICAgIGNsYXNzIERvY0xv
YWRlcjsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKKyAg
ICBjbGFzcyBGcmFtZTsKKyAgICAKKyAgICBlbnVtIE91dGxpdmVQYWdlUG9saWN5IHsKKyAgICAg
ICAgRG9Ob3RPdXRsaXZlUGFnZSwKKyAgICAgICAgT3V0bGl2ZVBhZ2UKKyAgICB9OwogCiAgICAg
Y2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwg
U2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAg
ICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50
YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+UmVxdWVzdCgpOwogICAgICAgICAKICAgICAg
ICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQpAQCAtNDksNiAr
NTgsOSBAQAogICAgICAgICBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVj
aygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9TZWN1cml0eUNoZWNrOyB9CiAgICAgICAgIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAKKyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kg
Y2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5P
dXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9Ob3RPdXRsaXZlUGFnZTsgfQorICAgICAgICBG
cmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVj
dG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7CkBA
IC01Nyw2ICs2OSw5IEBACiAgICAgICAgIGJvb2wgbV9tdWx0aXBhcnQ7CiAgICAgICAgIFNlY3Vy
aXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3VyaXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9z
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVG
b3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnRGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOworICAgICAgICBSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRMb2FkZXJGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdl
OwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gNTMwMDMpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAsIG1fc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgICwgbV9z
aG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV9zaG91bGRCdWZm
ZXJEYXRhKHRydWUpCi0gICAgLCBtX2RlZmVyc0xvYWRpbmcoZnJhbWUtPnBhZ2UoKS0+ZGVmZXJz
TG9hZGluZygpKQorICAgICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+
cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkgOiBmYWxzZSkKIHsKIH0KIApAQCAtMjAyLDcgKzIwMiw3
IEBACiAKICAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKSB7CiAgICAgICAgIGlm
ICghbV9pZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAg
IG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jl
c3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpIDogMDsKICAgICAgICAgICAgIGZyYW1lTG9h
ZGVyKCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KG1faWRl
bnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CiAgICAgICAgIH0KIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNTMwMDMpCisrKyBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1NzIsNyBA
QAogCiAgICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICAvLyBXZWJBcmNoaXZlRGVidWdNb2Rl
IG1lYW5zIHdlIGZhaWwgbG9hZHMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZmV0Y2ggdGhlbSBmcm9t
IHRoZSBuZXR3b3JrIGlmIHRoZXkncmUgbm90IGluIHRoZSBhcmNoaXZlLgotICAgICAgICBib29s
IHNob3VsZEZhaWxMb2FkID0gbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURlYnVnTW9k
ZUVuYWJsZWQoKSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVzcG9uc2VN
SU1FVHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRGYWlsTG9hZCA9IG1fZnJhbWUtPnNldHRp
bmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQo
KSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVzcG9uc2VNSU1FVHlwZSgp
KTsKIAogICAgICAgICBpZiAoIXNob3VsZEZhaWxMb2FkKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTMw
MDMpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE4ICs2MSwxOCBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKK1Bhc3NSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBhZ2VQb2xp
Y3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBGcmFtZUxvYWRlciogZmwgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKHNl
Y3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0
YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmco
KSkpCisgICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgKGZs
LT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZlRG9jdW1lbnRM
b2FkZXIoKS0+aXNTdG9wcGluZygpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZXNvdXJj
ZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3Q7CiAKLSAgICBpZiAoc2VjdXJpdHlDaGVjayA9
PSBEb1NlY3VyaXR5Q2hlY2sKKyAgICBpZiAoc2VjdXJpdHlDaGVja1BvbGljeSA9PSBEb1NlY3Vy
aXR5Q2hlY2sKICAgICAgICAgICAgICYmIFNlY3VyaXR5T3JpZ2luOjpyZXN0cmljdEFjY2Vzc1Rv
TG9jYWwoKQogICAgICAgICAgICAgJiYgIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKHJlcXVlc3Qu
dXJsKCksIFN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgRnJhbWVMb2Fk
ZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFtZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCwxNiBAQAogdm9pZCBMb2FkZXI6
OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9v
bCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAg
UmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3Jl
bWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAK
KyAgICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2FkIGV2ZW50
LCB3ZSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAv
LyB0aGF0IHdlIGFyZSBsZWF2aW5nLiBTb21lIHNpdGVzIChtb3N0IGNvbW1vbmx5IGFkIG5ldHdv
cmtzKSByZWx5IG9uIGltYWdlIHJlcXVlc3RzIGluIGJlZm9yZXVubG9hZAorICAgIC8vIG9yIHVu
bG9hZCBldmVudCBoYW5kbGVycyB0byB0cmFjayB0aW1lIHNwZW50IG9uIHRoZSBwYWdlLiBUaGlz
IHdpbGwgYWxsb3cgdGhlbSB0byBkbyB0aGUgdHJhY2tpbmcKKyAgICAvLyB0aGF0IHRoZXkgYXJl
IGdvaW5nIHRvIGRvIGFueXdheSwgYnV0IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhleSBkb24n
dCBzbG93IGRvd24gbmF2aWdhdGlvbi4KKyAgICBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFn
ZVBvbGljeSA9IHJlc291cmNlLT5pc0ltYWdlKCkgJiYgZG9jTG9hZGVyICYmIGRvY0xvYWRlci0+
ZnJhbWUoKSAKKyAgICAgICAgJiYgZG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+aXNEaXNw
YXRjaGluZ1VubG9hZEZhbWlseUV2ZW50KCkKKyAgICAgICAgPyBPdXRsaXZlUGFnZSA6IERvTm90
T3V0bGl2ZVBhZ2U7CisgICAgCisgICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGRv
Y0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBvdXRsaXZlUGFn
ZVBvbGljeSwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAKICAgICBSZWZQdHI8SG9zdD4g
aG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSk7CkBA
IC0xMzgsOCArMTQ3LDEwIEBACiAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlv
cml0eShyZXNvdXJjZSk7CiAgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7
CiAgICAgZG9jTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKLQotICAgIGlmIChwcmlv
cml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3Rz
KSB7CisgICAgCisgICAgLy8gV2Ugd2FudCB0byBndWFyYW50ZWUgdGhhdCByZXF1ZXN0cyB3aGlj
aCBvdXRsaXZlIHRoZSBwYWdlIGFyZSBydW4gYXN5bmNocm9ub3VzbHksIHNvIG9ubHkKKyAgICAv
LyBzZXJ2ZSB0aGUgcmVxdWVzdCBpbW1lZGlhdGVseSBpZiB0aGUgcmVxdWVzdCBkb2Vzbid0IG5l
ZWQgdG8gb3V0bGl2ZSB0aGUgcGFnZS4KKyAgICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2Uo
KSA9PSBEb05vdE91dGxpdmVQYWdlICYmIChwcmlvcml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29s
SW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVx
dWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZl
UGVuZGluZ1JlcXVlc3RzKHByaW9yaXR5KTsKICAgICB9IGVsc2UgewpAQCAtMjQ4LDggKzI1OSw2
IEBACiAgICAgfQogCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotICAgIAot
ICAgIEFTU0VSVChkb2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09IChkb2NMb2FkZXItPmxvYWRJ
blByb2dyZXNzKCkgPyAxIDogMCkpOwogfQogCiBMb2FkZXI6Okhvc3Q6Okhvc3QoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQpAQCAtMzQ2LDgg
KzM1NSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jTG9h
ZGVyLT5kb2MoKS0+ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwg
cmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKSk7CisgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVy
ID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LT5mcmFtZSgpLAorICAgICAgICAg
ICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2so
KSwgcmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcygpKTsKICAgICAgICAgaWYgKGxvYWRlcikgewogICAgICAgICAgICAgbV9yZXF1ZXN0
c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxlYXNlKCksIHJlcXVlc3QpOwogICAgICAgICAgICAgcmVx
dWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigp
OwpAQCAtNTUwLDcgKzU1OSw3IEBACiAgICAgUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBlbmQgPSBy
ZXF1ZXN0c1BlbmRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0
ID0gcmVxdWVzdHNQZW5kaW5nLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBS
ZXF1ZXN0KiByZXF1ZXN0ID0gKml0OwotICAgICAgICBpZiAocmVxdWVzdC0+ZG9jTG9hZGVyKCkg
PT0gZG9jTG9hZGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpID09
IERvTm90T3V0bGl2ZVBhZ2UgJiYgcmVxdWVzdC0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKSB7
CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKSk7
CiAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKICAgICAgICAgICAgIGRvY0xvYWRlci0+ZGVj
cmVtZW50UmVxdWVzdENvdW50KCk7CkBAIC01NzAsNyArNTc5LDcgQEAKICAgICBSZXF1ZXN0TWFw
OjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVl
c3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyLT5k
b2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpCisgICAgICAgIGlmIChyLT5jYW5PdXRsaXZlUGFnZSgp
ID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKQogICAg
ICAgICAgICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBACiAKICAgICAgICAgLy8gQ2xl
YXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxsYmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9sZCBsb2FkZXIuCiAgICAgICAgIG1fbG9hZGVy
ID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9j
dW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIHNlbmRMb2FkQ2Fs
bGJhY2tzLCBzbmlmZkNvbnRlbnQpOworICAgICAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9h
ZGVyOjpjcmVhdGUobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgc2VjdXJpdHlD
aGVjaywgRG9Ob3RPdXRsaXZlUGFnZSwgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJl
dmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMzLDYgKzMzMywxMSBAQAogICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxs
U3VibWl0Rm9ybSgpOwogICAgIAogICAgIGJvb2wgc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWU7IH0KKyAgICAKKyAgICBi
b29sIGlzRGlzcGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNE
aXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50IHx8IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50
OyB9CisgICAgdm9pZCBpbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgpIHsgbV9vdXRs
aXZlUGFnZVJlcXVlc3RDb3VudCsrOyB9CisgICAgdm9pZCBkZWNyZW1lbnRPdXRsaXZlUGFnZVJl
cXVlc3RDb3VudCgpIHsgbV9vdXRsaXZlUGFnZVJlcXVlc3RDb3VudC0tOyB9CisgICAgYm9vbCBv
dXRsaXZlUGFnZVJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0bGl2ZVBhZ2VSZXF1
ZXN0Q291bnQ7IH0KIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0
Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIApA
QCAtNDc5LDcgKzQ4NCw5IEBACiAKICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7CiAg
ICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKLSAgICBib29sIG1fdW5sb2FkRXZlbnRC
ZWluZ0Rpc3BhdGNoZWQ7CisgICAgYm9vbCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVu
dDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50OworICAgIGludCBtX291dGxp
dmVQYWdlUmVxdWVzdENvdW50OwogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGJvb2wgbV9p
c0xvYWRpbmdNYWluUmVzb3VyY2U7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCShyZXZpc2lvbiA1MzAw
MykKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTQgQEAKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENh
Y2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xp
Y3kgc2hvdWxkRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mp
CitSZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSog
b2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2Vj
dXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICA6IG1fb2JqZWN0KG9iamVjdCkKICAgICAsIG1f
ZG9jTG9hZGVyKGRvY0xvYWRlcikKICAgICAsIG1faW5jcmVtZW50YWwoaW5jcmVtZW50YWwpCkBA
IC0zNywxMSArNDEsMjUgQEAKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fb2JqZWN0LT5zZXRSZXF1ZXN0KHRoaXMp
OworICAgIGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBPdXRsaXZlUGFnZSkgeworCisgICAgICAg
IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID0gZG9jTG9hZGVyLT5mcmFtZSgp
OworICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCkt
PmluY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgICAgIG1fZG9jdW1lbnRG
b3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID0gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0
bGl2ZVBhZ2UtPmRvY3VtZW50KCk7CisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXJGb3JSZXF1ZXN0
VGhhdENhbk91dGxpdmVQYWdlID0gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2Ut
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgIH0KIH0KIAogUmVxdWVzdDo6
flJlcXVlc3QoKQogeworICAgIGlmIChtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFn
ZSkgICAgICAgCisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5s
b2FkZXIoKS0+ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKICAgICBtX29iamVj
dC0+c2V0UmVxdWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9m
cmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJh
bWUoKTsKK30KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmgJKHJldmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJy
ZXNvdXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVk
ZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VM
b2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1Bv
bGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0g
dHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9
IERvU2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiA9IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0g
MDsgfQogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9h
ZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2Fk
LWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxM
b2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAt
OTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxT
ZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQg
VVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxs
KQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3Vy
Y2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGws
IG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRp
cmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxO
U1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93
YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwgLSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8
TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
c2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3
LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAt
IGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1
bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9h
ZCBpbiB1bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUo
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFy
Z2V0Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
fQorfQorCitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFn
ZSgxLCAxKTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBs
IjsKK30KKzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVm
b3JldW5sb2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNl
cy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhl
bi1ub3RpZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1s
Pg0KKzxzY3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3Nj
cmlwdD4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1o
YW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQg
aGFuZGxlcihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9y
IGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0
bWwiPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhl
bi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBH
RVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVz
cG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4K
K2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9u
YXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1
ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBs
IC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1
cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9z
bG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFn
ZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZp
Z2F0ZSgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh0YXJnZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3
IEltYWdlKDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1z
ZWMucGwiOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7
IiBvbnVubG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJj
ZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNTMwMDQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMS0wOCAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzI4MzkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWlu
LXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbDogQWRkZWQuCisKIDIwMTAtMDEtMDggIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54346</attachid>
            <date>2010-04-26 16:40:38 -0700</date>
            <delta_ts>2010-05-03 15:29:38 -0700</delta_ts>
            <desc>Attempt #6 (or thereabouts)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28027</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODI3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDQtMjYgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6bG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1
bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNldERvY3VtZW50TG9hZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9s
aWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKToKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Ojppc0Rpc3BhdGNoaW5nVW5sb2FkRmFtaWx5RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjppbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRlY3JlbWVudE91dGxpdmVQYWdlUmVx
dWVzdENvdW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVxdWVzdDo6UmVxdWVzdCk6IEFkZCBPdXRsaXZlUGFnZVBvbGljeSB0byBw
YXJhbWV0ZXJzIGFuZCBrZWVwIGEgCisgICAgICAgICAgICBGcmFtZS9Eb2N1bWVudC9Eb2NMb2Fk
ZXIgYWxpdmUgaWYgdGhlIHBvbGljeSByZXF1aXJlcyBpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
cXVlc3Q6On5SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OmZyYW1lKToKKyAg
ICAgICAgKiBsb2FkZXIvUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6Y2Fu
T3V0bGl2ZVBhZ2UpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogbG9h
ZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oOgor
ICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjps
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6c2VydmVQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyk6CisK
IDIwMTAtMDQtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiA1ODEyMCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw5IEBACiAgICAgLCBtX2lzRXhlY3V0aW5nSmF2
YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2RpZENhbGxJbXBsaWNpdENsb3NlKGZh
bHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCi0gICAgLCBtX3VubG9h
ZEV2ZW50QmVpbmdEaXNwYXRjaGVkKGZhbHNlKQorICAgICwgbV9pc0Rpc3BhdGNoaW5nQmVmb3Jl
VW5sb2FkRXZlbnQoZmFsc2UpCisgICAgLCBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudChmYWxz
ZSkKKyAgICAsIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoMCkKICAgICAsIG1faXNDb21wbGV0
ZShmYWxzZSkKICAgICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAgICwgbV9u
ZWVkc0NsZWFyKGZhbHNlKQpAQCAtNTM5LDE0ICs1NDEsMTYgQEAKICAgICAgICAgICAgICAgICBO
b2RlKiBjdXJyZW50Rm9jdXNlZE5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZE5vZGUpCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRGb2N1c2VkTm9kZS0+YWJvdXRUb1VubG9hZCgpOwotICAgICAgICAg
ICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgICAgICAgICAgICAg
IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAo
bV9mcmFtZS0+ZG9tV2luZG93KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVubG9hZEV2
ZW50UG9saWN5ID09IFVubG9hZEV2ZW50UG9saWN5VW5sb2FkQW5kUGFnZUhpZGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdl
VHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIG1fZnJh
bWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGZhbHNlLCBmYWxz
ZSksIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCk7CisgICAg
ICAgICAgICAgICAgbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAg
IG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkID0gdHJ1ZTsKQEAgLTE4MjgsNyArMTgzMiw3IEBACiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV91bmxvYWRFdmVudEJlaW5nRGlzcGF0
Y2hlZCkKKyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uKG5ld1VSTCwgbmV3TG9hZFR5cGUsIGlz
Rm9ybVN1Ym1pc3Npb24sIGV2ZW50KTsKQEAgLTE5NTQsNyArMTk1OCw3IEBACiAKICAgICBBU1NF
UlQobV9mcmFtZS0+dmlldygpKTsKIAotICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRj
aGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgcG9saWN5Q2hlY2tlcigpLT5zZXRMb2FkVHlwZSh0eXBlKTsKQEAgLTIxOTYsNyAr
MjIwMCw3IEBACiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhEYXRhYmFzZVBvbGlj
eSBkYXRhYmFzZVBvbGljeSkKIHsKICAgICBBU1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwg
IW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwotICAgIGlmIChtX3VubG9hZEV2
ZW50QmVpbmdEaXNwYXRjaGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20g
d2l0aGluIHRoaXMgbWV0aG9kLCBpbmZpbml0ZSByZWN1cnNpb24gY2FuIG9jY3VyICgzNDQyMjE4
KS4gQXZvaWQgdGhpcy4KQEAgLTIyNjYsNyArMjI3MCwxMyBAQAogICAgIGlmIChtX2RvY3VtZW50
TG9hZGVyKQogICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5kZXRhY2hGcm9tRnJhbWUoKTsKIAot
ICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBsb2FkZXI7CisgICAgLy8gSWYgdGhpcyBGcmFtZUxvYWRl
ciBpcyBzdGlsbCByZWZlcnJlZCB0byBieSBhIFJlcXVlc3QgdGhhdCB3aWxsIG91dGxpdmUgdGhl
IGN1cnJlbnQgcGFnZSwgd2UgbmVlZAorICAgIC8vIHRvIGtlZXAgYSBub24tbnVsbCBEb2N1bWVu
dExvYWRlci4KKyAgICBpZiAoIWxvYWRlciAmJiBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50KSB7
CisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKFJlc291
cmNlUmVxdWVzdCgpLCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICAgICAgbV9kb2N1bWVudExvYWRl
ci0+c2V0RnJhbWUobV9mcmFtZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZG9jdW1lbnRMb2Fk
ZXIgPSBsb2FkZXI7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNldFBvbGljeURvY3VtZW50TG9h
ZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0zMDI4LDggKzMwMzgsNiBAQAogLy8gQ2Fs
bGVkIGV2ZXJ5IHRpbWUgYSByZXNvdXJjZSBpcyBjb21wbGV0ZWx5IGxvYWRlZCwgb3IgYW4gZXJy
b3IgaXMgcmVjZWl2ZWQuCiB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiB7
Ci0gICAgQVNTRVJUKG1fY2xpZW50LT5oYXNXZWJWaWV3KCkpOwotICAgIAogICAgIG1fc2hvdWxk
Q2FsbENoZWNrTG9hZENvbXBsZXRlID0gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogQWx3YXlzIHRy
YXZlcnNpbmcgdGhlIGVudGlyZSBmcmFtZSB0cmVlIGlzIGEgYml0IGluZWZmaWNpZW50LCBidXQg
CkBAIC0zMzc5LDcgKzMzODcsMTEgQEAKICAgICAvLyAgICAgICBpcyB0aGUgdXNlciByZXNwb25k
aW5nIENhbmNlbCB0byB0aGUgZm9ybSByZXBvc3QgbmFnIHNoZWV0LgogICAgIC8vICAgIDIpIFVz
ZXIgcmVzcG9uZGVkIENhbmNlbCB0byBhbiBhbGVydCBwb3BwZWQgdXAgYnkgdGhlIGJlZm9yZSB1
bmxvYWQgZXZlbnQgaGFuZGxlci4KICAgICAvLyBUaGUgImJlZm9yZSB1bmxvYWQiIGV2ZW50IGhh
bmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZS4KKyAgICBBU1NFUlQoIW1faXNEaXNw
YXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxv
YWRFdmVudCA9IHRydWU7CiAgICAgYm9vbCBjYW5Db250aW51ZSA9IHNob3VsZENvbnRpbnVlICYm
ICghaXNMb2FkaW5nTWFpbkZyYW1lKCkgfHwgbV9mcmFtZS0+c2hvdWxkQ2xvc2UoKSk7CisgICAg
QVNTRVJUKG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0
Y2hpbmdCZWZvcmVVbmxvYWRFdmVudCA9IGZhbHNlOwogCiAgICAgaWYgKCFjYW5Db250aW51ZSkg
ewogICAgICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGEgcXVpY2sgcmVkaXJlY3QsIGJ1
dCB0aGUgcG9saWN5IGRlbGVnYXRlIGRlY2lkZWQgdG8gaWdub3JlIGl0LCB0aGVuIHdlIApAQCAt
MzU3MywxMCArMzU4NSwxMiBAQAogCiB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKCkKIHsK
LSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKKyAgICBBU1NFUlQoIW1f
aXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVu
dCA9IHRydWU7CiAgICAgaWYgKG1fZnJhbWUtPmRvbVdpbmRvdygpKQogICAgICAgICBtX2ZyYW1l
LT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIHRydWUpLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
LSAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7CisgICAgQVNTRVJUKG1f
aXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVu
dCA9IGZhbHNlOwogCiAgICAgLy8gU2VuZCBwYWdlaGlkZSBldmVudCBmb3Igc3ViZnJhbWVzIGFz
IHdlbGwKICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jl
cXVlc3QuaAkocmV2aXNpb24gNTgxMjApCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDE2ICsyNCwyNCBAQAogI2RlZmluZSBSZXF1ZXN0X2gKIAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBD
YWNoZWRSZXNvdXJjZTsKICAgICBjbGFzcyBEb2NMb2FkZXI7CisgICAgY2xhc3MgRG9jdW1lbnQ7
CisgICAgY2xhc3MgRnJhbWU7CisgICAgCisgICAgZW51bSBPdXRsaXZlUGFnZVBvbGljeSB7Cisg
ICAgICAgIERvTm90T3V0bGl2ZVBhZ2UsCisgICAgICAgIE91dGxpdmVQYWdlCisgICAgfTsKIAog
ICAgIGNsYXNzIFJlcXVlc3QgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50
YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7
CisgICAgICAgIFJlcXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3Jl
bWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBPdXRsaXZlUGFnZVBvbGljeSwgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICAgICAgflJlcXVlc3QoKTsKICAgICAgICAgCiAg
ICAgICAgIFZlY3RvcjxjaGFyPiYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KQEAgLTQ5
LDYgKzU3LDkgQEAKICAgICAgICAgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5
Q2hlY2soKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERvU2VjdXJpdHlDaGVjazsgfQogICAgICAg
ICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KICAgICAgICAgCisgICAgICAgIE91dGxpdmVQYWdlUG9s
aWN5IGNhbk91dGxpdmVQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUZvclJlcXVlc3RUaGF0
Q2FuT3V0bGl2ZVBhZ2UgPyBPdXRsaXZlUGFnZSA6IERvTm90T3V0bGl2ZVBhZ2U7IH0KKyAgICAg
ICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fb2JqZWN0
OwpAQCAtNTcsNiArNjgsOCBAQAogICAgICAgICBib29sIG1fbXVsdGlwYXJ0OwogICAgICAgICBT
ZWN1cml0eUNoZWNrUG9saWN5IG1fc2hvdWxkRG9TZWN1cml0eUNoZWNrOwogICAgICAgICBib29s
IG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2Zy
YW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50
PiBtX2RvY3VtZW50Rm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZTsKICAgICB9OwogCiB9IC8v
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDU4
MTIwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsNyArMjU0LDcgQEAKIAogc2l6ZV90IENhY2hlZEltYWdlOjptYXhpbXVtRGVjb2RlZElt
YWdlU2l6ZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8gbV9yZXF1ZXN0LT5k
b2NMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8g
bV9yZXF1ZXN0LT5mcmFtZSgpIDogMDsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDU4MTIwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAg
ICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cykKICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAs
IG1fc2hvdWxkQnVmZmVyRGF0YSh0cnVlKQotICAgICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5w
YWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKKyAgICAsIG1fZGVmZXJzTG9hZGluZyhmcmFtZS0+cGFn
ZSgpICYmIGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKIHsKIH0KIApAQCAtMjE0LDcg
KzIxNCw3IEBACiAKICAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKSB7CiAgICAg
ICAgIGlmICghbV9pZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2Zy
YW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgIG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+
cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpIDogMDsKICAgICAgICAgICAgIGZy
YW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KG1faWRlbnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CiAgICAgICAgIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNTgxMjApCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1
NzIsNyBAQAogCiAgICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICAvLyBXZWJBcmNoaXZlRGVi
dWdNb2RlIG1lYW5zIHdlIGZhaWwgbG9hZHMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZmV0Y2ggdGhl
bSBmcm9tIHRoZSBuZXR3b3JrIGlmIHRoZXkncmUgbm90IGluIHRoZSBhcmNoaXZlLgotICAgICAg
ICBib29sIHNob3VsZEZhaWxMb2FkID0gbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURl
YnVnTW9kZUVuYWJsZWQoKSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVz
cG9uc2VNSU1FVHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRGYWlsTG9hZCA9IG1fZnJhbWUt
PnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURlYnVnTW9kZUVu
YWJsZWQoKSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVzcG9uc2VNSU1F
VHlwZSgpKTsKIAogICAgICAgICBpZiAoIXNob3VsZEZhaWxMb2FkKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNp
b24gNTgxMjApCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDE4ICs2MSwxOCBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBT
dWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKK1Bhc3NSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBT
dWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBh
Z2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBGcmFtZUxvYWRlciogZmwgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAg
aWYgKHNlY3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmIChmbC0+c3RhdGUoKSA9PSBG
cmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3Rv
cHBpbmcoKSkpCisgICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IERvTm90T3V0bGl2ZVBhZ2Ug
JiYgKGZsLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZlRG9j
dW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBS
ZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3Q7CiAKLSAgICBpZiAoc2VjdXJpdHlD
aGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sKKyAgICBpZiAoc2VjdXJpdHlDaGVja1BvbGljeSA9PSBE
b1NlY3VyaXR5Q2hlY2sKICAgICAgICAgICAgICYmIFNlY3VyaXR5T3JpZ2luOjpyZXN0cmljdEFj
Y2Vzc1RvTG9jYWwoKQogICAgICAgICAgICAgJiYgIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKHJl
cXVlc3QudXJsKCksIFN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgRnJh
bWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFtZSwgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDU4MTIwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCwxNiBAQAogdm9pZCBM
b2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7
Ci0gICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2Us
IGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsK
KyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2Fk
IGV2ZW50LCB3ZSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UK
KyAgICAvLyB0aGF0IHdlIGFyZSBsZWF2aW5nLiBTb21lIHNpdGVzIChtb3N0IGNvbW1vbmx5IGFk
IG5ldHdvcmtzKSByZWx5IG9uIGltYWdlIHJlcXVlc3RzIGluIGJlZm9yZXVubG9hZAorICAgIC8v
IG9yIHVubG9hZCBldmVudCBoYW5kbGVycyB0byB0cmFjayB0aW1lIHNwZW50IG9uIHRoZSBwYWdl
LiBUaGlzIHdpbGwgYWxsb3cgdGhlbSB0byBkbyB0aGUgdHJhY2tpbmcKKyAgICAvLyB0aGF0IHRo
ZXkgYXJlIGdvaW5nIHRvIGRvIGFueXdheSwgYnV0IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhl
eSBkb24ndCBzbG93IGRvd24gbmF2aWdhdGlvbi4KKyAgICBPdXRsaXZlUGFnZVBvbGljeSBvdXRs
aXZlUGFnZVBvbGljeSA9IHJlc291cmNlLT5pc0ltYWdlKCkgJiYgZG9jTG9hZGVyICYmIGRvY0xv
YWRlci0+ZnJhbWUoKSAKKyAgICAgICAgJiYgZG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+
aXNEaXNwYXRjaGluZ1VubG9hZEZhbWlseUV2ZW50KCkKKyAgICAgICAgPyBPdXRsaXZlUGFnZSA6
IERvTm90T3V0bGl2ZVBhZ2U7CisgICAgCisgICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1
ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBvdXRs
aXZlUGFnZVBvbGljeSwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAKICAgICBSZWZQdHI8
SG9zdD4gaG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwo
KSk7CkBAIC0xMzgsOSArMTQ3LDExIEBACiAgICAgYm9vbCBoYWRSZXF1ZXN0cyA9IGhvc3QtPmhh
c1JlcXVlc3RzKCk7CiAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlvcml0eShy
ZXNvdXJjZSk7CiAgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7Ci0gICAg
ZG9jTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICByZXF1ZXN0LT5kb2NMb2Fk
ZXIoKS0+aW5jcmVtZW50UmVxdWVzdENvdW50KCk7CiAKLSAgICBpZiAocHJpb3JpdHkgPiBMb3cg
fHwgIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpIHx8ICFoYWRSZXF1ZXN0cykgeworICAgIC8v
IFdlIHdhbnQgdG8gZ3VhcmFudGVlIHRoYXQgcmVxdWVzdHMgd2hpY2ggb3V0bGl2ZSB0aGUgcGFn
ZSBhcmUgcnVuIGFzeW5jaHJvbm91c2x5LCBzbyBvbmx5CisgICAgLy8gc2VydmUgdGhlIHJlcXVl
c3QgaW1tZWRpYXRlbHkgaWYgdGhlIHJlcXVlc3QgZG9lc24ndCBuZWVkIHRvIG91dGxpdmUgdGhl
IHBhZ2UuCisgICAgaWYgKHJlcXVlc3QtPmNhbk91dGxpdmVQYWdlKCkgPT0gRG9Ob3RPdXRsaXZl
UGFnZSAmJiAocHJpb3JpdHkgPiBMb3cgfHwgIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpIHx8
ICFoYWRSZXF1ZXN0cykpIHsKICAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJl
c291cmNlcyBpbW1lZGlhdGVseQogICAgICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhw
cmlvcml0eSk7CiAgICAgfSBlbHNlIHsKQEAgLTM1Myw4ICszNjQsOCBAQAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIg
PSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRvY0xvYWRlci0+ZG9jKCktPmZyYW1lKCksCi0g
ICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJlcXVlc3QtPnNob3VsZERvU2VjdXJp
dHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOworICAgICAg
ICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUocmVxdWVzdC0+ZnJhbWUoKSwKKyAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVz
dCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVlc3QtPmNhbk91dGxpdmVQ
YWdlKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CiAgICAgICAgIGlm
IChsb2FkZXIpIHsKICAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVs
ZWFzZSgpLCByZXF1ZXN0KTsKICAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCkt
PnNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKQEAgLTU1Nyw3ICs1NjgsNyBAQAog
ICAgIFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgZW5kID0gcmVxdWVzdHNQZW5kaW5nLmVuZCgpOwog
ICAgIGZvciAoUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBpdCA9IHJlcXVlc3RzUGVuZGluZy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUmVxdWVzdCogcmVxdWVzdCA9ICppdDsK
LSAgICAgICAgaWYgKHJlcXVlc3QtPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgeworICAgICAg
ICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91dGxpdmVQYWdlICYmIHJl
cXVlc3QtPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgewogICAgICAgICAgICAgY2FjaGUoKS0+
cmVtb3ZlKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCkpOwogICAgICAgICAgICAgZGVsZXRlIHJl
cXVlc3Q7CiAgICAgICAgICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwpA
QCAtNTc3LDcgKzU4OCw3IEBACiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1
ZXN0c0xvYWRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9y
ZXF1ZXN0c0xvYWRpbmcuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogICAgICAgICBSZXF1ZXN0
KiByID0gaS0+c2Vjb25kOwotICAgICAgICBpZiAoci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVy
KQorICAgICAgICBpZiAoci0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91dGxpdmVQYWdlICYm
IHItPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikKICAgICAgICAgICAgIGxvYWRlcnNUb0NhbmNl
bC5hcHBlbmQoaS0+Zmlyc3QuZ2V0KCkpOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA1ODEyMCkKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNCw3ICszMDQsNyBAQAogCiAgICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhhdCBh
bnkgY2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBoYXZl
IHRoZSBvbGQgbG9hZGVyLgogICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9hZGVy
ID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsK
KyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQt
PmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2Us
IHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1ODEyMCkKKysrIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw2ICszNDAsMTAg
QEAKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKTsKICAgICAKICAg
ICBib29sIHN1cHByZXNzT3BlbmVySW5OZXdGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcHJl
c3NPcGVuZXJJbk5ld0ZyYW1lOyB9CisgICAgCisgICAgYm9vbCBpc0Rpc3BhdGNoaW5nVW5sb2Fk
RmFtaWx5RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRF
dmVudCB8fCBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudDsgfQorICAgIHZvaWQgaW5jcmVtZW50
T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKSB7IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQrKzsg
fQorICAgIHZvaWQgZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKSB7IG1fb3V0bGl2
ZVBhZ2VSZXF1ZXN0Q291bnQtLTsgfQogCiAgICAgc3RhdGljIE9iamVjdENvbnRlbnRUeXBlIGRl
ZmF1bHRPYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwogCkBAIC00ODksNyArNDkzLDkgQEAKIAogICAgIGJvb2wgbV9kaWRDYWxsSW1wbGlj
aXRDbG9zZTsKICAgICBib29sIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkOwotICAgIGJvb2wgbV91
bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ0JlZm9y
ZVVubG9hZEV2ZW50OworICAgIGJvb2wgbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQ7CisgICAg
aW50IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQ7CiAgICAgYm9vbCBtX2lzQ29tcGxldGU7CiAg
ICAgYm9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDU4MTIwKQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDEwICsyNSwxMiBAQAogI2luY2x1ZGUgIlJlcXVlc3QuaCIKIAogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRl
ciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBT
ZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKQorUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xvYWRlciwg
Q2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5IG91dGxpdmVQYWdl
UG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAgOiBtX29iamVjdChv
YmplY3QpCiAgICAgLCBtX2RvY0xvYWRlcihkb2NMb2FkZXIpCiAgICAgLCBtX2luY3JlbWVudGFs
KGluY3JlbWVudGFsKQpAQCAtMzcsMTEgKzM5LDI3IEBACiAgICAgLCBtX3NlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX29iamVjdC0+
c2V0UmVxdWVzdCh0aGlzKTsKKyAgICBpZiAob3V0bGl2ZVBhZ2VQb2xpY3kgPT0gT3V0bGl2ZVBh
Z2UpIHsKKyAgICAgICAgLy8gSWYgYSByZXF1ZXN0IG5lZWRzIHRvIHN1cnZpdmUgZG9jdW1lbnQg
ZGV0YWNobWVudCBhbmQgbmF2aWdhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHNvbWUgb2JqZWN0cwor
ICAgICAgICAvLyBhcm91bmQgYW5kIHJlZmNvdW50ZWQuIFdlIGtlZXAgYSBmcmFtZSwgYW5kIGlu
c3RhbnRpYXRlIGEgZHVtbXkgRG9jdW1lbnQgYW5kIERvY0xvYWRlciBmb3IgdGhlIGxvYWQuCisg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBEb2NMb2FkZXIgcGFzc2VkIGluIHRvIGJlIGNhbmNl
bGxlZC9kZXN0cnVjdGVkIG5vcm1hbGx5LgorICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRD
YW5PdXRsaXZlUGFnZSA9IGRvY0xvYWRlci0+ZnJhbWUoKTsKKyAgICAgICAgbV9kb2N1bWVudEZv
clJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UgPSBEb2N1bWVudDo6Y3JlYXRlKG1fZnJhbWVGb3JS
ZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLmdldCgpKTsKKyAgICAgICAgbV9kb2NMb2FkZXIgPSBt
X2RvY3VtZW50Rm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+ZG9jTG9hZGVyKCk7CisgICAg
ICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIoKS0+aW5jcmVt
ZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKKyAgICB9CiB9CiAKIFJlcXVlc3Q6On5SZXF1
ZXN0KCkKIHsKKyAgICBpZiAobV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UpCisg
ICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIoKS0+ZGVj
cmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKICAgICBtX29iamVjdC0+c2V0UmVxdWVz
dCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9mcmFtZUZvclJlcXVl
c3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJhbWUoKTsKK30KIAog
fSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJ
KHJldmlzaW9uIDU4MTIwKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJyZXNvdXJjZUxvYWRl
cl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VMb2FkZXIgOiBwdWJs
aWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2Vj
dXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBz
aG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlD
aGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBib29sIHNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWUp
OwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQogCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1
bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVy
cm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAtOTk5LCBmYWlsaW5n
IFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZv
cmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9u
L3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxTZW5kUmVxdWVzdCA8
TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEy
Ny4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwg
LSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIG1haW4gZG9jdW1l
bnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVm
b3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNl
IChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNl
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRG
aW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
c2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxSZXNwb25z
ZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJj
ZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZEZpbmlzaExv
YWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxv
YWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxl
ci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1bmxvYWQg
aGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExl
ZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
RG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAxKTsKKyAg
ICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsKK30KKzwvc2Ny
aXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVmb3JldW5sb2FkPSJy
ZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9u
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPg0KKzxzY3JpcHQ+
DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3NjcmlwdD4NCis8L2h0
bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQt
aW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihzKQor
PHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFpbiBOU1VS
TEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwiPgoraHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9u
ZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwg
bWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0
UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5TVVJM
UmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRt
bCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJl
cXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93
LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0dHAg
bWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkUmVjZWl2
ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9u
L3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4K
K2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNl
LTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVu
bG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2FkIGluIHVu
bG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZpZ2F0ZSgpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zm
c2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdlKDEsIDEp
OworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwiOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbnVubG9hZD0i
cmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2FpdC10aGVu
LW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNTgyNzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMC0wNC0yNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRl
c3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0NTcuCisK
KyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxv
YWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5k
bGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbDog
QWRkZWQuCisKIDIwMTAtMDQtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3psbyBHb21ib3MuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54968</attachid>
            <date>2010-05-03 15:29:38 -0700</date>
            <delta_ts>2010-05-17 11:38:54 -0700</delta_ts>
            <desc>Attempt #7 (clean up weird layering)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>32584</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODcwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMTAtMDUtMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Om1heGltdW1EZWNvZGVkSW1hZ2VTaXplKToKKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9E
b2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2No
ZWR1bGVBcmNoaXZlTG9hZCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1bWVu
dExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNldERvY3VtZW50TG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKToKKyAgICAgICAg
KiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpp
c0Rpc3BhdGNoaW5nVW5sb2FkRmFtaWx5RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjppbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRlY3JlbWVudE91dGxpdmVQYWdlUmVxdWVz
dENvdW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVxdWVzdDo6UmVxdWVzdCk6IEFkZCBPdXRsaXZlUGFnZVBvbGljeSB0byBw
YXJhbWV0ZXJzIGFuZCBrZWVwIGEgCisgICAgICAgICAgICBGcmFtZS9Eb2N1bWVudC9Eb2NMb2Fk
ZXIgYWxpdmUgaWYgdGhlIHBvbGljeSByZXF1aXJlcyBpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
cXVlc3Q6On5SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OmZyYW1lKToKKyAg
ICAgICAgKiBsb2FkZXIvUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6Y2Fu
T3V0bGl2ZVBhZ2UpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6UmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogbG9h
ZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oOgor
ICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjps
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6c2VydmVQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyk6Cisg
ICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorCiAyMDEwLTA1LTAzICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9sb2FkZXIuaAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBMb2FkZXIoKTsKICAgICAg
ICAgfkxvYWRlcigpOwogCi0gICAgICAgIHZvaWQgbG9hZChEb2NMb2FkZXIqLCBDYWNoZWRSZXNv
dXJjZSosIGJvb2wgaW5jcmVtZW50YWwgPSB0cnVlLCBTZWN1cml0eUNoZWNrUG9saWN5ID0gRG9T
ZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlKTsKKyAg
ICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1l
bnRhbCA9IHRydWUsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIE91dGxp
dmVQYWdlUG9saWN5ID0gRG9Ob3RPdXRsaXZlUGFnZSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzID0gdHJ1ZSk7CiAKICAgICAgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIq
KTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCShyZXZpc2lvbiA1
ODcwMSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsNiArODIsMTEgQEAKICAgICAgICAgT2JqZWN0Q29udGVudE90aGVyUGx1Z2luCiAg
ICAgfTsKICAgICAKKyAgICBlbnVtIE91dGxpdmVQYWdlUG9saWN5IHsKKyAgICAgICAgRG9Ob3RP
dXRsaXZlUGFnZSwKKyAgICAgICAgT3V0bGl2ZVBhZ2UKKyAgICB9OworICAgIAogICAgIGVudW0g
VW5sb2FkRXZlbnRQb2xpY3kgewogICAgICAgICBVbmxvYWRFdmVudFBvbGljeU5vbmUsCiAgICAg
ICAgIFVubG9hZEV2ZW50UG9saWN5VW5sb2FkT25seSwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDkgQEAKICAgICAsIG1faXNFeGVjdXRpbmdKYXZh
U2NyaXB0Rm9ybUFjdGlvbihmYWxzZSkKICAgICAsIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UoZmFs
c2UpCiAgICAgLCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZChmYWxzZSkKLSAgICAsIG1fdW5sb2Fk
RXZlbnRCZWluZ0Rpc3BhdGNoZWQoZmFsc2UpCisgICAgLCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVV
bmxvYWRFdmVudChmYWxzZSkKKyAgICAsIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KGZhbHNl
KQorICAgICwgbV9vdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgwKQogICAgICwgbV9pc0NvbXBsZXRl
KGZhbHNlKQogICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UoZmFsc2UpCiAgICAgLCBtX25l
ZWRzQ2xlYXIoZmFsc2UpCkBAIC01NDAsMTQgKzU0MiwxNiBAQAogICAgICAgICAgICAgICAgIE5v
ZGUqIGN1cnJlbnRGb2N1c2VkTm9kZSA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkTm9kZSkKICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEZvY3VzZWROb2RlLT5hYm91dFRvVW5sb2FkKCk7Ci0gICAgICAgICAg
ICAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCk7CisgICAgICAgICAgICAgICAg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lLT5kb21XaW5kb3coKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodW5sb2FkRXZl
bnRQb2xpY3kgPT0gVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VU
cmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KSwgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRvY3VtZW50KCkpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKKyAgICAg
ICAgICAgICAgICBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAg
bV93YXNVbmxvYWRFdmVudEVtaXR0ZWQgPSB0cnVlOwpAQCAtMTgyOSw3ICsxODMzLDcgQEAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRj
aGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJMLCBuZXdMb2FkVHlwZSwgaXNG
b3JtU3VibWlzc2lvbiwgZXZlbnQpOwpAQCAtMTk1NSw3ICsxOTU5LDcgQEAKIAogICAgIEFTU0VS
VChtX2ZyYW1lLT52aWV3KCkpOwogCi0gICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQpCisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQogICAgICAgICByZXR1cm47
CiAKICAgICBwb2xpY3lDaGVja2VyKCktPnNldExvYWRUeXBlKHR5cGUpOwpAQCAtMjE5Nyw3ICsy
MjAxLDcgQEAKIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3BBbGxMb2FkZXJzKERhdGFiYXNlUG9saWN5
IGRhdGFiYXNlUG9saWN5KQogewogICAgIEFTU0VSVCghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAh
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSk7Ci0gICAgaWYgKG1fdW5sb2FkRXZl
bnRCZWluZ0Rpc3BhdGNoZWQpCisgICAgaWYgKG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3
aXRoaW4gdGhpcyBtZXRob2QsIGluZmluaXRlIHJlY3Vyc2lvbiBjYW4gb2NjdXIgKDM0NDIyMTgp
LiBBdm9pZCB0aGlzLgpAQCAtMjI2Nyw3ICsyMjcxLDEzIEBACiAgICAgaWYgKG1fZG9jdW1lbnRM
b2FkZXIpCiAgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmRldGFjaEZyb21GcmFtZSgpOwogCi0g
ICAgbV9kb2N1bWVudExvYWRlciA9IGxvYWRlcjsKKyAgICAvLyBJZiB0aGlzIEZyYW1lTG9hZGVy
IGlzIHN0aWxsIHJlZmVycmVkIHRvIGJ5IGEgUmVxdWVzdCB0aGF0IHdpbGwgb3V0bGl2ZSB0aGUg
Y3VycmVudCBwYWdlLCB3ZSBuZWVkCisgICAgLy8gdG8ga2VlcCBhIG5vbi1udWxsIERvY3VtZW50
TG9hZGVyLgorICAgIGlmICghbG9hZGVyICYmIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpIHsK
KyAgICAgICAgbV9kb2N1bWVudExvYWRlciA9IERvY3VtZW50TG9hZGVyOjpjcmVhdGUoUmVzb3Vy
Y2VSZXF1ZXN0KCksIFN1YnN0aXR1dGVEYXRhKCkpOworICAgICAgICBtX2RvY3VtZW50TG9hZGVy
LT5zZXRGcmFtZShtX2ZyYW1lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9kb2N1bWVudExvYWRl
ciA9IGxvYWRlcjsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0UG9saWN5RG9jdW1lbnRMb2Fk
ZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKQEAgLTMwMjksOCArMzAzOSw2IEBACiAvLyBDYWxs
ZWQgZXZlcnkgdGltZSBhIHJlc291cmNlIGlzIGNvbXBsZXRlbHkgbG9hZGVkLCBvciBhbiBlcnJv
ciBpcyByZWNlaXZlZC4KIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlKCkKIHsK
LSAgICBBU1NFUlQobV9jbGllbnQtPmhhc1dlYlZpZXcoKSk7Ci0gICAgCiAgICAgbV9zaG91bGRD
YWxsQ2hlY2tMb2FkQ29tcGxldGUgPSBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBBbHdheXMgdHJh
dmVyc2luZyB0aGUgZW50aXJlIGZyYW1lIHRyZWUgaXMgYSBiaXQgaW5lZmZpY2llbnQsIGJ1dCAK
QEAgLTMzODAsNyArMzM4OCwxMSBAQAogICAgIC8vICAgICAgIGlzIHRoZSB1c2VyIHJlc3BvbmRp
bmcgQ2FuY2VsIHRvIHRoZSBmb3JtIHJlcG9zdCBuYWcgc2hlZXQuCiAgICAgLy8gICAgMikgVXNl
ciByZXNwb25kZWQgQ2FuY2VsIHRvIGFuIGFsZXJ0IHBvcHBlZCB1cCBieSB0aGUgYmVmb3JlIHVu
bG9hZCBldmVudCBoYW5kbGVyLgogICAgIC8vIFRoZSAiYmVmb3JlIHVubG9hZCIgZXZlbnQgaGFu
ZGxlciBydW5zIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lLgorICAgIEFTU0VSVCghbV9pc0Rpc3Bh
dGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9h
ZEV2ZW50ID0gdHJ1ZTsKICAgICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYg
KCFpc0xvYWRpbmdNYWluRnJhbWUoKSB8fCBtX2ZyYW1lLT5zaG91bGRDbG9zZSgpKTsKKyAgICBB
U1NFUlQobV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRj
aGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gZmFsc2U7CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7
CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0
IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0byBpZ25vcmUgaXQsIHRoZW4gd2UgCkBAIC0z
NTc0LDEwICszNTg2LDEyIEBACiAKIHZvaWQgRnJhbWVMb2FkZXI6OnBhZ2VIaWRkZW4oKQogewot
ICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0cnVlOworICAgIEFTU0VSVCghbV9p
c0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50
ID0gdHJ1ZTsKICAgICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkpCiAgICAgICAgIG1fZnJhbWUt
PmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1ZSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwot
ICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9p
c0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50
ID0gZmFsc2U7CiAKICAgICAvLyBTZW5kIHBhZ2VoaWRlIGV2ZW50IGZvciBzdWJmcmFtZXMgYXMg
d2VsbAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOCBAQAogICAgIENh
Y2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBUeXBlKTsKICAgICB2aXJ0dWFsIH5DYWNo
ZWRSZXNvdXJjZSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBsb2FkKERvY0xvYWRlciogZG9j
TG9hZGVyKSAgeyBsb2FkKGRvY0xvYWRlciwgZmFsc2UsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7
IH0KLSAgICB2b2lkIGxvYWQoRG9jTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlD
aGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikgIHsgbG9hZChkb2NMb2FkZXIsIGZhbHNl
LCBEb1NlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2UsIHRydWUpOyB9CisgICAgdm9pZCBs
b2FkKERvY0xvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91
dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogCiAgICAg
dmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZpcnR1YWwg
U3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0
LmgJKHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxNiArMjQsMTkgQEAKICNkZWZpbmUgUmVxdWVzdF9oCiAKICNpbmNsdWRl
ICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVk
UmVzb3VyY2U7CiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIERvY3VtZW50OworICAg
IGNsYXNzIEZyYW1lOwogCiAgICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiAgICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291cmNl
KiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRSZXNv
dXJjZSosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxpdmVQYWdl
UG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+UmVxdWVz
dCgpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJldHVybiBt
X2J1ZmZlcjsgfQpAQCAtNDksNiArNTIsOSBAQAogICAgICAgICBTZWN1cml0eUNoZWNrUG9saWN5
IHNob3VsZERvU2VjdXJpdHlDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9TZWN1cml0
eUNoZWNrOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0
IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAKKyAgICAg
ICAgT3V0bGl2ZVBhZ2VQb2xpY3kgY2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Zy
YW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9Ob3RPdXRs
aXZlUGFnZTsgfQorICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAgCiAgICAg
cHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogbV9vYmplY3Q7CkBAIC01Nyw2ICs2Myw4IEBACiAgICAgICAgIGJvb2wgbV9tdWx0
aXBhcnQ7CiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3VyaXR5Q2hl
Y2s7CiAgICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgICAgICBS
ZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOworICAgICAg
ICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnRGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdl
OwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmNwcAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDE2IEBACiAKIHZvaWQgQ2FjaGVkSW1hZ2U6Omxv
YWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgaWYgKCFkb2NMb2FkZXIgfHwgZG9jTG9h
ZGVyLT5hdXRvTG9hZEltYWdlcygpKQotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9hZChkb2NM
b2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7Ci0gICAgZWxzZQorICAgIGlmICgh
ZG9jTG9hZGVyIHx8IGRvY0xvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkgeworICAgICAgICAvLyBJ
ZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2FkIGV2ZW50LCB3ZSB3YW50
IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAgICAgLy8gdGhh
dCB3ZSBhcmUgbGVhdmluZy4gU29tZSBzaXRlcyByZWx5IG9uIGltYWdlIHJlcXVlc3RzIGluIGJl
Zm9yZXVubG9hZCBvciB1bmxvYWQgZXZlbnQgaGFuZGxlcnMgdG8gCisgICAgICAgIC8vIHRyYWNr
IHRpbWUgc3BlbnQgb24gdGhlIHBhZ2UuIFRoaXMgd2lsbCBhbGxvdyB0aGVtIHRvIGRvIHRoZSB0
cmFja2luZyB0aGF0IHRoZXkgYXJlIGdvaW5nIHRvIGRvIGFueXdheSwKKyAgICAgICAgLy8gYnV0
IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhleSBkb24ndCBzbG93IGRvd24gbmF2aWdhdGlvbi4K
KyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3kgPSBkb2NMb2FkZXIg
JiYgZG9jTG9hZGVyLT5mcmFtZSgpCisgICAgICAgICAgICAmJiBkb2NMb2FkZXItPmZyYW1lKCkt
PmxvYWRlcigpLT5pc0Rpc3BhdGNoaW5nVW5sb2FkRmFtaWx5RXZlbnQoKQorICAgICAgICAgICAg
PyBPdXRsaXZlUGFnZSA6IERvTm90T3V0bGl2ZVBhZ2U7CisgICAgICAgIENhY2hlZFJlc291cmNl
Ojpsb2FkKGRvY0xvYWRlciwgdHJ1ZSwgRG9TZWN1cml0eUNoZWNrLCBvdXRsaXZlUGFnZVBvbGlj
eSwgdHJ1ZSk7CisgICAgfSBlbHNlCiAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwogfQogCkBA
IC0yNTQsNyArMjYxLDcgQEAKIAogc2l6ZV90IENhY2hlZEltYWdlOjptYXhpbXVtRGVjb2RlZElt
YWdlU2l6ZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8gbV9yZXF1ZXN0LT5k
b2NMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8g
bV9yZXF1ZXN0LT5mcmFtZSgpIDogMDsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAg
ICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cykKICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAs
IG1fc2hvdWxkQnVmZmVyRGF0YSh0cnVlKQotICAgICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5w
YWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKKyAgICAsIG1fZGVmZXJzTG9hZGluZyhmcmFtZS0+cGFn
ZSgpICYmIGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKIHsKIH0KIApAQCAtMjE0LDcg
KzIxNCw3IEBACiAKICAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKSB7CiAgICAg
ICAgIGlmICghbV9pZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2Zy
YW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgIG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+
cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpIDogMDsKICAgICAgICAgICAgIGZy
YW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KG1faWRlbnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CiAgICAgICAgIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMCAr
MTA0LDEwIEBACiAgICAgICAgIG1fZG9jTG9hZGVyLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSh0aGlz
KTsKIH0KICAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9h
ZChEb2NMb2FkZXIqIGRvY0xvYWRlciwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSwg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAgY2FjaGUoKS0+bG9h
ZGVyKCktPmxvYWQoZG9jTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQo
ZG9jTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgIG1fbG9hZGluZyA9IHRydWU7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDU4NzAxKQor
KysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NzIsNyArNTcyLDcgQEAKIAogICAgIGlmICghcmVzb3VyY2UpIHsKICAgICAgICAgLy8gV2ViQXJj
aGl2ZURlYnVnTW9kZSBtZWFucyB3ZSBmYWlsIGxvYWRzIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGZl
dGNoIHRoZW0gZnJvbSB0aGUgbmV0d29yayBpZiB0aGV5J3JlIG5vdCBpbiB0aGUgYXJjaGl2ZS4K
LSAgICAgICAgYm9vbCBzaG91bGRGYWlsTG9hZCA9IG1fZnJhbWUtPnNldHRpbmdzKCktPndlYkFy
Y2hpdmVEZWJ1Z01vZGVFbmFibGVkKCkgJiYgQXJjaGl2ZUZhY3Rvcnk6OmlzQXJjaGl2ZU1pbWVU
eXBlKHJlc3BvbnNlTUlNRVR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRmFpbExvYWQgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPndlYkFyY2hpdmVEZWJ1
Z01vZGVFbmFibGVkKCkgJiYgQXJjaGl2ZUZhY3Rvcnk6OmlzQXJjaGl2ZU1pbWVUeXBlKHJlc3Bv
bnNlTUlNRVR5cGUoKSk7CiAKICAgICAgICAgaWYgKCFzaG91bGRGYWlsTG9hZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAKICNlbmRpZgogfQogCi1QYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCitQYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91
dGxpdmVQYWdlUG9saWN5IG91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgRnJhbWVMb2FkZXIqIGZsID0gZnJhbWUtPmxvYWRlcigp
OwotICAgIGlmIChzZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZmwtPnN0YXRl
KCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8IGZsLT5hY3RpdmVEb2N1bWVudExvYWRlcigp
LT5pc1N0b3BwaW5nKCkpKQorICAgIGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBEb05vdE91dGxp
dmVQYWdlICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0OwogCi0gICAgaWYgKHNl
Y3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrCisgICAgaWYgKHNlY3VyaXR5Q2hlY2tQb2xp
Y3kgPT0gRG9TZWN1cml0eUNoZWNrCiAgICAgICAgICAgICAmJiBTZWN1cml0eU9yaWdpbjo6cmVz
dHJpY3RBY2Nlc3NUb0xvY2FsKCkKICAgICAgICAgICAgICYmICFTZWN1cml0eU9yaWdpbjo6Y2Fu
TG9hZChyZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCkpKSB7CiAgICAg
ICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoZnJhbWUsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAg
ICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3QgdXNlIG5vcm1hbCByZWZj
b3VudGluZyBpbnN0ZWFkLgogICAgICAgICB1c2VyU2hlZXQtPnNldEluQ2FjaGUodHJ1ZSk7CiAg
ICAgICAgIC8vIERvbid0IGxvYWQgaW5jcmVtZW50YWxseSwgc2tpcCBsb2FkIGNoZWNrcywgZG9u
J3Qgc2VuZCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrcy4KLSAgICAgICAgdXNlclNoZWV0LT5sb2Fk
KGRvY0xvYWRlciwgZmFsc2UsIFNraXBTZWN1cml0eUNoZWNrLCBmYWxzZSk7CisgICAgICAgIHVz
ZXJTaGVldC0+bG9hZChkb2NMb2FkZXIsIGZhbHNlLCBTa2lwU2VjdXJpdHlDaGVjaywgRG9Ob3RP
dXRsaXZlUGFnZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWRpc2FibGVkKCkpCiAgICAgICAgICAg
ICBtX3Jlc291cmNlcy5zZXQodXJsLCB1c2VyU2hlZXQpOwogICAgICAgICBlbHNlCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xv
YWRlci5jcHAJKHJldmlzaW9uIDU4NzAxKQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDEwICsxMTcsMTAgQEAKICNlbmRpZgogfQogCi12b2lkIExv
YWRlcjo6bG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRl
ciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWws
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0
bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBB
U1NFUlQoZG9jTG9hZGVyKTsKLSAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZG9j
TG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpOworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NM
b2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogCiAgICAgUmVmUHRyPEhvc3Q+IGhv
c3Q7CiAgICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCByZXNvdXJjZS0+dXJsKCkpOwpAQCAt
MTM4LDkgKzEzOCwxMSBAQAogICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0
cygpOwogICAgIFByaW9yaXR5IHByaW9yaXR5ID0gZGV0ZXJtaW5lUHJpb3JpdHkocmVzb3VyY2Up
OwogICAgIGhvc3QtPmFkZFJlcXVlc3QocmVxdWVzdCwgcHJpb3JpdHkpOwotICAgIGRvY0xvYWRl
ci0+aW5jcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgcmVxdWVzdC0+ZG9jTG9hZGVyKCktPmlu
Y3JlbWVudFJlcXVlc3RDb3VudCgpOwogCi0gICAgaWYgKHByaW9yaXR5ID4gTG93IHx8ICF1cmwu
cHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVxdWVzdHMpIHsKKyAgICAvLyBXZSB3YW50
IHRvIGd1YXJhbnRlZSB0aGF0IHJlcXVlc3RzIHdoaWNoIG91dGxpdmUgdGhlIHBhZ2UgYXJlIHJ1
biBhc3luY2hyb25vdXNseSwgc28gb25seQorICAgIC8vIHNlcnZlIHRoZSByZXF1ZXN0IGltbWVk
aWF0ZWx5IGlmIHRoZSByZXF1ZXN0IGRvZXNuJ3QgbmVlZCB0byBvdXRsaXZlIHRoZSBwYWdlLgor
ICAgIGlmIChyZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpID09IERvTm90T3V0bGl2ZVBhZ2UgJiYg
KHByaW9yaXR5ID4gTG93IHx8ICF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVx
dWVzdHMpKSB7CiAgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMg
aW1tZWRpYXRlbHkKICAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMocHJpb3JpdHkp
OwogICAgIH0gZWxzZSB7CkBAIC0zNTMsOCArMzU1LDggQEAKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmRvYygpLT5mcmFtZSgpLAotICAgICAgICAg
ICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2so
KSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKKyAgICAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKHJl
cXVlc3QtPmZyYW1lKCksCisgICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJlcXVl
c3QtPnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpLCBy
ZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogICAgICAgICBpZiAobG9hZGVy
KSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQobG9hZGVyLnJlbGVhc2UoKSwg
cmVxdWVzdCk7CiAgICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1
ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CkBAIC01NTcsNyArNTU5LDcgQEAKICAgICBSZXF1
ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IHJlcXVlc3RzUGVuZGluZy5lbmQoKTsKICAgICBmb3Ig
KFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQgPSByZXF1ZXN0c1BlbmRpbmcuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlcXVlc3QqIHJlcXVlc3QgPSAqaXQ7Ci0gICAgICAg
IGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpIHsKKyAgICAgICAgaWYgKHJl
cXVlc3QtPmNhbk91dGxpdmVQYWdlKCkgPT0gRG9Ob3RPdXRsaXZlUGFnZSAmJiByZXF1ZXN0LT5k
b2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpIHsKICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShy
ZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0Owog
ICAgICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKQEAgLTU3Nyw3
ICs1NzksNyBAQAogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNMb2Fk
aW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNM
b2FkaW5nLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICAgUmVxdWVzdCogciA9IGkt
PnNlY29uZDsKLSAgICAgICAgaWYgKHItPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikKKyAgICAg
ICAgaWYgKHItPmNhbk91dGxpdmVQYWdlKCkgPT0gRG9Ob3RPdXRsaXZlUGFnZSAmJiByLT5kb2NM
b2FkZXIoKSA9PSBkb2NMb2FkZXIpCiAgICAgICAgICAgICBsb2FkZXJzVG9DYW5jZWwuYXBwZW5k
KGktPmZpcnN0LmdldCgpKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50
VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNyAr
MzEwLDcgQEAKIAogICAgICAgICAvLyBDbGVhciB0aGUgbG9hZGVyIHNvIHRoYXQgYW55IGNhbGxi
YWNrcyBmcm9tIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgd2lsbCBub3QgaGF2ZSB0aGUgb2xk
IGxvYWRlci4KICAgICAgICAgbV9sb2FkZXIgPSAwOwotICAgICAgICBtX2xvYWRlciA9IFN1YnJl
c291cmNlTG9hZGVyOjpjcmVhdGUobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwg
c2VjdXJpdHlDaGVjaywgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CisgICAgICAg
IG1fbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgp
LCB0aGlzLCByZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBEb05vdE91dGxpdmVQYWdlLCBzZW5kTG9h
ZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNTg3MDEpCisrKyBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNiArMzQ0LDEwIEBACiAgICAg
dm9pZCBjb250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7CiAgICAgCiAgICAgYm9vbCBz
dXBwcmVzc09wZW5lckluTmV3RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3N1cHByZXNzT3BlbmVy
SW5OZXdGcmFtZTsgfQorICAgIAorICAgIGJvb2wgaXNEaXNwYXRjaGluZ1VubG9hZEZhbWlseUV2
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQgfHwg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQ7IH0KKyAgICB2b2lkIGluY3JlbWVudE91dGxpdmVQ
YWdlUmVxdWVzdENvdW50KCkgeyBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50Kys7IH0KKyAgICB2
b2lkIGRlY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCkgeyBtX291dGxpdmVQYWdlUmVx
dWVzdENvdW50LS07IH0KIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsK
IApAQCAtNDkzLDcgKzQ5Nyw5IEBACiAKICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7
CiAgICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKLSAgICBib29sIG1fdW5sb2FkRXZl
bnRCZWluZ0Rpc3BhdGNoZWQ7CisgICAgYm9vbCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRF
dmVudDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50OworICAgIGludCBtX291
dGxpdmVQYWdlUmVxdWVzdENvdW50OwogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGJvb2wg
bV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCShyZXZpc2lvbiA1
ODcwMSkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxMCArMjUsMTIgQEAKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xv
YWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlD
aGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcykKK1JlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJl
c291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2hv
dWxkRG9TZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSwg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgIDogbV9vYmplY3Qob2JqZWN0KQog
ICAgICwgbV9kb2NMb2FkZXIoZG9jTG9hZGVyKQogICAgICwgbV9pbmNyZW1lbnRhbChpbmNyZW1l
bnRhbCkKQEAgLTM3LDExICszOSwyNyBAQAogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgbV9vYmplY3QtPnNldFJlcXVl
c3QodGhpcyk7CisgICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IE91dGxpdmVQYWdlKSB7Cisg
ICAgICAgIC8vIElmIGEgcmVxdWVzdCBuZWVkcyB0byBzdXJ2aXZlIGRvY3VtZW50IGRldGFjaG1l
bnQgYW5kIG5hdmlnYXRpb24sIHdlIG5lZWQgdG8ga2VlcCBzb21lIG9iamVjdHMKKyAgICAgICAg
Ly8gYXJvdW5kIGFuZCByZWZjb3VudGVkLiBXZSBrZWVwIGEgZnJhbWUsIGFuZCBpbnN0YW50aWF0
ZSBhIGR1bW15IERvY3VtZW50IGFuZCBEb2NMb2FkZXIgZm9yIHRoZSBsb2FkLgorICAgICAgICAv
LyBUaGlzIGFsbG93cyB0aGUgRG9jTG9hZGVyIHBhc3NlZCBpbiB0byBiZSBjYW5jZWxsZWQvZGVz
dHJ1Y3RlZCBub3JtYWxseS4KKyAgICAgICAgbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2
ZVBhZ2UgPSBkb2NMb2FkZXItPmZyYW1lKCk7CisgICAgICAgIG1fZG9jdW1lbnRGb3JSZXF1ZXN0
VGhhdENhbk91dGxpdmVQYWdlID0gRG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1lRm9yUmVxdWVzdFRo
YXRDYW5PdXRsaXZlUGFnZS5nZXQoKSk7CisgICAgICAgIG1fZG9jTG9hZGVyID0gbV9kb2N1bWVu
dEZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UtPmRvY0xvYWRlcigpOworICAgICAgICBtX2Zy
YW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCktPmluY3JlbWVudE91dGxp
dmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgfQogfQogCiBSZXF1ZXN0Ojp+UmVxdWVzdCgpCiB7
CisgICAgaWYgKG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlKQorICAgICAgICBt
X2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCktPmRlY3JlbWVudE91
dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CiAgICAgbV9vYmplY3QtPnNldFJlcXVlc3QoMCk7CiB9
CisgICAgCitGcmFtZSogUmVxdWVzdDo6ZnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zy
YW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENh
bk91dGxpdmVQYWdlLmdldCgpIDogbV9kb2NMb2FkZXItPmZyYW1lKCk7Cit9CiAKIH0gLy9uYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lv
biA1ODcwMSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgU3VicmVzb3VyY2VMb2FkZXJfaAogCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlJlcXVlc3QuaCIKICNpbmNs
dWRlICJSZXNvdXJjZUxvYWRlci5oIgogIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksNyAr
NDAsNyBAQAogICAgIAogICAgIGNsYXNzIFN1YnJlc291cmNlTG9hZGVyIDogcHVibGljIFJlc291
cmNlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hl
Y2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNl
TG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIE91
dGxpdmVQYWdlUG9saWN5ID0gRG9Ob3RPdXRsaXZlUGFnZSwgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKIAogICAg
ICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KIApJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhh
bmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4IEBACis8dW5rbm93bj4gLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogPE5T
RXJyb3IgZG9tYWluIE5TVVJMRXJyb3JEb21haW4sIGNvZGUgLTk5OSwgZmFpbGluZyBVUkwgImh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2Fk
LWhhbmRsZXIuaHRtbCI+CitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVx
dWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0
dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNl
bmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9h
ZC1oYW5kbGVyLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkK
K2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxSZXNwb25zZSBodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkRmluaXNoTG9h
ZGluZworaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVz
b3VyY2UtMS1zZWMucGwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMu
cGwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSBkaWRGaW5pc2hMb2FkaW5nCisK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJl
Zm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1s
b2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjMgQEAKKzxodG1sPjxoZWFkPgorPHRpdGxlPkltYWdlIGxvYWQgaW4gdW5sb2FkIGhhbmRsZXI8
L3RpdGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIG5hdmlnYXRlKCkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaW5rIik7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZzZXRMZWZ0ICsgMiwg
dGFyZ2V0Lm9mZnNldFRvcCArIDIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsK
KyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIH0KK30KKworZnVuY3Rpb24gcmVx
dWVzdEltYWdlKCkgeworICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoMSwgMSk7CisgICAgaW1nLnNy
YyA9ICJyZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCI7Cit9Cis8L3NjcmlwdD48L2hl
YWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbmJlZm9yZXVubG9hZD0icmVxdWVzdElt
YWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1k
b25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4NCis8c2NyaXB0Pg0KKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7DQorICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgew0KKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsNCisgICAgICAgIH0sIDIwMDApOw0KKyAgICB9DQorPC9zY3JpcHQ+DQorPC9odG1sPg0KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9h
ZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi11bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOSBAQAorbWFpbiBmcmFtZSAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykKKzx1bmtub3du
PiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRv
bWFpbiwgY29kZSAtOTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAt
IHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9j
dW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNl
IChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNl
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRG
aW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
c2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVS
TCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJj
ZS0xLXNlYy5wbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBH
RVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25z
ZSA8TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5w
bCAtIGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFu
ZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNCBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1bmxvYWQgaGFu
ZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBSZXNvdXJj
ZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxp
bmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9mZnNldExlZnQg
KyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93
bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQorfQorCitmdW5jdGlv
biByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAxKTsKKyAgICBp
bWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJuYXZpZ2F0ZSgpOyIgb251bmxvYWQ9InJlcXVlc3RJ
bWFnZSgpOyI+Cis8YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sIj5saW5rPC9hPgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4
NzAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTAtMDUtMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3LgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRs
ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24v
aW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1s
b2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWw6IEFkZGVkLgor
CiAyMDEwLTA1LTAzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGV4cGVjdGF0aW9ucyBjaGFuZ2UuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56254</attachid>
            <date>2010-05-17 11:38:54 -0700</date>
            <delta_ts>2010-06-15 13:54:03 -0700</delta_ts>
            <desc>Merge in recent changes to FrameLoader</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>27743</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTYxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMTAtMDUtMTcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Om1heGltdW1EZWNvZGVkSW1hZ2VTaXplKToKKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIGxvYWRlci9E
b2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2No
ZWR1bGVBcmNoaXZlTG9hZCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpzZXREb2N1bWVudExvYWRlcik6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aXNEaXNwYXRjaGluZ1BhZ2VE
aXNtaXNzYWxFdmVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omlu
Y3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpOiBBZGRlZC4K
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKiBsb2FkZXIvUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXF1
ZXN0OjpSZXF1ZXN0KTogQWRkIE91dGxpdmVQYWdlUG9saWN5IHRvIHBhcmFtZXRlcnMgYW5kIGtl
ZXAgYSAKKyAgICAgICAgICAgIEZyYW1lL0RvY3VtZW50L0RvY0xvYWRlciBhbGl2ZSBpZiB0aGUg
cG9saWN5IHJlcXVpcmVzIGl0LgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6flJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUpOgorICAgICAgICAqIGxvYWRlci9S
ZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpjYW5PdXRsaXZlUGFnZSk6Cisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyOjpSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSk6
CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVy
L2xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICog
bG9hZGVyL2xvYWRlci5oOgorCiAyMDEwLTA1LTE3ICBBbnR0aSBLb2l2aXN0byAgPGtvaXZpc3Rv
QGlraS5maT4KIAogICAgICAgICBUaGlzIHdhcyBtaXNzaW5nIGZyb20gcHJldmlvdXMgY29tbWl0
LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAkocmV2aXNpb24gNTk2MTIpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYg
KzgyLDExIEBACiAgICAgICAgIE9iamVjdENvbnRlbnRPdGhlclBsdWdpbgogICAgIH07CiAgICAg
CisgICAgZW51bSBPdXRsaXZlUGFnZVBvbGljeSB7CisgICAgICAgIERvTm90T3V0bGl2ZVBhZ2Us
CisgICAgICAgIE91dGxpdmVQYWdlCisgICAgfTsKKyAgICAKICAgICBlbnVtIFVubG9hZEV2ZW50
UG9saWN5IHsKICAgICAgICAgVW5sb2FkRXZlbnRQb2xpY3lOb25lLAogICAgICAgICBVbmxvYWRF
dmVudFBvbGljeVVubG9hZE9ubHksCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkocmV2aXNpb24gNTk2MTIpCisrKyBX
ZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAog
ICAgICAgICBMb2FkZXIoKTsKICAgICAgICAgfkxvYWRlcigpOwogCi0gICAgICAgIHZvaWQgbG9h
ZChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwgPSB0cnVlLCBT
ZWN1cml0eUNoZWNrUG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hl
ZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCA9IHRydWUsIFNlY3VyaXR5Q2hlY2tQb2xpY3kg
PSBEb1NlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5ID0gRG9Ob3RPdXRsaXZlUGFnZSwg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7CiAKICAgICAgICAgdm9pZCBj
YW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA1OTYxMikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCw3IEBACiAgICAgLCBtX2RpZENhbGxJbXBs
aWNpdENsb3NlKGZhbHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCiAg
ICAgLCBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZChmYWxzZSkKKyAgICAsIG1f
b3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoMCkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAg
ICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAgICwgbV9uZWVkc0NsZWFyKGZh
bHNlKQpAQCAtMjI3Miw3ICsyMjczLDEzIEBACiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIpCiAg
ICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmRldGFjaEZyb21GcmFtZSgpOwogCi0gICAgbV9kb2N1
bWVudExvYWRlciA9IGxvYWRlcjsKKyAgICAvLyBJZiB0aGlzIEZyYW1lTG9hZGVyIGlzIHN0aWxs
IHJlZmVycmVkIHRvIGJ5IGEgUmVxdWVzdCB0aGF0IHdpbGwgb3V0bGl2ZSB0aGUgY3VycmVudCBw
YWdlLCB3ZSBuZWVkCisgICAgLy8gdG8ga2VlcCBhIG5vbi1udWxsIERvY3VtZW50TG9hZGVyLgor
ICAgIGlmICghbG9hZGVyICYmIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpIHsKKyAgICAgICAg
bV9kb2N1bWVudExvYWRlciA9IERvY3VtZW50TG9hZGVyOjpjcmVhdGUoUmVzb3VyY2VSZXF1ZXN0
KCksIFN1YnN0aXR1dGVEYXRhKCkpOworICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5zZXRGcmFt
ZShtX2ZyYW1lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9kb2N1bWVudExvYWRlciA9IGxvYWRl
cjsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0UG9saWN5RG9jdW1lbnRMb2FkZXIoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKQEAgLTMwMzQsOCArMzA0MSw2IEBACiAvLyBDYWxsZWQgZXZlcnkg
dGltZSBhIHJlc291cmNlIGlzIGNvbXBsZXRlbHkgbG9hZGVkLCBvciBhbiBlcnJvciBpcyByZWNl
aXZlZC4KIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlKCkKIHsKLSAgICBBU1NF
UlQobV9jbGllbnQtPmhhc1dlYlZpZXcoKSk7Ci0gICAgCiAgICAgbV9zaG91bGRDYWxsQ2hlY2tM
b2FkQ29tcGxldGUgPSBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBBbHdheXMgdHJhdmVyc2luZyB0
aGUgZW50aXJlIGZyYW1lIHRyZWUgaXMgYSBiaXQgaW5lZmZpY2llbnQsIGJ1dCAKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNTk2MTIpCisrKyBXZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBACiAgICAgQ2Fj
aGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUpOwogICAgIHZpcnR1YWwgfkNhY2hl
ZFJlc291cmNlKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWQoRG9jTG9hZGVyKiBkb2NM
b2FkZXIpICB7IGxvYWQoZG9jTG9hZGVyLCBmYWxzZSwgRG9TZWN1cml0eUNoZWNrLCB0cnVlKTsg
fQotICAgIHZvaWQgbG9hZChEb2NMb2FkZXIqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNo
ZWNrUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkKERvY0xvYWRlciogZG9jTG9hZGVyKSAgeyBsb2FkKGRvY0xvYWRlciwgZmFsc2Us
IERvU2VjdXJpdHlDaGVjaywgRG9Ob3RPdXRsaXZlUGFnZSwgdHJ1ZSk7IH0KKyAgICB2b2lkIGxv
YWQoRG9jTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgT3V0
bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJikgeyB9CiAgICAgdmlydHVhbCBT
dHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3Qu
aAkocmV2aXNpb24gNTk2MTIpCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE2ICsyNCwxOSBAQAogI2RlZmluZSBSZXF1ZXN0X2gKIAogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDYWNoZWRS
ZXNvdXJjZTsKICAgICBjbGFzcyBEb2NMb2FkZXI7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAg
Y2xhc3MgRnJhbWU7CiAKICAgICBjbGFzcyBSZXF1ZXN0IDogcHVibGljIE5vbmNvcHlhYmxlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFJlcXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2Uq
LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5LCBib29sIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpOworICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291
cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBhZ2VQ
b2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAgICAgICAgIH5SZXF1ZXN0
KCk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcigpIHsgcmV0dXJuIG1f
YnVmZmVyOyB9CkBAIC00OSw2ICs1Miw5IEBACiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kg
c2hvdWxkRG9TZWN1cml0eUNoZWNrKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREb1NlY3VyaXR5
Q2hlY2s7IH0KICAgICAgICAgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOyB9CiAgICAgICAgIAorICAgICAg
ICBPdXRsaXZlUGFnZVBvbGljeSBjYW5PdXRsaXZlUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gT3V0bGl2ZVBhZ2UgOiBEb05vdE91dGxp
dmVQYWdlOyB9CisgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0OworICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgICAgIENhY2hlZFJl
c291cmNlKiBtX29iamVjdDsKQEAgLTU3LDYgKzYzLDggQEAKICAgICAgICAgYm9vbCBtX211bHRp
cGFydDsKICAgICAgICAgU2VjdXJpdHlDaGVja1BvbGljeSBtX3Nob3VsZERvU2VjdXJpdHlDaGVj
azsKICAgICAgICAgYm9vbCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7CisgICAgICAgIFJl
ZlB0cjxGcmFtZT4gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2U7CisgICAgICAg
IFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudEZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2U7
CiAgICAgfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9D
YWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2Uu
Y3BwCShyZXZpc2lvbiA1OTYxMikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsOSArODIsMTYgQEAKIAogdm9pZCBDYWNoZWRJbWFnZTo6bG9h
ZChEb2NMb2FkZXIqIGRvY0xvYWRlcikKIHsKLSAgICBpZiAoIWRvY0xvYWRlciB8fCBkb2NMb2Fk
ZXItPmF1dG9Mb2FkSW1hZ2VzKCkpCi0gICAgICAgIENhY2hlZFJlc291cmNlOjpsb2FkKGRvY0xv
YWRlciwgdHJ1ZSwgRG9TZWN1cml0eUNoZWNrLCB0cnVlKTsKLSAgICBlbHNlCisgICAgaWYgKCFk
b2NMb2FkZXIgfHwgZG9jTG9hZGVyLT5hdXRvTG9hZEltYWdlcygpKSB7CisgICAgICAgIC8vIElm
IHdlIGFyZSBsb2FkaW5nIGFuIGltYWdlIGR1cmluZyBhbiB1bmxvYWQgZXZlbnQsIHdlIHdhbnQg
dG8gYWxsb3cgdGhlIHJlcXVlc3QgdG8gb3V0bGl2ZSB0aGUgcGFnZQorICAgICAgICAvLyB0aGF0
IHdlIGFyZSBsZWF2aW5nLiBTb21lIHNpdGVzIHJlbHkgb24gaW1hZ2UgcmVxdWVzdHMgaW4gYmVm
b3JldW5sb2FkIG9yIHVubG9hZCBldmVudCBoYW5kbGVycyB0byAKKyAgICAgICAgLy8gdHJhY2sg
dGltZSBzcGVudCBvbiB0aGUgcGFnZS4gVGhpcyB3aWxsIGFsbG93IHRoZW0gdG8gZG8gdGhlIHRy
YWNraW5nIHRoYXQgdGhleSBhcmUgZ29pbmcgdG8gZG8gYW55d2F5LAorICAgICAgICAvLyBidXQg
YXN5bmNocm9ub3VzbHkgc28gdGhhdCB0aGV5IGRvbid0IHNsb3cgZG93biBuYXZpZ2F0aW9uLgor
ICAgICAgICBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSA9IGRvY0xvYWRlciAm
JiBkb2NMb2FkZXItPmZyYW1lKCkKKyAgICAgICAgICAgICYmIGRvY0xvYWRlci0+ZnJhbWUoKS0+
bG9hZGVyKCktPmlzRGlzcGF0Y2hpbmdQYWdlRGlzbWlzc2FsRXZlbnQoKQorICAgICAgICAgICAg
PyBPdXRsaXZlUGFnZSA6IERvTm90T3V0bGl2ZVBhZ2U7CisgICAgICAgIENhY2hlZFJlc291cmNl
Ojpsb2FkKGRvY0xvYWRlciwgdHJ1ZSwgRG9TZWN1cml0eUNoZWNrLCBvdXRsaXZlUGFnZVBvbGlj
eSwgdHJ1ZSk7CisgICAgfSBlbHNlCiAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpOwogfQogCkBA
IC0yNTQsNyArMjYxLDcgQEAKIAogc2l6ZV90IENhY2hlZEltYWdlOjptYXhpbXVtRGVjb2RlZElt
YWdlU2l6ZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8gbV9yZXF1ZXN0LT5k
b2NMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7CisgICAgRnJhbWUqIGZyYW1lID0gbV9yZXF1ZXN0ID8g
bV9yZXF1ZXN0LT5mcmFtZSgpIDogMDsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDU5NjEyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAg
ICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cykKICAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKICAgICAs
IG1fc2hvdWxkQnVmZmVyRGF0YSh0cnVlKQotICAgICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5w
YWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKKyAgICAsIG1fZGVmZXJzTG9hZGluZyhmcmFtZS0+cGFn
ZSgpICYmIGZyYW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSkKIHsKIH0KIApAQCAtMjE0LDcg
KzIxNCw3IEBACiAKICAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKSB7CiAgICAg
ICAgIGlmICghbV9pZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2Zy
YW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgIG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+
cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpIDogMDsKICAgICAgICAgICAgIGZy
YW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KG1faWRlbnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CiAgICAgICAgIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNTk2MTIpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCAr
MTAxLDEwIEBACiAgICAgICAgIG1fZG9jTG9hZGVyLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSh0aGlz
KTsKIH0KICAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9h
ZChEb2NMb2FkZXIqIGRvY0xvYWRlciwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSwg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0gICAgY2FjaGUoKS0+bG9h
ZGVyKCktPmxvYWQoZG9jTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywg
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQo
ZG9jTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgIG1fbG9hZGluZyA9IHRydWU7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDU5NjEyKQor
KysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NzIsNyArNTcyLDcgQEAKIAogICAgIGlmICghcmVzb3VyY2UpIHsKICAgICAgICAgLy8gV2ViQXJj
aGl2ZURlYnVnTW9kZSBtZWFucyB3ZSBmYWlsIGxvYWRzIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGZl
dGNoIHRoZW0gZnJvbSB0aGUgbmV0d29yayBpZiB0aGV5J3JlIG5vdCBpbiB0aGUgYXJjaGl2ZS4K
LSAgICAgICAgYm9vbCBzaG91bGRGYWlsTG9hZCA9IG1fZnJhbWUtPnNldHRpbmdzKCktPndlYkFy
Y2hpdmVEZWJ1Z01vZGVFbmFibGVkKCkgJiYgQXJjaGl2ZUZhY3Rvcnk6OmlzQXJjaGl2ZU1pbWVU
eXBlKHJlc3BvbnNlTUlNRVR5cGUoKSk7CisgICAgICAgIGJvb2wgc2hvdWxkRmFpbExvYWQgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPndlYkFyY2hpdmVEZWJ1
Z01vZGVFbmFibGVkKCkgJiYgQXJjaGl2ZUZhY3Rvcnk6OmlzQXJjaGl2ZU1pbWVUeXBlKHJlc3Bv
bnNlTUlNRVR5cGUoKSk7CiAKICAgICAgICAgaWYgKCFzaG91bGRGYWlsTG9hZCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDU5NjEyKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAKICNlbmRpZgogfQogCi1QYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCitQYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91
dGxpdmVQYWdlUG9saWN5IG91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgRnJhbWVMb2FkZXIqIGZsID0gZnJhbWUtPmxvYWRlcigp
OwotICAgIGlmIChzZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjayAmJiAoZmwtPnN0YXRl
KCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8IGZsLT5hY3RpdmVEb2N1bWVudExvYWRlcigp
LT5pc1N0b3BwaW5nKCkpKQorICAgIGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBEb05vdE91dGxp
dmVQYWdlICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0OwogCi0gICAgaWYgKHNl
Y3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrCisgICAgaWYgKHNlY3VyaXR5Q2hlY2tQb2xp
Y3kgPT0gRG9TZWN1cml0eUNoZWNrCiAgICAgICAgICAgICAmJiBTZWN1cml0eU9yaWdpbjo6cmVz
dHJpY3RBY2Nlc3NUb0xvY2FsKCkKICAgICAgICAgICAgICYmICFTZWN1cml0eU9yaWdpbjo6Y2Fu
TG9hZChyZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCkpKSB7CiAgICAg
ICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoZnJhbWUsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkocmV2aXNpb24gNTk2MTIpCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAg
ICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3QgdXNlIG5vcm1hbCByZWZj
b3VudGluZyBpbnN0ZWFkLgogICAgICAgICB1c2VyU2hlZXQtPnNldEluQ2FjaGUodHJ1ZSk7CiAg
ICAgICAgIC8vIERvbid0IGxvYWQgaW5jcmVtZW50YWxseSwgc2tpcCBsb2FkIGNoZWNrcywgZG9u
J3Qgc2VuZCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrcy4KLSAgICAgICAgdXNlclNoZWV0LT5sb2Fk
KGRvY0xvYWRlciwgZmFsc2UsIFNraXBTZWN1cml0eUNoZWNrLCBmYWxzZSk7CisgICAgICAgIHVz
ZXJTaGVldC0+bG9hZChkb2NMb2FkZXIsIGZhbHNlLCBTa2lwU2VjdXJpdHlDaGVjaywgRG9Ob3RP
dXRsaXZlUGFnZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWRpc2FibGVkKCkpCiAgICAgICAgICAg
ICBtX3Jlc291cmNlcy5zZXQodXJsLCB1c2VyU2hlZXQpOwogICAgICAgICBlbHNlCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xv
YWRlci5jcHAJKHJldmlzaW9uIDU5NjEyKQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDEwICsxMTgsMTAgQEAKICNlbmRpZgogfQogCi12b2lkIExv
YWRlcjo6bG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRl
ciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWws
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0
bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBB
U1NFUlQoZG9jTG9hZGVyKTsKLSAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZG9j
TG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpOworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NM
b2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogCiAgICAgUmVmUHRyPEhvc3Q+IGhv
c3Q7CiAgICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCByZXNvdXJjZS0+dXJsKCkpOwpAQCAt
MTM5LDkgKzEzOSwxMSBAQAogICAgIGJvb2wgaGFkUmVxdWVzdHMgPSBob3N0LT5oYXNSZXF1ZXN0
cygpOwogICAgIFByaW9yaXR5IHByaW9yaXR5ID0gZGV0ZXJtaW5lUHJpb3JpdHkocmVzb3VyY2Up
OwogICAgIGhvc3QtPmFkZFJlcXVlc3QocmVxdWVzdCwgcHJpb3JpdHkpOwotICAgIGRvY0xvYWRl
ci0+aW5jcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgcmVxdWVzdC0+ZG9jTG9hZGVyKCktPmlu
Y3JlbWVudFJlcXVlc3RDb3VudCgpOwogCi0gICAgaWYgKHByaW9yaXR5ID4gTG93IHx8ICF1cmwu
cHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVxdWVzdHMpIHsKKyAgICAvLyBXZSB3YW50
IHRvIGd1YXJhbnRlZSB0aGF0IHJlcXVlc3RzIHdoaWNoIG91dGxpdmUgdGhlIHBhZ2UgYXJlIHJ1
biBhc3luY2hyb25vdXNseSwgc28gb25seQorICAgIC8vIHNlcnZlIHRoZSByZXF1ZXN0IGltbWVk
aWF0ZWx5IGlmIHRoZSByZXF1ZXN0IGRvZXNuJ3QgbmVlZCB0byBvdXRsaXZlIHRoZSBwYWdlLgor
ICAgIGlmIChyZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpID09IERvTm90T3V0bGl2ZVBhZ2UgJiYg
KHByaW9yaXR5ID4gTG93IHx8ICF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVx
dWVzdHMpKSB7CiAgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMg
aW1tZWRpYXRlbHkKICAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMocHJpb3JpdHkp
OwogICAgIH0gZWxzZSB7CkBAIC0zNjEsOCArMzYzLDggQEAKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmRvYygpLT5mcmFtZSgpLAotICAgICAgICAg
ICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2so
KSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKKyAgICAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKHJl
cXVlc3QtPmZyYW1lKCksCisgICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJlcXVl
c3QtPnNob3VsZERvU2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpLCBy
ZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogICAgICAgICBpZiAobG9hZGVy
KSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQobG9hZGVyLnJlbGVhc2UoKSwg
cmVxdWVzdCk7CiAgICAgICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1
ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDU5NjEyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcg
KzMxMCw3IEBACiAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxs
YmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9s
ZCBsb2FkZXIuCiAgICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3Qs
IHNlY3VyaXR5Q2hlY2ssIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOworICAgICAg
ICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUobV9kb2N1bWVudC0+ZnJhbWUo
KSwgdGhpcywgcmVxdWVzdCwgc2VjdXJpdHlDaGVjaywgRG9Ob3RPdXRsaXZlUGFnZSwgc2VuZExv
YWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDU5NjEyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDYgKzM0NCwxMCBAQAogICAg
IHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSgpOwogICAgIAogICAgIGJvb2wg
c3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc09wZW5l
ckluTmV3RnJhbWU7IH0KKyAgICAKKyAgICBib29sIGlzRGlzcGF0Y2hpbmdQYWdlRGlzbWlzc2Fs
RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hl
ZDsgfQorICAgIHZvaWQgaW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKSB7IG1fb3V0
bGl2ZVBhZ2VSZXF1ZXN0Q291bnQrKzsgfQorICAgIHZvaWQgZGVjcmVtZW50T3V0bGl2ZVBhZ2VS
ZXF1ZXN0Q291bnQoKSB7IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQtLTsgfQogCiAgICAgc3Rh
dGljIE9iamVjdENvbnRlbnRUeXBlIGRlZmF1bHRPYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCkBAIC00OTgsNiArNTAyLDcgQEAKICAg
ICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7CiAgICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50
RW1pdHRlZDsKICAgICBib29sIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkOwor
ICAgIGludCBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50OwogICAgIGJvb2wgbV9pc0NvbXBsZXRl
OwogICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7CiAKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3Bw
CShyZXZpc2lvbiA1OTYxMikKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVxdWVzdDo6UmVxdWVzdChEb2NM
b2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRh
bCwgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcykKK1JlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIENhY2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hl
Y2tQb2xpY3kgc2hvdWxkRG9TZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZl
UGFnZVBvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgIDogbV9vYmpl
Y3Qob2JqZWN0KQogICAgICwgbV9kb2NMb2FkZXIoZG9jTG9hZGVyKQogICAgICwgbV9pbmNyZW1l
bnRhbChpbmNyZW1lbnRhbCkKQEAgLTM3LDExICszOSwyNyBAQAogICAgICwgbV9zZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgbV9vYmpl
Y3QtPnNldFJlcXVlc3QodGhpcyk7CisgICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IE91dGxp
dmVQYWdlKSB7CisgICAgICAgIC8vIElmIGEgcmVxdWVzdCBuZWVkcyB0byBzdXJ2aXZlIGRvY3Vt
ZW50IGRldGFjaG1lbnQgYW5kIG5hdmlnYXRpb24sIHdlIG5lZWQgdG8ga2VlcCBzb21lIG9iamVj
dHMKKyAgICAgICAgLy8gYXJvdW5kIGFuZCByZWZjb3VudGVkLiBXZSBrZWVwIGEgZnJhbWUsIGFu
ZCBpbnN0YW50aWF0ZSBhIGR1bW15IERvY3VtZW50IGFuZCBEb2NMb2FkZXIgZm9yIHRoZSBsb2Fk
LgorICAgICAgICAvLyBUaGlzIGFsbG93cyB0aGUgRG9jTG9hZGVyIHBhc3NlZCBpbiB0byBiZSBj
YW5jZWxsZWQvZGVzdHJ1Y3RlZCBub3JtYWxseS4KKyAgICAgICAgbV9mcmFtZUZvclJlcXVlc3RU
aGF0Q2FuT3V0bGl2ZVBhZ2UgPSBkb2NMb2FkZXItPmZyYW1lKCk7CisgICAgICAgIG1fZG9jdW1l
bnRGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID0gRG9jdW1lbnQ6OmNyZWF0ZShtX2ZyYW1l
Rm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS5nZXQoKSk7CisgICAgICAgIG1fZG9jTG9hZGVy
ID0gbV9kb2N1bWVudEZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UtPmRvY0xvYWRlcigpOwor
ICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCktPmlu
Y3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgfQogfQogCiBSZXF1ZXN0Ojp+
UmVxdWVzdCgpCiB7CisgICAgaWYgKG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdl
KQorICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCkt
PmRlY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CiAgICAgbV9vYmplY3QtPnNldFJl
cXVlc3QoMCk7CiB9CisgICAgCitGcmFtZSogUmVxdWVzdDo6ZnJhbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IG1fZnJhbWVGb3JS
ZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLmdldCgpIDogbV9kb2NMb2FkZXItPmZyYW1lKCk7Cit9
CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oCShyZXZpc2lvbiA1OTYxMikKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgU3VicmVzb3VyY2VM
b2FkZXJfaAogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2luY2x1ZGUgIlJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzksNyArNDAsNyBAQAogICAgIAogICAgIGNsYXNzIFN1YnJlc291cmNlTG9hZGVyIDog
cHVibGljIFJlc291cmNlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRl
ckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBE
b1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUsIGJv
b2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVu
dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgPSBEb1NlY3Vy
aXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5ID0gRG9Ob3RPdXRsaXZlUGFnZSwgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0
cnVlKTsKIAogICAgICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IDA7IH0KIApJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVm
b3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8dW5rbm93bj4gLSBkaWRGYWlsTG9hZGluZ1dp
dGhFcnJvcjogPE5TRXJyb3IgZG9tYWluIE5TVVJMRXJyb3JEb21haW4sIGNvZGUgLTk5OSwgZmFp
bGluZyBVUkwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4t
YmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCI+CitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSB3aWxsU2VuZFJlcXVl
c3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBtYWluIGRvY3VtZW50IFVSTCBodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1k
b25lLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2Vj
LnBsIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRv
Y3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWlu
LWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNw
b25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93
YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxSZXNw
b25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVu
LW5vdGlmeS1kb25lLmh0bWwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0g
ZGlkRmluaXNoTG9hZGluZworaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVz
cG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVz
b3VyY2UtMS1zZWMucGwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgoraHR0cDovLzEyNy4wLjAuMTo4
MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSBkaWRGaW5p
c2hMb2FkaW5nCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhh
bmRsZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjMgQEAKKzxodG1sPjxoZWFkPgorPHRpdGxlPkltYWdlIGxvYWQgaW4gdW5s
b2FkIGhhbmRsZXI8L3RpdGxlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIG5hdmlnYXRlKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJsaW5rIik7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRhcmdldC5vZmZz
ZXRMZWZ0ICsgMiwgdGFyZ2V0Lm9mZnNldFRvcCArIDIpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZURvd24oKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gcmVxdWVzdEltYWdlKCkgeworICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoMSwgMSk7
CisgICAgaW1nLnNyYyA9ICJyZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCI7Cit9Cis8
L3NjcmlwdD48L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbmJlZm9yZXVubG9h
ZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2FpdC10
aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4NCis8c2Ny
aXB0Pg0KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7DQorICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsNCisgICAgICAgIH0sIDIwMDApOw0KKyAgICB9DQorPC9zY3JpcHQ+DQor
PC9odG1sPg0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1s
b2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOSBAQAorbWFpbiBmcmFtZSAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIo
cykKKzx1bmtub3duPiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4g
TlNVUkxFcnJvckRvbWFpbiwgY29kZSAtOTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3
LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0
bWwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRp
cmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxO
U1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93
YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwgLSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIHdpbGxTZW5kUmVxdWVzdCA8TlNV
UkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
c2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBo
dHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJl
Y2VpdmVSZXNwb25zZSA8TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAy
MDA+CitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNv
dXJjZS0xLXNlYy5wbCAtIGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNCBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBp
biB1bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0
Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQor
fQorCitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgx
LCAxKTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJuYXZpZ2F0ZSgpOyIgb251bmxv
YWQ9InJlcXVlc3RJbWFnZSgpOyI+Cis8YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sIj5saW5rPC9hPgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDU5NjEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMTcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0cyBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3Jl
dW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQt
aGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0
bWw6IEFkZGVkLgorCiAyMDEwLTA1LTE0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58815</attachid>
            <date>2010-06-15 13:54:03 -0700</date>
            <delta_ts>2010-07-21 13:52:59 -0700</delta_ts>
            <desc>+ more thorough ChangeLog</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>29284</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDYtMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmxvYWQpOiBQZXJmb3Jt
IHRoZSBjaGVjayB0aGF0IGRlY2lkZXMgd2hldGhlciBhbgorICAgICAgICAgICAgaW1hZ2UgbG9h
ZCBzaG91bGQgYmUgcnVuIGFzeW5jaHJvbm91c2x5IHRocm91Z2ggbmF2aWdhdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjptYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSk6IFVzZSBS
ZXF1ZXN0OjpmcmFtZSgpLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6bG9hZCk6IFBhc3MgT3V0bGl2ZVBhZ2VQ
b2xpY3kgdG8gbG9hZGVyLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6c2NoZWR1bGVBcmNoaXZlTG9hZCk6IEFsbG93IEZyYW1lOjpzZXR0aW5ncygp
IHRvIGJlIG5vbi1udWxsLAorICAgICAgICAgICAgIGFzIHdpbGwgb2Z0ZW4gYmUgdGhlIGNhc2Ug
aW4gb3V0bGl2aW5nIHBhZ2UgcmVxdWVzdHMuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpzZXREb2N1bWVudExvYWRlcik6IERvbid0IGFsbG93IG1fZG9j
dW1lbnRMb2FkZXIgdG8KKyAgICAgICAgICAgIGJlY29tZSBudWxsIGlmIGEgcmVxdWVzdCBpcyBp
biBwcm9ncmVzcyB0aGF0IG91dGxpdmVzIGl0cyBwYWdlLiBDcmVhdGUKKyAgICAgICAgICAgIGEg
ZHVtbXkgRG9jdW1lbnRMb2FkZXIgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6IE91dGxpdmluZyBsb2FkcyBtYXkgbm90IGhhdmUgYQor
ICAgICAgICAgICAgd2VidmlldyBhbnltb3JlLCBzbyBkb24ndCBBU1NFUlQgdGhhdCB0aGV5IGRv
LgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmlzRGlzcGF0Y2hpbmdQYWdlRGlzbWlzc2FsRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3Vu
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRlY3JlbWVudE91dGxp
dmVQYWdlUmVxdWVzdENvdW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
VHlwZXMuaDogQWRkIE91dGxpdmVQYWdlUG9saWN5IGVudW0uCisgICAgICAgICogbG9hZGVyL1Jl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6UmVxdWVzdCk6IEFkZCBPdXRs
aXZlUGFnZVBvbGljeSB0byBwYXJhbWV0ZXJzIGFuZCBjcmVhdGUgCisgICAgICAgICAgICBGcmFt
ZS9Eb2N1bWVudC9Eb2NMb2FkZXIgZHVtbWllcyBpZiB0aGUgcG9saWN5IHJlcXVpcmVzIGl0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6flJlcXVlc3QpOiBDbGVhbiB1cCBhZnRlciBhbiBv
dXRsaXZpbmcgcGFnZSByZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUp
OiBSZXR1cm4gdGhlIGR1bW15IGZyYW1lIHdlJ3JlIGhvbGRpbmcgaWYgdGhpcyBpcworICAgICAg
ICAgICAgYW4gb3V0bGl2aW5nIHJlcXVlc3QsIGRlZmF1bHQgdG8gbV9kb2NMb2FkZXIoKS0+ZnJh
bWUoKSBvdGhlcndpc2UuCisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcXVlc3Q6OmNhbk91dGxpdmVQYWdlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpS
ZXNvdXJjZUxvYWRlcik6IEFsbG93IEZyYW1lOjpwYWdlKCkgdG8gYmUgbm9uLW51bGwsCisgICAg
ICAgICAgICAgYXMgd2lsbCBvZnRlbiBiZSB0aGUgY2FzZSBpbiBvdXRsaXZpbmcgcGFnZSByZXF1
ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qp
OiBBbGxvdyBGcmFtZTo6cGFnZSgpIHRvIGJlIG5vbi1udWxsLgorICAgICAgICAqIGxvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKTogU2VwYXJhdGUgU2VjdXJpdHlDaGVja1BvbGljeSBmcm9tIE91dGxpdmVQYWdl
UG9saWN5LgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAq
IGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKTogVGFr
ZSBhbiBPdXRsaXZlUGFnZVBvbGljeSBwYXJhbWV0ZXIgdG8gZ2l2ZSB0byBSZXF1ZXN0LAorICAg
ICAgICAgICAgIGFuZCBlbnN1cmUgcmVxdWVzdHMgdGhhdCBvdXRsaXZlIHRoZWlyIHBhZ2UgYXJl
IGFsd2F5cyBydW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhv
c3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKTogUGFzcyBPdXRsaXZlUGFnZVBvbGljeSB0byBTdWJy
ZXNvdXJjZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmg6CisKIDIwMTAtMDYtMTUg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggR1RL
KyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJKHJldmlzaW9uIDYxMjA5
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4MiwxMSBAQAogICAgICAgICBPYmplY3RDb250ZW50T3RoZXJQbHVnaW4KICAgICB9
OwogICAgIAorICAgIGVudW0gT3V0bGl2ZVBhZ2VQb2xpY3kgeworICAgICAgICBEb05vdE91dGxp
dmVQYWdlLAorICAgICAgICBPdXRsaXZlUGFnZQorICAgIH07CisgICAgCiAgICAgZW51bSBVbmxv
YWRFdmVudFBvbGljeSB7CiAgICAgICAgIFVubG9hZEV2ZW50UG9saWN5Tm9uZSwKICAgICAgICAg
VW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRPbmx5LApJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDYxMjA5
KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAKICAgICAgICAgTG9hZGVyKCk7CiAgICAgICAgIH5Mb2FkZXIoKTsKIAotICAgICAgICB2
b2lkIGxvYWQoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsID0g
dHJ1ZSwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7CisgICAgICAgIHZvaWQgbG9hZChEb2NMb2FkZXIq
LCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwgPSB0cnVlLCBTZWN1cml0eUNoZWNr
UG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSA9IERvTm90T3V0bGl2
ZVBhZ2UsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUpOwogCiAgICAgICAg
IHZvaWQgY2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKik7CiAgICAgICAgIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjEyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQAogICAgICwgbV9kaWRD
YWxsSW1wbGljaXRDbG9zZShmYWxzZSkKICAgICAsIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkKGZh
bHNlKQogICAgICwgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoZmFsc2UpCisg
ICAgLCBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50KDApCiAgICAgLCBtX2lzQ29tcGxldGUoZmFs
c2UpCiAgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHND
bGVhcihmYWxzZSkKQEAgLTIwODcsNyArMjA4OCwxMyBAQAogICAgIGlmIChtX2RvY3VtZW50TG9h
ZGVyKQogICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5kZXRhY2hGcm9tRnJhbWUoKTsKIAotICAg
IG1fZG9jdW1lbnRMb2FkZXIgPSBsb2FkZXI7CisgICAgLy8gSWYgdGhpcyBGcmFtZUxvYWRlciBp
cyBzdGlsbCByZWZlcnJlZCB0byBieSBhIFJlcXVlc3QgdGhhdCB3aWxsIG91dGxpdmUgdGhlIGN1
cnJlbnQgcGFnZSwgd2UgbmVlZAorICAgIC8vIHRvIGtlZXAgYSBub24tbnVsbCBEb2N1bWVudExv
YWRlci4KKyAgICBpZiAoIWxvYWRlciAmJiBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50KSB7Cisg
ICAgICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKFJlc291cmNl
UmVxdWVzdCgpLCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICAgICAgbV9kb2N1bWVudExvYWRlci0+
c2V0RnJhbWUobV9mcmFtZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXIg
PSBsb2FkZXI7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNldFBvbGljeURvY3VtZW50TG9hZGVy
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0yODQzLDggKzI4NTAsNiBAQAogLy8gQ2FsbGVk
IGV2ZXJ5IHRpbWUgYSByZXNvdXJjZSBpcyBjb21wbGV0ZWx5IGxvYWRlZCwgb3IgYW4gZXJyb3Ig
aXMgcmVjZWl2ZWQuCiB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiB7Ci0g
ICAgQVNTRVJUKG1fY2xpZW50LT5oYXNXZWJWaWV3KCkpOwotICAgIAogICAgIG1fc2hvdWxkQ2Fs
bENoZWNrTG9hZENvbXBsZXRlID0gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogQWx3YXlzIHRyYXZl
cnNpbmcgdGhlIGVudGlyZSBmcmFtZSB0cmVlIGlzIGEgYml0IGluZWZmaWNpZW50LCBidXQgCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQAog
ICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBUeXBlKTsKICAgICB2aXJ0dWFs
IH5DYWNoZWRSZXNvdXJjZSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBsb2FkKERvY0xvYWRl
ciogZG9jTG9hZGVyKSAgeyBsb2FkKGRvY0xvYWRlciwgZmFsc2UsIERvU2VjdXJpdHlDaGVjaywg
dHJ1ZSk7IH0KLSAgICB2b2lkIGxvYWQoRG9jTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2Vj
dXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikgIHsgbG9hZChkb2NMb2FkZXIs
IGZhbHNlLCBEb1NlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2UsIHRydWUpOyB9CisgICAg
dm9pZCBsb2FkKERvY0xvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xp
Y3ksIE91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZp
cnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9S
ZXF1ZXN0LmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxNiArMjQsMTkgQEAKICNkZWZpbmUgUmVxdWVzdF9oCiAKICNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
Q2FjaGVkUmVzb3VyY2U7CiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIERvY3VtZW50
OworICAgIGNsYXNzIEZyYW1lOwogCiAgICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJl
c291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNo
ZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxp
dmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+
UmVxdWVzdCgpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJl
dHVybiBtX2J1ZmZlcjsgfQpAQCAtNDksNiArNTIsOSBAQAogICAgICAgICBTZWN1cml0eUNoZWNr
UG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9T
ZWN1cml0eUNoZWNrOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAK
KyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgY2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9O
b3RPdXRsaXZlUGFnZTsgfQorICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7CkBAIC01Nyw2ICs2Myw4IEBACiAgICAgICAgIGJvb2wg
bV9tdWx0aXBhcnQ7CiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3Vy
aXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAg
ICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOwor
ICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnRGb3JSZXF1ZXN0VGhhdENhbk91dGxp
dmVQYWdlOwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEltYWdlLmNwcAkocmV2aXNpb24gNjEyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDE2IEBACiAKIHZvaWQgQ2FjaGVkSW1h
Z2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgaWYgKCFkb2NMb2FkZXIgfHwg
ZG9jTG9hZGVyLT5hdXRvTG9hZEltYWdlcygpKQotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9h
ZChkb2NMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7Ci0gICAgZWxzZQorICAg
IGlmICghZG9jTG9hZGVyIHx8IGRvY0xvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkgeworICAgICAg
ICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2FkIGV2ZW50LCB3
ZSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAgICAg
Ly8gdGhhdCB3ZSBhcmUgbGVhdmluZy4gU29tZSBzaXRlcyByZWx5IG9uIGltYWdlIHJlcXVlc3Rz
IGluIGJlZm9yZXVubG9hZCBvciB1bmxvYWQgZXZlbnQgaGFuZGxlcnMgdG8gCisgICAgICAgIC8v
IHRyYWNrIHRpbWUgc3BlbnQgb24gdGhlIHBhZ2UuIFRoaXMgd2lsbCBhbGxvdyB0aGVtIHRvIGRv
IHRoZSB0cmFja2luZyB0aGF0IHRoZXkgYXJlIGdvaW5nIHRvIGRvIGFueXdheSwKKyAgICAgICAg
Ly8gYnV0IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhleSBkb24ndCBzbG93IGRvd24gbmF2aWdh
dGlvbi4KKyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3kgPSBkb2NM
b2FkZXIgJiYgZG9jTG9hZGVyLT5mcmFtZSgpCisgICAgICAgICAgICAmJiBkb2NMb2FkZXItPmZy
YW1lKCktPmxvYWRlcigpLT5pc0Rpc3BhdGNoaW5nUGFnZURpc21pc3NhbEV2ZW50KCkKKyAgICAg
ICAgICAgID8gT3V0bGl2ZVBhZ2UgOiBEb05vdE91dGxpdmVQYWdlOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZTo6bG9hZChkb2NMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBh
Z2VQb2xpY3ksIHRydWUpOworICAgIH0gZWxzZQogICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
IH0KIApAQCAtMjU0LDcgKzI2MSw3IEBACiAKIHNpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURl
Y29kZWRJbWFnZVNpemUoKQogewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVx
dWVzdC0+ZG9jTG9hZGVyKCktPmZyYW1lKCkgOiAwOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVx
dWVzdCA/IG1fcmVxdWVzdC0+ZnJhbWUoKSA6IDA7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQAogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYp
CiAgICAgLCBtX3Nob3VsZEJ1ZmZlckRhdGEodHJ1ZSkKLSAgICAsIG1fZGVmZXJzTG9hZGluZyhm
cmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCisgICAgLCBtX2RlZmVyc0xvYWRpbmcoZnJh
bWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCiB7CiB9CiAKQEAg
LTIxNCw3ICsyMTQsNyBAQAogCiAgICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykg
ewogICAgICAgICBpZiAoIW1faWRlbnRpZmllcikgewotICAgICAgICAgICAgbV9pZGVudGlmaWVy
ID0gbV9mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKSA6IDA7CiAgICAgICAg
ICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFs
UmVxdWVzdChtX2lkZW50aWZpZXIsIGRvY3VtZW50TG9hZGVyKCksIHJlcXVlc3QpOwogICAgICAg
ICB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDYxMjA5KQor
KysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsMTAgKzEwMSwxMCBAQAogICAgICAgICBtX2RvY0xvYWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3Vy
Y2UodGhpcyk7CiB9CiAgICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKERvY0xvYWRlciog
ZG9jTG9hZGVyLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5
Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgIGNhY2hl
KCktPmxvYWRlcigpLT5sb2FkKGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5
Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGNhY2hlKCktPmxvYWRlcigp
LT5sb2FkKGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIG91dGxp
dmVQYWdlUG9saWN5LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICBtX2xvYWRpbmcg
PSB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA2
MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcyLDcgKzU3Miw3IEBACiAKICAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAgIC8v
IFdlYkFyY2hpdmVEZWJ1Z01vZGUgbWVhbnMgd2UgZmFpbCBsb2FkcyBpbnN0ZWFkIG9mIHRyeWlu
ZyB0byBmZXRjaCB0aGVtIGZyb20gdGhlIG5ldHdvcmsgaWYgdGhleSdyZSBub3QgaW4gdGhlIGFy
Y2hpdmUuCi0gICAgICAgIGJvb2wgc2hvdWxkRmFpbExvYWQgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LT53ZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZCgpICYmIEFyY2hpdmVGYWN0b3J5Ojppc0FyY2hp
dmVNaW1lVHlwZShyZXNwb25zZU1JTUVUeXBlKCkpOworICAgICAgICBib29sIHNob3VsZEZhaWxM
b2FkID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT53ZWJBcmNo
aXZlRGVidWdNb2RlRW5hYmxlZCgpICYmIEFyY2hpdmVGYWN0b3J5Ojppc0FyY2hpdmVNaW1lVHlw
ZShyZXNwb25zZU1JTUVUeXBlKCkpOwogCiAgICAgICAgIGlmICghc2hvdWxkRmFpbExvYWQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBACiAjZW5kaWYKIH0KIAot
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShG
cmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQor
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShG
cmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrUG9s
aWN5LCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSwgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEZyYW1lTG9hZGVyKiBmbCA9IGZyYW1lLT5s
b2FkZXIoKTsKLSAgICBpZiAoc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZs
LT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZlRG9jdW1lbnRM
b2FkZXIoKS0+aXNTdG9wcGluZygpKSkKKyAgICBpZiAob3V0bGl2ZVBhZ2VQb2xpY3kgPT0gRG9O
b3RPdXRsaXZlUGFnZSAmJiAoZmwtPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8
IGZsLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDsKIAotICAg
IGlmIChzZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjaworICAgIGlmIChzZWN1cml0eUNo
ZWNrUG9saWN5ID09IERvU2VjdXJpdHlDaGVjawogICAgICAgICAgICAgJiYgU2VjdXJpdHlPcmln
aW46OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpCiAgICAgICAgICAgICAmJiAhU2VjdXJpdHlPcmln
aW46OmNhbkxvYWQocmVxdWVzdC51cmwoKSwgU3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpKSkg
ewogICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGZyYW1lLCByZXF1
ZXN0LnVybCgpLnN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDYxMjA5KQorKysg
V2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcg
QEAKICAgICAgICAgLy8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3Jt
YWwgcmVmY291bnRpbmcgaW5zdGVhZC4KICAgICAgICAgdXNlclNoZWV0LT5zZXRJbkNhY2hlKHRy
dWUpOwogICAgICAgICAvLyBEb24ndCBsb2FkIGluY3JlbWVudGFsbHksIHNraXAgbG9hZCBjaGVj
a3MsIGRvbid0IHNlbmQgcmVzb3VyY2UgbG9hZCBjYWxsYmFja3MuCi0gICAgICAgIHVzZXJTaGVl
dC0+bG9hZChkb2NMb2FkZXIsIGZhbHNlLCBTa2lwU2VjdXJpdHlDaGVjaywgZmFsc2UpOworICAg
ICAgICB1c2VyU2hlZXQtPmxvYWQoZG9jTG9hZGVyLCBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ss
IERvTm90T3V0bGl2ZVBhZ2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCFkaXNhYmxlZCgpKQogICAg
ICAgICAgICAgbV9yZXNvdXJjZXMuc2V0KHVybCwgdXNlclNoZWV0KTsKICAgICAgICAgZWxzZQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMCArMTE4LDEwIEBACiAjZW5kaWYKIH0KIAot
dm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNo
ZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCit2b2lkIExvYWRlcjo6bG9hZChE
b2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3Jl
bWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9s
aWN5IG91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7
CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1
ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVl
c3QoZG9jTG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIG91dGxp
dmVQYWdlUG9saWN5LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKIAogICAgIFJlZlB0cjxI
b3N0PiBob3N0OwogICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2UtPnVybCgp
KTsKQEAgLTEzOSw5ICsxMzksMTEgQEAKICAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+aGFz
UmVxdWVzdHMoKTsKICAgICBQcmlvcml0eSBwcmlvcml0eSA9IGRldGVybWluZVByaW9yaXR5KHJl
c291cmNlKTsKICAgICBob3N0LT5hZGRSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKLSAgICBk
b2NMb2FkZXItPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgIHJlcXVlc3QtPmRvY0xvYWRl
cigpLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKIAotICAgIGlmIChwcmlvcml0eSA+IExvdyB8
fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSB7CisgICAgLy8g
V2Ugd2FudCB0byBndWFyYW50ZWUgdGhhdCByZXF1ZXN0cyB3aGljaCBvdXRsaXZlIHRoZSBwYWdl
IGFyZSBydW4gYXN5bmNocm9ub3VzbHksIHNvIG9ubHkKKyAgICAvLyBzZXJ2ZSB0aGUgcmVxdWVz
dCBpbW1lZGlhdGVseSBpZiB0aGUgcmVxdWVzdCBkb2Vzbid0IG5lZWQgdG8gb3V0bGl2ZSB0aGUg
cGFnZS4KKyAgICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91dGxpdmVQ
YWdlICYmIChwcmlvcml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwg
IWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBvcnRhbnQgcmVz
b3VyY2VzIGltbWVkaWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZlUGVuZGluZ1JlcXVlc3RzKHBy
aW9yaXR5KTsKICAgICB9IGVsc2UgewpAQCAtMzYxLDggKzM2Myw4IEBACiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9
IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jTG9hZGVyLT5kb2MoKS0+ZnJhbWUoKSwKLSAg
ICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0
eUNoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CisgICAgICAg
IFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZShyZXF1ZXN0LT5mcmFtZSgpLAorICAgICAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0
LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2soKSwgcmVxdWVzdC0+Y2FuT3V0bGl2ZVBh
Z2UoKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKICAgICAgICAgaWYg
KGxvYWRlcikgewogICAgICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxl
YXNlKCksIHJlcXVlc3QpOwogICAgICAgICAgICAgcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+
c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMCw3ICszMTAsNyBAQAogCiAgICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhhdCBh
bnkgY2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBoYXZl
IHRoZSBvbGQgbG9hZGVyLgogICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9hZGVy
ID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsK
KyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQt
PmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2Us
IHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsMTAg
QEAKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKTsKICAgICAKICAg
ICBib29sIHN1cHByZXNzT3BlbmVySW5OZXdGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcHJl
c3NPcGVuZXJJbk5ld0ZyYW1lOyB9CisgICAgCisgICAgYm9vbCBpc0Rpc3BhdGNoaW5nUGFnZURp
c21pc3NhbEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQ7IH0KKyAgICB2b2lkIGluY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCkg
eyBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50Kys7IH0KKyAgICB2b2lkIGRlY3JlbWVudE91dGxp
dmVQYWdlUmVxdWVzdENvdW50KCkgeyBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50LS07IH0KIAog
ICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIApAQCAtMzU1LDEyICszNTks
NiBAQAogICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkNh
Y2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBs
b2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpOwotICAgIGJvb2wgbG9nQ2FuQ2FjaGVGcmFtZURlY2lz
aW9uKGludCBpbmRlbnRMZXZlbCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVk
KFRpbWVyPEZyYW1lTG9hZGVyPiopOwogCiAgICAgdm9pZCBzdGFydGVkKCk7CkBAIC00NDksOCAr
NDQ3LDYgQEAKIAogICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwogCi0gICAgYm9v
bCBjYW5DYWNoZVBhZ2UoKTsKLQogICAgIGJvb2wgZGlkT3BlblVSTChjb25zdCBLVVJMJik7CiAK
ICAgICB2b2lkIHNjaGVkdWxlQ2hlY2tDb21wbGV0ZWQoKTsKQEAgLTQ5Niw2ICs0OTIsNyBAQAog
ICAgIGJvb2wgbV9kaWRDYWxsSW1wbGljaXRDbG9zZTsKICAgICBib29sIG1fd2FzVW5sb2FkRXZl
bnRFbWl0dGVkOwogICAgIGJvb2wgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQ7
CisgICAgaW50IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQ7CiAgICAgYm9vbCBtX2lzQ29tcGxl
dGU7CiAgICAgYm9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsKIApJbmRleDogV2ViQ29yZS9s
b2FkZXIvUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogI2luY2x1ZGUgIlJlcXVlc3QuaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXF1ZXN0OjpSZXF1ZXN0KERv
Y0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVu
dGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xv
YWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlD
aGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5IG91dGxp
dmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAgOiBtX29i
amVjdChvYmplY3QpCiAgICAgLCBtX2RvY0xvYWRlcihkb2NMb2FkZXIpCiAgICAgLCBtX2luY3Jl
bWVudGFsKGluY3JlbWVudGFsKQpAQCAtMzcsMTEgKzM5LDI3IEBACiAgICAgLCBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX29i
amVjdC0+c2V0UmVxdWVzdCh0aGlzKTsKKyAgICBpZiAob3V0bGl2ZVBhZ2VQb2xpY3kgPT0gT3V0
bGl2ZVBhZ2UpIHsKKyAgICAgICAgLy8gSWYgYSByZXF1ZXN0IG5lZWRzIHRvIHN1cnZpdmUgZG9j
dW1lbnQgZGV0YWNobWVudCBhbmQgbmF2aWdhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHNvbWUgb2Jq
ZWN0cworICAgICAgICAvLyBhcm91bmQgYW5kIHJlZmNvdW50ZWQuIFdlIGtlZXAgYSBmcmFtZSwg
YW5kIGluc3RhbnRpYXRlIGEgZHVtbXkgRG9jdW1lbnQgYW5kIERvY0xvYWRlciBmb3IgdGhlIGxv
YWQuCisgICAgICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBEb2NMb2FkZXIgcGFzc2VkIGluIHRvIGJl
IGNhbmNlbGxlZC9kZXN0cnVjdGVkIG5vcm1hbGx5LgorICAgICAgICBtX2ZyYW1lRm9yUmVxdWVz
dFRoYXRDYW5PdXRsaXZlUGFnZSA9IGRvY0xvYWRlci0+ZnJhbWUoKTsKKyAgICAgICAgbV9kb2N1
bWVudEZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UgPSBEb2N1bWVudDo6Y3JlYXRlKG1fZnJh
bWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLmdldCgpKTsKKyAgICAgICAgbV9kb2NMb2Fk
ZXIgPSBtX2RvY3VtZW50Rm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+ZG9jTG9hZGVyKCk7
CisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIoKS0+
aW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKKyAgICB9CiB9CiAKIFJlcXVlc3Q6
On5SZXF1ZXN0KCkKIHsKKyAgICBpZiAobV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBh
Z2UpCisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIo
KS0+ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKICAgICBtX29iamVjdC0+c2V0
UmVxdWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9mcmFtZUZv
clJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJhbWUoKTsK
K30KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJyZXNvdXJj
ZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVx
dWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VMb2FkZXIg
OiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9
IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2Vj
dXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9
IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQog
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1i
ZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRs
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxMb2FkaW5n
V2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAtOTk5LCBm
YWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxTZW5kUmVx
dWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQgVVJMIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0
cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1z
ZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIG1haW4g
ZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQt
aW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJl
c3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJl
c3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwg
LSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxS
ZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1y
ZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZEZp
bmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2lt
YWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQt
aGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1
bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9m
ZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAx
KTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsKK30K
Kzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVmb3JldW5s
b2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3Rp
ZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1u
b3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPg0KKzxz
Y3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3NjcmlwdD4N
Cis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxl
cihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFp
biBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwiPgor
aHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3Rp
ZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24v
cmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJl
ZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2Ug
PE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRv
bmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1ZXN0IDxO
U1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNl
cy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWws
IGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlk
UmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1cyBjb2Rl
IDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJl
c291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2Fk
LWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2Fk
IGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZpZ2F0ZSgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJn
ZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdl
KDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwi
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbnVu
bG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2Fp
dC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjEyMDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0xNSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0
NTcuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZv
cmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9h
ZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbDogQWRkZWQuCisKIDIwMTAtMDYtMTUgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62328</attachid>
            <date>2010-07-22 12:59:02 -0700</date>
            <delta_ts>2010-08-18 13:29:16 -0700</delta_ts>
            <desc>Rewrite at ResourceHandleClient level</desc>
            <filename>imageload.txt</filename>
            <type>text/plain</type>
            <size>19843</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNjM3NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC03NzQsNiArNzc0LDcgQEAKICAgICBsb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAgXAog
ICAgIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCBcCiAgICAgbG9hZGVyL05ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyLmNwcCBcCisgICAgbG9hZGVyL1BpbmdMb2FkZXIuY3BwIFwKICAgICBs
b2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9QbHVnaW5Eb2N1bWVu
dC5jcHAgXAogICAgIGxvYWRlci9Qb2xpY3lDYWxsYmFjay5jcHAgXApJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzOTA1
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAor
MjAxMC0wNy0yMiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGxvYWRz
IHRyaWdnZXJlZCBmcm9tIHVubG9hZCBoYW5kbGVycyB0byBydW4gZW50aXJlbHkKKyAgICAgICAg
aW5kZXBlbmRlbnRseSBvZiBhbnkgb3RoZXIgbG9hZHMgb3IgbmF2aWdhdGlvbnMuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAg
ICAgVGVzdDogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRs
ZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVy
OjpyZXF1ZXN0SW1hZ2UpOiBVc2UgUGluZ0xvYWRlciBmb3IgaW1hZ2UKKyAgICAgICAgICAgIGxv
YWRzIGluIHVubG9hZCBoYW5kbGVycy4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9hZGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpsb2FkT3V0bGl2aW5nSW1hZ2UpOiBTZXQgdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgICAgICBoZWFkZXJzIGZvciBhbiBpbWFnZSBsb2FkIGluIHVubG9h
ZCBoYW5kbGVyIChzaW5jZSB3ZSdyZQorICAgICAgICAgICAgbm90IHVzaW5nIFN1YnJlc291cmNl
TG9hZGVyLCB3ZSBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHkgaGVyZSkuCisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpQaW5nTG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvUGluZ0xvYWRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6On5QaW5nTG9hZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
bmdMb2FkZXI6OmRpZEZhaWwpOgorCiAyMDEwLTA3LTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2Mzc3MikKKysrIFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyOTA1
LDYgKzIyOTA1LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGxvYWRlclxQaW5nTG9hZGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxQaW5nTG9hZGVyLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2Fk
ZXJcUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA2Mzc3MikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE2ODIsNiArMTY4Miw4IEBACiAJV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvbkFj
dGlvbi5oIFwKIAlXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAg
XAogCVdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmggXAorCVdlYkNv
cmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmgg
XAogCVdlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIFwKIAlXZWJDb3JlL2xv
YWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmggXAogCVdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3Vt
ZW50LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjM3NzIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQkod29ya2luZyBjb3B5KQpAQCAtMTg2Miw2ICsxODYyLDggQEAKICAgICAgICAgICAgICdsb2Fk
ZXIvTmF2aWdhdGlvbkFjdGlvbi5oJywKICAgICAgICAgICAgICdsb2FkZXIvTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1BpbmdMb2FkZXIuY3BwJywKKyAg
ICAgICAgICAgICdsb2FkZXIvUGluZ0xvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvUGxh
Y2Vob2xkZXJEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9QbGFjZWhvbGRlckRv
Y3VtZW50LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAnLApJbmRl
eDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiA2Mzc3MikKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwODQsNiArMTA4NCw3IEBACiAgICAgbG9hZGVyL01lZGlhRG9jdW1lbnQu
Y3BwCiAgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwCiAgICAgbG9hZGVyL05ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyLmNwcAorICAgIGxvYWRlci9QaW5nTG9hZGVyLmNwcAogICAgIGxv
YWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcAogICAgIGxvYWRlci9QbHVnaW5Eb2N1bWVudC5j
cHAKICAgICBsb2FkZXIvUG9saWN5Q2FsbGJhY2suY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjM3NzIpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAwMCw2
ICs1MDAwLDggQEAKIAkJRDA4NkZFOTkwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA4NkZF
OTcwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuY3BwICovOyB9OwogCQlEMEIwNTU2
ODA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAv
KiBDcmVhdGVMaW5rQ29tbWFuZC5oICovOyB9OwogCQlEMEIwNTU2OTA5QzY3MDAxMDAzMDdFNDMg
LyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDBCMDU1NjcwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21t
YW5kLmNwcCAqLzsgfTsKKwkJRDBGRjJBNUQxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJB
NUIxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwICovOyB9OworCQlEMEZGMkE1RTEx
RjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2Fk
ZXIuaCAqLzsgfTsKIAkJRDIzQ0E1NUQwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyM0NB
NTVDMEFCMEVBQUUwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmggKi87IH07CiAJCUQyM0NB
NTVGMEFCMEVBQjYwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyM0NBNTVFMEFCMEVBQjYwMDUxMDhB
NSAvKiBKU1JhbmdlRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJRDIzQ0E1NkMwQUIwRUI4RDAwNTEw
OEE1IC8qIFJhbmdlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMjNDQTU2QjBBQjBFQjhEMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24u
aCAqLzsgfTsKQEAgLTEwNjYzLDYgKzEwNjY1LDggQEAKIAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJD
NzREIC8qIFVubGlua0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVW5saW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQw
QjA1NTY2MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVhdGVMaW5rQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0Nv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3JlYXRlTGlu
a0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMEZGMkE1QjExRjhD
NDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQaW5nTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGluZ0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEMjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24uaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSYW5nZUV4Y2VwdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQyM0NBNTVDMEFCMEVBQUUwMDUxMDhBNSAvKiBKU1JhbmdlRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JhbmdlRXhjZXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyM0NBNTVFMEFCMEVBQjYwMDUxMDhBNSAv
KiBKU1JhbmdlRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1JhbmdlRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MDcyLDYgKzE2MDc2LDggQEAKIAkJCQk5M0NDRjAyNjBBRjZDNTI5MDAwMThFODkgLyogTmF2
aWdhdGlvbkFjdGlvbi5oICovLAogCQkJCTkzRTIyN0REMEFGNTg5QUQwMEQ0ODMyNCAvKiBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAgKi8sCiAJCQkJNjU2RDM3MkIwQURCQTVERTAwQTQ1
NTREIC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmggKi8sCisJCQkJRDBGRjJBNUIxMUY4
QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuY3BwICovLAorCQkJCUQwRkYyQTVDMTFGOEM0NUEw
MDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggKi8sCiAJCQkJMzc3QzRDREUxMDE0RTlGNjAwQjlBRTQy
IC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwICovLAogCQkJCTM3N0M0Q0REMTAxNEU5RjYwMEI5
QUU0MiAvKiBQbGFjZWhvbGRlckRvY3VtZW50LmggKi8sCiAJCQkJMUFDNjk0QzUwQTNCMTY3NjAw
M0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50LmNwcCAqLywKQEAgLTE5ODMyLDYgKzE5ODM4LDcgQEAK
IAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4QzZFQTYxQTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBp
bmdMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjIyMjUsNiArMjIyMzIsNyBAQAogCQkJCUUx
QkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOEM2RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDBGRjJBNUQxMUY4QzQ1QTAwN0U3NEUw
IC8qIFBpbmdMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL0FuZHJvaWQu
bWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2Mzc3MikKKysr
IFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtMzIwLDYgKzMyMCw3IEBACiAJ
bG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwIFwKIAlsb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAg
XAogCWxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAgXAorCWxvYWRlci9QaW5n
TG9hZGVyLmNwcCBcCiAJbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIFwKIAlsb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwIFwKIAlsb2FkZXIvUG9saWN5Q2FsbGJhY2suY3BwIFwKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRG9jTG9hZGVyLmNwcAkocmV2aXNpb24gNjM3NzIpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAKKyNpbmNsdWRlICJsb2FkZXIuaCIKICNp
bmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNs
dWRlICJDYWNoZWRGb250LmgiCkBAIC00MCw3ICs0MSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiUGluZ0xvYWRlci5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC0xMjIsNiArMTIzLDExIEBACiBDYWNoZWRJbWFnZSogRG9jTG9h
ZGVyOjpyZXF1ZXN0SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKEZyYW1lKiBm
ID0gZnJhbWUoKSkgeworICAgICAgICBpZiAoZi0+bG9hZGVyKCktPnBhZ2VEaXNtaXNzYWxFdmVu
dEJlaW5nRGlzcGF0Y2hlZCgpKSB7CisgICAgICAgICAgICBQaW5nTG9hZGVyOjpsb2FkT3V0bGl2
aW5nSW1hZ2UoZiwgdXJsKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKICAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZi0+c2V0dGluZ3MoKTsKICAgICAgICAgaWYgKCFm
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmFsbG93SW1hZ2VzKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+
YXJlSW1hZ2VzRW5hYmxlZCgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUGlu
Z0xvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGluZ0xvYWRlci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBQaW5nTG9hZGVyOjpsb2FkT3V0bGl2aW5nSW1hZ2UoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnJl
c3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChLVVJMKFBh
cnNlZFVSTFN0cmluZywgdXJsKSwgU3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAg
ICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGZyYW1lLCB1cmwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0IHIoZnJhbWUtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOworICAgIHIuc2V0VGFyZ2V0VHlwZShSZXNvdXJjZVJl
cXVlc3Q6OlRhcmdldElzSW1hZ2UpOworICAgIHIuc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1D
b250cm9sIiwgIm1heC1hZ2U9MCIpOworICAgIGlmICghU2VjdXJpdHlPcmlnaW46OnNob3VsZEhp
ZGVSZWZlcnJlcihyLnVybCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkp
CisgICAgICAgIHIuc2V0SFRUUFJlZmVycmVyKGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpKTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNvdXJj
ZVJlcXVlc3Qocik7CisgICAgbmV3IFBpbmdMb2FkZXIoZnJhbWUsIHIpOworfQorCitQaW5nTG9h
ZGVyOjpQaW5nTG9hZGVyKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShyZXF1ZXN0LCB0
aGlzLCBmcmFtZSwgZmFsc2UsIGZhbHNlKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
CShyZXZpc2lvbiA2Mzc3MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzMyw2ICszMzMsOCBAQAogICAgIAogICAgIHZvaWQgc3RhcnRlZCgpOwog
CisgICAgYm9vbCBwYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZDsgfQorCiBwcml2YXRlOgog
ICAgIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpOwogI2lmbmRlZiBOREVC
VUcKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9QaW5nTG9hZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9Q
aW5nTG9hZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBQaW5n
TG9hZGVyX2gKKyNkZWZpbmUgUGluZ0xvYWRlcl9oCisKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNl
UmVzcG9uc2U7CitjbGFzcyBTdHJpbmc7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byB0cmln
Z2VyIGxvYWRzIHdoaWNoIG9jY3VyIGVudGlyZWx5IGFzeW5jaHJvbm91c2x5CisvLyBhbmQgZG9u
J3QgZGVwZW5kIG9uIHRoZWlyIEZyYW1lIHN0YXlpbmcgYWxpdmUgKGkuZS4sIGF1ZGl0aW5nIHBp
bmdiYWNrcykuCisvLyBTaW5jZSBub3RoaW5nIGRlcGVuZHMgb24gcmVzb3VyY2VzIGxvYWRlZCB0
aHJvdWdoIHRoaXMgY2xhc3MsIHdlIGp1c3Qgd2FudAorLy8gdG8gYWxsb3cgdGhlIGxvYWQgdG8g
bGl2ZSBsb25nIGVub3VnaCB0byBlbnN1cmUgdGhlIG1lc3NhZ2Ugd2FzIGFjdHVhbGx5IHNlbnQu
CisvLyBUaGVyZWZvcmUsIGFzIHNvb24gYXMgYSBjYWxsYmFjayBpcyByZWNlaXZlZCBmcm9tIHRo
ZSBSZXNvdXJjZUhhbmRsZSwgdGhpcyBjbGFzcyAKKy8vIHdpbGwgY2FuY2VsIHRoZSBsb2FkIGFu
ZCBkZWxldGUgaXRzZWxmLgorY2xhc3MgUGluZ0xvYWRlciA6IHByaXZhdGUgUmVzb3VyY2VIYW5k
bGVDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQg
bG9hZE91dGxpdmluZ0ltYWdlKEZyYW1lKiwgY29uc3QgU3RyaW5nJiB1cmwpOworCitwcml2YXRl
OgorICAgIFBpbmdMb2FkZXIoRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB+
UGluZ0xvYWRlcigpIHsgbV9oYW5kbGUtPmNhbmNlbCgpOyB9CisKKyAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IGRl
bGV0ZSB0aGlzOyB9CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IGNoYXIqLCBpbnQpIHsgZGVsZXRlIHRoaXM7IH0KKyAgICB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoUmVzb3VyY2VIYW5kbGUqKSB7IGRlbGV0ZSB0aGlzOyB9CisgICAgdm9pZCBkaWRGYWlsKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgZGVsZXRlIHRoaXM7IH0KKwor
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7Cit9OworCit9CisKKyNlbmRpZgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zZXQtY29v
a2llLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cmVzb3VyY2VzL3NldC1jb29raWUucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zZXQtY29va2llLnBocAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACis8P3BocAorICAgIHNldGNvb2tpZSgidGVzdCIsICJwYXNzIiwgdGlt
ZSgpKzM2MDAsICIvIik7Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9h
ZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUaGlzIHRlc3QgY3JlYXRlcyBhbiBpZnJh
bWUgd2l0aCBhbiB1bmxvYWQgaGFuZGxlciwgdGhlbiByZW1vdmVzIHRoZSBpZnJhbWUuCitUaGUg
dW5sb2FkIGhhbmRsZXIgImxvYWRzIGFuIGltYWdlIiwgd2hpY2ggaXMgYWN0dWFsbHkgYSBzY3Jp
cHQgd2hpY2ggc2V0cyBhIGNvb2tpZS4KK1dlIHRoZW4gd2FpdCB1bnRpbCBkb2N1bWVudC5jb29r
aWUgaXMgc2V0LCB0aGVuIHBhc3MuIFRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCBpbWFnZQor
bG9hZHMgaW4gdW5sb2FkIGhhbmRsZXJzIHN0aWxsIHdvcmsgYWZ0ZXIgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3LAord2hpY2ggY2F1c2VzIHRoZW0gdG8gYmUg
cnVuIGVudGlyZWx5IGluIHRoZSBiYWNrZ3JvdW5kLCBjb21wbGV0ZWx5IGRldGFjaGVkIGZyb20g
dGhlIEZyYW1lCit0aGF0IHN0YXJ0ZWQgdGhlIGxvYWQuCitQQVNTOiBDb29raWUgZm91bmQuCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxv
YWQtaGFuZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQt
aGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD48aGVhZD4K
Kzx0aXRsZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIp
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZykpOworfQorCitmdW5jdGlv
biBzZXRDb29raWUoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAxKTsKKyAgICBpbWcu
c3JjID0gInJlc291cmNlcy9zZXQtY29va2llLnBocCI7Cit9CisKK2Z1bmN0aW9uIGNoZWNrQ29v
a2llKCkgeworICAgIGlmIChkb2N1bWVudC5jb29raWUpIHsKKyAgICAgICAgbG9nKCJQQVNTOiBD
b29raWUgZm91bmQuIik7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHNldFRpbWVvdXQoY2hlY2tDb29raWUsIDUwKTsKK30KKworZnVuY3Rpb24g
dGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICB3aW5kb3cuZnJhbWVzWzBdLm9u
dW5sb2FkID0gc2V0Q29va2llOworICAgIGlmIChkb2N1bWVudC5jb29raWUpCisgICAgICAgIGxv
ZygiRkFJTCIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQiKS5yZW1vdmVD
aGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lIikpOworICAgIGNoZWNrQ29va2ll
KCk7CisgICAgaWYgKGRvY3VtZW50LmNvb2tpZSkKKyAgICAgICAgbG9nKCJGQUlMIik7Cit9Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyI+CitUaGlzIHRlc3QgY3Jl
YXRlcyBhbiBpZnJhbWUgd2l0aCBhbiB1bmxvYWQgaGFuZGxlciwgdGhlbiByZW1vdmVzIHRoZSBp
ZnJhbWUuPGJyPgorVGhlIHVubG9hZCBoYW5kbGVyICJsb2FkcyBhbiBpbWFnZSIsIHdoaWNoIGlz
IGFjdHVhbGx5IGEgc2NyaXB0IHdoaWNoIHNldHMgYSBjb29raWUuPGJyPgorV2UgdGhlbiB3YWl0
IHVudGlsIGRvY3VtZW50LmNvb2tpZSBpcyBzZXQsIHRoZW4gcGFzcy4gVGhpcyB0ZXN0IGlzIHRv
IHZlcmlmeSB0aGF0IGltYWdlPGJyPgorbG9hZHMgaW4gdW5sb2FkIGhhbmRsZXJzIHN0aWxsIHdv
cmsgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3LDxi
cj4KK3doaWNoIGNhdXNlcyB0aGVtIHRvIGJlIHJ1biBlbnRpcmVseSBpbiB0aGUgYmFja2dyb3Vu
ZCwgY29tcGxldGVseSBkZXRhY2hlZCBmcm9tIHRoZSBGcmFtZTxicj4KK3RoYXQgc3RhcnRlZCB0
aGUgbG9hZC48YnI+Cis8ZGl2IGlkPSJwYXJlbnQiPgorPGlmcmFtZSBzcmM9IiIgaWQ9ImlmcmFt
ZSI+PC9pZnJhbWU+Cis8L2Rpdj4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
MzkwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDEwLTA3LTIyICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU3LgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL3NldC1jb29raWUucGhwOiBBZGRlZC4KKwogMjAxMC0wNy0y
MiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64760</attachid>
            <date>2010-08-18 13:29:16 -0700</date>
            <delta_ts>2010-08-23 13:26:58 -0700</delta_ts>
            <desc>ResourceHandleClient-level solution + rewritten layout test</desc>
            <filename>imageload2.txt</filename>
            <type>text/plain</type>
            <size>21119</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNjU2MjIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC03OTIsNiArNzkyLDcgQEAKICAgICBsb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAgXAog
ICAgIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCBcCiAgICAgbG9hZGVyL05ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyLmNwcCBcCisgICAgbG9hZGVyL1BpbmdMb2FkZXIuY3BwIFwKICAgICBs
b2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9QbHVnaW5Eb2N1bWVu
dC5jcHAgXAogICAgIGxvYWRlci9Qb2xpY3lDYWxsYmFjay5jcHAgXApJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1NjI2
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAor
MjAxMC0wOC0xOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGxvYWRz
IHRyaWdnZXJlZCBmcm9tIHVubG9hZCBoYW5kbGVycyB0byBydW4gZW50aXJlbHkKKyAgICAgICAg
aW5kZXBlbmRlbnRseSBvZiBhbnkgb3RoZXIgbG9hZHMgb3IgbmF2aWdhdGlvbnMuCisKKyAgICAg
ICAgVGVzdDogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRs
ZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVy
OjpyZXF1ZXN0SW1hZ2UpOiBVc2UgUGluZ0xvYWRlciBmb3IgaW1hZ2UKKyAgICAgICAgICAgIGxv
YWRzIGluIHVubG9hZCBoYW5kbGVycy4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9hZGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpsb2FkT3V0bGl2aW5nSW1hZ2UpOiBTZXQgdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgICAgICBoZWFkZXJzIGZvciBhbiBpbWFnZSBsb2FkIGluIHVubG9h
ZCBoYW5kbGVyIChzaW5jZSB3ZSdyZQorICAgICAgICAgICAgbm90IHVzaW5nIFN1YnJlc291cmNl
TG9hZGVyLCB3ZSBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHkgaGVyZSkuCisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpQaW5nTG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvUGluZ0xvYWRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6On5QaW5nTG9hZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
bmdMb2FkZXI6OmRpZEZhaWwpOgorCiAyMDEwLTA4LTE4ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVh
cy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY1NjIyKQor
KysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjM1OTcsNiArMjM1OTcsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFBpbmdMb2FkZXIuY3BwIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFBpbmdMb2Fk
ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGxvYWRlclxQbGFjZWhvbGRlckRvY3VtZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDY1NjIyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtMTcwNSw2ICsxNzA1LDggQEAKIAlXZWJDb3JlL2xvYWRlci9OYXZp
Z2F0aW9uQWN0aW9uLmggXAogCVdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBc
CisJV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL1BpbmdM
b2FkZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgXAogCVdl
YkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvUGx1
Z2luRG9jdW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NTYyMikKKysrIFdlYkNvcmUvV2Vi
Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xODkxLDYgKzE4OTEsOCBAQAogICAgICAgICAg
ICAgJ2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9OZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9OZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlci5oJywKKyAgICAgICAgICAgICdsb2FkZXIvUGluZ0xvYWRlci5j
cHAnLAorICAgICAgICAgICAgJ2xvYWRlci9QaW5nTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xv
YWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL1BsYWNl
aG9sZGVyRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNw
cCcsCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY1NjIyKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTEwOCw2ICsxMTA4LDcgQEAKICAgICBsb2FkZXIvTWVkaWFE
b2N1bWVudC5jcHAKICAgICBsb2FkZXIvTmF2aWdhdGlvbkFjdGlvbi5jcHAKICAgICBsb2FkZXIv
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCisgICAgbG9hZGVyL1BpbmdMb2FkZXIuY3Bw
CiAgICAgbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuY3BwCiAgICAgbG9hZGVyL1BsdWdpbkRv
Y3VtZW50LmNwcAogICAgIGxvYWRlci9Qb2xpY3lDYWxsYmFjay5jcHAKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NTYyMikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01MTIyLDYgKzUxMjIsOCBAQAogCQlEMDg2RkU5OTA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5r
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEMDg2RkU5NzA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5jcHAgKi87IH07CiAJ
CUQwQjA1NTY4MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBCMDU1NjYwOUM2NzAwMTAw
MzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi87IH07CiAJCUQwQjA1NTY5MDlDNjcwMDEw
MDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEIwNTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRl
TGlua0NvbW1hbmQuY3BwICovOyB9OworCQlEMEZGMkE1RDExRjhDNDVBMDA3RTc0RTAgLyogUGlu
Z0xvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEMEZGMkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi87IH07CisJCUQw
RkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEZGMkE1QzExRjhDNDVBMDA3RTc0RTAgLyog
UGluZ0xvYWRlci5oICovOyB9OwogCQlEMjNDQTU1RDBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5n
ZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDIzQ0E1NUMwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uaCAqLzsgfTsK
IAkJRDIzQ0E1NUYwQUIwRUFCNjAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIzQ0E1NUUwQUIwRUFC
NjAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uY3BwICovOyB9OwogCQlEMjNDQTU2QzBBQjBF
QjhEMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyM0NBNTZCMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4
Y2VwdGlvbi5oICovOyB9OwpAQCAtMTA5MzIsNiArMTA5MzQsOCBAQAogCQlEMDg2RkU5NzA5RDUz
QUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVbmxpbmtDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyZWF0ZUxpbmtDb21tYW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwQjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVh
dGVMaW5rQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
cmVhdGVMaW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRkYy
QTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlEMEZGMkE1QzExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaW5nTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQyM0NBNTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJhbmdlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIzQ0E1NUMwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VF
eGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmFuZ2VFeGNl
cHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIzQ0E1NUUwQUIwRUFCNjAw
NTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTUmFuZ2VFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY0NjMsNiArMTY0NjcsOCBAQAogCQkJCTkzQ0NGMDI2MEFGNkM1MjkwMDAxOEU4
OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmggKi8sCiAJCQkJOTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0
IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLywKIAkJCQk2NTZEMzcyQjBBREJB
NURFMDBBNDU1NEQgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCAqLywKKwkJCQlEMEZG
MkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgKi8sCisJCQkJRDBGRjJBNUMx
MUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLywKIAkJCQkzNzdDNENERTEwMTRFOUY2
MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgKi8sCiAJCQkJMzc3QzRDREQxMDE0
RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuaCAqLywKIAkJCQkxQUM2OTRDNTBB
M0IxNjc2MDAzRjUwNDkgLyogUGx1Z2luRG9jdW1lbnQuY3BwICovLApAQCAtMjAyOTEsNiArMjAy
OTcsNyBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9v
bU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQ
aW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTBCNTYxNzEyMTE5RDIzMDA4QjQ2RTAg
LyogR3JvdXBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOTc5MTcxMjE1RDA1NTAw
NUM0ODVDIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcx
MjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAg
LTIyNzQ5LDYgKzIyNzU2LDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RE
NEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlEMEZGMkE1RDExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDNTBCNTYxNjEyMTE5RDIzMDA4QjQ2RTAgLyogR3JvdXBTZXR0aW5ncy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0OTA3MDdFNjEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRC
cmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk5QUJDMjYxMjE1RTRBMzAwRjlGMjE5IC8q
IERpcmVjdG9yeUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9BbmRyb2lk
Lm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjU2MjIpCisr
KyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw2ICszMjUsNyBAQAog
CWxvYWRlci9NZWRpYURvY3VtZW50LmNwcCBcCiAJbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3Bw
IFwKIAlsb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwIFwKKwlsb2FkZXIvUGlu
Z0xvYWRlci5jcHAgXAogCWxvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNwcCBcCiAJbG9hZGVy
L1BsdWdpbkRvY3VtZW50LmNwcCBcCiAJbG9hZGVyL1BvbGljeUNhbGxiYWNrLmNwcCBcCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0RvY0xvYWRlci5jcHAJKHJldmlzaW9uIDY1NjIyKQorKysgV2ViQ29yZS9sb2FkZXIvRG9j
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogCisjaW5jbHVkZSAibG9hZGVyLmgiCiAj
aW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkRm9udC5oIgpAQCAtNDAsNyArNDEsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgotI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgpAQCAtMTIyLDYgKzEyMywxMSBAQAogQ2FjaGVkSW1hZ2UqIERvY0xv
YWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmIChGcmFtZSog
ZiA9IGZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGYtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZl
bnRCZWluZ0Rpc3BhdGNoZWQoKSkgeworICAgICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZE91dGxp
dmluZ0ltYWdlKGYsIHVybCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCiAg
ICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGYtPnNldHRpbmdzKCk7CiAgICAgICAgIGlmICgh
Zi0+bG9hZGVyKCktPmNsaWVudCgpLT5hbGxvd0ltYWdlcyghc2V0dGluZ3MgfHwgc2V0dGluZ3Mt
PmFyZUltYWdlc0VuYWJsZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Bp
bmdMb2FkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUGluZ0xvYWRlcjo6bG9hZE91dGxpdmluZ0ltYWdlKEZyYW1l
KiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKFNlY3VyaXR5T3JpZ2luOjpy
ZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSAmJiAhU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybCksIFN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKKyAg
ICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFtZSwgdXJsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCByKGZyYW1lLT5kb2N1
bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpKTsKKyAgICByLnNldFRhcmdldFR5cGUoUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRJc0ltYWdlKTsKKyAgICByLnNldEhUVFBIZWFkZXJGaWVsZCgiQ2FjaGUt
Q29udHJvbCIsICJtYXgtYWdlPTAiKTsKKyAgICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpzaG91bGRI
aWRlUmVmZXJyZXIoci51cmwoKSwgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCkp
KQorICAgICAgICByLnNldEhUVFBSZWZlcnJlcihmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSk7CisgICAgZnJhbWUtPmxvYWRlcigpLT5hZGRFeHRyYUZpZWxkc1RvU3VicmVzb3Vy
Y2VSZXF1ZXN0KHIpOworICAgIG5ldyBQaW5nTG9hZGVyKGZyYW1lLCByKTsKK30KKworUGluZ0xv
YWRlcjo6UGluZ0xvYWRlcihGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUocmVxdWVzdCwg
dGhpcywgZnJhbWUsIGZhbHNlLCBmYWxzZSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAkocmV2aXNpb24gNjU2MjIpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDggQEAKICAgICAKICAgICB2b2lkIHN0YXJ0ZWQoKTsK
IAorICAgIGJvb2wgcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQ7IH0KKwogcHJpdmF0ZToK
ICAgICBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKICNpZm5kZWYgTkRF
QlVHCkluZGV4OiBXZWJDb3JlL2xvYWRlci9QaW5nTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUGluZ0xvYWRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIv
UGluZ0xvYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgUGlu
Z0xvYWRlcl9oCisjZGVmaW5lIFBpbmdMb2FkZXJfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJj
ZVJlc3BvbnNlOworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJpZ2dlciBsb2FkcyB3aGlj
aCBvY2N1ciBlbnRpcmVseSBhc3luY2hyb25vdXNseQorLy8gYW5kIGRvbid0IGRlcGVuZCBvbiB0
aGVpciBGcmFtZSBzdGF5aW5nIGFsaXZlIChpLmUuLCBhdWRpdGluZyBwaW5nYmFja3MpLgorLy8g
U2luY2Ugbm90aGluZyBkZXBlbmRzIG9uIHJlc291cmNlcyBsb2FkZWQgdGhyb3VnaCB0aGlzIGNs
YXNzLCB3ZSBqdXN0IHdhbnQKKy8vIHRvIGFsbG93IHRoZSBsb2FkIHRvIGxpdmUgbG9uZyBlbm91
Z2ggdG8gZW5zdXJlIHRoZSBtZXNzYWdlIHdhcyBhY3R1YWxseSBzZW50LgorLy8gVGhlcmVmb3Jl
LCBhcyBzb29uIGFzIGEgY2FsbGJhY2sgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgUmVzb3VyY2VIYW5k
bGUsIHRoaXMgY2xhc3MgCisvLyB3aWxsIGNhbmNlbCB0aGUgbG9hZCBhbmQgZGVsZXRlIGl0c2Vs
Zi4KK2NsYXNzIFBpbmdMb2FkZXIgOiBwcml2YXRlIFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJs
aWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGxvYWRPdXRsaXZpbmdJ
bWFnZShGcmFtZSosIGNvbnN0IFN0cmluZyYgdXJsKTsKKworcHJpdmF0ZToKKyAgICBQaW5nTG9h
ZGVyKEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgflBpbmdMb2FkZXIoKSB7
IG1faGFuZGxlLT5jYW5jZWwoKTsgfQorCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyBkZWxldGUgdGhpczsgfQor
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
KSB7IGRlbGV0ZSB0aGlzOyB9CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFu
ZGxlKikgeyBkZWxldGUgdGhpczsgfQorICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IGRlbGV0ZSB0aGlzOyB9CisKKyAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IG1faGFuZGxlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2F2ZS1waW5nLnBocAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3NhdmUt
cGluZy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcmVzb3VyY2VzL3NhdmUtcGluZy5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAor
PD9waHAKKyRwaW5nRmlsZSA9IGZvcGVuKCJwaW5nLnR4dCIsICd3Jyk7Citmd3JpdGUoJHBpbmdG
aWxlLCAkX0dFVFsicGluZyJdKTsKK2ZjbG9zZSgkcGluZ0ZpbGUpOworPz4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZGVsZXRlLXBpbmcucGhwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
ZGVsZXRlLXBpbmcucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL3Jlc291cmNlcy9kZWxldGUtcGluZy5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorPD9waHAKK3VubGluaygicGluZy50eHQiKTsKKz8+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2NoZWNrLXBpbmcucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvY2hlY2st
cGluZy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcmVzb3VyY2VzL2NoZWNrLXBpbmcucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBA
Cis8P3BocAorJGV4cGVjdGVkUGluZ1ZhbHVlID0gJF9HRVRbJ3BpbmcnXTsKKyRhY3R1YWxQaW5n
VmFsdWUgPSBOVUxMOworCitpZiAoIWZpbGVfZXhpc3RzKCJwaW5nLnR4dCIpKSB7CisgICAgJHBh
Z2UgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsKKyAgICAvLyBUaGlzIHJlZnJlc2ggaGVhZGVyIGlz
IHRlaCBzYWRuZXNzLCBidXQgaWYgdGhlIGZpbGUgZG9lc24ndAorICAgIC8vIGV4aXN0IHdoZW4g
dGhpcyBwaHAgc2NyaXB0IHN0YXJ0cyBydW5uaW5nLCBpdCB3b24ndCBub3RpY2UKKyAgICAvLyBp
dHMgY3JlYXRpb24sIGV2ZW4gaWYgd2Ugc2xlZXAgYW5kIGNoZWNrIGFnYWluLgorICAgIGhlYWRl
cigiUmVmcmVzaDogMTsgdXJsPSRwYWdlP3Bpbmc9JGV4cGVjdGVkUGluZ1ZhbHVlIik7CisgICAg
cmV0dXJuOworfQorCiskcGluZ0ZpbGUgPSBmaWxlKCJwaW5nLnR4dCIpOworaWYgKHN0cmxlbigk
cGluZ0ZpbGUpID4gMCkKKyAgICAkYWN0dWFsUGluZ1ZhbHVlID0gJHBpbmdGaWxlWzBdOwordW5s
aW5rKCJwaW5nLnR4dCIpOworCiskcmVzdWx0ID0gKCRleHBlY3RlZFBpbmdWYWx1ZSA9PSAkYWN0
dWFsUGluZ1ZhbHVlKSA/ICJQQVNTIiA6ICJGQUlMIjsKKworZWNobyAiJHJlc3VsdFxuIjsKK2Vj
aG8gIjxzY3JpcHQ+XG4iOworZWNobyAiaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcilc
biI7CitlY2hvICIgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpO1xuIjsKK2Vj
aG8gIjwvc2NyaXB0PiI7Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9h
ZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxv
YWQgaGFuZGxlcihzKQorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxl
ci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1bmxvYWQgaGFuZGxl
cjwvdGl0bGU+Cis8c2NyaXB0PgorCit2YXIgdGVzdENhbGxlZCA9IGZhbHNlOwordmFyIHBpbmdW
YWx1ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGlm
ICghdGVzdENhbGxlZCkgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0K
KyAgICAgICAgdGVzdENhbGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bG9jYXRpb24uYXNzaWduKCJyZXNvdXJjZXMvY2hlY2stcGluZy5waHA/cGluZz0iICsgcGluZ1Zh
bHVlKTsKK30KKworZnVuY3Rpb24gcGluZygpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdlKDEs
IDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3NhdmUtcGluZy5waHA/cGluZz0iICsgcGlu
Z1ZhbHVlOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpOyIg
b251bmxvYWQ9InBpbmcoKTsiPgorPGltZyBzcmM9InJlc291cmNlcy9kZWxldGUtcGluZy5waHAi
IG9ubG9hZD0idGVzdCgpOyIgb25lcnJvcj0idGVzdCgpOyI+PC9pbWc+CitUZXN0IGNhc2UgZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDQ1Ny4gUHJldmlvdXNs
eSwgaWYgYW4gaW1hZ2U8YnI+Citsb2FkIHdhcyB0cmlnZ2VyIGZyb20gYW4gdW5sb2FkIGhhbmRs
ZXIsIHdlIHdvdWxkIGtpbGwgaXQgYWxtb3N0IGltbWVkaWF0ZWx5IGR1ZSB0byB0aGU8YnI+Citu
YXZpZ2F0aW9uIHN0b3BwaW5nIGFsbCBsb2FkZXJzLiBUaGVzZSBsb2FkcyBub3cgaGFwcGVuIGVu
dGlyZWx5IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBkZXRhY2hlZDxicj4KK2Zyb20gdGhlIERPTSwg
c28gdGhleSdyZSBpbnZpc2libGUgdG8gdGhlIG5vcm1hbCByZXNvdXJjZSBsb2FkIGNhbGxiYWNr
IGluZnJhc3RydWN0dXJlLiBXZSBnZW5lcmF0ZSBhPGJyPgordGltZXN0YW1wLCB0aGVuIGluIHRo
ZSB1bmxvYWQgaGFuZGxlciwgd2UgbG9hZCBhbiAnaW1hZ2UnIChhY3R1YWxseSBhIHBocCBzY3Jp
cHQpIHRoYXQgdGFrZXMgdGhlPGJyPgordGltZXN0YW1wIGFzIGEgcGFyYW1ldGVyIGFuZCBzYXZl
cyBpdCB0byBhIGZpbGUuICBUaGUgZGVzdGluYXRpb24gcGFnZSBpcyBhIHBocCBzY3JpcHQgdGhh
dCBjaGVja3MgZm9yPGJyPgordGhlIGV4aXN0ZW5jZSBvZiB0aGF0IGZpbGUgYW5kIHBhc3NlcyB0
aGUgdGVzdCBpZiB0aGUgZmlsZSBjb250YWlucyB0aGUgZXhwZWN0ZWQgdGltZXN0YW1wLjxicj4K
KzwvYm9keT48L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYyNikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA4LTE4ICBO
YXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3LgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxl
ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2Vz
L2NoZWNrLXBpbmcucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24v
cmVzb3VyY2VzL2RlbGV0ZS1waW5nLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL3Jlc291cmNlcy9zYXZlLXBpbmcucGhwOiBBZGRlZC4KKwogMjAxMC0wOC0xOCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY1NjE5Lgo=
</data>
<flag name="review"
          id="53391"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65159</attachid>
            <date>2010-08-23 13:26:58 -0700</date>
            <delta_ts>2010-08-23 13:40:30 -0700</delta_ts>
            <desc>Addressing levin&apos;s comments</desc>
            <filename>imageload3.txt</filename>
            <type>text/plain</type>
            <size>21711</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNjU4MjApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC04MDIsNiArODAyLDcgQEAKICAgICBsb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAgXAog
ICAgIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCBcCiAgICAgbG9hZGVyL05ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyLmNwcCBcCisgICAgbG9hZGVyL1BpbmdMb2FkZXIuY3BwIFwKICAgICBs
b2FkZXIvUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9QbHVnaW5Eb2N1bWVu
dC5jcHAgXAogICAgIGxvYWRlci9Qb2xpY3lDYWxsYmFjay5jcHAgXApJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1ODIw
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAor
MjAxMC0wOC0yMyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IGltYWdlIGxvYWRz
IHRyaWdnZXJlZCBmcm9tIHVubG9hZCBoYW5kbGVycyB0byBydW4gZW50aXJlbHkKKyAgICAgICAg
aW5kZXBlbmRlbnRseSBvZiBhbnkgb3RoZXIgbG9hZHMgb3IgbmF2aWdhdGlvbnMuCisKKyAgICAg
ICAgVGVzdDogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRs
ZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGxvYWRlci9Eb2NMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVy
OjpyZXF1ZXN0SW1hZ2UpOiBVc2UgUGluZ0xvYWRlciBmb3IgaW1hZ2UKKyAgICAgICAgICAgIGxv
YWRzIGluIHVubG9hZCBoYW5kbGVycy4KKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpwYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQpOgorICAgICAgICAqIGxvYWRlci9QaW5nTG9hZGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpsb2FkT3V0bGl2aW5nSW1hZ2UpOiBTZXQgdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgICAgICBoZWFkZXJzIGZvciBhbiBpbWFnZSBsb2FkIGluIHVubG9h
ZCBoYW5kbGVyIChzaW5jZSB3ZSdyZQorICAgICAgICAgICAgbm90IHVzaW5nIFN1YnJlc291cmNl
TG9hZGVyLCB3ZSBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHkgaGVyZSkuCisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpQaW5nTG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvUGluZ0xvYWRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6On5QaW5nTG9hZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBpbmdMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaW5nTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpQaW5nTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBp
bmdMb2FkZXI6OmRpZEZhaWwpOgorCiAyMDEwLTA4LTIzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDY1ODIwKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM2NTMs
NiArMjM2NTMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cbG9hZGVyXFBpbmdMb2FkZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXFBpbmdMb2FkZXIuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRl
clxQbGFjZWhvbGRlckRvY3VtZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC01MTg3
MywxNCArNTE4ODEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclJlc291
cmNlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY1ODIw
KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTcxMCw2ICsx
NzEwLDggQEAKIAlXZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmggXAogCVdlYkNvcmUv
bG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIv
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBcCisJV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRl
ci5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIv
UGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL1BsYWNlaG9sZGVyRG9j
dW1lbnQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiA2NTgyMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC0xODk1LDYgKzE4OTUsOCBAQAogICAgICAgICAgICAgJ2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9u
LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oJywKKyAg
ICAgICAgICAgICdsb2FkZXIvUGluZ0xvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9Q
aW5nTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9QbGFjZWhvbGRlckRvY3VtZW50LmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL1BsYWNlaG9sZGVyRG9jdW1lbnQuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcCcsCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDY1
ODIwKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTExMSw2
ICsxMTExLDcgQEAKICAgICBsb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAKICAgICBsb2FkZXIvTmF2
aWdhdGlvbkFjdGlvbi5jcHAKICAgICBsb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIu
Y3BwCisgICAgbG9hZGVyL1BpbmdMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1BsYWNlaG9sZGVyRG9j
dW1lbnQuY3BwCiAgICAgbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAogICAgIGxvYWRlci9Qb2xp
Y3lDYWxsYmFjay5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA2NTgyMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTMxLDYgKzUxMzEsOCBAQAogCQlEMDg2
RkU5OTA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDg2RkU5NzA5RDUzQUFCMDA1QkM3NEQg
LyogVW5saW5rQ29tbWFuZC5jcHAgKi87IH07CiAJCUQwQjA1NTY4MDlDNjcwMDEwMDMwN0U0MyAv
KiBDcmVhdGVMaW5rQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDBCMDU1NjYwOUM2NzAwMTAwMzA3RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5k
LmggKi87IH07CiAJCUQwQjA1NTY5MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEIw
NTU2NzA5QzY3MDAxMDAzMDdFNDMgLyogQ3JlYXRlTGlua0NvbW1hbmQuY3BwICovOyB9OworCQlE
MEZGMkE1RDExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEZGMkE1QjExRjhDNDVBMDA3RTc0RTAg
LyogUGluZ0xvYWRlci5jcHAgKi87IH07CisJCUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQ
aW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEMEZGMkE1QzExRjhDNDVBMDA3RTc0RTAgLyogUGluZ0xvYWRlci5oICovOyB9OwogCQlEMjND
QTU1RDBBQjBFQUFFMDA1MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIzQ0E1NUMwQUIwRUFBRTAwNTEwOEE1
IC8qIEpTUmFuZ2VFeGNlcHRpb24uaCAqLzsgfTsKIAkJRDIzQ0E1NUYwQUIwRUFCNjAwNTEwOEE1
IC8qIEpTUmFuZ2VFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDIzQ0E1NUUwQUIwRUFCNjAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRp
b24uY3BwICovOyB9OwogCQlEMjNDQTU2QzBBQjBFQjhEMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyM0NB
NTZCMEFCMEVCOEQwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5oICovOyB9OwpAQCAtMTA5NTEs
NiArMTA5NTMsOCBAQAogCQlEMDg2RkU5NzA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmxpbmtDb21tYW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDBCMDU1NjYwOUM2NzAwMTAwMzA3
RTQzIC8qIENyZWF0ZUxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENyZWF0ZUxpbmtDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQw
QjA1NTY3MDlDNjcwMDEwMDMwN0U0MyAvKiBDcmVhdGVMaW5rQ29tbWFuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcmVhdGVMaW5rQ29tbWFuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwRkYyQTVCMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5n
TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBpbmdMb2Fk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMEZGMkE1QzExRjhDNDVBMDA3
RTc0RTAgLyogUGluZ0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
aW5nTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyM0NBNTQ4MEFCMEU5
ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJhbmdlRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIzQ0E1
NUMwQUIwRUFBRTAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmFuZ2VFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIzQ0E1NUUwQUIwRUFCNjAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmFuZ2VFeGNlcHRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0ODYsNiArMTY0OTAsOCBA
QAogCQkJCTkzQ0NGMDI2MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmggKi8s
CiAJCQkJOTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmNwcCAqLywKIAkJCQk2NTZEMzcyQjBBREJBNURFMDBBNDU1NEQgLyogTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIuaCAqLywKKwkJCQlEMEZGMkE1QjExRjhDNDVBMDA3RTc0RTAgLyogUGlu
Z0xvYWRlci5jcHAgKi8sCisJCQkJRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2Fk
ZXIuaCAqLywKIAkJCQkzNzdDNENERTEwMTRFOUY2MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1
bWVudC5jcHAgKi8sCiAJCQkJMzc3QzRDREQxMDE0RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9sZGVy
RG9jdW1lbnQuaCAqLywKIAkJCQkxQUM2OTRDNTBBM0IxNjc2MDAzRjUwNDkgLyogUGx1Z2luRG9j
dW1lbnQuY3BwICovLApAQCAtMjAzMTgsNiArMjAzMjQsNyBAQAogCQkJCUUxQkU1MTJFMENGNkM1
MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0
RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUQwRkYyQTVFMTFGOEM0NUEwMDdFNzRFMCAvKiBQaW5nTG9hZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDNTBCNTYxNzEyMTE5RDIzMDA4QjQ2RTAgLyogR3JvdXBTZXR0aW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNBOTc5MTcxMjE1RDA1NTAwNUM0ODVDIC8qIEltYWdlQnVmZmVyRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2Vi
S2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzgxLDYgKzIyNzg4LDcgQEAKIAkJCQk5
M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNT
QXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMEZGMkE1RDExRjhDNDVBMDA3RTc0RTAg
LyogUGluZ0xvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTBCNTYxNjEyMTE5RDIzMDA4
QjQ2RTAgLyogR3JvdXBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTA3MDdFNjEy
MTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODk5QUJDMjYxMjE1RTRBMzAwRjlGMjE5IC8qIERpcmVjdG9yeUVudHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
QW5kcm9pZC5tawkocmV2aXNpb24gNjU4MjApCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtp
bmcgY29weSkKQEAgLTMyNiw2ICszMjYsNyBAQAogCWxvYWRlci9NZWRpYURvY3VtZW50LmNwcCBc
CiAJbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwIFwKIAlsb2FkZXIvTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIuY3BwIFwKKwlsb2FkZXIvUGluZ0xvYWRlci5jcHAgXAogCWxvYWRlci9QbGFj
ZWhvbGRlckRvY3VtZW50LmNwcCBcCiAJbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcCBcCiAJbG9h
ZGVyL1BvbGljeUNhbGxiYWNrLmNwcCBcCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHJldmlzaW9u
IDY1ODIwKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY0xvYWRl
ci5oIgogCisjaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRl
ICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgpAQCAtNDAs
NyArNDEsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgImxvYWRlci5oIgorI2lu
Y2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMTI1LDYg
KzEyNiwxMyBAQAogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmLT5zZXR0aW5ncygpOwog
ICAgICAgICBpZiAoIWYtPmxvYWRlcigpLT5jbGllbnQoKS0+YWxsb3dJbWFnZXMoIXNldHRpbmdz
IHx8IHNldHRpbmdzLT5hcmVJbWFnZXNFbmFibGVkKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAgICAgaWYgKGYtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3Bh
dGNoZWQoKSkgeworICAgICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTCA9IG1fZG9jLT5jb21wbGV0
ZVVSTCh1cmwpOworICAgICAgICAgICAgaWYgKGNvbXBsZXRlVVJMLmlzVmFsaWQoKSAmJiBjYW5S
ZXF1ZXN0KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBjb21wbGV0ZVVSTCkpCisgICAg
ICAgICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKGYsIGNvbXBsZXRlVVJMKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfQogICAgIENhY2hlZEltYWdlKiByZXNv
dXJjZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJl
c291cmNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CiAgICAgaWYgKGF1dG9Mb2Fk
SW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1BpbmdMb2FkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvUGlu
Z0xvYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBQaW5nTG9hZGVyOjpsb2FkSW1hZ2UoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCit7
CisgICAgaWYgKFNlY3VyaXR5T3JpZ2luOjpyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSAmJiAhU2Vj
dXJpdHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCkpKSB7
CisgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoZnJhbWUsIHVybCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1
cmwpOworICAgIHJlcXVlc3Quc2V0VGFyZ2V0VHlwZShSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElz
SW1hZ2UpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIiwg
Im1heC1hZ2U9MCIpOworICAgIGlmICghU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJl
cihyZXF1ZXN0LnVybCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpCisg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdS
ZWZlcnJlcigpKTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPmFkZEV4dHJhRmllbGRzVG9TdWJyZXNv
dXJjZVJlcXVlc3QocmVxdWVzdCk7CisgICAgUGFzc093blB0cjxQaW5nTG9hZGVyPiBwaW5nTG9h
ZGVyKG5ldyBQaW5nTG9hZGVyKGZyYW1lLCByZXF1ZXN0KSk7CisgICAgCisgICAgLy8gTGVhayB0
aGUgcGluZyBsb2FkZXIsIHNpbmNlIGl0IHdpbGwga2lsbCBpdHNlbGYgYXMgc29vbiBhcyBpdCBy
ZWNlaXZlcyBhIHJlc3BvbnNlLgorICAgIFBpbmdMb2FkZXIqIGxlYWtlZFBpbmdMb2FkZXIgPSBw
aW5nTG9hZGVyLmxlYWtQdHIoKTsKKyAgICBVTlVTRURfUEFSQU0obGVha2VkUGluZ0xvYWRlcik7
Cit9CisKK1BpbmdMb2FkZXI6OlBpbmdMb2FkZXIoRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlKHJlcXVlc3QsIHRoaXMsIGZyYW1lLCBmYWxzZSwgZmFsc2UpOworfQorCitQaW5nTG9hZGVy
Ojp+UGluZ0xvYWRlcigpCit7CisgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworfQorCit9CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDY1ODIwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBACiAgICAgCiAgICAg
dm9pZCBzdGFydGVkKCk7CiAKKyAgICBib29sIHBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVk
OyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1l
KCk7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisjaWZuZGVmIFBpbmdMb2FkZXJfaAorI2RlZmluZSBQaW5nTG9hZGVyX2gKKworI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZyYW1lOworY2xhc3MgS1VSTDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJj
ZUhhbmRsZTsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKKy8vIFRoaXMgY2xhc3MgdHJpZ2dl
cnMgYXN5bmNocm9ub3VzIGxvYWRzIGluZGVwZW5kZW50IG9mIEZyYW1lIHN0YXlpbmcgYWxpdmUg
KGkuZS4sIGF1ZGl0aW5nIHBpbmdiYWNrcykuCisvLyBTaW5jZSBub3RoaW5nIGRlcGVuZHMgb24g
cmVzb3VyY2VzIGxvYWRlZCB0aHJvdWdoIHRoaXMgY2xhc3MsIHdlIGp1c3Qgd2FudAorLy8gdG8g
YWxsb3cgdGhlIGxvYWQgdG8gbGl2ZSBsb25nIGVub3VnaCB0byBlbnN1cmUgdGhlIG1lc3NhZ2Ug
d2FzIGFjdHVhbGx5IHNlbnQuCisvLyBUaGVyZWZvcmUsIGFzIHNvb24gYXMgYSBjYWxsYmFjayBp
cyByZWNlaXZlZCBmcm9tIHRoZSBSZXNvdXJjZUhhbmRsZSwgdGhpcyBjbGFzcyAKKy8vIHdpbGwg
Y2FuY2VsIHRoZSBsb2FkIGFuZCBkZWxldGUgaXRzZWxmLgorY2xhc3MgUGluZ0xvYWRlciA6IHBy
aXZhdGUgUmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgbG9hZEltYWdlKEZyYW1lKiwgY29uc3QgS1VSTCYgdXJsKTsKKwor
ICAgIH5QaW5nTG9hZGVyKCk7CisKK3ByaXZhdGU6CisgICAgUGluZ0xvYWRlcihGcmFtZSosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyBkZWxldGUgdGhpczsgfQor
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
KSB7IGRlbGV0ZSB0aGlzOyB9CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFu
ZGxlKikgeyBkZWxldGUgdGhpczsgfQorICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IGRlbGV0ZSB0aGlzOyB9CisKKyAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IG1faGFuZGxlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2F2ZS1waW5nLnBocAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3NhdmUt
cGluZy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcmVzb3VyY2VzL3NhdmUtcGluZy5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAor
PD9waHAKKyRwaW5nRmlsZSA9IGZvcGVuKCJwaW5nLnR4dCIsICd3Jyk7CitmY2xvc2UoJHBpbmdG
aWxlKTsKKz8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3Vy
Y2VzL2RlbGV0ZS1waW5nLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL2RlbGV0ZS1waW5nLnBocAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZGVsZXRlLXBpbmcucGhw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKzw/cGhwCit1bmxpbmsoInBpbmcudHh0Iik7
Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9j
aGVjay1waW5nLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcmVzb3VyY2VzL2NoZWNrLXBpbmcucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9jaGVjay1waW5nLnBocAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxOCBAQAorPD9waHAKK2lmICghZmlsZV9leGlzdHMoInBpbmcudHh0
IikpIHsKKyAgICAkcGFnZSA9ICRfU0VSVkVSWydQSFBfU0VMRiddOworICAgIC8vIFRoaXMgcmVm
cmVzaCBoZWFkZXIgaXMgdW5mb3J0dW5hdGUsIGJ1dCBpZiB0aGUgZmlsZSBkb2Vzbid0CisgICAg
Ly8gZXhpc3Qgd2hlbiB0aGlzIHBocCBzY3JpcHQgc3RhcnRzIHJ1bm5pbmcsIGl0IHdvbid0IG5v
dGljZQorICAgIC8vIGl0cyBjcmVhdGlvbiBldmVuIGlmIHdlIHNsZWVwIGFuZCBjaGVjayBhZ2Fp
bi4KKyAgICBoZWFkZXIoIlJlZnJlc2g6IDE7IHVybD0kcGFnZSIpOworICAgIHJldHVybjsKK30K
KwordW5saW5rKCJwaW5nLnR4dCIpOworCitlY2hvICJQQVNTXG4iOworZWNobyAiPHNjcmlwdD5c
biI7CitlY2hvICJpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKVxuIjsKK2VjaG8gIiAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7XG4iOworZWNobyAiPC9zY3JpcHQ+
IjsKKz8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9h
ZC1pbi11bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIgQEAKK21haW4gZnJhbWUgLSBoYXMgMSBvbnVubG9hZCBoYW5kbGVyKHMp
CitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9h
ZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRt
bD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxz
Y3JpcHQ+CisKK3ZhciB0ZXN0Q2FsbGVkID0gZmFsc2U7CisKK2Z1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgaWYgKCF0ZXN0Q2FsbGVkKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgfQorICAgICAgICB0ZXN0Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBsb2NhdGlvbi5hc3NpZ24oInJlc291cmNlcy9jaGVjay1waW5nLnBocCIpOworfQorCitm
dW5jdGlvbiBwaW5nKCkgeworICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoMSwgMSk7CisgICAgaW1n
LnNyYyA9ICJyZXNvdXJjZXMvc2F2ZS1waW5nLnBocCI7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJ0ZXN0KCk7IiBvbnVubG9hZD0icGluZygpOyI+Cis8aW1nIHNyYz0i
cmVzb3VyY2VzL2RlbGV0ZS1waW5nLnBocCIgb25sb2FkPSJ0ZXN0KCk7IiBvbmVycm9yPSJ0ZXN0
KCk7Ij48L2ltZz4KK1Rlc3QgY2FzZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMwNDU3LiBQcmV2aW91c2x5LCBpZiBhbiBpbWFnZTxicj4KK2xvYWQgd2FzIHRy
aWdnZXIgZnJvbSBhbiB1bmxvYWQgaGFuZGxlciwgd2Ugd291bGQga2lsbCBpdCBhbG1vc3QgaW1t
ZWRpYXRlbHkgZHVlIHRvIHRoZTxicj4KK25hdmlnYXRpb24gc3RvcHBpbmcgYWxsIGxvYWRlcnMu
IFRoZXNlIGxvYWRzIG5vdyBoYXBwZW4gZW50aXJlbHkgaW4gdGhlIGJhY2tncm91bmQgYW5kIGRl
dGFjaGVkPGJyPgorZnJvbSB0aGUgRE9NLCBzbyB0aGV5J3JlIGludmlzaWJsZSB0byB0aGUgbm9y
bWFsIHJlc291cmNlIGxvYWQgY2FsbGJhY2sgaW5mcmFzdHJ1Y3R1cmUuIFdlIGdlbmVyYXRlIGE8
YnI+Cit0aW1lc3RhbXAsIHRoZW4gaW4gdGhlIHVubG9hZCBoYW5kbGVyLCB3ZSBsb2FkIGFuICdp
bWFnZScgKGFjdHVhbGx5IGEgcGhwIHNjcmlwdCkgdGhhdCB0YWtlcyB0aGU8YnI+Cit0aW1lc3Rh
bXAgYXMgYSBwYXJhbWV0ZXIgYW5kIHNhdmVzIGl0IHRvIGEgZmlsZS4gIFRoZSBkZXN0aW5hdGlv
biBwYWdlIGlzIGEgcGhwIHNjcmlwdCB0aGF0IGNoZWNrcyBmb3I8YnI+Cit0aGUgZXhpc3RlbmNl
IG9mIHRoYXQgZmlsZSBhbmQgcGFzc2VzIHRoZSB0ZXN0IGlmIHRoZSBmaWxlIGNvbnRhaW5zIHRo
ZSBleHBlY3RlZCB0aW1lc3RhbXAuPGJyPgorPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY1ODIwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDgtMjMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0NTcuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9p
bWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvY2hlY2stcGluZy5waHA6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZGVsZXRlLXBpbmcucGhwOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3NhdmUtcGluZy5w
aHA6IEFkZGVkLgorCiAyMDEwLTA4LTIzICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5rbGluZ0Bu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4K
</data>
<flag name="review"
          id="53850"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="53851"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>