<?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>103627</bug_id>
          
          <creation_ts>2012-11-29 04:27:04 -0800</creation_ts>
          <short_desc>Text Autosizing: containers wider than their enclosing clusters should be autosized as separate clusters</short_desc>
          <delta_ts>2012-12-19 07:38:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84186</blocked>
    
    <blocked>105188</blocked>
    
    <blocked>105196</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Vayvod">avayvod</reporter>
          <assigned_to name="Anton Vayvod">avayvod</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>johnme</cc>
    
    <cc>kenneth</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778909</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-11-29 04:27:04 -0800</bug_when>
    <thetext>Text Autosizing: text nodes wider than their ancestor clusters should be autosized as separate clusters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778919</commentid>
    <comment_count>1</comment_count>
      <attachid>176705</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-11-29 04:46:04 -0800</bug_when>
    <thetext>Created attachment 176705
Patch

Some blocks of texts might be wider than their parent clusters and need to be autosized separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780022</commentid>
    <comment_count>2</comment_count>
      <attachid>176705</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-11-30 05:04:29 -0800</bug_when>
    <thetext>Comment on attachment 176705
Patch

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

Some initial comments. Haven&apos;t completely finished going through this.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Text Autosizing: text nodes wider than their ancestor clusters should be autosized as separate clusters

Nit: s/text nodes/containers/

&gt; Source/WebCore/ChangeLog:8
&gt; +        isAutosizingCluster() is checking for the width of the container being greater than the width of its

Nit: s/is checking/now checks/

&gt; Source/WebCore/ChangeLog:9
&gt; +        descendant cluster (more precisely, its text nodes least common ancestor). This ancestor RenderBlock is

s/descendant/enclosing/
s/its text nodes least common ancestor/the lowest common ancestor of the text nodes of its enclosing cluster/
s/ancestor/enclosing/

&gt; Source/WebCore/ChangeLog:11
&gt; +        Algorithm that searches for text nodes least common ancestor had to be modified to avoid circular dependency

s/least/lowest/ (these sound similar but are opposites!)
Nit: s/Algorithm/The algorithm/

&gt; Source/WebCore/rendering/TextAutosizer.cpp:91
&gt; +    processCluster(cluster, container, cluster, layoutRoot, windowInfo);

Shouldn&apos;t this pass 0 instead of cluster as the stayWithin?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:95
&gt; +void TextAutosizer::processCluster(RenderBlock* cluster, RenderBlock* container, const RenderBlock* stayWithin, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)

It&apos;s somewhat confusing calling this stayWithin when there&apos;s already a subtreeRoot. And it&apos;s not really a stayWithin, since its purpose isn&apos;t to prevent the recursion from going higher than the cluster. How about: parentClusterLCA? Or parentTextWrapper? Or parentBlockContainingAllText?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:142
&gt; +void TextAutosizer::processContainer(float multiplier, RenderBlock* container, const RenderBlock* stayWithin, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)

Ditto, how about: clusterLca? Or clusterTextWrapper? Or clusterBlockContainingAllText?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:214
&gt; +bool TextAutosizer::isAutosizingCluster(const RenderBlock* renderer, const RenderBlock* stayWithin)

Ditto rename stayWithin.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:267
&gt; +    measureDescendantTextWidth(lowestCommonAncestor, lowestCommonAncestor, minTextWidth, textWidth);

You renamed lowestCommonAncestor to deepestBlockContainingAllText above. I don&apos;t mind what its called, but it would be nice to be consistent.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:273
&gt; +void TextAutosizer::measureDescendantTextWidth(const RenderBlock* stayWithin, const RenderBlock* container, float minTextWidth, float&amp; textWidth)

Ditto rename stayWithin.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:308
&gt; +const RenderBlock* TextAutosizer::findDeepestBlockContainingAllText(const RenderBlock* subtreeRoot)

Why did you rename this parameter? You still pass in a cluster when you call this function. And it&apos;s confusing to call it subtreeRoot as that means something different in process cluster.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:-308
&gt; -    ASSERT(isAutosizingCluster(cluster));

And presumably you can keep this assert.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:311
&gt; +    const RenderObject* firstTextLeaf = findFirstTextLeafNotInCluster(FirstToLast, firstPath);

Now that you have the paths, you never actually use firstTextLeaf and lastTextLeaf except a couple of times to check if they&apos;re null. Could you get rid of these completely, and just do some check based on the length of the path?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:412
&gt; +bool TextAutosizer::isObjectAutosizingCluster(const RenderObject* object, const RenderBlock* stayWithin)

I&apos;d rather this was called isAutosizingContainerAndCluster for consistency with isAutosizingContainer/Cluster. And could you put this next to those two methods? Finally, you could probably use this in processSubtree too.

&gt; Source/WebCore/rendering/TextAutosizer.h:74
&gt; +    // Returns true if the specified autosizing container is also a cluster. If |stayWithin| is specified and |container| is wider,

Nit: s/wider/wider than |stayWithin|/

&gt; Source/WebCore/rendering/TextAutosizer.h:78
&gt; +    static bool clusterShouldBeAutosized(const RenderBlock* cluster, float clusterWidth);

s/\bcluster\b/deepestBlockContainingAllText/ ? That&apos;s what you seem to pass in. Also please make sure the argument names here match those in the .cpp.

&gt; Source/WebCore/rendering/TextAutosizer.h:101
&gt; +    static const RenderObject* firstChildNotCluster(TraversalDirection, const RenderObject*);

I&apos;m not so keen on the fact that this change introduces 7 new methods, 3 of which (firstChildNotCluster, nextSiblingNotCluster and objectFirstChild) are only used once. It makes it a bit harder to follow what Text Autosizing is doing, as the header file is getting quite overwhelming...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781529</commentid>
    <comment_count>3</comment_count>
      <attachid>177270</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-03 09:24:37 -0800</bug_when>
    <thetext>Created attachment 177270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781541</commentid>
    <comment_count>4</comment_count>
      <attachid>176705</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-03 09:34:39 -0800</bug_when>
    <thetext>Comment on attachment 176705
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:91
&gt;&gt; +    processCluster(cluster, container, cluster, layoutRoot, windowInfo);
&gt; 
&gt; Shouldn&apos;t this pass 0 instead of cluster as the stayWithin?

Changed. Actually it doesn&apos;t matter as long as the assertion within processCluster doesn&apos;t fail.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:95
&gt;&gt; +void TextAutosizer::processCluster(RenderBlock* cluster, RenderBlock* container, const RenderBlock* stayWithin, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp; windowInfo)
&gt; 
&gt; It&apos;s somewhat confusing calling this stayWithin when there&apos;s already a subtreeRoot. And it&apos;s not really a stayWithin, since its purpose isn&apos;t to prevent the recursion from going higher than the cluster. How about: parentClusterLCA? Or parentTextWrapper? Or parentBlockContainingAllText?

blockContainingAllText

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:308
&gt;&gt; +const RenderBlock* TextAutosizer::findDeepestBlockContainingAllText(const RenderBlock* subtreeRoot)
&gt; 
&gt; Why did you rename this parameter? You still pass in a cluster when you call this function. And it&apos;s confusing to call it subtreeRoot as that means something different in process cluster.

Was work-in-progress rename. Reverted.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:-308
&gt;&gt; -    ASSERT(isAutosizingCluster(cluster));
&gt; 
&gt; And presumably you can keep this assert.

Yes.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:311
&gt;&gt; +    const RenderObject* firstTextLeaf = findFirstTextLeafNotInCluster(FirstToLast, firstPath);
&gt; 
&gt; Now that you have the paths, you never actually use firstTextLeaf and lastTextLeaf except a couple of times to check if they&apos;re null. Could you get rid of these completely, and just do some check based on the length of the path?

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:412
&gt;&gt; +bool TextAutosizer::isObjectAutosizingCluster(const RenderObject* object, const RenderBlock* stayWithin)
&gt; 
&gt; I&apos;d rather this was called isAutosizingContainerAndCluster for consistency with isAutosizingContainer/Cluster. And could you put this next to those two methods? Finally, you could probably use this in processSubtree too.

I think this one should actually be isAutosizingCluster since it checks it for any object.
Old isAutosizingCluster checks only containers (or fails) so I renamed it to isContainerAutosizingCluster.
How does it look?

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:101
&gt;&gt; +    static const RenderObject* firstChildNotCluster(TraversalDirection, const RenderObject*);
&gt; 
&gt; I&apos;m not so keen on the fact that this change introduces 7 new methods, 3 of which (firstChildNotCluster, nextSiblingNotCluster and objectFirstChild) are only used once. It makes it a bit harder to follow what Text Autosizing is doing, as the header file is getting quite overwhelming...

Combined firstChildNotCluster and nextSiblingNotCluster since there was much common code.
Since firstChild and nextSibling are very similar here (both mean the next node in traversal) it seems not very consistent to me to inline some logic about one while moving the same logic about another to a function.
As for the header getting bigger, I&apos;d happily move all private static functions to anonymous namespace in .cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782780</commentid>
    <comment_count>5</comment_count>
      <attachid>177270</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-04 12:09:28 -0800</bug_when>
    <thetext>Comment on attachment 177270
Patch

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

A few more comments:

&gt; Source/WebCore/ChangeLog:9
&gt; +        common ancestor of the text nodes of the enclosing cluster). The enclosing RenderBlock is passed throughout

Error: mismatched bracket :)

Also, perhaps replace &quot;The enclosing ... traversal methods.&quot; with &quot;This blockContainingAllText is passed to all the tree traversal methods.&quot; ?

&gt; Source/WebCore/ChangeLog:11
&gt; +        The algorithm that searches for text nodes lowest common ancestor had to be modified to avoid circular dependency

Some minor grammar nits:
  s/text nodes lowest common ancestor/the lowest common ancestor of descendant text nodes/
  s/circular dependency/a circular dependency/
  s/finding LCA/finding the LCA/
  s/if container/whether a given container/
  s/initial LCA/the initial LCA/
  s/of text leafs&apos;/of the text leafs&apos;/
  s/new LCA/a new LCA/
  s/in paths/in the paths/
  s/from LCA/from the LCA/

&gt; Source/WebCore/rendering/TextAutosizer.cpp:235
&gt; +    // If a container is wider than its |blockContainingAllText| parent, it becomes a cluster.

Nit: please wrap this to match the rest of the comment.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:289
&gt; +                measureDescendantTextWidth(blockContainingAllText, descendantBlock, minTextWidth, textWidth);

Nit: isContainerAutosizingCluster takes container then blockContainingAllText parameters, whereas measureDescendantTextWidth takes blockContainingAllText then container. It would be nice if this were consistent, e.g. swap the first two parameters to measureDescendantTextWidth.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:297
&gt; +RenderObject* TextAutosizer::nextInPreOrderSkippingDescendantsOfContainers(const RenderObject* current, const RenderObject* blockContainingAllText)

This should still be called stayWithin. I suspect you grep&apos;d overzealously :)

&gt; Source/WebCore/rendering/TextAutosizer.cpp:315
&gt; +    ASSERT(isContainerAutosizingCluster(cluster));

Isn&apos;t this missing a parent blockContainingAllText parameter?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:338
&gt; +        // Check if any of text leafs parents are going to be clusters due to being wider than the block just found.

Minor nit: s/text leafs/the text leafs&apos;/

&gt; Source/WebCore/rendering/TextAutosizer.cpp:368
&gt; +void TextAutosizer::findFirstTextLeafNotInCluster(TraversalDirection direction, RenderObjects&amp; path)

This method used to be easy to follow, but has gotten rather more complicated. findFirstTextLeafNotInCluster now calls findNextTextLeafNotInCluster which in turn calls back to findFirstTextLeafNotInCluster, so there are nested while loops of alternating different kinds. I wonder if this could be made easier. For example unless I&apos;m missing something, findFirstTextLeafNotInCluster could be written as follows with no new dependencies (based heavily on the existing implementation of findFirstTextLeafNotInCluster added by webkit.org/b/102562, with the ++depth and --depth replaced by pushing and popping children):

void TextAutosizer::findFirstTextLeafNotInCluster(TraversalDirection direction, RenderObjects&amp; path)
{
    const RenderObject* child = (direction == FirstToLast) ? path.last()-&gt;firstChild() : path.last()-&gt;lastChild();
    while (child) {
        if (!isAutosizingCluster(child, 0)) {
            path.append(child);
            findFirstTextLeafNotInCluster(direction, path);
            if (path.last()-&gt;isText())
                return;
            path.removeLast();
        }
        child = (direction == FirstToLast) ? child-&gt;nextSibling() : child-&gt;previousSibling();
    }
    // Leave path empty if search failed.
    if (path.size() == 1)
        path.clear();
}

What do you think?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:375
&gt; +            return findNextTextLeafNotInCluster(direction, path);

Nit: Since this is a void method, I&apos;d prefer you write this on 2 lines:

    findNextTextLeafNotInCluster(direction, path);
    return;

Or in this case:

    if (!current-&gt;isText())
        findNextTextLeafNotInCluster(direction, path);
    return;

Ditto twice below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784168</commentid>
    <comment_count>6</comment_count>
      <attachid>177841</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-05 15:12:12 -0800</bug_when>
    <thetext>Created attachment 177841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784804</commentid>
    <comment_count>7</comment_count>
      <attachid>177270</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-06 02:59:40 -0800</bug_when>
    <thetext>Comment on attachment 177270
Patch

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

I reduced the number of methods and then moved private static methods over to .cpp file wrapped in anonymous namespace.

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        common ancestor of the text nodes of the enclosing cluster). The enclosing RenderBlock is passed throughout
&gt; 
&gt; Error: mismatched bracket :)
&gt; 
&gt; Also, perhaps replace &quot;The enclosing ... traversal methods.&quot; with &quot;This blockContainingAllText is passed to all the tree traversal methods.&quot; ?

Done.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        The algorithm that searches for text nodes lowest common ancestor had to be modified to avoid circular dependency
&gt; 
&gt; Some minor grammar nits:
&gt;   s/text nodes lowest common ancestor/the lowest common ancestor of descendant text nodes/
&gt;   s/circular dependency/a circular dependency/
&gt;   s/finding LCA/finding the LCA/
&gt;   s/if container/whether a given container/
&gt;   s/initial LCA/the initial LCA/
&gt;   s/of text leafs&apos;/of the text leafs&apos;/
&gt;   s/new LCA/a new LCA/
&gt;   s/in paths/in the paths/
&gt;   s/from LCA/from the LCA/

Done. Thanks for fixing the articles.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:235
&gt;&gt; +    // If a container is wider than its |blockContainingAllText| parent, it becomes a cluster.
&gt; 
&gt; Nit: please wrap this to match the rest of the comment.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:289
&gt;&gt; +                measureDescendantTextWidth(blockContainingAllText, descendantBlock, minTextWidth, textWidth);
&gt; 
&gt; Nit: isContainerAutosizingCluster takes container then blockContainingAllText parameters, whereas measureDescendantTextWidth takes blockContainingAllText then container. It would be nice if this were consistent, e.g. swap the first two parameters to measureDescendantTextWidth.

Good catch, I actually mixed it up here, it&apos;s the other way around in the header.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:297
&gt;&gt; +RenderObject* TextAutosizer::nextInPreOrderSkippingDescendantsOfContainers(const RenderObject* current, const RenderObject* blockContainingAllText)
&gt; 
&gt; This should still be called stayWithin. I suspect you grep&apos;d overzealously :)

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:315
&gt;&gt; +    ASSERT(isContainerAutosizingCluster(cluster));
&gt; 
&gt; Isn&apos;t this missing a parent blockContainingAllText parameter?

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:338
&gt;&gt; +        // Check if any of text leafs parents are going to be clusters due to being wider than the block just found.
&gt; 
&gt; Minor nit: s/text leafs/the text leafs&apos;/

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:368
&gt;&gt; +void TextAutosizer::findFirstTextLeafNotInCluster(TraversalDirection direction, RenderObjects&amp; path)
&gt; 
&gt; This method used to be easy to follow, but has gotten rather more complicated. findFirstTextLeafNotInCluster now calls findNextTextLeafNotInCluster which in turn calls back to findFirstTextLeafNotInCluster, so there are nested while loops of alternating different kinds. I wonder if this could be made easier. For example unless I&apos;m missing something, findFirstTextLeafNotInCluster could be written as follows with no new dependencies (based heavily on the existing implementation of findFirstTextLeafNotInCluster added by webkit.org/b/102562, with the ++depth and --depth replaced by pushing and popping children):
&gt; 
&gt; void TextAutosizer::findFirstTextLeafNotInCluster(TraversalDirection direction, RenderObjects&amp; path)
&gt; {
&gt;     const RenderObject* child = (direction == FirstToLast) ? path.last()-&gt;firstChild() : path.last()-&gt;lastChild();
&gt;     while (child) {
&gt;         if (!isAutosizingCluster(child, 0)) {
&gt;             path.append(child);
&gt;             findFirstTextLeafNotInCluster(direction, path);
&gt;             if (path.last()-&gt;isText())
&gt;                 return;
&gt;             path.removeLast();
&gt;         }
&gt;         child = (direction == FirstToLast) ? child-&gt;nextSibling() : child-&gt;previousSibling();
&gt;     }
&gt;     // Leave path empty if search failed.
&gt;     if (path.size() == 1)
&gt;         path.clear();
&gt; }
&gt; 
&gt; What do you think?

I figured out how to use just one (hopefully still easy to follow) method.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:375
&gt;&gt; +            return findNextTextLeafNotInCluster(direction, path);
&gt; 
&gt; Nit: Since this is a void method, I&apos;d prefer you write this on 2 lines:
&gt; 
&gt;     findNextTextLeafNotInCluster(direction, path);
&gt;     return;
&gt; 
&gt; Or in this case:
&gt; 
&gt;     if (!current-&gt;isText())
&gt;         findNextTextLeafNotInCluster(direction, path);
&gt;     return;
&gt; 
&gt; Ditto twice below.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784841</commentid>
    <comment_count>8</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-06 04:15:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 177270 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177270&amp;action=review
&gt; 
&gt; I reduced the number of methods and then moved private static methods over to .cpp file wrapped in anonymous namespace.

I&apos;m finding it really hard to review this patch, as the diff just shows that the whole file has changed so I can&apos;t see what&apos;s changed within the bits that have moved around.

Would you mind re-uploading this without moving things around, and then doing the moving as a follow-up patch (which only moves things, without changing any of the code)? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784868</commentid>
    <comment_count>9</comment_count>
      <attachid>177998</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-06 05:13:44 -0800</bug_when>
    <thetext>Created attachment 177998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784895</commentid>
    <comment_count>10</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-06 06:09:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 177270 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177270&amp;action=review
&gt; &gt; 
&gt; &gt; I reduced the number of methods and then moved private static methods over to .cpp file wrapped in anonymous namespace.
&gt; 
&gt; I&apos;m finding it really hard to review this patch, as the diff just shows that the whole file has changed so I can&apos;t see what&apos;s changed within the bits that have moved around.
&gt; 
&gt; Would you mind re-uploading this without moving things around, and then doing the moving as a follow-up patch (which only moves things, without changing any of the code)? Thanks!

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784980</commentid>
    <comment_count>11</comment_count>
      <attachid>177998</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-06 09:24:48 -0800</bug_when>
    <thetext>Comment on attachment 177998
Patch

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

Thanks, that&apos;s much clearer now!

&gt; Source/WebCore/rendering/TextAutosizer.cpp:239
&gt; +    // If a container is wider than its |parentBlockContainingAllText| parent, it

Nit - might be slightly clearer as: &quot;Additionally, any containers that are wider than the |blockContainingAllText| of their enclosing cluster also become clusters, since they need special treatment due to their width.&quot;

&gt; Source/WebCore/rendering/TextAutosizer.cpp:303
&gt; +// Use to traverse the tree of descendants, excluding descendants of containers (but returning the containers themselves).

This comment is already in the .h file?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:381
&gt; +bool TextAutosizer::correctFirstTextLeafIfInCluster(TraversalDirection direction, RenderObjects&amp; path, size_t startFrom, const RenderBlock* parentBlockContainingAllText)

Cool, these are a lot easier to follow now - thanks!

&gt; Source/WebCore/rendering/TextAutosizer.cpp:395
&gt; +    findFirstTextLeafNotInClusterStartingFrom(direction, path, objectNextSibling(direction, cluster));

What happens if the cluster doesn&apos;t have a next sibling? objectNextSibling will return 0, hence findFirstTextLeafNotInClusterStartingFrom will just pop the last entry of path. But startFrom could have other descendants that are text leaves, and that we are ignoring...

Incidentally, if the tests didn&apos;t catch this, might want to add another test ;)

&gt; Source/WebCore/rendering/TextAutosizer.h:33
&gt;  #include &lt;wtf/PassRefPtr.h&gt;

While you&apos;re at it, looks like you can remove this include?

&gt; Source/WebCore/rendering/TextAutosizer.h:57
&gt; +    typedef Vector&lt;const RenderObject*&gt; RenderObjects;

It seems you only use &quot;RenderObjects&amp;&quot; in the .h file. Would it be possible to move this typedef to the .cpp and forward declare it in the .h file, such that you can also move the Vector include to the .cpp file? Though if you&apos;re going to move all of these to the .cpp file anyway, it might not be worth spending too long on this :)

&gt; Source/WebCore/rendering/TextAutosizer.h:66
&gt; +    void processContainer(float multiplier, RenderBlock* container, const RenderBlock* parentBlockContainingAllText, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;);

Please sync up your parameter names. In the header file both processCluster and processContainer take a parentBlockContainingAllText, but in the cpp file they both take a blockContainingAllText. I would suggest that instead processCluster takes a parentBlockContainingAllText (in both) and processContainer takes a blockContainingAllText (in both), since conceptually processContainer is passed the blockContainingAllText of the current cluster (rather than of the parent cluster).

This would also allow you to rename deepestBlockContainingAllText in processCluster to blockContainingAllText, which might be more consistent.

&gt; Source/WebCore/rendering/TextAutosizer.h:86
&gt; +    // returns the lowest common ancestor for these text nodes. Otherwise, returns the cluster itself.

Tiny nit: s/for/of/

&gt; Source/WebCore/rendering/TextAutosizer.h:90
&gt; +    // the given child of the last object in the path. Follows the given tree traversal direction. If such text leaf is not found,

It&apos;s not clear what happens if the search succeeds. How about replacing the last sentence with: &quot;If such a text leaf is found, the path will be replaced with the path to the text leaf; otherwise the last object will be removed from the path.&quot; ?

&gt; Source/WebCore/rendering/TextAutosizer.h:95
&gt; +    // If cluster is not found, returns false. Otherwise, removes every node in the path including the found cluster and continues

&quot;removes every node in the path including the found cluster&quot; suggests that it completely clears the path, but it only removes the cluster and entries after (with greater index than) the cluster. How about &quot;If no cluster is found, this returns false. Otherwise, it removes the found cluster and all subsequent nodes from the path, then continues traversing the tree to find the next text leaf in the given direction, and finally returns true.&quot;

&gt; Source/WebCore/rendering/TextAutosizer.h:97
&gt; +    static bool correctFirstTextLeafIfInCluster(TraversalDirection, RenderObjects&amp; path, size_t startFrom, const RenderBlock* parentBlockContainingAllText);

Please mention this method in the ChangeLog. Also, &quot;adjust&quot; might be clearer than &quot;correct&quot;, as correct has multiple meanings and people might interpret it as asking a question, &quot;is this the correct first text leaf&quot; or something... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785838</commentid>
    <comment_count>12</comment_count>
      <attachid>178210</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-07 05:57:24 -0800</bug_when>
    <thetext>Created attachment 178210
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785842</commentid>
    <comment_count>13</comment_count>
      <attachid>177998</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-07 06:07:09 -0800</bug_when>
    <thetext>Comment on attachment 177998
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:239
&gt;&gt; +    // If a container is wider than its |parentBlockContainingAllText| parent, it
&gt; 
&gt; Nit - might be slightly clearer as: &quot;Additionally, any containers that are wider than the |blockContainingAllText| of their enclosing cluster also become clusters, since they need special treatment due to their width.&quot;

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:303
&gt;&gt; +// Use to traverse the tree of descendants, excluding descendants of containers (but returning the containers themselves).
&gt; 
&gt; This comment is already in the .h file?

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:381
&gt;&gt; +bool TextAutosizer::correctFirstTextLeafIfInCluster(TraversalDirection direction, RenderObjects&amp; path, size_t startFrom, const RenderBlock* parentBlockContainingAllText)
&gt; 
&gt; Cool, these are a lot easier to follow now - thanks!

Great!

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:395
&gt;&gt; +    findFirstTextLeafNotInClusterStartingFrom(direction, path, objectNextSibling(direction, cluster));
&gt; 
&gt; What happens if the cluster doesn&apos;t have a next sibling? objectNextSibling will return 0, hence findFirstTextLeafNotInClusterStartingFrom will just pop the last entry of path. But startFrom could have other descendants that are text leaves, and that we are ignoring...
&gt; 
&gt; Incidentally, if the tests didn&apos;t catch this, might want to add another test ;)

Fixed. I don&apos;t think LayoutTests are suited best to test tree traversal. I&apos;d look into unittesting it.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:33
&gt;&gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt; 
&gt; While you&apos;re at it, looks like you can remove this include?

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:57
&gt;&gt; +    typedef Vector&lt;const RenderObject*&gt; RenderObjects;
&gt; 
&gt; It seems you only use &quot;RenderObjects&amp;&quot; in the .h file. Would it be possible to move this typedef to the .cpp and forward declare it in the .h file, such that you can also move the Vector include to the .cpp file? Though if you&apos;re going to move all of these to the .cpp file anyway, it might not be worth spending too long on this :)

To &quot;forward declare&quot; a typedef means to forward declare used classes (so namespace WTF { template&lt;typename T,size_t capacity&gt; Vector; }) and then make the same typedef in .cpp file like class TextAutosizer { private: typedef Vector&lt;RenderObject&gt; RenderObjects; };
I don&apos;t think it&apos;s worth it (unless there&apos;s another way I&apos;m not aware of)

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:66
&gt;&gt; +    void processContainer(float multiplier, RenderBlock* container, const RenderBlock* parentBlockContainingAllText, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;);
&gt; 
&gt; Please sync up your parameter names. In the header file both processCluster and processContainer take a parentBlockContainingAllText, but in the cpp file they both take a blockContainingAllText. I would suggest that instead processCluster takes a parentBlockContainingAllText (in both) and processContainer takes a blockContainingAllText (in both), since conceptually processContainer is passed the blockContainingAllText of the current cluster (rather than of the parent cluster).
&gt; 
&gt; This would also allow you to rename deepestBlockContainingAllText in processCluster to blockContainingAllText, which might be more consistent.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:86
&gt;&gt; +    // returns the lowest common ancestor for these text nodes. Otherwise, returns the cluster itself.
&gt; 
&gt; Tiny nit: s/for/of/

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:90
&gt;&gt; +    // the given child of the last object in the path. Follows the given tree traversal direction. If such text leaf is not found,
&gt; 
&gt; It&apos;s not clear what happens if the search succeeds. How about replacing the last sentence with: &quot;If such a text leaf is found, the path will be replaced with the path to the text leaf; otherwise the last object will be removed from the path.&quot; ?

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:95
&gt;&gt; +    // If cluster is not found, returns false. Otherwise, removes every node in the path including the found cluster and continues
&gt; 
&gt; &quot;removes every node in the path including the found cluster&quot; suggests that it completely clears the path, but it only removes the cluster and entries after (with greater index than) the cluster. How about &quot;If no cluster is found, this returns false. Otherwise, it removes the found cluster and all subsequent nodes from the path, then continues traversing the tree to find the next text leaf in the given direction, and finally returns true.&quot;

Done

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:97
&gt;&gt; +    static bool correctFirstTextLeafIfInCluster(TraversalDirection, RenderObjects&amp; path, size_t startFrom, const RenderBlock* parentBlockContainingAllText);
&gt; 
&gt; Please mention this method in the ChangeLog. Also, &quot;adjust&quot; might be clearer than &quot;correct&quot;, as correct has multiple meanings and people might interpret it as asking a question, &quot;is this the correct first text leaf&quot; or something... :)

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790463</commentid>
    <comment_count>14</comment_count>
      <attachid>178210</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-13 03:11:06 -0800</bug_when>
    <thetext>Comment on attachment 178210
Patch

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

Looking good. I like how you merged findFirst and findNext into nextInPreOrderSkippingClusters, and the parallel to nextInPreOrderSkippingDescendantsOfContainers makes it easy to follow.

&gt; Source/WebCore/ChangeLog:27
&gt; +        (WebCore::TextAutosizer::nextInInOrderSkippingClusters): finds the next renderer that is not an autosizing cluster.

s/nextInInOrderSkippingClusters/nextInPreOrderSkippingClusters/

&gt; Source/WebCore/ChangeLog:29
&gt; +        (WebCore::TextAutosizer::nextTextLeafInInOrderSkippingClusters): finds the next text leaf that doesn&apos;t belong to any cluster.

s/nextTextLeafInInOrderSkippingClusters/nextTextLeafInPreOrderSkippingClusters/

&gt; Source/WebCore/rendering/TextAutosizer.cpp:320
&gt; +const RenderObject* TextAutosizer::nextInPreOrderSkippingClusters(TraversalDirection direction, const RenderObject* current, const RenderObject* stayWithin, const RenderBlock* parentBlockContainingAllText)

Nit: I think in this context I&apos;d call it blockContainingAllText not parentBlockContainingAllText, as it is the LCA block of the current cluster, not the parent cluster. Ditto for nextTextLeafInPreOrderSkippingClusters and adjustFirstTextLeafIfInCluster below.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:379
&gt; +void TextAutosizer::nextTextLeafInPreOrderSkippingClusters(TraversalDirection direction, RenderObjects&amp; path, const RenderBlock* parentBlockContainingAllText)

This looks like an instance of &apos;Precede getters that return values through out arguments with the word &quot;get&quot;.&apos;
http://www.webkit.org/coding/coding-style.html#names-out-argument

&gt; Source/WebCore/rendering/TextAutosizer.cpp:385
&gt; +    const RenderObject* next = nextInPreOrderSkippingClusters(direction, current, stayWithin, parentBlockContainingAllText);

I think you could avoid this extra call to nextInPreOrderSkippingClusters if you wrote this as:

    const RenderObject* next = current;
    for (;;) {
        next = nextInPreOrderSkippingClusters(direction, next, ...);
        if (!next) {
            path.clear();
            return;
        }
        if (next-&gt;isText()) {
            ...
            return;
        }
    }

But I don&apos;t mind if you think the current approach is clearer.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:388
&gt; +            ASSERT(next-&gt;isEmpty());

What&apos;s this ASSERT for? None of your code seems to depend on RenderTexts having no children.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:409
&gt; +    for (size_t i = startFrom; i &lt; path.size(); ++i)

I think WebKit typically uses braces whenever the body of a loop is multiple lines, even if it happens to be a single statement.

&gt; Source/WebCore/rendering/TextAutosizer.h:84
&gt; +    // Use to traverse the tree of descendants, excluding clusters with their descendants (the current object and |stayWithin|

Nit: s/with/and/

&gt; LayoutTests/ChangeLog:8
&gt; +        isAutosizingCluster() now checks for the width of the container being greater than the width of the lowest

This comment doesn&apos;t need to repeat the explanation of what the patch does; instead it should explain how the patch is being tested.

&gt; LayoutTests/fast/text-autosizing/cluster-wide-in-narrow.html:30
&gt; +        This text should be autosized to 30px computed font-size (16 * 600/320), since because of its width:600px it becomes a cluster.&lt;br&gt;

Slightly more explanation would be good, e.g. &quot;since its width:600px makes it wider than the lowest common ancestor of its enclosing cluster, hence it will itself become a cluster.

&gt; LayoutTests/fast/text-autosizing/cluster-wide-in-narrow.html:33
&gt;  

You need to change the explanation for the div below, as it no longer behaves &quot;similarly&quot; :)

&gt; LayoutTests/fast/text-autosizing/wide-child.html:27
&gt; +    	This text should be autosized to 40px computed font size (16 * 800/320) since it&apos;s wider than its cluster so it becomes a cluster itself.&lt;br&gt;

Technically it&apos;s wider than the LCA of its enclosing cluster, not wider than its enclosing cluster (the RenderView).

&gt; LayoutTests/fast/text-autosizing/wide-in-narrow-overflow-scroll.html:26
&gt; +        This text should be autosized to 40px computed font size (16 * 800/320), since it&apos;s wider than the containing cluster and therefore becomes a cluster itself.&lt;br&gt;

Ditto wider than LCA not cluster. This case is also interesting as only 400px of this div will be visible at any one time, even though it is 800px wide. So really we should be using 400px as the width for this div. But that&apos;s not the fault of this patch - I filed bug 104897.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790700</commentid>
    <comment_count>15</comment_count>
      <attachid>179291</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-13 09:50:40 -0800</bug_when>
    <thetext>Created attachment 179291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790718</commentid>
    <comment_count>16</comment_count>
      <attachid>179297</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-13 10:13:52 -0800</bug_when>
    <thetext>Created attachment 179297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790727</commentid>
    <comment_count>17</comment_count>
      <attachid>179297</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-13 10:19:46 -0800</bug_when>
    <thetext>Comment on attachment 179297
Patch

Looks good to me. Kenneth/Julien, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790730</commentid>
    <comment_count>18</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-13 10:25:27 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Looks good to me. Kenneth/Julien, what do you think?

By the way we tested this on 1000 popular homepages and this improved quite a few of them, without causing any significant regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790904</commentid>
    <comment_count>19</comment_count>
      <attachid>179297</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-13 14:04:19 -0800</bug_when>
    <thetext>Comment on attachment 179297
Patch

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

Overall comment: this patch is 37k long, webkit-patch should have warned you that it&apos;s too big for any reviewer to safely review. I barely scratched the surface on this review so if you want your patch to be properly reviewed, split it up. If not, I can guarantee that it will painful for both of us.

&gt; Source/WebCore/ChangeLog:16
&gt; +

What is missing here would be some context: what are you trying to achieve and why?

&gt; Source/WebCore/ChangeLog:20
&gt; +        (WebCore::TextAutosizer::processSubtree): calls processCluster with new number of arguments.

Nit: Sentences starts with a capitalized letter. Also going to the next line give me space to avoid wrapping on the right (the reviewing tool had to wrap some of your massive lines).

&gt; Source/WebCore/ChangeLog:21
&gt; +        (WebCore::TextAutosizer::processCluster): parentBlockContainingAllText parameter (for assertion only), finds new block containing all text nodes and passes it into processContainer.

I don&apos;t think it&apos;s a good argument to pass in an extra argument just for the sake of ASSERTing.

&gt; Source/WebCore/ChangeLog:34
&gt; +        (TextAutosizer): removed unused declarations, added a typedef for a vector of RenderObjects.

We usually remove the (TextAutosizer): part as it has no value (script snafu).

&gt; Source/WebCore/rendering/TextAutosizer.cpp:340
&gt; +const RenderBlock* TextAutosizer::findDeepestBlockContainingAllText(const RenderBlock* cluster, const RenderBlock* parentBlockContainingAllText)
&gt; +{
&gt; +    ASSERT_UNUSED(parentBlockContainingAllText, isContainerAutosizingCluster(cluster, parentBlockContainingAllText));

There is only one call site for this function and the only reason you pass |parentBlockContainingAllText| is for the ASSERT so the parameter should be removed and if you follow the caller, the ASSERT is already there.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:400
&gt; +            RenderObjects nextPath;
&gt; +            while (next != stayWithin) {
&gt; +                nextPath.append(next);
&gt; +                next = next-&gt;parent();
&gt; +            }
&gt; +            nextPath.append(stayWithin);
&gt; +            nextPath.reverse();
&gt;  
&gt; -    return containingBlock;
&gt; +            path.swap(nextPath);
&gt; +            return;

I don&apos;t see the need for an extra variable here as you are swapping the Vector anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791641</commentid>
    <comment_count>20</comment_count>
      <attachid>179489</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-14 08:48:22 -0800</bug_when>
    <thetext>Created attachment 179489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791644</commentid>
    <comment_count>21</comment_count>
      <attachid>179297</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-14 08:51:23 -0800</bug_when>
    <thetext>Comment on attachment 179297
Patch

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

I&apos;ve split the patch as you suggested. Hopefully this one is not very big now.

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +
&gt; 
&gt; What is missing here would be some context: what are you trying to achieve and why?

Added.

&gt;&gt; Source/WebCore/ChangeLog:20
&gt;&gt; +        (WebCore::TextAutosizer::processSubtree): calls processCluster with new number of arguments.
&gt; 
&gt; Nit: Sentences starts with a capitalized letter. Also going to the next line give me space to avoid wrapping on the right (the reviewing tool had to wrap some of your massive lines).

Done. Sorry about wrapping.

&gt;&gt; Source/WebCore/ChangeLog:21
&gt;&gt; +        (WebCore::TextAutosizer::processCluster): parentBlockContainingAllText parameter (for assertion only), finds new block containing all text nodes and passes it into processContainer.
&gt; 
&gt; I don&apos;t think it&apos;s a good argument to pass in an extra argument just for the sake of ASSERTing.

Agreed. Removed it.

&gt;&gt; Source/WebCore/ChangeLog:34
&gt;&gt; +        (TextAutosizer): removed unused declarations, added a typedef for a vector of RenderObjects.
&gt; 
&gt; We usually remove the (TextAutosizer): part as it has no value (script snafu).

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:340
&gt;&gt; +    ASSERT_UNUSED(parentBlockContainingAllText, isContainerAutosizingCluster(cluster, parentBlockContainingAllText));
&gt; 
&gt; There is only one call site for this function and the only reason you pass |parentBlockContainingAllText| is for the ASSERT so the parameter should be removed and if you follow the caller, the ASSERT is already there.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:400
&gt;&gt; +            return;
&gt; 
&gt; I don&apos;t see the need for an extra variable here as you are swapping the Vector anyway.

Acknowledged. It will be part of the follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791691</commentid>
    <comment_count>22</comment_count>
      <attachid>179497</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-14 10:31:35 -0800</bug_when>
    <thetext>Created attachment 179497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791694</commentid>
    <comment_count>23</comment_count>
      <attachid>179497</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-14 10:34:45 -0800</bug_when>
    <thetext>Comment on attachment 179497
Patch

Attachment 179497 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15317723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791699</commentid>
    <comment_count>24</comment_count>
      <attachid>179499</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-14 10:37:21 -0800</bug_when>
    <thetext>Created attachment 179499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791731</commentid>
    <comment_count>25</comment_count>
      <attachid>179506</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-14 11:37:36 -0800</bug_when>
    <thetext>Created attachment 179506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792871</commentid>
    <comment_count>26</comment_count>
      <attachid>179506</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-17 11:22:57 -0800</bug_when>
    <thetext>Comment on attachment 179506
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        Reviewed by Julien Chaffraix.

Mhhh, please be careful with that. It shouldn&apos;t be filled as the patch was never r+

&gt; Source/WebCore/rendering/TextAutosizer.cpp:-98
&gt; -    ASSERT(isAutosizingCluster(cluster));
&gt; -

Why do you remove this ASSERT when the callers didn&apos;t change?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:237
&gt; +bool TextAutosizer::isAutosizingCluster(const RenderObject* object, const RenderBlock* blockContainingAllText)

This should take a RenderBlock as you only ever call it on RenderBlock&apos;s.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:-322
&gt; -    ASSERT(isAutosizingCluster(cluster));
&gt; -

Why do you remove this ASSERT when the callers didn&apos;t change?

&gt; Source/WebCore/rendering/TextAutosizer.h:70
&gt; +    // Returns true if the given autosizing container is an autosizing cluster. Checks if the container is wider than
&gt; +    // |parentBlockContainingAllText| if the pointer is not null.

Please remove these comments as they are not really helpful.

&gt; Source/WebCore/rendering/TextAutosizer.h:73
&gt; +    // Returns true if the given renderer is an autosizing cluster. Checks if the renderer is wider than
&gt; +    // |parentBlockContainingAllText| if the pointer is not null.

Ditto.

&gt; Source/WebCore/rendering/TextAutosizer.h:74
&gt; +    static bool isAutosizingCluster(const RenderObject*, const RenderBlock* parentBlockContainingAllText);

I would make the second argument optional to avoid confusing call sites: isAutosizingCluster(renderer, 0)

&gt; Source/WebCore/rendering/TextAutosizer.h:84
&gt; +    // If there are any descendant text nodes of the given cluster that are not descendants of any descendant cluster,
&gt; +    // returns the lowest common ancestor of these text nodes. Otherwise, returns the cluster itself.

That&apos;s why we usually don&apos;t put comments next to functions as:
* they get stale super easily.
* different people have probably different level of verbosity or different ways of describing the same code.
* the naming should reflect that and now doesn&apos;t.

If you think this comment is unclear, remove it and update the function name to be clearer. As is, this change doesn&apos;t add much apart from confusing the blaming tool (there is no code change in this function).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792900</commentid>
    <comment_count>27</comment_count>
      <attachid>179506</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-17 11:58:40 -0800</bug_when>
    <thetext>Comment on attachment 179506
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:-98
&gt;&gt; -
&gt; 
&gt; Why do you remove this ASSERT when the callers didn&apos;t change?

Because isAutosizingCluster(cluster, 0) may return false here even though this is a valid cluster, since we&apos;re not passing in the parentBlockContainingAllText argument (which the caller of this function knows, but which this function doesn&apos;t have access to since we deemed it wasn&apos;t worth passing an extra argument just for this assert). Ditto below.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:74
&gt;&gt; +    static bool isAutosizingCluster(const RenderObject*, const RenderBlock* parentBlockContainingAllText);
&gt; 
&gt; I would make the second argument optional to avoid confusing call sites: isAutosizingCluster(renderer, 0)

It&apos;s nice to emphasize that the result of this function depends on the blockContainingAllText you pass in (and that if you pass in 0, you&apos;ll get an incomplete answer). Though I notice that both of the callers of this function pass in 0. So perhaps we could remove the second argument completely (always pass in 0 to isContainerAutosizingCluster), and rename the function to, e.g. &quot;isAutosizingClusterIgnoringWidth&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792905</commentid>
    <comment_count>28</comment_count>
      <attachid>179506</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-17 12:05:01 -0800</bug_when>
    <thetext>Comment on attachment 179506
Patch

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

&gt; LayoutTests/fast/text-autosizing/cluster-wide-in-narrow-expected.html:26
&gt; +        This text should be autosized to 20px computed font-size (16 * 400 / 320), since it&apos;s not an autosizing cluster itself and its parent element is the enclosing autosizing cluster 400px wide.&lt;br&gt;

Nit: s/cluster 400px/cluster which is 400px/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792939</commentid>
    <comment_count>29</comment_count>
      <attachid>179785</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-17 12:51:59 -0800</bug_when>
    <thetext>Created attachment 179785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792941</commentid>
    <comment_count>30</comment_count>
      <attachid>179506</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-17 12:54:51 -0800</bug_when>
    <thetext>Comment on attachment 179506
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:6
&gt;&gt; +        Reviewed by Julien Chaffraix.
&gt; 
&gt; Mhhh, please be careful with that. It shouldn&apos;t be filled as the patch was never r+

Yes, sorry. It was supposed to go to another patch (submitted last Friday).

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:237
&gt;&gt; +bool TextAutosizer::isAutosizingCluster(const RenderObject* object, const RenderBlock* blockContainingAllText)
&gt; 
&gt; This should take a RenderBlock as you only ever call it on RenderBlock&apos;s.

It is called on RenderObject* in findFirstTextLeafNotInCluster().

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:70
&gt;&gt; +    // |parentBlockContainingAllText| if the pointer is not null.
&gt; 
&gt; Please remove these comments as they are not really helpful.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:73
&gt;&gt; +    // |parentBlockContainingAllText| if the pointer is not null.
&gt; 
&gt; Ditto.

Done.

&gt;&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:74
&gt;&gt;&gt; +    static bool isAutosizingCluster(const RenderObject*, const RenderBlock* parentBlockContainingAllText);
&gt;&gt; 
&gt;&gt; I would make the second argument optional to avoid confusing call sites: isAutosizingCluster(renderer, 0)
&gt; 
&gt; It&apos;s nice to emphasize that the result of this function depends on the blockContainingAllText you pass in (and that if you pass in 0, you&apos;ll get an incomplete answer). Though I notice that both of the callers of this function pass in 0. So perhaps we could remove the second argument completely (always pass in 0 to isContainerAutosizingCluster), and rename the function to, e.g. &quot;isAutosizingClusterIgnoringWidth&quot;?

Renamed to isAutosizingClusterIgnoringParentCluster (as width seems to be too specific).

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:84
&gt;&gt; +    // returns the lowest common ancestor of these text nodes. Otherwise, returns the cluster itself.
&gt; 
&gt; That&apos;s why we usually don&apos;t put comments next to functions as:
&gt; * they get stale super easily.
&gt; * different people have probably different level of verbosity or different ways of describing the same code.
&gt; * the naming should reflect that and now doesn&apos;t.
&gt; 
&gt; If you think this comment is unclear, remove it and update the function name to be clearer. As is, this change doesn&apos;t add much apart from confusing the blaming tool (there is no code change in this function).

Agree, removed the comment.

&gt;&gt; LayoutTests/fast/text-autosizing/cluster-wide-in-narrow-expected.html:26
&gt;&gt; +        This text should be autosized to 20px computed font-size (16 * 400 / 320), since it&apos;s not an autosizing cluster itself and its parent element is the enclosing autosizing cluster 400px wide.&lt;br&gt;
&gt; 
&gt; Nit: s/cluster 400px/cluster which is 400px/

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793009</commentid>
    <comment_count>31</comment_count>
      <attachid>179797</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-17 13:50:47 -0800</bug_when>
    <thetext>Created attachment 179797
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793970</commentid>
    <comment_count>32</comment_count>
      <attachid>179797</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-18 13:09:27 -0800</bug_when>
    <thetext>Comment on attachment 179797
Patch

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

r=me but I would like to see the updated patch before it lands.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:-97
&gt; -    ASSERT(isAutosizingCluster(cluster));

Please add a comment in the ChangeLog about *why* we are removing these ASSERTs.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:240
&gt; +bool TextAutosizer::isAutosizingClusterIgnoringParentCluster(const RenderObject* object)

This new naming is pretty confusing I have to say as you don&apos;t really check your parent anywhere (it&apos;s implied as you define any auto-sizing cluster as independent from its parent cluster). Here is some alternative names that convey the idea better:
* isIndependentAutosizingCluster
* rendererIsAutosizingCluster

&gt; Source/WebCore/rendering/TextAutosizer.cpp:265
&gt; +

Extra line.

&gt; Source/WebCore/rendering/TextAutosizer.h:81
&gt; -    // Depending on the traversal direction specified, finds the first or the last leaf text node child that doesn&apos;t
&gt; -    // belong to any cluster.
&gt; -    static const RenderObject* findFirstTextLeafNotInCluster(const RenderObject*, size_t&amp; depth, TraversalDirection);
&gt; +    // Returns the first text leaf in the given direction and its depth starting from the given parent.
&gt; +    static const RenderObject* findFirstTextLeafNotInCluster(const RenderObject* parent, size_t&amp; depth, TraversalDirection);

Same comment as previously, this change doesn&apos;t add much as you don&apos;t touch this function. The extra parameter name is not super helpful either so I would leave this code alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794021</commentid>
    <comment_count>33</comment_count>
      <attachid>180020</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-18 14:02:08 -0800</bug_when>
    <thetext>Created attachment 180020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794079</commentid>
    <comment_count>34</comment_count>
      <attachid>180020</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-18 14:48:59 -0800</bug_when>
    <thetext>Comment on attachment 180020
Patch

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

&gt; Source/WebCore/rendering/TextAutosizer.h:69
&gt; -    static bool isAutosizingCluster(const RenderBlock*);
&gt; +    static bool isContainerAutosizingCluster(const RenderBlock*, const RenderBlock* parentBlockContainingAllText);
&gt; +    static bool isIndependentAutosizingCluster(const RenderObject*);

Looking again at the change, it would be a lot more readable to just have 2 overloaded functions:

static bool isAutosizingCluster(const RenderBlock*, const RenderBlock* parentBlockContainingAllText);
static bool isAutosizingCluster(const RenderObject*);

Those 2 functions really returns the same information and having the same name will convey this information a lot better. The original renaming doesn&apos;t add much IMHO but I could be convinced otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794106</commentid>
    <comment_count>35</comment_count>
      <attachid>180042</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2012-12-18 15:13:47 -0800</bug_when>
    <thetext>Created attachment 180042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794218</commentid>
    <comment_count>36</comment_count>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-12-18 17:45:23 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Looking again at the change, it would be a lot more readable to just have 2 overloaded functions:
&gt; 
&gt; static bool isAutosizingCluster(const RenderBlock*, const RenderBlock* parentBlockContainingAllText);
&gt; static bool isAutosizingCluster(const RenderObject*);
&gt; 
&gt; Those 2 functions really returns the same information and having the same name will convey this information a lot better. The original renaming doesn&apos;t add much IMHO but I could be convinced otherwise.

I&apos;m not a great fan of giving them the same name. The 2nd function only covers part of the reasons that something can be a cluster, and will return false for things that are actually clusters. It seems misleading to give it the same name without some kind of disclaimer. For example it wasn&apos;t obvious that ASSERT(isAutosizingCluster(renderer)) at the start of processCluster could fail, whereas it would be clearer that a function named isAutosizingClusterIgnoringParentClusterTextWidth (or something like that) might fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794310</commentid>
    <comment_count>37</comment_count>
      <attachid>180042</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 20:34:20 -0800</bug_when>
    <thetext>Comment on attachment 180042
Patch

Clearing flags on attachment: 180042

Committed r138111: &lt;http://trac.webkit.org/changeset/138111&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794311</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 20:34:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794658</commentid>
    <comment_count>39</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-19 07:38:02 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #34)
&gt; &gt; Looking again at the change, it would be a lot more readable to just have 2 overloaded functions:
&gt; &gt; 
&gt; &gt; static bool isAutosizingCluster(const RenderBlock*, const RenderBlock* parentBlockContainingAllText);
&gt; &gt; static bool isAutosizingCluster(const RenderObject*);
&gt; &gt; 
&gt; &gt; Those 2 functions really returns the same information and having the same name will convey this information a lot better. The original renaming doesn&apos;t add much IMHO but I could be convinced otherwise.
&gt; 
&gt; I&apos;m not a great fan of giving them the same name. The 2nd function only covers part of the reasons that something can be a cluster, and will return false for things that are actually clusters. It seems misleading to give it the same name without some kind of disclaimer. For example it wasn&apos;t obvious that ASSERT(isAutosizingCluster(renderer)) at the start of processCluster could fail, whereas it would be clearer that a function named isAutosizingClusterIgnoringParentClusterTextWidth (or something like that) might fail.

If you passed in the text block container, they would be strictly equivalent but we don&apos;t. Feel free to post a patch about that, I don&apos;t feel strongly about either way (just that the direction we were heading to with a completely unrelated name was bad).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176705</attachid>
            <date>2012-11-29 04:46:04 -0800</date>
            <delta_ts>2012-12-03 09:34:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121129124337.patch</filename>
            <type>text/plain</type>
            <size>32991</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhiMWI2ODhiOGViYjcy
NDdlZjE4ZmVjZjA1MWUyYjVmNDVlYWNlYS4uZWQxMGJjNzdjOTkzZWRhNDZkMmFkZmIwNTA4ZWM5
MGI4YzhkMDRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IHRleHQgbm9kZXMgd2lkZXIgdGhhbiB0aGVpciBhbmNlc3RvciBjbHVzdGVycyBzaG91bGQg
YmUgYXV0b3NpemVkIGFzIHNlcGFyYXRlIGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBpc0F1dG9zaXppbmdDbHVzdGVyKCkgaXMgY2hlY2tp
bmcgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgaXRzCisgICAgICAgIGRlc2NlbmRhbnQgY2x1c3RlciAobW9yZSBwcmVjaXNlbHks
IGl0cyB0ZXh0IG5vZGVzIGxlYXN0IGNvbW1vbiBhbmNlc3RvcikuIFRoaXMgYW5jZXN0b3IgUmVu
ZGVyQmxvY2sgaXMKKyAgICAgICAgcGFzc2VkIHRocm91Z2hvdXQgdHJlZSB0cmF2ZXJzYWwgbWV0
aG9kcy4KKyAgICAgICAgQWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRleHQgbm9kZXMgbGVh
c3QgY29tbW9uIGFuY2VzdG9yIGhhZCB0byBiZSBtb2RpZmllZCB0byBhdm9pZCBjaXJjdWxhciBk
ZXBlbmRlbmN5CisgICAgICAgIGJldHdlZW4gZmluZGluZyBMQ0EgYW5kIGRldGVybWluaW5nIGlm
IGNvbnRhaW5lciBpcyBhIGNsdXN0ZXIuIEFmdGVyIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBj
aGVjayBpZiBhbnkgb2YKKyAgICAgICAgdGV4dCBsZWFmcycgcGFyZW50IG5vZGVzIGFyZSBjbHVz
dGVycyBkdWUgdG8gdGhlIG5ldyBkZWZpbml0aW9uIGFuZCBpZiBzbywgd2UgZmluZCBuZXcgdGV4
dCBsZWFmcyBhbmQgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVy
ZSBhcmUgbm8gY2x1c3RlcnMgaW4gcGF0aHMgZnJvbSBMQ0EgdG8gdGhlIGZpcnN0IGFuZCBsYXN0
IHRleHQgbGVhZnMuCisKKyAgICAgICAgVGhlIGNoYW5nZSBmaXhlcyBzZXZlcmFsIGNhc2VzIGNv
dmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJl
ZSk6IHBhc3NlcyBmb3VuZCByb290IGNsdXN0ZXIgdG8gcHJvY2Vzc0NsdXN0ZXIgYXMgaW5pdGlh
bCBzdGF5V2l0aGluIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJv
Y2Vzc0NsdXN0ZXIpOiBzdGF5V2l0aGluIHBhcmFtZXRlciAoZm9yIGFzc2VydGlvbiBvbmx5KSwg
cGFzc2VzIGZvdW5kIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRleHQgaW50byBwcm9jZXNzQ29udGFp
bmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcik6
IHN0YXlXaXRoaW4gcGFyYW1ldGVyIHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0F1
dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNBdXRv
c2l6aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIHRoYXQgaXMgd2lkZXIgdGhhbiBpdHMg
cGFyZW50LCBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIHdpdGhpbiB0aGUgcGFyZW50IGNsdXN0
ZXIsIHRvIGJlIGEgY2x1c3RlciBpdHNlbGYuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOiBwYXNzZXMgbmV3IHBhcmFtZXRlciB0byBt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6
ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKTogdXNlcyBzdGF5V2l0aGluIHBhcmFtZXRl
ciB0byBwYXNzIHRvIGlzQXV0b3NpemluZ0NsdXN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOiByZWltcGxlbWVu
dGVkIHRvIGluY3JlbWVudGFsbHkgZmlsdGVyIG91dCBjbHVzdGVycyB0aGF0IGFyZSB3aWRlciB0
aGFuIHRoZSBjdXJyZW50bHkgZm91bmQgYmxvY2suCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0
b3NpemVyOjpmaW5kQ2xvc2VzdENsdXN0ZXIpOiBmaW5kIHRoZSBmaXJzdCBjbHVzdGVyIGluIGEg
Y29sbGVjdGlvbiBvZiBSZW5kZXJPYmplY3RzIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZO
b3RJbkNsdXN0ZXIpOiBmaW5kcyB0ZXh0IGxlYWYgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byBhbnkg
Y2x1c3Rlciwgc3RhcnRzIHNlYXJjaGluZyBmcm9tIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgbGFz
dCBub2RlIGluIHRoZSBwYXRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Zmlu
ZE5leHRUZXh0TGVhZk5vdEluQ2x1c3Rlcik6IGZpbmRzIHRleHQgbGVhZiB0aGF0IGRvZXNuJ3Qg
YmVsb25nIHRvIGFueSBjbHVzdGVyLCBzdGFydHMgc2VhcmNoaW5nIGZyb20gdGhlIG5leHQgc2li
bGluZyBvZiB0aGUgbGFzdCBub2RlIGluIHRoZSBwYXRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9zaXplcjo6Zmlyc3RDaGlsZE5vdENsdXN0ZXIpOiBmaW5kcyB0aGUgZmlyc3QgY2hpbGQg
b2YgUmVuZGVyT2JqZWN0IHRoYXQgaXMgbm90IGEgY2x1c3Rlci4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6Om5leHRTaWJsaW5nTm90Q2x1c3Rlcik6IGZpbmRzIHRoZSBuZXh0IHNp
Ymxpbmcgb2YgUmVuZGVyT2JqZWN0IHRoYXQgaXMgbm90IGEgY2x1c3Rlci4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzT2JqZWN0QXV0b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5p
ZW5jZSBtZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6Om9iamVjdEZpcnN0Q2hpbGQpOiBjb252ZW5pZW5jZSBtZXRob2QgcmVk
dWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
Om9iamVjdE5leHRTaWJsaW5nKTogY29udmVuaWVuY2UgbWV0aG9kIHJlZHVjaW5nIGNvZGUgZHVw
bGljYXRpb24uCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAg
KFRleHRBdXRvc2l6ZXIpOiB0eXBlIGZvciBhIGNvbGxlY3Rpb24gb2YgY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgbmV3IG1ldGhvZCBkZWZpbml0aW9ucy4KKwogMjAxMi0xMS0yOSAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEzNjExMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcAppbmRleCAzNTg4NDBkYzQ5NDgxOTYwM2JmN2Y5ZDEzMjJjNjhiMWM5ZGYyNjEwLi5jMzI2
NDg2ODBiZDYxOTYxYTMyZmViMjMxOTAwMWU2ZWQzYzcwYjRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC04NSwzOCArODUsMzggQEAgYm9vbCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiAgICAg
ICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBSZW5k
ZXJCbG9jayogY2x1c3RlciA9IGNvbnRhaW5lcjsKLSAgICB3aGlsZSAoY2x1c3RlciAmJiAoIWlz
QXV0b3NpemluZ0NvbnRhaW5lcihjbHVzdGVyKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVz
dGVyKSkpCisgICAgd2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1dG9zaXppbmdDb250YWluZXIoY2x1
c3RlcikgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlciwgMCkpKQogICAgICAgICBjbHVz
dGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKLSAgICBwcm9jZXNzQ2x1c3Rlcihj
bHVzdGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3ND
bHVzdGVyKGNsdXN0ZXIsIGNvbnRhaW5lciwgY2x1c3RlciwgbGF5b3V0Um9vdCwgd2luZG93SW5m
byk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Ns
dXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRl
ck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2lu
ZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sq
IGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBzdGF5
V2l0aGluLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dp
bmRvd0luZm8mIHdpbmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIo
Y2x1c3RlcikpOworICAgIEFTU0VSVF9VTlVTRUQoc3RheVdpdGhpbiwgaXNBdXRvc2l6aW5nQ2x1
c3RlcihjbHVzdGVyLCBzdGF5V2l0aGluKSk7CiAKICAgICAvLyBNYW55IHBhZ2VzIHNldCBhIG1h
eC13aWR0aCBvbiB0aGVpciBjb250ZW50LiBTbyBlc3BlY2lhbGx5IGZvciB0aGUKICAgICAvLyBS
ZW5kZXJWaWV3LCBpbnN0ZWFkIG9mIGp1c3QgdGFraW5nIHRoZSB3aWR0aCBvZiB8Y2x1c3Rlcnwg
d2UgZmluZAogICAgIC8vIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBh
bmQgbGFzdCBkZXNjZW5kYW50IHRleHQgbm9kZSBvZgogICAgIC8vIHRoZSBjbHVzdGVyIChpLmUu
IHRoZSBkZWVwZXN0IHdyYXBwZXIgYmxvY2sgdGhhdCBjb250YWlucyBhbGwgdGhlIHRleHQpLAog
ICAgIC8vIGFuZCB1c2UgaXRzIHdpZHRoIGluc3RlYWQuCi0gICAgY29uc3QgUmVuZGVyQmxvY2sq
IGxvd2VzdENvbW1vbkFuY2VzdG9yID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
KGNsdXN0ZXIpOwotICAgIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGggPSBsb3dlc3RDb21tb25B
bmNlc3Rvci0+Y29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGNvbnN0IFJlbmRlckJsb2NrKiBk
ZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjbHVzdGVyKTsKKyAgICBmbG9hdCB0ZXh0V2lkdGggPSBkZWVwZXN0QmxvY2tDb250
YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgZmxvYXQgbXVsdGlw
bGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChsb3dlc3RDb21tb25B
bmNlc3RvciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1c3RlclNob3VsZEJl
QXV0b3NpemVkKGRlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCB0ZXh0V2lkdGgpKSB7CiAg
ICAgICAgIGludCBsb2dpY2FsV2luZG93V2lkdGggPSBjbHVzdGVyLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLndp
bmRvd1NpemUuaGVpZ2h0KCk7CiAgICAgICAgIGludCBsb2dpY2FsTGF5b3V0V2lkdGggPSBjbHVz
dGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2luZG93SW5mby5taW5MYXlvdXRTaXpl
LndpZHRoKCkgOiB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUuaGVpZ2h0KCk7CiAgICAgICAgIC8v
IElnbm9yZSBib3ggd2lkdGggaW4gZXhjZXNzIG9mIHRoZSBsYXlvdXQgd2lkdGgsIHRvIGF2b2lk
IGV4dHJlbWUgbXVsdGlwbGllcnMuCi0gICAgICAgIGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGgg
PSBzdGQ6Om1pbjxmbG9hdD4oY29tbW9uQW5jZXN0b3JXaWR0aCwgbG9naWNhbExheW91dFdpZHRo
KTsKKyAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWluPGZsb2F0Pih0
ZXh0V2lkdGgsIGxvZ2ljYWxMYXlvdXRXaWR0aCk7CiAKICAgICAgICAgbXVsdGlwbGllciA9IGxv
Z2ljYWxDbHVzdGVyV2lkdGggLyBsb2dpY2FsV2luZG93V2lkdGg7CiAgICAgICAgIG11bHRpcGxp
ZXIgKj0gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+dGV4dEF1dG9zaXppbmdGb250U2NhbGVGYWN0
b3IoKTsKICAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDEuMGYsIG11bHRpcGxpZXIpOwog
ICAgIH0KIAotICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVyLCBzdWJ0
cmVlUm9vdCwgd2luZG93SW5mbyk7CisgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBj
b250YWluZXIsIGRlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2lu
ZG93SW5mbyk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIGJv
b2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
cikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Nv
bnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRv
d0luZm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIHN0YXlXaXRo
aW4sIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnRhaW5lcikpOwogCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnBy
b2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UgogICAgICAgICAgICAgLy8gRklYTUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9y
dGlvbmF0ZWx5LgogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNj
ZW5kYW50KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRv
UmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1
c3RlcihkZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0lu
Zm8pOworICAgICAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2Nr
LCBzdGF5V2l0aGluKSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50
QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgc3RheVdpdGhpbiwgZGVzY2VuZGFudEJsb2NrLCB3aW5k
b3dJbmZvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFp
bmVyKG11bHRpcGxpZXIsIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJ
bmZvKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRlc2Nl
bmRhbnRCbG9jaywgc3RheVdpdGhpbiwgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAg
ICAgICAgfQogICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2Nl
bmRhbnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVSb290KTsKICAgICB9CkBAIC0y
MTEsNyArMjExLDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgJiYgKCFyZW5kZXJlci0+aXNM
aXN0SXRlbSgpIHx8IHJlbmRlcmVyLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CiB9CiAKLWJv
b2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayog
cmVuZGVyZXIpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3Qg
UmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogc3RheVdpdGhpbikKIHsK
ICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3NpemluZyBjb250
YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBhIHVuaWZvcm0g
dGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKQEAgLTIzMiw2ICsy
MzIsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyKQogICAgIC8vIGZyb20gdGhlIGJveCdzIHBhcmVudCAod2Ugd2Fu
dCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQKICAgICAvLyB3aWR0aCBi
bG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2UgdGhlIG5hcnJvd2VyIGJsb2NrcyB3b3VsZCBl
bmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgbmVjZXNzYXJ5KS4K
KyAgICAvLyBJZiBhIGNvbnRhaW5lciBpcyB3aWRlciB0aGFuIGl0cyB8c3RheVdpdGhpbnwgcGFy
ZW50LCBpdCBiZWNvbWVzIGEgY2x1c3Rlci4KICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFp
bmVyKHJlbmRlcmVyKSk7CiAKICAgICByZXR1cm4gcmVuZGVyZXItPmlzUmVuZGVyVmlldygpCkBA
IC0yNDEsNyArMjQyLDggQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFi
bGVDYXB0aW9uKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdE
ZXByZWNhdGVkKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQotICAgICAgICB8
fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
IT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgICAgIHx8IHJlbmRl
cmVyLT5jb250YWluaW5nQmxvY2soKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSByZW5k
ZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQorICAgICAgICB8fCAoc3RheVdpdGhpbiAm
JiByZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpID4gc3RheVdpdGhpbi0+Y29udGVudExv
Z2ljYWxXaWR0aCgpKTsgCiAgICAgLy8gRklYTUU6IFRhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxp
bmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNvbHVtbnMgYnkKICAgICAvLyB0aGUgc2FtZSBhbW91
bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQog
ICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgpAQCAtMjYyLDEzICsy
NjQsMTMgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29u
c3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2UKICAgICBjb25zdCBmbG9hdCBtaW5MaW5l
c09mVGV4dCA9IDQ7CiAgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gY29tbW9uQW5jZXN0b3JXaWR0
aCAqIG1pbkxpbmVzT2ZUZXh0OwogICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgbWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgobG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRXaWR0aCwg
dGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChsb3dlc3RDb21tb25B
bmNlc3RvciwgbG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsK
ICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNj
ZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRl
eHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCkKK3ZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURl
c2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIHN0YXlXaXRoaW4sIGNvbnN0IFJl
bmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0
aCkKIHsKICAgICBib29sIHNraXBMb2NhbFRleHQgPSBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5l
ZChjb250YWluZXIpOwogCkBAIC0yNzgsOCArMjgwLDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBm
bG8KICAgICAgICAgICAgIHRleHRXaWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJl
bmRlcmVkVGV4dExlbmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNp
emUoKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFu
dCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRl
ckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVy
KGRlc2NlbmRhbnRCbG9jaykpCi0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0
V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAg
ICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBzdGF5V2l0aGlu
KSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChzdGF5V2l0aGlu
LCBkZXNjZW5kYW50QmxvY2ssIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTMwMyw3MCArMzA1LDEyNSBAQCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om5l
eHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdAogICAgIHJl
dHVybiAwOwogfQogCi1jb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBl
c3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKQorY29u
c3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogc3VidHJlZVJvb3QpCiB7Ci0gICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwotCi0gICAgc2l6ZV90IGZpcnN0RGVwdGggPSAw
OwotICAgIGNvbnN0IFJlbmRlck9iamVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRM
ZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsKKyAgICBS
ZW5kZXJPYmplY3RzIGZpcnN0UGF0aCgxLCBzdWJ0cmVlUm9vdCk7CisgICAgY29uc3QgUmVuZGVy
T2JqZWN0KiBmaXJzdFRleHRMZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoRmly
c3RUb0xhc3QsIGZpcnN0UGF0aCk7CiAgICAgaWYgKCFmaXJzdFRleHRMZWFmKQotICAgICAgICBy
ZXR1cm4gY2x1c3RlcjsKKyAgICAgICAgcmV0dXJuIHN1YnRyZWVSb290OwogCi0gICAgc2l6ZV90
IGxhc3REZXB0aCA9IDA7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsYXN0VGV4dExlYWYgPSBm
aW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBsYXN0RGVwdGgsIExhc3RUb0Zp
cnN0KTsKKyAgICBSZW5kZXJPYmplY3RzIGxhc3RQYXRoKDEsIHN1YnRyZWVSb290KTsKKyAgICBj
b25zdCBSZW5kZXJPYmplY3QqIGxhc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5D
bHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCk7CiAgICAgQVNTRVJUKGxhc3RUZXh0TGVhZik7
CiAKLSAgICAvLyBFcXVhbGl6ZSB0aGUgZGVwdGhzIGlmIG5lY2Vzc2FyeS4gT25seSBvbmUgb2Yg
dGhlIHdoaWxlIGxvb3BzIGJlbG93IHdpbGwgZ2V0IGV4ZWN1dGVkLgotICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogZmlyc3ROb2RlID0gZmlyc3RUZXh0TGVhZjsKLSAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIGxhc3ROb2RlID0gbGFzdFRleHRMZWFmOwotICAgIHdoaWxlIChmaXJzdERlcHRoID4gbGFz
dERlcHRoKSB7Ci0gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0Tm9kZS0+cGFyZW50KCk7Ci0gICAg
ICAgIC0tZmlyc3REZXB0aDsKLSAgICB9Ci0gICAgd2hpbGUgKGxhc3REZXB0aCA+IGZpcnN0RGVw
dGgpIHsKLSAgICAgICAgbGFzdE5vZGUgPSBsYXN0Tm9kZS0+cGFyZW50KCk7Ci0gICAgICAgIC0t
bGFzdERlcHRoOwotICAgIH0KKyAgICBjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2Nr
ID0gMDsKKyAgICBkbyB7CisgICAgICAgIHNpemVfdCBtaW5TaXplID0gc3RkOjptaW4oZmlyc3RQ
YXRoLnNpemUoKSwgbGFzdFBhdGguc2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90IGZpcnN0Tm90RXF1
YWxJbmRleCA9IDE7CisgICAgICAgIHdoaWxlIChmaXJzdE5vdEVxdWFsSW5kZXggPCBtaW5TaXpl
ICYmIGZpcnN0UGF0aFtmaXJzdE5vdEVxdWFsSW5kZXhdID09IGxhc3RQYXRoW2ZpcnN0Tm90RXF1
YWxJbmRleF0pCisgICAgICAgICAgICBmaXJzdE5vdEVxdWFsSW5kZXgrKzsKKyAgICAgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpcnN0UGF0aFtmaXJzdE5v
dEVxdWFsSW5kZXggLSAxXTsKKyAgICAgICAgaWYgKGxvd2VzdENvbW1vbkFuY2VzdG9yLT5pc1Jl
bmRlckJsb2NrKCkpCisgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSB0b1JlbmRlckJsb2Nr
KGxvd2VzdENvbW1vbkFuY2VzdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29udGFp
bmluZ0Jsb2NrID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpOworICAg
ICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrLT5pc0Rlc2NlbmRhbnRPZihzdWJ0cmVlUm9vdCkp
OworCisgICAgICAgIC8vIENoZWNrIGlmIGFueSBvZiB0ZXh0IGxlYWZzIHBhcmVudHMgYXJlIGdv
aW5nIHRvIGJlIGNsdXN0ZXJzIGR1ZSB0byBiZWluZyB3aWRlciB0aGFuIHRoZSBibG9jayBqdXN0
IGZvdW5kLgorICAgICAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgbmVlZCB0byBzdGFydCBzZWFyY2hp
bmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGxlYWYgYWdhaW4gZnJvbSB0aGUgbmV4dCBub3QgY2x1
c3RlciBub2RlCisgICAgICAgIC8vIGFmdGVyIHRoZSBjbG9zZXN0IGNsdXN0ZXIgZGVzY2VuZGFu
dCBpbiB0aGUgY29ycmVzcG9uZGluZyBwYXRoLgorICAgICAgICBzaXplX3QgY2x1c3RlckluRmly
c3RQYXRoID0gZmluZENsb3Nlc3RDbHVzdGVyKGZpcnN0UGF0aCwgZmlyc3ROb3RFcXVhbEluZGV4
LCBjb250YWluaW5nQmxvY2spOworICAgICAgICBpZiAoY2x1c3RlckluRmlyc3RQYXRoIDwgZmly
c3RQYXRoLnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RQYXRoLnJlbW92ZShjbHVzdGVySW5G
aXJzdFBhdGggKyAxLCBmaXJzdFBhdGguc2l6ZSgpIC0gKGNsdXN0ZXJJbkZpcnN0UGF0aCArIDEp
KTsKKyAgICAgICAgICAgIGZpcnN0VGV4dExlYWYgPSBmaW5kTmV4dFRleHRMZWFmTm90SW5DbHVz
dGVyKEZpcnN0VG9MYXN0LCBmaXJzdFBhdGgpOworICAgICAgICAgICAgY29udGFpbmluZ0Jsb2Nr
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgY2x1c3RlckluTGFzdFBhdGggPSBmaW5k
Q2xvc2VzdENsdXN0ZXIobGFzdFBhdGgsIGZpcnN0Tm90RXF1YWxJbmRleCwgY29udGFpbmluZ0Js
b2NrKTsKKyAgICAgICAgaWYgKGNsdXN0ZXJJbkxhc3RQYXRoIDwgbGFzdFBhdGguc2l6ZSgpKSB7
CisgICAgICAgICAgICBsYXN0UGF0aC5yZW1vdmUoY2x1c3RlckluTGFzdFBhdGggKyAxLCBsYXN0
UGF0aC5zaXplKCkgLSAoY2x1c3RlckluTGFzdFBhdGggKyAxKSk7CisgICAgICAgICAgICBsYXN0
VGV4dExlYWYgPSBmaW5kTmV4dFRleHRMZWFmTm90SW5DbHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0
UGF0aCk7CisgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSAwOworICAgICAgICB9CisgICAg
ICAgIGlmICghY29udGFpbmluZ0Jsb2NrICYmICghZmlyc3RUZXh0TGVhZiB8fCAhbGFzdFRleHRM
ZWFmKSkKKyAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IHN1YnRyZWVSb290OworICAgIH0g
d2hpbGUgKCFjb250YWluaW5nQmxvY2spOwogCi0gICAgLy8gR28gdXAgZnJvbSBib3RoIG5vZGVz
IHVudGlsIHRoZSBwYXJlbnQgaXMgdGhlIHNhbWUuIEJvdGggcG9pbnRlcnMgd2lsbCBwb2ludCB0
byB0aGUgTENBIHRoZW4uCi0gICAgd2hpbGUgKGZpcnN0Tm9kZSAhPSBsYXN0Tm9kZSkgewotICAg
ICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICBsYXN0Tm9kZSA9
IGxhc3ROb2RlLT5wYXJlbnQoKTsKLSAgICB9CisgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jazsK
K30KIAotICAgIGlmIChmaXJzdE5vZGUtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJu
IHRvUmVuZGVyQmxvY2soZmlyc3ROb2RlKTsKK3NpemVfdCBUZXh0QXV0b3NpemVyOjpmaW5kQ2xv
c2VzdENsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0cyYgb2JqZWN0cywgc2l6ZV90IHN0YXJ0RnJv
bSwgY29uc3QgUmVuZGVyQmxvY2sqIHN0YXlXaXRoaW4pCit7CisgICAgZm9yIChzaXplX3QgaSA9
IHN0YXJ0RnJvbTsgaSA8IG9iamVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChpc09iamVj
dEF1dG9zaXppbmdDbHVzdGVyKG9iamVjdHNbaV0sIHN0YXlXaXRoaW4pKQorICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgcmV0dXJuIG9iamVjdHMuc2l6ZSgpOworfQogCi0gICAgLy8gY29udGFp
bmluZ0Jsb2NrKCkgc2hvdWxkIG5ldmVyIGxlYXZlIHRoZSBjbHVzdGVyLCBzaW5jZSBpdCBvbmx5
IHNraXBzIGFuY2VzdG9ycyB3aGVuIGZpbmRpbmcgdGhlCi0gICAgLy8gY29udGFpbmVyIG9mIHBv
c2l0aW9uOmFic29sdXRlL2ZpeGVkIGJsb2NrcywgYW5kIHRob3NlIGNhbm5vdCBleGlzdCBiZXR3
ZWVuIGEgY2x1c3RlciBhbmQgaXRzIHRleHQKLSAgICAvLyBub2RlcyBsb3dlc3QgY29tbW9uIGFu
Y2VzdG9yIGFzIGlzQXV0b3NpemluZ0NsdXN0ZXIgd291bGQgaGF2ZSBtYWRlIHRoZW0gaW50byB0
aGVpciBvd24gaW5kZXBlbmRlbnQKLSAgICAvLyBjbHVzdGVyLgotICAgIFJlbmRlckJsb2NrKiBj
b250YWluaW5nQmxvY2sgPSBmaXJzdE5vZGUtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIEFTU0VS
VChjb250YWluaW5nQmxvY2stPmlzRGVzY2VuZGFudE9mKGNsdXN0ZXIpKTsKK2NvbnN0IFJlbmRl
ck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoVHJh
dmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyT2JqZWN0cyYgcGF0aCkKK3sKKyAgICB3
aGlsZSAoIXBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IHBhdGgubGFzdCgpOworICAgICAgICBpZiAoY3VycmVudC0+aXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudC0+aXNUZXh0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7CisgICAgICAgICAgICByZXR1cm4gZmluZE5leHRUZXh0TGVhZk5vdEluQ2x1c3Rl
cihkaXJlY3Rpb24sIHBhdGgpOworICAgICAgICB9CiAKLSAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrOworICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIG5leHQgPSBmaXJzdENoaWxkTm90Q2x1
c3RlcihkaXJlY3Rpb24sIGN1cnJlbnQpOworICAgICAgICBpZiAobmV4dCkKKyAgICAgICAgICAg
IHBhdGguYXBwZW5kKG5leHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmlu
ZE5leHRUZXh0TGVhZk5vdEluQ2x1c3RlcihkaXJlY3Rpb24sIHBhdGgpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKIH0KIAotY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmly
c3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCwgc2l6ZV90
JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKK2NvbnN0IFJlbmRlck9iamVj
dCogVGV4dEF1dG9zaXplcjo6ZmluZE5leHRUZXh0TGVhZk5vdEluQ2x1c3RlcihUcmF2ZXJzYWxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBwYXRoKQogewotICAgIGlmIChwYXJl
bnQtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUZXh0KCkgPyBwYXJlbnQg
OiAwOwotCi0gICAgKytkZXB0aDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gKGRp
cmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBhcmVudC0+
bGFzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNBdXRvc2l6
aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2Nr
KGNoaWxkKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRG
aXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAg
ICAgICAgIGlmIChsZWFmKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOworICAgIC8vIERv
bid0IGV4YW1pbmUgc2libGluZ3Mgb2YgdGhlIHJvb3QgKGZpcnN0IGVsZW1lbnQgaW4gcGF0aCku
CisgICAgd2hpbGUgKHBhdGguc2l6ZSgpID4gMSkgeworICAgICAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQgPSBwYXRoLmxhc3QoKTsKKyAgICAgICAgcGF0aC5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ05vdENs
dXN0ZXIoZGlyZWN0aW9uLCBjdXJyZW50KTsKKyAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7Cisg
ICAgICAgICAgICBwYXRoLmFwcGVuZChuZXh0U2libGluZyk7CisgICAgICAgICAgICByZXR1cm4g
ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoZGlyZWN0aW9uLCBwYXRoKTsKICAgICAgICAg
fQotICAgICAgICBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gY2hpbGQtPm5l
eHRTaWJsaW5nKCkgOiBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIC0tZGVw
dGg7CisgICAgcmV0dXJuIDA7Cit9CiAKK2NvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXpl
cjo6Zmlyc3RDaGlsZE5vdENsdXN0ZXIoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3Qq
IGNoaWxkID0gb2JqZWN0Rmlyc3RDaGlsZChvYmplY3QsIGRpcmVjdGlvbik7IGNoaWxkOyBjaGls
ZCA9IG9iamVjdE5leHRTaWJsaW5nKGNoaWxkLCBkaXJlY3Rpb24pKQorICAgICAgICBpZiAoIWlz
T2JqZWN0QXV0b3NpemluZ0NsdXN0ZXIoY2hpbGQsIDApKQorICAgICAgICAgICAgcmV0dXJuIGNo
aWxkOworICAgIHJldHVybiAwOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6
ZXI6Om5leHRTaWJsaW5nTm90Q2x1c3RlcihUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVj
dCogc2libGluZyA9IG9iamVjdE5leHRTaWJsaW5nKG9iamVjdCwgZGlyZWN0aW9uKTsgc2libGlu
Zzsgc2libGluZyA9IG9iamVjdE5leHRTaWJsaW5nKHNpYmxpbmcsIGRpcmVjdGlvbikpCisgICAg
ICAgIGlmICghaXNPYmplY3RBdXRvc2l6aW5nQ2x1c3RlcihzaWJsaW5nLCAwKSkKKyAgICAgICAg
ICAgIHJldHVybiBzaWJsaW5nOwogICAgIHJldHVybiAwOwogfQogCitib29sIFRleHRBdXRvc2l6
ZXI6OmlzT2JqZWN0QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlckJsb2NrKiBzdGF5V2l0aGluKQoreworICAgIHJldHVybiBpc0F1dG9zaXpp
bmdDb250YWluZXIob2JqZWN0KSAmJiBpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2so
b2JqZWN0KSwgc3RheVdpdGhpbik7Cit9CisKK2NvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9z
aXplcjo6b2JqZWN0Rmlyc3RDaGlsZChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgVHJhdmVy
c2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBGaXJz
dFRvTGFzdCkgPyBvYmplY3QtPmZpcnN0Q2hpbGQoKSA6IG9iamVjdC0+bGFzdENoaWxkKCk7Cit9
CisKK2NvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6b2JqZWN0TmV4dFNpYmxpbmco
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24p
Cit7CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gb2JqZWN0LT5uZXh0
U2libGluZygpIDogb2JqZWN0LT5wcmV2aW91c1NpYmxpbmcoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGE3MDliMTE2OGU0NGRmMDBlYzFm
OWQ3M2JiZTVlNTE2ZmU5MjY3NzQuLjU2ZTY0YTM4MGZmYzc3NGMzMmU2YzQ4M2MyN2UxNTUyZjYx
Njk2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTUsNiArNTYsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGZsb2F0IGNvbXB1dGVBdXRvc2l6ZWRGb250U2l6ZShmbG9hdCBzcGVj
aWZpZWRTaXplLCBmbG9hdCBtdWx0aXBsaWVyKTsKIAogcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZl
Y3Rvcjxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmplY3RzOwogICAgIGVudW0gVHJhdmVy
c2FsRGlyZWN0aW9uIHsKICAgICAgICAgRmlyc3RUb0xhc3QsCiAgICAgICAgIExhc3RUb0ZpcnN0
CkBAIC02MiwxNiArNjQsMTkgQEAgcHJpdmF0ZToKIAogICAgIGV4cGxpY2l0IFRleHRBdXRvc2l6
ZXIoRG9jdW1lbnQqKTsKIAotICAgIHZvaWQgcHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNs
dXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3Qs
IGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwotICAgIHZvaWQgcHJvY2Vzc0NvbnRh
aW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2
b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogc3RheVdpdGhpbiwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9j
ZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNv
bnN0IFJlbmRlckJsb2NrKiBzdGF5V2l0aGluLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBj
b25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKIAogICAgIHZvaWQgc2V0TXVsdGlwbGll
cihSZW5kZXJPYmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdD
b250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6
aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOwogCi0gICAgc3RhdGljIGJvb2wgY2x1c3Rl
clNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3Rv
ciwgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCk7Ci0gICAgc3RhdGljIHZvaWQgbWVhc3VyZURl
c2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvYXQgbWlu
VGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHNwZWNpZmllZCBhdXRvc2l6aW5nIGNvbnRhaW5lciBpcyBhbHNvIGEgY2x1c3Rlci4gSWYgfHN0
YXlXaXRoaW58IGlzIHNwZWNpZmllZCBhbmQgfGNvbnRhaW5lcnwgaXMgd2lkZXIsCisgICAgLy8g
aXQncyBhbHNvIGNvbnNpZGVyZWQgdG8gYmUgYSBjbHVzdGVyLgorICAgIHN0YXRpYyBib29sIGlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVu
ZGVyQmxvY2sqIHN0YXlXaXRoaW4pOworCisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJl
QXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBmbG9hdCBjbHVzdGVyV2lkdGgp
OworICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBzdGF5V2l0aGluLCBmbG9hdCBt
aW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNl
IHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFp
bmVycyAoYnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KICAgICBzdGF0
aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRh
aW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50LCBjb25zdCBSZW5kZXJPYmplY3QqIHN0
YXlXaXRoaW4pOwpAQCAtODAsOSArODUsMzEgQEAgcHJpdmF0ZToKICAgICAvLyB0ZXh0IG5vZGUg
KGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3RoZXIgYXV0b3NpemluZyBjbHVzdGVycyku
CiAgICAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmlu
Z0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpOwogCi0gICAgLy8gRGVwZW5kaW5n
IG9uIHRoZSB0cmF2ZXJzYWwgZGlyZWN0aW9uIHNwZWNpZmllZCwgZmluZHMgdGhlIGZpcnN0IG9y
IHRoZSBsYXN0IGxlYWYgdGV4dCBub2RlIGNoaWxkIHRoYXQgZG9lc24ndAotICAgIC8vIGJlbG9u
ZyB0byBhbnkgY2x1c3Rlci4KLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kRmly
c3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBzaXplX3QmIGRlcHRo
LCBUcmF2ZXJzYWxEaXJlY3Rpb24pOworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBm
aXJzdCBhdXRvc2l6aW5nIGNsdXN0ZXIgaW4gZ2l2ZW4gb2JqZWN0cyB2ZWN0b3Igc3RhcnRpbmcg
ZnJvbSB8c3RhcnRGcm9tfC4KKyAgICAvLyBJZiBubyBjbHVzdGVyIGlzIGZvdW5kLCByZXR1cm5z
IHRoZSBzaXplIG9mIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMuCisgICAgc3RhdGljIHNpemVf
dCBmaW5kQ2xvc2VzdENsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0cyYsIHNpemVfdCBzdGFydEZy
b20sIGNvbnN0IFJlbmRlckJsb2NrKiBzdGF5V2l0aGluKTsKKworICAgIC8vIEZpbmQgdGhlIGZp
cnN0IGxlYWYgdGV4dCBub2RlIGluLW9yZGVyIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gYW55IGNs
dXN0ZXIgdW5kZXIgdGhlIGZpcnN0IGVsZW1lbnQgb2YgfHBhdGh8LgorICAgIC8vIFJldHVybnMg
dGhlIGZvdW5kIG5vZGUgYW5kIGl0cyBjb21wbGV0ZSBwYXRoLgorICAgIHN0YXRpYyBjb25zdCBS
ZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKFRyYXZlcnNhbERpcmVj
dGlvbiwgUmVuZGVyT2JqZWN0cyYgcGF0aCk7CisKKyAgICAvLyBGaW5kIHRoZSBuZXh0IGxlYWYg
dGV4dCBub2RlIGluLW9yZGVyIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gYW55IGNsdXN0ZXIgdW5k
ZXIgdGhlIGZpcnN0IGVsZW1lbnQgb2YgfHBhdGh8LgorICAgIC8vIFJldHVybnMgdGhlIGZvdW5k
IG5vZGUgYW5kIGl0cyBjb21wbGV0ZSBwYXRoLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmpl
Y3QqIGZpbmROZXh0VGV4dExlYWZOb3RJbkNsdXN0ZXIoVHJhdmVyc2FsRGlyZWN0aW9uLCBSZW5k
ZXJPYmplY3RzJiBwYXRoKTsKKworICAgIC8vIEZpbmRzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUg
b2JqZWN0IHRoYXQgaXMgbm90IGEgY2x1c3Rlci4KKyAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBmaXJzdENoaWxkTm90Q2x1c3RlcihUcmF2ZXJzYWxEaXJlY3Rpb24sIGNvbnN0IFJlbmRl
ck9iamVjdCopOworCisgICAgLy8gRmluZHMgdGhlIGZpcnN0IHNpYmxpbmcgb2YgdGhlIG9iamVj
dCB0aGF0IGlzIG5vdCBhIGNsdXN0ZXIuCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCog
bmV4dFNpYmxpbmdOb3RDbHVzdGVyKFRyYXZlcnNhbERpcmVjdGlvbiwgY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhdXRvc2l6
aW5nIGNvbnRhaW5lciBhbmQgYW4gYXV0b3NpemluZyBjbHVzdGVyLgorICAgIHN0YXRpYyBib29s
IGlzT2JqZWN0QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyQmxvY2sqIHN0YXlXaXRoaW4pOworCisgICAgLy8gV3JhcHBlciBhcm91bmQgZmlyc3RDaGls
ZCgpIGFuZCBsYXN0Q2hpbGQoKSBtZXRob2RzLCBjYWxsaW5nIG9uZSBvciBhbm90aGVyIGRlcGVu
ZGluZyBvbiB0aGUgZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdEZpcnN0Q2hpbGQoY29uc3QgUmVuZGVyT2JqZWN0KiwgVHJhdmVyc2FsRGlyZWN0aW9uKTsK
KyAgICAvLyBXcmFwcGVyIGFyb3VuZCBuZXh0U2libGluZygpIGFuZCBwcmV2aW91c1NpYmxpbmco
KSBtZXRob2RzLCBjYWxsaW5nIG9uZSBvciBhbm90aGVyIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0
aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdE5leHRTaWJsaW5nKGNv
bnN0IFJlbmRlck9iamVjdCosIFRyYXZlcnNhbERpcmVjdGlvbik7CiAKICAgICBEb2N1bWVudCog
bV9kb2N1bWVudDsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGRhYTJlYjA1N2JkNDgxOTA5MTEyMTJhMDVmN2M5NDU5
N2FkNGM5YS4uNGIyNDM5NzY2MDQ1ZWU3YzFjZTBjZTRkMWRkNzgxZDM2MDU5ODM4NyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2IEBACisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXppbmc6IHRleHQgbm9kZXMgd2lkZXIgdGhh
biB0aGVpciBhbmNlc3RvciBjbHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHNlcGFyYXRl
IGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBpc0F1dG9zaXppbmdDbHVzdGVyKCkgaXMgY2hlY2tpbmcgZm9yIHRoZSB3aWR0aCBvZiB0aGUg
Y29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lkdGggb2YgaXRzCisgICAgICAgIGRl
c2NlbmRhbnQgY2x1c3RlciAobW9yZSBwcmVjaXNlbHksIGl0cyB0ZXh0IG5vZGVzIGxlYXN0IGNv
bW1vbiBhbmNlc3RvcikuIFRoaXMgYW5jZXN0b3IgUmVuZGVyQmxvY2sgaXMKKyAgICAgICAgcGFz
c2VkIHRocm91Z2hvdXQgdHJlZSB0cmF2ZXJzYWwgbWV0aG9kcy4KKyAgICAgICAgQWxnb3JpdGht
IHRoYXQgc2VhcmNoZXMgZm9yIHRleHQgbm9kZXMgbGVhc3QgY29tbW9uIGFuY2VzdG9yIGhhZCB0
byBiZSBtb2RpZmllZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5CisgICAgICAgIGJldHdl
ZW4gZmluZGluZyBMQ0EgYW5kIGRldGVybWluaW5nIGlmIGNvbnRhaW5lciBpcyBhIGNsdXN0ZXIu
IEFmdGVyIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBhbnkgb2YKKyAgICAgICAg
dGV4dCBsZWFmcycgcGFyZW50IG5vZGVzIGFyZSBjbHVzdGVycyBkdWUgdG8gdGhlIG5ldyBkZWZp
bml0aW9uIGFuZCBpZiBzbywgd2UgZmluZCBuZXcgdGV4dCBsZWFmcyBhbmQgbmV3IExDQS4KKyAg
ICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBhcmUgbm8gY2x1c3RlcnMgaW4gcGF0
aHMgZnJvbSBMQ0EgdG8gdGhlIGZpcnN0IGFuZCBsYXN0IHRleHQgbGVhZnMuCisgICAgICAgIFRo
ZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1l
eHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lk
ZS1pbi1uYXJyb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNo
aWxkLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1j
aGlsZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93
LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sOgorCiAyMDEyLTExLTI5
ICBOYW5kb3IgSHVzemthICA8aG5hbmRvckBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0
XSBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0
ZWQuaHRtbAppbmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWViZGUyMjVjNjQ2NTcwLi43
YTdmOGNkY2Q0Y2QwZTMzODJhODU1ZTFkNWIyOTkzNjdiOTVjZDJhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVj
dGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13
aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNyw4ICsxNyw4IEBAIGJvZHkgeyB3aWR0
aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiAgICAgICAgIExvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQg
ZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFs
aXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1z
aXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8g
anVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0
ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0
ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweDsgZm9udC1zaXplOiAxLjg3NXJl
bSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHggY29tcHV0
ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBiZWNhdXNlIG9mIGl0cyB3aWR0aDo2
MDBweCBpdCBiZWNvbWVzIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9y
IHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0
ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8
L2Rpdj4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1
c3Rlci13aWRlLWluLW5hcnJvdy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCmluZGV4IGIyZWYwMTA3YzllYzY2YzcyM2Fl
OTZmYjQ0Njk2YmYzMTYxNDQ3Y2MuLjUwZjhlNmE2YjFlYmFiY2EyNDFmYWIzOWYzMWI0MDE5ZWQw
OGRlMmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0
ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKQEAgLTI2LDggKzI2LDggQEAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpIHsKICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNv
bnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAg
PGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwg
c2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lk
ZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweCI+CisgICAg
ICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1z
aXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBiZWNhdXNlIG9mIGl0cyB3aWR0aDo2MDBweCBpdCBi
ZWNvbWVzIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGls
ZC1leHBlY3RlZC5odG1sCmluZGV4IGE5MGEwMTNhZjNlZDRlZTA0ZTI2YWM2MDcyMDZmOTJkYWNi
YjVhODguLjljNDFkNWZlNDlhZmIwZTFkOGFiMTM3NWM2ZWMxNjJlY2ZlMDVjZGQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4
cGVjdGVkLmh0bWwKQEAgLTE0LDkgKzE0LDggQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2lu
OiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIDxkaXYgc3R5bGU9IndpZHRoOiAzMjBweDsgZm9u
dC1zaXplOiAxcmVtIj4KIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRo
aXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIs
IGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3Ig
aW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLQk8ZGl2IHN0eWxl
PSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQg
c2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hp
Y2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0g
ICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5l
ZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorCTxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9u
dC1zaXplOiAyLjVyZW0iPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0
MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRo
YW4gaXRzIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KICAgICAg
ICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVs
aXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUg
bWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKaW5kZXggNDU0ZWE2MWYzYWY3OWFmZjg3
YjdkMzMwYzU1Yjc5MTc2M2I1MjA3ZS4uNzk3NjdlZWVlZThmYjAyMTBkYzZjNDRhZGQzYmM1NmQy
MDE4MDM2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lk
ZS1jaGlsZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUt
Y2hpbGQuaHRtbApAQCAtMjQsOCArMjQsNyBAQCBpZiAod2luZG93LmludGVybmFscykgewogICAg
IFRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMgdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMgZGl2IGlz
IG5hcnJvdy48YnI+CiAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxh
Ym9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eCI+Ci0gICAgCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCBzaW5jZSBpdCBkb2Vz
bid0IGFmZmVjdCB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBibG9jayB3aGljaCBpcyB1c2VkIHRv
IGNhbGN1bGF0ZSB0aGUgYXV0b3NpemluZyBtdWx0aXBsaWVyLjxicj4KLSAgICAJRklYTUU6IElk
ZWFsbHkgdGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQuIFdpbGwgbmVlZCB0byBiZSBmaXhl
ZCBsYXRlci48YnI+CisgICAgCVRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQwcHgg
Y29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiBp
dHMgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3Rl
ZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ct
b3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKaW5kZXggNGI3YTc3N2RjMzkxNWY1Y2E2MjE3
OWU4ODVlMDUwMDcxOGJlNzJiYy4uY2Q2MGViZDU3NGYyMWQ1YWM5Njc4ZTA3NDdkZmVhMGZiMmQ1
YzUzNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVj
dGVkLmh0bWwKQEAgLTEzLDggKzEzLDggQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAw
OyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KICAg
PGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDog
ODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUg
YXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5j
ZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50
cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2Yg
dGhpcyBkaXYuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAy
LjVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNv
bXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSwgc2luY2UgaXQncyB3aWRlciB0aGFuIHRo
ZSBjb250YWluaW5nIGNsdXN0ZXIgYW5kIHRoZXJlZm9yZSBiZWNvbWVzIGEgY2x1c3RlciBpdHNl
bGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIg
YWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFi
b3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAgIDwvZGl2PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3Zl
cmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRl
LWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVm
YmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi4yZTAzODliYWIxMjE4ZDUyZGNiYTFlMzkzYjgwZmY4YTVi
M2IzOTZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRl
LWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjMs
NyArMjMsNyBAQCBpZiAod2luZG93LmludGVybmFscykgewogPGRpdiBzdHlsZT0id2lkdGg6IDQw
MHB4Ij4KICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KICAgICA8ZGl2IHN0eWxl
PSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0
byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBw
YXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBj
b250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxi
cj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRl
ZCBmb250IHNpemUgKDE2ICogODAwLzMyMCksIHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiB0aGUgY29u
dGFpbmluZyBjbHVzdGVyIGFuZCB0aGVyZWZvcmUgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxi
cj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogICA8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177270</attachid>
            <date>2012-12-03 09:24:37 -0800</date>
            <delta_ts>2012-12-06 02:59:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121203172203.patch</filename>
            <type>text/plain</type>
            <size>34640</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiYjk2YWQzYjBkYTNj
MWRlMzg0NWI1MzcwYzg1MTcwMDEyOGFhZC4uNDJiOGZlYzQ0Zjg2YjNlNGI0MjkwMGIxYWI3MDVm
MmY5MGZjYzZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyKS4gVGhlIGVuY2xvc2luZyBSZW5kZXJCbG9j
ayBpcyBwYXNzZWQgdGhyb3VnaG91dAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRleHQgbm9kZXMgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBoYWQgdG8gYmUgbW9kaWZpZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVw
ZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIGZpbmRpbmcgTENBIGFuZCBkZXRlcm1pbmluZyBpZiBj
b250YWluZXIgaXMgYSBjbHVzdGVyLiBBZnRlciBpbml0aWFsIExDQSBpcyBmb3VuZCwgd2UgY2hl
Y2sgaWYgYW55IG9mCisgICAgICAgIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3Rl
cnMgZHVlIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQg
bGVhZnMgYW5kIG5ldyBMQ0EuCisgICAgICAgIFRoaXMgaXMgcmVwZWF0ZWQgdW50aWwgdGhlcmUg
YXJlIG5vIGNsdXN0ZXJzIGluIHBhdGhzIGZyb20gTENBIHRvIHRoZSBmaXJzdCBhbmQgbGFzdCB0
ZXh0IGxlYWZzLgorCisgICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUp
OiBjYWxscyBwcm9jZXNzQ2x1c3RlciB3aXRoIG5ldyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOiBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0IHBhcmFtZXRlciAoZm9yIGFzc2VydGlvbiBvbmx5KSwgZmluZHMgbmV3IGJs
b2NrIGNvbnRhaW5pbmcgYWxsIHRleHQgbm9kZXMgYW5kIHBhc3NlcyBpdCBpbnRvIHByb2Nlc3ND
b250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFp
bmVyKTogYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgcGFzc2VkIGludG8gcHJvY2Vz
c0NsdXN0ZXIgYW5kIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0QXV0b3NpemVyOjppc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKTogY29uc2lk
ZXJzIGEgYmxvY2sgYSBjbHVzdGVyIGlmIGl0IGlzIHdpZGVyIHRoYW4gaXRzIHBhcmVudCBibG9j
ayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBlbmNsb3NpbmcgY2x1c3RlciAocmVuYW1lZCBm
cm9tIGlzQXV0b3NpemluZ0NsdXN0ZXIpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcik6IGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2Rl
IGR1cGxpY2F0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNo
b3VsZEJlQXV0b3NpemVkKTogcGFzc2VzIG5ldyBwYXJhbWV0ZXIgdG8gbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aCk6IHVzZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIg
dG8gcGFzcyB0byBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogcmVp
bXBsZW1lbnRlZCB0byBpbmNyZW1lbnRhbGx5IGZpbHRlciBvdXQgY2x1c3RlcnMgdGhhdCBhcmUg
d2lkZXIgdGhhbiB0aGUgY3VycmVudCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBl
bmNsb3NpbmcgY2x1c3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRD
bG9zZXN0Q2x1c3Rlcik6IGZpbmQgdGhlIGZpcnN0IGNsdXN0ZXIgaW4gYSBjb2xsZWN0aW9uIG9m
IFJlbmRlck9iamVjdHMgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcG9zaXRpb24uCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcik6
IGZpbmRzIHRleHQgbGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIGFueSBjbHVzdGVyLCBzdGFy
dHMgc2VhcmNoaW5nIGZyb20gdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBsYXN0IG5vZGUgaW4gdGhl
IHBhdGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpmaW5kTmV4dFRleHRMZWFm
Tm90SW5DbHVzdGVyKTogZmluZHMgdGV4dCBsZWFmIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gYW55
IGNsdXN0ZXIsIHN0YXJ0cyBzZWFyY2hpbmcgZnJvbSB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoZSBs
YXN0IG5vZGUgaW4gdGhlIHBhdGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpu
ZXh0U2libGluZ05vdENsdXN0ZXIpOiBmaW5kcyB0aGUgbmV4dCBzaWJsaW5nIG9mIFJlbmRlck9i
amVjdCB0aGF0IGlzIG5vdCBhIGNsdXN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3Np
emVyOjpvYmplY3RGaXJzdENoaWxkKTogY29udmVuaWVuY2UgbWV0aG9kIHJlZHVjaW5nIGNvZGUg
ZHVwbGljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpvYmplY3ROZXh0
U2libGluZyk6IGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2RlIGR1cGxpY2F0aW9uLgor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmg6CisgICAgICAgIChUZXh0QXV0b3Np
emVyKTogdHlwZSBmb3IgYSBjb2xsZWN0aW9uIG9mIGNvbnN0IFJlbmRlck9iamVjdCosIG5ldyBt
ZXRob2QgZGVmaW5pdGlvbnMuCisKIDIwMTItMTItMDIgIE90dG8gRGVyZWsgQ2hldW5nICA8b3Rj
aGV1bmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkaW5nIGNoZWNrcyBmb3Ig
bnVsbCB3aGVuIGNoZWNraW5nIGNvb2tpZSBzdGF0dXMgaW4gQ29va2llSmFyQmxhY2tCZXJyeQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDM1ODg0MGRj
NDk0ODE5NjAzYmY3ZjlkMTMyMmM2OGIxYzlkZjI2MTAuLmEyMGQ2ZTRjZTMzNTMyMGNiODgyMDA4
OGVlZGYzNzhmZWFhYzJlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5jcHAKQEAgLTg1LDM4ICs4NSwzOCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29u
dGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0g
Y29udGFpbmVyOwotICAgIHdoaWxlIChjbHVzdGVyICYmICghaXNBdXRvc2l6aW5nQ29udGFpbmVy
KGNsdXN0ZXIpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKSkKKyAgICB3aGlsZSAo
Y2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyLCAwKSkKICAgICAgICAgY2x1
c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCi0gICAgcHJvY2Vzc0NsdXN0ZXIo
Y2x1c3RlciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNz
Q2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIDAsIGxheW91dFJvb3QsIHdpbmRvd0luZm8pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVy
KFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0lu
Zm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVz
dGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250
YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9z
aXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewotICAgIEFTU0VSVChpc0F1dG9zaXppbmdD
bHVzdGVyKGNsdXN0ZXIpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlciwgYmxvY2tDb250YWluaW5n
QWxsVGV4dCkpOwogCiAgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIg
Y29udGVudC4gU28gZXNwZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVh
ZCBvZiBqdXN0IHRha2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0
aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFu
dCB0ZXh0IG5vZGUgb2YKICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFw
cGVyIGJsb2NrIHRoYXQgY29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0
cyB3aWR0aCBpbnN0ZWFkLgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNl
c3RvciA9IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBm
bG9hdCBjb21tb25BbmNlc3RvcldpZHRoID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRM
b2dpY2FsV2lkdGgoKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayogZGVlcGVzdEJsb2NrQ29udGFp
bmluZ0FsbFRleHQgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7
CisgICAgZmxvYXQgdGV4dFdpZHRoID0gZGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwotICAgIGlm
IChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQobG93ZXN0Q29tbW9uQW5jZXN0b3IsIGNvbW1vbkFu
Y2VzdG9yV2lkdGgpKSB7CisgICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChkZWVwZXN0
QmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgewogICAgICAgICBpbnQgbG9naWNh
bFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRv
d0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby53aW5kb3dTaXplLmhlaWdodCgp
OwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93
SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRo
IGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxp
ZXJzLgotICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+
KGNvbW1vbkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxMYXlvdXRXaWR0aCk7CisgICAgICAgIGZsb2F0
IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1pbjxmbG9hdD4odGV4dFdpZHRoLCBsb2dpY2Fs
TGF5b3V0V2lkdGgpOwogCiAgICAgICAgIG11bHRpcGxpZXIgPSBsb2dpY2FsQ2x1c3RlcldpZHRo
IC8gbG9naWNhbFdpbmRvd1dpZHRoOwogICAgICAgICBtdWx0aXBsaWVyICo9IG1fZG9jdW1lbnQt
PnNldHRpbmdzKCktPnRleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yKCk7CiAgICAgICAgIG11
bHRpcGxpZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0aXBsaWVyKTsKICAgICB9CiAKLSAgICBwcm9j
ZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgc3VidHJlZVJvb3QsIHdpbmRvd0lu
Zm8pOworICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVyLCBkZWVwZXN0
QmxvY2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwogfQogCiBz
dGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyKQpAQCAtMTM5LDcgKzEzOSw3IEBAIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJ
c0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVs
dGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9v
dCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWlu
ZXIpKTsKIApAQCAtMTU1LDEwICsxNTUsMTAgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNz
Q29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFIKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHByb3BvcnRpb25h
dGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFu
dCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRl
ckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0ZXIo
ZGVzY2VuZGFudEJsb2NrKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5k
YW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsK
KyAgICAgICAgICAgIGlmIChpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRC
bG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0Ns
dXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50Qmxv
Y2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICAgICAgcHJvY2Vz
c0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAg
ZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVy
cyhkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMjExLDcgKzIxMSw3IEBAIGJv
b2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgICAgICYmICghcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSB8fCByZW5k
ZXJlci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6
OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQorYm9vbCBU
ZXh0QXV0b3NpemVyOjppc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJs
b2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQp
CiB7CiAgICAgLy8gIkF1dG9zaXppbmcgY2x1c3RlcnMiIGFyZSBzcGVjaWFsIGF1dG9zaXppbmcg
Y29udGFpbmVycyB3aXRoaW4gd2hpY2ggd2UKICAgICAvLyB3YW50IHRvIGVuZm9yY2UgYSB1bmlm
b3JtIHRleHQgc2l6ZSBtdWx0aXBsaWVyLCBpbiB0aGUgaG9wZXMgb2YgbWFraW5nCkBAIC0yMzIs
NiArMjMyLDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0
IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAvLyBmcm9tIHRoZSBib3gncyBwYXJlbnQgKHdl
IHdhbnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50CiAgICAgLy8gd2lk
dGggYmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dlciBibG9ja3Mgd291
bGQgZW5kIHVwCiAgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIG5lY2Vzc2Fy
eSkuCisgICAgLy8gSWYgYSBjb250YWluZXIgaXMgd2lkZXIgdGhhbiBpdHMgfGJsb2NrQ29udGFp
bmluZ0FsbFRleHR8IHBhcmVudCwgaXQgYmVjb21lcyBhIGNsdXN0ZXIuCiAgICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKQpAQCAtMjQxLDEzICsyNDIsMTkgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxl
eGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmhhc0Nv
bHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisgICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQorICAgICAg
ICB8fCAoYmxvY2tDb250YWluaW5nQWxsVGV4dCAmJiByZW5kZXJlci0+Y29udGVudExvZ2ljYWxX
aWR0aCgpID4gYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpKTsg
CiAgICAgLy8gRklYTUU6IFRhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgdG8gbXVsdGlwbHkg
YWxsIHRoZWlyIGNvbHVtbnMgYnkKICAgICAvLyB0aGUgc2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5
J3JlIGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQogICAgIC8vIHJlbmRlcmVy
cywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmNs
dXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5j
ZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6Omlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KQoreworICAgIHJldHVybiBpc0F1dG9zaXpp
bmdDb250YWluZXIob2JqZWN0KSAmJiBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKHRvUmVu
ZGVyQmxvY2sob2JqZWN0KSwgYmxvY2tDb250YWluaW5nQWxsVGV4dCk7Cit9CisKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKQogewogICAgIC8vIERvbid0
IGF1dG9zaXplIGNsdXN0ZXJzIHRoYXQgY29udGFpbiBsZXNzIHRoYW4gNCBsaW5lcyBvZiB0ZXh0
IChpbgogICAgIC8vIHByYWN0aWNlIGxlc3MgbGluZXMgYXJlIHJlcXVpcmVkLCBzaW5jZSBtZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aApAQCAtMjYwLDE1ICsyNjcsMTUgQEAgYm9vbCBUZXh0QXV0
b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2Vz
dENvbW1vbkFuY2UKICAgICAvLyBpbiBhbmQgcGFuIGZyb20gc2lkZSB0byBzaWRlIHRvIHJlYWQg
ZWFjaCBsaW5lLCBzaW5jZSBpZiB0aGVyZSBhcmUgdmVyeQogICAgIC8vIGZldyBsaW5lcyBvZiB0
ZXh0IHlvdSdsbCBvbmx5IG5lZWQgdG8gcGFuIGFjcm9zcyBvbmNlIG9yIHR3aWNlLgogICAgIGNv
bnN0IGZsb2F0IG1pbkxpbmVzT2ZUZXh0ID0gNDsKLSAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBj
b21tb25BbmNlc3RvcldpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgZmxvYXQgbWluVGV4dFdp
ZHRoID0gYmxvY2tXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OwogICAgIGZsb2F0IHRleHRXaWR0aCA9
IDA7Ci0gICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgobG93ZXN0Q29tbW9uQW5jZXN0b3Is
IG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0
aChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0
V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0
b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRB
dXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9h
dCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCiB7CiAgICAgYm9vbCBza2lwTG9jYWxU
ZXh0ID0gY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29udGFpbmVyKTsKIApAQCAtMjc4LDgg
KzI4NSw4IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvCiAgICAgICAgICAgICB0ZXh0V2lkdGgg
Kz0gdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5yZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2Nl
bmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXplKCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJC
bG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAg
ICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKQotICAgICAg
ICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgbWlu
VGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAgICAgICAgaWYgKCFpc0NvbnRhaW5lckF1dG9z
aXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisg
ICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoYmxvY2tDb250YWluaW5n
QWxsVGV4dCwgZGVzY2VuZGFudEJsb2NrLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yODcsMTQgKzI5NCwxNCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1
cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsbwog
ICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5QcmVPcmRlclNr
aXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50
LCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pCitSZW5kZXJPYmplY3QqIFRleHRBdXRv
c2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25z
dCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0IFJlbmRlck9iamVjdCogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCkKIHsKLSAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluIHx8ICFpc0F1dG9z
aXppbmdDb250YWluZXIoY3VycmVudCkpCisgICAgaWYgKGN1cnJlbnQgPT0gYmxvY2tDb250YWlu
aW5nQWxsVGV4dCB8fCAhaXNBdXRvc2l6aW5nQ29udGFpbmVyKGN1cnJlbnQpKQogICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwog
CiAgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yID0gY3VycmVudDsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3Rv
ciA9PSBzdGF5V2l0aGluKQorICAgICAgICBpZiAoYW5jZXN0b3IgPT0gYmxvY2tDb250YWluaW5n
QWxsVGV4dCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBmb3IgKFJlbmRlck9iamVj
dCogc2libGluZyA9IGFuY2VzdG9yLT5uZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nOwpAQCAt
MzA1LDY4ICszMTIsMTExIEBAIFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6bmV4dEluUHJl
T3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0CiAKIGNvbnN0IFJlbmRl
ckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQo
Y29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0Ns
dXN0ZXIoY2x1c3RlcikpOwotCi0gICAgc2l6ZV90IGZpcnN0RGVwdGggPSAwOwotICAgIGNvbnN0
IFJlbmRlck9iamVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVz
dGVyKGNsdXN0ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsKLSAgICBpZiAoIWZpcnN0VGV4
dExlYWYpCisgICAgQVNTRVJUKGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
OworICAgIFJlbmRlck9iamVjdHMgZmlyc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKEZpcnN0VG9MYXN0LCBmaXJzdFBhdGgpOworICAgIGlmIChm
aXJzdFBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gY2x1c3RlcjsKIAotICAgIHNpemVf
dCBsYXN0RGVwdGggPSAwOwotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGFzdFRleHRMZWFmID0g
ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2x1c3RlciwgbGFzdERlcHRoLCBMYXN0VG9G
aXJzdCk7Ci0gICAgQVNTRVJUKGxhc3RUZXh0TGVhZik7Ci0KLSAgICAvLyBFcXVhbGl6ZSB0aGUg
ZGVwdGhzIGlmIG5lY2Vzc2FyeS4gT25seSBvbmUgb2YgdGhlIHdoaWxlIGxvb3BzIGJlbG93IHdp
bGwgZ2V0IGV4ZWN1dGVkLgotICAgIGNvbnN0IFJlbmRlck9iamVjdCogZmlyc3ROb2RlID0gZmly
c3RUZXh0TGVhZjsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxhc3ROb2RlID0gbGFzdFRleHRM
ZWFmOwotICAgIHdoaWxlIChmaXJzdERlcHRoID4gbGFzdERlcHRoKSB7Ci0gICAgICAgIGZpcnN0
Tm9kZSA9IGZpcnN0Tm9kZS0+cGFyZW50KCk7Ci0gICAgICAgIC0tZmlyc3REZXB0aDsKLSAgICB9
Ci0gICAgd2hpbGUgKGxhc3REZXB0aCA+IGZpcnN0RGVwdGgpIHsKLSAgICAgICAgbGFzdE5vZGUg
PSBsYXN0Tm9kZS0+cGFyZW50KCk7Ci0gICAgICAgIC0tbGFzdERlcHRoOwotICAgIH0KKyAgICBS
ZW5kZXJPYmplY3RzIGxhc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGZpbmRGaXJzdFRleHRMZWFm
Tm90SW5DbHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCk7CisgICAgQVNTRVJUKCFsYXN0UGF0
aC5pc0VtcHR5KCkpOworCisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9
IDA7CisgICAgZG8geworICAgICAgICBzaXplX3QgbWluU2l6ZSA9IHN0ZDo6bWluKGZpcnN0UGF0
aC5zaXplKCksIGxhc3RQYXRoLnNpemUoKSk7CisgICAgICAgIHNpemVfdCBmaXJzdE5vdEVxdWFs
SW5kZXggPSAxOworICAgICAgICB3aGlsZSAoZmlyc3ROb3RFcXVhbEluZGV4IDwgbWluU2l6ZSAm
JiBmaXJzdFBhdGhbZmlyc3ROb3RFcXVhbEluZGV4XSA9PSBsYXN0UGF0aFtmaXJzdE5vdEVxdWFs
SW5kZXhdKQorICAgICAgICAgICAgZmlyc3ROb3RFcXVhbEluZGV4Kys7CisgICAgICAgIGNvbnN0
IFJlbmRlck9iamVjdCogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaXJzdFBhdGhbZmlyc3ROb3RF
cXVhbEluZGV4IC0gMV07CisgICAgICAgIGlmIChsb3dlc3RDb21tb25BbmNlc3Rvci0+aXNSZW5k
ZXJCbG9jaygpKQorICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gdG9SZW5kZXJCbG9jayhs
b3dlc3RDb21tb25BbmNlc3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnRhaW5p
bmdCbG9jayA9IGxvd2VzdENvbW1vbkFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAg
ICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOworCisg
ICAgICAgIC8vIENoZWNrIGlmIGFueSBvZiB0ZXh0IGxlYWZzIHBhcmVudHMgYXJlIGdvaW5nIHRv
IGJlIGNsdXN0ZXJzIGR1ZSB0byBiZWluZyB3aWRlciB0aGFuIHRoZSBibG9jayBqdXN0IGZvdW5k
LgorICAgICAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgbmVlZCB0byBzdGFydCBzZWFyY2hpbmcgZm9y
IHRoZSBjb3JyZXNwb25kaW5nIGxlYWYgYWdhaW4gZnJvbSB0aGUgbmV4dCBub3QgY2x1c3RlciBu
b2RlCisgICAgICAgIC8vIGFmdGVyIHRoZSBjbG9zZXN0IGNsdXN0ZXIgZGVzY2VuZGFudCBpbiB0
aGUgY29ycmVzcG9uZGluZyBwYXRoLgorICAgICAgICBzaXplX3QgY2x1c3RlckluRmlyc3RQYXRo
ID0gZmluZENsb3Nlc3RDbHVzdGVyKGZpcnN0UGF0aCwgZmlyc3ROb3RFcXVhbEluZGV4LCBjb250
YWluaW5nQmxvY2spOworICAgICAgICBpZiAoY2x1c3RlckluRmlyc3RQYXRoIDwgZmlyc3RQYXRo
LnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RQYXRoLnJlbW92ZShjbHVzdGVySW5GaXJzdFBh
dGggKyAxLCBmaXJzdFBhdGguc2l6ZSgpIC0gKGNsdXN0ZXJJbkZpcnN0UGF0aCArIDEpKTsKKyAg
ICAgICAgICAgIGZpbmROZXh0VGV4dExlYWZOb3RJbkNsdXN0ZXIoRmlyc3RUb0xhc3QsIGZpcnN0
UGF0aCk7CisgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSAwOworICAgICAgICB9CisgICAg
ICAgIHNpemVfdCBjbHVzdGVySW5MYXN0UGF0aCA9IGZpbmRDbG9zZXN0Q2x1c3RlcihsYXN0UGF0
aCwgZmlyc3ROb3RFcXVhbEluZGV4LCBjb250YWluaW5nQmxvY2spOworICAgICAgICBpZiAoY2x1
c3RlckluTGFzdFBhdGggPCBsYXN0UGF0aC5zaXplKCkpIHsKKyAgICAgICAgICAgIGxhc3RQYXRo
LnJlbW92ZShjbHVzdGVySW5MYXN0UGF0aCArIDEsIGxhc3RQYXRoLnNpemUoKSAtIChjbHVzdGVy
SW5MYXN0UGF0aCArIDEpKTsKKyAgICAgICAgICAgIGZpbmROZXh0VGV4dExlYWZOb3RJbkNsdXN0
ZXIoTGFzdFRvRmlyc3QsIGxhc3RQYXRoKTsKKyAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb250YWluaW5nQmxvY2sgJiYgKGZpcnN0UGF0
aC5pc0VtcHR5KCkgfHwgbGFzdFBhdGguaXNFbXB0eSgpKSkKKyAgICAgICAgICAgIGNvbnRhaW5p
bmdCbG9jayA9IGNsdXN0ZXI7CisgICAgfSB3aGlsZSAoIWNvbnRhaW5pbmdCbG9jayk7CiAKLSAg
ICAvLyBHbyB1cCBmcm9tIGJvdGggbm9kZXMgdW50aWwgdGhlIHBhcmVudCBpcyB0aGUgc2FtZS4g
Qm90aCBwb2ludGVycyB3aWxsIHBvaW50IHRvIHRoZSBMQ0EgdGhlbi4KLSAgICB3aGlsZSAoZmly
c3ROb2RlICE9IGxhc3ROb2RlKSB7Ci0gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0Tm9kZS0+cGFy
ZW50KCk7Ci0gICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwotICAgIH0KKyAg
ICByZXR1cm4gY29udGFpbmluZ0Jsb2NrOworfQogCi0gICAgaWYgKGZpcnN0Tm9kZS0+aXNSZW5k
ZXJCbG9jaygpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhmaXJzdE5vZGUpOworc2l6
ZV90IFRleHRBdXRvc2l6ZXI6OmZpbmRDbG9zZXN0Q2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3Rz
JiBvYmplY3RzLCBzaXplX3Qgc3RhcnRGcm9tLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250
YWluaW5nQWxsVGV4dCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRGcm9tOyBpIDwgb2Jq
ZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0ZXIob2JqZWN0
c1tpXSwgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICByZXR1cm4gb2JqZWN0cy5zaXplKCk7Cit9CiAKLSAgICAvLyBjb250YWluaW5nQmxvY2soKSBz
aG91bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0
b3JzIHdoZW4gZmluZGluZyB0aGUKLSAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1
dGUvZml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVy
IGFuZCBpdHMgdGV4dAotICAgIC8vIG5vZGVzIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYXMgaXNB
dXRvc2l6aW5nQ2x1c3RlciB3b3VsZCBoYXZlIG1hZGUgdGhlbSBpbnRvIHRoZWlyIG93biBpbmRl
cGVuZGVudAotICAgIC8vIGNsdXN0ZXIuCi0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9j
ayA9IGZpcnN0Tm9kZS0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgQVNTRVJUKGNvbnRhaW5pbmdC
bG9jay0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOwordm9pZCBUZXh0QXV0b3NpemVyOjpmaW5k
Rmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBS
ZW5kZXJPYmplY3RzJiBwYXRoKQoreworICAgIHdoaWxlICghcGF0aC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gcGF0aC5sYXN0KCk7CisgICAgICAg
IGlmIChjdXJyZW50LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc1Rl
eHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmluZE5l
eHRUZXh0TGVhZk5vdEluQ2x1c3RlcihkaXJlY3Rpb24sIHBhdGgpOworICAgICAgICB9CiAKLSAg
ICByZXR1cm4gY29udGFpbmluZ0Jsb2NrOworICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIG5l
eHQgPSBuZXh0U2libGluZ05vdENsdXN0ZXIoZGlyZWN0aW9uLCBvYmplY3RGaXJzdENoaWxkKGRp
cmVjdGlvbiwgY3VycmVudCkpOworICAgICAgICBpZiAobmV4dCkKKyAgICAgICAgICAgIHBhdGgu
YXBwZW5kKG5leHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmluZE5leHRU
ZXh0TGVhZk5vdEluQ2x1c3RlcihkaXJlY3Rpb24sIHBhdGgpOworICAgIH0KIH0KIAotY29uc3Qg
UmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rl
cihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGly
ZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgVGV4dEF1dG9zaXplcjo6ZmluZE5leHRUZXh0TGVhZk5v
dEluQ2x1c3RlcihUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBw
YXRoKQogewotICAgIGlmIChwYXJlbnQtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVu
dC0+aXNUZXh0KCkgPyBwYXJlbnQgOiAwOwotCi0gICAgKytkZXB0aDsKLSAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZp
cnN0Q2hpbGQoKSA6IHBhcmVudC0+bGFzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0g
ICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5n
Q2x1c3Rlcih0b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0
aCwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGlmIChsZWFmKQotICAgICAgICAgICAgICAgIHJl
dHVybiBsZWFmOworICAgIC8vIERvbid0IGV4YW1pbmUgc2libGluZ3Mgb2YgdGhlIHJvb3QgKGZp
cnN0IGVsZW1lbnQgaW4gcGF0aCkuCisgICAgd2hpbGUgKHBhdGguc2l6ZSgpID4gMSkgeworICAg
ICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBwYXRoLmxhc3QoKTsKKyAgICAgICAg
cGF0aC5yZW1vdmVMYXN0KCk7CisgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbmV4dFNpYmxp
bmcgPSBuZXh0U2libGluZ05vdENsdXN0ZXIoZGlyZWN0aW9uLCBvYmplY3ROZXh0U2libGluZyhk
aXJlY3Rpb24sIGN1cnJlbnQpKTsKKyAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7CisgICAgICAg
ICAgICBwYXRoLmFwcGVuZChuZXh0U2libGluZyk7CisgICAgICAgICAgICByZXR1cm4gZmluZEZp
cnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoZGlyZWN0aW9uLCBwYXRoKTsKICAgICAgICAgfQotICAg
ICAgICBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gY2hpbGQtPm5leHRTaWJs
aW5nKCkgOiBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIC0tZGVwdGg7Cisg
ICAgLy8gUmVtb3ZlIHRoZSByb290IGVsZW1lbnQgdG8gaW5kaWNhdGUgd2UgZGlkbid0IGZpbmQg
YW55dGhpbmcgd2l0aCBhbiBlbXB0eSBwYXRoLgorICAgIHBhdGgucmVtb3ZlTGFzdCgpOworfQog
Citjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om5leHRTaWJsaW5nTm90Q2x1c3Rl
cihUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogc2libGluZyA9IG9iamVjdDsgc2li
bGluZzsgc2libGluZyA9IG9iamVjdE5leHRTaWJsaW5nKGRpcmVjdGlvbiwgc2libGluZykpCisg
ICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihzaWJsaW5nLCAwKSkKKyAgICAgICAgICAg
IHJldHVybiBzaWJsaW5nOwogICAgIHJldHVybiAwOwogfQogCitjb25zdCBSZW5kZXJPYmplY3Qq
IFRleHRBdXRvc2l6ZXI6Om9iamVjdEZpcnN0Q2hpbGQoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgcmV0dXJuIChkaXJlY3Rp
b24gPT0gRmlyc3RUb0xhc3QpID8gb2JqZWN0LT5maXJzdENoaWxkKCkgOiBvYmplY3QtPmxhc3RD
aGlsZCgpOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om9iamVjdE5l
eHRTaWJsaW5nKFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIHJldHVybiAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IG9i
amVjdC0+bmV4dFNpYmxpbmcoKSA6IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShURVhUX0FVVE9TSVpJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAppbmRleCBhNzA5YjExNjhl
NDRkZjAwZWMxZjlkNzNiYmU1ZTUxNmZlOTI2Nzc0Li45ZWI4ZThiZDU5YTZiYWM5M2FlYzhhMzdh
MDRmYTAxZTZiMzk4MjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEF1dG9zaXplci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDYgKzU2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCBjb21wdXRlQXV0b3NpemVkRm9udFNpemUo
ZmxvYXQgc3BlY2lmaWVkU2l6ZSwgZmxvYXQgbXVsdGlwbGllcik7CiAKIHByaXZhdGU6CisgICAg
dHlwZWRlZiBWZWN0b3I8Y29uc3QgUmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0czsKICAgICBl
bnVtIFRyYXZlcnNhbERpcmVjdGlvbiB7CiAgICAgICAgIEZpcnN0VG9MYXN0LAogICAgICAgICBM
YXN0VG9GaXJzdApAQCAtNjIsMjcgKzY0LDQ3IEBAIHByaXZhdGU6CiAKICAgICBleHBsaWNpdCBU
ZXh0QXV0b3NpemVyKERvY3VtZW50Kik7CiAKLSAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRl
ckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1
YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHBy
b2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZv
Jik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5k
ZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxs
VGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5k
b3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQp
OwogCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9i
amVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVy
QmxvY2sqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBhdXRvc2l6aW5n
IGNvbnRhaW5lciBpcyBhbHNvIGEgY2x1c3Rlci4gSWYgfGJsb2NrQ29udGFpbmluZ0FsbFRleHR8
IGlzIHNwZWNpZmllZCBhbmQgfGNvbnRhaW5lcnwgaXMgCisgICAgLy8gd2lkZXIgdGhhbiB8Ymxv
Y2tDb250YWluaW5nQWxsVGV4dHwsIGl0J3MgYWxzbyBjb25zaWRlcmVkIHRvIGJlIGEgY2x1c3Rl
ci4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJl
bmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0KTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhdXRvc2l6
aW5nIGNvbnRhaW5lciBhbmQgYW4gYXV0b3NpemluZyBjbHVzdGVyLgorICAgIHN0YXRpYyBib29s
IGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOwogCi0gICAgc3RhdGljIGJvb2wgY2x1c3RlclNo
b3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3Rvciwg
ZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCk7Ci0gICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2Nl
bmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvYXQgbWluVGV4
dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKKyAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxk
QmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZs
b2F0IGJsb2NrV2lkdGgpOworICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdp
ZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgp
OwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNs
dWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFpbmVycyAoYnV0IHJldHVybmluZyB0aGUgY29udGFp
bmVycyB0aGVtc2VsdmVzKS4KLSAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50LCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pOworICAgIHN0YXRpYyBSZW5kZXJP
YmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25z
dCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0IFJlbmRlck9iamVjdCogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCk7CiAKICAgICAvLyBGaW5kcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBv
ZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQKICAgICAvLyB0ZXh0IG5vZGUgKGV4
Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3RoZXIgYXV0b3NpemluZyBjbHVzdGVycykuCiAg
ICAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0Fs
bFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpOwogCi0gICAgLy8gRGVwZW5kaW5nIG9u
IHRoZSB0cmF2ZXJzYWwgZGlyZWN0aW9uIHNwZWNpZmllZCwgZmluZHMgdGhlIGZpcnN0IG9yIHRo
ZSBsYXN0IGxlYWYgdGV4dCBub2RlIGNoaWxkIHRoYXQgZG9lc24ndAotICAgIC8vIGJlbG9uZyB0
byBhbnkgY2x1c3Rlci4KLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBzaXplX3QmIGRlcHRoLCBU
cmF2ZXJzYWxEaXJlY3Rpb24pOworICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJz
dCBhdXRvc2l6aW5nIGNsdXN0ZXIgaW4gZ2l2ZW4gb2JqZWN0cyB2ZWN0b3Igc3RhcnRpbmcgZnJv
bSB8c3RhcnRGcm9tfC4KKyAgICAvLyBJZiBubyBjbHVzdGVyIGlzIGZvdW5kLCByZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMuCisgICAgc3RhdGljIHNpemVfdCBm
aW5kQ2xvc2VzdENsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0cyYsIHNpemVfdCBzdGFydEZyb20s
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8vIEZp
bmQgdGhlIGZpcnN0IGxlYWYgdGV4dCBub2RlIGluLW9yZGVyIHRoYXQgZG9lc24ndCBiZWxvbmcg
dG8gYW55IGNsdXN0ZXIgdW5kZXIgdGhlIGZpcnN0IGVsZW1lbnQgb2YgfHBhdGh8LgorICAgIC8v
IFJldHVybnMgdGhlIGNvbXBsZXRlIHBhdGggdG8gdGhlIG5vZGUgZm91bmQgb3IgYW4gZW1wdHkg
cGF0aCBpZiBzZWFyY2ggZmFpbGVkLgorICAgIHN0YXRpYyB2b2lkIGZpbmRGaXJzdFRleHRMZWFm
Tm90SW5DbHVzdGVyKFRyYXZlcnNhbERpcmVjdGlvbiwgUmVuZGVyT2JqZWN0cyYgcGF0aCk7CisK
KyAgICAvLyBGaW5kIHRoZSBuZXh0IGxlYWYgdGV4dCBub2RlIGluLW9yZGVyIHRoYXQgZG9lc24n
dCBiZWxvbmcgdG8gYW55IGNsdXN0ZXIgdW5kZXIgdGhlIGZpcnN0IGVsZW1lbnQgb2YgfHBhdGh8
LgorICAgIC8vIFJldHVybnMgdGhlIGNvbXBsZXRlIHBhdGggdG8gdGhlIG5vZGUgZm91bmQgb3Ig
YW4gZW1wdHkgcGF0aCBpZiBzZWFyY2ggZmFpbGVkLgorICAgIHN0YXRpYyB2b2lkIGZpbmROZXh0
VGV4dExlYWZOb3RJbkNsdXN0ZXIoVHJhdmVyc2FsRGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBw
YXRoKTsKKworICAgIC8vIEZpbmRzIHRoZSBmaXJzdCBzaWJsaW5nIG9mIHRoZSBvYmplY3QgdGhh
dCBpcyBub3QgYSBjbHVzdGVyIChpbmNsdWRpbmcgdGhlIG9iamVjdCBpdHNlbGYpLgorICAgIHN0
YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nTm90Q2x1c3RlcihUcmF2ZXJzYWxE
aXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCopOworCisgICAgLy8gV3JhcHBlciBhcm91bmQg
Zmlyc3RDaGlsZCgpIGFuZCBsYXN0Q2hpbGQoKSBtZXRob2RzLCBjYWxsaW5nIG9uZSBvciBhbm90
aGVyIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdEZpcnN0Q2hpbGQoVHJhdmVyc2FsRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKKyAgICAvLyBXcmFwcGVyIGFyb3VuZCBuZXh0U2libGluZygpIGFuZCBwcmV2aW91
c1NpYmxpbmcoKSBtZXRob2RzLCBjYWxsaW5nIG9uZSBvciBhbm90aGVyIGRlcGVuZGluZyBvbiB0
aGUgZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdE5leHRT
aWJsaW5nKFRyYXZlcnNhbERpcmVjdGlvbiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKICAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjgyMTliNTlhYWE4Y2IyZmU5NDczN2Ux
NzI3NDExZDZmMDViODEzYS4uZGIyOWY0MzQwNTg5OGFhZjgxZDFiYmNiMWI2YmY2MmJlY2Y4NGE5
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5
dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMg
d2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBh
cyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3MgZm9yIHRoZSB3aWR0
aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIGxv
d2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9kZXMgb2YgdGhlIGVu
Y2xvc2luZyBjbHVzdGVyKS4gVGhlIGVuY2xvc2luZyBSZW5kZXJCbG9jayBpcyBwYXNzZWQgdGhy
b3VnaG91dAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorICAgICAgICBUaGUgYWxn
b3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRleHQgbm9kZXMgbG93ZXN0IGNvbW1vbiBhbmNlc3Rv
ciBoYWQgdG8gYmUgbW9kaWZpZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeQorICAgICAg
ICBiZXR3ZWVuIGZpbmRpbmcgTENBIGFuZCBkZXRlcm1pbmluZyBpZiBjb250YWluZXIgaXMgYSBj
bHVzdGVyLiBBZnRlciBpbml0aWFsIExDQSBpcyBmb3VuZCwgd2UgY2hlY2sgaWYgYW55IG9mCisg
ICAgICAgIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRoZSBu
ZXcgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVhZnMgYW5kIG5ldyBM
Q0EuCisgICAgICAgIFRoaXMgaXMgcmVwZWF0ZWQgdW50aWwgdGhlcmUgYXJlIG5vIGNsdXN0ZXJz
IGluIHBhdGhzIGZyb20gTENBIHRvIHRoZSBmaXJzdCBhbmQgbGFzdCB0ZXh0IGxlYWZzLgorCisg
ICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBl
Y3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1p
bi1uYXJyb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxk
LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGls
ZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92
ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6
aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sOgorCiAyMDEyLTEyLTAyICBT
YWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIENvcnJlY3QgdGhlIGxvY2F0aW9uIG9mIHN5bnRoZXRpYyBtb3VzZSBldmVudHMg
d2hlbiBwYWdlIGlzIHpvb21lZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5o
dG1sCmluZGV4IDZjZmYwNmU0NDhiMmY3NTgzYmRhMjAzNDNlZWJkZTIyNWM2NDY1NzAuLjdhN2Y4
Y2RjZDRjZDBlMzM4MmE4NTVlMWQ1YjI5OTM2N2I5NWNkMmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUt
aW4tbmFycm93LWV4cGVjdGVkLmh0bWwKQEAgLTE3LDggKzE3LDggQEAgYm9keSB7IHdpZHRoOiA4
MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KICAgICAgICAgTG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBl
aXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVh
LgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6
IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0
IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0
cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48
YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4OyBmb250LXNpemU6IDEuODc1cmVtIj4K
KyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBm
b250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGJlY2F1c2Ugb2YgaXRzIHdpZHRoOjYwMHB4
IGl0IGJlY29tZXMgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0
IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBv
ciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2
PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVy
LXdpZGUtaW4tbmFycm93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9j
bHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKaW5kZXggYjJlZjAxMDdjOWVjNjZjNzIzYWU5NmZi
NDQ2OTZiZjMxNjE0NDdjYy4uNTBmOGU2YTZiMWViYWJjYTI0MWZhYjM5ZjMxYjQwMTllZDA4ZGUy
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13
aWRlLWluLW5hcnJvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5n
L2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbApAQCAtMjYsOCArMjYsOCBAQCBpZiAod2luZG93
LmludGVybmFscykgewogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2Vj
dGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQg
dXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2
IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byBqdXN0IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5j
ZSBkZXNwaXRlIGl0cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJv
b3QgY2x1c3Rlci48YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4Ij4KKyAgICAgICAg
VGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBmb250LXNpemUg
KDE2ICogNjAwLzMyMCksIHNpbmNlIGJlY2F1c2Ugb2YgaXRzIHdpZHRoOjYwMHB4IGl0IGJlY29t
ZXMgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNv
bnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4
cGVjdGVkLmh0bWwKaW5kZXggYTkwYTAxM2FmM2VkNGVlMDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4
OC4uOWM0MWQ1ZmU0OWFmYjBlMWQ4YWIxMzc1YzZlYzE2MmVjZmUwNWNkZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0
ZWQuaHRtbApAQCAtMTQsOSArMTQsOCBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7
IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogPGRpdiBzdHlsZT0id2lkdGg6IDMyMHB4OyBmb250LXNp
emU6IDFyZW0iPgogCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBk
aXYgaXMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5k
IHRoaXMgZGl2IGlzIG5hcnJvdy48YnI+CiAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQs
IGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNp
ZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgotCTxkaXYgc3R5bGU9Indp
ZHRoOiA4MDBweCI+Ci0gICAgCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCBzaW5j
ZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBibG9jayB3aGljaCBp
cyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXV0b3NpemluZyBtdWx0aXBsaWVyLjxicj4KLSAgICAJ
RklYTUU6IElkZWFsbHkgdGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQuIFdpbGwgbmVlZCB0
byBiZSBmaXhlZCBsYXRlci48YnI+CisJPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNp
emU6IDIuNXJlbSI+CisgICAgCVRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQwcHgg
Y29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiBp
dHMgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAppbmRleCA0NTRlYTYxZjNhZjc5YWZmODdiN2Qz
MzBjNTViNzkxNzYzYjUyMDdlLi43OTc2N2VlZWVlOGZiMDIxMGRjNmM0NGFkZDNiYzU2ZDIwMTgw
MzY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNo
aWxkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGls
ZC5odG1sCkBAIC0yNCw4ICsyNCw3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgVGhp
cyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFy
cm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRp
cGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3Jl
IGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4K
LSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3Qg
YWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2Fs
Y3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxs
eSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxh
dGVyLjxicj4KKyAgICAJVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21w
dXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIGl0cyBj
bHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQg
ZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFs
aXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVy
Zmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4
NWUwNTAwNzE4YmU3MmJjLi5jZDYwZWJkNTc0ZjIxZDVhYzk2NzhlMDc0N2RmZWEwZmIyZDVjNTM2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5h
cnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQu
aHRtbApAQCAtMTMsOCArMTMsOCBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92
ZXJmbG93LXk6IGhpZGRlbjsgfQogCiA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgiPgogICA8ZGl2
IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eDsgZm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIHRo
aXMgaXMgcGFydCBvZiB0aGUgcm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRzIGFy
ZSBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVudCBvZiB0aGlz
IGRpdi48YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJl
bSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQwcHggY29tcHV0
ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApLCBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGNv
bnRhaW5pbmcgY2x1c3RlciBhbmQgdGhlcmVmb3JlIGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48
YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KICAgPC9kaXY+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxv
dy1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4t
bmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCmluZGV4IGY3NGE3YTIxNDA4YzhhZWY0NWZiYWVk
ODY1ZjU5ZjdlYTkzYjgxZTAuLjJlMDM4OWJhYjEyMThkNTJkY2JhMWUzOTNiODBmZjhhNWIzYjM5
NmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4t
bmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCkBAIC0yMyw3ICsy
Myw3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgi
PgogICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgogICAgIDxkaXYgc3R5bGU9Indp
ZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIw
cHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQg
b2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgor
ICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZv
bnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSwgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBjb250YWlu
aW5nIGNsdXN0ZXIgYW5kIHRoZXJlZm9yZSBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgog
ICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNp
bmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAgIDwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177841</attachid>
            <date>2012-12-05 15:12:12 -0800</date>
            <delta_ts>2012-12-06 05:13:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121205230936.patch</filename>
            <type>text/plain</type>
            <size>41279</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiYjk2YWQzYjBkYTNj
MWRlMzg0NWI1MzcwYzg1MTcwMDEyOGFhZC4uN2VkNWNlMjIyNWU0YjBiMDZmZWIxMjQxMTNiN2Vj
MWM0ODg2NzAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxs
IHRleHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIGRlc2NlbmRhbnQgdGV4dCBub2RlcyBoYWQgdG8gYmUgbW9kaWZpZWQgdG8K
KyAgICAgICAgYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gZmluZGluZyB0aGUg
TENBIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2l2ZW4gY29udGFpbmVyIGlzIGEgY2x1c3Rl
ci4KKyAgICAgICAgQWZ0ZXIgdGhlIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBh
bnkgb2YgdGhlIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRo
ZSBuZXcKKyAgICAgICAgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVh
ZnMgYW5kIGEgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBh
cmUgbm8gY2x1c3RlcnMgaW4gdGhlIHBhdGhzIGZyb20gdGhlIExDQSB0byB0aGUgZmlyc3QgYW5k
IGxhc3QgdGV4dCBsZWFmcy4KKworICAgICAgICBUaGUgY2hhbmdlIGZpeGVzIHNldmVyYWwgY2Fz
ZXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKTogY2FsbHMgcHJvY2Vzc0NsdXN0ZXIgd2l0aCBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKTogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgKGZvciBhc3NlcnRpb24gb25seSks
IGZpbmRzIG5ldyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGFuZCBwYXNzZXMgaXQg
aW50byBwcm9jZXNzQ29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbnRhaW5lcik6IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVy
IHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVz
dGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3aWRlciB0
aGFuIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5n
IGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyLCBtb3ZlZCB0byBhbm9u
eW1vdXMgbmFtZXNwYWNlKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0
b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5pZW5jZSBtZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNh
dGlvbiwgbW92ZWQgdG8gYW5vbnltb3VzIG5hbWVzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6IHBhc3NlcyBuZXcgcGFyYW1l
dGVyIHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLCBtb3ZlZCB0byBhbm9ueW1vdXMgbmFt
ZXNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgpOiB1c2VzIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVyIHRvIHBh
c3MgdG8gaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3RlciwgbW92ZWQgdG8gYW5vbnltb3VzIG5h
bWVzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0Qmxv
Y2tDb250YWluaW5nQWxsVGV4dCk6IHJlaW1wbGVtZW50ZWQgdG8gaW5jcmVtZW50YWxseSBmaWx0
ZXIgb3V0IGNsdXN0ZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGN1cnJlbnQgYmxvY2sgY29u
dGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIsIG1vdmVkIHRvIGFub255
bW91cyBuYW1lc3BhY2UuCisgICAgICAgIChmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlclN0
YXJ0aW5nRnJvbSk6IGZpbmRzIHRleHQgbGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIGFueSBj
bHVzdGVyLCBzdGFydHMgc2VhcmNoaW5nIGZyb20gdGhlIGdpdmVuIGNoaWxkIG9mIHRoZSBsYXN0
IG5vZGUgaW4gdGhlIHBhdGguCisgICAgICAgIChvYmplY3RGaXJzdENoaWxkKTogY29udmVuaWVu
Y2UgZnVuY3Rpb24uCisgICAgICAgIChvYmplY3ROZXh0U2libGluZyk6IGNvbnZlbmllbmNlIGZ1
bmN0aW9uIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24uCisgICAgICAgICogcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOiByZW1vdmVkIHVudXNlZCBk
ZWNsYXJhdGlvbnMsIG1vdmVkIHByaXZhdGUgc3RhdGljIG1ldGhvZHMgdG8gYW5vbnltb3VzIG5h
bWVzcGFjZSBpbiAuY3BwIGZpbGUuCisKIDIwMTItMTItMDIgIE90dG8gRGVyZWsgQ2hldW5nICA8
b3RjaGV1bmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkaW5nIGNoZWNrcyBm
b3IgbnVsbCB3aGVuIGNoZWNraW5nIGNvb2tpZSBzdGF0dXMgaW4gQ29va2llSmFyQmxhY2tCZXJy
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDM1ODg0
MGRjNDk0ODE5NjAzYmY3ZjlkMTMyMmM2OGIxYzlkZjI2MTAuLmVkMjkyMGIxZDJjMDMyNWExYzZk
MjhhY2JhM2QzZTRlNjAzYTUzMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMzQsOSArMzUsMjUxIEBACiAjaW5jbHVkZSAiU3R5
bGVJbmhlcml0ZWREYXRhLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7CisKK3R5cGVk
ZWYgVmVjdG9yPGNvbnN0IFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdHM7CitlbnVtIFRyYXZl
cnNhbERpcmVjdGlvbiB7CisgICAgRmlyc3RUb0xhc3QsCisgICAgTGFzdFRvRmlyc3QKK307CisK
K2Jvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lcikKK3sKKyAgICAvLyBGSVhNRTogUHJvcGFnYXRlIGNvbnN0cmFpbmVkbmVzcyBkb3duIHRo
ZSB0cmVlLCB0byBhdm9pZCBpbmVmZmljaWVudGx5IHdhbGtpbmcgYmFjayB1cCBmcm9tIGVhY2gg
Ym94LgorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgbmVlZHMgdG8gdGFrZSBpbnRvIGFjY291bnQg
dmVydGljYWwgd3JpdGluZyBtb2Rlcy4KKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaXRpb25h
bCBoZXVyaXN0aWNzLCBzdWNoIGFzIGlnbm9yaW5nIGZpeGVkIGhlaWdodHMgaWYgdGhlIGNvbnRl
bnQgaXMgYWxyZWFkeSBvdmVyZmxvd2luZyBiZWZvcmUgYXV0b3NpemluZyBraWNrcyBpbi4KKyAg
ICBmb3IgKDsgY29udGFpbmVyOyBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9j
aygpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRhaW5lci0+c3R5bGUoKTsK
KyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA+PSBPU0NST0xMKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzU3BlY2lmaWVkKCkg
fHwgc3R5bGUtPm1heEhlaWdodCgpLmlzU3BlY2lmaWVkKCkpIHsKKyAgICAgICAgICAgIC8vIFNv
bWUgc2l0ZXMgKGUuZy4gd2lraXBlZGlhKSBzZXQgdGhlaXIgaHRtbCBhbmQvb3IgYm9keSBlbGVt
ZW50cyB0byBoZWlnaHQ6MTAwJSwKKyAgICAgICAgICAgIC8vIHdpdGhvdXQgaW50ZW5kaW5nIHRv
IGNvbnN0cmFpbiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250ZW50IHdpdGhpbiB0aGVtLgorICAgICAg
ICAgICAgcmV0dXJuICFjb250YWluZXItPmlzUm9vdCgpICYmICFjb250YWluZXItPmlzQm9keSgp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb250YWluZXItPmlzRmxvYXRpbmdPck91dE9mRmxv
d1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vICJBdXRvc2l6aW5nIGNvbnRhaW5lcnMiIGFyZSB0
aGUgc21hbGxlc3QgdW5pdCBmb3Igd2hpY2ggd2UgY2FuCisgICAgLy8gZW5hYmxlL2Rpc2FibGUg
VGV4dCBBdXRvc2l6aW5nLgorICAgIC8vIC0gTXVzdCBub3QgYmUgaW5saW5lLCBhcyBkaWZmZXJl
bnQgbXVsdGlwbGllcnMgb24gb25lIGxpbmUgbG9va3MgdGVycmlibGUuCisgICAgLy8gLSBNdXN0
IG5vdCBiZSBsaXN0IGl0ZW1zLCBhcyBpdGVtcyBpbiB0aGUgc2FtZSBsaXN0IHNob3VsZCBsb29r
IGNvbnNpc3RlbnQgKCopLgorICAgIC8vICogZXhjZXB0IGZvciB0aG9zZSBsaXN0IGl0ZW1zIHBv
c2l0aW9uZWQgb3V0IG9mIHRoZSBsaXN0J3MgZmxvdy4KKyAgICByZXR1cm4gcmVuZGVyZXItPmlz
UmVuZGVyQmxvY2soKQorICAgICAgICAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkKKyAgICAgICAg
JiYgKCFyZW5kZXJlci0+aXNMaXN0SXRlbSgpIHx8IHJlbmRlcmVyLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSk7Cit9CisKK2Jvb2wgaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBS
ZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KQoreworICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lh
bCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCisgICAgLy8gd2FudCB0byBl
bmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1h
a2luZworICAgIC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29rIGludGVybmFs
bHkgY29uc2lzdGVudC4KKyAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGFudHMgKGluY2x1ZGluZyBv
dGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyB0aGUgc2FtZSBt
dWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1YnRyZWVzIHdoaWNoIGFyZSB0aGVtc2VsdmVzIGNsdXN0
ZXJzLAorICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdo
dCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAorICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBo
ZWlnaHQgaXMgY29uc3RyYWluZWQpLgorICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3Vs
ZEJlQXV0b3NpemVkIHJlcXVpcmVzIGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKKyAgICAvLyBt
aW5pbXVtIGFtb3VudCBvZiB0ZXh0LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXpl
ZC4KKyAgICAvLworICAgIC8vIENsdXN0ZXJzIGFyZSBjaG9zZW4gdXNpbmcgdmVyeSBzaW1pbGFy
IGNyaXRlcmlhIHRvIENTUyBmbG93IHJvb3RzLCBha2EKKyAgICAvLyBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHRzIChodHRwOi8vdzMub3JnL1RSL2NzczMtYm94LyNmbG93LXJvb3QpLCBzaW5jZQor
ICAgIC8vIGZsb3cgcm9vdHMgY29ycmVzcG9uZCB0byBib3ggY29udGFpbmVycyB0aGF0IGJlaGF2
ZSBzb21ld2hhdAorICAgIC8vIGluZGVwZW5kZW50bHkgZnJvbSB0aGVpciBwYXJlbnQgKGZvciBl
eGFtcGxlIHRoZXkgZG9uJ3Qgb3ZlcmxhcCBmbG9hdHMpLgorICAgIC8vIFRoZSBkZWZpbml0aW9u
IG9mIGEgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCisg
ICAgLy8gd2F5cyB0aGF0IGEgYm94IGFuZCBpdHMgY2hpbGRyZW4gY2FuIGhhdmUgc2lnbmlmaWNh
bnRseSBkaWZmZXJlbnQgd2lkdGgKKyAgICAvLyBmcm9tIHRoZSBib3gncyBwYXJlbnQgKHdlIHdh
bnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50CisgICAgLy8gd2lkdGgg
YmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dlciBibG9ja3Mgd291bGQg
ZW5kIHVwCisgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIG5lY2Vzc2FyeSku
CisgICAgLy8gSWYgYSBjb250YWluZXIgaXMgd2lkZXIgdGhhbiBpdHMgfHBhcmVudEJsb2NrQ29u
dGFpbmluZ0FsbFRleHR8IHBhcmVudCwgaXQKKyAgICAvLyBiZWNvbWVzIGEgY2x1c3Rlci4KKyAg
ICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKHJlbmRlcmVyKSk7CisKKyAgICByZXR1cm4g
cmVuZGVyZXItPmlzUmVuZGVyVmlldygpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc0Zsb2F0aW5n
KCkKKyAgICAgICAgfHwgcmVuZGVyZXItPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpCisgICAgICAg
IHx8IHJlbmRlcmVyLT5pc1RhYmxlQ2VsbCgpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc1RhYmxl
Q2FwdGlvbigpCisgICAgICAgIHx8IHJlbmRlcmVyLT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVw
cmVjYXRlZCgpCisgICAgICAgIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkKKyAgICAgICAgfHwg
cmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9
IHJlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpCisgICAgICAgIHx8IChwYXJlbnRC
bG9ja0NvbnRhaW5pbmdBbGxUZXh0CisgICAgICAgICAgICAmJiByZW5kZXJlci0+Y29udGVudExv
Z2ljYWxXaWR0aCgpID4gcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2lj
YWxXaWR0aCgpKTsKKyAgICAvLyBGSVhNRTogVGFibGVzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyB0
byBtdWx0aXBseSBhbGwgdGhlaXIgY29sdW1ucyBieQorICAgIC8vIHRoZSBzYW1lIGFtb3VudCBl
dmVuIGlmIHRoZXkncmUgZGlmZmVyZW50IHdpZHRoczsgc28gZG8gaGFzQ29sdW1ucygpCisgICAg
Ly8gcmVuZGVyZXJzLCBhbmQgcHJvYmFibHkgZmxleGJveGVzLi4uCit9CisKK2Jvb2wgaXNBdXRv
c2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyQmxv
Y2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0Nv
bnRhaW5lcihvYmplY3QpICYmIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJC
bG9jayhvYmplY3QpLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKK30KKworLy8gVXNlIHRvIHRy
YXZlcnNlIHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2Yg
Y29udGFpbmVycyAoYnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KK1Jl
bmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJz
KGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0
aGluKQoreworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4gfHwgIWlzQXV0b3NpemluZ0Nv
bnRhaW5lcihjdXJyZW50KSkKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKworICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0
KiBhbmNlc3RvciA9IGN1cnJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnQoKSkgeworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGluZyA9IGFuY2VzdG9y
LT5uZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmco
KSkKKyAgICAgICAgICAgIHJldHVybiBzaWJsaW5nOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCit2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBj
b250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9h
dCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit7CisgICAgYm9vbCBza2lwTG9jYWxU
ZXh0ID0gY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29udGFpbmVyKTsKKworICAgIFJlbmRl
ck9iamVjdCogZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09m
Q29udGFpbmVycyhjb250YWluZXIsIGNvbnRhaW5lcik7CisgICAgd2hpbGUgKGRlc2NlbmRhbnQp
IHsKKyAgICAgICAgaWYgKCFza2lwTG9jYWxUZXh0ICYmIGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7
CisgICAgICAgICAgICB0ZXh0V2lkdGggKz0gdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5yZW5k
ZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXpl
KCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQp
KSB7CisgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJC
bG9jayhkZXNjZW5kYW50KTsKKyAgICAgICAgICAgIGlmICghaXNDb250YWluZXJBdXRvc2l6aW5n
Q2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQorICAgICAg
ICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAgICB9
CisgICAgICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRh
bnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIGNvbnRhaW5lcik7CisgICAgfQorfQorCitib29s
IGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tXaWR0aCkKK3sKKyAgICAvLyBEb24ndCBhdXRvc2l6ZSBj
bHVzdGVycyB0aGF0IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KKyAgICAv
LyBwcmFjdGljZSBsZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgKKyAgICAvLyBhc3N1bWVzIHRoYXQgY2hhcmFjdGVycyBhcmUgMWVtIHdpZGUs
IGJ1dCBtb3N0IGNoYXJhY3RlcnMgYXJlIG5hcnJvd2VyCisgICAgLy8gdGhhbiB0aGF0LCBzbyB3
ZSdyZSBvdmVyZXN0aW1hdGluZyB0aGVpciBjb250cmlidXRpb24gdG8gdGhlIGxpbmVjb3VudCku
CisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHRvIHJlZHVjZSB0aGUgbGlrZWxpaG9vZCBvZiBhdXRv
c2l6aW5nIHRoaW5ncyBsaWtlIGhlYWRlcnMgYW5kCisgICAgLy8gZm9vdGVycywgd2hpY2ggY2Fu
IGJlIHF1aXRlIHZpc3VhbGx5IGRpc3RyYWN0aW5nLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQKKyAg
ICAvLyBpZiBhIGNsdXN0ZXIgY29udGFpbnMgdmVyeSBmZXcgbGluZXMgb2YgdGV4dCB0aGVuIGl0
J3Mgb2sgdG8gaGF2ZSB0byB6b29tCisgICAgLy8gaW4gYW5kIHBhbiBmcm9tIHNpZGUgdG8gc2lk
ZSB0byByZWFkIGVhY2ggbGluZSwgc2luY2UgaWYgdGhlcmUgYXJlIHZlcnkKKyAgICAvLyBmZXcg
bGluZXMgb2YgdGV4dCB5b3UnbGwgb25seSBuZWVkIHRvIHBhbiBhY3Jvc3Mgb25jZSBvciB0d2lj
ZS4KKyAgICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7CisgICAgZmxvYXQgbWluVGV4
dFdpZHRoID0gYmxvY2tXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OworICAgIGZsb2F0IHRleHRXaWR0
aCA9IDA7CisgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoYmxvY2tDb250YWluaW5nQWxs
VGV4dCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwor
ICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0Rmlyc3RD
aGlsZChUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBvYmplY3Qt
PmZpcnN0Q2hpbGQoKSA6IG9iamVjdC0+bGFzdENoaWxkKCk7Cit9CisKK2NvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0TmV4dFNpYmxpbmcoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRmly
c3RUb0xhc3QpID8gb2JqZWN0LT5uZXh0U2libGluZygpIDogb2JqZWN0LT5wcmV2aW91c1NpYmxp
bmcoKTsKK30KKworLy8gU2VhcmNoZXMgZm9yIHRoZSBmaXJzdCB0ZXh0IGxlYWYgdGhhdCBkb2Vz
bid0IGJlbG9uZyB0byBhbnkgZGVzY2VuZGFudCBhdXRvc2l6aW5nIGNsdXN0ZXIgc3RhcnRpbmcg
dHJlZSB0cmF2ZXJzYWwgZnJvbQorLy8gdGhlIGdpdmVuIGNoaWxkIG9mIHRoZSBsYXN0IG9iamVj
dCBpbiB0aGUgcGF0aC4gRm9sbG93cyB0aGUgZ2l2ZW4gdHJlZSB0cmF2ZXJzYWwgZGlyZWN0aW9u
LiBJZiBzdWNoIHRleHQgbGVhZiBpcyBub3QgZm91bmQsCisvLyB0aGUgbGFzdCBvYmplY3QgaXMg
cmVtb3ZlZCBmcm9tIHRoZSBwYXRoLgordm9pZCBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rl
clN0YXJ0aW5nRnJvbShUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3Rz
JiBwYXRoLCBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIGNvbnN0IFJlbmRlck9i
amVjdCogcGFyZW50ID0gcGF0aC5sYXN0KCk7CisgICAgQVNTRVJUKCFjaGlsZCB8fCBjaGlsZC0+
cGFyZW50KCkgPT0gcGFyZW50KTsKKworICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICBpZiAo
Y2hpbGQtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoIWlzQXV0b3NpemluZ0Ns
dXN0ZXIoY2hpbGQsIDApKSB7CisgICAgICAgICAgICBwYXRoLmFwcGVuZChjaGlsZCk7CisgICAg
ICAgICAgICBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlclN0YXJ0aW5nRnJvbShkaXJlY3Rp
b24sIHBhdGgsIG9iamVjdEZpcnN0Q2hpbGQoZGlyZWN0aW9uLCBjaGlsZCkpOworICAgICAgICAg
ICAgaWYgKHBhdGgubGFzdCgpICE9IHBhcmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY2hpbGQgPSBvYmplY3ROZXh0U2libGluZyhkaXJlY3Rpb24sIGNo
aWxkKTsKKyAgICB9CisgICAgcGF0aC5yZW1vdmVMYXN0KCk7Cit9CisKKy8vIENoZWNrcyBpZiB0
aGVyZSBpcyBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIgaW4gdGhlIGdpdmVuIHBhdGggYmV0d2VlbiB0
aGUgZ2l2ZW4gaW5kZXggYW5kIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHBhdGguCisvLyBJZiBj
bHVzdGVyIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBmYWxzZS4gT3RoZXJ3aXNlLCByZW1vdmVzIGV2
ZXJ5IG5vZGUgaW4gdGhlIHBhdGggaW5jbHVkaW5nIHRoZSBmb3VuZCBjbHVzdGVyIGFuZCBjb250
aW51ZXMKKy8vIHRyYXZlcnNpbmcgdGhlIHRyZWUgdG8gZmluZCB0aGUgbmV4dCB0ZXh0IGxlYWYg
aW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHNlYXJjaCBpcyBm
aW5pc2hlZC4KK2Jvb2wgY29ycmVjdEZpcnN0VGV4dExlYWZJZkluQ2x1c3RlcihUcmF2ZXJzYWxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBwYXRoLCBzaXplX3Qgc3RhcnRGcm9t
LCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKK3sKKyAg
ICBzaXplX3QgY2x1c3RlckluZGV4ID0gcGF0aC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IHN0YXJ0RnJvbTsgaSA8IHBhdGguc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChpc0F1dG9zaXpp
bmdDbHVzdGVyKHBhdGhbaV0sIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpKSB7CisgICAg
ICAgICAgICBjbHVzdGVySW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgIGlmIChjbHVzdGVySW5kZXggPT0gcGF0aC5zaXplKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2x1c3RlciA9IHBhdGhbY2x1c3Rlcklu
ZGV4XTsKKyAgICBwYXRoLnJlbW92ZShjbHVzdGVySW5kZXgsIHBhdGguc2l6ZSgpIC0gY2x1c3Rl
ckluZGV4KTsKKyAgICBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlclN0YXJ0aW5nRnJvbShk
aXJlY3Rpb24sIHBhdGgsIG9iamVjdE5leHRTaWJsaW5nKGRpcmVjdGlvbiwgY2x1c3RlcikpOwor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBJZiB0aGVyZSBhcmUgYW55IGRlc2NlbmRhbnQgdGV4
dCBub2RlcyBvZiB0aGUgZ2l2ZW4gY2x1c3RlciB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2Yg
YW55IGRlc2NlbmRhbnQgY2x1c3RlciwKKy8vIHJldHVybnMgdGhlIGxvd2VzdCBjb21tb24gYW5j
ZXN0b3IgZm9yIHRoZXNlIHRleHQgbm9kZXMuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgY2x1c3Rl
ciBpdHNlbGYuCitjb25zdCBSZW5kZXJCbG9jayogZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdB
bGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQsIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rl
ciwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkpOworCisgICAgUmVuZGVyT2JqZWN0cyBm
aXJzdFBhdGgoMSwgY2x1c3Rlcik7CisgICAgZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXJT
dGFydGluZ0Zyb20oRmlyc3RUb0xhc3QsIGZpcnN0UGF0aCwgY2x1c3Rlci0+Zmlyc3RDaGlsZCgp
KTsKKyAgICBpZiAoZmlyc3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNsdXN0ZXI7
CisKKyAgICBSZW5kZXJPYmplY3RzIGxhc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyU3RhcnRpbmdGcm9tKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwg
Y2x1c3Rlci0+bGFzdENoaWxkKCkpOworICAgIEFTU0VSVCghbGFzdFBhdGguaXNFbXB0eSgpKTsK
KworICAgIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gMDsKKyAg
ICB3aGlsZSAoIWJsb2NrQ29udGFpbmluZ0FsbFRleHQpIHsKKyAgICAgICAgc2l6ZV90IG1pblNp
emUgPSBzdGQ6Om1pbihmaXJzdFBhdGguc2l6ZSgpLCBsYXN0UGF0aC5zaXplKCkpOworICAgICAg
ICBzaXplX3QgZmlyc3ROb3RFcXVhbEluZGV4ID0gMTsKKyAgICAgICAgd2hpbGUgKGZpcnN0Tm90
RXF1YWxJbmRleCA8IG1pblNpemUgJiYgZmlyc3RQYXRoW2ZpcnN0Tm90RXF1YWxJbmRleF0gPT0g
bGFzdFBhdGhbZmlyc3ROb3RFcXVhbEluZGV4XSkKKyAgICAgICAgICAgIGZpcnN0Tm90RXF1YWxJ
bmRleCsrOworCisgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbG93ZXN0Q29tbW9uQW5jZXN0
b3IgPSBmaXJzdFBhdGhbZmlyc3ROb3RFcXVhbEluZGV4IC0gMV07CisgICAgICAgIGlmIChsb3dl
c3RDb21tb25BbmNlc3Rvci0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgYmxvY2tDb250
YWluaW5nQWxsVGV4dCA9IHRvUmVuZGVyQmxvY2sobG93ZXN0Q29tbW9uQW5jZXN0b3IpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gbG93ZXN0Q29t
bW9uQW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBBU1NFUlQoYmxvY2tDb250
YWluaW5nQWxsVGV4dC0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOworCisgICAgICAgIC8vIENo
ZWNrIGlmIGFueSBvZiB0aGUgdGV4dCBsZWFmcycgcGFyZW50cyBhcmUgZ29pbmcgdG8gYmUgY2x1
c3RlcnMgZHVlIHRvIGJlaW5nIHdpZGVyIHRoYW4gdGhlIGJsb2NrIGp1c3QgZm91bmQuCisgICAg
ICAgIC8vIElmIHNvLCBzZWFyY2ggZm9yIHRoZSB0ZXh0IGxlYWZzIGFnYWluIHN0YXJ0aW5nIGZy
b20gdGhlIG5leHQgc2libGluZyBvZiB0aGUgZm91bmQgY2x1c3Rlci4KKyAgICAgICAgYm9vbCBm
aXJzdFRleHRMZWFmSW52YWxpZGF0ZWQgPSBjb3JyZWN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVy
KEZpcnN0VG9MYXN0LCBmaXJzdFBhdGgsIGZpcnN0Tm90RXF1YWxJbmRleCwgYmxvY2tDb250YWlu
aW5nQWxsVGV4dCk7CisgICAgICAgIGJvb2wgbGFzdFRleHRMZWFmSW52YWxpZGF0ZWQgPSBjb3Jy
ZWN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgZmlyc3RO
b3RFcXVhbEluZGV4LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKyAgICAgICAgaWYgKGZpcnN0
VGV4dExlYWZJbnZhbGlkYXRlZCB8fCBsYXN0VGV4dExlYWZJbnZhbGlkYXRlZCkgeworICAgICAg
ICAgICAgaWYgKGZpcnN0UGF0aC5pc0VtcHR5KCkgfHwgbGFzdFBhdGguaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjbHVzdGVyOworICAgICAgICAgICAgYmxvY2tDb250YWluaW5n
QWxsVGV4dCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYmxvY2tDb250YWlu
aW5nQWxsVGV4dDsKK30KKworfSAvLyBuYW1lc3BhY2UKKwogc3RydWN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyB7CiAgICAgSW50U2l6ZSB3aW5kb3dTaXplOwogICAgIEludFNpemUgbWluTGF5
b3V0U2l6ZTsKQEAgLTg1LDYxICszMjgsNDEgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNz
U3VidHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiAgICAgICAgIGNvbnRhaW5lciA9IGNv
bnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2x1c3RlciA9
IGNvbnRhaW5lcjsKLSAgICB3aGlsZSAoY2x1c3RlciAmJiAoIWlzQXV0b3NpemluZ0NvbnRhaW5l
cihjbHVzdGVyKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSkpCisgICAgd2hpbGUg
KGNsdXN0ZXIgJiYgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlciwgMCkpCiAgICAgICAgIGNs
dXN0ZXIgPSBjbHVzdGVyLT5jb250YWluaW5nQmxvY2soKTsKIAotICAgIHByb2Nlc3NDbHVzdGVy
KGNsdXN0ZXIsIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7CisgICAgcHJvY2Vz
c0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCAwLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3Rl
cihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJ
bmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1
c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRv
c2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKIHsKLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5n
Q2x1c3RlcihjbHVzdGVyKSk7CisgICAgQVNTRVJUKGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0
ZXIoY2x1c3RlciwgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpOwogCiAgICAgLy8gTWFueSBwYWdl
cyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28gZXNwZWNpYWxseSBmb3IgdGhl
CiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRha2luZyB0aGUgd2lkdGggb2Yg
fGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0
aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUgb2YKICAgICAvLyB0aGUgY2x1
c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRoYXQgY29udGFpbnMgYWxsIHRo
ZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0ZWFkLgotICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCBjb21tb25BbmNlc3RvcldpZHRoID0gbG93
ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBjb25zdCBSZW5k
ZXJCbG9jayogZGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVlcGVzdEJsb2Nr
Q29udGFpbmluZ0FsbFRleHQoY2x1c3RlciwgYmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAg
ZmxvYXQgdGV4dFdpZHRoID0gZGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRM
b2dpY2FsV2lkdGgoKTsKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwotICAgIGlmIChjbHVz
dGVyU2hvdWxkQmVBdXRvc2l6ZWQobG93ZXN0Q29tbW9uQW5jZXN0b3IsIGNvbW1vbkFuY2VzdG9y
V2lkdGgpKSB7CisgICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChkZWVwZXN0QmxvY2tD
b250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgewogICAgICAgICBpbnQgbG9naWNhbFdpbmRv
d1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8u
d2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby53aW5kb3dTaXplLmhlaWdodCgpOwogICAg
ICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5t
aW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4
Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgot
ICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGNvbW1v
bkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxMYXlvdXRXaWR0aCk7CisgICAgICAgIGZsb2F0IGxvZ2lj
YWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1pbjxmbG9hdD4odGV4dFdpZHRoLCBsb2dpY2FsTGF5b3V0
V2lkdGgpOwogCiAgICAgICAgIG11bHRpcGxpZXIgPSBsb2dpY2FsQ2x1c3RlcldpZHRoIC8gbG9n
aWNhbFdpbmRvd1dpZHRoOwogICAgICAgICBtdWx0aXBsaWVyICo9IG1fZG9jdW1lbnQtPnNldHRp
bmdzKCktPnRleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yKCk7CiAgICAgICAgIG11bHRpcGxp
ZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0aXBsaWVyKTsKICAgICB9CiAKLSAgICBwcm9jZXNzQ29u
dGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwor
ICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVyLCBkZWVwZXN0QmxvY2tD
b250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwogfQogCi1zdGF0aWMg
Ym9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFp
bmVyKQotewotICAgIC8vIEZJWE1FOiBQcm9wYWdhdGUgY29uc3RyYWluZWRuZXNzIGRvd24gdGhl
IHRyZWUsIHRvIGF2b2lkIGluZWZmaWNpZW50bHkgd2Fsa2luZyBiYWNrIHVwIGZyb20gZWFjaCBi
b3guCi0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBuZWVkcyB0byB0YWtlIGludG8gYWNjb3VudCB2
ZXJ0aWNhbCB3cml0aW5nIG1vZGVzLgotICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpdGlvbmFs
IGhldXJpc3RpY3MsIHN1Y2ggYXMgaWdub3JpbmcgZml4ZWQgaGVpZ2h0cyBpZiB0aGUgY29udGVu
dCBpcyBhbHJlYWR5IG92ZXJmbG93aW5nIGJlZm9yZSBhdXRvc2l6aW5nIGtpY2tzIGluLgotICAg
IGZvciAoOyBjb250YWluZXI7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gY29udGFpbmVyLT5zdHlsZSgpOwot
ICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID49IE9TQ1JPTEwpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNTcGVjaWZpZWQoKSB8
fCBzdHlsZS0+bWF4SGVpZ2h0KCkuaXNTcGVjaWZpZWQoKSkgewotICAgICAgICAgICAgLy8gU29t
ZSBzaXRlcyAoZS5nLiB3aWtpcGVkaWEpIHNldCB0aGVpciBodG1sIGFuZC9vciBib2R5IGVsZW1l
bnRzIHRvIGhlaWdodDoxMDAlLAotICAgICAgICAgICAgLy8gd2l0aG91dCBpbnRlbmRpbmcgdG8g
Y29uc3RyYWluIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZW0uCi0gICAgICAg
ICAgICByZXR1cm4gIWNvbnRhaW5lci0+aXNSb290KCkgJiYgIWNvbnRhaW5lci0+aXNCb2R5KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbnRhaW5lci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9h
dCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lk
IFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnRhaW5lcikpOwogCkBAIC0xNTUsMTAgKzM3OCwxMCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6OnBy
b2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UgogICAgICAgICAgICAgLy8gRklYTUU6IEluY3JlYXNlIGxpc3QgbWFya2VyIHNpemUgcHJvcG9y
dGlvbmF0ZWx5LgogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNj
ZW5kYW50KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRv
UmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1
c3RlcihkZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0lu
Zm8pOworICAgICAgICAgICAgaWYgKGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2Vu
ZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRlc2NlbmRh
bnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAgICAgICAgICBw
cm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAgICAgICAgfQogICAg
ICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250
YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVSb290KTsKICAgICB9CkBAIC0xNzEsNiArMzk0LDcg
QEAgdm9pZCBUZXh0QXV0b3NpemVyOjpzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGZsb2F0IG11bHRpcGxpZXIpCiAgICAgcmVuZGVyZXItPnNldFN0eWxlKG5ld1N0eWxlLnJl
bGVhc2UoKSk7CiB9CiAKKy8vIHN0YXRpYwogZmxvYXQgVGV4dEF1dG9zaXplcjo6Y29tcHV0ZUF1
dG9zaXplZEZvbnRTaXplKGZsb2F0IHNwZWNpZmllZFNpemUsIGZsb2F0IG11bHRpcGxpZXIpCiB7
CiAgICAgLy8gU29tZXdoYXQgYXJiaXRyYXJ5ICJwbGVhc2FudCIgZm9udCBzaXplLgpAQCAtMTk5
LDE3NCArNDIzLDYgQEAgZmxvYXQgVGV4dEF1dG9zaXplcjo6Y29tcHV0ZUF1dG9zaXplZEZvbnRT
aXplKGZsb2F0IHNwZWNpZmllZFNpemUsIGZsb2F0IG11bHRpcGwKICAgICByZXR1cm4gY29tcHV0
ZWRTaXplOwogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIC8vICJBdXRvc2l6aW5nIGNvbnRh
aW5lcnMiIGFyZSB0aGUgc21hbGxlc3QgdW5pdCBmb3Igd2hpY2ggd2UgY2FuCi0gICAgLy8gZW5h
YmxlL2Rpc2FibGUgVGV4dCBBdXRvc2l6aW5nLgotICAgIC8vIC0gTXVzdCBub3QgYmUgaW5saW5l
LCBhcyBkaWZmZXJlbnQgbXVsdGlwbGllcnMgb24gb25lIGxpbmUgbG9va3MgdGVycmlibGUuCi0g
ICAgLy8gLSBNdXN0IG5vdCBiZSBsaXN0IGl0ZW1zLCBhcyBpdGVtcyBpbiB0aGUgc2FtZSBsaXN0
IHNob3VsZCBsb29rIGNvbnNpc3RlbnQgKCopLgotICAgIC8vICogZXhjZXB0IGZvciB0aG9zZSBs
aXN0IGl0ZW1zIHBvc2l0aW9uZWQgb3V0IG9mIHRoZSBsaXN0J3MgZmxvdy4KLSAgICByZXR1cm4g
cmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKQotICAgICAgICAmJiAhcmVuZGVyZXItPmlzSW5saW5l
KCkKLSAgICAgICAgJiYgKCFyZW5kZXJlci0+aXNMaXN0SXRlbSgpIHx8IHJlbmRlcmVyLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci19Ci0KLWJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6
aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCi17Ci0gICAgLy8gIkF1dG9z
aXppbmcgY2x1c3RlcnMiIGFyZSBzcGVjaWFsIGF1dG9zaXppbmcgY29udGFpbmVycyB3aXRoaW4g
d2hpY2ggd2UKLSAgICAvLyB3YW50IHRvIGVuZm9yY2UgYSB1bmlmb3JtIHRleHQgc2l6ZSBtdWx0
aXBsaWVyLCBpbiB0aGUgaG9wZXMgb2YgbWFraW5nCi0gICAgLy8gdGhlIG1ham9yIHNlY3Rpb25z
IG9mIHRoZSBwYWdlIGxvb2sgaW50ZXJuYWxseSBjb25zaXN0ZW50LgotICAgIC8vIEFsbCB0aGVp
ciBkZXNjZW5kZW50cyAoaW5jbHVkaW5nIG90aGVyIGF1dG9zaXppbmcgY29udGFpbmVycykgbXVz
dCBzaGFyZQotICAgIC8vIHRoZSBzYW1lIG11bHRpcGxpZXIsIGV4Y2VwdCBmb3Igc3VidHJlZXMg
d2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2x1c3RlcnMsCi0gICAgLy8gYW5kIHNvbWUgb2YgdGhlaXIg
ZGVzY2VuZGVudCBjb250YWluZXJzIG1pZ2h0IG5vdCBiZSBhdXRvc2l6ZWQgYXQgYWxsCi0gICAg
Ly8gKGZvciBleGFtcGxlIGlmIHRoZWlyIGhlaWdodCBpcyBjb25zdHJhaW5lZCkuCi0gICAgLy8g
QWRkaXRpb25hbGx5LCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQgcmVxdWlyZXMgZWFjaCBjbHVz
dGVyIHRvIGNvbnRhaW4gYQotICAgIC8vIG1pbmltdW0gYW1vdW50IG9mIHRleHQsIHdpdGhvdXQg
d2hpY2ggaXQgd29uJ3QgYmUgYXV0b3NpemVkLgotICAgIC8vCi0gICAgLy8gQ2x1c3RlcnMgYXJl
IGNob3NlbiB1c2luZyB2ZXJ5IHNpbWlsYXIgY3JpdGVyaWEgdG8gQ1NTIGZsb3cgcm9vdHMsIGFr
YQotICAgIC8vIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMgKGh0dHA6Ly93My5vcmcvVFIvY3Nz
My1ib3gvI2Zsb3ctcm9vdCksIHNpbmNlCi0gICAgLy8gZmxvdyByb290cyBjb3JyZXNwb25kIHRv
IGJveCBjb250YWluZXJzIHRoYXQgYmVoYXZlIHNvbWV3aGF0Ci0gICAgLy8gaW5kZXBlbmRlbnRs
eSBmcm9tIHRoZWlyIHBhcmVudCAoZm9yIGV4YW1wbGUgdGhleSBkb24ndCBvdmVybGFwIGZsb2F0
cykuCi0gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IGZsb3cgcm9vdCBhbHNvIGNvbnZl
bmllbnRseSBpbmNsdWRlcyBtb3N0IG9mIHRoZQotICAgIC8vIHdheXMgdGhhdCBhIGJveCBhbmQg
aXRzIGNoaWxkcmVuIGNhbiBoYXZlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IHdpZHRoCi0gICAg
Ly8gZnJvbSB0aGUgYm94J3MgcGFyZW50ICh3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBzaWduaWZp
Y2FudGx5IGRpZmZlcmVudAotICAgIC8vIHdpZHRoIGJsb2NrcyB3aXRoaW4gYSBjbHVzdGVyLCBz
aW5jZSB0aGUgbmFycm93ZXIgYmxvY2tzIHdvdWxkIGVuZCB1cAotICAgIC8vIGxhcmdlciB0aGFu
IHdvdWxkIG90aGVyd2lzZSBiZSBuZWNlc3NhcnkpLgotICAgIEFTU0VSVChpc0F1dG9zaXppbmdD
b250YWluZXIocmVuZGVyZXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlci0+aXNSZW5kZXJWaWV3
KCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxvYXRpbmcoKQotICAgICAgICB8fCByZW5kZXJl
ci0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFibGVD
ZWxsKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKLSAgICAgICAgfHwg
cmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKLSAgICAgICAgfHwg
cmVuZGVyZXItPmhhc0NvbHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Js
b2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCk7Ci0gICAgLy8gRklYTUU6IFRhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxp
bmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNvbHVtbnMgYnkKLSAgICAvLyB0aGUgc2FtZSBhbW91
bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQot
ICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgotfQotCi1ib29sIFRl
eHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayog
bG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpCi17Ci0gICAg
Ly8gRG9uJ3QgYXV0b3NpemUgY2x1c3RlcnMgdGhhdCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVz
IG9mIHRleHQgKGluCi0gICAgLy8gcHJhY3RpY2UgbGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNp
bmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoCi0gICAgLy8gYXNzdW1lcyB0aGF0IGNoYXJh
Y3RlcnMgYXJlIDFlbSB3aWRlLCBidXQgbW9zdCBjaGFyYWN0ZXJzIGFyZSBuYXJyb3dlcgotICAg
IC8vIHRoYW4gdGhhdCwgc28gd2UncmUgb3ZlcmVzdGltYXRpbmcgdGhlaXIgY29udHJpYnV0aW9u
IHRvIHRoZSBsaW5lY291bnQpLgotICAgIC8vCi0gICAgLy8gVGhpcyBpcyB0byByZWR1Y2UgdGhl
IGxpa2VsaWhvb2Qgb2YgYXV0b3NpemluZyB0aGluZ3MgbGlrZSBoZWFkZXJzIGFuZAotICAgIC8v
IGZvb3RlcnMsIHdoaWNoIGNhbiBiZSBxdWl0ZSB2aXN1YWxseSBkaXN0cmFjdGluZy4gVGhlIHJh
dGlvbmFsZSBpcyB0aGF0Ci0gICAgLy8gaWYgYSBjbHVzdGVyIGNvbnRhaW5zIHZlcnkgZmV3IGxp
bmVzIG9mIHRleHQgdGhlbiBpdCdzIG9rIHRvIGhhdmUgdG8gem9vbQotICAgIC8vIGluIGFuZCBw
YW4gZnJvbSBzaWRlIHRvIHNpZGUgdG8gcmVhZCBlYWNoIGxpbmUsIHNpbmNlIGlmIHRoZXJlIGFy
ZSB2ZXJ5Ci0gICAgLy8gZmV3IGxpbmVzIG9mIHRleHQgeW91J2xsIG9ubHkgbmVlZCB0byBwYW4g
YWNyb3NzIG9uY2Ugb3IgdHdpY2UuCi0gICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0
OwotICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGNvbW1vbkFuY2VzdG9yV2lkdGggKiBtaW5MaW5l
c09mVGV4dDsKLSAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50
VGV4dFdpZHRoKGxvd2VzdENvbW1vbkFuY2VzdG9yLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7
Ci0gICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5U
ZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCi17Ci0gICAgYm9vbCBza2lwTG9jYWxUZXh0ID0g
Y29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29udGFpbmVyKTsKLQotICAgIFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFp
bmVycyhjb250YWluZXIsIGNvbnRhaW5lcik7Ci0gICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKLSAg
ICAgICAgaWYgKCFza2lwTG9jYWxUZXh0ICYmIGRlc2NlbmRhbnQtPmlzVGV4dCgpKSB7Ci0gICAg
ICAgICAgICB0ZXh0V2lkdGggKz0gdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5yZW5kZXJlZFRl
eHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXplKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQpKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhk
ZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5k
YW50QmxvY2spKQotICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRl
c2NlbmRhbnRCbG9jaywgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZD
b250YWluZXJzKGRlc2NlbmRhbnQsIGNvbnRhaW5lcik7Ci0gICAgfQotfQotCi1SZW5kZXJPYmpl
Y3QqIFRleHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29u
dGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0IFJlbmRlck9iamVjdCog
c3RheVdpdGhpbikKLXsKLSAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluIHx8ICFpc0F1dG9z
aXppbmdDb250YWluZXIoY3VycmVudCkpCi0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gY2hpbGQ7Ci0KLSAgICBmb3IgKGNvbnN0IFJlbmRl
ck9iamVjdCogYW5jZXN0b3IgPSBjdXJyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rv
ci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yID09IHN0YXlXaXRoaW4pCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBh
bmNlc3Rvci0+bmV4dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRT
aWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gc2libGluZzsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotY29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0
QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlcikKLXsKLSAg
ICBBU1NFUlQoaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSk7Ci0KLSAgICBzaXplX3QgZmly
c3REZXB0aCA9IDA7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBmaXJzdFRleHRMZWFmID0gZmlu
ZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2x1c3RlciwgZmlyc3REZXB0aCwgRmlyc3RUb0xh
c3QpOwotICAgIGlmICghZmlyc3RUZXh0TGVhZikKLSAgICAgICAgcmV0dXJuIGNsdXN0ZXI7Ci0K
LSAgICBzaXplX3QgbGFzdERlcHRoID0gMDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxhc3RU
ZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGxhc3REZXB0
aCwgTGFzdFRvRmlyc3QpOwotICAgIEFTU0VSVChsYXN0VGV4dExlYWYpOwotCi0gICAgLy8gRXF1
YWxpemUgdGhlIGRlcHRocyBpZiBuZWNlc3NhcnkuIE9ubHkgb25lIG9mIHRoZSB3aGlsZSBsb29w
cyBiZWxvdyB3aWxsIGdldCBleGVjdXRlZC4KLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0
Tm9kZSA9IGZpcnN0VGV4dExlYWY7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsYXN0Tm9kZSA9
IGxhc3RUZXh0TGVhZjsKLSAgICB3aGlsZSAoZmlyc3REZXB0aCA+IGxhc3REZXB0aCkgewotICAg
ICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICAtLWZpcnN0RGVw
dGg7Ci0gICAgfQotICAgIHdoaWxlIChsYXN0RGVwdGggPiBmaXJzdERlcHRoKSB7Ci0gICAgICAg
IGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICAtLWxhc3REZXB0aDsKLSAg
ICB9Ci0KLSAgICAvLyBHbyB1cCBmcm9tIGJvdGggbm9kZXMgdW50aWwgdGhlIHBhcmVudCBpcyB0
aGUgc2FtZS4gQm90aCBwb2ludGVycyB3aWxsIHBvaW50IHRvIHRoZSBMQ0EgdGhlbi4KLSAgICB3
aGlsZSAoZmlyc3ROb2RlICE9IGxhc3ROb2RlKSB7Ci0gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0
Tm9kZS0+cGFyZW50KCk7Ci0gICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwot
ICAgIH0KLQotICAgIGlmIChmaXJzdE5vZGUtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0
dXJuIHRvUmVuZGVyQmxvY2soZmlyc3ROb2RlKTsKLQotICAgIC8vIGNvbnRhaW5pbmdCbG9jaygp
IHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgY2x1c3Rlciwgc2luY2UgaXQgb25seSBza2lwcyBhbmNl
c3RvcnMgd2hlbiBmaW5kaW5nIHRoZQotICAgIC8vIGNvbnRhaW5lciBvZiBwb3NpdGlvbjphYnNv
bHV0ZS9maXhlZCBibG9ja3MsIGFuZCB0aG9zZSBjYW5ub3QgZXhpc3QgYmV0d2VlbiBhIGNsdXN0
ZXIgYW5kIGl0cyB0ZXh0Ci0gICAgLy8gbm9kZXMgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBhcyBp
c0F1dG9zaXppbmdDbHVzdGVyIHdvdWxkIGhhdmUgbWFkZSB0aGVtIGludG8gdGhlaXIgb3duIGlu
ZGVwZW5kZW50Ci0gICAgLy8gY2x1c3Rlci4KLSAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Js
b2NrID0gZmlyc3ROb2RlLT5jb250YWluaW5nQmxvY2soKTsKLSAgICBBU1NFUlQoY29udGFpbmlu
Z0Jsb2NrLT5pc0Rlc2NlbmRhbnRPZihjbHVzdGVyKSk7Ci0KLSAgICByZXR1cm4gY29udGFpbmlu
Z0Jsb2NrOwotfQotCi1jb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6OmZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50LCBzaXplX3Qm
IGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIGlmIChwYXJlbnQt
PmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUZXh0KCkgPyBwYXJlbnQgOiAw
OwotCi0gICAgKytkZXB0aDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gKGRpcmVj
dGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBhcmVudC0+bGFz
dENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNBdXRvc2l6aW5n
Q29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKGNo
aWxkKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAgICAg
ICAgIGlmIChsZWFmKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOwotICAgICAgICB9Ci0g
ICAgICAgIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBjaGlsZC0+bmV4dFNp
YmxpbmcoKSA6IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0gICAgLS1kZXB0aDsK
LQotICAgIHJldHVybiAwOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmgKaW5kZXggYTcwOWIxMTY4ZTQ0ZGYwMGVjMWY5ZDczYmJlNWU1MTZmZTkyNjc3NC4u
M2U4MDA0YzQ0OTExZDliNDMxNzY3ZmE2ZjE3YWViNjMzYmQyNjhmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQogCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM4LDcgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm87CiAKQEAgLTU1LDM1ICs1MywxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGZsb2F0IGNvbXB1dGVBdXRvc2l6ZWRGb250U2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBmbG9h
dCBtdWx0aXBsaWVyKTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIFRyYXZlcnNhbERpcmVjdGlvbiB7
Ci0gICAgICAgIEZpcnN0VG9MYXN0LAotICAgICAgICBMYXN0VG9GaXJzdAotICAgIH07Ci0KICAg
ICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERvY3VtZW50Kik7CiAKLSAgICB2b2lkIHByb2Nlc3ND
bHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsK
LSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXpp
bmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1
c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRl
eHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9h
dCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayog
cGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxp
ZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQpOwogCi0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5n
Q29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3Np
emluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqKTsKLQotICAgIHN0YXRpYyBib29sIGNsdXN0
ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0
b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpOwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1p
blRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7Ci0KLSAgICAvLyBVc2UgdG8gdHJhdmVyc2Ug
dGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGluZyBkZXNjZW5kYW50cyBvZiBjb250YWlu
ZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJzIHRoZW1zZWx2ZXMpLgotICAgIHN0YXRp
YyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFp
bmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0IFJlbmRlck9iamVjdCogc3Rh
eVdpdGhpbik7Ci0KLSAgICAvLyBGaW5kcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0
aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQKLSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1
ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3RoZXIgYXV0b3NpemluZyBjbHVzdGVycykuCi0gICAg
c3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRl
eHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpOwotCi0gICAgLy8gRGVwZW5kaW5nIG9uIHRo
ZSB0cmF2ZXJzYWwgZGlyZWN0aW9uIHNwZWNpZmllZCwgZmluZHMgdGhlIGZpcnN0IG9yIHRoZSBs
YXN0IGxlYWYgdGV4dCBub2RlIGNoaWxkIHRoYXQgZG9lc24ndAotICAgIC8vIGJlbG9uZyB0byBh
bnkgY2x1c3Rlci4KLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0
TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2
ZXJzYWxEaXJlY3Rpb24pOwotCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiB9OwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNjgyMTliNTlhYWE4Y2IyZmU5NDczN2UxNzI3NDExZDZmMDViODEzYS4uZGIyOWY0MzQwNTg5
OGFhZjgxZDFiYmNiMWI2YmY2MmJlY2Y4NGE5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEy
LTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBU
ZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1
c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3Rl
cigpIG5vdyBjaGVja3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0
ZXIgdGhhbiB0aGUgd2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIHRleHQgbm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyKS4gVGhlIGVuY2xvc2lu
ZyBSZW5kZXJCbG9jayBpcyBwYXNzZWQgdGhyb3VnaG91dAorICAgICAgICB0cmVlIHRyYXZlcnNh
bCBtZXRob2RzLgorICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRleHQg
bm9kZXMgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBoYWQgdG8gYmUgbW9kaWZpZWQgdG8gYXZvaWQg
Y2lyY3VsYXIgZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIGZpbmRpbmcgTENBIGFuZCBkZXRl
cm1pbmluZyBpZiBjb250YWluZXIgaXMgYSBjbHVzdGVyLiBBZnRlciBpbml0aWFsIExDQSBpcyBm
b3VuZCwgd2UgY2hlY2sgaWYgYW55IG9mCisgICAgICAgIHRleHQgbGVhZnMnIHBhcmVudCBub2Rl
cyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZp
bmQgbmV3IHRleHQgbGVhZnMgYW5kIG5ldyBMQ0EuCisgICAgICAgIFRoaXMgaXMgcmVwZWF0ZWQg
dW50aWwgdGhlcmUgYXJlIG5vIGNsdXN0ZXJzIGluIHBhdGhzIGZyb20gTENBIHRvIHRoZSBmaXJz
dCBhbmQgbGFzdCB0ZXh0IGxlYWZzLgorCisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcv
Y2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4
dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0
L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sOgor
ICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNj
cm9sbC5odG1sOgorCiAyMDEyLTEyLTAyICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVs
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvcnJlY3QgdGhlIGxvY2F0aW9u
IG9mIHN5bnRoZXRpYyBtb3VzZSBldmVudHMgd2hlbiBwYWdlIGlzIHpvb21lZApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJv
dy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rl
ci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCmluZGV4IDZjZmYwNmU0NDhiMmY3NTgzYmRh
MjAzNDNlZWJkZTIyNWM2NDY1NzAuLjdhN2Y4Y2RjZDRjZDBlMzM4MmE4NTVlMWQ1YjI5OTM2N2I5
NWNkMmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0
ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwKQEAgLTE3
LDggKzE3LDggQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBo
aWRkZW47IH0KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxh
Ym9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHls
ZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAq
IDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRo
ZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYw
MHB4OyBmb250LXNpemU6IDEuODc1cmVtIj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNl
IGJlY2F1c2Ugb2YgaXRzIHdpZHRoOjYwMHB4IGl0IGJlY29tZXMgYSBjbHVzdGVyLjxicj4KICAg
ICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKaW5k
ZXggYjJlZjAxMDdjOWVjNjZjNzIzYWU5NmZiNDQ2OTZiZjMxNjE0NDdjYy4uNTBmOGU2YTZiMWVi
YWJjYTI0MWZhYjM5ZjMxYjQwMTllZDA4ZGUyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbApA
QCAtMjYsOCArMjYsOCBAQCBpZiAod2luZG93LmludGVybmFscykgewogICAgICAgICBMb3JlbSBp
cHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRv
IGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlx
dWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgICAg
ICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0IDIwcHggY29tcHV0ZWQgZm9u
dC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0cyB3aWR0aDo4MDBweCBpdCBp
cyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48YnI+CisgICAgPGRpdiBzdHls
ZT0id2lkdGg6IDYwMHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQg
dG8gMzBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGJlY2F1c2Ug
b2YgaXRzIHdpZHRoOjYwMHB4IGl0IGJlY29tZXMgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgogICAgIDwvZGl2PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKaW5kZXggYTkwYTAxM2FmM2Vk
NGVlMDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4OC4uOWM0MWQ1ZmU0OWFmYjBlMWQ4YWIxMzc1YzZl
YzE2MmVjZmUwNWNkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbApAQCAtMTQsOSArMTQsOCBAQCBib2R5
IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogPGRpdiBz
dHlsZT0id2lkdGg6IDMyMHB4OyBmb250LXNpemU6IDFyZW0iPgogCVRoaXMgdGV4dCBzaG91bGQg
bm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0
b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMgZGl2IGlzIG5hcnJvdy48YnI+CiAgICAg
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLgotCTxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgCVRoaXMgdGV4dCBz
aG91bGQgbm90IGJlIGF1dG9zaXplZCBzaW5jZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgd2lkdGgg
b2YgdGhlIHBhcmVudCBibG9jayB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXV0b3Np
emluZyBtdWx0aXBsaWVyLjxicj4KLSAgICAJRklYTUU6IElkZWFsbHkgdGhpcyB0ZXh0IHNob3Vs
ZCBiZSBhdXRvc2l6ZWQuIFdpbGwgbmVlZCB0byBiZSBmaXhlZCBsYXRlci48YnI+CisJPGRpdiBz
dHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+CisgICAgCVRoaXMgdGV4dCBz
aG91bGQgYmUgYXV0b3NpemVkIHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8z
MjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiBpdHMgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1
c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29u
c2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1
bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbApp
bmRleCA0NTRlYTYxZjNhZjc5YWZmODdiN2QzMzBjNTViNzkxNzYzYjUyMDdlLi43OTc2N2VlZWVl
OGZiMDIxMGRjNmM0NGFkZDNiYzU2ZDIwMTgwMzY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCkBAIC0yNCw4ICsyNCw3IEBAIGlmICh3
aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVk
LCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBj
bHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xv
ciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2Qg
dGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAg
PGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUg
YXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50
IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxp
ZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKyAgICAJVGhpcyB0ZXh0IHNob3Vs
ZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkg
c2luY2UgaXQncyB3aWRlciB0aGFuIGl0cyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVy
IGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0
ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1
dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ct
b3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0
b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAppbmRl
eCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUwNTAwNzE4YmU3MmJjLi5jZDYwZWJkNTc0ZjIx
ZDVhYzk2NzhlMDc0N2RmZWEwZmIyZDVjNTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJv
dy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbApAQCAtMTMsOCArMTMsOCBAQCBib2R5IHsg
d2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogCiA8ZGl2IHN0
eWxlPSJ3aWR0aDogNDAwcHgiPgogICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgot
ICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAg
ICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNp
emUgKDE2ICogNDAwLzMyMCksIHNpbmNlIHRoaXMgaXMgcGFydCBvZiB0aGUgcm9vdCBjbHVzdGVy
LCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRzIGFyZSBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgNDAw
cHggd2lkZSBncmFuZHBhcmVudCBvZiB0aGlzIGRpdi48YnI+CisgICAgPGRpdiBzdHlsZT0id2lk
dGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQg
YmUgYXV0b3NpemVkIHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApLCBz
aW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGNvbnRhaW5pbmcgY2x1c3RlciBhbmQgdGhlcmVmb3Jl
IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9y
IHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0
ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8
L2Rpdj4KICAgPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCmlu
ZGV4IGY3NGE3YTIxNDA4YzhhZWY0NWZiYWVkODY1ZjU5ZjdlYTkzYjgxZTAuLjJlMDM4OWJhYjEy
MThkNTJkY2JhMWUzOTNiODBmZjhhNWIzYjM5NmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC5odG1sCkBAIC0yMyw3ICsyMyw3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
CiA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgiPgogICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBz
Y3JvbGwiPgogICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMgdGV4
dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQw
MC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4
dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3Jh
bmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSwgc2luY2Ug
aXQncyB3aWRlciB0aGFuIHRoZSBjb250YWluaW5nIGNsdXN0ZXIgYW5kIHRoZXJlZm9yZSBiZWNv
bWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQg
YW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9y
IGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+
CiAgIDwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177998</attachid>
            <date>2012-12-06 05:13:44 -0800</date>
            <delta_ts>2012-12-07 06:07:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121206131108.patch</filename>
            <type>text/plain</type>
            <size>34717</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RiNGJjNGIxODA4NjJj
ZTI5M2NkNDViYzA1Y2E2NjQyNDQ1MWJjMy4uZWRkM2Y1NDY3ZDgwMGUyODJmNDA5YWRhZWZmMzYw
MTgxNzhkMTUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxs
IHRleHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIGRlc2NlbmRhbnQgdGV4dCBub2RlcyBoYWQgdG8gYmUgbW9kaWZpZWQgdG8K
KyAgICAgICAgYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gZmluZGluZyB0aGUg
TENBIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2l2ZW4gY29udGFpbmVyIGlzIGEgY2x1c3Rl
ci4KKyAgICAgICAgQWZ0ZXIgdGhlIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBh
bnkgb2YgdGhlIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRo
ZSBuZXcKKyAgICAgICAgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVh
ZnMgYW5kIGEgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBh
cmUgbm8gY2x1c3RlcnMgaW4gdGhlIHBhdGhzIGZyb20gdGhlIExDQSB0byB0aGUgZmlyc3QgYW5k
IGxhc3QgdGV4dCBsZWFmcy4KKworICAgICAgICBUaGUgY2hhbmdlIGZpeGVzIHNldmVyYWwgY2Fz
ZXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKTogY2FsbHMgcHJvY2Vzc0NsdXN0ZXIgd2l0aCBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKTogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgKGZvciBhc3NlcnRpb24gb25seSks
IGZpbmRzIG5ldyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGFuZCBwYXNzZXMgaXQg
aW50byBwcm9jZXNzQ29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbnRhaW5lcik6IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVy
IHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVz
dGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3aWRlciB0
aGFuIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5n
IGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyKS4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5pZW5jZSBt
ZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6IHBhc3NlcyBuZXcgcGFyYW1ldGVy
IHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOiB1c2VzIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250
YWluaW5nQWxsVGV4dCk6IHJlaW1wbGVtZW50ZWQgdG8gaW5jcmVtZW50YWxseSBmaWx0ZXIgb3V0
IGNsdXN0ZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGN1cnJlbnQgYmxvY2sgY29udGFpbmlu
ZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIuCisgICAgICAgIChmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3RlclN0YXJ0aW5nRnJvbSk6IGZpbmRzIHRleHQgbGVhZiB0aGF0IGRv
ZXNuJ3QgYmVsb25nIHRvIGFueSBjbHVzdGVyLCBzdGFydHMgc2VhcmNoaW5nIGZyb20gdGhlIGdp
dmVuIGNoaWxkIG9mIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHBhdGguCisgICAgICAgIChvYmplY3RG
aXJzdENoaWxkKTogY29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgIChvYmplY3ROZXh0U2li
bGluZyk6IGNvbnZlbmllbmNlIGZ1bmN0aW9uIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24uCisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKFRleHRBdXRvc2l6
ZXIpOiByZW1vdmVkIHVudXNlZCBkZWNsYXJhdGlvbnMsIGFkZGVkIGEgdHlwZWRlZiBmb3IgYSB2
ZWN0b3Igb2YgUmVuZGVyT2JqZWN0cy4KKwogMjAxMi0xMi0wNiAgVWxhbiBEZWdlbmJhZXYgIDx1
bGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbdjhdIEZpeCBoaWRkZW4gcHJvcGVydHkgbmFt
ZSBvZiBWOEFycmF5QnVmZmVyVmlldyBmbGFnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwCmluZGV4IGIxMDJiMmI1YjI5Mzc1YzcyODQ5MmMxYzk4NGJmN2Y4NjVk
ODcyMjEuLmFmMTQwYjVmM2VhNDFjOGUxMzk2ZjkwZTBlOTQ0ZmFhZjA1NTQ4NjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAK
IAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUs
MzggKzg2LDM4IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2Jq
ZWN0KiBsYXlvdXRSb290KQogICAgICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAg
d2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1dG9zaXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlz
QXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpKQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1
dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIDApKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+
Y29udGFpbmluZ0Jsb2NrKCk7CiAKLSAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWlu
ZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXIs
IGNvbnRhaW5lciwgMCwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNs
dXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3Qs
IGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1
dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
OworICAgIEFTU0VSVChpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQpKTsKIAogICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRo
IG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQogICAgIC8vIFJlbmRlclZp
ZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5k
CiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0
IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRl
ZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCiAgICAgLy8g
YW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0
Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rl
cik7Ci0gICAgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCA9IGxvd2VzdENvbW1vbkFuY2VzdG9y
LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGRlZXBlc3RC
bG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
KGNsdXN0ZXIsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIGZsb2F0IHRleHRXaWR0aCA9
IGRlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAK
ICAgICBmbG9hdCBtdWx0aXBsaWVyID0gMTsKLSAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGxvd2VzdENvbW1vbkFuY2VzdG9yLCBjb21tb25BbmNlc3RvcldpZHRoKSkgeworICAgIGlm
IChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoZGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQs
IHRleHRXaWR0aCkpIHsKICAgICAgICAgaW50IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXIt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgo
KSA6IHdpbmRvd0luZm8ud2luZG93U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxM
YXlvdXRXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJ
bmZvLm1pbkxheW91dFNpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWln
aHQoKTsKICAgICAgICAgLy8gSWdub3JlIGJveCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91
dCB3aWR0aCwgdG8gYXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9n
aWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWluPGZsb2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBs
b2dpY2FsTGF5b3V0V2lkdGgpOworICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0g
c3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdpZHRoKTsKIAogICAgICAg
ICBtdWx0aXBsaWVyID0gbG9naWNhbENsdXN0ZXJXaWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsK
ICAgICAgICAgbXVsdGlwbGllciAqPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3Np
emluZ0ZvbnRTY2FsZUZhY3RvcigpOwogICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4w
ZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVy
LCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFp
bmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgZGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQs
IHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgY29udGVudEhlaWdo
dElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKQEAgLTEzOSw3ICsx
NDAsNyBAQCBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5k
ZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRh
aW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5k
ZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9v
dCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewogICAgIEFT
U0VSVChpc0F1dG9zaXppbmdDb250YWluZXIoY29udGFpbmVyKSk7CiAKQEAgLTE1NSwxMCArMTU2
LDEwIEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBs
aWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSCiAgICAgICAgICAgICAvLyBGSVhNRTogSW5j
cmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5k
ZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAg
ICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaykpCi0gICAg
ICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50Qmxv
Y2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICBpZiAoaXNDb250
YWluZXJBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQpKQorICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywg
ZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ss
IHdpbmRvd0luZm8pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb2Nlc3ND
b250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdp
bmRvd0luZm8pOworICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwg
ZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ss
IHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVP
cmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJlZVJv
b3QpOwogICAgIH0KQEAgLTIxNCwxNCArMjE1LDE0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNB
dXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihj
b25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQ29udGFp
bmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKIHsKICAgICAvLyAiQXV0
b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3NpemluZyBjb250YWluZXJzIHdpdGhp
biB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBhIHVuaWZvcm0gdGV4dCBzaXplIG11
bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKICAgICAvLyB0aGUgbWFqb3Igc2VjdGlv
bnMgb2YgdGhlIHBhZ2UgbG9vayBpbnRlcm5hbGx5IGNvbnNpc3RlbnQuCi0gICAgLy8gQWxsIHRo
ZWlyIGRlc2NlbmRlbnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBt
dXN0IHNoYXJlCisgICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRhbnRzIChpbmNsdWRpbmcgb3RoZXIg
YXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCiAgICAgLy8gdGhlIHNhbWUgbXVsdGlw
bGllciwgZXhjZXB0IGZvciBzdWJ0cmVlcyB3aGljaCBhcmUgdGhlbXNlbHZlcyBjbHVzdGVycywK
LSAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNjZW5kZW50IGNvbnRhaW5lcnMgbWlnaHQgbm90
IGJlIGF1dG9zaXplZCBhdCBhbGwKKyAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNjZW5kYW50
IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBhbGwKICAgICAvLyAoZm9yIGV4
YW1wbGUgaWYgdGhlaXIgaGVpZ2h0IGlzIGNvbnN0cmFpbmVkKS4KICAgICAvLyBBZGRpdGlvbmFs
bHksIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCByZXF1aXJlcyBlYWNoIGNsdXN0ZXIgdG8gY29u
dGFpbiBhCiAgICAgLy8gbWluaW11bSBhbW91bnQgb2YgdGV4dCwgd2l0aG91dCB3aGljaCBpdCB3
b24ndCBiZSBhdXRvc2l6ZWQuCkBAIC0yMzAsMTEgKzIzMSwxMyBAQCBib29sIFRleHRBdXRvc2l6
ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQogICAg
IC8vIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMgKGh0dHA6Ly93My5vcmcvVFIvY3NzMy1ib3gv
I2Zsb3ctcm9vdCksIHNpbmNlCiAgICAgLy8gZmxvdyByb290cyBjb3JyZXNwb25kIHRvIGJveCBj
b250YWluZXJzIHRoYXQgYmVoYXZlIHNvbWV3aGF0CiAgICAgLy8gaW5kZXBlbmRlbnRseSBmcm9t
IHRoZWlyIHBhcmVudCAoZm9yIGV4YW1wbGUgdGhleSBkb24ndCBvdmVybGFwIGZsb2F0cykuCi0g
ICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IGZsb3cgcm9vdCBhbHNvIGNvbnZlbmllbnRs
eSBpbmNsdWRlcyBtb3N0IG9mIHRoZQorICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mIGEgZmxvdyBy
b290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCiAgICAgLy8gd2F5cyB0
aGF0IGEgYm94IGFuZCBpdHMgY2hpbGRyZW4gY2FuIGhhdmUgc2lnbmlmaWNhbnRseSBkaWZmZXJl
bnQgd2lkdGgKICAgICAvLyBmcm9tIHRoZSBib3gncyBwYXJlbnQgKHdlIHdhbnQgdG8gYXZvaWQg
aGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50CiAgICAgLy8gd2lkdGggYmxvY2tzIHdpdGhp
biBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dlciBibG9ja3Mgd291bGQgZW5kIHVwCiAgICAg
Ly8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIG5lY2Vzc2FyeSkuCisgICAgLy8gSWYg
YSBjb250YWluZXIgaXMgd2lkZXIgdGhhbiBpdHMgfHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRl
eHR8IHBhcmVudCwgaXQKKyAgICAvLyBiZWNvbWVzIGEgY2x1c3Rlci4KICAgICBBU1NFUlQoaXNB
dXRvc2l6aW5nQ29udGFpbmVyKHJlbmRlcmVyKSk7CiAKICAgICByZXR1cm4gcmVuZGVyZXItPmlz
UmVuZGVyVmlldygpCkBAIC0yNDQsMTMgKzI0NywyMCBAQCBib29sIFRleHRBdXRvc2l6ZXI6Omlz
QXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQogICAgICAgICB8
fCByZW5kZXJlci0+aXNUYWJsZUNhcHRpb24oKQogICAgICAgICB8fCByZW5kZXJlci0+aXNGbGV4
aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKQogICAgICAgICB8fCByZW5kZXJlci0+aGFzQ29s
dW1ucygpCi0gICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsK
KyAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpCisgICAgICAg
IHx8IChwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0CisgICAgICAgICAgICAmJiByZW5kZXJl
ci0+Y29udGVudExvZ2ljYWxXaWR0aCgpID4gcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dC0+
Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAvLyBGSVhNRTogVGFibGVzIG5lZWQgc3BlY2lh
bCBoYW5kbGluZyB0byBtdWx0aXBseSBhbGwgdGhlaXIgY29sdW1ucyBieQogICAgIC8vIHRoZSBz
YW1lIGFtb3VudCBldmVuIGlmIHRoZXkncmUgZGlmZmVyZW50IHdpZHRoczsgc28gZG8gaGFzQ29s
dW1ucygpCiAgICAgLy8gcmVuZGVyZXJzLCBhbmQgcHJvYmFibHkgZmxleGJveGVzLi4uCiB9CiAK
LWJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRl
ckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciwgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCkK
K2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7
CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmplY3QpICYmIGlzQ29udGFpbmVy
QXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3QpLCBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0KTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6
ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2Nr
V2lkdGgpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgY2x1c3RlcnMgdGhhdCBjb250YWluIGxl
c3MgdGhhbiA0IGxpbmVzIG9mIHRleHQgKGluCiAgICAgLy8gcHJhY3RpY2UgbGVzcyBsaW5lcyBh
cmUgcmVxdWlyZWQsIHNpbmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoCkBAIC0yNjMsMTUg
KzI3MywxNSBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChj
b25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZQogICAgIC8vIGluIGFuZCBwYW4gZnJv
bSBzaWRlIHRvIHNpZGUgdG8gcmVhZCBlYWNoIGxpbmUsIHNpbmNlIGlmIHRoZXJlIGFyZSB2ZXJ5
CiAgICAgLy8gZmV3IGxpbmVzIG9mIHRleHQgeW91J2xsIG9ubHkgbmVlZCB0byBwYW4gYWNyb3Nz
IG9uY2Ugb3IgdHdpY2UuCiAgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OwotICAg
IGZsb2F0IG1pblRleHRXaWR0aCA9IGNvbW1vbkFuY2VzdG9yV2lkdGggKiBtaW5MaW5lc09mVGV4
dDsKKyAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRoICogbWluTGluZXNPZlRleHQ7
CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0
aChsb3dlc3RDb21tb25BbmNlc3RvciwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgIG1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICBpZiAodGV4dFdp
ZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRo
KGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQm
IHRleHRXaWR0aCkKK3ZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lk
dGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCkK
IHsKICAgICBib29sIHNraXBMb2NhbFRleHQgPSBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChj
b250YWluZXIpOwogCkBAIC0yODEsOCArMjkxLDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG8K
ICAgICAgICAgICAgIHRleHRXaWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRl
cmVkVGV4dExlbmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUo
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkp
IHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJs
b2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaykpCi0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lk
dGgoZGVzY2VuZGFudEJsb2NrLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAg
ICBpZiAoIWlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRl
eHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRX
aWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdpZHRoID49IG1p
blRleHRXaWR0aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI5MCw2ICszMDAsNyBAQCB2b2lk
IFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluZXIsIGZsbwogICAgIH0KIH0KIAorLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0
cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFpbmVycyAo
YnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KIFJlbmRlck9iamVjdCog
VGV4dEF1dG9zaXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWlu
ZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5
V2l0aGluKQogewogICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4gfHwgIWlzQXV0b3Npemlu
Z0NvbnRhaW5lcihjdXJyZW50KSkKQEAgLTMwNiw2OCArMzE3LDkzIEBAIFJlbmRlck9iamVjdCog
VGV4dEF1dG9zaXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWlu
ZXJzKGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0
b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxv
Y2sqIGNsdXN0ZXIpCitjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBl
c3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBjb25z
dCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKIHsKLSAgICBBU1NF
UlQoaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSk7CisgICAgQVNTRVJUX1VOVVNFRChwYXJl
bnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNs
dXN0ZXIsIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpKTsKIAotICAgIHNpemVfdCBmaXJz
dERlcHRoID0gMDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBmaW5k
Rmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRvTGFz
dCk7Ci0gICAgaWYgKCFmaXJzdFRleHRMZWFmKQorICAgIFJlbmRlck9iamVjdHMgZmlyc3RQYXRo
KDEsIGNsdXN0ZXIpOworICAgIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyU3RhcnRpbmdG
cm9tKEZpcnN0VG9MYXN0LCBmaXJzdFBhdGgsIGNsdXN0ZXItPmZpcnN0Q2hpbGQoKSk7CisgICAg
aWYgKGZpcnN0UGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBjbHVzdGVyOwogCi0gICAg
c2l6ZV90IGxhc3REZXB0aCA9IDA7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsYXN0VGV4dExl
YWYgPSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBsYXN0RGVwdGgsIExh
c3RUb0ZpcnN0KTsKLSAgICBBU1NFUlQobGFzdFRleHRMZWFmKTsKLQotICAgIC8vIEVxdWFsaXpl
IHRoZSBkZXB0aHMgaWYgbmVjZXNzYXJ5LiBPbmx5IG9uZSBvZiB0aGUgd2hpbGUgbG9vcHMgYmVs
b3cgd2lsbCBnZXQgZXhlY3V0ZWQuCi0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBmaXJzdE5vZGUg
PSBmaXJzdFRleHRMZWFmOwotICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGFzdE5vZGUgPSBsYXN0
VGV4dExlYWY7Ci0gICAgd2hpbGUgKGZpcnN0RGVwdGggPiBsYXN0RGVwdGgpIHsKLSAgICAgICAg
Zmlyc3ROb2RlID0gZmlyc3ROb2RlLT5wYXJlbnQoKTsKLSAgICAgICAgLS1maXJzdERlcHRoOwot
ICAgIH0KLSAgICB3aGlsZSAobGFzdERlcHRoID4gZmlyc3REZXB0aCkgewotICAgICAgICBsYXN0
Tm9kZSA9IGxhc3ROb2RlLT5wYXJlbnQoKTsKLSAgICAgICAgLS1sYXN0RGVwdGg7Ci0gICAgfQot
Ci0gICAgLy8gR28gdXAgZnJvbSBib3RoIG5vZGVzIHVudGlsIHRoZSBwYXJlbnQgaXMgdGhlIHNh
bWUuIEJvdGggcG9pbnRlcnMgd2lsbCBwb2ludCB0byB0aGUgTENBIHRoZW4uCi0gICAgd2hpbGUg
KGZpcnN0Tm9kZSAhPSBsYXN0Tm9kZSkgewotICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUt
PnBhcmVudCgpOwotICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wYXJlbnQoKTsKKyAgICBS
ZW5kZXJPYmplY3RzIGxhc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGZpbmRGaXJzdFRleHRMZWFm
Tm90SW5DbHVzdGVyU3RhcnRpbmdGcm9tKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgY2x1c3Rlci0+
bGFzdENoaWxkKCkpOworICAgIEFTU0VSVCghbGFzdFBhdGguaXNFbXB0eSgpKTsKKworICAgIGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gMDsKKyAgICB3aGlsZSAo
IWJsb2NrQ29udGFpbmluZ0FsbFRleHQpIHsKKyAgICAgICAgc2l6ZV90IG1pblNpemUgPSBzdGQ6
Om1pbihmaXJzdFBhdGguc2l6ZSgpLCBsYXN0UGF0aC5zaXplKCkpOworICAgICAgICBzaXplX3Qg
Zmlyc3ROb3RFcXVhbEluZGV4ID0gMTsKKyAgICAgICAgd2hpbGUgKGZpcnN0Tm90RXF1YWxJbmRl
eCA8IG1pblNpemUgJiYgZmlyc3RQYXRoW2ZpcnN0Tm90RXF1YWxJbmRleF0gPT0gbGFzdFBhdGhb
Zmlyc3ROb3RFcXVhbEluZGV4XSkKKyAgICAgICAgICAgIGZpcnN0Tm90RXF1YWxJbmRleCsrOwor
CisgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaXJz
dFBhdGhbZmlyc3ROb3RFcXVhbEluZGV4IC0gMV07CisgICAgICAgIGlmIChsb3dlc3RDb21tb25B
bmNlc3Rvci0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgYmxvY2tDb250YWluaW5nQWxs
VGV4dCA9IHRvUmVuZGVyQmxvY2sobG93ZXN0Q29tbW9uQW5jZXN0b3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gbG93ZXN0Q29tbW9uQW5jZXN0
b3ItPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBBU1NFUlQoYmxvY2tDb250YWluaW5nQWxs
VGV4dC0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFu
eSBvZiB0aGUgdGV4dCBsZWFmcycgcGFyZW50cyBhcmUgZ29pbmcgdG8gYmUgY2x1c3RlcnMgZHVl
IHRvIGJlaW5nIHdpZGVyIHRoYW4gdGhlIGJsb2NrIGp1c3QgZm91bmQuCisgICAgICAgIC8vIElm
IHNvLCBzZWFyY2ggZm9yIHRoZSB0ZXh0IGxlYWZzIGFnYWluIHN0YXJ0aW5nIGZyb20gdGhlIG5l
eHQgc2libGluZyBvZiB0aGUgZm91bmQgY2x1c3Rlci4KKyAgICAgICAgYm9vbCBmaXJzdFRleHRM
ZWFmSW52YWxpZGF0ZWQgPSBjb3JyZWN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKEZpcnN0VG9M
YXN0LCBmaXJzdFBhdGgsIGZpcnN0Tm90RXF1YWxJbmRleCwgYmxvY2tDb250YWluaW5nQWxsVGV4
dCk7CisgICAgICAgIGJvb2wgbGFzdFRleHRMZWFmSW52YWxpZGF0ZWQgPSBjb3JyZWN0Rmlyc3RU
ZXh0TGVhZklmSW5DbHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgZmlyc3ROb3RFcXVhbElu
ZGV4LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKyAgICAgICAgaWYgKGZpcnN0VGV4dExlYWZJ
bnZhbGlkYXRlZCB8fCBsYXN0VGV4dExlYWZJbnZhbGlkYXRlZCkgeworICAgICAgICAgICAgaWYg
KGZpcnN0UGF0aC5pc0VtcHR5KCkgfHwgbGFzdFBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHVzdGVyOworICAgICAgICAgICAgYmxvY2tDb250YWluaW5nQWxsVGV4dCA9
IDA7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZmlyc3ROb2RlLT5pc1JlbmRlckJsb2Nr
KCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJsb2NrKGZpcnN0Tm9kZSk7Ci0KLSAgICAvLyBj
b250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0
IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4gZmluZGluZyB0aGUKLSAgICAvLyBjb250YWluZXIg
b2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0
IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMgdGV4dAotICAgIC8vIG5vZGVzIGxvd2VzdCBjb21t
b24gYW5jZXN0b3IgYXMgaXNBdXRvc2l6aW5nQ2x1c3RlciB3b3VsZCBoYXZlIG1hZGUgdGhlbSBp
bnRvIHRoZWlyIG93biBpbmRlcGVuZGVudAotICAgIC8vIGNsdXN0ZXIuCi0gICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5pbmdCbG9jayA9IGZpcnN0Tm9kZS0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAg
QVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOwotCi0gICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9jazsKKyAgICByZXR1cm4gYmxvY2tDb250YWluaW5nQWxsVGV4
dDsKIH0KIAotY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0
TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCwgc2l6ZV90JiBkZXB0
aCwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgVGV4dEF1dG9zaXplcjo6Zmlu
ZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXJTdGFydGluZ0Zyb20oVHJhdmVyc2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgUmVuZGVyT2JqZWN0cyYgcGF0aCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjaGls
ZCkKIHsKLSAgICBpZiAocGFyZW50LT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXJlbnQt
PmlzVGV4dCgpID8gcGFyZW50IDogMDsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCA9
IHBhdGgubGFzdCgpOworICAgIEFTU0VSVCghY2hpbGQgfHwgY2hpbGQtPnBhcmVudCgpID09IHBh
cmVudCk7CiAKLSAgICArK2RlcHRoOwotICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAo
ZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50
LT5sYXN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9z
aXppbmdDb250YWluZXIoY2hpbGQpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxv
Y2soY2hpbGQpKSkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmlu
ZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pOwotICAg
ICAgICAgICAgaWYgKGxlYWYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlYWY7CisgICAgICAg
IGlmIChjaGlsZC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGV4dCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICghaXNBdXRvc2l6
aW5nQ2x1c3RlcihjaGlsZCwgMCkpIHsKKyAgICAgICAgICAgIHBhdGguYXBwZW5kKGNoaWxkKTsK
KyAgICAgICAgICAgIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyU3RhcnRpbmdGcm9tKGRp
cmVjdGlvbiwgcGF0aCwgb2JqZWN0Rmlyc3RDaGlsZChkaXJlY3Rpb24sIGNoaWxkKSk7CisgICAg
ICAgICAgICBpZiAocGF0aC5sYXN0KCkgIT0gcGFyZW50KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3Qp
ID8gY2hpbGQtPm5leHRTaWJsaW5nKCkgOiBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgIGNoaWxkID0gb2JqZWN0TmV4dFNpYmxpbmcoZGlyZWN0aW9uLCBjaGlsZCk7CiAgICAgfQot
ICAgIC0tZGVwdGg7CisgICAgcGF0aC5yZW1vdmVMYXN0KCk7Cit9CiAKLSAgICByZXR1cm4gMDsK
K2Jvb2wgVGV4dEF1dG9zaXplcjo6Y29ycmVjdEZpcnN0VGV4dExlYWZJZkluQ2x1c3RlcihUcmF2
ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBwYXRoLCBzaXplX3Qgc3Rh
cnRGcm9tLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkK
K3sKKyAgICBzaXplX3QgY2x1c3RlckluZGV4ID0gcGF0aC5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IHN0YXJ0RnJvbTsgaSA8IHBhdGguc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChpc0F1
dG9zaXppbmdDbHVzdGVyKHBhdGhbaV0sIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpKSB7
CisgICAgICAgICAgICBjbHVzdGVySW5kZXggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGlmIChjbHVzdGVySW5kZXggPT0gcGF0aC5zaXplKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2x1c3RlciA9IHBhdGhbY2x1
c3RlckluZGV4XTsKKyAgICBwYXRoLnJlbW92ZShjbHVzdGVySW5kZXgsIHBhdGguc2l6ZSgpIC0g
Y2x1c3RlckluZGV4KTsKKyAgICBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlclN0YXJ0aW5n
RnJvbShkaXJlY3Rpb24sIHBhdGgsIG9iamVjdE5leHRTaWJsaW5nKGRpcmVjdGlvbiwgY2x1c3Rl
cikpOworICAgIHJldHVybiB0cnVlOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRv
c2l6ZXI6Om9iamVjdEZpcnN0Q2hpbGQoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRmly
c3RUb0xhc3QpID8gb2JqZWN0LT5maXJzdENoaWxkKCkgOiBvYmplY3QtPmxhc3RDaGlsZCgpOwor
fQorCitjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om9iamVjdE5leHRTaWJsaW5n
KFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQoreworICAgIHJldHVybiAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IG9iamVjdC0+bmV4
dFNpYmxpbmcoKSA6IG9iamVjdC0+cHJldmlvdXNTaWJsaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4
IGE3MDliMTE2OGU0NGRmMDBlYzFmOWQ3M2JiZTVlNTE2ZmU5MjY3NzQuLmNhZGM1NWI3MzY5Njcx
ZDRjZTRkN2RkOGEzZjg1OWQ4ZWI4ZTQzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuaApAQCAtMjgsMTcgKzI4LDE2IEBACiAKICNpZiBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQogCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm87CiAKQEAgLTU1LDYgKzU0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBm
bG9hdCBjb21wdXRlQXV0b3NpemVkRm9udFNpemUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgZmxvYXQg
bXVsdGlwbGllcik7CiAKIHByaXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8Y29uc3QgUmVuZGVy
T2JqZWN0Kj4gUmVuZGVyT2JqZWN0czsKICAgICBlbnVtIFRyYXZlcnNhbERpcmVjdGlvbiB7CiAg
ICAgICAgIEZpcnN0VG9MYXN0LAogICAgICAgICBMYXN0VG9GaXJzdApAQCAtNjIsMjcgKzYyLDQ0
IEBAIHByaXZhdGU6CiAKICAgICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERvY3VtZW50Kik7CiAK
LSAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9j
ayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3Np
emluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3Rl
cihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVu
ZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJv
Y2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBj
b25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAg
ICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQpOwogCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZW5kZXJlciBpcyBhbiBhdXRvc2l6aW5nIGNvbnRhaW5l
ci4KICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayopOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYXV0b3NpemluZyBjb250
YWluZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVyLiBDaGVja3MgaWYgdGhlIGNvbnRhaW5lciBp
cyB3aWRlciB0aGFuCisgICAgLy8gfHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHR8IGlmIHRo
ZSBwb2ludGVyIGlzIG5vdCBudWxsLgorICAgIHN0YXRpYyBib29sIGlzQ29udGFpbmVyQXV0b3Np
emluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50
QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZl
biByZW5kZXJlciBpcyBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIuIENoZWNrcyBpZiB0aGUgcmVuZGVy
ZXIgaXMgd2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0fCBp
ZiB0aGUgcG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdD
bHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KTsKIAotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNv
bW1vbkFuY2VzdG9yV2lkdGgpOwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwg
ZmxvYXQmIHRleHRXaWR0aCk7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9j
a1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAg
IC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRl
c2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhl
bXNlbHZlcykuCi0gICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKLQotICAgIC8vIEZpbmRzIHRoZSBsb3dlc3Qg
Y29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVzY2VuZGFudAotICAg
IC8vIHRleHQgbm9kZSAoZXhjbHVkaW5nIHRob3NlIGJlbG9uZ2luZyB0byBvdGhlciBhdXRvc2l6
aW5nIGNsdXN0ZXJzKS4KLSAgICBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZpbmREZWVwZXN0
QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rlcik7Ci0KLSAg
ICAvLyBEZXBlbmRpbmcgb24gdGhlIHRyYXZlcnNhbCBkaXJlY3Rpb24gc3BlY2lmaWVkLCBmaW5k
cyB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgbGVhZiB0ZXh0IG5vZGUgY2hpbGQgdGhhdCBkb2Vzbid0
Ci0gICAgLy8gYmVsb25nIHRvIGFueSBjbHVzdGVyLgotICAgIHN0YXRpYyBjb25zdCBSZW5kZXJP
YmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCos
IHNpemVfdCYgZGVwdGgsIFRyYXZlcnNhbERpcmVjdGlvbik7CisgICAgc3RhdGljIFJlbmRlck9i
amVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisKKyAgICAv
LyBJZiB0aGVyZSBhcmUgYW55IGRlc2NlbmRhbnQgdGV4dCBub2RlcyBvZiB0aGUgZ2l2ZW4gY2x1
c3RlciB0aGF0IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgYW55IGRlc2NlbmRhbnQgY2x1c3RlciwK
KyAgICAvLyByZXR1cm5zIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIGZvciB0aGVzZSB0ZXh0
IG5vZGVzLiBPdGhlcndpc2UsIHJldHVybnMgdGhlIGNsdXN0ZXIgaXRzZWxmLgorICAgIHN0YXRp
YyBjb25zdCBSZW5kZXJCbG9jayogZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNv
bnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tD
b250YWluaW5nQWxsVGV4dCk7CisKKyAgICAvLyBTZWFyY2hlcyBmb3IgdGhlIGZpcnN0IHRleHQg
bGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIGFueSBkZXNjZW5kYW50IGF1dG9zaXppbmcgY2x1
c3RlciBzdGFydGluZyB0cmVlIHRyYXZlcnNhbCBmcm9tCisgICAgLy8gdGhlIGdpdmVuIGNoaWxk
IG9mIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgcGF0aC4gRm9sbG93cyB0aGUgZ2l2ZW4gdHJlZSB0
cmF2ZXJzYWwgZGlyZWN0aW9uLiBJZiBzdWNoIHRleHQgbGVhZiBpcyBub3QgZm91bmQsCisgICAg
Ly8gdGhlIGxhc3Qgb2JqZWN0IGlzIHJlbW92ZWQgZnJvbSB0aGUgcGF0aC4KKyAgICBzdGF0aWMg
dm9pZCBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlclN0YXJ0aW5nRnJvbShUcmF2ZXJzYWxE
aXJlY3Rpb24sIFJlbmRlck9iamVjdHMmIHBhdGgsIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQp
OworCisgICAgLy8gQ2hlY2tzIGlmIHRoZXJlIGlzIGFuIGF1dG9zaXppbmcgY2x1c3RlciBpbiB0
aGUgZ2l2ZW4gcGF0aCBiZXR3ZWVuIHRoZSBnaXZlbiBpbmRleCBhbmQgdGhlIGxhc3QgZWxlbWVu
dCBpbiB0aGUgcGF0aC4KKyAgICAvLyBJZiBjbHVzdGVyIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBm
YWxzZS4gT3RoZXJ3aXNlLCByZW1vdmVzIGV2ZXJ5IG5vZGUgaW4gdGhlIHBhdGggaW5jbHVkaW5n
IHRoZSBmb3VuZCBjbHVzdGVyIGFuZCBjb250aW51ZXMKKyAgICAvLyB0cmF2ZXJzaW5nIHRoZSB0
cmVlIHRvIGZpbmQgdGhlIG5leHQgdGV4dCBsZWFmIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uIFJl
dHVybnMgdHJ1ZSB3aGVuIHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCisgICAgc3RhdGljIGJvb2wg
Y29ycmVjdEZpcnN0VGV4dExlYWZJZkluQ2x1c3RlcihUcmF2ZXJzYWxEaXJlY3Rpb24sIFJlbmRl
ck9iamVjdHMmIHBhdGgsIHNpemVfdCBzdGFydEZyb20sIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJl
bnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IG9y
IHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQg
ZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdEZpcnN0Q2hp
bGQoVHJhdmVyc2FsRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICAvLyBSZXR1
cm5zIHRoZSBuZXh0IG9yIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIHRoZSBvYmplY3QgZGVwZW5k
aW5nIG9uIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdE5leHRTaWJsaW5nKFRyYXZlcnNhbERpcmVjdGlvbiwgY29uc3QgUmVuZGVy
T2JqZWN0Kik7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDU0NjFj
ODljNjY4NDRkYTgzNWRhZGRlMDZjZDg4NzhmZDIyM2Q5MC4uNzA5M2E5ZjhlNjhiNDk0YmZhNzQ4
ZjAwZTI2MjkwNWU1NDg4MjBjZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTExLTI5ICBB
bnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9z
aXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hv
dWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBj
aGVja3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0
aGUgd2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRl
eHQgbm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyKS4gVGhlIGVuY2xvc2luZyBSZW5kZXJC
bG9jayBpcyBwYXNzZWQgdGhyb3VnaG91dAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2Rz
LgorICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRleHQgbm9kZXMgbG93
ZXN0IGNvbW1vbiBhbmNlc3RvciBoYWQgdG8gYmUgbW9kaWZpZWQgdG8gYXZvaWQgY2lyY3VsYXIg
ZGVwZW5kZW5jeQorICAgICAgICBiZXR3ZWVuIGZpbmRpbmcgTENBIGFuZCBkZXRlcm1pbmluZyBp
ZiBjb250YWluZXIgaXMgYSBjbHVzdGVyLiBBZnRlciBpbml0aWFsIExDQSBpcyBmb3VuZCwgd2Ug
Y2hlY2sgaWYgYW55IG9mCisgICAgICAgIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1
c3RlcnMgZHVlIHRvIHRoZSBuZXcgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRl
eHQgbGVhZnMgYW5kIG5ldyBMQ0EuCisgICAgICAgIFRoaXMgaXMgcmVwZWF0ZWQgdW50aWwgdGhl
cmUgYXJlIG5vIGNsdXN0ZXJzIGluIHBhdGhzIGZyb20gTENBIHRvIHRoZSBmaXJzdCBhbmQgbGFz
dCB0ZXh0IGxlYWZzLgorCisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13
aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6
aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0
b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5n
L3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sOgorICAgICAgICAq
IGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1s
OgorCiAyMDEyLTEyLTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFRlc3QgZXhwZWN0YXRpb24gdXBkYXRlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUt
aW4tbmFycm93LWV4cGVjdGVkLmh0bWwKaW5kZXggNmNmZjA2ZTQ0OGIyZjc1ODNiZGEyMDM0M2Vl
YmRlMjI1YzY0NjU3MC4uN2E3ZjhjZGNkNGNkMGUzMzgyYTg1NWUxZDViMjk5MzY3Yjk1Y2QyYSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRl
LWluLW5hcnJvdy1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbApAQCAtMTcsOCArMTcs
OCBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsg
fQogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0
aDogODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQg
YmUgYXV0b3NpemVkIHRvIGp1c3QgMjBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwLzMy
MCksIHNpbmNlIGRlc3BpdGUgaXRzIHdpZHRoOjgwMHB4IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4
IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHg7IGZv
bnQtc2l6ZTogMS44NzVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byAzMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgYmVjYXVz
ZSBvZiBpdHMgd2lkdGg6NjAwcHggaXQgYmVjb21lcyBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAppbmRleCBiMmVm
MDEwN2M5ZWM2NmM3MjNhZTk2ZmI0NDY5NmJmMzE2MTQ0N2NjLi41MGY4ZTZhNmIxZWJhYmNhMjQx
ZmFiMzlmMzFiNDAxOWVkMDhkZTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCkBAIC0yNiw4
ICsyNiw4IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgICAgIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAg
ICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMg
dGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIGp1c3QgMjBweCBjb21wdXRlZCBmb250LXNpemUg
KDE2ICogNDAwLzMyMCksIHNpbmNlIGRlc3BpdGUgaXRzIHdpZHRoOjgwMHB4IGl0IGlzIHBhcnQg
b2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0
aDogNjAwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAzMHB4
IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgYmVjYXVzZSBvZiBpdHMg
d2lkdGg6NjAwcHggaXQgYmVjb21lcyBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1
bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVp
dXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEu
CiAgICAgPC9kaXY+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6
aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAppbmRleCBhOTBhMDEzYWYzZWQ0ZWUwNGUy
NmFjNjA3MjA2ZjkyZGFjYmI1YTg4Li45YzQxZDVmZTQ5YWZiMGUxZDhhYjEzNzVjNmVjMTYyZWNm
ZTA1Y2RkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRl
LWNoaWxkLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCkBAIC0xNCw5ICsxNCw4IEBAIGJvZHkgeyB3aWR0
aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiA8ZGl2IHN0eWxlPSJ3
aWR0aDogMzIwcHg7IGZvbnQtc2l6ZTogMXJlbSI+CiAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUg
YXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0
aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAgICBMb3JlbSBp
cHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRv
IGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlx
dWEuCi0JPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0IHNob3VsZCBu
b3QgYmUgYXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUg
cGFyZW50IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11
bHRpcGxpZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKwk8ZGl2IHN0eWxlPSJ3
aWR0aDogODAwcHg7IGZvbnQtc2l6ZTogMi41cmVtIj4KKyAgICAJVGhpcyB0ZXh0IHNob3VsZCBi
ZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2lu
Y2UgaXQncyB3aWRlciB0aGFuIGl0cyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0
c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1
NGVhNjFmM2FmNzlhZmY4N2I3ZDMzMGM1NWI3OTE3NjNiNTIwN2UuLjc5NzY3ZWVlZWU4ZmIwMjEw
ZGM2YzQ0YWRkM2JjNTZkMjAxODAzNjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKQEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5p
bnRlcm5hbHMpIHsKICAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRo
aXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIs
IGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3Ig
aW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0
eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6
ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sg
d2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+
Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxs
IG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBp
dCdzIHdpZGVyIHRoYW4gaXRzIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxm
Ljxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFk
aXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9y
ZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxv
dy1zY3JvbGwtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5n
L3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sCmluZGV4IDRiN2E3
NzdkYzM5MTVmNWNhNjIxNzllODg1ZTA1MDA3MThiZTcyYmMuLmNkNjBlYmQ1NzRmMjFkNWFjOTY3
OGUwNzQ3ZGZlYTBmYjJkNWM1MzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC1leHBlY3RlZC5odG1sCkBAIC0xMyw4ICsxMyw4IEBAIGJvZHkgeyB3aWR0aDog
ODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiAKIDxkaXYgc3R5bGU9Indp
ZHRoOiA0MDBweCI+CiAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRp
diBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlz
IHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYg
KiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3Nl
IHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRl
IGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAw
cHg7IGZvbnQtc2l6ZTogMi41cmVtIj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCksIHNpbmNlIGl0
J3Mgd2lkZXIgdGhhbiB0aGUgY29udGFpbmluZyBjbHVzdGVyIGFuZCB0aGVyZWZvcmUgYmVjb21l
cyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBp
bmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2Pgog
ICA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dp
ZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKaW5kZXggZjc0
YTdhMjE0MDhjOGFlZjQ1ZmJhZWQ4NjVmNTlmN2VhOTNiODFlMC4uMmUwMzg5YmFiMTIxOGQ1MmRj
YmExZTM5M2I4MGZmOGE1YjNiMzk2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLmh0bWwKQEAgLTIzLDcgKzIzLDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKIDxkaXYg
c3R5bGU9IndpZHRoOiA0MDBweCI+CiAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+
CiAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3Vs
ZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCks
IHNpbmNlIHRoaXMgaXMgcGFydCBvZiB0aGUgcm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2Nl
bmRhbnRzIGFyZSBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVu
dCBvZiB0aGlzIGRpdi48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVk
IHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApLCBzaW5jZSBpdCdzIHdp
ZGVyIHRoYW4gdGhlIGNvbnRhaW5pbmcgY2x1c3RlciBhbmQgdGhlcmVmb3JlIGJlY29tZXMgYSBj
bHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj
b25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRp
ZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KICAgPC9k
aXY+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178210</attachid>
            <date>2012-12-07 05:57:24 -0800</date>
            <delta_ts>2012-12-13 09:50:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121207135447.patch</filename>
            <type>text/plain</type>
            <size>36255</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RiNGJjNGIxODA4NjJj
ZTI5M2NkNDViYzA1Y2E2NjQyNDQ1MWJjMy4uNzY2M2U2MzYyYjYzYmFmNTlhMzg2MzAxYmQ0Nzkz
NTEzMzczNDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxs
IHRleHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIGRlc2NlbmRhbnQgdGV4dCBub2RlcyBoYWQgdG8gYmUgbW9kaWZpZWQgdG8K
KyAgICAgICAgYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gZmluZGluZyB0aGUg
TENBIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2l2ZW4gY29udGFpbmVyIGlzIGEgY2x1c3Rl
ci4KKyAgICAgICAgQWZ0ZXIgdGhlIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBh
bnkgb2YgdGhlIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRo
ZSBuZXcKKyAgICAgICAgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVh
ZnMgYW5kIGEgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBh
cmUgbm8gY2x1c3RlcnMgaW4gdGhlIHBhdGhzIGZyb20gdGhlIExDQSB0byB0aGUgZmlyc3QgYW5k
IGxhc3QgdGV4dCBsZWFmcy4KKworICAgICAgICBUaGUgY2hhbmdlIGZpeGVzIHNldmVyYWwgY2Fz
ZXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKTogY2FsbHMgcHJvY2Vzc0NsdXN0ZXIgd2l0aCBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKTogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgKGZvciBhc3NlcnRpb24gb25seSks
IGZpbmRzIG5ldyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGFuZCBwYXNzZXMgaXQg
aW50byBwcm9jZXNzQ29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbnRhaW5lcik6IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVy
IHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVz
dGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3aWRlciB0
aGFuIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5n
IGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyKS4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5pZW5jZSBt
ZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6IHBhc3NlcyBuZXcgcGFyYW1ldGVy
IHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOiB1c2VzIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om5leHRJbkluT3JkZXJTa2lwcGlu
Z0NsdXN0ZXJzKTogZmluZHMgdGhlIG5leHQgcmVuZGVyZXIgdGhhdCBpcyBub3QgYW4gYXV0b3Np
emluZyBjbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBl
c3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogcmVpbXBsZW1lbnRlZCB0byBpbmNyZW1lbnRhbGx5
IGZpbHRlciBvdXQgY2x1c3RlcnMgdGhhdCBhcmUgd2lkZXIgdGhhbiB0aGUgY3VycmVudCBibG9j
ayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBlbmNsb3NpbmcgY2x1c3Rlci4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om5leHRUZXh0TGVhZkluSW5PcmRlclNraXBwaW5nQ2x1
c3RlcnMpOiBmaW5kcyB0aGUgbmV4dCB0ZXh0IGxlYWYgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byBh
bnkgY2x1c3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmFkanVzdEZpcnN0
VGV4dExlYWZJZkluQ2x1c3Rlcik6IGlmIHRoZSBmb3VuZCB0ZXh0IGxlYWYgdHVybnMgb3V0IHRv
IGJlbG9uZyB0byBzb21lIGRlc2NlbmRhbnQgY2x1c3RlciBvZiB0aGUgb25lIHdlJ3JlIHByb2Nl
c3NpbmcsIGZpbmRzIHRoZSBuZXh0IHRleHQgbGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIGFu
eSBjbHVzdGVyIHdpdGhpbiB0aGUgb25lIHdlJ3JlIHByb2Nlc3NpbmcuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0QXV0b3NpemVyOjpvYmplY3RGaXJzdENoaWxkKTogY29udmVuaWVuY2UgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpvYmplY3ROZXh0U2libGluZyk6
IGNvbnZlbmllbmNlIGZ1bmN0aW9uIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24uCisgICAgICAg
ICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKyAgICAgICAgKFRleHRBdXRvc2l6ZXIpOiBy
ZW1vdmVkIHVudXNlZCBkZWNsYXJhdGlvbnMsIGFkZGVkIGEgdHlwZWRlZiBmb3IgYSB2ZWN0b3Ig
b2YgUmVuZGVyT2JqZWN0cy4KKwogMjAxMi0xMi0wNiAgVWxhbiBEZWdlbmJhZXYgIDx1bGFuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbdjhdIEZpeCBoaWRkZW4gcHJvcGVydHkgbmFtZSBvZiBW
OEFycmF5QnVmZmVyVmlldyBmbGFnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuY3BwCmluZGV4IGIxMDJiMmI1YjI5Mzc1YzcyODQ5MmMxYzk4NGJmN2Y4NjVkODcyMjEu
LmNiM2M3MjY1YjRjZDQxZDc5OTM2NDMxMTczZjUwMGFiNjIyMmMyZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsMzggKzg2
LDM4IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBs
YXlvdXRSb290KQogICAgICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9j
aygpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAgd2hpbGUg
KGNsdXN0ZXIgJiYgKCFpc0F1dG9zaXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlzQXV0b3Np
emluZ0NsdXN0ZXIoY2x1c3RlcikpKQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1dG9zaXpp
bmdDbHVzdGVyKGNsdXN0ZXIsIDApKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFp
bmluZ0Jsb2NrKCk7CiAKLSAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIGxh
eW91dFJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXIsIGNvbnRh
aW5lciwgMCwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIs
IFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0
IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250
YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
OworICAgIEFTU0VSVChpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIHBhcmVu
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQpKTsKIAogICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4
LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQogICAgIC8vIFJl
bmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3
ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFu
ZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4g
dGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCiAg
ICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5kZXJCbG9jayog
bG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQo
Y2x1c3Rlcik7Ci0gICAgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCA9IGxvd2VzdENvbW1vbkFu
Y2VzdG9yLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQo
Y2x1c3RlciwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgZmxvYXQgdGV4dFdp
ZHRoID0gYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAg
ICAgZmxvYXQgbXVsdGlwbGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXpl
ZChsb3dlc3RDb21tb25BbmNlc3RvciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAo
Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0
aCkpIHsKICAgICAgICAgaW50IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRv
d0luZm8ud2luZG93U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0
aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxh
eW91dFNpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAg
ICAgICAgLy8gSWdub3JlIGJveCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwg
dG8gYXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0
ZXJXaWR0aCA9IHN0ZDo6bWluPGZsb2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5
b3V0V2lkdGgpOworICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48
ZmxvYXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBs
aWVyID0gbG9naWNhbENsdXN0ZXJXaWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAg
bXVsdGlwbGllciAqPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRT
Y2FsZUZhY3RvcigpOwogICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlw
bGllcik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWlu
ZXIsIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRp
cGxpZXIsIGNvbnRhaW5lciwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdp
bmRvd0luZm8pOwogfQogCiBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQpAQCAtMTM5LDcgKzE0MCw3IEBAIHN0YXRpYyBi
b29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3ND
b250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5k
b3dJbmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRp
cGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3Npemlu
Z0NvbnRhaW5lcihjb250YWluZXIpKTsKIApAQCAtMTU1LDEwICsxNTYsMTAgQEAgdm9pZCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIFIKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtl
ciBzaXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdD
b250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5k
YW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKGlz
QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJs
b2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAgICAgIGlmIChpc0NvbnRhaW5lckF1dG9zaXppbmdD
bHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAg
ICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ss
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBs
aWVyLCBkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAg
ICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ss
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAg
ICAgICAgIH0KICAgICAgICAgZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNj
ZW5kYW50c09mQ29udGFpbmVycyhkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAt
MjE0LDE0ICsyMTUsMTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWlu
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJl
bnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJz
IiBhcmUgc3BlY2lhbCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAg
Ly8gd2FudCB0byBlbmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhl
IGhvcGVzIG9mIG1ha2luZwogICAgIC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBs
b29rIGludGVybmFsbHkgY29uc2lzdGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMg
KGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAv
LyBBbGwgdGhlaXIgZGVzY2VuZGFudHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRh
aW5lcnMpIG11c3Qgc2hhcmUKICAgICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9y
IHN1YnRyZWVzIHdoaWNoIGFyZSB0aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21l
IG9mIHRoZWlyIGRlc2NlbmRlbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0
IGFsbAorICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdo
dCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBo
ZWlnaHQgaXMgY29uc3RyYWluZWQpLgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3Vs
ZEJlQXV0b3NpemVkIHJlcXVpcmVzIGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBt
aW5pbXVtIGFtb3VudCBvZiB0ZXh0LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXpl
ZC4KQEAgLTIzMCwxMSArMjMxLDE0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5n
Q2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0
dGluZyBjb250ZXh0cyAoaHR0cDovL3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2lu
Y2UKICAgICAvLyBmbG93IHJvb3RzIGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBi
ZWhhdmUgc29tZXdoYXQKICAgICAvLyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChm
b3IgZXhhbXBsZSB0aGV5IGRvbid0IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5p
dGlvbiBvZiBhIGZsb3cgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qg
b2YgdGhlCisgICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5p
ZW50bHkgaW5jbHVkZXMgbW9zdCBvZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0
cyBjaGlsZHJlbiBjYW4gaGF2ZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8v
IGZyb20gdGhlIGJveCdzIHBhcmVudCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNh
bnRseSBkaWZmZXJlbnQKICAgICAvLyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2lu
Y2UgdGhlIG5hcnJvd2VyIGJsb2NrcyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3
b3VsZCBvdGhlcndpc2UgYmUgbmVjZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBj
b250YWluZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0
fAorICAgIC8vIG9mIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJz
LCBzaW5jZSB0aGV5IG5lZWQgc3BlY2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIg
d2lkdGguCiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKQpAQCAtMjQ0LDEzICsyNDgsMjAgQEAg
Ym9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2Nr
KiByZW5kZXJlcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKICAgICAg
ICAgfHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAg
ICAgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFp
bmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCk7CisgICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxv
Y2soKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKQorICAgICAgICB8fCAocGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dAor
ICAgICAgICAgICAgJiYgcmVuZGVyZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA+IHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgLy8gRklY
TUU6IFRhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNv
bHVtbnMgYnkKICAgICAvLyB0aGUgc2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVu
dCB3aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQogICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2Jh
Ymx5IGZsZXhib3hlcy4uLgogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRC
ZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0
IGNvbW1vbkFuY2VzdG9yV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0Ns
dXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0KQoreworICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250YWluZXIo
b2JqZWN0KSAmJiBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2Jq
ZWN0KSwgYmxvY2tDb250YWluaW5nQWxsVGV4dCk7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6
Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKQogewogICAgIC8vIERvbid0IGF1dG9zaXplIGNs
dXN0ZXJzIHRoYXQgY29udGFpbiBsZXNzIHRoYW4gNCBsaW5lcyBvZiB0ZXh0IChpbgogICAgIC8v
IHByYWN0aWNlIGxlc3MgbGluZXMgYXJlIHJlcXVpcmVkLCBzaW5jZSBtZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aApAQCAtMjYzLDE1ICsyNzQsMTUgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVz
dGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2UK
ICAgICAvLyBpbiBhbmQgcGFuIGZyb20gc2lkZSB0byBzaWRlIHRvIHJlYWQgZWFjaCBsaW5lLCBz
aW5jZSBpZiB0aGVyZSBhcmUgdmVyeQogICAgIC8vIGZldyBsaW5lcyBvZiB0ZXh0IHlvdSdsbCBv
bmx5IG5lZWQgdG8gcGFuIGFjcm9zcyBvbmNlIG9yIHR3aWNlLgogICAgIGNvbnN0IGZsb2F0IG1p
bkxpbmVzT2ZUZXh0ID0gNDsKLSAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBjb21tb25BbmNlc3Rv
cldpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gYmxvY2tX
aWR0aCAqIG1pbkxpbmVzT2ZUZXh0OwogICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgbWVh
c3VyZURlc2NlbmRhbnRUZXh0V2lkdGgobG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRXaWR0
aCwgdGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChibG9ja0NvbnRh
aW5pbmdBbGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRX
aWR0aCk7CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9h
dCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0V2lk
dGgsIGZsb2F0JiB0ZXh0V2lkdGgpCiB7CiAgICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gY29udGVu
dEhlaWdodElzQ29uc3RyYWluZWQoY29udGFpbmVyKTsKIApAQCAtMjgxLDggKzI5Miw4IEBAIHZv
aWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgZmxvCiAgICAgICAgICAgICB0ZXh0V2lkdGggKz0gdG9SZW5kZXJU
ZXh0KGRlc2NlbmRhbnQpLT5yZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxl
KCktPnNwZWNpZmllZEZvbnRTaXplKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5n
Q29udGFpbmVyKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2Vu
ZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmICgh
aXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAgICAgIG1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgbWluVGV4dFdpZHRoLCB0
ZXh0V2lkdGgpOworICAgICAgICAgICAgaWYgKCFpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVy
KGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAg
ICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0zMDYsNjggKzMxNywxMTcgQEAgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5Q
cmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QKICAgICByZXR1cm4g
MDsKIH0KIAotY29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0Qmxv
Y2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlcikKK2NvbnN0IFJl
bmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJz
KFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVu
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluLCBjb25zdCBSZW5kZXJCbG9jayogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKIHsKLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ2x1
c3RlcihjbHVzdGVyKSk7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbiB8fCAhaXNBdXRv
c2l6aW5nQ2x1c3RlcihjdXJyZW50LCBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAg
ICAgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0Rmlyc3RDaGlsZChk
aXJlY3Rpb24sIGN1cnJlbnQpOyBjaGlsZDsgY2hpbGQgPSBvYmplY3ROZXh0U2libGluZyhkaXJl
Y3Rpb24sIGNoaWxkKSkKKyAgICAgICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihjaGls
ZCwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNoaWxkOwogCi0gICAgc2l6ZV90IGZpcnN0RGVwdGggPSAwOwotICAgIGNvbnN0IFJlbmRlck9i
amVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNsdXN0
ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsKLSAgICBpZiAoIWZpcnN0VGV4dExlYWYpCi0g
ICAgICAgIHJldHVybiBjbHVzdGVyOworICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBhbmNl
c3RvciA9IGN1cnJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkg
eworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCogc2libGluZyA9IG9iamVjdE5l
eHRTaWJsaW5nKGRpcmVjdGlvbiwgYW5jZXN0b3IpOyBzaWJsaW5nOyBzaWJsaW5nID0gb2JqZWN0
TmV4dFNpYmxpbmcoZGlyZWN0aW9uLCBzaWJsaW5nKSkKKyAgICAgICAgICAgIGlmICghaXNBdXRv
c2l6aW5nQ2x1c3RlcihzaWJsaW5nLCBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2libGluZzsKKyAgICB9CiAKLSAgICBzaXplX3QgbGFzdERl
cHRoID0gMDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxhc3RUZXh0TGVhZiA9IGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGxhc3REZXB0aCwgTGFzdFRvRmlyc3QpOwot
ICAgIEFTU0VSVChsYXN0VGV4dExlYWYpOworICAgIHJldHVybiAwOworfQogCi0gICAgLy8gRXF1
YWxpemUgdGhlIGRlcHRocyBpZiBuZWNlc3NhcnkuIE9ubHkgb25lIG9mIHRoZSB3aGlsZSBsb29w
cyBiZWxvdyB3aWxsIGdldCBleGVjdXRlZC4KLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0
Tm9kZSA9IGZpcnN0VGV4dExlYWY7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsYXN0Tm9kZSA9
IGxhc3RUZXh0TGVhZjsKLSAgICB3aGlsZSAoZmlyc3REZXB0aCA+IGxhc3REZXB0aCkgewotICAg
ICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICAtLWZpcnN0RGVw
dGg7Ci0gICAgfQotICAgIHdoaWxlIChsYXN0RGVwdGggPiBmaXJzdERlcHRoKSB7Ci0gICAgICAg
IGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICAtLWxhc3REZXB0aDsKLSAg
ICB9Citjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBjb25zdCBSZW5kZXJC
bG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0
ZXIoY2x1c3RlciwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkpOwogCi0gICAgLy8gR28g
dXAgZnJvbSBib3RoIG5vZGVzIHVudGlsIHRoZSBwYXJlbnQgaXMgdGhlIHNhbWUuIEJvdGggcG9p
bnRlcnMgd2lsbCBwb2ludCB0byB0aGUgTENBIHRoZW4uCi0gICAgd2hpbGUgKGZpcnN0Tm9kZSAh
PSBsYXN0Tm9kZSkgewotICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUtPnBhcmVudCgpOwot
ICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wYXJlbnQoKTsKKyAgICBSZW5kZXJPYmplY3Rz
IGZpcnN0UGF0aCgxLCBjbHVzdGVyKTsKKyAgICBuZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBp
bmdDbHVzdGVycyhGaXJzdFRvTGFzdCwgZmlyc3RQYXRoLCAwKTsKKyAgICBpZiAoZmlyc3RQYXRo
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNsdXN0ZXI7CisKKyAgICBSZW5kZXJPYmplY3Rz
IGxhc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIG5leHRUZXh0TGVhZkluUHJlT3JkZXJTa2lwcGlu
Z0NsdXN0ZXJzKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgMCk7CisgICAgQVNTRVJUKCFsYXN0UGF0
aC5pc0VtcHR5KCkpOworCisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQgPSAwOworICAgIHdoaWxlICghYmxvY2tDb250YWluaW5nQWxsVGV4dCkgeworICAgICAg
ICBzaXplX3QgbWluU2l6ZSA9IHN0ZDo6bWluKGZpcnN0UGF0aC5zaXplKCksIGxhc3RQYXRoLnNp
emUoKSk7CisgICAgICAgIHNpemVfdCBmaXJzdE5vdEVxdWFsSW5kZXggPSAxOworICAgICAgICB3
aGlsZSAoZmlyc3ROb3RFcXVhbEluZGV4IDwgbWluU2l6ZSAmJiBmaXJzdFBhdGhbZmlyc3ROb3RF
cXVhbEluZGV4XSA9PSBsYXN0UGF0aFtmaXJzdE5vdEVxdWFsSW5kZXhdKQorICAgICAgICAgICAg
Zmlyc3ROb3RFcXVhbEluZGV4Kys7CisKKyAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsb3dl
c3RDb21tb25BbmNlc3RvciA9IGZpcnN0UGF0aFtmaXJzdE5vdEVxdWFsSW5kZXggLSAxXTsKKyAg
ICAgICAgaWYgKGxvd2VzdENvbW1vbkFuY2VzdG9yLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAg
ICAgICBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gdG9SZW5kZXJCbG9jayhsb3dlc3RDb21tb25B
bmNlc3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQgPSBsb3dlc3RDb21tb25BbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgIEFT
U0VSVChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5pc0Rlc2NlbmRhbnRPZihjbHVzdGVyKSk7CisK
KyAgICAgICAgLy8gQ2hlY2sgaWYgYW55IG9mIHRoZSB0ZXh0IGxlYWZzJyBwYXJlbnRzIGFyZSBn
b2luZyB0byBiZSBjbHVzdGVycyBkdWUgdG8gYmVpbmcgd2lkZXIgdGhhbiB0aGUgYmxvY2sganVz
dCBmb3VuZC4KKyAgICAgICAgLy8gSWYgc28sIHNlYXJjaCBmb3IgdGhlIHRleHQgbGVhZnMgYWdh
aW4gc3RhcnRpbmcgZnJvbSB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoZSBmb3VuZCBjbHVzdGVyLgor
ICAgICAgICBib29sIGZpcnN0VGV4dExlYWZJbnZhbGlkYXRlZCA9IGFkanVzdEZpcnN0VGV4dExl
YWZJZkluQ2x1c3RlcihGaXJzdFRvTGFzdCwgZmlyc3RQYXRoLCBmaXJzdE5vdEVxdWFsSW5kZXgs
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgICAgICBib29sIGxhc3RUZXh0TGVhZkludmFs
aWRhdGVkID0gYWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKExhc3RUb0ZpcnN0LCBsYXN0
UGF0aCwgZmlyc3ROb3RFcXVhbEluZGV4LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKyAgICAg
ICAgaWYgKGZpcnN0VGV4dExlYWZJbnZhbGlkYXRlZCB8fCBsYXN0VGV4dExlYWZJbnZhbGlkYXRl
ZCkgeworICAgICAgICAgICAgaWYgKGZpcnN0UGF0aC5pc0VtcHR5KCkgfHwgbGFzdFBhdGguaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjbHVzdGVyOworICAgICAgICAgICAgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCA9IDA7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZmly
c3ROb2RlLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJsb2NrKGZp
cnN0Tm9kZSk7CisgICAgcmV0dXJuIGJsb2NrQ29udGFpbmluZ0FsbFRleHQ7Cit9CiAKLSAgICAv
LyBjb250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNl
IGl0IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4gZmluZGluZyB0aGUKLSAgICAvLyBjb250YWlu
ZXIgb2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQgYmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4
aXN0IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMgdGV4dAotICAgIC8vIG5vZGVzIGxvd2VzdCBj
b21tb24gYW5jZXN0b3IgYXMgaXNBdXRvc2l6aW5nQ2x1c3RlciB3b3VsZCBoYXZlIG1hZGUgdGhl
bSBpbnRvIHRoZWlyIG93biBpbmRlcGVuZGVudAotICAgIC8vIGNsdXN0ZXIuCi0gICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGZpcnN0Tm9kZS0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOwordm9p
ZCBUZXh0QXV0b3NpemVyOjpuZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBpbmdDbHVzdGVycyhU
cmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBwYXRoLCBjb25zdCBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKK3sKKyAgICBBU1NFUlQo
IXBhdGguaXNFbXB0eSgpKTsKKworICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHBh
dGgubGFzdCgpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbiA9IHBhdGguZmly
c3QoKTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIG5leHQgPSBuZXh0SW5QcmVPcmRlclNraXBw
aW5nQ2x1c3RlcnMoZGlyZWN0aW9uLCBjdXJyZW50LCBzdGF5V2l0aGluLCBwYXJlbnRCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KTsKKyAgICB3aGlsZSAobmV4dCkgeworICAgICAgICBpZiAobmV4dC0+
aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0LT5pc0VtcHR5KCkpOworCisgICAg
ICAgICAgICBSZW5kZXJPYmplY3RzIG5leHRQYXRoOworICAgICAgICAgICAgd2hpbGUgKG5leHQg
IT0gc3RheVdpdGhpbikgeworICAgICAgICAgICAgICAgIG5leHRQYXRoLmFwcGVuZChuZXh0KTsK
KyAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC0+cGFyZW50KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBuZXh0UGF0aC5hcHBlbmQoc3RheVdpdGhpbik7CisgICAgICAgICAgICBuZXh0
UGF0aC5yZXZlcnNlKCk7CiAKLSAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrOworICAgICAgICAg
ICAgcGF0aC5zd2FwKG5leHRQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBuZXh0ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJzKGRpcmVjdGlvbiwg
bmV4dCwgc3RheVdpdGhpbiwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgfQor
ICAgIHBhdGguY2xlYXIoKTsKIH0KIAotY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVy
OjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVu
dCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6YWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKFRyYXZlcnNhbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFJlbmRlck9iamVjdHMmIHBhdGgsIHNpemVfdCBzdGFydEZyb20sIGNv
bnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KQogewotICAgIGlm
IChwYXJlbnQtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUZXh0KCkgPyBw
YXJlbnQgOiAwOwotCi0gICAgKytkZXB0aDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBh
cmVudC0+bGFzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNB
dXRvc2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRl
ckJsb2NrKGNoaWxkKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9
IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsK
LSAgICAgICAgICAgIGlmIChsZWFmKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOworICAg
IHNpemVfdCBjbHVzdGVySW5kZXggPSBwYXRoLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
c3RhcnRGcm9tOyBpIDwgcGF0aC5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGlzQXV0b3Npemlu
Z0NsdXN0ZXIocGF0aFtpXSwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkpIHsKKyAgICAg
ICAgICAgIGNsdXN0ZXJJbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gY2hpbGQtPm5leHRT
aWJsaW5nKCkgOiBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgfQotICAgIC0tZGVwdGg7
CiAKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoY2x1c3RlckluZGV4ID09IHBhdGguc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwYXRoLnJlbW92ZShjbHVzdGVySW5kZXggKyAx
LCBwYXRoLnNpemUoKSAtIChjbHVzdGVySW5kZXggKyAxKSk7CisgICAgbmV4dFRleHRMZWFmSW5Q
cmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoZGlyZWN0aW9uLCBwYXRoLCBwYXJlbnRCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY29uc3QgUmVuZGVyT2JqZWN0
KiBUZXh0QXV0b3NpemVyOjpvYmplY3RGaXJzdENoaWxkKFRyYXZlcnNhbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIHJldHVybiAoZGlyZWN0
aW9uID09IEZpcnN0VG9MYXN0KSA/IG9iamVjdC0+Zmlyc3RDaGlsZCgpIDogb2JqZWN0LT5sYXN0
Q2hpbGQoKTsKK30KKworY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpvYmplY3RO
ZXh0U2libGluZyhUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBv
YmplY3QtPm5leHRTaWJsaW5nKCkgOiBvYmplY3QtPnByZXZpb3VzU2libGluZygpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6
ZXIuaAppbmRleCBhNzA5YjExNjhlNDRkZjAwZWMxZjlkNzNiYmU1ZTUxNmZlOTI2Nzc0Li45MDI1
YTc1ZTU3MmI2NWE5YTUzN2RiYTM5MWM2ZTI0NzVmNTBkNzRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b3NpemVyLmgKQEAgLTI4LDE3ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxF
KFRFWFRfQVVUT1NJWklORykKIAotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclRleHQ7CiBzdHJ1Y3Qg
VGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvOwogCkBAIC01NSw2ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgZmxvYXQgY29tcHV0ZUF1dG9zaXplZEZvbnRTaXplKGZsb2F0IHNwZWNpZmllZFNp
emUsIGZsb2F0IG11bHRpcGxpZXIpOwogCiBwcml2YXRlOgorICAgIHR5cGVkZWYgVmVjdG9yPGNv
bnN0IFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdHM7CiAgICAgZW51bSBUcmF2ZXJzYWxEaXJl
Y3Rpb24gewogICAgICAgICBGaXJzdFRvTGFzdCwKICAgICAgICAgTGFzdFRvRmlyc3QKQEAgLTYy
LDI3ICs2MSw0OCBAQCBwcml2YXRlOgogCiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1
bWVudCopOwogCi0gICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3Rlciwg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3Qg
VGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZs
b2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJv
Y2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAg
ICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRl
ck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwog
CiAgICAgdm9pZCBzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCosIGZsb2F0KTsKIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjb250
YWluZXIuCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRl
ck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVu
ZGVyQmxvY2sqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGF1dG9zaXppbmcg
Y29udGFpbmVyIGlzIGFuIGF1dG9zaXppbmcgY2x1c3Rlci4gQ2hlY2tzIGlmIHRoZSBjb250YWlu
ZXIgaXMgd2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0fCBp
ZiB0aGUgcG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckF1
dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgUmVuZGVyQmxvY2sqIHBh
cmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Z2l2ZW4gcmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVyLiBDaGVja3MgaWYgdGhlIHJl
bmRlcmVyIGlzIHdpZGVyIHRoYW4KKyAgICAvLyB8cGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4
dHwgaWYgdGhlIHBvaW50ZXIgaXMgbm90IG51bGwuCisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6
aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50
QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxk
QmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9h
dCBjb21tb25BbmNlc3RvcldpZHRoKTsKLSAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lk
dGgsIGZsb2F0JiB0ZXh0V2lkdGgpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQg
YmxvY2tXaWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CiAK
ICAgICAvLyBVc2UgdG8gdHJhdmVyc2UgdGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGlu
ZyBkZXNjZW5kYW50cyBvZiBjb250YWluZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJz
IHRoZW1zZWx2ZXMpLgotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tp
cHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQs
IGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7Ci0KLSAgICAvLyBGaW5kcyB0aGUgbG93
ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQK
LSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3RoZXIgYXV0
b3NpemluZyBjbHVzdGVycykuCi0gICAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpOwot
Ci0gICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0cmF2ZXJzYWwgZGlyZWN0aW9uIHNwZWNpZmllZCwg
ZmluZHMgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGxlYWYgdGV4dCBub2RlIGNoaWxkIHRoYXQgZG9l
c24ndAotICAgIC8vIGJlbG9uZyB0byBhbnkgY2x1c3Rlci4KLSAgICBzdGF0aWMgY29uc3QgUmVu
ZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmpl
Y3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOworICAgIHN0YXRpYyBSZW5k
ZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhj
b25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pOworCisg
ICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcg
Y2x1c3RlcnMgd2l0aCB0aGVpciBkZXNjZW5kYW50cyAodGhlIGN1cnJlbnQgb2JqZWN0IGFuZCB8
c3RheVdpdGhpbnwKKyAgICAvLyBjYW4gYmUgYSBjbHVzdGVyKS4KKyAgICBzdGF0aWMgY29uc3Qg
UmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoVHJhdmVyc2FsRGly
ZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRo
aW4sIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKwor
ICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgZGVzY2VuZGFudCB0ZXh0IG5vZGVzIG9mIHRoZSBnaXZl
biBjbHVzdGVyIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiBhbnkgZGVzY2VuZGFudCBjbHVz
dGVyLAorICAgIC8vIHJldHVybnMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlc2Ug
dGV4dCBub2Rlcy4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBjbHVzdGVyIGl0c2VsZi4KKyAgICBz
dGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4
dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpOworCisgICAgLy8gVHJhdmVyc2VzIHRoZSB0cmVlIHN0YXJ0
aW5nIGZyb20gdGhlIGxhc3Qgbm9kZSBpbiB0aGUgcGF0aCB1c2luZyBuZXh0SW5QcmVPcmRlclNr
aXBwaW5nQ2x1c3RlcnMoKSB3aGlsZSBzdGF5aW5nIHdpdGhpbgorICAgIC8vIHRoZSBmaXJzdCBu
b2RlIGluIHRoZSBwYXRoLiBSZXR1cm5zIHRoZSBmdWxsIHBhdGggZnJvbSB0aGUgZmlyc3Qgbm9k
ZSBvZiB0aGUgcGF0aCB0byB0aGUgdGV4dCBsZWFmIGZvdW5kIG9yIGFuIGVtcHR5IHBhdGgKKyAg
ICAvLyBpZiB0aGUgc2VhcmNoIGZhaWxlZC4KKyAgICBzdGF0aWMgdm9pZCBuZXh0VGV4dExlYWZJ
blByZU9yZGVyU2tpcHBpbmdDbHVzdGVycyhUcmF2ZXJzYWxEaXJlY3Rpb24sIFJlbmRlck9iamVj
dHMmIHBhdGgsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
KTsKKworICAgIC8vIENoZWNrcyBpZiB0aGVyZSBpcyBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIgaW4g
dGhlIGdpdmVuIHBhdGggYmV0d2VlbiB0aGUgZ2l2ZW4gaW5kZXggYW5kIHRoZSBsYXN0IGVsZW1l
bnQgaW4gdGhlIHBhdGguCisgICAgLy8gSWYgbm8gY2x1c3RlciBpcyBmb3VuZCwgdGhpcyByZXR1
cm5zIGZhbHNlLiBPdGhlcndpc2UsIGl0IHJlbW92ZXMgdGhlIGZvdW5kIGNsdXN0ZXIgYW5kIGFs
bCBzdWJzZXF1ZW50IG5vZGVzIGZyb20gdGhlCisgICAgLy8gcGF0aCwgdGhlbiBjb250aW51ZXMg
dHJhdmVyc2luZyB0aGUgdHJlZSB0byBmaW5kIHRoZSBuZXh0IHRleHQgbGVhZiBpbiB0aGUgZ2l2
ZW4gZGlyZWN0aW9uLCBhbmQgZmluYWxseSByZXR1cm5zIHRydWUuCisgICAgc3RhdGljIGJvb2wg
YWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKFRyYXZlcnNhbERpcmVjdGlvbiwgUmVuZGVy
T2JqZWN0cyYgcGF0aCwgc2l6ZV90IHN0YXJ0RnJvbSwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVu
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworCisgICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgb3Ig
dGhlIGxhc3QgY2hpbGQgb2YgdGhlIG9iamVjdCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmllZCBk
aXJlY3Rpb24uCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0Rmlyc3RDaGls
ZChUcmF2ZXJzYWxEaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIC8vIFJldHVy
bnMgdGhlIG5leHQgb3IgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIG9iamVjdCBkZXBlbmRp
bmcgb24gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24uCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0TmV4dFNpYmxpbmcoVHJhdmVyc2FsRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogfTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NTQ2MWM4
OWM2Njg0NGRhODM1ZGFkZGUwNmNkODg3OGZkMjIzZDkwLi43MDkzYTlmOGU2OGI0OTRiZmE3NDhm
MDBlMjYyOTA1ZTU0ODgyMGNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMTEtMjkgIEFu
dG9uIFZheXZvZCAgPGF2YXl2b2RAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRleHQgQXV0b3Np
emluZzogY29udGFpbmVycyB3aWRlciB0aGFuIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVycyBzaG91
bGQgYmUgYXV0b3NpemVkIGFzIHNlcGFyYXRlIGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBpc0F1dG9zaXppbmdDbHVzdGVyKCkgbm93IGNo
ZWNrcyBmb3IgdGhlIHdpZHRoIG9mIHRoZSBjb250YWluZXIgYmVpbmcgZ3JlYXRlciB0aGFuIHRo
ZSB3aWR0aCBvZiB0aGUgbG93ZXN0CisgICAgICAgIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4
dCBub2RlcyBvZiB0aGUgZW5jbG9zaW5nIGNsdXN0ZXIpLiBUaGUgZW5jbG9zaW5nIFJlbmRlckJs
b2NrIGlzIHBhc3NlZCB0aHJvdWdob3V0CisgICAgICAgIHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMu
CisgICAgICAgIFRoZSBhbGdvcml0aG0gdGhhdCBzZWFyY2hlcyBmb3IgdGV4dCBub2RlcyBsb3dl
c3QgY29tbW9uIGFuY2VzdG9yIGhhZCB0byBiZSBtb2RpZmllZCB0byBhdm9pZCBjaXJjdWxhciBk
ZXBlbmRlbmN5CisgICAgICAgIGJldHdlZW4gZmluZGluZyBMQ0EgYW5kIGRldGVybWluaW5nIGlm
IGNvbnRhaW5lciBpcyBhIGNsdXN0ZXIuIEFmdGVyIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBj
aGVjayBpZiBhbnkgb2YKKyAgICAgICAgdGV4dCBsZWFmcycgcGFyZW50IG5vZGVzIGFyZSBjbHVz
dGVycyBkdWUgdG8gdGhlIG5ldyBkZWZpbml0aW9uIGFuZCBpZiBzbywgd2UgZmluZCBuZXcgdGV4
dCBsZWFmcyBhbmQgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVy
ZSBhcmUgbm8gY2x1c3RlcnMgaW4gcGF0aHMgZnJvbSBMQ0EgdG8gdGhlIGZpcnN0IGFuZCBsYXN0
IHRleHQgbGVhZnMuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdp
ZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXpp
bmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0
b3NpemluZy93aWRlLWNoaWxkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICog
ZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWw6
CisKIDIwMTItMTItMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtDaHJvbWl1bV0gVGVzdCBleHBlY3RhdGlvbiB1cGRhdGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0
ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1p
bi1uYXJyb3ctZXhwZWN0ZWQuaHRtbAppbmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWVi
ZGUyMjVjNjQ2NTcwLi43YTdmOGNkY2Q0Y2QwZTMzODJhODU1ZTFkNWIyOTkzNjdiOTVjZDJhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUt
aW4tbmFycm93LWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9z
aXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNyw4ICsxNyw4
IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9
CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNp
Y2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQg
ZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRo
OiA4MDBweDsgZm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBi
ZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIw
KSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHgg
d2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweDsgZm9u
dC1zaXplOiAxLjg3NXJlbSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVk
IHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBiZWNhdXNl
IG9mIGl0cyB3aWR0aDo2MDBweCBpdCBiZWNvbWVzIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBz
ZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25h
IGFsaXF1YS4KICAgICA8L2Rpdj4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCmluZGV4IGIyZWYw
MTA3YzllYzY2YzcyM2FlOTZmYjQ0Njk2YmYzMTYxNDQ3Y2MuLjUwZjhlNmE2YjFlYmFiY2EyNDFm
YWIzOWYzMWI0MDE5ZWQwOGRlMmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKQEAgLTI2LDgg
KzI2LDggQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICAgICAgTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9k
IHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAg
IDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0
ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAo
MTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBv
ZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRo
OiA2MDBweCI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHgg
Y29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBiZWNhdXNlIG9mIGl0cyB3
aWR0aDo2MDBweCBpdCBiZWNvbWVzIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4K
ICAgICA8L2Rpdj4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9z
aXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCmluZGV4IGE5MGEwMTNhZjNlZDRlZTA0ZTI2
YWM2MDcyMDZmOTJkYWNiYjVhODguLjljNDFkNWZlNDlhZmIwZTFkOGFiMTM3NWM2ZWMxNjJlY2Zl
MDVjZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUt
Y2hpbGQtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Npemlu
Zy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKQEAgLTE0LDkgKzE0LDggQEAgYm9keSB7IHdpZHRo
OiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIDxkaXYgc3R5bGU9Indp
ZHRoOiAzMjBweDsgZm9udC1zaXplOiAxcmVtIj4KIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBh
dXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRo
ZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlw
c3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8g
ZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1
YS4KLQk8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5v
dCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBw
YXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVs
dGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0
b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorCTxkaXYgc3R5bGU9Indp
ZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJl
IGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5j
ZSBpdCdzIHdpZGVyIHRoYW4gaXRzIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRz
ZWxmLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxh
Ym9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKaW5kZXggNDU0
ZWE2MWYzYWY3OWFmZjg3YjdkMzMwYzU1Yjc5MTc2M2I1MjA3ZS4uNzk3NjdlZWVlZThmYjAyMTBk
YzZjNDRhZGQzYmM1NmQyMDE4MDM2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbApAQCAtMjQsOCArMjQsNyBAQCBpZiAod2luZG93Lmlu
dGVybmFscykgewogICAgIFRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhp
cyBkaXYgaXMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3Rlciwg
YW5kIHRoaXMgZGl2IGlzIG5hcnJvdy48YnI+CiAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBp
bmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDxkaXYgc3R5
bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXpl
ZCBzaW5jZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBibG9jayB3
aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXV0b3NpemluZyBtdWx0aXBsaWVyLjxicj4K
LSAgICAJRklYTUU6IElkZWFsbHkgdGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQuIFdpbGwg
bmVlZCB0byBiZSBmaXhlZCBsYXRlci48YnI+CisgICAgCVRoaXMgdGV4dCBzaG91bGQgYmUgYXV0
b3NpemVkIHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApIHNpbmNlIGl0
J3Mgd2lkZXIgdGhhbiBpdHMgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYu
PGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRp
cGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3Jl
IGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93
LXNjcm9sbC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKaW5kZXggNGI3YTc3
N2RjMzkxNWY1Y2E2MjE3OWU4ODVlMDUwMDcxOGJlNzJiYy4uY2Q2MGViZDU3NGYyMWQ1YWM5Njc4
ZTA3NDdkZmVhMGZiMmQ1YzUzNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZs
b3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKQEAgLTEzLDggKzEzLDggQEAgYm9keSB7IHdpZHRoOiA4
MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIAogPGRpdiBzdHlsZT0id2lk
dGg6IDQwMHB4Ij4KICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2
IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMg
dGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAq
IDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2Ug
dGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUg
Z3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSwgc2luY2UgaXQn
cyB3aWRlciB0aGFuIHRoZSBjb250YWluaW5nIGNsdXN0ZXIgYW5kIHRoZXJlZm9yZSBiZWNvbWVz
IGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l
dCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGlu
Y2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAg
IDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lk
ZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAppbmRleCBmNzRh
N2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi4yZTAzODliYWIxMjE4ZDUyZGNi
YTFlMzkzYjgwZmY4YTViM2IzOTZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwuaHRtbApAQCAtMjMsNyArMjMsNyBAQCBpZiAod2luZG93LmludGVybmFscykgewogPGRpdiBz
dHlsZT0id2lkdGg6IDQwMHB4Ij4KICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4K
ICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxk
IGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwg
c2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2Vu
ZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50
IG9mIHRoaXMgZGl2Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQg
dG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCksIHNpbmNlIGl0J3Mgd2lk
ZXIgdGhhbiB0aGUgY29udGFpbmluZyBjbHVzdGVyIGFuZCB0aGVyZWZvcmUgYmVjb21lcyBhIGNs
dXN0ZXIgaXRzZWxmLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNv
bnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogICA8L2Rp
dj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179291</attachid>
            <date>2012-12-13 09:50:40 -0800</date>
            <delta_ts>2012-12-13 10:13:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121213174800.patch</filename>
            <type>text/plain</type>
            <size>37798</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY1OWM2MDk1ODlkMDc2
Mzk3MjRkZGIwMTRjZTdiNTMxODNmZTAxYy4uMzU5ZjdjNTU0Yjc1OWZhZWE5MzI0YzMwZGExNzg5
Zjk5ZDdiNzRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxs
IHRleHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIGRlc2NlbmRhbnQgdGV4dCBub2RlcyBoYWQgdG8gYmUgbW9kaWZpZWQgdG8K
KyAgICAgICAgYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gZmluZGluZyB0aGUg
TENBIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2l2ZW4gY29udGFpbmVyIGlzIGEgY2x1c3Rl
ci4KKyAgICAgICAgQWZ0ZXIgdGhlIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBh
bnkgb2YgdGhlIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRo
ZSBuZXcKKyAgICAgICAgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVh
ZnMgYW5kIGEgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBh
cmUgbm8gY2x1c3RlcnMgaW4gdGhlIHBhdGhzIGZyb20gdGhlIExDQSB0byB0aGUgZmlyc3QgYW5k
IGxhc3QgdGV4dCBsZWFmcy4KKworICAgICAgICBUaGUgY2hhbmdlIGZpeGVzIHNldmVyYWwgY2Fz
ZXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKTogY2FsbHMgcHJvY2Vzc0NsdXN0ZXIgd2l0aCBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKTogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgKGZvciBhc3NlcnRpb24gb25seSks
IGZpbmRzIG5ldyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGFuZCBwYXNzZXMgaXQg
aW50byBwcm9jZXNzQ29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbnRhaW5lcik6IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVy
IHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVz
dGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3aWRlciB0
aGFuIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5n
IGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyKS4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5pZW5jZSBt
ZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6IHBhc3NlcyBuZXcgcGFyYW1ldGVy
IHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOiB1c2VzIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBp
bmdDbHVzdGVycyk6IGZpbmRzIHRoZSBuZXh0IHJlbmRlcmVyIHRoYXQgaXMgbm90IGFuIGF1dG9z
aXppbmcgY2x1c3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmREZWVw
ZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dCk6IHJlaW1wbGVtZW50ZWQgdG8gaW5jcmVtZW50YWxs
eSBmaWx0ZXIgb3V0IGNsdXN0ZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGN1cnJlbnQgYmxv
Y2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpnZXROZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBp
bmdDbHVzdGVycyk6IGZpbmRzIHRoZSBuZXh0IHRleHQgbGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25n
IHRvIGFueSBjbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6YWRqdXN0
Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKTogaWYgdGhlIGZvdW5kIHRleHQgbGVhZiB0dXJucyBv
dXQgdG8gYmVsb25nIHRvIHNvbWUgZGVzY2VuZGFudCBjbHVzdGVyIG9mIHRoZSBvbmUgd2UncmUg
cHJvY2Vzc2luZywgZmluZHMgdGhlIG5leHQgdGV4dCBsZWFmIHRoYXQgZG9lc24ndCBiZWxvbmcg
dG8gYW55IGNsdXN0ZXIgd2l0aGluIHRoZSBvbmUgd2UncmUgcHJvY2Vzc2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om9iamVjdEZpcnN0Q2hpbGQpOiBjb252ZW5pZW5jZSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om9iamVjdE5leHRTaWJs
aW5nKTogY29udmVuaWVuY2UgZnVuY3Rpb24gcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAg
ICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oOgorICAgICAgICAoVGV4dEF1dG9zaXpl
cik6IHJlbW92ZWQgdW51c2VkIGRlY2xhcmF0aW9ucywgYWRkZWQgYSB0eXBlZGVmIGZvciBhIHZl
Y3RvciBvZiBSZW5kZXJPYmplY3RzLgorCiAyMDEyLTEyLTExICBKZXNzaWUgQmVybGluICA8amJl
cmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBNYWMgYnVpbGQgYWZ0ZXIgcjEzNzI2
MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IGIxMDJi
MmI1YjI5Mzc1YzcyODQ5MmMxYzk4NGJmN2Y4NjVkODcyMjEuLjc1ODYwYmVmYzJhZTNhOGIzZmRm
Y2IzZjYyZTliMGM0ZjA5YTYyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsMzggKzg2LDM4IEBAIGJvb2wgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogICAgICAgICBj
b250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgUmVuZGVyQmxv
Y2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAgd2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1dG9z
aXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
KQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIDAp
KQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKLSAgICBw
cm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8p
OworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXIsIGNvbnRhaW5lciwgMCwgbGF5b3V0Um9vdCwg
d2luZG93SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWlu
ZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoUmVu
ZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJs
b2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVS
b290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7Ci0gICAg
QVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOworICAgIEFTU0VSVChpc0NvbnRh
aW5lckF1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRl
eHQpKTsKIAogICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRl
bnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2Yg
anVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4
dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBi
bG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lk
dGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3Ig
PSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7Ci0gICAgZmxvYXQg
Y29tbW9uQW5jZXN0b3JXaWR0aCA9IGxvd2VzdENvbW1vbkFuY2VzdG9yLT5jb250ZW50TG9naWNh
bFdpZHRoKCk7CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQg
PSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3RlciwgcGFyZW50QmxvY2tD
b250YWluaW5nQWxsVGV4dCk7CisgICAgZmxvYXQgdGV4dFdpZHRoID0gYmxvY2tDb250YWluaW5n
QWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChsb3dlc3RDb21tb25BbmNlc3Rv
ciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0aCkpIHsKICAgICAgICAgaW50IGxv
Z2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3
aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ud2luZG93U2l6ZS5oZWln
aHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUud2lkdGgoKSA6IHdp
bmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgLy8gSWdub3JlIGJveCB3
aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8gYXZvaWQgZXh0cmVtZSBtdWx0
aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWluPGZs
b2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOworICAgICAgICBm
bG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwgbG9n
aWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBsaWVyID0gbG9naWNhbENsdXN0ZXJX
aWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAgbXVsdGlwbGllciAqPSBtX2RvY3Vt
ZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3RvcigpOwogICAgICAg
ICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0gICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3aW5k
b3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwogfQogCiBzdGF0
aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyKQpAQCAtMTM5LDcgKzE0MCw3IEBAIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0Nv
bnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlw
bGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0
b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIp
KTsKIApAQCAtMTU1LDEwICsxNTYsMTAgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29u
dGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFIKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHByb3BvcnRpb25hdGVs
eS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkp
IHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJs
b2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0ZXIoZGVz
Y2VuZGFudEJsb2NrKSkKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50
QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAg
ICAgICAgICAgIGlmIChpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9j
aywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgcHJvY2Vzc0NsdXN0
ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ss
IGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0Nv
bnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgZGVz
Y2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhk
ZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMjE0LDE0ICsyMTUsMTQgQEAgYm9v
bCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6
aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEg
dW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2luZwogICAg
IC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29rIGludGVybmFsbHkgY29uc2lz
dGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMgKGluY2x1ZGluZyBvdGhlciBhdXRv
c2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGFu
dHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKICAg
ICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1YnRyZWVzIHdoaWNoIGFyZSB0
aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRlbnQg
Y29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAorICAgIC8vIGFuZCBzb21l
IG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0
IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBoZWlnaHQgaXMgY29uc3RyYWluZWQp
LgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkIHJlcXVpcmVz
IGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBtaW5pbXVtIGFtb3VudCBvZiB0ZXh0
LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXplZC4KQEAgLTIzMCwxMSArMjMxLDE0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyAoaHR0cDov
L3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2luY2UKICAgICAvLyBmbG93IHJvb3Rz
IGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBiZWhhdmUgc29tZXdoYXQKICAgICAv
LyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChmb3IgZXhhbXBsZSB0aGV5IGRvbid0
IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIGZsb3cgZmxvdyBy
b290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCisgICAgLy8gVGhlIGRl
ZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50bHkgaW5jbHVkZXMgbW9zdCBv
ZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0cyBjaGlsZHJlbiBjYW4gaGF2ZSBz
aWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8vIGZyb20gdGhlIGJveCdzIHBhcmVu
dCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQKICAgICAv
LyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2UgdGhlIG5hcnJvd2VyIGJsb2Nr
cyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgbmVj
ZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJlIHdp
ZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0fAorICAgIC8vIG9mIHRoZWlyIGVu
Y2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLCBzaW5jZSB0aGV5IG5lZWQgc3Bl
Y2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lkdGguCiAgICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKQpAQCAtMjQ0LDEzICsyNDgsMjAgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxl
eGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmhhc0Nv
bHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisgICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQorICAgICAg
ICB8fCAocGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dAorICAgICAgICAgICAgJiYgcmVuZGVy
ZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA+IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQt
PmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgLy8gRklYTUU6IFRhYmxlcyBuZWVkIHNwZWNp
YWwgaGFuZGxpbmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNvbHVtbnMgYnkKICAgICAvLyB0aGUg
c2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0Nv
bHVtbnMoKQogICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgogfQog
Ci1ib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5k
ZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgp
Citib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KQor
eworICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250YWluZXIob2JqZWN0KSAmJiBpc0NvbnRhaW5l
ckF1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0KSwgYmxvY2tDb250YWluaW5n
QWxsVGV4dCk7Cit9CisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9j
a1dpZHRoKQogewogICAgIC8vIERvbid0IGF1dG9zaXplIGNsdXN0ZXJzIHRoYXQgY29udGFpbiBs
ZXNzIHRoYW4gNCBsaW5lcyBvZiB0ZXh0IChpbgogICAgIC8vIHByYWN0aWNlIGxlc3MgbGluZXMg
YXJlIHJlcXVpcmVkLCBzaW5jZSBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aApAQCAtMjYzLDE1
ICsyNzQsMTUgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQo
Y29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2UKICAgICAvLyBpbiBhbmQgcGFuIGZy
b20gc2lkZSB0byBzaWRlIHRvIHJlYWQgZWFjaCBsaW5lLCBzaW5jZSBpZiB0aGVyZSBhcmUgdmVy
eQogICAgIC8vIGZldyBsaW5lcyBvZiB0ZXh0IHlvdSdsbCBvbmx5IG5lZWQgdG8gcGFuIGFjcm9z
cyBvbmNlIG9yIHR3aWNlLgogICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVzT2ZUZXh0ID0gNDsKLSAg
ICBmbG9hdCBtaW5UZXh0V2lkdGggPSBjb21tb25BbmNlc3RvcldpZHRoICogbWluTGluZXNPZlRl
eHQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gYmxvY2tXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0
OwogICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lk
dGgobG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICBt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgaWYgKHRleHRX
aWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0
aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0
JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdp
ZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgp
CiB7CiAgICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gY29udGVudEhlaWdodElzQ29uc3RyYWluZWQo
Y29udGFpbmVyKTsKIApAQCAtMjgxLDggKzI5Miw4IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6bWVh
c3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxv
CiAgICAgICAgICAgICB0ZXh0V2lkdGggKz0gdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5yZW5k
ZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXpl
KCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQp
KSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJC
bG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3Rlcihk
ZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdp
ZHRoKGRlc2NlbmRhbnRCbG9jaywgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAgICAg
ICAgaWYgKCFpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRU
ZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0
V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRleHRXaWR0aCA+PSBt
aW5UZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDYsNjggKzMxNywxMTUgQEAg
UmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2Vu
ZGFudHNPZkNvbnRhaW5lcnMoY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgUmVuZGVy
QmxvY2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChj
b25zdCBSZW5kZXJCbG9jayogY2x1c3RlcikKK2NvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9z
aXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJzKFRyYXZlcnNhbERpcmVjdGlvbiBk
aXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBzdGF5V2l0aGluLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCkK
IHsKLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSk7CisgICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbiB8fCAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjdXJyZW50LCBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAgICAgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIGNo
aWxkID0gb2JqZWN0Rmlyc3RDaGlsZChkaXJlY3Rpb24sIGN1cnJlbnQpOyBjaGlsZDsgY2hpbGQg
PSBvYmplY3ROZXh0U2libGluZyhkaXJlY3Rpb24sIGNoaWxkKSkKKyAgICAgICAgICAgIGlmICgh
aXNBdXRvc2l6aW5nQ2x1c3RlcihjaGlsZCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwogCi0gICAgc2l6ZV90IGZpcnN0RGVwdGggPSAwOwot
ICAgIGNvbnN0IFJlbmRlck9iamVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRMZWFm
Tm90SW5DbHVzdGVyKGNsdXN0ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsKLSAgICBpZiAo
IWZpcnN0VGV4dExlYWYpCi0gICAgICAgIHJldHVybiBjbHVzdGVyOworICAgIGZvciAoY29uc3Qg
UmVuZGVyT2JqZWN0KiBhbmNlc3RvciA9IGN1cnJlbnQ7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFu
Y2VzdG9yLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gc3RheVdpdGhpbikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCog
c2libGluZyA9IG9iamVjdE5leHRTaWJsaW5nKGRpcmVjdGlvbiwgYW5jZXN0b3IpOyBzaWJsaW5n
OyBzaWJsaW5nID0gb2JqZWN0TmV4dFNpYmxpbmcoZGlyZWN0aW9uLCBzaWJsaW5nKSkKKyAgICAg
ICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihzaWJsaW5nLCBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZzsKKyAgICB9CiAKLSAgICBz
aXplX3QgbGFzdERlcHRoID0gMDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxhc3RUZXh0TGVh
ZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGxhc3REZXB0aCwgTGFz
dFRvRmlyc3QpOwotICAgIEFTU0VSVChsYXN0VGV4dExlYWYpOworICAgIHJldHVybiAwOworfQog
Ci0gICAgLy8gRXF1YWxpemUgdGhlIGRlcHRocyBpZiBuZWNlc3NhcnkuIE9ubHkgb25lIG9mIHRo
ZSB3aGlsZSBsb29wcyBiZWxvdyB3aWxsIGdldCBleGVjdXRlZC4KLSAgICBjb25zdCBSZW5kZXJP
YmplY3QqIGZpcnN0Tm9kZSA9IGZpcnN0VGV4dExlYWY7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0
KiBsYXN0Tm9kZSA9IGxhc3RUZXh0TGVhZjsKLSAgICB3aGlsZSAoZmlyc3REZXB0aCA+IGxhc3RE
ZXB0aCkgewotICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdE5vZGUtPnBhcmVudCgpOwotICAgICAg
ICAtLWZpcnN0RGVwdGg7Ci0gICAgfQotICAgIHdoaWxlIChsYXN0RGVwdGggPiBmaXJzdERlcHRo
KSB7Ci0gICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnBhcmVudCgpOwotICAgICAgICAtLWxh
c3REZXB0aDsKLSAgICB9Citjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyLCBj
b25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGlzQ29udGFpbmVyQXV0
b3NpemluZ0NsdXN0ZXIoY2x1c3RlciwgcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCkpOwor
CisgICAgUmVuZGVyT2JqZWN0cyBmaXJzdFBhdGgoMSwgY2x1c3Rlcik7CisgICAgZ2V0TmV4dFRl
eHRMZWFmSW5QcmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoRmlyc3RUb0xhc3QsIGZpcnN0UGF0aCwg
MCk7CisgICAgaWYgKGZpcnN0UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjbHVzdGVy
OwogCi0gICAgLy8gR28gdXAgZnJvbSBib3RoIG5vZGVzIHVudGlsIHRoZSBwYXJlbnQgaXMgdGhl
IHNhbWUuIEJvdGggcG9pbnRlcnMgd2lsbCBwb2ludCB0byB0aGUgTENBIHRoZW4uCi0gICAgd2hp
bGUgKGZpcnN0Tm9kZSAhPSBsYXN0Tm9kZSkgewotICAgICAgICBmaXJzdE5vZGUgPSBmaXJzdE5v
ZGUtPnBhcmVudCgpOwotICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wYXJlbnQoKTsKKyAg
ICBSZW5kZXJPYmplY3RzIGxhc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGdldE5leHRUZXh0TGVh
ZkluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJzKExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgMCk7Cisg
ICAgQVNTRVJUKCFsYXN0UGF0aC5pc0VtcHR5KCkpOworCisgICAgY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSAwOworICAgIHdoaWxlICghYmxvY2tDb250YWluaW5n
QWxsVGV4dCkgeworICAgICAgICBzaXplX3QgbWluU2l6ZSA9IHN0ZDo6bWluKGZpcnN0UGF0aC5z
aXplKCksIGxhc3RQYXRoLnNpemUoKSk7CisgICAgICAgIHNpemVfdCBmaXJzdE5vdEVxdWFsSW5k
ZXggPSAxOworICAgICAgICB3aGlsZSAoZmlyc3ROb3RFcXVhbEluZGV4IDwgbWluU2l6ZSAmJiBm
aXJzdFBhdGhbZmlyc3ROb3RFcXVhbEluZGV4XSA9PSBsYXN0UGF0aFtmaXJzdE5vdEVxdWFsSW5k
ZXhdKQorICAgICAgICAgICAgZmlyc3ROb3RFcXVhbEluZGV4Kys7CisKKyAgICAgICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpcnN0UGF0aFtmaXJzdE5vdEVx
dWFsSW5kZXggLSAxXTsKKyAgICAgICAgaWYgKGxvd2VzdENvbW1vbkFuY2VzdG9yLT5pc1JlbmRl
ckJsb2NrKCkpCisgICAgICAgICAgICBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gdG9SZW5kZXJC
bG9jayhsb3dlc3RDb21tb25BbmNlc3Rvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQgPSBsb3dlc3RDb21tb25BbmNlc3Rvci0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgIEFTU0VSVChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5pc0Rlc2NlbmRh
bnRPZihjbHVzdGVyKSk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYW55IG9mIHRoZSB0ZXh0IGxl
YWZzJyBwYXJlbnRzIGFyZSBnb2luZyB0byBiZSBjbHVzdGVycyBkdWUgdG8gYmVpbmcgd2lkZXIg
dGhhbiB0aGUgYmxvY2sganVzdCBmb3VuZC4KKyAgICAgICAgLy8gSWYgc28sIHNlYXJjaCBmb3Ig
dGhlIHRleHQgbGVhZnMgYWdhaW4gc3RhcnRpbmcgZnJvbSB0aGUgbmV4dCBzaWJsaW5nIG9mIHRo
ZSBmb3VuZCBjbHVzdGVyLgorICAgICAgICBib29sIGZpcnN0VGV4dExlYWZJbnZhbGlkYXRlZCA9
IGFkanVzdEZpcnN0VGV4dExlYWZJZkluQ2x1c3RlcihGaXJzdFRvTGFzdCwgZmlyc3RQYXRoLCBm
aXJzdE5vdEVxdWFsSW5kZXgsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgICAgICBib29s
IGxhc3RUZXh0TGVhZkludmFsaWRhdGVkID0gYWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVy
KExhc3RUb0ZpcnN0LCBsYXN0UGF0aCwgZmlyc3ROb3RFcXVhbEluZGV4LCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0KTsKKyAgICAgICAgaWYgKGZpcnN0VGV4dExlYWZJbnZhbGlkYXRlZCB8fCBsYXN0
VGV4dExlYWZJbnZhbGlkYXRlZCkgeworICAgICAgICAgICAgaWYgKGZpcnN0UGF0aC5pc0VtcHR5
KCkgfHwgbGFzdFBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjbHVzdGVy
OworICAgICAgICAgICAgYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IDA7CisgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoZmlyc3ROb2RlLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHJldHVy
biB0b1JlbmRlckJsb2NrKGZpcnN0Tm9kZSk7CisgICAgcmV0dXJuIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQ7Cit9CiAKLSAgICAvLyBjb250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2ZXIgbGVhdmUg
dGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4gZmluZGluZyB0
aGUKLSAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQgYmxvY2tzLCBh
bmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMgdGV4dAotICAg
IC8vIG5vZGVzIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYXMgaXNBdXRvc2l6aW5nQ2x1c3RlciB3
b3VsZCBoYXZlIG1hZGUgdGhlbSBpbnRvIHRoZWlyIG93biBpbmRlcGVuZGVudAotICAgIC8vIGNs
dXN0ZXIuCi0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGZpcnN0Tm9kZS0+Y29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNEZXNjZW5kYW50
T2YoY2x1c3RlcikpOwordm9pZCBUZXh0QXV0b3NpemVyOjpnZXROZXh0VGV4dExlYWZJblByZU9y
ZGVyU2tpcHBpbmdDbHVzdGVycyhUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJP
YmplY3RzJiBwYXRoLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCkK
K3sKKyAgICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKworICAgIGNvbnN0IFJlbmRlck9iamVj
dCogY3VycmVudCA9IHBhdGgubGFzdCgpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdp
dGhpbiA9IHBhdGguZmlyc3QoKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCog
bmV4dCA9IGN1cnJlbnQ7IG5leHQ7IG5leHQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nQ2x1c3Rl
cnMoZGlyZWN0aW9uLCBuZXh0LCBzdGF5V2l0aGluLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkg
eworICAgICAgICBpZiAobmV4dC0+aXNUZXh0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVj
dHMgbmV4dFBhdGg7CisgICAgICAgICAgICB3aGlsZSAobmV4dCAhPSBzdGF5V2l0aGluKSB7Cisg
ICAgICAgICAgICAgICAgbmV4dFBhdGguYXBwZW5kKG5leHQpOworICAgICAgICAgICAgICAgIG5l
eHQgPSBuZXh0LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHRQYXRo
LmFwcGVuZChzdGF5V2l0aGluKTsKKyAgICAgICAgICAgIG5leHRQYXRoLnJldmVyc2UoKTsKIAot
ICAgIHJldHVybiBjb250YWluaW5nQmxvY2s7CisgICAgICAgICAgICBwYXRoLnN3YXAobmV4dFBh
dGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHBhdGguY2xl
YXIoKTsKIH0KIAotY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIHBhcmVudCwgc2l6ZV90JiBk
ZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgVGV4dEF1dG9zaXplcjo6
YWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKFRyYXZlcnNhbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFJlbmRlck9iamVjdHMmIHBhdGgsIHNpemVfdCBzdGFydEZyb20sIGNvbnN0IFJlbmRlckJs
b2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KQogewotICAgIGlmIChwYXJlbnQtPmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+aXNUZXh0KCkgPyBwYXJlbnQgOiAwOwotCi0gICAg
KytkZXB0aDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBG
aXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBhcmVudC0+bGFzdENoaWxkKCk7
Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ29udGFpbmVy
KGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsK
LSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFm
Tm90SW5DbHVzdGVyKGNoaWxkLCBkZXB0aCwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGlmIChs
ZWFmKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWFmOworICAgIHNpemVfdCBjbHVzdGVySW5k
ZXggPSBwYXRoLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRGcm9tOyBpIDwgcGF0
aC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaXNBdXRvc2l6aW5nQ2x1c3RlcihwYXRoW2ld
LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkgeworICAgICAgICAgICAgY2x1c3RlckluZGV4ID0g
aTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNoaWxkID0gKGRpcmVj
dGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IGNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICB9Ci0gICAgLS1kZXB0aDsKIAotICAgIHJldHVybiAwOworICAg
IGlmIChjbHVzdGVySW5kZXggPT0gcGF0aC5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHBhdGgucmVtb3ZlKGNsdXN0ZXJJbmRleCArIDEsIHBhdGguc2l6ZSgpIC0gKGNsdXN0
ZXJJbmRleCArIDEpKTsKKyAgICBnZXROZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBpbmdDbHVz
dGVycyhkaXJlY3Rpb24sIHBhdGgsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIHJldHVy
biB0cnVlOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om9iamVjdEZp
cnN0Q2hpbGQoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QpCit7CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gb2Jq
ZWN0LT5maXJzdENoaWxkKCkgOiBvYmplY3QtPmxhc3RDaGlsZCgpOworfQorCitjb25zdCBSZW5k
ZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om9iamVjdE5leHRTaWJsaW5nKFRyYXZlcnNhbERpcmVj
dGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIHJldHVy
biAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IG9iamVjdC0+bmV4dFNpYmxpbmcoKSA6IG9i
amVjdC0+cHJldmlvdXNTaWJsaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGE3MDliMTE2OGU0NGRm
MDBlYzFmOWQ3M2JiZTVlNTE2ZmU5MjY3NzQuLjE0YWNiOWZhMDE0ZWU0YTgzMmRjNDRkOWQ0OWQw
YTNlOWM3MjlkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b3NpemVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApA
QCAtMjgsMTcgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm87
CiAKQEAgLTU1LDYgKzUzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCBjb21wdXRlQXV0
b3NpemVkRm9udFNpemUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgZmxvYXQgbXVsdGlwbGllcik7CiAK
IHByaXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8Y29uc3QgUmVuZGVyT2JqZWN0Kj4gUmVuZGVy
T2JqZWN0czsKICAgICBlbnVtIFRyYXZlcnNhbERpcmVjdGlvbiB7CiAgICAgICAgIEZpcnN0VG9M
YXN0LAogICAgICAgICBMYXN0VG9GaXJzdApAQCAtNjIsMjcgKzYxLDQ4IEBAIHByaXZhdGU6CiAK
ICAgICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERvY3VtZW50Kik7CiAKLSAgICB2b2lkIHByb2Nl
c3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
KTsKLSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9z
aXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayog
Y2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVu
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0
IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihm
bG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29u
c3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIo
UmVuZGVyT2JqZWN0KiwgZmxvYXQpOwogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZl
biByZW5kZXJlciBpcyBhbiBhdXRvc2l6aW5nIGNvbnRhaW5lci4KICAgICBzdGF0aWMgYm9vbCBp
c0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJv
b2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYXV0b3NpemluZyBjb250YWluZXIgaXMgYW4gYXV0b3Npemlu
ZyBjbHVzdGVyLiBDaGVja3MgaWYgdGhlIGNvbnRhaW5lciBpcyB3aWRlciB0aGFuCisgICAgLy8g
fHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHR8IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBudWxs
LgorICAgIHN0YXRpYyBib29sIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVu
ZGVyQmxvY2sqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4
dCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZW5kZXJlciBpcyBhbiBhdXRv
c2l6aW5nIGNsdXN0ZXIuIENoZWNrcyBpZiB0aGUgcmVuZGVyZXIgaXMgd2lkZXIgdGhhbgorICAg
IC8vIHxwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0fCBpZiB0aGUgcG9pbnRlciBpcyBub3Qg
bnVsbC4KKyAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsK
IAotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJC
bG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpOwot
ICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7Cisg
ICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2Nr
KiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKTsKKyAgICBzdGF0aWMg
dm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFp
bmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWlu
VGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0
aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5l
cnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCi0gICAgc3RhdGlj
IFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWlu
ZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5
V2l0aGluKTsKLQotICAgIC8vIEZpbmRzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRo
ZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVzY2VuZGFudAotICAgIC8vIHRleHQgbm9kZSAoZXhjbHVk
aW5nIHRob3NlIGJlbG9uZ2luZyB0byBvdGhlciBhdXRvc2l6aW5nIGNsdXN0ZXJzKS4KLSAgICBz
dGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4
dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rlcik7Ci0KLSAgICAvLyBEZXBlbmRpbmcgb24gdGhl
IHRyYXZlcnNhbCBkaXJlY3Rpb24gc3BlY2lmaWVkLCBmaW5kcyB0aGUgZmlyc3Qgb3IgdGhlIGxh
c3QgbGVhZiB0ZXh0IG5vZGUgY2hpbGQgdGhhdCBkb2Vzbid0Ci0gICAgLy8gYmVsb25nIHRvIGFu
eSBjbHVzdGVyLgotICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRM
ZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCosIHNpemVfdCYgZGVwdGgsIFRyYXZl
cnNhbERpcmVjdGlvbik7CisgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJT
a2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisKKyAgICAvLyBVc2UgdG8gdHJhdmVyc2UgdGhl
IHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGluZyBjbHVzdGVycyBhbmQgdGhlaXIgZGVzY2Vu
ZGFudHMgKHRoZSBjdXJyZW50IG9iamVjdCBhbmQgfHN0YXlXaXRoaW58CisgICAgLy8gY2FuIGJl
IGEgY2x1c3RlcikuCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCogbmV4dEluUHJlT3Jk
ZXJTa2lwcGluZ0NsdXN0ZXJzKFRyYXZlcnNhbERpcmVjdGlvbiwgY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluLCBjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2tDb250YWluaW5nQWxsVGV4dCk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGRlc2NlbmRh
bnQgdGV4dCBub2RlcyBvZiB0aGUgZ2l2ZW4gY2x1c3RlciB0aGF0IGFyZSBub3QgZGVzY2VuZGFu
dHMgb2YgYW55IGRlc2NlbmRhbnQgY2x1c3RlciwKKyAgICAvLyByZXR1cm5zIHRoZSBsb3dlc3Qg
Y29tbW9uIGFuY2VzdG9yIG9mIHRoZXNlIHRleHQgbm9kZXMuIE90aGVyd2lzZSwgcmV0dXJucyB0
aGUgY2x1c3RlciBpdHNlbGYuCisgICAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIGNv
bnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8v
IFRyYXZlcnNlcyB0aGUgdHJlZSBzdGFydGluZyBmcm9tIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHBh
dGggdXNpbmcgbmV4dEluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJzKCkgd2hpbGUgc3RheWluZyB3
aXRoaW4KKyAgICAvLyB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgcGF0aC4gUmV0dXJucyB0aGUgZnVs
bCBwYXRoIGZyb20gdGhlIGZpcnN0IG5vZGUgb2YgdGhlIHBhdGggdG8gdGhlIHRleHQgbGVhZiBm
b3VuZCBvciBhbiBlbXB0eSBwYXRoCisgICAgLy8gaWYgdGhlIHNlYXJjaCBmYWlsZWQuCisgICAg
c3RhdGljIHZvaWQgZ2V0TmV4dFRleHRMZWFmSW5QcmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoVHJh
dmVyc2FsRGlyZWN0aW9uLCBSZW5kZXJPYmplY3RzJiBwYXRoLCBjb25zdCBSZW5kZXJCbG9jayog
YmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisKKyAgICAvLyBDaGVja3MgaWYgdGhlcmUgaXMgYW4g
YXV0b3NpemluZyBjbHVzdGVyIGluIHRoZSBnaXZlbiBwYXRoIGJldHdlZW4gdGhlIGdpdmVuIGlu
ZGV4IGFuZCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBwYXRoLgorICAgIC8vIElmIG5vIGNsdXN0
ZXIgaXMgZm91bmQsIHRoaXMgcmV0dXJucyBmYWxzZS4gT3RoZXJ3aXNlLCBpdCByZW1vdmVzIHRo
ZSBmb3VuZCBjbHVzdGVyIGFuZCBhbGwgc3Vic2VxdWVudCBub2RlcyBmcm9tIHRoZQorICAgIC8v
IHBhdGgsIHRoZW4gY29udGludWVzIHRyYXZlcnNpbmcgdGhlIHRyZWUgdG8gZmluZCB0aGUgbmV4
dCB0ZXh0IGxlYWYgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgYW5kIGZpbmFsbHkgcmV0dXJucyB0
cnVlLgorICAgIHN0YXRpYyBib29sIGFkanVzdEZpcnN0VGV4dExlYWZJZkluQ2x1c3RlcihUcmF2
ZXJzYWxEaXJlY3Rpb24sIFJlbmRlck9iamVjdHMmIHBhdGgsIHNpemVfdCBzdGFydEZyb20sIGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8vIFJldHVy
bnMgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBvYmplY3QgZGVwZW5kaW5nIG9u
IHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdEZpcnN0Q2hpbGQoVHJhdmVyc2FsRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3Qq
KTsKKyAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IG9yIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIHRo
ZSBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQgZGlyZWN0aW9uLgorICAgIHN0YXRp
YyBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdE5leHRTaWJsaW5nKFRyYXZlcnNhbERpcmVjdGlv
biwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTM0Y2RiMDlmMzdjNzkzNjBhMGY5NDlhMzI3MTJmZjIzMDU2NDgyNS4uZTIyZjFj
MzdmMWZmNDM0MTNhM2ZjNzJkMGIyNTljMmRkOTQwODk5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3Np
bmcgY2x1c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZpZWQgZXhp
c3RpbmcgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IGF1dG9zaXppbmcgYXBwcm9hY2ggdG8gaGFu
ZGxpbmcgb2YgdGhlIGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9kZXMgb2YgdGhlIGVuY2xvc2luZyBh
dXRvc2l6aW5nIGNsdXN0ZXIuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVz
dGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1
dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sOgorICAgICAgICAqIGZhc3QvdGV4
dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9z
aXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWw6CisgICAg
ICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xs
Lmh0bWw6CisKIDIwMTItMTItMTEgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQXR0ZW1wdCB0byByZWJhc2VsaW5lIG1vdmUtYnktbGluZS0wMDEsIHdoaWNoIGhh
cyBiZWNvbWUgbGVzcyBmbGFreS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQu
aHRtbAppbmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWViZGUyMjVjNjQ2NTcwLi5kNWMz
MGZlOTlkOTVjOTZmMTY1ZjI0ZWE3NjI5MDc2NzEyNWU0NGVmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRl
LWluLW5hcnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNywxMyArMTcsMTMgQEAgYm9keSB7IHdpZHRo
OiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KICAgICAgICAgTG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNp
emU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBq
dXN0IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRl
IGl0cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rl
ci48YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4OyBmb250LXNpemU6IDEuODc1cmVt
Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMzBweCBjb21wdXRl
ZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGl0cyB3aWR0aDo2MDBweCBtYWtlcyBp
dCB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3Npbmcg
Y2x1c3RlciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVjb21lIGEgY2x1c3Rlci48YnI+CiAgICAg
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTog
MS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxhcmx5IGJlIGF1dG9zaXpl
ZCB0byAyMHB4Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8g
MjBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwgc2luY2UgaXQncyBub3Qg
YW4gYXV0b3NpemluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVudCBlbGVtZW50IGlzIHRo
ZSBlbmNsb3NpbmcgYXV0b3NpemluZyBjbHVzdGVyIDQwMHB4IHdpZGUuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAppbmRl
eCBiMmVmMDEwN2M5ZWM2NmM3MjNhZTk2ZmI0NDY5NmJmMzE2MTQ0N2NjLi5lZWI1MmVkOWY2NjY3
OTJlY2EwNDQ0OTExYzY4NTgyZWRjNGUzMWY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCkBA
IC0yNiwxMyArMjYsMTMgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICAgICAgTG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAg
ICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZv
bnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQg
aXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5
bGU9IndpZHRoOiA2MDBweCI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVk
IHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBpdHMgd2lk
dGg6NjAwcHggbWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBv
ZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29tZSBhIGNs
dXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0
dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQg
bGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8ZGl2Pgot
ICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBhdXRvc2l6ZWQgdG8gMjBweC48
YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0
ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0J3Mgbm90IGFuIGF1dG9zaXpp
bmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVudCBpcyB0aGUgZW5jbG9zaW5n
IGF1dG9zaXppbmcgY2x1c3RlciA0MDBweCB3aWRlLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVz
bW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgog
ICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0
b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKaW5kZXggYTkwYTAxM2FmM2VkNGVl
MDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4OC4uZTFhODE0ZTFkNmVlYzhmNDhhMDgzZjVlYTIyNDc1
NThiMWFmMTNjYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbApAQCAtMTQsOSArMTQsOCBAQCBib2R5IHsg
d2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogPGRpdiBzdHls
ZT0id2lkdGg6IDMyMHB4OyBmb250LXNpemU6IDFyZW0iPgogCVRoaXMgdGV4dCBzaG91bGQgbm90
IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMgZGl2IGlzIG5hcnJvdy48YnI+CiAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgotCTxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgCVRoaXMgdGV4dCBzaG91
bGQgbm90IGJlIGF1dG9zaXplZCBzaW5jZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgd2lkdGggb2Yg
dGhlIHBhcmVudCBibG9jayB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXV0b3Npemlu
ZyBtdWx0aXBsaWVyLjxicj4KLSAgICAJRklYTUU6IElkZWFsbHkgdGhpcyB0ZXh0IHNob3VsZCBi
ZSBhdXRvc2l6ZWQuIFdpbGwgbmVlZCB0byBiZSBmaXhlZCBsYXRlci48YnI+CisJPGRpdiBzdHls
ZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+CisgICAgCVRoaXMgdGV4dCBzaG91
bGQgYmUgYXV0b3NpemVkIHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjAp
IHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMg
ZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KICAg
ICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKaW5kZXggNDU0ZWE2MWYzYWY3OWFm
Zjg3YjdkMzMwYzU1Yjc5MTc2M2I1MjA3ZS4uNTI0YzkwMjQwNjA2YWQ1MmZiNGY2OWVhYmYxMjI3
Y2FkYWEzMjdhMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1jaGlsZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dp
ZGUtY2hpbGQuaHRtbApAQCAtMjQsOCArMjQsNyBAQCBpZiAod2luZG93LmludGVybmFscykgewog
ICAgIFRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMgdGhl
IGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMgZGl2
IGlzIG5hcnJvdy48YnI+CiAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3Rl
dHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0
IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4
MDBweCI+Ci0gICAgCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCBzaW5jZSBpdCBk
b2Vzbid0IGFmZmVjdCB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBibG9jayB3aGljaCBpcyB1c2Vk
IHRvIGNhbGN1bGF0ZSB0aGUgYXV0b3NpemluZyBtdWx0aXBsaWVyLjxicj4KLSAgICAJRklYTUU6
IElkZWFsbHkgdGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQuIFdpbGwgbmVlZCB0byBiZSBm
aXhlZCBsYXRlci48YnI+CisgICAgCVRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQw
cHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhh
biB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIgc28g
aXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9k
IHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAg
IDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9s
bC1leHBlY3RlZC5odG1sCmluZGV4IDRiN2E3NzdkYzM5MTVmNWNhNjIxNzllODg1ZTA1MDA3MThi
ZTcyYmMuLjMwMzAzMWUzNTE4YTQzOTZiZjA3MjYzOWY0ZTMzYzM0MjIwMzU5ZTYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sCkBAIC0x
MiwxNyArMTIsMTcgQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15
OiBoaWRkZW47IH0KIDxib2R5PgogCiA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgiPgotICA8ZGl2
IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eDsgZm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIHRo
aXMgaXMgcGFydCBvZiB0aGUgcm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRzIGFy
ZSBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVudCBvZiB0aGlz
IGRpdi48YnI+Ci0gICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14
OiBzY3JvbGwiPgorICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6ZTog
Mi41cmVtIj4KKyAgICAgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQw
cHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgwMC8zMjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhh
biB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiAgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNv
IGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CisgICAgICAgICAgICBMb3JlbSBpcHN1
bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVp
dXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEu
CisgICAgICAgIDwvZGl2PgogICAgIDwvZGl2PgotICA8L2Rpdj4KIAotICA8ZGl2IHN0eWxlPSJm
b250LXNpemU6IDEuMjVyZW0iPgorICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMS4yNXJlbSI+
CiAgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQg
Zm9udCBzaXplICgxNiAqIDQwMC8zMjApLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRl
bXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgotICA8L2Rp
dj4KKyAgICA8L2Rpdj4KIDwvZGl2PgogCiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC5odG1sCmluZGV4IGY3NGE3YTIxNDA4YzhhZWY0NWZiYWVkODY1ZjU5ZjdlYTkz
YjgxZTAuLjc5NzYzZGVmZmFkNTc4NzE2ZjEwYTViODRmMjA5NTllOGNmOTExZGEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dp
ZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sCkBAIC0yMSwxNyArMjEsMTcgQEAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpIHsKIDxib2R5PgogCiA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgi
PgotICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgotICAgIDxkaXYgc3R5bGU9Indp
ZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIw
cHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQg
b2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgot
ICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNp
bmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4K
KyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KKyAgICAgICAgICAgIFRoaXMgdGV4
dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDQwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDgw
MC8zMjApIHNpbmNlIGl0J3Mgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBv
ZiAgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48
YnI+CisgICAgICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIg
YWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFi
b3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCisgICAgICAgIDwvZGl2PgogICAgIDwvZGl2Pgot
ICA8L2Rpdj4KIAotICA8ZGl2PgorICAgIDxkaXY+CiAgICAgICAgIFRoaXMgdGV4dCBzaG91bGQg
YmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLjxi
cj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgotICA8L2Rpdj4KKyAgICA8L2Rpdj4KIDwvZGl2PgogCiA8
L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179297</attachid>
            <date>2012-12-13 10:13:52 -0800</date>
            <delta_ts>2012-12-14 10:31:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121213181112.patch</filename>
            <type>text/plain</type>
            <size>37937</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQyY2ZhNmNiODVhNDdm
MmM4MzA3NTdlZjdhNDNmMmRlZTY4MTE2OC4uZTA2YWI1MTM4YWY0NDg2ZTYyOWQwODM1N2ZmMjkw
MmI0NDUxYjg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVj
a3MgZm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUg
d2lkdGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxs
IHRleHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgor
ICAgICAgICBUaGUgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIGRlc2NlbmRhbnQgdGV4dCBub2RlcyBoYWQgdG8gYmUgbW9kaWZpZWQgdG8K
KyAgICAgICAgYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gZmluZGluZyB0aGUg
TENBIGFuZCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgZ2l2ZW4gY29udGFpbmVyIGlzIGEgY2x1c3Rl
ci4KKyAgICAgICAgQWZ0ZXIgdGhlIGluaXRpYWwgTENBIGlzIGZvdW5kLCB3ZSBjaGVjayBpZiBh
bnkgb2YgdGhlIHRleHQgbGVhZnMnIHBhcmVudCBub2RlcyBhcmUgY2x1c3RlcnMgZHVlIHRvIHRo
ZSBuZXcKKyAgICAgICAgZGVmaW5pdGlvbiBhbmQgaWYgc28sIHdlIGZpbmQgbmV3IHRleHQgbGVh
ZnMgYW5kIGEgbmV3IExDQS4KKyAgICAgICAgVGhpcyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBh
cmUgbm8gY2x1c3RlcnMgaW4gdGhlIHBhdGhzIGZyb20gdGhlIExDQSB0byB0aGUgZmlyc3QgYW5k
IGxhc3QgdGV4dCBsZWFmcy4KKworICAgICAgICBUaGUgY2hhbmdlIGZpeGVzIHNldmVyYWwgY2Fz
ZXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NT
dWJ0cmVlKTogY2FsbHMgcHJvY2Vzc0NsdXN0ZXIgd2l0aCBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKTogcGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgKGZvciBhc3NlcnRpb24gb25seSks
IGZpbmRzIG5ldyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGFuZCBwYXNzZXMgaXQg
aW50byBwcm9jZXNzQ29udGFpbmVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbnRhaW5lcik6IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVy
IHBhc3NlZCBpbnRvIHByb2Nlc3NDbHVzdGVyIGFuZCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVz
dGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3Rlcik6IGNvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3aWRlciB0
aGFuIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5n
IGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyKS4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIpOiBjb252ZW5pZW5jZSBt
ZXRob2QgcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6IHBhc3NlcyBuZXcgcGFyYW1ldGVy
IHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOiB1c2VzIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBp
bmdDbHVzdGVycyk6IGZpbmRzIHRoZSBuZXh0IHJlbmRlcmVyIHRoYXQgaXMgbm90IGFuIGF1dG9z
aXppbmcgY2x1c3Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmREZWVw
ZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dCk6IHJlaW1wbGVtZW50ZWQgdG8gaW5jcmVtZW50YWxs
eSBmaWx0ZXIgb3V0IGNsdXN0ZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIGN1cnJlbnQgYmxv
Y2sgY29udGFpbmluZyBhbGwgdGV4dCB3aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpnZXROZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBp
bmdDbHVzdGVycyk6IGZpbmRzIHRoZSBuZXh0IHRleHQgbGVhZiB0aGF0IGRvZXNuJ3QgYmVsb25n
IHRvIGFueSBjbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6YWRqdXN0
Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKTogaWYgdGhlIGZvdW5kIHRleHQgbGVhZiB0dXJucyBv
dXQgdG8gYmVsb25nIHRvIHNvbWUgZGVzY2VuZGFudCBjbHVzdGVyIG9mIHRoZSBvbmUgd2UncmUg
cHJvY2Vzc2luZywgZmluZHMgdGhlIG5leHQgdGV4dCBsZWFmIHRoYXQgZG9lc24ndCBiZWxvbmcg
dG8gYW55IGNsdXN0ZXIgd2l0aGluIHRoZSBvbmUgd2UncmUgcHJvY2Vzc2luZy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om9iamVjdEZpcnN0Q2hpbGQpOiBjb252ZW5pZW5jZSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om9iamVjdE5leHRTaWJs
aW5nKTogY29udmVuaWVuY2UgZnVuY3Rpb24gcmVkdWNpbmcgY29kZSBkdXBsaWNhdGlvbi4KKyAg
ICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oOgorICAgICAgICAoVGV4dEF1dG9zaXpl
cik6IHJlbW92ZWQgdW51c2VkIGRlY2xhcmF0aW9ucywgYWRkZWQgYSB0eXBlZGVmIGZvciBhIHZl
Y3RvciBvZiBSZW5kZXJPYmplY3RzLgorCiAyMDEyLTEyLTA3ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGl0
IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4gdGhlIGNv
bXBvc2l0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3Np
emVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAppbmRl
eCBiMTAyYjJiNWIyOTM3NWM3Mjg0OTJjMWM5ODRiZjdmODY1ZDg3MjIxLi40ZjliZTE4YzI2OWVl
ZjI1ZWU2ODYwMTEwYThjMzc2OGQ4YWMxNjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg1LDM4ICs4NiwzOCBAQCBib29sIFRl
eHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAg
ICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIFJl
bmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChjbHVzdGVyICYmICgh
aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKGNs
dXN0ZXIpKSkKKyAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVz
dGVyLCAwKSkKICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwog
Ci0gICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5k
b3dJbmZvKTsKKyAgICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIDAsIGxheW91
dFJvb3QsIHdpbmRvd0luZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHRBdXRv
c2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayog
Y29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3Npemlu
Z1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVz
dGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQog
ewotICAgIEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKKyAgICBBU1NFUlQo
aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyLCBwYXJlbnRCbG9ja0NvbnRhaW5p
bmdBbGxUZXh0KSk7CiAKICAgICAvLyBNYW55IHBhZ2VzIHNldCBhIG1heC13aWR0aCBvbiB0aGVp
ciBjb250ZW50LiBTbyBlc3BlY2lhbGx5IGZvciB0aGUKICAgICAvLyBSZW5kZXJWaWV3LCBpbnN0
ZWFkIG9mIGp1c3QgdGFraW5nIHRoZSB3aWR0aCBvZiB8Y2x1c3Rlcnwgd2UgZmluZAogICAgIC8v
IHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBkZXNjZW5k
YW50IHRleHQgbm9kZSBvZgogICAgIC8vIHRoZSBjbHVzdGVyIChpLmUuIHRoZSBkZWVwZXN0IHdy
YXBwZXIgYmxvY2sgdGhhdCBjb250YWlucyBhbGwgdGhlIHRleHQpLAogICAgIC8vIGFuZCB1c2Ug
aXRzIHdpZHRoIGluc3RlYWQuCi0gICAgY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFu
Y2VzdG9yID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXIpOwotICAg
IGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGggPSBsb3dlc3RDb21tb25BbmNlc3Rvci0+Y29udGVu
dExvZ2ljYWxXaWR0aCgpOworICAgIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdB
bGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXIsIHBhcmVu
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIGZsb2F0IHRleHRXaWR0aCA9IGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKIAogICAgIGZsb2F0IG11bHRp
cGxpZXIgPSAxOwotICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQobG93ZXN0Q29tbW9u
QW5jZXN0b3IsIGNvbW1vbkFuY2VzdG9yV2lkdGgpKSB7CisgICAgaWYgKGNsdXN0ZXJTaG91bGRC
ZUF1dG9zaXplZChibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCB0ZXh0V2lkdGgpKSB7CiAgICAgICAg
IGludCBsb2dpY2FsV2luZG93V2lkdGggPSBjbHVzdGVyLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gd2luZG93SW5mby53aW5kb3dTaXplLndpZHRoKCkgOiB3aW5kb3dJbmZvLndpbmRvd1Np
emUuaGVpZ2h0KCk7CiAgICAgICAgIGludCBsb2dpY2FsTGF5b3V0V2lkdGggPSBjbHVzdGVyLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gd2luZG93SW5mby5taW5MYXlvdXRTaXplLndpZHRo
KCkgOiB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUuaGVpZ2h0KCk7CiAgICAgICAgIC8vIElnbm9y
ZSBib3ggd2lkdGggaW4gZXhjZXNzIG9mIHRoZSBsYXlvdXQgd2lkdGgsIHRvIGF2b2lkIGV4dHJl
bWUgbXVsdGlwbGllcnMuCi0gICAgICAgIGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6
Om1pbjxmbG9hdD4oY29tbW9uQW5jZXN0b3JXaWR0aCwgbG9naWNhbExheW91dFdpZHRoKTsKKyAg
ICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWluPGZsb2F0Pih0ZXh0V2lk
dGgsIGxvZ2ljYWxMYXlvdXRXaWR0aCk7CiAKICAgICAgICAgbXVsdGlwbGllciA9IGxvZ2ljYWxD
bHVzdGVyV2lkdGggLyBsb2dpY2FsV2luZG93V2lkdGg7CiAgICAgICAgIG11bHRpcGxpZXIgKj0g
bV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+dGV4dEF1dG9zaXppbmdGb250U2NhbGVGYWN0b3IoKTsK
ICAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDEuMGYsIG11bHRpcGxpZXIpOwogICAgIH0K
IAotICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVyLCBzdWJ0cmVlUm9v
dCwgd2luZG93SW5mbyk7CisgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWlu
ZXIsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKIH0K
IAogc3RhdGljIGJvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lcikKQEAgLTEzOSw3ICsxNDAsNyBAQCBzdGF0aWMgYm9vbCBjb250ZW50SGVp
Z2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0
IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJl
ZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKK3ZvaWQg
VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4
dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJiB3aW5kb3dJbmZvKQogewogICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIoY29u
dGFpbmVyKSk7CiAKQEAgLTE1NSwxMCArMTU2LDEwIEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJv
Y2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBS
CiAgICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0
aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2Nl
bmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVz
dGVyKGRlc2NlbmRhbnRCbG9jaykpCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVz
Y2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5m
byk7CisgICAgICAgICAgICBpZiAoaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5k
YW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQorICAgICAgICAgICAgICAgIHByb2Nl
c3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFu
dEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgICAgIHBy
b2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAg
ICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRh
aW5lcnMoZGVzY2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTIxNCwxNCArMjE1LDE0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dEF1dG9z
aXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiti
b29sIFRleHRBdXRvc2l6ZXI6OmlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVu
ZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWlu
aW5nQWxsVGV4dCkKIHsKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwg
YXV0b3NpemluZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5m
b3JjZSBhIHVuaWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtp
bmcKICAgICAvLyB0aGUgbWFqb3Igc2VjdGlvbnMgb2YgdGhlIHBhZ2UgbG9vayBpbnRlcm5hbGx5
IGNvbnNpc3RlbnQuCi0gICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRlbnRzIChpbmNsdWRpbmcgb3Ro
ZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCisgICAgLy8gQWxsIHRoZWlyIGRl
c2NlbmRhbnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNo
YXJlCiAgICAgLy8gdGhlIHNhbWUgbXVsdGlwbGllciwgZXhjZXB0IGZvciBzdWJ0cmVlcyB3aGlj
aCBhcmUgdGhlbXNlbHZlcyBjbHVzdGVycywKLSAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNj
ZW5kZW50IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBhbGwKKyAgICAvLyBh
bmQgc29tZSBvZiB0aGVpciBkZXNjZW5kYW50IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9z
aXplZCBhdCBhbGwKICAgICAvLyAoZm9yIGV4YW1wbGUgaWYgdGhlaXIgaGVpZ2h0IGlzIGNvbnN0
cmFpbmVkKS4KICAgICAvLyBBZGRpdGlvbmFsbHksIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCBy
ZXF1aXJlcyBlYWNoIGNsdXN0ZXIgdG8gY29udGFpbiBhCiAgICAgLy8gbWluaW11bSBhbW91bnQg
b2YgdGV4dCwgd2l0aG91dCB3aGljaCBpdCB3b24ndCBiZSBhdXRvc2l6ZWQuCkBAIC0yMzAsMTEg
KzIzMSwxNCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3Qg
UmVuZGVyQmxvY2sqIHJlbmRlcmVyKQogICAgIC8vIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMg
KGh0dHA6Ly93My5vcmcvVFIvY3NzMy1ib3gvI2Zsb3ctcm9vdCksIHNpbmNlCiAgICAgLy8gZmxv
dyByb290cyBjb3JyZXNwb25kIHRvIGJveCBjb250YWluZXJzIHRoYXQgYmVoYXZlIHNvbWV3aGF0
CiAgICAgLy8gaW5kZXBlbmRlbnRseSBmcm9tIHRoZWlyIHBhcmVudCAoZm9yIGV4YW1wbGUgdGhl
eSBkb24ndCBvdmVybGFwIGZsb2F0cykuCi0gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93
IGZsb3cgcm9vdCBhbHNvIGNvbnZlbmllbnRseSBpbmNsdWRlcyBtb3N0IG9mIHRoZQorICAgIC8v
IFRoZSBkZWZpbml0aW9uIG9mIGEgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVz
IG1vc3Qgb2YgdGhlCiAgICAgLy8gd2F5cyB0aGF0IGEgYm94IGFuZCBpdHMgY2hpbGRyZW4gY2Fu
IGhhdmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgd2lkdGgKICAgICAvLyBmcm9tIHRoZSBib3gn
cyBwYXJlbnQgKHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50
CiAgICAgLy8gd2lkdGggYmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dl
ciBibG9ja3Mgd291bGQgZW5kIHVwCiAgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNl
IGJlIG5lY2Vzc2FyeSkuCisgICAgLy8gQWRkaXRpb25hbGx5LCBhbnkgY29udGFpbmVycyB0aGF0
IGFyZSB3aWRlciB0aGFuIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwKKyAgICAvLyBvZiB0
aGVpciBlbmNsb3NpbmcgY2x1c3RlciBhbHNvIGJlY29tZSBjbHVzdGVycywgc2luY2UgdGhleSBu
ZWVkIHNwZWNpYWwKKyAgICAvLyB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAgIEFT
U0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAogICAgIHJldHVybiByZW5k
ZXJlci0+aXNSZW5kZXJWaWV3KCkKQEAgLTI0NCwxMyArMjQ4LDIwIEBAIGJvb2wgVGV4dEF1dG9z
aXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiAg
ICAgICAgIHx8IHJlbmRlcmVyLT5pc1RhYmxlQ2FwdGlvbigpCiAgICAgICAgIHx8IHJlbmRlcmVy
LT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpCiAgICAgICAgIHx8IHJlbmRlcmVy
LT5oYXNDb2x1bW5zKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpOworICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkK
KyAgICAgICAgfHwgKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQKKyAgICAgICAgICAgICYm
IHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCkgPiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdB
bGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCkpOwogICAgIC8vIEZJWE1FOiBUYWJsZXMgbmVl
ZCBzcGVjaWFsIGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBjb2x1bW5zIGJ5CiAgICAg
Ly8gdGhlIHNhbWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJlbnQgd2lkdGhzOyBzbyBk
byBoYXNDb2x1bW5zKCkKICAgICAvLyByZW5kZXJlcnMsIGFuZCBwcm9iYWJseSBmbGV4Ym94ZXMu
Li4KIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29u
c3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9hdCBjb21tb25BbmNlc3Rv
cldpZHRoKQorYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxs
VGV4dCkKK3sKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFpbmVyKG9iamVjdCkgJiYgaXND
b250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCksIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQpOworfQorCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRC
ZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxv
YXQgYmxvY2tXaWR0aCkKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNv
bnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNz
IGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAg
LTI2MywxNSArMjc0LDE1IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0
b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlCiAgICAgLy8gaW4gYW5k
IHBhbiBmcm9tIHNpZGUgdG8gc2lkZSB0byByZWFkIGVhY2ggbGluZSwgc2luY2UgaWYgdGhlcmUg
YXJlIHZlcnkKICAgICAvLyBmZXcgbGluZXMgb2YgdGV4dCB5b3UnbGwgb25seSBuZWVkIHRvIHBh
biBhY3Jvc3Mgb25jZSBvciB0d2ljZS4KICAgICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9
IDQ7Ci0gICAgZmxvYXQgbWluVGV4dFdpZHRoID0gY29tbW9uQW5jZXN0b3JXaWR0aCAqIG1pbkxp
bmVzT2ZUZXh0OworICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5l
c09mVGV4dDsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50
VGV4dFdpZHRoKGxvd2VzdENvbW1vbkFuY2VzdG9yLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7
CisgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoYmxvY2tDb250YWluaW5nQWxsVGV4dCwg
YmxvY2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgIGlm
ICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRU
ZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvYXQgbWluVGV4dFdpZHRo
LCBmbG9hdCYgdGV4dFdpZHRoKQordm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4
dFdpZHRoKQogewogICAgIGJvb2wgc2tpcExvY2FsVGV4dCA9IGNvbnRlbnRIZWlnaHRJc0NvbnN0
cmFpbmVkKGNvbnRhaW5lcik7CiAKQEAgLTI4MSw4ICsyOTIsOCBAQCB2b2lkIFRleHRBdXRvc2l6
ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIsIGZsbwogICAgICAgICAgICAgdGV4dFdpZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50
KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgKiBkZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRG
b250U2l6ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNj
ZW5kYW50KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRv
UmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0Ns
dXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkKLSAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFu
dFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAg
ICAgICAgICAgIGlmICghaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50Qmxv
Y2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQorICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNj
ZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCwg
bWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0V2lk
dGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA2LDY4ICszMTcs
MTE4IEBAIFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0
IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0Fs
bFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpCitjb25zdCBSZW5kZXJPYmplY3QqIFRl
eHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdDbHVzdGVycyhUcmF2ZXJzYWxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0IFJlbmRl
ck9iamVjdCogc3RheVdpdGhpbiwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQpCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOworICAg
IGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4gfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY3VycmVu
dCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgIGZvciAoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IG9iamVjdEZpcnN0Q2hpbGQoZGlyZWN0aW9uLCBjdXJyZW50KTsgY2hpbGQ7
IGNoaWxkID0gb2JqZWN0TmV4dFNpYmxpbmcoZGlyZWN0aW9uLCBjaGlsZCkpCisgICAgICAgICAg
ICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2hpbGQsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKIAotICAgIHNpemVfdCBmaXJzdERlcHRo
ID0gMDsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRvTGFzdCk7Ci0g
ICAgaWYgKCFmaXJzdFRleHRMZWFmKQotICAgICAgICByZXR1cm4gY2x1c3RlcjsKKyAgICBmb3Ig
KGNvbnN0IFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBjdXJyZW50OyBhbmNlc3RvcjsgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yID09IHN0YXlX
aXRoaW4pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZm9yIChjb25zdCBSZW5kZXJP
YmplY3QqIHNpYmxpbmcgPSBvYmplY3ROZXh0U2libGluZyhkaXJlY3Rpb24sIGFuY2VzdG9yKTsg
c2libGluZzsgc2libGluZyA9IG9iamVjdE5leHRTaWJsaW5nKGRpcmVjdGlvbiwgc2libGluZykp
CisgICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoc2libGluZywgYmxvY2tDb250
YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmc7CisgICAgfQog
Ci0gICAgc2l6ZV90IGxhc3REZXB0aCA9IDA7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsYXN0
VGV4dExlYWYgPSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBsYXN0RGVw
dGgsIExhc3RUb0ZpcnN0KTsKLSAgICBBU1NFUlQobGFzdFRleHRMZWFmKTsKKyAgICByZXR1cm4g
MDsKK30KIAotICAgIC8vIEVxdWFsaXplIHRoZSBkZXB0aHMgaWYgbmVjZXNzYXJ5LiBPbmx5IG9u
ZSBvZiB0aGUgd2hpbGUgbG9vcHMgYmVsb3cgd2lsbCBnZXQgZXhlY3V0ZWQuCi0gICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiBmaXJzdE5vZGUgPSBmaXJzdFRleHRMZWFmOwotICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogbGFzdE5vZGUgPSBsYXN0VGV4dExlYWY7Ci0gICAgd2hpbGUgKGZpcnN0RGVwdGgg
PiBsYXN0RGVwdGgpIHsKLSAgICAgICAgZmlyc3ROb2RlID0gZmlyc3ROb2RlLT5wYXJlbnQoKTsK
LSAgICAgICAgLS1maXJzdERlcHRoOwotICAgIH0KLSAgICB3aGlsZSAobGFzdERlcHRoID4gZmly
c3REZXB0aCkgewotICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wYXJlbnQoKTsKLSAgICAg
ICAgLS1sYXN0RGVwdGg7Ci0gICAgfQorY29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6ZXI6
OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1
c3RlciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpCit7
CisgICAgQVNTRVJUX1VOVVNFRChwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBpc0NvbnRh
aW5lckF1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRl
eHQpKTsKKworICAgIFJlbmRlck9iamVjdHMgZmlyc3RQYXRoKDEsIGNsdXN0ZXIpOworICAgIGdl
dE5leHRUZXh0TGVhZkluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJzKEZpcnN0VG9MYXN0LCBmaXJz
dFBhdGgsIDApOworICAgIGlmIChmaXJzdFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
Y2x1c3RlcjsKIAotICAgIC8vIEdvIHVwIGZyb20gYm90aCBub2RlcyB1bnRpbCB0aGUgcGFyZW50
IGlzIHRoZSBzYW1lLiBCb3RoIHBvaW50ZXJzIHdpbGwgcG9pbnQgdG8gdGhlIExDQSB0aGVuLgot
ICAgIHdoaWxlIChmaXJzdE5vZGUgIT0gbGFzdE5vZGUpIHsKLSAgICAgICAgZmlyc3ROb2RlID0g
Zmlyc3ROb2RlLT5wYXJlbnQoKTsKLSAgICAgICAgbGFzdE5vZGUgPSBsYXN0Tm9kZS0+cGFyZW50
KCk7CisgICAgUmVuZGVyT2JqZWN0cyBsYXN0UGF0aCgxLCBjbHVzdGVyKTsKKyAgICBnZXROZXh0
VGV4dExlYWZJblByZU9yZGVyU2tpcHBpbmdDbHVzdGVycyhMYXN0VG9GaXJzdCwgbGFzdFBhdGgs
IDApOworICAgIEFTU0VSVCghbGFzdFBhdGguaXNFbXB0eSgpKTsKKworICAgIGNvbnN0IFJlbmRl
ckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gMDsKKyAgICB3aGlsZSAoIWJsb2NrQ29u
dGFpbmluZ0FsbFRleHQpIHsKKyAgICAgICAgc2l6ZV90IG1pblNpemUgPSBzdGQ6Om1pbihmaXJz
dFBhdGguc2l6ZSgpLCBsYXN0UGF0aC5zaXplKCkpOworICAgICAgICBzaXplX3QgZmlyc3ROb3RF
cXVhbEluZGV4ID0gMTsKKyAgICAgICAgd2hpbGUgKGZpcnN0Tm90RXF1YWxJbmRleCA8IG1pblNp
emUgJiYgZmlyc3RQYXRoW2ZpcnN0Tm90RXF1YWxJbmRleF0gPT0gbGFzdFBhdGhbZmlyc3ROb3RF
cXVhbEluZGV4XSkKKyAgICAgICAgICAgIGZpcnN0Tm90RXF1YWxJbmRleCsrOworCisgICAgICAg
IGNvbnN0IFJlbmRlck9iamVjdCogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaXJzdFBhdGhbZmly
c3ROb3RFcXVhbEluZGV4IC0gMV07CisgICAgICAgIGlmIChsb3dlc3RDb21tb25BbmNlc3Rvci0+
aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IHRv
UmVuZGVyQmxvY2sobG93ZXN0Q29tbW9uQW5jZXN0b3IpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRh
aW5pbmdCbG9jaygpOworICAgICAgICBBU1NFUlQoYmxvY2tDb250YWluaW5nQWxsVGV4dC0+aXNE
ZXNjZW5kYW50T2YoY2x1c3RlcikpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFueSBvZiB0aGUg
dGV4dCBsZWFmcycgcGFyZW50cyBhcmUgZ29pbmcgdG8gYmUgY2x1c3RlcnMgZHVlIHRvIGJlaW5n
IHdpZGVyIHRoYW4gdGhlIGJsb2NrIGp1c3QgZm91bmQuCisgICAgICAgIC8vIElmIHNvLCBzZWFy
Y2ggZm9yIHRoZSB0ZXh0IGxlYWZzIGFnYWluIHN0YXJ0aW5nIGZyb20gdGhlIG5leHQgc2libGlu
ZyBvZiB0aGUgZm91bmQgY2x1c3Rlci4KKyAgICAgICAgYm9vbCBmaXJzdFRleHRMZWFmSW52YWxp
ZGF0ZWQgPSBhZGp1c3RGaXJzdFRleHRMZWFmSWZJbkNsdXN0ZXIoRmlyc3RUb0xhc3QsIGZpcnN0
UGF0aCwgZmlyc3ROb3RFcXVhbEluZGV4LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKKyAgICAg
ICAgYm9vbCBsYXN0VGV4dExlYWZJbnZhbGlkYXRlZCA9IGFkanVzdEZpcnN0VGV4dExlYWZJZklu
Q2x1c3RlcihMYXN0VG9GaXJzdCwgbGFzdFBhdGgsIGZpcnN0Tm90RXF1YWxJbmRleCwgYmxvY2tD
b250YWluaW5nQWxsVGV4dCk7CisgICAgICAgIGlmIChmaXJzdFRleHRMZWFmSW52YWxpZGF0ZWQg
fHwgbGFzdFRleHRMZWFmSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFBhdGgu
aXNFbXB0eSgpIHx8IGxhc3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y2x1c3RlcjsKKyAgICAgICAgICAgIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSAwOworICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGZpcnN0Tm9kZS0+aXNSZW5kZXJCbG9jaygpKQotICAgICAg
ICByZXR1cm4gdG9SZW5kZXJCbG9jayhmaXJzdE5vZGUpOworICAgIHJldHVybiBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0OworfQogCi0gICAgLy8gY29udGFpbmluZ0Jsb2NrKCkgc2hvdWxkIG5ldmVy
IGxlYXZlIHRoZSBjbHVzdGVyLCBzaW5jZSBpdCBvbmx5IHNraXBzIGFuY2VzdG9ycyB3aGVuIGZp
bmRpbmcgdGhlCi0gICAgLy8gY29udGFpbmVyIG9mIHBvc2l0aW9uOmFic29sdXRlL2ZpeGVkIGJs
b2NrcywgYW5kIHRob3NlIGNhbm5vdCBleGlzdCBiZXR3ZWVuIGEgY2x1c3RlciBhbmQgaXRzIHRl
eHQKLSAgICAvLyBub2RlcyBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIGFzIGlzQXV0b3NpemluZ0Ns
dXN0ZXIgd291bGQgaGF2ZSBtYWRlIHRoZW0gaW50byB0aGVpciBvd24gaW5kZXBlbmRlbnQKLSAg
ICAvLyBjbHVzdGVyLgotICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSBmaXJzdE5v
ZGUtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIEFTU0VSVChjb250YWluaW5nQmxvY2stPmlzRGVz
Y2VuZGFudE9mKGNsdXN0ZXIpKTsKK3ZvaWQgVGV4dEF1dG9zaXplcjo6Z2V0TmV4dFRleHRMZWFm
SW5QcmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
UmVuZGVyT2JqZWN0cyYgcGF0aCwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQpCit7CisgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisKKyAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIGN1cnJlbnQgPSBwYXRoLmxhc3QoKTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3Qq
IHN0YXlXaXRoaW4gPSBwYXRoLmZpcnN0KCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBuZXh0
ID0gY3VycmVudDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG5leHQgPSBuZXh0SW5QcmVPcmRl
clNraXBwaW5nQ2x1c3RlcnMoZGlyZWN0aW9uLCBuZXh0LCBzdGF5V2l0aGluLCBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0KTsKKyAgICAgICAgaWYgKCFuZXh0KQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGlmIChuZXh0LT5pc1RleHQoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0cyBu
ZXh0UGF0aDsKKyAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9IHN0YXlXaXRoaW4pIHsKKyAgICAg
ICAgICAgICAgICBuZXh0UGF0aC5hcHBlbmQobmV4dCk7CisgICAgICAgICAgICAgICAgbmV4dCA9
IG5leHQtPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dFBhdGguYXBw
ZW5kKHN0YXlXaXRoaW4pOworICAgICAgICAgICAgbmV4dFBhdGgucmV2ZXJzZSgpOwogCi0gICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9jazsKKyAgICAgICAgICAgIHBhdGguc3dhcChuZXh0UGF0aCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgcGF0aC5jbGVhcigp
OwogfQogCi1jb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRM
ZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50LCBzaXplX3QmIGRlcHRo
LCBUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKQorYm9vbCBUZXh0QXV0b3NpemVyOjphZGp1
c3RGaXJzdFRleHRMZWFmSWZJbkNsdXN0ZXIoVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
UmVuZGVyT2JqZWN0cyYgcGF0aCwgc2l6ZV90IHN0YXJ0RnJvbSwgY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQpCiB7Ci0gICAgaWYgKHBhcmVudC0+aXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gcGFyZW50LT5pc1RleHQoKSA/IHBhcmVudCA6IDA7Ci0KLSAgICArK2Rl
cHRoOwotICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9uID09IEZpcnN0
VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hpbGQoKTsKLSAg
ICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDb250YWluZXIoY2hp
bGQpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2soY2hpbGQpKSkgewotICAg
ICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJ
bkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pOwotICAgICAgICAgICAgaWYgKGxlYWYp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxlYWY7CisgICAgc2l6ZV90IGNsdXN0ZXJJbmRleCA9
IHBhdGguc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEZyb207IGkgPCBwYXRoLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVzdGVyKHBhdGhbaV0sIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQpKSB7CisgICAgICAgICAgICBjbHVzdGVySW5kZXggPSBpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2hpbGQgPSAoZGlyZWN0aW9u
ID09IEZpcnN0VG9MYXN0KSA/IGNoaWxkLT5uZXh0U2libGluZygpIDogY2hpbGQtPnByZXZpb3Vz
U2libGluZygpOwogICAgIH0KLSAgICAtLWRlcHRoOwogCi0gICAgcmV0dXJuIDA7CisgICAgaWYg
KGNsdXN0ZXJJbmRleCA9PSBwYXRoLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcGF0aC5yZW1vdmUoY2x1c3RlckluZGV4ICsgMSwgcGF0aC5zaXplKCkgLSAoY2x1c3Rlcklu
ZGV4ICsgMSkpOworICAgIGdldE5leHRUZXh0TGVhZkluUHJlT3JkZXJTa2lwcGluZ0NsdXN0ZXJz
KGRpcmVjdGlvbiwgcGF0aCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2NvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6b2JqZWN0Rmlyc3RD
aGlsZChUcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBvYmplY3Qt
PmZpcnN0Q2hpbGQoKSA6IG9iamVjdC0+bGFzdENoaWxkKCk7Cit9CisKK2NvbnN0IFJlbmRlck9i
amVjdCogVGV4dEF1dG9zaXplcjo6b2JqZWN0TmV4dFNpYmxpbmcoVHJhdmVyc2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgcmV0dXJuIChk
aXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gb2JqZWN0LT5uZXh0U2libGluZygpIDogb2JqZWN0
LT5wcmV2aW91c1NpYmxpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggYTcwOWIxMTY4ZTQ0ZGYwMGVj
MWY5ZDczYmJlNWU1MTZmZTkyNjc3NC4uMTRhY2I5ZmEwMTRlZTRhODMyZGM0NGQ5ZDQ5ZDBhM2U5
YzcyOWQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCkBAIC0y
OCwxNyArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAKLSNpbmNsdWRl
ICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIFJlbmRlckJsb2NrOwogY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBSZW5kZXJUZXh0Owogc3RydWN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbzsKIApA
QCAtNTUsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IGNvbXB1dGVBdXRvc2l6
ZWRGb250U2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBmbG9hdCBtdWx0aXBsaWVyKTsKIAogcHJp
dmF0ZToKKyAgICB0eXBlZGVmIFZlY3Rvcjxjb25zdCBSZW5kZXJPYmplY3QqPiBSZW5kZXJPYmpl
Y3RzOwogICAgIGVudW0gVHJhdmVyc2FsRGlyZWN0aW9uIHsKICAgICAgICAgRmlyc3RUb0xhc3Qs
CiAgICAgICAgIExhc3RUb0ZpcnN0CkBAIC02MiwyNyArNjEsNDggQEAgcHJpdmF0ZToKIAogICAg
IGV4cGxpY2l0IFRleHRBdXRvc2l6ZXIoRG9jdW1lbnQqKTsKIAotICAgIHZvaWQgcHJvY2Vzc0Ns
dXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRl
ck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwot
ICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayog
Y29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3Npemlu
Z1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVz
dGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50Qmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4
dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0
IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBU
ZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKIAogICAgIHZvaWQgc2V0TXVsdGlwbGllcihSZW5k
ZXJPYmplY3QqLCBmbG9hdCk7CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJl
bmRlcmVyIGlzIGFuIGF1dG9zaXppbmcgY29udGFpbmVyLgogICAgIHN0YXRpYyBib29sIGlzQXV0
b3NpemluZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgYm9vbCBp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKik7CisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBnaXZlbiBhdXRvc2l6aW5nIGNvbnRhaW5lciBpcyBhbiBhdXRvc2l6aW5nIGNs
dXN0ZXIuIENoZWNrcyBpZiB0aGUgY29udGFpbmVyIGlzIHdpZGVyIHRoYW4KKyAgICAvLyB8cGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dHwgaWYgdGhlIHBvaW50ZXIgaXMgbm90IG51bGwuCisg
ICAgc3RhdGljIGJvb2wgaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayosIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHJlbmRlcmVyIGlzIGFuIGF1dG9zaXpp
bmcgY2x1c3Rlci4gQ2hlY2tzIGlmIHRoZSByZW5kZXJlciBpcyB3aWRlciB0aGFuCisgICAgLy8g
fHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHR8IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBudWxs
LgorICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOwogCi0g
ICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2Nr
KiBsb3dlc3RDb21tb25BbmNlc3RvciwgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCk7Ci0gICAg
c3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKKyAgICBz
dGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpOworICAgIHN0YXRpYyB2b2lk
IG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0
V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0
cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFpbmVycyAo
YnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KLSAgICBzdGF0aWMgUmVu
ZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMo
Y29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50LCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRo
aW4pOwotCi0gICAgLy8gRmluZHMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZp
cnN0IGFuZCB0aGUgbGFzdCBkZXNjZW5kYW50Ci0gICAgLy8gdGV4dCBub2RlIChleGNsdWRpbmcg
dGhvc2UgYmVsb25naW5nIHRvIG90aGVyIGF1dG9zaXppbmcgY2x1c3RlcnMpLgotICAgIHN0YXRp
YyBjb25zdCBSZW5kZXJCbG9jayogZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNv
bnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKTsKLQotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgdHJh
dmVyc2FsIGRpcmVjdGlvbiBzcGVjaWZpZWQsIGZpbmRzIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBs
ZWFmIHRleHQgbm9kZSBjaGlsZCB0aGF0IGRvZXNuJ3QKLSAgICAvLyBiZWxvbmcgdG8gYW55IGNs
dXN0ZXIuCi0gICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCogZmluZEZpcnN0VGV4dExlYWZO
b3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kiwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2Fs
RGlyZWN0aW9uKTsKKyAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBw
aW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKKworICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJl
ZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGNsdXN0ZXJzIGFuZCB0aGVpciBkZXNjZW5kYW50
cyAodGhlIGN1cnJlbnQgb2JqZWN0IGFuZCB8c3RheVdpdGhpbnwKKyAgICAvLyBjYW4gYmUgYSBj
bHVzdGVyKS4KKyAgICBzdGF0aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNr
aXBwaW5nQ2x1c3RlcnMoVHJhdmVyc2FsRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4sIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgZGVzY2VuZGFudCB0
ZXh0IG5vZGVzIG9mIHRoZSBnaXZlbiBjbHVzdGVyIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBv
ZiBhbnkgZGVzY2VuZGFudCBjbHVzdGVyLAorICAgIC8vIHJldHVybnMgdGhlIGxvd2VzdCBjb21t
b24gYW5jZXN0b3Igb2YgdGhlc2UgdGV4dCBub2Rlcy4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBj
bHVzdGVyIGl0c2VsZi4KKyAgICBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZpbmREZWVwZXN0
QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3RlciwgY29uc3Qg
UmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworCisgICAgLy8gVHJh
dmVyc2VzIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3Qgbm9kZSBpbiB0aGUgcGF0aCB1
c2luZyBuZXh0SW5QcmVPcmRlclNraXBwaW5nQ2x1c3RlcnMoKSB3aGlsZSBzdGF5aW5nIHdpdGhp
bgorICAgIC8vIHRoZSBmaXJzdCBub2RlIGluIHRoZSBwYXRoLiBSZXR1cm5zIHRoZSBmdWxsIHBh
dGggZnJvbSB0aGUgZmlyc3Qgbm9kZSBvZiB0aGUgcGF0aCB0byB0aGUgdGV4dCBsZWFmIGZvdW5k
IG9yIGFuIGVtcHR5IHBhdGgKKyAgICAvLyBpZiB0aGUgc2VhcmNoIGZhaWxlZC4KKyAgICBzdGF0
aWMgdm9pZCBnZXROZXh0VGV4dExlYWZJblByZU9yZGVyU2tpcHBpbmdDbHVzdGVycyhUcmF2ZXJz
YWxEaXJlY3Rpb24sIFJlbmRlck9iamVjdHMmIHBhdGgsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0KTsKKworICAgIC8vIENoZWNrcyBpZiB0aGVyZSBpcyBhbiBhdXRv
c2l6aW5nIGNsdXN0ZXIgaW4gdGhlIGdpdmVuIHBhdGggYmV0d2VlbiB0aGUgZ2l2ZW4gaW5kZXgg
YW5kIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHBhdGguCisgICAgLy8gSWYgbm8gY2x1c3RlciBp
cyBmb3VuZCwgdGhpcyByZXR1cm5zIGZhbHNlLiBPdGhlcndpc2UsIGl0IHJlbW92ZXMgdGhlIGZv
dW5kIGNsdXN0ZXIgYW5kIGFsbCBzdWJzZXF1ZW50IG5vZGVzIGZyb20gdGhlCisgICAgLy8gcGF0
aCwgdGhlbiBjb250aW51ZXMgdHJhdmVyc2luZyB0aGUgdHJlZSB0byBmaW5kIHRoZSBuZXh0IHRl
eHQgbGVhZiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCBhbmQgZmluYWxseSByZXR1cm5zIHRydWUu
CisgICAgc3RhdGljIGJvb2wgYWRqdXN0Rmlyc3RUZXh0TGVhZklmSW5DbHVzdGVyKFRyYXZlcnNh
bERpcmVjdGlvbiwgUmVuZGVyT2JqZWN0cyYgcGF0aCwgc2l6ZV90IHN0YXJ0RnJvbSwgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworCisgICAgLy8gUmV0dXJucyB0
aGUgZmlyc3Qgb3IgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIG9iamVjdCBkZXBlbmRpbmcgb24gdGhl
IHNwZWNpZmllZCBkaXJlY3Rpb24uCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0Rmlyc3RDaGlsZChUcmF2ZXJzYWxEaXJlY3Rpb24sIGNvbnN0IFJlbmRlck9iamVjdCopOwor
ICAgIC8vIFJldHVybnMgdGhlIG5leHQgb3IgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIG9i
amVjdCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24uCisgICAgc3RhdGljIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0TmV4dFNpYmxpbmcoVHJhdmVyc2FsRGlyZWN0aW9uLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogfTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBhMDUwODhhOWNmMGU2NmUwNDA0NzczNTE0ZjUxMDczYTk1ZDQxNjFlLi5iOGVlZmEyYjZh
NWRiZDQwYzg5N2JlZjc5YzE2ODYxMTVlZjgwNGRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTItMTEtMjkgIEFudG9uIFZheXZvZCAgPGF2YXl2b2RAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFRleHQgQXV0b3NpemluZzogY29udGFpbmVycyB3aWRlciB0aGFuIHRoZWlyIGVuY2xvc2luZyBj
bHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHNlcGFyYXRlIGNsdXN0ZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MjcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb2RpZmllZCBleGlzdGlu
ZyB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgYXV0b3NpemluZyBhcHByb2FjaCB0byBoYW5kbGlu
ZyBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAgICAgd2lkZXIgdGhhbiB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBub2RlcyBvZiB0aGUgZW5jbG9zaW5nIGF1dG9z
aXppbmcgY2x1c3Rlci4KKworICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXIt
d2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3Np
emluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3Npemlu
Zy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRt
bDoKKwogMjAxMi0xMi0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8g
ZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21wb3NpdG9yCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93
LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVy
LXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwKaW5kZXggNmNmZjA2ZTQ0OGIyZjc1ODNiZGEy
MDM0M2VlYmRlMjI1YzY0NjU3MC4uZDVjMzBmZTk5ZDk1Yzk2ZjE2NWYyNGVhNzYyOTA3NjcxMjVl
NDRlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rl
ci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbApAQCAtMTcs
MTMgKzE3LDEzIEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTog
aGlkZGVuOyB9CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5
bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0
IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYg
KiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0
aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2
MDBweDsgZm9udC1zaXplOiAxLjg3NXJlbSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUg
YXV0b3NpemVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5j
ZSBpdHMgd2lkdGg6NjAwcHggbWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBh
bmNlc3RvciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJl
Y29tZSBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwg
Y29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lk
aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAg
ICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hv
dWxkIHNpbWlsYXJseSBiZSBhdXRvc2l6ZWQgdG8gMjBweC48YnI+CisgICAgICAgIFRoaXMgdGV4
dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQw
MCAvIDMyMCksIHNpbmNlIGl0J3Mgbm90IGFuIGF1dG9zaXppbmcgY2x1c3RlciBpdHNlbGYgYW5k
IGl0cyBwYXJlbnQgZWxlbWVudCBpcyB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3RlciA0
MDBweCB3aWRlLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNl
Y3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50
IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUt
aW4tbmFycm93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVy
LXdpZGUtaW4tbmFycm93Lmh0bWwKaW5kZXggYjJlZjAxMDdjOWVjNjZjNzIzYWU5NmZiNDQ2OTZi
ZjMxNjE0NDdjYy4uZWViNTJlZDlmNjY2NzkyZWNhMDQ0NDkxMWM2ODU4MmVkYzRlMzFmOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWlu
LW5hcnJvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0
ZXItd2lkZS1pbi1uYXJyb3cuaHRtbApAQCAtMjYsMTMgKzI2LDEzIEBAIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5
bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVk
IHRvIGp1c3QgMjBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIGRl
c3BpdGUgaXRzIHdpZHRoOjgwMHB4IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBj
bHVzdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHgiPgorICAgICAgICBUaGlz
IHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAzMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYg
KiA2MDAvMzIwKSwgc2luY2UgaXRzIHdpZHRoOjYwMHB4IG1ha2VzIGl0IHdpZGVyIHRoYW4gdGhl
IGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyLCBoZW5jZSBp
dCB3aWxsIGl0c2VsZiBiZWNvbWUgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVz
bW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgog
ICAgIDwvZGl2PgogCiAgICAgPGRpdj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFy
bHkgYmUgYXV0b3NpemVkIHRvIDIwcHguPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJl
IGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBz
aW5jZSBpdCdzIG5vdCBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50
IGVsZW1lbnQgaXMgdGhlIGVuY2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIgNDAwcHggd2lkZS48
YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5o
dG1sCmluZGV4IGE5MGEwMTNhZjNlZDRlZTA0ZTI2YWM2MDcyMDZmOTJkYWNiYjVhODguLmUxYTgx
NGUxZDZlZWM4ZjQ4YTA4M2Y1ZWEyMjQ3NTU4YjFhZjEzY2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwK
QEAgLTE0LDkgKzE0LDggQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxv
dy15OiBoaWRkZW47IH0KIDxkaXYgc3R5bGU9IndpZHRoOiAzMjBweDsgZm9udC1zaXplOiAxcmVt
Ij4KIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRo
ZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRp
diBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0
ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1
dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLQk8ZGl2IHN0eWxlPSJ3aWR0aDogODAw
cHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9l
c24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0
byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJ
ZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4
ZWQgbGF0ZXIuPGJyPgorCTxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVy
ZW0iPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVk
IGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2Vz
dCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMg
YSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwv
ZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1j
aGlsZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5o
dG1sCmluZGV4IDQ1NGVhNjFmM2FmNzlhZmY4N2I3ZDMzMGM1NWI3OTE3NjNiNTIwN2UuLjUyNGM5
MDI0MDYwNmFkNTJmYjRmNjllYWJmMTIyN2NhZGFhMzI3YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKQEAgLTI0LDggKzI0LDcgQEAg
aWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRv
c2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBy
b290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4K
ICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5v
dCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBw
YXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVs
dGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0
b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIAlUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAv
MzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2Yg
aXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+
CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNp
Y2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQg
ZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRl
LWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMz
OTE1ZjVjYTYyMTc5ZTg4NWUwNTAwNzE4YmU3MmJjLi4zMDMwMzFlMzUxOGE0Mzk2YmYwNzI2Mzlm
NGUzM2MzNDIyMDM1OWU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1z
Y3JvbGwtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTcgKzEyLDE3IEBAIGJvZHkgeyB3aWR0aDogODAw
cHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiA8Ym9keT4KIAogPGRpdiBzdHls
ZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAg
ICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAg
IFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXpl
ICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwg
d2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4
IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgotICAgICAgICBMb3JlbSBpcHN1bSBk
b2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNt
b2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCisg
ICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KKyAgICAgICAgPGRpdiBzdHlsZT0i
d2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+CisgICAgICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAv
MzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2Yg
IGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJy
PgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFk
aXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9y
ZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAg
PC9kaXY+CiAKLSAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVtIj4KKyAgICA8ZGl2IHN0
eWxlPSJmb250LXNpemU6IDEuMjVyZW0iPgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAg
ICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2lu
ZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9s
b3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1u
YXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAppbmRleCBmNzRhN2EyMTQw
OGM4YWVmNDVmYmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi43OTc2M2RlZmZhZDU3ODcxNmYxMGE1Yjg0
ZjIwOTU5ZThjZjkxMWRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRt
bApAQCAtMjEsMTcgKzIxLDE3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiA8Ym9keT4KIAog
PGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Ny
b2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAv
MzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQg
ZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5k
cGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBp
bmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5
bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eCI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNv
bXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhl
IGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBi
ZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9k
IHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAg
ICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdj4KKyAgICA8ZGl2Pgog
ICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZv
bnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNp
dCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1w
b3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+
CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179489</attachid>
            <date>2012-12-14 08:48:22 -0800</date>
            <delta_ts>2012-12-14 10:31:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121214164541.patch</filename>
            <type>text/plain</type>
            <size>27473</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDJjZmE2Y2I4NWE0N2YyYzgzMDc1N2VmN2E0M2YyZGVlNjgxMTY4Li42
YWE0ZmEyMWQ0MDI2NDU4M2I0ZWNjYTIzYTNkNDIxZmIyZDE1ZjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTItMTEtMjkgIEFudG9uIFZheXZvZCAgPGF2YXl2b2RAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFRleHQgQXV0b3NpemluZzogY29udGFpbmVycyB3aWRlciB0aGFuIHRo
ZWlyIGVuY2xvc2luZyBjbHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHNlcGFyYXRlIGNs
dXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
b21lIGJsb2NrcyBvZiB0ZXh0cyBtaWdodCBiZSB3aWRlciB0aGFuIHRoZWlyIHBhcmVudCBjbHVz
dGVycyBhbmQgbmVlZCB0byBiZSBhdXRvc2l6ZWQgc2VwYXJhdGVseS4KKworICAgICAgICBpc0F1
dG9zaXppbmdDbHVzdGVyKCkgbm93IGNoZWNrcyBmb3IgdGhlIHdpZHRoIG9mIHRoZSBjb250YWlu
ZXIgYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgbG93ZXN0CisgICAgICAgIGNv
bW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBub2RlcyBvZiB0aGUgZW5jbG9zaW5nIGNsdXN0ZXIu
IFRoaXMgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCBpcyBwYXNzZWQgdG8gYWxsCisgICAgICAg
IHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMuCisKKyAgICAgICAgVGhlIGNoYW5nZSBmaXhlcyBzZXZl
cmFsIGNhc2VzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpw
cm9jZXNzU3VidHJlZSk6IENhbGxzIHByb2Nlc3NDbHVzdGVyIHdpdGggbmV3IG51bWJlciBvZiBh
cmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3Rl
cik6IFBhc3NlcyBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IG5vZGVzIGludG8gcHJvY2Vzc0Nv
bnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWlu
ZXIpOiB8cGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dHwgcGFyYW1ldGVyIHBhc3NlZCBpbnRv
CisgICAgICAgIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjppc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKTogQ29uc2lkZXJz
IGEgYmxvY2sgYSBjbHVzdGVyIGlmIGl0IGlzIHdpZGVyIHRoYW4KKyAgICAgICAgaXRzIHBhcmVu
dCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBlbmNsb3NpbmcgY2x1c3RlciAocmVu
YW1lZCBmcm9tIGlzQXV0b3NpemluZ0NsdXN0ZXIpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcik6IEEgY29udmVuaWVuY2UgbWV0aG9kIHJlZHVj
aW5nIGNvZGUgZHVwbGljYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOiBQYXNzZXMgbmV3IHBhcmFtZXRlciB0byBtZWFzdXJl
RGVzY2VuZGFudFRleHRXaWR0aC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om1l
YXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKTogVXNlcyBibG9ja0NvbnRhaW5pbmdBbGxUZXh0IHBh
cmFtZXRlciB0byBwYXNzIHRvIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRl
eHQpOiBSZW1vdmVkIHVzZWxlc3MgYXNzZXJ0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIpOiBVc2VzIHNob3J0ZXIgaXNB
dXRvc2l6aW5nQ2x1c3RlciBjYWxsLgogMjAxMi0xMi0wNyAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhpdCB0
ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRoZSBjb21w
b3NpdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXpl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKaW5kZXgg
YjEwMmIyYjViMjkzNzVjNzI4NDkyYzFjOTg0YmY3Zjg2NWQ4NzIyMS4uZDY0YzI1NWVkMWJjNzY1
ZWRiZTk2N2Q4YzVjMjE3ZDA1NzAwZTQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04NSw3ICs4Niw3IEBAIGJvb2wgVGV4dEF1
dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogICAgICAg
ICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgUmVuZGVy
QmxvY2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAgd2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1
dG9zaXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rl
cikpKQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIs
IDApKQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAg
ICBwcm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0lu
Zm8pOwpAQCAtOTQsMjkgKzk1LDI3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRy
ZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogCiB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nl
c3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8m
IHdpbmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
OwotCiAgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4g
U28gZXNwZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0
IHRha2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5v
ZGUgb2YKICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2Nr
IHRoYXQgY29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBp
bnN0ZWFkLgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZp
bmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCBjb21t
b25BbmNlc3RvcldpZHRoID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRMb2dpY2FsV2lk
dGgoKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZp
bmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKKyAgICBmbG9hdCB0ZXh0
V2lkdGggPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAK
ICAgICBmbG9hdCBtdWx0aXBsaWVyID0gMTsKLSAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGxvd2VzdENvbW1vbkFuY2VzdG9yLCBjb21tb25BbmNlc3RvcldpZHRoKSkgeworICAgIGlm
IChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdp
ZHRoKSkgewogICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2lu
ZG93SW5mby53aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdp
ZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWlu
TGF5b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwog
ICAgICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRo
LCB0byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgotICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1
c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGNvbW1vbkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxM
YXlvdXRXaWR0aCk7CisgICAgICAgIGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1p
bjxmbG9hdD4odGV4dFdpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOwogCiAgICAgICAgIG11bHRp
cGxpZXIgPSBsb2dpY2FsQ2x1c3RlcldpZHRoIC8gbG9naWNhbFdpbmRvd1dpZHRoOwogICAgICAg
ICBtdWx0aXBsaWVyICo9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCktPnRleHRBdXRvc2l6aW5nRm9u
dFNjYWxlRmFjdG9yKCk7CiAgICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0
aXBsaWVyKTsKICAgICB9CiAKLSAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRh
aW5lciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3NDb250YWluZXIobXVs
dGlwbGllciwgY29udGFpbmVyLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwg
d2luZG93SW5mbyk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVk
KGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCkBAIC0xMzksNyArMTM4LDcgQEAgc3RhdGlj
IGJvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vz
c0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVs
dGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6
aW5nQ29udGFpbmVyKGNvbnRhaW5lcikpOwogCkBAIC0xNTUsMTAgKzE1NCwxMCBAQCB2b2lkIFRl
eHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciwgUgogICAgICAgICAgICAgLy8gRklYTUU6IEluY3JlYXNlIGxpc3QgbWFy
a2VyIHNpemUgcHJvcG9ydGlvbmF0ZWx5LgogICAgICAgICB9IGVsc2UgaWYgKGlzQXV0b3Npemlu
Z0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGRlc2Nl
bmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBpZiAo
aXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKQorICAgICAgICAgICAgaWYgKGlz
Q29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0KSkKICAgICAgICAgICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Qmxv
Y2ssIGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIs
IGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKKyAgICAgICAg
ICAgICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGRlc2NlbmRhbnRCbG9jaywgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgZGVzY2VuZGFudEJsb2NrLCB3aW5kb3dJbmZvKTsKICAgICAg
ICAgfQogICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRh
bnRzT2ZDb250YWluZXJzKGRlc2NlbmRhbnQsIHN1YnRyZWVSb290KTsKICAgICB9CkBAIC0yMTQs
MTQgKzIxMywxNCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NvbnRhaW5lcihj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyKQorYm9vbCBUZXh0QXV0b3NpemVyOjppc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpCiB7CiAgICAgLy8gIkF1dG9zaXppbmcgY2x1c3RlcnMiIGFy
ZSBzcGVjaWFsIGF1dG9zaXppbmcgY29udGFpbmVycyB3aXRoaW4gd2hpY2ggd2UKICAgICAvLyB3
YW50IHRvIGVuZm9yY2UgYSB1bmlmb3JtIHRleHQgc2l6ZSBtdWx0aXBsaWVyLCBpbiB0aGUgaG9w
ZXMgb2YgbWFraW5nCiAgICAgLy8gdGhlIG1ham9yIHNlY3Rpb25zIG9mIHRoZSBwYWdlIGxvb2sg
aW50ZXJuYWxseSBjb25zaXN0ZW50LgotICAgIC8vIEFsbCB0aGVpciBkZXNjZW5kZW50cyAoaW5j
bHVkaW5nIG90aGVyIGF1dG9zaXppbmcgY29udGFpbmVycykgbXVzdCBzaGFyZQorICAgIC8vIEFs
bCB0aGVpciBkZXNjZW5kYW50cyAoaW5jbHVkaW5nIG90aGVyIGF1dG9zaXppbmcgY29udGFpbmVy
cykgbXVzdCBzaGFyZQogICAgIC8vIHRoZSBzYW1lIG11bHRpcGxpZXIsIGV4Y2VwdCBmb3Igc3Vi
dHJlZXMgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2x1c3RlcnMsCi0gICAgLy8gYW5kIHNvbWUgb2Yg
dGhlaXIgZGVzY2VuZGVudCBjb250YWluZXJzIG1pZ2h0IG5vdCBiZSBhdXRvc2l6ZWQgYXQgYWxs
CisgICAgLy8gYW5kIHNvbWUgb2YgdGhlaXIgZGVzY2VuZGFudCBjb250YWluZXJzIG1pZ2h0IG5v
dCBiZSBhdXRvc2l6ZWQgYXQgYWxsCiAgICAgLy8gKGZvciBleGFtcGxlIGlmIHRoZWlyIGhlaWdo
dCBpcyBjb25zdHJhaW5lZCkuCiAgICAgLy8gQWRkaXRpb25hbGx5LCBjbHVzdGVyU2hvdWxkQmVB
dXRvc2l6ZWQgcmVxdWlyZXMgZWFjaCBjbHVzdGVyIHRvIGNvbnRhaW4gYQogICAgIC8vIG1pbmlt
dW0gYW1vdW50IG9mIHRleHQsIHdpdGhvdXQgd2hpY2ggaXQgd29uJ3QgYmUgYXV0b3NpemVkLgpA
QCAtMjMwLDExICsyMjksMTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVz
dGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAvLyBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHRzIChodHRwOi8vdzMub3JnL1RSL2NzczMtYm94LyNmbG93LXJvb3QpLCBzaW5jZQog
ICAgIC8vIGZsb3cgcm9vdHMgY29ycmVzcG9uZCB0byBib3ggY29udGFpbmVycyB0aGF0IGJlaGF2
ZSBzb21ld2hhdAogICAgIC8vIGluZGVwZW5kZW50bHkgZnJvbSB0aGVpciBwYXJlbnQgKGZvciBl
eGFtcGxlIHRoZXkgZG9uJ3Qgb3ZlcmxhcCBmbG9hdHMpLgotICAgIC8vIFRoZSBkZWZpbml0aW9u
IG9mIGEgZmxvdyBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50bHkgaW5jbHVkZXMgbW9zdCBvZiB0
aGUKKyAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIGZsb3cgcm9vdCBhbHNvIGNvbnZlbmllbnRs
eSBpbmNsdWRlcyBtb3N0IG9mIHRoZQogICAgIC8vIHdheXMgdGhhdCBhIGJveCBhbmQgaXRzIGNo
aWxkcmVuIGNhbiBoYXZlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IHdpZHRoCiAgICAgLy8gZnJv
bSB0aGUgYm94J3MgcGFyZW50ICh3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBzaWduaWZpY2FudGx5
IGRpZmZlcmVudAogICAgIC8vIHdpZHRoIGJsb2NrcyB3aXRoaW4gYSBjbHVzdGVyLCBzaW5jZSB0
aGUgbmFycm93ZXIgYmxvY2tzIHdvdWxkIGVuZCB1cAogICAgIC8vIGxhcmdlciB0aGFuIHdvdWxk
IG90aGVyd2lzZSBiZSBuZWNlc3NhcnkpLgorICAgIC8vIEFkZGl0aW9uYWxseSwgYW55IGNvbnRh
aW5lcnMgdGhhdCBhcmUgd2lkZXIgdGhhbiB0aGUgfGJsb2NrQ29udGFpbmluZ0FsbFRleHR8Cisg
ICAgLy8gb2YgdGhlaXIgZW5jbG9zaW5nIGNsdXN0ZXIgYWxzbyBiZWNvbWUgY2x1c3RlcnMsIHNp
bmNlIHRoZXkgbmVlZCBzcGVjaWFsCisgICAgLy8gdHJlYXRtZW50IGR1ZSB0byB0aGVpciB3aWR0
aC4KICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKHJlbmRlcmVyKSk7CiAKICAgICBy
ZXR1cm4gcmVuZGVyZXItPmlzUmVuZGVyVmlldygpCkBAIC0yNDQsMTMgKzI0NiwyMCBAQCBib29s
IFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyKQogICAgICAgICB8fCByZW5kZXJlci0+aXNUYWJsZUNhcHRpb24oKQogICAgICAgICB8
fCByZW5kZXJlci0+aXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKQogICAgICAgICB8
fCByZW5kZXJlci0+aGFzQ29sdW1ucygpCi0gICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKTsKKyAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpCisgICAgICAgIHx8IChwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0CisgICAg
ICAgICAgICAmJiByZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpID4gcGFyZW50QmxvY2tD
b250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAvLyBGSVhNRTog
VGFibGVzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyB0byBtdWx0aXBseSBhbGwgdGhlaXIgY29sdW1u
cyBieQogICAgIC8vIHRoZSBzYW1lIGFtb3VudCBldmVuIGlmIHRoZXkncmUgZGlmZmVyZW50IHdp
ZHRoczsgc28gZG8gaGFzQ29sdW1ucygpCiAgICAgLy8gcmVuZGVyZXJzLCBhbmQgcHJvYmFibHkg
ZmxleGJveGVzLi4uCiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0
b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciwgZmxvYXQgY29t
bW9uQW5jZXN0b3JXaWR0aCkKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rl
cihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQpCit7CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmpl
Y3QpICYmIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3Qp
LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVz
dGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgY2x1c3Rl
cnMgdGhhdCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVzIG9mIHRleHQgKGluCiAgICAgLy8gcHJh
Y3RpY2UgbGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNpbmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoCkBAIC0yNjMsMTUgKzI3MiwxNSBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZQogICAg
IC8vIGluIGFuZCBwYW4gZnJvbSBzaWRlIHRvIHNpZGUgdG8gcmVhZCBlYWNoIGxpbmUsIHNpbmNl
IGlmIHRoZXJlIGFyZSB2ZXJ5CiAgICAgLy8gZmV3IGxpbmVzIG9mIHRleHQgeW91J2xsIG9ubHkg
bmVlZCB0byBwYW4gYWNyb3NzIG9uY2Ugb3IgdHdpY2UuCiAgICAgY29uc3QgZmxvYXQgbWluTGlu
ZXNPZlRleHQgPSA0OwotICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGNvbW1vbkFuY2VzdG9yV2lk
dGggKiBtaW5MaW5lc09mVGV4dDsKKyAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRo
ICogbWluTGluZXNPZlRleHQ7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJl
RGVzY2VuZGFudFRleHRXaWR0aChsb3dlc3RDb21tb25BbmNlc3RvciwgbWluVGV4dFdpZHRoLCB0
ZXh0V2lkdGgpOworICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRo
KTsKICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1p
blRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCkKK3ZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwg
ZmxvYXQmIHRleHRXaWR0aCkKIHsKICAgICBib29sIHNraXBMb2NhbFRleHQgPSBjb250ZW50SGVp
Z2h0SXNDb25zdHJhaW5lZChjb250YWluZXIpOwogCkBAIC0yODEsOCArMjkwLDggQEAgdm9pZCBU
ZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyLCBmbG8KICAgICAgICAgICAgIHRleHRXaWR0aCArPSB0b1JlbmRlclRleHQo
ZGVzY2VuZGFudCktPnJlbmRlcmVkVGV4dExlbmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+
c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250
YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50
QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpc0F1
dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaykpCi0gICAgICAgICAgICAgICAgbWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBtaW5UZXh0V2lkdGgsIHRleHRX
aWR0aCk7CisgICAgICAgICAgICBpZiAoIWlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVz
Y2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0KSkKKyAgICAgICAgICAgICAgICBt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMw
OCw4ICszMTcsNiBAQCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVy
U2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdAogCiBjb25zdCBSZW5kZXJCbG9j
ayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0
IFJlbmRlckJsb2NrKiBjbHVzdGVyKQogewotICAgIEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVy
KGNsdXN0ZXIpKTsKLQogICAgIHNpemVfdCBmaXJzdERlcHRoID0gMDsKICAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihj
bHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRvTGFzdCk7CiAgICAgaWYgKCFmaXJzdFRleHRMZWFm
KQpAQCAtMzU4LDcgKzM2NSw3IEBAIGNvbnN0IFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXplcjo6
ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqCiAgICAgKytkZXB0
aDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRv
TGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBhcmVudC0+bGFzdENoaWxkKCk7CiAgICAg
d2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNoaWxk
KSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKGNoaWxkKSkpIHsKKyAgICAg
ICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGNoaWxkLCAwKSkgewogICAgICAgICAgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2hp
bGQsIGRlcHRoLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgaWYgKGxlYWYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGxlYWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9zaXplci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIu
aAppbmRleCBhNzA5YjExNjhlNDRkZjAwZWMxZjlkNzNiYmU1ZTUxNmZlOTI2Nzc0Li43Y2I2ZjQ5
MmU2NmIxNjhjZGIxMTk0ZWY0MDM0YjVmYWYwODQxMGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0QXV0b3NpemVyLmgKQEAgLTI4LDE3ICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKFRF
WFRfQVVUT1NJWklORykKIAotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxl
OwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm87CiAK
QEAgLTYzLDI2ICs2MCwzMSBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IFRleHRBdXRvc2l6ZXIo
RG9jdW1lbnQqKTsKIAogICAgIHZvaWQgcHJvY2Vzc0NsdXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0
ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNv
bnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwotICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5l
cihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKKyAgICB2b2lk
IHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
ciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVj
dCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwogCiAgICAg
dm9pZCBzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCosIGZsb2F0KTsKIAorICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjb250YWluZXIu
CiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGF1dG9zaXppbmcgY29udGFp
bmVyIGlzIGFuIGF1dG9zaXppbmcgY2x1c3Rlci4gQ2hlY2tzIGlmIHRoZSBjb250YWluZXIgaXMg
d2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0fCBpZiB0aGUg
cG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4g
cmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVyLiBDaGVja3MgaWYgdGhlIHJlbmRlcmVy
IGlzIHdpZGVyIHRoYW4KKyAgICAvLyB8cGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dHwgaWYg
dGhlIHBvaW50ZXIgaXMgbm90IG51bGwuCisgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tD
b250YWluaW5nQWxsVGV4dCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRv
c2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9hdCBjb21t
b25BbmNlc3RvcldpZHRoKTsKLSAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZs
b2F0JiB0ZXh0V2lkdGgpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXpl
ZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tX
aWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3Qg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CiAKICAgICAv
LyBVc2UgdG8gdHJhdmVyc2UgdGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGluZyBkZXNj
ZW5kYW50cyBvZiBjb250YWluZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJzIHRoZW1z
ZWx2ZXMpLgotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBpbmdE
ZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0
IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CiAKLSAgICAvLyBGaW5kcyB0
aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRlc2Nl
bmRhbnQKLSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3Ro
ZXIgYXV0b3NpemluZyBjbHVzdGVycykuCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkZXNjZW5k
YW50IHRleHQgbm9kZXMgb2YgdGhlIGdpdmVuIGNsdXN0ZXIgdGhhdCBhcmUgbm90IGRlc2NlbmRh
bnRzIG9mIGFueSBkZXNjZW5kYW50IGNsdXN0ZXIsCisgICAgLy8gcmV0dXJucyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGVzZSB0ZXh0IG5vZGVzLiBPdGhlcndpc2UsIHJldHVybnMg
dGhlIGNsdXN0ZXIgaXRzZWxmLgogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJCbG9jayogZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKTsK
IAotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgdHJhdmVyc2FsIGRpcmVjdGlvbiBzcGVjaWZpZWQs
IGZpbmRzIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBsZWFmIHRleHQgbm9kZSBjaGlsZCB0aGF0IGRv
ZXNuJ3QKLSAgICAvLyBiZWxvbmcgdG8gYW55IGNsdXN0ZXIuCi0gICAgc3RhdGljIGNvbnN0IFJl
bmRlck9iamVjdCogZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0Kiwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKKyAgICAvLyBSZXR1cm5z
IHRoZSBmaXJzdCB0ZXh0IGxlYWYgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgaXRzIGRlcHRo
IHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHBhcmVudC4KKyAgICBzdGF0aWMgY29uc3QgUmVuZGVy
T2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3Qq
IHBhcmVudCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKIAogICAgIERvY3Vt
ZW50KiBtX2RvY3VtZW50OwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMDUwODhhOWNmMGU2NmUwNDA0NzczNTE0ZjUx
MDczYTk1ZDQxNjFlLi5iOGVlZmEyYjZhNWRiZDQwYzg5N2JlZjc5YzE2ODYxMTVlZjgwNGRlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMjkgIEFudG9uIFZheXZvZCAgPGF2YXl2b2RA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFRleHQgQXV0b3NpemluZzogY29udGFpbmVycyB3aWRl
ciB0aGFuIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHNl
cGFyYXRlIGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb2RpZmllZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgYXV0b3Np
emluZyBhcHByb2FjaCB0byBoYW5kbGluZyBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAg
ICAgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBub2Rl
cyBvZiB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3Rlci4KKworICAgICAgICAqIGZhc3Qv
dGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWw6
CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1s
OgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwt
ZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5h
cnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbDoKKwogMjAxMi0xMi0wNyAgTGV2aSBXZWludHJhdWIg
IDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRyYWNraW5n
IGhpdCB0ZXN0IHJlY3RhbmdsZXMgdG8gZW5hYmxlIGZhc3QgZXZlbnQgcmVqZWN0aW9uIGluIHRo
ZSBjb21wb3NpdG9yCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Npemlu
Zy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwKaW5k
ZXggNmNmZjA2ZTQ0OGIyZjc1ODNiZGEyMDM0M2VlYmRlMjI1YzY0NjU3MC4uZDVjMzBmZTk5ZDk1
Yzk2ZjE2NWYyNGVhNzYyOTA3NjcxMjVlNDRlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJy
b3ctZXhwZWN0ZWQuaHRtbApAQCAtMTcsMTMgKzE3LDEzIEBAIGJvZHkgeyB3aWR0aDogODAwcHg7
IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiAgICAgICAgIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAg
ICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAxLjI1
cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4
IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lk
dGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgor
ICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweDsgZm9udC1zaXplOiAxLjg3NXJlbSI+CisgICAg
ICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1z
aXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBpdHMgd2lkdGg6NjAwcHggbWFrZXMgaXQgd2lkZXIg
dGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIs
IGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29tZSBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVyZW0i
PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBhdXRvc2l6ZWQgdG8gMjBw
eC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29t
cHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0J3Mgbm90IGFuIGF1dG9z
aXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVudCBpcyB0aGUgZW5jbG9z
aW5nIGF1dG9zaXppbmcgY2x1c3RlciA0MDBweCB3aWRlLjxicj4KICAgICAgICAgTG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBl
aXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVh
LgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKaW5kZXggYjJlZjAx
MDdjOWVjNjZjNzIzYWU5NmZiNDQ2OTZiZjMxNjE0NDdjYy4uZWViNTJlZDlmNjY2NzkyZWNhMDQ0
NDkxMWM2ODU4MmVkYzRlMzFmOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbApAQCAtMjYsMTMg
KzI2LDEzIEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgICAgIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAg
ICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0gICAgICAgIFRoaXMg
dGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIGp1c3QgMjBweCBjb21wdXRlZCBmb250LXNpemUg
KDE2ICogNDAwLzMyMCksIHNpbmNlIGRlc3BpdGUgaXRzIHdpZHRoOjgwMHB4IGl0IGlzIHBhcnQg
b2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0
aDogNjAwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAzMHB4
IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgaXRzIHdpZHRoOjYwMHB4
IG1ha2VzIGl0IHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVu
Y2xvc2luZyBjbHVzdGVyLCBoZW5jZSBpdCB3aWxsIGl0c2VsZiBiZWNvbWUgYSBjbHVzdGVyLjxi
cj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCiAgICAgPGRpdj4KLSAgICAgICAg
VGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFybHkgYmUgYXV0b3NpemVkIHRvIDIwcHguPGJyPgorICAg
ICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQt
c2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBzaW5jZSBpdCdzIG5vdCBhbiBhdXRvc2l6aW5nIGNsdXN0
ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50IGVsZW1lbnQgaXMgdGhlIGVuY2xvc2luZyBhdXRvc2l6
aW5nIGNsdXN0ZXIgNDAwcHggd2lkZS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNp
dCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1w
b3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rp
dj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1jaGlsZC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCmluZGV4IGE5MGEwMTNhZjNlZDRlZTA0ZTI2YWM2
MDcyMDZmOTJkYWNiYjVhODguLmUxYTgxNGUxZDZlZWM4ZjQ4YTA4M2Y1ZWEyMjQ3NTU4YjFhZjEz
Y2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hp
bGQtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93
aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKQEAgLTE0LDkgKzE0LDggQEAgYm9keSB7IHdpZHRoOiA4
MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIDxkaXYgc3R5bGU9IndpZHRo
OiAzMjBweDsgZm9udC1zaXplOiAxcmVtIj4KIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRv
c2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBy
b290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4K
LQk8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBi
ZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJl
bnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlw
bGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3Np
emVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorCTxkaXYgc3R5bGU9IndpZHRo
OiA4MDBweDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBp
dCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2lu
ZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBz
ZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25h
IGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1NGVhNjFmM2FmNzlhZmY4N2I3ZDMz
MGM1NWI3OTE3NjNiNTIwN2UuLjUyNGM5MDI0MDYwNmFkNTJmYjRmNjllYWJmMTIyN2NhZGFhMzI3
YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hp
bGQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxk
Lmh0bWwKQEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICBUaGlz
IHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3Qg
Y29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJy
b3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgot
ICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBh
ZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxj
dWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5
IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0
ZXIuPGJyPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29t
ZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3Ig
aW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4K
IDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lk
ZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0
ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUwNTAwNzE4YmU3MmJjLi4z
MDMwMzFlMzUxOGE0Mzk2YmYwNzI2MzlmNGUzM2MzNDIyMDM1OWU2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93
aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTcgKzEy
LDE3IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVu
OyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0i
b3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQt
c2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRv
IDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBh
cnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNv
bnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJy
PgotICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xs
Ij4KKyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+
CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNv
bWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRl
bXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAg
ICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdiBzdHlsZT0iZm9udC1zaXpl
OiAxLjI1cmVtIj4KKyAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVyZW0iPgogICAgICAg
ICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6
ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAg
PC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwuaHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi43
OTc2M2RlZmZhZDU3ODcxNmYxMGE1Yjg0ZjIwOTU5ZThjZjkxMWRhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5h
cnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjEsMTcgKzIxLDE3IEBAIGlmICh3aW5kb3cu
aW50ZXJuYWxzKSB7CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRp
diBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAw
cHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSBy
b290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0
aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KLSAgICAgICAg
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+CisgICAgICAg
IDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxk
IGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBz
aW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBl
bmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAg
ICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2lj
aW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBk
b2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+
CiAKLSAgPGRpdj4KKyAgICA8ZGl2PgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAg
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179497</attachid>
            <date>2012-12-14 10:31:35 -0800</date>
            <delta_ts>2012-12-14 10:37:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121214182854.patch</filename>
            <type>text/plain</type>
            <size>28286</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA1MDE5ZDIxMTM5NTVm
MWRlODcxYWRjYTE2MjE2OTU1ZWY0NTg5My4uYmE1NTA2NDUyNmRkMzZhNWFjZTVlMDU4NDAwNWIz
NTNhMjA2OTFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCisg
ICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOiBDYWxscyBwcm9jZXNz
Q2x1c3RlciB3aXRoIG5ldyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOiBQYXNzZXMgYmxvY2sgY29udGFpbmluZyBh
bGwgdGV4dCBub2RlcyBpbnRvIHByb2Nlc3NDb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKTogfHBhcmVudEJsb2NrQ29udGFpbmluZ0Fs
bFRleHR8IHBhcmFtZXRlciBwYXNzZWQgaW50bworICAgICAgICBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJB
dXRvc2l6aW5nQ2x1c3Rlcik6IENvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3
aWRlciB0aGFuCisgICAgICAgIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3
aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVy
KS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIp
OiBBIGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKTogUGFz
c2VzIG5ldyBwYXJhbWV0ZXIgdG8gbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGguCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6IFVz
ZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBpc0NvbnRhaW5l
ckF1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Zmlu
ZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogUmVtb3ZlZCB1c2VsZXNzIGFzc2VydGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90
SW5DbHVzdGVyKTogVXNlcyBzaG9ydGVyIGlzQXV0b3NpemluZ0NsdXN0ZXIgY2FsbC4KIDIwMTIt
MTItMTQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENo
aWxkTm9kZXNMYXp5U25hcHNob3Q6Om5leHROb2RlKCkgY2FuIGNyYXNoIGluIERlYnVnIGJ1aWxk
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDhiN2Y4
MjQyN2VjOGM0OGU0MTg2NGU5MmVlYTA0NTZjMWMzYzE0M2IuLmFjMGMxMmMxNWE4M2I0ZmZmOTMw
ODcwZDAwZGM4YzBjYmQ3MjNjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsNyArODYsNyBAQCBib29sIFRleHRBdXRvc2l6
ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICAgICAgY29u
dGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIFJlbmRlckJsb2Nr
KiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChjbHVzdGVyICYmICghaXNBdXRvc2l6
aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKSkK
KyAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyLCAwKSkK
ICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgcHJv
Y2Vzc0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsK
QEAgLTk0LDMyICs5NSwzMCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJl
bmRlck9iamVjdCogbGF5b3V0Um9vdCkKIAogdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1
c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5k
b3dJbmZvKQogewotICAgIEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQog
ICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVz
cGVjaWFsbHkgZm9yIHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtp
bmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21t
b24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9m
CiAgICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0
IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVh
ZC4KLSAgICBjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7Ci0gICAgZmxvYXQgY29tbW9uQW5j
ZXN0b3JXaWR0aCA9IGxvd2VzdENvbW1vbkFuY2VzdG9yLT5jb250ZW50TG9naWNhbFdpZHRoKCk7
CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7CisgICAgZmxvYXQgdGV4dFdpZHRo
ID0gYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAg
ZmxvYXQgbXVsdGlwbGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChs
b3dlc3RDb21tb25BbmNlc3RvciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1
c3RlclNob3VsZEJlQXV0b3NpemVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0aCkp
IHsKICAgICAgICAgaW50IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0lu
Zm8ud2luZG93U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9
IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91
dFNpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAg
ICAgLy8gSWdub3JlIGJveCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8g
YXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJX
aWR0aCA9IHN0ZDo6bWluPGZsb2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5b3V0
V2lkdGgpOworICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48Zmxv
YXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBsaWVy
ID0gbG9naWNhbENsdXN0ZXJXaWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAgbXVs
dGlwbGllciAqPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRTY2Fs
ZUZhY3RvcigpOwogICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlwbGll
cik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIs
IHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxp
ZXIsIGNvbnRhaW5lciwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRv
d0luZm8pOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQg
bXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
Um9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0lu
Zm8mIHdpbmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250
YWluZXIpKTsKIApAQCAtMTM1LDEwICsxMzQsMTAgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9j
ZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFIK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHByb3BvcnRp
b25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2Vu
ZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1Jl
bmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0
ZXIoZGVzY2VuZGFudEJsb2NrKSkKKyAgICAgICAgICAgIGlmIChpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCiAgICAg
ICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50Qmxv
Y2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ss
IGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0Nv
bnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgZGVz
Y2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhk
ZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMTk0LDE0ICsxOTMsMTQgQEAgYm9v
bCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6
aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEg
dW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2luZwogICAg
IC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29rIGludGVybmFsbHkgY29uc2lz
dGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMgKGluY2x1ZGluZyBvdGhlciBhdXRv
c2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGFu
dHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKICAg
ICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1YnRyZWVzIHdoaWNoIGFyZSB0
aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRlbnQg
Y29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAorICAgIC8vIGFuZCBzb21l
IG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0
IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBoZWlnaHQgaXMgY29uc3RyYWluZWQp
LgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkIHJlcXVpcmVz
IGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBtaW5pbXVtIGFtb3VudCBvZiB0ZXh0
LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXplZC4KQEAgLTIxMCwxMSArMjA5LDE0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyAoaHR0cDov
L3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2luY2UKICAgICAvLyBmbG93IHJvb3Rz
IGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBiZWhhdmUgc29tZXdoYXQKICAgICAv
LyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChmb3IgZXhhbXBsZSB0aGV5IGRvbid0
IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIGZsb3cgZmxvdyBy
b290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCisgICAgLy8gVGhlIGRl
ZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50bHkgaW5jbHVkZXMgbW9zdCBv
ZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0cyBjaGlsZHJlbiBjYW4gaGF2ZSBz
aWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8vIGZyb20gdGhlIGJveCdzIHBhcmVu
dCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQKICAgICAv
LyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2UgdGhlIG5hcnJvd2VyIGJsb2Nr
cyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgbmVj
ZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJlIHdp
ZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0fAorICAgIC8vIG9mIHRoZWlyIGVu
Y2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLCBzaW5jZSB0aGV5IG5lZWQgc3Bl
Y2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lkdGguCiAgICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKQpAQCAtMjI0LDE0ICsyMjYsMjAgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmlzRmxl
eGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmhhc0Nv
bHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CisgICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKQorICAgICAg
ICB8fCAocGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dAorICAgICAgICAgICAgJiYgcmVuZGVy
ZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA+IHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQt
PmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgLy8gRklYTUU6IFRhYmxlcyBuZWVkIHNwZWNp
YWwgaGFuZGxpbmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNvbHVtbnMgYnkKICAgICAvLyB0aGUg
c2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3aWR0aHM7IHNvIGRvIGhhc0Nv
bHVtbnMoKQogICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2JhYmx5IGZsZXhib3hlcy4uLgogfQog
Ci1zdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyKQorYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNv
bnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCkKIHsKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFpbmVyKG9iamVjdCkg
JiYgaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCksIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQpOworfQorCitzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXND
b25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIC8vIEZJWE1FOiBQ
cm9wYWdhdGUgY29uc3RyYWluZWRuZXNzIGRvd24gdGhlIHRyZWUsIHRvIGF2b2lkIGluZWZmaWNp
ZW50bHkgd2Fsa2luZyBiYWNrIHVwIGZyb20gZWFjaCBib3guCiAgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBuZWVkcyB0byB0YWtlIGludG8gYWNjb3VudCB2ZXJ0aWNhbCB3cml0aW5nIG1vZGVzLgog
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpdGlvbmFsIGhldXJpc3RpY3MsIHN1Y2ggYXMgaWdu
b3JpbmcgZml4ZWQgaGVpZ2h0cyBpZiB0aGUgY29udGVudCBpcyBhbHJlYWR5IG92ZXJmbG93aW5n
IGJlZm9yZSBhdXRvc2l6aW5nIGtpY2tzIGluLgpAQCAtMjUwLDYgKzI1OCw3IEBAIHN0YXRpYyBi
b29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisKIGJvb2wgVGV4dEF1dG9zaXplcjo6Y29udGFp
bmVyU2hvdWxkYmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKIHsKICAg
ICAvLyBEb24ndCBhdXRvc2l6ZSBibG9jay1sZXZlbCB0ZXh0IHRoYXQgY2FuJ3Qgd3JhcCAoYXMg
aXQncyBsaWtlbHkgdG8KQEAgLTI2MCw3ICsyNjksNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNv
bnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiAg
ICAgcmV0dXJuICFjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb250YWluZXIpOwogfQogCi1i
b29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJC
bG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpCiti
b29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJC
bG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tXaWR0aCkKIHsKICAgICAv
LyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMg
b2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2lu
Y2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTI3MywxNSArMjgyLDE1IEBAIGJvb2wg
VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2Nr
KiBsb3dlc3RDb21tb25BbmNlCiAgICAgLy8gaW4gYW5kIHBhbiBmcm9tIHNpZGUgdG8gc2lkZSB0
byByZWFkIGVhY2ggbGluZSwgc2luY2UgaWYgdGhlcmUgYXJlIHZlcnkKICAgICAvLyBmZXcgbGlu
ZXMgb2YgdGV4dCB5b3UnbGwgb25seSBuZWVkIHRvIHBhbiBhY3Jvc3Mgb25jZSBvciB0d2ljZS4K
ICAgICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7Ci0gICAgZmxvYXQgbWluVGV4dFdp
ZHRoID0gY29tbW9uQW5jZXN0b3JXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OworICAgIGZsb2F0IG1p
blRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09mVGV4dDsKICAgICBmbG9hdCB0ZXh0
V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGxvd2VzdENvbW1vbkFu
Y2VzdG9yLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgbWVhc3VyZURlc2NlbmRhbnRU
ZXh0V2lkdGgoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwg
bWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdp
ZHRoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
VGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQordm9p
ZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4
dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQogewogICAgIGJvb2wgc2tp
cExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb250YWluZXIpOwogCkBA
IC0yOTEsOCArMzAwLDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRl
eHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG8KICAgICAgICAgICAgIHRl
eHRXaWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRlcmVkVGV4dExlbmd0aCgp
ICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAgICAgfSBl
bHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQp
OwotICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaykp
Ci0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJs
b2NrLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAgICBpZiAoIWlzQ29udGFp
bmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5k
YW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRo
KTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTMxOCw4ICszMjcsNiBAQCBSZW5kZXJPYmplY3QqIFRleHRB
dXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhj
b25zdAogCiBjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKQogewotICAgIEFT
U0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQogICAgIHNpemVfdCBmaXJzdERl
cHRoID0gMDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBmaW5kRmly
c3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRvTGFzdCk7
CiAgICAgaWYgKCFmaXJzdFRleHRMZWFmKQpAQCAtMzY4LDcgKzM3NSw3IEBAIGNvbnN0IFJlbmRl
ck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29u
c3QgUmVuZGVyT2JqCiAgICAgKytkZXB0aDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBh
cmVudC0+bGFzdENoaWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNB
dXRvc2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRl
ckJsb2NrKGNoaWxkKSkpIHsKKyAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGNoaWxk
LCAwKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0
VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pOwogICAgICAgICAg
ICAgaWYgKGxlYWYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWY7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAppbmRleCBkZDNlMTlkZGQzYmVhNGQwMDI2OGZhMmFi
MDJhOWE1NjkwNGEzMTdlLi42MGY2YzgxZThkNTgzNjI0YzMxMjNjNWNiYjBkYWIzMTRlZDQ5YjFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKQEAgLTI4LDE3ICsy
OCwxNCBAQAogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9i
amVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0
QXV0b3NpemluZ1dpbmRvd0luZm87CiAKQEAgLTYzLDI3ICs2MCwzMiBAQCBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFRleHRBdXRvc2l6ZXIoRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgcHJvY2Vzc0Ns
dXN0ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRl
ck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwot
ICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayog
Y29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3Npemlu
Z1dpbmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGll
ciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFp
bmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6
aW5nV2luZG93SW5mbyYpOwogCiAgICAgdm9pZCBzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCos
IGZsb2F0KTsKIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMg
YW4gYXV0b3NpemluZyBjb250YWluZXIuCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3Npemlu
Z0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGdpdmVuIGF1dG9zaXppbmcgY29udGFpbmVyIGlzIGFuIGF1dG9zaXppbmcgY2x1c3Rlci4gQ2hl
Y2tzIGlmIHRoZSBjb250YWluZXIgaXMgd2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0fCBpZiB0aGUgcG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0aWMg
Ym9vbCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29u
c3QgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVy
LiBDaGVja3MgaWYgdGhlIHJlbmRlcmVyIGlzIHdpZGVyIHRoYW4KKyAgICAvLyB8cGFyZW50Qmxv
Y2tDb250YWluaW5nQWxsVGV4dHwgaWYgdGhlIHBvaW50ZXIgaXMgbm90IG51bGwuCisgICAgc3Rh
dGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFp
bmVyKTsKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVu
ZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9hdCBjb21tb25BbmNlc3RvcldpZHRo
KTsKLSAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5k
ZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgp
OworICAgIHN0YXRpYyBib29sIGNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9z
aXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxv
Y2tXaWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29u
c3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFp
bmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CiAKICAg
ICAvLyBVc2UgdG8gdHJhdmVyc2UgdGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGluZyBk
ZXNjZW5kYW50cyBvZiBjb250YWluZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJzIHRo
ZW1zZWx2ZXMpLgotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBp
bmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNv
bnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisgICAgc3RhdGljIFJlbmRlck9iamVjdCog
bmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CiAKLSAgICAvLyBGaW5k
cyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRl
c2NlbmRhbnQKLSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8g
b3RoZXIgYXV0b3NpemluZyBjbHVzdGVycykuCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkZXNj
ZW5kYW50IHRleHQgbm9kZXMgb2YgdGhlIGdpdmVuIGNsdXN0ZXIgdGhhdCBhcmUgbm90IGRlc2Nl
bmRhbnRzIG9mIGFueSBkZXNjZW5kYW50IGNsdXN0ZXIsCisgICAgLy8gcmV0dXJucyB0aGUgbG93
ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGVzZSB0ZXh0IG5vZGVzLiBPdGhlcndpc2UsIHJldHVy
bnMgdGhlIGNsdXN0ZXIgaXRzZWxmLgogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJCbG9jayogZmlu
ZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVy
KTsKIAotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgdHJhdmVyc2FsIGRpcmVjdGlvbiBzcGVjaWZp
ZWQsIGZpbmRzIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBsZWFmIHRleHQgbm9kZSBjaGlsZCB0aGF0
IGRvZXNuJ3QKLSAgICAvLyBiZWxvbmcgdG8gYW55IGNsdXN0ZXIuCi0gICAgc3RhdGljIGNvbnN0
IFJlbmRlck9iamVjdCogZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVy
T2JqZWN0Kiwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKKyAgICAvLyBSZXR1
cm5zIHRoZSBmaXJzdCB0ZXh0IGxlYWYgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgaXRzIGRl
cHRoIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHBhcmVudC4KKyAgICBzdGF0aWMgY29uc3QgUmVu
ZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmpl
Y3QqIHBhcmVudCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKIAogICAgIERv
Y3VtZW50KiBtX2RvY3VtZW50OwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjOWM0MmZlOTIxMTM1OTcwZGI2NjZkZDAw
MWZmYjk3ZTY1ZmZjYzQ5Li5lMzRiNTk0NTM3MWEyZDYxZGE5YmVhZGVmM2FmZjc0NDgxYzRmNjgw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMjkgIEFudG9uIFZheXZvZCAgPGF2YXl2
b2RAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRleHQgQXV0b3NpemluZzogY29udGFpbmVycyB3
aWRlciB0aGFuIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFz
IHNlcGFyYXRlIGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb2RpZmllZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgYXV0
b3NpemluZyBhcHByb2FjaCB0byBoYW5kbGluZyBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUKKyAg
ICAgICAgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBu
b2RlcyBvZiB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3Rlci4KKworICAgICAgICAqIGZh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbDoK
KyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0
bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5o
dG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWlu
LW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbDoKKwogMjAxMi0xMi0xNCAgSm9obiBNZWxsb3Ig
IDxqb2hubWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRleHQgQXV0b3NpemluZzogRG9uJ3Qg
YXV0b3NpemUgdW53cmFwcGFibGUgYmxvY2tzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4
cGVjdGVkLmh0bWwKaW5kZXggNmNmZjA2ZTQ0OGIyZjc1ODNiZGEyMDM0M2VlYmRlMjI1YzY0NjU3
MC4uZDVjMzBmZTk5ZDk1Yzk2ZjE2NWYyNGVhNzYyOTA3NjcxMjVlNDRlZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1l
eHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0
ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbApAQCAtMTcsMTMgKzE3LDEzIEBAIGJvZHkg
eyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiAgICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsg
Zm9udC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6
ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2Ug
ZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290
IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweDsgZm9udC1zaXplOiAx
Ljg3NXJlbSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHgg
Y29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBpdHMgd2lkdGg6NjAwcHgg
bWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMgZW5j
bG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29tZSBhIGNsdXN0ZXIuPGJy
PgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8ZGl2IHN0eWxlPSJmb250
LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBh
dXRvc2l6ZWQgdG8gMjBweC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3Np
emVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0
J3Mgbm90IGFuIGF1dG9zaXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVu
dCBpcyB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3RlciA0MDBweCB3aWRlLjxicj4KICAg
ICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0
bWwKaW5kZXggYjJlZjAxMDdjOWVjNjZjNzIzYWU5NmZiNDQ2OTZiZjMxNjE0NDdjYy4uZWViNTJl
ZDlmNjY2NzkyZWNhMDQ0NDkxMWM2ODU4MmVkYzRlMzFmOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cu
aHRtbApAQCAtMjYsMTMgKzI2LDEzIEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+
Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIGp1c3QgMjBweCBjb21w
dXRlZCBmb250LXNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIGRlc3BpdGUgaXRzIHdpZHRoOjgw
MHB4IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4KKyAgICA8
ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1
dG9zaXplZCB0byAzMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2Ug
aXRzIHdpZHRoOjYwMHB4IG1ha2VzIGl0IHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5j
ZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyLCBoZW5jZSBpdCB3aWxsIGl0c2VsZiBiZWNv
bWUgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNv
bnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCiAgICAg
PGRpdj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFybHkgYmUgYXV0b3NpemVkIHRv
IDIwcHguPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4
IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBzaW5jZSBpdCdzIG5vdCBhbiBh
dXRvc2l6aW5nIGNsdXN0ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50IGVsZW1lbnQgaXMgdGhlIGVu
Y2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIgNDAwcHggd2lkZS48YnI+CiAgICAgICAgIExvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQg
ZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFs
aXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCmluZGV4IGE5MGEwMTNh
ZjNlZDRlZTA0ZTI2YWM2MDcyMDZmOTJkYWNiYjVhODguLmUxYTgxNGUxZDZlZWM4ZjQ4YTA4M2Y1
ZWEyMjQ3NTU4YjFhZjEzY2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKQEAgLTE0LDkgKzE0LDggQEAg
Ym9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIDxk
aXYgc3R5bGU9IndpZHRoOiAzMjBweDsgZm9udC1zaXplOiAxcmVtIj4KIAlUaGlzIHRleHQgc2hv
dWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFu
Y2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgog
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KLQk8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRl
eHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdp
ZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1
dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBz
aG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorCTxk
aXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgIAlUaGlzIHRl
eHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4
MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48
YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1NGVhNjFm
M2FmNzlhZmY4N2I3ZDMzMGM1NWI3OTE3NjNiNTIwN2UuLjUyNGM5MDI0MDYwNmFkNTJmYjRmNjll
YWJmMTIyN2NhZGFhMzI3YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL3dpZGUtY2hpbGQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWNoaWxkLmh0bWwKQEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpIHsKICAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2
IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0
aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj
b25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRp
ZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0eWxlPSJ3
aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2lu
Y2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2gg
aXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAg
CUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQg
dG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdp
ZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVz
dGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlw
c3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8g
ZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1
YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxv
dy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUw
NTAwNzE4YmU3MmJjLi4zMDMwMzFlMzUxOGE0Mzk2YmYwNzI2MzlmNGUzM2MzNDIyMDM1OWU2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJv
dy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRt
bApAQCAtMTIsMTcgKzEyLDE3IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3Zl
cmZsb3cteTogaGlkZGVuOyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4K
LSAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0
aDogODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQg
YmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBz
aW5jZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5k
YW50cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQg
b2YgdGhpcyBkaXYuPGJyPgotICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29u
c2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1
bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3Zl
cmZsb3cteDogc2Nyb2xsIj4KKyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250
LXNpemU6IDIuNXJlbSI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdp
ZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1
c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdiBz
dHlsZT0iZm9udC1zaXplOiAxLjI1cmVtIj4KKyAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEu
MjVyZW0iPgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNv
bXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4K
LSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJv
dy1vdmVyZmxvdy1zY3JvbGwuaHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1
OWY3ZWE5M2I4MWUwLi43OTc2M2RlZmZhZDU3ODcxNmYxMGE1Yjg0ZjIwOTU5ZThjZjkxMWRhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJv
dy1vdmVyZmxvdy1zY3JvbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjEsMTcgKzIxLDE3
IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6
IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0
eWxlPSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBp
cyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFs
bCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2
Ljxicj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFk
aXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9y
ZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNj
cm9sbCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+CisgICAgICAgICAgICBU
aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAo
MTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5j
ZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBp
dHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNl
Y3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50
IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8
L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdj4KKyAgICA8ZGl2PgogICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAv
MzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rp
dj4KIAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179499</attachid>
            <date>2012-12-14 10:37:21 -0800</date>
            <delta_ts>2012-12-14 11:37:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121214183440.patch</filename>
            <type>text/plain</type>
            <size>28625</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA1MDE5ZDIxMTM5NTVm
MWRlODcxYWRjYTE2MjE2OTU1ZWY0NTg5My4uYmE1NTA2NDUyNmRkMzZhNWFjZTVlMDU4NDAwNWIz
NTNhMjA2OTFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCisg
ICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOiBDYWxscyBwcm9jZXNz
Q2x1c3RlciB3aXRoIG5ldyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOiBQYXNzZXMgYmxvY2sgY29udGFpbmluZyBh
bGwgdGV4dCBub2RlcyBpbnRvIHByb2Nlc3NDb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKTogfHBhcmVudEJsb2NrQ29udGFpbmluZ0Fs
bFRleHR8IHBhcmFtZXRlciBwYXNzZWQgaW50bworICAgICAgICBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJB
dXRvc2l6aW5nQ2x1c3Rlcik6IENvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3
aWRlciB0aGFuCisgICAgICAgIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3
aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVy
KS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIp
OiBBIGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKTogUGFz
c2VzIG5ldyBwYXJhbWV0ZXIgdG8gbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGguCisgICAgICAg
IChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6IFVz
ZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBpc0NvbnRhaW5l
ckF1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Zmlu
ZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogUmVtb3ZlZCB1c2VsZXNzIGFzc2VydGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90
SW5DbHVzdGVyKTogVXNlcyBzaG9ydGVyIGlzQXV0b3NpemluZ0NsdXN0ZXIgY2FsbC4KIDIwMTIt
MTItMTQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENo
aWxkTm9kZXNMYXp5U25hcHNob3Q6Om5leHROb2RlKCkgY2FuIGNyYXNoIGluIERlYnVnIGJ1aWxk
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDhiN2Y4
MjQyN2VjOGM0OGU0MTg2NGU5MmVlYTA0NTZjMWMzYzE0M2IuLjU5NDNhYzQ0MDJhYWJkMTQzYzMw
OWUyMTE5NmIyYWIxN2RhYjk1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsNyArODYsNyBAQCBib29sIFRleHRBdXRvc2l6
ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0Um9vdCkKICAgICAgICAgY29u
dGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIFJlbmRlckJsb2Nr
KiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChjbHVzdGVyICYmICghaXNBdXRvc2l6
aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKSkK
KyAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyLCAwKSkK
ICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgcHJv
Y2Vzc0NsdXN0ZXIoY2x1c3RlciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsK
QEAgLTk0LDM2ICs5NSwzNCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJl
bmRlck9iamVjdCogbGF5b3V0Um9vdCkKIAogdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1
c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5k
b3dJbmZvKQogewotICAgIEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQog
ICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVz
cGVjaWFsbHkgZm9yIHRoZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtp
bmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21t
b24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9m
CiAgICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0
IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVh
ZC4KLSAgICBjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7Ci0gICAgZmxvYXQgY29tbW9uQW5j
ZXN0b3JXaWR0aCA9IGxvd2VzdENvbW1vbkFuY2VzdG9yLT5jb250ZW50TG9naWNhbFdpZHRoKCk7
CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3Rlcik7CisgICAgZmxvYXQgdGV4dFdpZHRo
ID0gYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAg
ZmxvYXQgbXVsdGlwbGllciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChs
b3dlc3RDb21tb25BbmNlc3RvciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1
c3RlclNob3VsZEJlQXV0b3NpemVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0aCkp
IHsKICAgICAgICAgaW50IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0lu
Zm8ud2luZG93U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9
IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91
dFNpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAg
ICAgLy8gSWdub3JlIGJveCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8g
YXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJX
aWR0aCA9IHN0ZDo6bWluPGZsb2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5b3V0
V2lkdGgpOworICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48Zmxv
YXQ+KHRleHRXaWR0aCwgbG9naWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBsaWVy
ID0gbG9naWNhbENsdXN0ZXJXaWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAgbXVs
dGlwbGllciAqPSBtX2RvY3VtZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRTY2Fs
ZUZhY3RvcigpOwogICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlwbGll
cik7CiAgICAgfQogCi0gICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIs
IHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxp
ZXIsIGNvbnRhaW5lciwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRv
d0luZm8pOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQg
bXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
Um9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0lu
Zm8mIHdpbmRvd0luZm8pCiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250
YWluZXIpKTsKIAotICAgIGZsb2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRhaW5lclNob3VsZGJl
QXV0b3NpemVkKGNvbnRhaW5lcikgPyBtdWx0aXBsaWVyOiAxOworICAgIGZsb2F0IGxvY2FsTXVs
dGlwbGllciA9IGNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcikgPyBtdWx0aXBs
aWVyOiAxOwogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJT
a2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7
CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKQEAgLTEzNSwxMCArMTM0LDEwIEBAIHZvaWQgVGV4
dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9j
ayogY29udGFpbmVyLCBSCiAgICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJr
ZXIgc2l6ZSBwcm9wb3J0aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5n
Q29udGFpbmVyKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2Vu
ZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChp
c0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaykpCisgICAgICAgICAgICBpZiAoaXND
b250YWluZXJBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQpKQogICAgICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9j
aywgZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwg
ZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAg
ICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAg
ICB9CiAgICAgICAgIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFu
dHNPZkNvbnRhaW5lcnMoZGVzY2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTE5NCwx
NCArMTkzLDE0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
VGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVu
ZGVyZXIpCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIo
Y29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50Qmxv
Y2tDb250YWluaW5nQWxsVGV4dCkKIHsKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJl
IHNwZWNpYWwgYXV0b3NpemluZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdh
bnQgdG8gZW5mb3JjZSBhIHVuaWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3Bl
cyBvZiBtYWtpbmcKICAgICAvLyB0aGUgbWFqb3Igc2VjdGlvbnMgb2YgdGhlIHBhZ2UgbG9vayBp
bnRlcm5hbGx5IGNvbnNpc3RlbnQuCi0gICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRlbnRzIChpbmNs
dWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCisgICAgLy8gQWxs
IHRoZWlyIGRlc2NlbmRhbnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJz
KSBtdXN0IHNoYXJlCiAgICAgLy8gdGhlIHNhbWUgbXVsdGlwbGllciwgZXhjZXB0IGZvciBzdWJ0
cmVlcyB3aGljaCBhcmUgdGhlbXNlbHZlcyBjbHVzdGVycywKLSAgICAvLyBhbmQgc29tZSBvZiB0
aGVpciBkZXNjZW5kZW50IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBhbGwK
KyAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNjZW5kYW50IGNvbnRhaW5lcnMgbWlnaHQgbm90
IGJlIGF1dG9zaXplZCBhdCBhbGwKICAgICAvLyAoZm9yIGV4YW1wbGUgaWYgdGhlaXIgaGVpZ2h0
IGlzIGNvbnN0cmFpbmVkKS4KICAgICAvLyBBZGRpdGlvbmFsbHksIGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZCByZXF1aXJlcyBlYWNoIGNsdXN0ZXIgdG8gY29udGFpbiBhCiAgICAgLy8gbWluaW11
bSBhbW91bnQgb2YgdGV4dCwgd2l0aG91dCB3aGljaCBpdCB3b24ndCBiZSBhdXRvc2l6ZWQuCkBA
IC0yMTAsMTEgKzIwOSwxNCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQogICAgIC8vIGJsb2NrIGZvcm1hdHRpbmcg
Y29udGV4dHMgKGh0dHA6Ly93My5vcmcvVFIvY3NzMy1ib3gvI2Zsb3ctcm9vdCksIHNpbmNlCiAg
ICAgLy8gZmxvdyByb290cyBjb3JyZXNwb25kIHRvIGJveCBjb250YWluZXJzIHRoYXQgYmVoYXZl
IHNvbWV3aGF0CiAgICAgLy8gaW5kZXBlbmRlbnRseSBmcm9tIHRoZWlyIHBhcmVudCAoZm9yIGV4
YW1wbGUgdGhleSBkb24ndCBvdmVybGFwIGZsb2F0cykuCi0gICAgLy8gVGhlIGRlZmluaXRpb24g
b2YgYSBmbG93IGZsb3cgcm9vdCBhbHNvIGNvbnZlbmllbnRseSBpbmNsdWRlcyBtb3N0IG9mIHRo
ZQorICAgIC8vIFRoZSBkZWZpbml0aW9uIG9mIGEgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5
IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCiAgICAgLy8gd2F5cyB0aGF0IGEgYm94IGFuZCBpdHMgY2hp
bGRyZW4gY2FuIGhhdmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgd2lkdGgKICAgICAvLyBmcm9t
IHRoZSBib3gncyBwYXJlbnQgKHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkg
ZGlmZmVyZW50CiAgICAgLy8gd2lkdGggYmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRo
ZSBuYXJyb3dlciBibG9ja3Mgd291bGQgZW5kIHVwCiAgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQg
b3RoZXJ3aXNlIGJlIG5lY2Vzc2FyeSkuCisgICAgLy8gQWRkaXRpb25hbGx5LCBhbnkgY29udGFp
bmVycyB0aGF0IGFyZSB3aWRlciB0aGFuIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwKKyAg
ICAvLyBvZiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlciBhbHNvIGJlY29tZSBjbHVzdGVycywgc2lu
Y2UgdGhleSBuZWVkIHNwZWNpYWwKKyAgICAvLyB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRo
LgogICAgIEFTU0VSVChpc0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAogICAgIHJl
dHVybiByZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkKQEAgLTIyNCwxMiArMjI2LDE5IEBAIGJvb2wg
VGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVu
ZGVyZXIpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc1RhYmxlQ2FwdGlvbigpCiAgICAgICAgIHx8
IHJlbmRlcmVyLT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpCiAgICAgICAgIHx8
IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdC
bG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpOworICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkKKyAgICAgICAgfHwgKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQKKyAgICAg
ICAgICAgICYmIHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCkgPiBwYXJlbnRCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCkpOwogICAgIC8vIEZJWE1FOiBU
YWJsZXMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBjb2x1bW5z
IGJ5CiAgICAgLy8gdGhlIHNhbWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJlbnQgd2lk
dGhzOyBzbyBkbyBoYXNDb2x1bW5zKCkKICAgICAvLyByZW5kZXJlcnMsIGFuZCBwcm9iYWJseSBm
bGV4Ym94ZXMuLi4KIH0KIAorYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVy
KGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250
YWluaW5nQWxsVGV4dCkKK3sKKyAgICByZXR1cm4gaXNBdXRvc2l6aW5nQ29udGFpbmVyKG9iamVj
dCkgJiYgaXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJsb2NrKG9iamVjdCks
IGJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworfQorCiBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0
SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogewogICAgIC8vIEZJ
WE1FOiBQcm9wYWdhdGUgY29uc3RyYWluZWRuZXNzIGRvd24gdGhlIHRyZWUsIHRvIGF2b2lkIGlu
ZWZmaWNpZW50bHkgd2Fsa2luZyBiYWNrIHVwIGZyb20gZWFjaCBib3guCkBAIC0yNTAsNyArMjU5
LDggQEAgc3RhdGljIGJvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVGV4dEF1dG9z
aXplcjo6Y29udGFpbmVyU2hvdWxkYmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRh
aW5lcikKKworYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogewogICAgIC8vIERvbid0IGF1dG9zaXplIGJs
b2NrLWxldmVsIHRleHQgdGhhdCBjYW4ndCB3cmFwIChhcyBpdCdzIGxpa2VseSB0bwogICAgIC8v
IGV4cGFuZCBzaWRld2F5cyBhbmQgYnJlYWsgdGhlIHBhZ2UncyBsYXlvdXQpLgpAQCAtMjYwLDcg
KzI3MCw3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y29udGFpbmVyU2hvdWxkYmVBdXRvc2l6ZWQo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKICAgICByZXR1cm4gIWNvbnRlbnRIZWlnaHRJ
c0NvbnN0cmFpbmVkKGNvbnRhaW5lcik7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3Rl
clNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3Rv
ciwgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCkKK2Jvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3Rl
clNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0LCBmbG9hdCBibG9ja1dpZHRoKQogewogICAgIC8vIERvbid0IGF1dG9zaXplIGNsdXN0ZXJz
IHRoYXQgY29udGFpbiBsZXNzIHRoYW4gNCBsaW5lcyBvZiB0ZXh0IChpbgogICAgIC8vIHByYWN0
aWNlIGxlc3MgbGluZXMgYXJlIHJlcXVpcmVkLCBzaW5jZSBtZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aApAQCAtMjczLDE3ICsyODMsMTcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hv
dWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2UKICAgICAv
LyBpbiBhbmQgcGFuIGZyb20gc2lkZSB0byBzaWRlIHRvIHJlYWQgZWFjaCBsaW5lLCBzaW5jZSBp
ZiB0aGVyZSBhcmUgdmVyeQogICAgIC8vIGZldyBsaW5lcyBvZiB0ZXh0IHlvdSdsbCBvbmx5IG5l
ZWQgdG8gcGFuIGFjcm9zcyBvbmNlIG9yIHR3aWNlLgogICAgIGNvbnN0IGZsb2F0IG1pbkxpbmVz
T2ZUZXh0ID0gNDsKLSAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBjb21tb25BbmNlc3RvcldpZHRo
ICogbWluTGluZXNPZlRleHQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gYmxvY2tXaWR0aCAq
IG1pbkxpbmVzT2ZUZXh0OwogICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAgbWVhc3VyZURl
c2NlbmRhbnRUZXh0V2lkdGgobG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRXaWR0aCwgdGV4
dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChibG9ja0NvbnRhaW5pbmdB
bGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7
CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5U
ZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNvbnN0IFJl
bmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZs
b2F0JiB0ZXh0V2lkdGgpCiB7Ci0gICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gIWNvbnRhaW5lclNo
b3VsZGJlQXV0b3NpemVkKGNvbnRhaW5lcik7CisgICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gIWNv
bnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcik7CiAKICAgICBSZW5kZXJPYmplY3Qq
IGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5l
cnMoY29udGFpbmVyLCBjb250YWluZXIpOwogICAgIHdoaWxlIChkZXNjZW5kYW50KSB7CkBAIC0y
OTEsOCArMzAxLDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRX
aWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG8KICAgICAgICAgICAgIHRleHRX
aWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRlcmVkVGV4dExlbmd0aCgpICog
ZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAgICAgfSBlbHNl
IGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwot
ICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaykpCi0g
ICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2Nr
LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAgICBpZiAoIWlzQ29udGFpbmVy
QXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0
KSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50
QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTMxOCw4ICszMjgsNiBAQCBSZW5kZXJPYmplY3QqIFRleHRBdXRv
c2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25z
dAogCiBjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKQogewotICAgIEFTU0VS
VChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQogICAgIHNpemVfdCBmaXJzdERlcHRo
ID0gMDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRvTGFzdCk7CiAg
ICAgaWYgKCFmaXJzdFRleHRMZWFmKQpAQCAtMzY4LDcgKzM3Niw3IEBAIGNvbnN0IFJlbmRlck9i
amVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3Qg
UmVuZGVyT2JqCiAgICAgKytkZXB0aDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkID0g
KGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBhcmVu
dC0+bGFzdENoaWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNBdXRv
c2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJs
b2NrKGNoaWxkKSkpIHsKKyAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGNoaWxkLCAw
KSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBsZWFmID0gZmluZEZpcnN0VGV4
dExlYWZOb3RJbkNsdXN0ZXIoY2hpbGQsIGRlcHRoLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAg
aWYgKGxlYWYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWY7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAppbmRleCBkZDNlMTlkZGQzYmVhNGQwMDI2OGZhMmFiMDJh
OWE1NjkwNGEzMTdlLi42MGY2YzgxZThkNTgzNjI0YzMxMjNjNWNiYjBkYWIzMTRlZDQ5YjFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKQEAgLTI4LDE3ICsyOCwx
NCBAQAogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotI2luY2x1ZGUgIkludFNpemUu
aCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlck9iamVj
dDsKLWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyVGV4dDsKIHN0cnVjdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm87CiAKQEAgLTYzLDI3ICs2MCwzMiBAQCBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFRleHRBdXRvc2l6ZXIoRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgcHJvY2Vzc0NsdXN0
ZXIoUmVuZGVyQmxvY2sqIGNsdXN0ZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9i
amVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwotICAg
IHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29u
dGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dp
bmRvd0luZm8mKTsKKyAgICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYpOwogCiAgICAgdm9pZCBzZXRNdWx0aXBsaWVyKFJlbmRlck9iamVjdCosIGZs
b2F0KTsKIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMgYW4g
YXV0b3NpemluZyBjb250YWluZXIuCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFp
bmVyKGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0Ns
dXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdp
dmVuIGF1dG9zaXppbmcgY29udGFpbmVyIGlzIGFuIGF1dG9zaXppbmcgY2x1c3Rlci4gQ2hlY2tz
IGlmIHRoZSBjb250YWluZXIgaXMgd2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9ja0NvbnRh
aW5pbmdBbGxUZXh0fCBpZiB0aGUgcG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0aWMgYm9v
bCBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3Qg
UmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVuZGVyZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVyLiBD
aGVja3MgaWYgdGhlIHJlbmRlcmVyIGlzIHdpZGVyIHRoYW4KKyAgICAvLyB8cGFyZW50QmxvY2tD
b250YWluaW5nQWxsVGV4dHwgaWYgdGhlIHBvaW50ZXIgaXMgbm90IG51bGwuCisgICAgc3RhdGlj
IGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CiAKLSAgICBzdGF0aWMgYm9v
bCBjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVy
KTsKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVy
QmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9hdCBjb21tb25BbmNlc3RvcldpZHRoKTsK
LSAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOwor
ICAgIHN0YXRpYyBib29sIGNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluZXIpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXpl
ZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tX
aWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3Qg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CiAKICAgICAv
LyBVc2UgdG8gdHJhdmVyc2UgdGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGluZyBkZXNj
ZW5kYW50cyBvZiBjb250YWluZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJzIHRoZW1z
ZWx2ZXMpLgotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tpcHBpbmdE
ZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQsIGNvbnN0
IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisgICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CiAKLSAgICAvLyBGaW5kcyB0
aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGRlc2Nl
bmRhbnQKLSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gb3Ro
ZXIgYXV0b3NpemluZyBjbHVzdGVycykuCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkZXNjZW5k
YW50IHRleHQgbm9kZXMgb2YgdGhlIGdpdmVuIGNsdXN0ZXIgdGhhdCBhcmUgbm90IGRlc2NlbmRh
bnRzIG9mIGFueSBkZXNjZW5kYW50IGNsdXN0ZXIsCisgICAgLy8gcmV0dXJucyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGVzZSB0ZXh0IG5vZGVzLiBPdGhlcndpc2UsIHJldHVybnMg
dGhlIGNsdXN0ZXIgaXRzZWxmLgogICAgIHN0YXRpYyBjb25zdCBSZW5kZXJCbG9jayogZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKTsK
IAotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgdHJhdmVyc2FsIGRpcmVjdGlvbiBzcGVjaWZpZWQs
IGZpbmRzIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBsZWFmIHRleHQgbm9kZSBjaGlsZCB0aGF0IGRv
ZXNuJ3QKLSAgICAvLyBiZWxvbmcgdG8gYW55IGNsdXN0ZXIuCi0gICAgc3RhdGljIGNvbnN0IFJl
bmRlck9iamVjdCogZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0Kiwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKKyAgICAvLyBSZXR1cm5z
IHRoZSBmaXJzdCB0ZXh0IGxlYWYgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgaXRzIGRlcHRo
IHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIHBhcmVudC4KKyAgICBzdGF0aWMgY29uc3QgUmVuZGVy
T2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3Qq
IHBhcmVudCwgc2l6ZV90JiBkZXB0aCwgVHJhdmVyc2FsRGlyZWN0aW9uKTsKIAogICAgIERvY3Vt
ZW50KiBtX2RvY3VtZW50OwogfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjOWM0MmZlOTIxMTM1OTcwZGI2NjZkZDAwMWZm
Yjk3ZTY1ZmZjYzQ5Li5lMzRiNTk0NTM3MWEyZDYxZGE5YmVhZGVmM2FmZjc0NDgxYzRmNjgwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMjkgIEFudG9uIFZheXZvZCAgPGF2YXl2b2RA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFRleHQgQXV0b3NpemluZzogY29udGFpbmVycyB3aWRl
ciB0aGFuIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVycyBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHNl
cGFyYXRlIGNsdXN0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb2RpZmllZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgYXV0b3Np
emluZyBhcHByb2FjaCB0byBoYW5kbGluZyBvZiB0aGUgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAg
ICAgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBub2Rl
cyBvZiB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3Rlci4KKworICAgICAgICAqIGZhc3Qv
dGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWw6
CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1s
OgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwt
ZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5h
cnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbDoKKwogMjAxMi0xMi0xNCAgSm9obiBNZWxsb3IgIDxq
b2hubWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRleHQgQXV0b3NpemluZzogRG9uJ3QgYXV0
b3NpemUgdW53cmFwcGFibGUgYmxvY2tzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVj
dGVkLmh0bWwKaW5kZXggNmNmZjA2ZTQ0OGIyZjc1ODNiZGEyMDM0M2VlYmRlMjI1YzY0NjU3MC4u
ZDVjMzBmZTk5ZDk1Yzk2ZjE2NWYyNGVhNzYyOTA3NjcxMjVlNDRlZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBl
Y3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXIt
d2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbApAQCAtMTcsMTMgKzE3LDEzIEBAIGJvZHkgeyB3
aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiAgICAgICAgIExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBz
ZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25h
IGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9u
dC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQg
dG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVz
cGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNs
dXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweDsgZm9udC1zaXplOiAxLjg3
NXJlbSI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHggY29t
cHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBpdHMgd2lkdGg6NjAwcHggbWFr
ZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMgZW5jbG9z
aW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29tZSBhIGNsdXN0ZXIuPGJyPgog
ICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNp
bmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8ZGl2IHN0eWxlPSJmb250LXNp
emU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBhdXRv
c2l6ZWQgdG8gMjBweC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVk
IHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0J3Mg
bm90IGFuIGF1dG9zaXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVudCBp
cyB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3RlciA0MDBweCB3aWRlLjxicj4KICAgICAg
ICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVs
aXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUg
bWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwK
aW5kZXggYjJlZjAxMDdjOWVjNjZjNzIzYWU5NmZiNDQ2OTZiZjMxNjE0NDdjYy4uZWViNTJlZDlm
NjY2NzkyZWNhMDQ0NDkxMWM2ODU4MmVkYzRlMzFmOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRt
bApAQCAtMjYsMTMgKzI2LDEzIEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgICAgIExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBz
ZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25h
IGFsaXF1YS4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+Ci0g
ICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIGp1c3QgMjBweCBjb21wdXRl
ZCBmb250LXNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIGRlc3BpdGUgaXRzIHdpZHRoOjgwMHB4
IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4KKyAgICA8ZGl2
IHN0eWxlPSJ3aWR0aDogNjAwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byAzMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgaXRz
IHdpZHRoOjYwMHB4IG1ha2VzIGl0IHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0
b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyLCBoZW5jZSBpdCB3aWxsIGl0c2VsZiBiZWNvbWUg
YSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNl
Y3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50
IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCiAgICAgPGRp
dj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFybHkgYmUgYXV0b3NpemVkIHRvIDIw
cHguPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNv
bXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBzaW5jZSBpdCdzIG5vdCBhbiBhdXRv
c2l6aW5nIGNsdXN0ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50IGVsZW1lbnQgaXMgdGhlIGVuY2xv
c2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIgNDAwcHggd2lkZS48YnI+CiAgICAgICAgIExvcmVtIGlw
c3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8g
ZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1
YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCmluZGV4IGE5MGEwMTNhZjNl
ZDRlZTA0ZTI2YWM2MDcyMDZmOTJkYWNiYjVhODguLmUxYTgxNGUxZDZlZWM4ZjQ4YTA4M2Y1ZWEy
MjQ3NTU4YjFhZjEzY2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6
aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKQEAgLTE0LDkgKzE0LDggQEAgYm9k
eSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KIDxkaXYg
c3R5bGU9IndpZHRoOiAzMjBweDsgZm9udC1zaXplOiAxcmVtIj4KIAlUaGlzIHRleHQgc2hvdWxk
IG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2Vz
dG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KLQk8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQg
c2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRo
IG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9z
aXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91
bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorCTxkaXYg
c3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgIAlUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAv
MzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2Yg
aXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+
CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNp
Y2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQg
ZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1NGVhNjFmM2Fm
NzlhZmY4N2I3ZDMzMGM1NWI3OTE3NjNiNTIwN2UuLjUyNGM5MDI0MDYwNmFkNTJmYjRmNjllYWJm
MTIyN2NhZGFhMzI3YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6
aW5nL3dpZGUtY2hpbGQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Npemlu
Zy93aWRlLWNoaWxkLmh0bWwKQEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMp
IHsKICAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlz
IHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlz
IGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25z
ZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVu
dCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0eWxlPSJ3aWR0
aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2Ug
aXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMg
dXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJ
WE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8g
YmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIAlUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0
byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVy
IHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVy
IHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3Vt
IGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1
c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4K
ICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1z
Y3JvbGwtZXhwZWN0ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUwNTAw
NzE4YmU3MmJjLi4zMDMwMzFlMzUxOGE0Mzk2YmYwNzI2MzlmNGUzM2MzNDIyMDM1OWU2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1v
dmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbApA
QCAtMTIsMTcgKzEyLDE3IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZs
b3cteTogaGlkZGVuOyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAg
PGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDog
ODAwcHg7IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUg
YXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5j
ZSB0aGlzIGlzIHBhcnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50
cyBhcmUgYWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2Yg
dGhpcyBkaXYuPGJyPgotICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2Vj
dGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQg
dXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3ZlcmZs
b3cteDogc2Nyb2xsIj4KKyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNp
emU6IDIuNXJlbSI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0
byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVy
IHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3Rl
ciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0g
aXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBk
byBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxp
cXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdiBzdHls
ZT0iZm9udC1zaXplOiAxLjI1cmVtIj4KKyAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVy
ZW0iPgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAg
PC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xs
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1v
dmVyZmxvdy1zY3JvbGwuaHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1OWY3
ZWE5M2I4MWUwLi43OTc2M2RlZmZhZDU3ODcxNmYxMGE1Yjg0ZjIwOTU5ZThjZjkxMWRhIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1v
dmVyZmxvdy1zY3JvbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Npemlu
Zy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjEsMTcgKzIxLDE3IEBA
IGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQw
MHB4Ij4KLSAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxl
PSJ3aWR0aDogODAwcHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0
byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBw
YXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBj
b250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxi
cj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9s
bCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+CisgICAgICAgICAgICBUaGlz
IHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYg
KiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0
b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNl
bGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3Rl
dHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0
IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rp
dj4KLSAgPC9kaXY+CiAKLSAgPGRpdj4KKyAgICA8ZGl2PgogICAgICAgICBUaGlzIHRleHQgc2hv
dWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIw
KS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBh
ZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJv
cmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4K
IAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179506</attachid>
            <date>2012-12-14 11:37:36 -0800</date>
            <delta_ts>2012-12-17 12:54:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121214193455.patch</filename>
            <type>text/plain</type>
            <size>28781</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA1MDE5ZDIxMTM5NTVm
MWRlODcxYWRjYTE2MjE2OTU1ZWY0NTg5My4uNDRkOWI5NmU3ZWZmNDAyNjcyY2M4OTRlZTNjMzIy
ZThiNmZhNDlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SnVsaWVuIENoYWZmcmFpeC4KKworICAgICAgICBTb21lIGJsb2NrcyBvZiB0ZXh0cyBtaWdodCBi
ZSB3aWRlciB0aGFuIHRoZWlyIHBhcmVudCBjbHVzdGVycyBhbmQgbmVlZCB0byBiZSBhdXRvc2l6
ZWQgc2VwYXJhdGVseS4KKworICAgICAgICBpc0F1dG9zaXppbmdDbHVzdGVyKCkgbm93IGNoZWNr
cyBmb3IgdGhlIHdpZHRoIG9mIHRoZSBjb250YWluZXIgYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSB3
aWR0aCBvZiB0aGUgbG93ZXN0CisgICAgICAgIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgdGV4dCBu
b2RlcyBvZiB0aGUgZW5jbG9zaW5nIGNsdXN0ZXIuIFRoaXMgYmxvY2sgY29udGFpbmluZyBhbGwg
dGV4dCBpcyBwYXNzZWQgdG8gYWxsCisgICAgICAgIHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMuCisK
KyAgICAgICAgVGhlIGNoYW5nZSBmaXhlcyBzZXZlcmFsIGNhc2VzIGNvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6IENhbGxzIHByb2Nl
c3NDbHVzdGVyIHdpdGggbmV3IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3Rlcik6IFBhc3NlcyBibG9jayBjb250YWluaW5n
IGFsbCB0ZXh0IG5vZGVzIGludG8gcHJvY2Vzc0NvbnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOiB8cGFyZW50QmxvY2tDb250YWluaW5n
QWxsVGV4dHwgcGFyYW1ldGVyIHBhc3NlZCBpbnRvCisgICAgICAgIGlzQ29udGFpbmVyQXV0b3Np
emluZ0NsdXN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjppc0NvbnRhaW5l
ckF1dG9zaXppbmdDbHVzdGVyKTogQ29uc2lkZXJzIGEgYmxvY2sgYSBjbHVzdGVyIGlmIGl0IGlz
IHdpZGVyIHRoYW4KKyAgICAgICAgaXRzIHBhcmVudCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0
IHdpdGhpbiBlbmNsb3NpbmcgY2x1c3RlciAocmVuYW1lZCBmcm9tIGlzQXV0b3NpemluZ0NsdXN0
ZXIpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rl
cik6IEEgY29udmVuaWVuY2UgbWV0aG9kIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOiBQ
YXNzZXMgbmV3IHBhcmFtZXRlciB0byBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKTog
VXNlcyBibG9ja0NvbnRhaW5pbmdBbGxUZXh0IHBhcmFtZXRlciB0byBwYXNzIHRvIGlzQ29udGFp
bmVyQXV0b3NpemluZ0NsdXN0ZXIuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpm
aW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOiBSZW1vdmVkIHVzZWxlc3MgYXNzZXJ0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZO
b3RJbkNsdXN0ZXIpOiBVc2VzIHNob3J0ZXIgaXNBdXRvc2l6aW5nQ2x1c3RlciBjYWxsLgogMjAx
Mi0xMi0xNCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Q2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6bmV4dE5vZGUoKSBjYW4gY3Jhc2ggaW4gRGVidWcgYnVp
bGRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKaW5kZXggOGI3
ZjgyNDI3ZWM4YzQ4ZTQxODY0ZTkyZWVhMDQ1NmMxYzNjMTQzYi4uNTk0M2FjNDQwMmFhYmQxNDNj
MzA5ZTIxMTk2YjJhYjE3ZGFiOTUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04NSw3ICs4Niw3IEBAIGJvb2wgVGV4dEF1dG9z
aXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogICAgICAgICBj
b250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgUmVuZGVyQmxv
Y2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAgd2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1dG9z
aXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rlcikp
KQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIsIDAp
KQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBw
cm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8p
OwpAQCAtOTQsMzYgKzk1LDM0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUo
UmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogCiB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3ND
bHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwot
CiAgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28g
ZXNwZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRh
a2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNv
bW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUg
b2YKICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRo
YXQgY29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0
ZWFkLgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpbmRE
ZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCBjb21tb25B
bmNlc3RvcldpZHRoID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmRE
ZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKKyAgICBmbG9hdCB0ZXh0V2lk
dGggPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAKICAg
ICBmbG9hdCBtdWx0aXBsaWVyID0gMTsKLSAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3NpemVk
KGxvd2VzdENvbW1vbkFuY2VzdG9yLCBjb21tb25BbmNlc3RvcldpZHRoKSkgeworICAgIGlmIChj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRo
KSkgewogICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93
SW5mby53aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRo
ID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5
b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAg
ICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0
byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgotICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3Rl
cldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGNvbW1vbkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxMYXlv
dXRXaWR0aCk7CisgICAgICAgIGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1pbjxm
bG9hdD4odGV4dFdpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOwogCiAgICAgICAgIG11bHRpcGxp
ZXIgPSBsb2dpY2FsQ2x1c3RlcldpZHRoIC8gbG9naWNhbFdpbmRvd1dpZHRoOwogICAgICAgICBt
dWx0aXBsaWVyICo9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCktPnRleHRBdXRvc2l6aW5nRm9udFNj
YWxlRmFjdG9yKCk7CiAgICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0aXBs
aWVyKTsKICAgICB9CiAKLSAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5l
ciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlw
bGllciwgY29udGFpbmVyLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2lu
ZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9h
dCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lk
IFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnRhaW5lcikpOwogCi0gICAgZmxvYXQgbG9jYWxNdWx0aXBsaWVyID0gY29udGFpbmVyU2hvdWxk
YmVBdXRvc2l6ZWQoY29udGFpbmVyKSA/IG11bHRpcGxpZXI6IDE7CisgICAgZmxvYXQgbG9jYWxN
dWx0aXBsaWVyID0gY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29udGFpbmVyKSA/IG11bHRp
cGxpZXI6IDE7CiAKICAgICBSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoc3VidHJlZVJvb3QsIHN1YnRyZWVSb290
KTsKICAgICB3aGlsZSAoZGVzY2VuZGFudCkgewpAQCAtMTM1LDEwICsxMzQsMTAgQEAgdm9pZCBU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIFIKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1h
cmtlciBzaXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXpp
bmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNj
ZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYg
KGlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkKKyAgICAgICAgICAgIGlmIChp
c0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWlu
aW5nQWxsVGV4dCkpCiAgICAgICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJs
b2NrLCBkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVy
LCBkZXNjZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAg
ICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJs
b2NrQ29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAg
ICAgIH0KICAgICAgICAgZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5k
YW50c09mQ29udGFpbmVycyhkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMTk0
LDE0ICsxOTMsMTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiBy
ZW5kZXJlcikKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rl
cihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRC
bG9ja0NvbnRhaW5pbmdBbGxUZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBh
cmUgc3BlY2lhbCBhdXRvc2l6aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8g
d2FudCB0byBlbmZvcmNlIGEgdW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhv
cGVzIG9mIG1ha2luZwogICAgIC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29r
IGludGVybmFsbHkgY29uc2lzdGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMgKGlu
Y2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyBB
bGwgdGhlaXIgZGVzY2VuZGFudHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5l
cnMpIG11c3Qgc2hhcmUKICAgICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1
YnRyZWVzIHdoaWNoIGFyZSB0aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21lIG9m
IHRoZWlyIGRlc2NlbmRlbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0IGFs
bAorICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdodCBu
b3QgYmUgYXV0b3NpemVkIGF0IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBoZWln
aHQgaXMgY29uc3RyYWluZWQpLgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3VsZEJl
QXV0b3NpemVkIHJlcXVpcmVzIGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBtaW5p
bXVtIGFtb3VudCBvZiB0ZXh0LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXplZC4K
QEAgLTIxMCwxMSArMjA5LDE0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1
c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0cyAoaHR0cDovL3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2luY2UK
ICAgICAvLyBmbG93IHJvb3RzIGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBiZWhh
dmUgc29tZXdoYXQKICAgICAvLyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChmb3Ig
ZXhhbXBsZSB0aGV5IGRvbid0IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5pdGlv
biBvZiBhIGZsb3cgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2Yg
dGhlCisgICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50
bHkgaW5jbHVkZXMgbW9zdCBvZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0cyBj
aGlsZHJlbiBjYW4gaGF2ZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8vIGZy
b20gdGhlIGJveCdzIHBhcmVudCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRs
eSBkaWZmZXJlbnQKICAgICAvLyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2Ug
dGhlIG5hcnJvd2VyIGJsb2NrcyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3Vs
ZCBvdGhlcndpc2UgYmUgbmVjZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250
YWluZXJzIHRoYXQgYXJlIHdpZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0fAor
ICAgIC8vIG9mIHRoZWlyIGVuY2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLCBz
aW5jZSB0aGV5IG5lZWQgc3BlY2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lk
dGguCiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAg
cmV0dXJuIHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKQpAQCAtMjI0LDEyICsyMjYsMTkgQEAgYm9v
bCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiBy
ZW5kZXJlcikKICAgICAgICAgfHwgcmVuZGVyZXItPmlzVGFibGVDYXB0aW9uKCkKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAg
fHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQotICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCk7CisgICAgICAgIHx8IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2so
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSByZW5kZXJlci0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKQorICAgICAgICB8fCAocGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dAorICAg
ICAgICAgICAgJiYgcmVuZGVyZXItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSA+IHBhcmVudEJsb2Nr
Q29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgLy8gRklYTUU6
IFRhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgdG8gbXVsdGlwbHkgYWxsIHRoZWlyIGNvbHVt
bnMgYnkKICAgICAvLyB0aGUgc2FtZSBhbW91bnQgZXZlbiBpZiB0aGV5J3JlIGRpZmZlcmVudCB3
aWR0aHM7IHNvIGRvIGhhc0NvbHVtbnMoKQogICAgIC8vIHJlbmRlcmVycywgYW5kIHByb2JhYmx5
IGZsZXhib3hlcy4uLgogfQogCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KQoreworICAgIHJldHVybiBpc0F1dG9zaXppbmdDb250YWluZXIob2Jq
ZWN0KSAmJiBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0
KSwgYmxvY2tDb250YWluaW5nQWxsVGV4dCk7Cit9CisKIHN0YXRpYyBib29sIGNvbnRlbnRIZWln
aHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgLy8g
RklYTUU6IFByb3BhZ2F0ZSBjb25zdHJhaW5lZG5lc3MgZG93biB0aGUgdHJlZSwgdG8gYXZvaWQg
aW5lZmZpY2llbnRseSB3YWxraW5nIGJhY2sgdXAgZnJvbSBlYWNoIGJveC4KQEAgLTI1MCw3ICsy
NTksOCBAQCBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5k
ZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0
b3NpemVyOjpjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyKQorCitib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVk
KGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUg
YmxvY2stbGV2ZWwgdGV4dCB0aGF0IGNhbid0IHdyYXAgKGFzIGl0J3MgbGlrZWx5IHRvCiAgICAg
Ly8gZXhwYW5kIHNpZGV3YXlzIGFuZCBicmVhayB0aGUgcGFnZSdzIGxheW91dCkuCkBAIC0yNjAs
NyArMjcwLDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRiZUF1dG9zaXpl
ZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiAhY29udGVudEhlaWdo
dElzQ29uc3RyYWluZWQoY29udGFpbmVyKTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVz
dGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2Vz
dG9yLCBmbG9hdCBjb21tb25BbmNlc3RvcldpZHRoKQorYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVz
dGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0Fs
bFRleHQsIGZsb2F0IGJsb2NrV2lkdGgpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgY2x1c3Rl
cnMgdGhhdCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVzIG9mIHRleHQgKGluCiAgICAgLy8gcHJh
Y3RpY2UgbGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNpbmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoCkBAIC0yNzMsMTcgKzI4MywxNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJT
aG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZQogICAg
IC8vIGluIGFuZCBwYW4gZnJvbSBzaWRlIHRvIHNpZGUgdG8gcmVhZCBlYWNoIGxpbmUsIHNpbmNl
IGlmIHRoZXJlIGFyZSB2ZXJ5CiAgICAgLy8gZmV3IGxpbmVzIG9mIHRleHQgeW91J2xsIG9ubHkg
bmVlZCB0byBwYW4gYWNyb3NzIG9uY2Ugb3IgdHdpY2UuCiAgICAgY29uc3QgZmxvYXQgbWluTGlu
ZXNPZlRleHQgPSA0OwotICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGNvbW1vbkFuY2VzdG9yV2lk
dGggKiBtaW5MaW5lc09mVGV4dDsKKyAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRo
ICogbWluTGluZXNPZlRleHQ7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJl
RGVzY2VuZGFudFRleHRXaWR0aChsb3dlc3RDb21tb25BbmNlc3RvciwgbWluVGV4dFdpZHRoLCB0
ZXh0V2lkdGgpOworICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRo
KTsKICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1p
blRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCkKK3ZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3Vy
ZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwg
ZmxvYXQmIHRleHRXaWR0aCkKIHsKLSAgICBib29sIHNraXBMb2NhbFRleHQgPSAhY29udGFpbmVy
U2hvdWxkYmVBdXRvc2l6ZWQoY29udGFpbmVyKTsKKyAgICBib29sIHNraXBMb2NhbFRleHQgPSAh
Y29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29udGFpbmVyKTsKIAogICAgIFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFp
bmVycyhjb250YWluZXIsIGNvbnRhaW5lcik7CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKQEAg
LTI5MSw4ICszMDEsOCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsbwogICAgICAgICAgICAgdGV4
dFdpZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkg
KiBkZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6ZSgpOwogICAgICAgICB9IGVs
c2UgaWYgKGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAgICAg
UmVuZGVyQmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7
Ci0gICAgICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkK
LSAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50Qmxv
Y2ssIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgICAgIGlmICghaXNDb250YWlu
ZXJBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQpKQorICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRh
bnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgp
OwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMzE4LDggKzMyOCw2IEBAIFJlbmRlck9iamVjdCogVGV4dEF1
dG9zaXplcjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNv
bnN0CiAKIGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2Nr
Q29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpCiB7Ci0gICAgQVNT
RVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwotCiAgICAgc2l6ZV90IGZpcnN0RGVw
dGggPSAwOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsK
ICAgICBpZiAoIWZpcnN0VGV4dExlYWYpCkBAIC0zNjgsNyArMzc2LDcgQEAgY29uc3QgUmVuZGVy
T2JqZWN0KiBUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25z
dCBSZW5kZXJPYmoKICAgICArK2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQg
PSAoZGlyZWN0aW9uID09IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFy
ZW50LT5sYXN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1
dG9zaXppbmdDb250YWluZXIoY2hpbGQpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVy
QmxvY2soY2hpbGQpKSkgeworICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2hpbGQs
IDApKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxlYWYgPSBmaW5kRmlyc3RU
ZXh0TGVhZk5vdEluQ2x1c3RlcihjaGlsZCwgZGVwdGgsIGRpcmVjdGlvbik7CiAgICAgICAgICAg
ICBpZiAobGVhZikKICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGRkM2UxOWRkZDNiZWE0ZDAwMjY4ZmEyYWIw
MmE5YTU2OTA0YTMxN2UuLjYwZjZjODFlOGQ1ODM2MjRjMzEyM2M1Y2JiMGRhYjMxNGVkNDliMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtMjgsMTcgKzI4
LDE0IEBACiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi0jaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJUZXh0Owogc3RydWN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbzsKIApAQCAtNjMsMjcgKzYwLDMyIEBAIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCopOwogCiAgICAgdm9pZCBwcm9jZXNzQ2x1
c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7Ci0g
ICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBj
b250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5n
V2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVy
LCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXpp
bmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVyT2JqZWN0Kiwg
ZmxvYXQpOwogCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZW5kZXJlciBpcyBh
biBhdXRvc2l6aW5nIGNvbnRhaW5lci4KICAgICBzdGF0aWMgYm9vbCBpc0F1dG9zaXppbmdDb250
YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5n
Q2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Z2l2ZW4gYXV0b3NpemluZyBjb250YWluZXIgaXMgYW4gYXV0b3NpemluZyBjbHVzdGVyLiBDaGVj
a3MgaWYgdGhlIGNvbnRhaW5lciBpcyB3aWRlciB0aGFuCisgICAgLy8gfHBhcmVudEJsb2NrQ29u
dGFpbmluZ0FsbFRleHR8IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBudWxsLgorICAgIHN0YXRpYyBi
b29sIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25z
dCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiByZW5kZXJlciBpcyBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIu
IENoZWNrcyBpZiB0aGUgcmVuZGVyZXIgaXMgd2lkZXIgdGhhbgorICAgIC8vIHxwYXJlbnRCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0fCBpZiB0aGUgcG9pbnRlciBpcyBub3QgbnVsbC4KKyAgICBzdGF0
aWMgYm9vbCBpc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTsKIAotICAgIHN0YXRpYyBi
b29sIGNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIpOwotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5k
ZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgp
OwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7
CisgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lcik7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9j
a1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAg
IC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRl
c2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhl
bXNlbHZlcykuCi0gICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKKyAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBu
ZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKIAotICAgIC8vIEZpbmRz
IHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVz
Y2VuZGFudAotICAgIC8vIHRleHQgbm9kZSAoZXhjbHVkaW5nIHRob3NlIGJlbG9uZ2luZyB0byBv
dGhlciBhdXRvc2l6aW5nIGNsdXN0ZXJzKS4KKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGRlc2Nl
bmRhbnQgdGV4dCBub2RlcyBvZiB0aGUgZ2l2ZW4gY2x1c3RlciB0aGF0IGFyZSBub3QgZGVzY2Vu
ZGFudHMgb2YgYW55IGRlc2NlbmRhbnQgY2x1c3RlciwKKyAgICAvLyByZXR1cm5zIHRoZSBsb3dl
c3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZXNlIHRleHQgbm9kZXMuIE90aGVyd2lzZSwgcmV0dXJu
cyB0aGUgY2x1c3RlciBpdHNlbGYuCiAgICAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBmaW5k
RGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIp
OwogCi0gICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0cmF2ZXJzYWwgZGlyZWN0aW9uIHNwZWNpZmll
ZCwgZmluZHMgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGxlYWYgdGV4dCBub2RlIGNoaWxkIHRoYXQg
ZG9lc24ndAotICAgIC8vIGJlbG9uZyB0byBhbnkgY2x1c3Rlci4KLSAgICBzdGF0aWMgY29uc3Qg
UmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJP
YmplY3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOworICAgIC8vIFJldHVy
bnMgdGhlIGZpcnN0IHRleHQgbGVhZiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFuZCBpdHMgZGVw
dGggc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcGFyZW50LgorICAgIHN0YXRpYyBjb25zdCBSZW5k
ZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVj
dCogcGFyZW50LCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwogCiAgICAgRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5YzQyZmU5MjExMzU5NzBkYjY2NmRkMDAx
ZmZiOTdlNjVmZmNjNDkuLmE3YzgzNzcwY2JlNjM2ZjBkZmZlMzZlM2U4ZWE0NjQxMzA1OTBhYjMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0yOSAgQW50b24gVmF5dm9kICA8YXZheXZv
ZEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGV4dCBBdXRvc2l6aW5nOiBjb250YWluZXJzIHdp
ZGVyIHRoYW4gdGhlaXIgZW5jbG9zaW5nIGNsdXN0ZXJzIHNob3VsZCBiZSBhdXRvc2l6ZWQgYXMg
c2VwYXJhdGUgY2x1c3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzYyNworCisgICAgICAgIFJldmlld2VkIGJ5IEp1bGllbiBDaGFmZnJhaXgu
CisKKyAgICAgICAgTW9kaWZpZWQgZXhpc3RpbmcgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IGF1
dG9zaXppbmcgYXBwcm9hY2ggdG8gaGFuZGxpbmcgb2YgdGhlIGVsZW1lbnRzIHRoYXQgYXJlCisg
ICAgICAgIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQg
bm9kZXMgb2YgdGhlIGVuY2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIuCisKKyAgICAgICAgKiBm
YXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6
CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5o
dG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQu
aHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWw6Cisg
ICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWw6CisKIDIwMTItMTItMTQgIEpvaG4gTWVsbG9y
ICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZXh0IEF1dG9zaXppbmc6IERvbid0
IGF1dG9zaXplIHVud3JhcHBhYmxlIGJsb2NrcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1l
eHBlY3RlZC5odG1sCmluZGV4IDZjZmYwNmU0NDhiMmY3NTgzYmRhMjAzNDNlZWJkZTIyNWM2NDY1
NzAuLmQ1YzMwZmU5OWQ5NWM5NmYxNjVmMjRlYTc2MjkwNzY3MTI1ZTQ0ZWYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ct
ZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVz
dGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwKQEAgLTE3LDEzICsxNywxMyBAQCBib2R5
IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogICAgICAg
ICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxp
dCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBt
YWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7
IGZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3Np
emVkIHRvIGp1c3QgMjBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNl
IGRlc3BpdGUgaXRzIHdpZHRoOjgwMHB4IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4IHdpZGUgcm9v
dCBjbHVzdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHg7IGZvbnQtc2l6ZTog
MS44NzVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAzMHB4
IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgaXRzIHdpZHRoOjYwMHB4
IG1ha2VzIGl0IHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVu
Y2xvc2luZyBjbHVzdGVyLCBoZW5jZSBpdCB3aWxsIGl0c2VsZiBiZWNvbWUgYSBjbHVzdGVyLjxi
cj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCiAgICAgPGRpdiBzdHlsZT0iZm9u
dC1zaXplOiAxLjI1cmVtIj4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFybHkgYmUg
YXV0b3NpemVkIHRvIDIwcHguPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBzaW5jZSBp
dCdzIG5vdCBhbiBhdXRvc2l6aW5nIGNsdXN0ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50IGVsZW1l
bnQgaXMgdGhlIGVuY2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIgNDAwcHggd2lkZS48YnI+CiAg
ICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2lu
ZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9s
b3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5o
dG1sCmluZGV4IGIyZWYwMTA3YzllYzY2YzcyM2FlOTZmYjQ0Njk2YmYzMTYxNDQ3Y2MuLmVlYjUy
ZWQ5ZjY2Njc5MmVjYTA0NDQ5MTFjNjg1ODJlZGM0ZTMxZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93
Lmh0bWwKQEAgLTI2LDEzICsyNiwxMyBAQCBpZiAod2luZG93LmludGVybmFscykgewogICAgICAg
ICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxp
dCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBt
YWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgi
PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0IDIwcHggY29t
cHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0cyB3aWR0aDo4
MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48YnI+CisgICAg
PGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNl
IGl0cyB3aWR0aDo2MDBweCBtYWtlcyBpdCB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFu
Y2VzdG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1c3RlciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVj
b21lIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj
b25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRp
ZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAg
IDxkaXY+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxhcmx5IGJlIGF1dG9zaXplZCB0
byAyMHB4Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBw
eCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwgc2luY2UgaXQncyBub3QgYW4g
YXV0b3NpemluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVudCBlbGVtZW50IGlzIHRoZSBl
bmNsb3NpbmcgYXV0b3NpemluZyBjbHVzdGVyIDQwMHB4IHdpZGUuPGJyPgogICAgICAgICBMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAppbmRleCBhOTBhMDEz
YWYzZWQ0ZWUwNGUyNmFjNjA3MjA2ZjkyZGFjYmI1YTg4Li5jYWQzMWM1YjY0OGIzMDA3OTZlOTc2
NzcyNTg1ZDExYmQwYjk3NjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0
b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCkBAIC0xMiwxMSArMTIsMTAg
QEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0K
IDxib2R5PgogCiA8ZGl2IHN0eWxlPSJ3aWR0aDogMzIwcHg7IGZvbnQtc2l6ZTogMXJlbSI+Ci0J
VGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93
ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMg
bmFycm93Ljxicj4KKyAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRo
aXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIs
IGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3Ig
aW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLQk8ZGl2IHN0eWxl
PSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQg
c2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hp
Y2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0g
ICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5l
ZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsg
Zm9udC1zaXplOiAyLjVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdp
ZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVz
dGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlw
c3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8g
ZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1
YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9z
aXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1NGVhNjFmM2FmNzlhZmY4N2I3ZDMzMGM1NWI3
OTE3NjNiNTIwN2UuLjA2ODc2ZWZmYzU1MDFjMTQ4ZDBhZjI3NGJkOGQ1MTk3MzMyMGYyOTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwK
QEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICBUaGlzIHRleHQg
c2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9u
IGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJy
PgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2lu
ZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9s
b3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlU
aGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3Qg
dGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUg
dGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMg
dGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJy
PgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVk
IGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2Vz
dCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29tZXMg
YSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwv
ZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQu
aHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUwNTAwNzE4YmU3MmJjLi4zMDMw
MzFlMzUxOGE0Mzk2YmYwNzI2MzlmNGUzM2MzNDIyMDM1OWU2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwt
ZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRl
LWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTcgKzEyLDE3
IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9
CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0ib3Zl
cmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6
ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIw
cHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBhcnQg
b2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJyPgot
ICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNp
bmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4K
KyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+Cisg
ICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVk
IGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2Vz
dCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVz
IGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0
IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBv
ciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8
L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAx
LjI1cmVtIj4KKyAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVyZW0iPgogICAgICAgICBU
aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAo
MTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj
b25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRp
ZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9k
aXY+CiA8L2Rpdj4KIAogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwu
aHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi43OTc2
M2RlZmZhZDU3ODcxNmYxMGE1Yjg0ZjIwOTU5ZThjZjkxMWRhIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJv
dy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjEsMTcgKzIxLDE3IEBAIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBz
dHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgi
PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVk
IGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSByb290
IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0aGlu
IHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KLSAgICAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+CisgICAgICAgIDxk
aXYgc3R5bGU9IndpZHRoOiA4MDBweCI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJl
IGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5j
ZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNs
b3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAg
ICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5n
IGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xv
cmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAK
LSAgPGRpdj4KKyAgICA8ZGl2PgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179785</attachid>
            <date>2012-12-17 12:51:59 -0800</date>
            <delta_ts>2012-12-17 13:50:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121217204916.patch</filename>
            <type>text/plain</type>
            <size>28806</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA1MDE5ZDIxMTM5NTVm
MWRlODcxYWRjYTE2MjE2OTU1ZWY0NTg5My4uNjlhOTQ2Yjk1NWI0YWU0NWFkMDE1MGY0MzY4YzNi
OWFmYjUxN2Q2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCisg
ICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOiBDYWxscyBwcm9jZXNz
Q2x1c3RlciB3aXRoIG5ldyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOiBQYXNzZXMgYmxvY2sgY29udGFpbmluZyBh
bGwgdGV4dCBub2RlcyBpbnRvIHByb2Nlc3NDb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKTogfHBhcmVudEJsb2NrQ29udGFpbmluZ0Fs
bFRleHR8IHBhcmFtZXRlciBwYXNzZWQgaW50bworICAgICAgICBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJB
dXRvc2l6aW5nQ2x1c3Rlcik6IENvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3
aWRlciB0aGFuCisgICAgICAgIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3
aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVy
KS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXJJ
Z25vcmluZ1BhcmVudENsdXN0ZXIpOiBBIGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2Rl
IGR1cGxpY2F0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNo
b3VsZEJlQXV0b3NpemVkKTogUGFzc2VzIG5ldyBwYXJhbWV0ZXIgdG8gbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aCk6IFVzZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIg
dG8gcGFzcyB0byBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogUmVt
b3ZlZCB1c2VsZXNzIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKTogVXNlcyBzaG9ydGVyIGlzQXV0b3Npemlu
Z0NsdXN0ZXIgY2FsbC4KIDIwMTItMTItMTQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIENoaWxkTm9kZXNMYXp5U25hcHNob3Q6Om5leHROb2RlKCkgY2Fu
IGNyYXNoIGluIERlYnVnIGJ1aWxkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuY3BwCmluZGV4IDhiN2Y4MjQyN2VjOGM0OGU0MTg2NGU5MmVlYTA0NTZjMWMzYzE0M2Iu
LmFhMjI3YTdiMTEzNGRiYTk3Njk4ZDMzNWU2NTcxZDM1OGQxNDBiNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsNyArODYs
NyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5
b3V0Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2so
KTsKIAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxlIChj
bHVzdGVyICYmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8ICFpc0F1dG9zaXpp
bmdDbHVzdGVyKGNsdXN0ZXIpKSkKKyAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6aW5n
Q2x1c3Rlcklnbm9yaW5nUGFyZW50Q2x1c3RlcihjbHVzdGVyKSkKICAgICAgICAgY2x1c3RlciA9
IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3Rl
ciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsKQEAgLTk0LDM2ICs5NSwzNCBA
QCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5b3V0
Um9vdCkKIAogdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayog
Y2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9v
dCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewotICAgIEFT
U0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQogICAgIC8vIE1hbnkgcGFnZXMg
c2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQog
ICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxj
bHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhl
IGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNsdXN0
ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUg
dGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBSZW5k
ZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmlu
Z0FsbFRleHQoY2x1c3Rlcik7Ci0gICAgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCA9IGxvd2Vz
dENvbW1vbkFuY2VzdG9yLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmlu
Z0FsbFRleHQoY2x1c3Rlcik7CisgICAgZmxvYXQgdGV4dFdpZHRoID0gYmxvY2tDb250YWluaW5n
QWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChsb3dlc3RDb21tb25BbmNlc3Rv
ciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0aCkpIHsKICAgICAgICAgaW50IGxv
Z2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3
aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ud2luZG93U2l6ZS5oZWln
aHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUud2lkdGgoKSA6IHdp
bmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgLy8gSWdub3JlIGJveCB3
aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8gYXZvaWQgZXh0cmVtZSBtdWx0
aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWluPGZs
b2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOworICAgICAgICBm
bG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwgbG9n
aWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBsaWVyID0gbG9naWNhbENsdXN0ZXJX
aWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAgbXVsdGlwbGllciAqPSBtX2RvY3Vt
ZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3RvcigpOwogICAgICAg
ICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0gICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3aW5k
b3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwogfQogCi12b2lk
IFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1
dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpwcm9j
ZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIGNv
bnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3QqIHN1
YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7
CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIpKTsKIAotICAgIGZs
b2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnRhaW5l
cikgPyBtdWx0aXBsaWVyOiAxOworICAgIGZsb2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRhaW5l
clNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcikgPyBtdWx0aXBsaWVyOiAxOwogCiAgICAgUmVu
ZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRz
T2ZDb250YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAgd2hpbGUgKGRlc2Nl
bmRhbnQpIHsKQEAgLTEzNSwxMCArMTM0LDEwIEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vz
c0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSCiAg
ICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0aW9u
YXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRh
bnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5k
ZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVzdGVy
KGRlc2NlbmRhbnRCbG9jaykpCisgICAgICAgICAgICBpZiAoaXNDb250YWluZXJBdXRvc2l6aW5n
Q2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQogICAgICAg
ICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJsb2Nr
LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBk
ZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgICAgIHByb2Nlc3NDb250
YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0
LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAgICAgIGRlc2Nl
bmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoZGVz
Y2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTE5NCwxNCArMTkzLDE0IEBAIGJvb2wg
VGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6aXNB
dXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCitib29sIFRleHRB
dXRvc2l6ZXI6OmlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sq
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4
dCkKIHsKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3Npemlu
ZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBhIHVu
aWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKICAgICAv
LyB0aGUgbWFqb3Igc2VjdGlvbnMgb2YgdGhlIHBhZ2UgbG9vayBpbnRlcm5hbGx5IGNvbnNpc3Rl
bnQuCi0gICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRlbnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0b3Np
emluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCisgICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRhbnRz
IChpbmNsdWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCiAgICAg
Ly8gdGhlIHNhbWUgbXVsdGlwbGllciwgZXhjZXB0IGZvciBzdWJ0cmVlcyB3aGljaCBhcmUgdGhl
bXNlbHZlcyBjbHVzdGVycywKLSAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNjZW5kZW50IGNv
bnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBhbGwKKyAgICAvLyBhbmQgc29tZSBv
ZiB0aGVpciBkZXNjZW5kYW50IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBh
bGwKICAgICAvLyAoZm9yIGV4YW1wbGUgaWYgdGhlaXIgaGVpZ2h0IGlzIGNvbnN0cmFpbmVkKS4K
ICAgICAvLyBBZGRpdGlvbmFsbHksIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCByZXF1aXJlcyBl
YWNoIGNsdXN0ZXIgdG8gY29udGFpbiBhCiAgICAgLy8gbWluaW11bSBhbW91bnQgb2YgdGV4dCwg
d2l0aG91dCB3aGljaCBpdCB3b24ndCBiZSBhdXRvc2l6ZWQuCkBAIC0yMTAsMTEgKzIwOSwxNCBA
QCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyKQogICAgIC8vIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMgKGh0dHA6Ly93
My5vcmcvVFIvY3NzMy1ib3gvI2Zsb3ctcm9vdCksIHNpbmNlCiAgICAgLy8gZmxvdyByb290cyBj
b3JyZXNwb25kIHRvIGJveCBjb250YWluZXJzIHRoYXQgYmVoYXZlIHNvbWV3aGF0CiAgICAgLy8g
aW5kZXBlbmRlbnRseSBmcm9tIHRoZWlyIHBhcmVudCAoZm9yIGV4YW1wbGUgdGhleSBkb24ndCBv
dmVybGFwIGZsb2F0cykuCi0gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IGZsb3cgcm9v
dCBhbHNvIGNvbnZlbmllbnRseSBpbmNsdWRlcyBtb3N0IG9mIHRoZQorICAgIC8vIFRoZSBkZWZp
bml0aW9uIG9mIGEgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2Yg
dGhlCiAgICAgLy8gd2F5cyB0aGF0IGEgYm94IGFuZCBpdHMgY2hpbGRyZW4gY2FuIGhhdmUgc2ln
bmlmaWNhbnRseSBkaWZmZXJlbnQgd2lkdGgKICAgICAvLyBmcm9tIHRoZSBib3gncyBwYXJlbnQg
KHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50CiAgICAgLy8g
d2lkdGggYmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dlciBibG9ja3Mg
d291bGQgZW5kIHVwCiAgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIG5lY2Vz
c2FyeSkuCisgICAgLy8gQWRkaXRpb25hbGx5LCBhbnkgY29udGFpbmVycyB0aGF0IGFyZSB3aWRl
ciB0aGFuIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwKKyAgICAvLyBvZiB0aGVpciBlbmNs
b3NpbmcgY2x1c3RlciBhbHNvIGJlY29tZSBjbHVzdGVycywgc2luY2UgdGhleSBuZWVkIHNwZWNp
YWwKKyAgICAvLyB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAgIEFTU0VSVChpc0F1
dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAogICAgIHJldHVybiByZW5kZXJlci0+aXNS
ZW5kZXJWaWV3KCkKQEAgLTIyNCwxMiArMjI2LDE5IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNB
dXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiAgICAgICAgIHx8
IHJlbmRlcmVyLT5pc1RhYmxlQ2FwdGlvbigpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5pc0ZsZXhp
YmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpCiAgICAgICAgIHx8IHJlbmRlcmVyLT5oYXNDb2x1
bW5zKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwor
ICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKKyAgICAgICAg
fHwgKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQKKyAgICAgICAgICAgICYmIHJlbmRlcmVy
LT5jb250ZW50TG9naWNhbFdpZHRoKCkgPiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5j
b250ZW50TG9naWNhbFdpZHRoKCkpOwogICAgIC8vIEZJWE1FOiBUYWJsZXMgbmVlZCBzcGVjaWFs
IGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBjb2x1bW5zIGJ5CiAgICAgLy8gdGhlIHNh
bWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJlbnQgd2lkdGhzOyBzbyBkbyBoYXNDb2x1
bW5zKCkKICAgICAvLyByZW5kZXJlcnMsIGFuZCBwcm9iYWJseSBmbGV4Ym94ZXMuLi4KIH0KIAor
Ym9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVySWdub3JpbmdQYXJlbnRDbHVz
dGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIHJldHVybiBpc0F1dG9zaXpp
bmdDb250YWluZXIob2JqZWN0KSAmJiBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKHRvUmVu
ZGVyQmxvY2sob2JqZWN0KSwgMCk7Cit9CisKIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0Nv
bnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgLy8gRklYTUU6
IFByb3BhZ2F0ZSBjb25zdHJhaW5lZG5lc3MgZG93biB0aGUgdHJlZSwgdG8gYXZvaWQgaW5lZmZp
Y2llbnRseSB3YWxraW5nIGJhY2sgdXAgZnJvbSBlYWNoIGJveC4KQEAgLTI1MCw3ICsyNTksOCBA
QCBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVy
Ojpjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVy
KQorCitib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0
IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgYmxvY2st
bGV2ZWwgdGV4dCB0aGF0IGNhbid0IHdyYXAgKGFzIGl0J3MgbGlrZWx5IHRvCiAgICAgLy8gZXhw
YW5kIHNpZGV3YXlzIGFuZCBicmVhayB0aGUgcGFnZSdzIGxheW91dCkuCkBAIC0yNjAsNyArMjcw
LDcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiAhY29udGVudEhlaWdodElzQ29u
c3RyYWluZWQoY29udGFpbmVyKTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hv
dWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBm
bG9hdCBjb21tb25BbmNlc3RvcldpZHRoKQorYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hv
dWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQs
IGZsb2F0IGJsb2NrV2lkdGgpCiB7CiAgICAgLy8gRG9uJ3QgYXV0b3NpemUgY2x1c3RlcnMgdGhh
dCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVzIG9mIHRleHQgKGluCiAgICAgLy8gcHJhY3RpY2Ug
bGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNpbmNlIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRo
CkBAIC0yNzMsMTcgKzI4MywxNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRC
ZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZQogICAgIC8vIGlu
IGFuZCBwYW4gZnJvbSBzaWRlIHRvIHNpZGUgdG8gcmVhZCBlYWNoIGxpbmUsIHNpbmNlIGlmIHRo
ZXJlIGFyZSB2ZXJ5CiAgICAgLy8gZmV3IGxpbmVzIG9mIHRleHQgeW91J2xsIG9ubHkgbmVlZCB0
byBwYW4gYWNyb3NzIG9uY2Ugb3IgdHdpY2UuCiAgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRl
eHQgPSA0OwotICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGNvbW1vbkFuY2VzdG9yV2lkdGggKiBt
aW5MaW5lc09mVGV4dDsKKyAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBibG9ja1dpZHRoICogbWlu
TGluZXNPZlRleHQ7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gMDsKLSAgICBtZWFzdXJlRGVzY2Vu
ZGFudFRleHRXaWR0aChsb3dlc3RDb21tb25BbmNlc3RvciwgbWluVGV4dFdpZHRoLCB0ZXh0V2lk
dGgpOworICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4dFdpZHRoKTsKICAg
ICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5k
YW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRX
aWR0aCwgZmxvYXQmIHRleHRXaWR0aCkKK3ZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2Nl
bmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQm
IHRleHRXaWR0aCkKIHsKLSAgICBib29sIHNraXBMb2NhbFRleHQgPSAhY29udGFpbmVyU2hvdWxk
YmVBdXRvc2l6ZWQoY29udGFpbmVyKTsKKyAgICBib29sIHNraXBMb2NhbFRleHQgPSAhY29udGFp
bmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29udGFpbmVyKTsKIAogICAgIFJlbmRlck9iamVjdCogZGVz
Y2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhj
b250YWluZXIsIGNvbnRhaW5lcik7CiAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKQEAgLTI5MSw4
ICszMDEsOCBAQCB2b2lkIFRleHRBdXRvc2l6ZXI6Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRo
KGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsbwogICAgICAgICAgICAgdGV4dFdpZHRo
ICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgKiBkZXNj
ZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6ZSgpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzQXV0b3NpemluZ0NvbnRhaW5lcihkZXNjZW5kYW50KSkgewogICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGRlc2NlbmRhbnRCbG9jayA9IHRvUmVuZGVyQmxvY2soZGVzY2VuZGFudCk7Ci0gICAg
ICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkKLSAgICAg
ICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChkZXNjZW5kYW50QmxvY2ssIG1p
blRleHRXaWR0aCwgdGV4dFdpZHRoKTsKKyAgICAgICAgICAgIGlmICghaXNDb250YWluZXJBdXRv
c2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQor
ICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9j
aywgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzE4LDggKzMyOCw2IEBAIFJlbmRlck9iamVjdCogVGV4dEF1dG9zaXpl
cjo6bmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0CiAK
IGNvbnN0IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFp
bmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sqIGNsdXN0ZXIpCiB7Ci0gICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwotCiAgICAgc2l6ZV90IGZpcnN0RGVwdGggPSAw
OwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogZmlyc3RUZXh0TGVhZiA9IGZpbmRGaXJzdFRleHRM
ZWFmTm90SW5DbHVzdGVyKGNsdXN0ZXIsIGZpcnN0RGVwdGgsIEZpcnN0VG9MYXN0KTsKICAgICBp
ZiAoIWZpcnN0VGV4dExlYWYpCkBAIC0zNTIsNyArMzYwLDcgQEAgY29uc3QgUmVuZGVyQmxvY2sq
IFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBS
ZW5kZXIKIAogICAgIC8vIGNvbnRhaW5pbmdCbG9jaygpIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUg
Y2x1c3Rlciwgc2luY2UgaXQgb25seSBza2lwcyBhbmNlc3RvcnMgd2hlbiBmaW5kaW5nIHRoZQog
ICAgIC8vIGNvbnRhaW5lciBvZiBwb3NpdGlvbjphYnNvbHV0ZS9maXhlZCBibG9ja3MsIGFuZCB0
aG9zZSBjYW5ub3QgZXhpc3QgYmV0d2VlbiBhIGNsdXN0ZXIgYW5kIGl0cyB0ZXh0Ci0gICAgLy8g
bm9kZXMgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBhcyBpc0F1dG9zaXppbmdDbHVzdGVyIHdvdWxk
IGhhdmUgbWFkZSB0aGVtIGludG8gdGhlaXIgb3duIGluZGVwZW5kZW50CisgICAgLy8gbm9kZXMg
bG93ZXN0IGNvbW1vbiBhbmNlc3RvciBhcyBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyIHdv
dWxkIGhhdmUgbWFkZSB0aGVtIGludG8gdGhlaXIgb3duIGluZGVwZW5kZW50CiAgICAgLy8gY2x1
c3Rlci4KICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gZmlyc3ROb2RlLT5jb250
YWluaW5nQmxvY2soKTsKICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrLT5pc0Rlc2NlbmRhbnRP
ZihjbHVzdGVyKSk7CkBAIC0zNjgsNyArMzc2LDcgQEAgY29uc3QgUmVuZGVyT2JqZWN0KiBUZXh0
QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmoK
ICAgICArK2RlcHRoOwogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY2hpbGQgPSAoZGlyZWN0aW9u
ID09IEZpcnN0VG9MYXN0KSA/IHBhcmVudC0+Zmlyc3RDaGlsZCgpIDogcGFyZW50LT5sYXN0Q2hp
bGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDb250
YWluZXIoY2hpbGQpIHx8ICFpc0F1dG9zaXppbmdDbHVzdGVyKHRvUmVuZGVyQmxvY2soY2hpbGQp
KSkgeworICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NsdXN0ZXJJZ25vcmluZ1BhcmVudENsdXN0
ZXIoY2hpbGQpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxlYWYgPSBmaW5k
Rmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjaGlsZCwgZGVwdGgsIGRpcmVjdGlvbik7CiAgICAg
ICAgICAgICBpZiAobGVhZikKICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGRkM2UxOWRkZDNiZWE0ZDAwMjY4
ZmEyYWIwMmE5YTU2OTA0YTMxN2UuLjBlNjBmYjQ4NzhiN2FlYjQ0ZDNjMzhhZmZlNjk3MTEzYTQz
NGUyOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtMjgs
MTcgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgUmVu
ZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJUZXh0Owogc3RydWN0
IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbzsKIApAQCAtNjMsMjcgKzYwLDI1IEBAIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCopOwogCiAgICAgdm9pZCBwcm9j
ZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZv
Jik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRv
c2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0
aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tD
b250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1
dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVyT2Jq
ZWN0KiwgZmxvYXQpOwogCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIo
Y29uc3QgUmVuZGVyQmxvY2sqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVudEJs
b2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0
ZXJJZ25vcmluZ1BhcmVudENsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKLSAgICBzdGF0
aWMgYm9vbCBjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29u
dGFpbmVyKTsKLSAgICBzdGF0aWMgYm9vbCBjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3Qg
UmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFuY2VzdG9yLCBmbG9hdCBjb21tb25BbmNlc3Rvcldp
ZHRoKTsKLSAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBS
ZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lk
dGgpOworICAgIHN0YXRpYyBib29sIGNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJl
bmRlckJsb2NrKiBjb250YWluZXIpOworICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQg
YmxvY2tXaWR0aCk7CisgICAgc3RhdGljIHZvaWQgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgo
Y29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29u
dGFpbmluZ0FsbFRleHQsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CiAK
ICAgICAvLyBVc2UgdG8gdHJhdmVyc2UgdGhlIHRyZWUgb2YgZGVzY2VuZGFudHMsIGV4Y2x1ZGlu
ZyBkZXNjZW5kYW50cyBvZiBjb250YWluZXJzIChidXQgcmV0dXJuaW5nIHRoZSBjb250YWluZXJz
IHRoZW1zZWx2ZXMpLgotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyU2tp
cHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJlbnQs
IGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CisgICAgc3RhdGljIFJlbmRlck9iamVj
dCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7CiAKLSAgICAvLyBG
aW5kcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0
IGRlc2NlbmRhbnQKLSAgICAvLyB0ZXh0IG5vZGUgKGV4Y2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcg
dG8gb3RoZXIgYXV0b3NpemluZyBjbHVzdGVycykuCiAgICAgc3RhdGljIGNvbnN0IFJlbmRlckJs
b2NrKiBmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY29uc3QgUmVuZGVyQmxvY2sq
IGNsdXN0ZXIpOwogCi0gICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0cmF2ZXJzYWwgZGlyZWN0aW9u
IHNwZWNpZmllZCwgZmluZHMgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGxlYWYgdGV4dCBub2RlIGNo
aWxkIHRoYXQgZG9lc24ndAotICAgIC8vIGJlbG9uZyB0byBhbnkgY2x1c3Rlci4KLSAgICBzdGF0
aWMgY29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3Rlcihjb25z
dCBSZW5kZXJPYmplY3QqLCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOworICAg
IC8vIFJldHVybnMgdGhlIGZpcnN0IHRleHQgbGVhZiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFu
ZCBpdHMgZGVwdGggc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gcGFyZW50LgorICAgIHN0YXRpYyBj
b25zdCBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJl
bmRlck9iamVjdCogcGFyZW50LCBzaXplX3QmIGRlcHRoLCBUcmF2ZXJzYWxEaXJlY3Rpb24pOwog
CiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5YzQyZmU5MjExMzU5NzBk
YjY2NmRkMDAxZmZiOTdlNjVmZmNjNDkuLmUzNGI1OTQ1MzcxYTJkNjFkYTliZWFkZWYzYWZmNzQ0
ODFjNGY2ODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0yOSAgQW50b24gVmF5dm9k
ICA8YXZheXZvZEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGV4dCBBdXRvc2l6aW5nOiBjb250
YWluZXJzIHdpZGVyIHRoYW4gdGhlaXIgZW5jbG9zaW5nIGNsdXN0ZXJzIHNob3VsZCBiZSBhdXRv
c2l6ZWQgYXMgc2VwYXJhdGUgY2x1c3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMzYyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vZGlmaWVkIGV4aXN0aW5nIHRlc3RzIHRvIHJlZmxlY3QgdGhl
IG5ldyBhdXRvc2l6aW5nIGFwcHJvYWNoIHRvIGhhbmRsaW5nIG9mIHRoZSBlbGVtZW50cyB0aGF0
IGFyZQorICAgICAgICB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRo
ZSB0ZXh0IG5vZGVzIG9mIHRoZSBlbmNsb3NpbmcgYXV0b3NpemluZyBjbHVzdGVyLgorCisgICAg
ICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3Rl
ZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1u
YXJyb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4
cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5o
dG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC1leHBlY3RlZC5odG1sOgorICAgICAgICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5n
L3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sOgorCiAyMDEyLTEyLTE0ICBKb2hu
IE1lbGxvciAgPGpvaG5tZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGV4dCBBdXRvc2l6aW5n
OiBEb24ndCBhdXRvc2l6ZSB1bndyYXBwYWJsZSBibG9ja3MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1u
YXJyb3ctZXhwZWN0ZWQuaHRtbAppbmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWViZGUy
MjVjNjQ2NTcwLi5kNGY4ZTM1NWVkOGY3MDg0MDk5Y2Q2YmRlMDczNDI0OTI0MmZlMzNkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4t
bmFycm93LWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNywxMyArMTcsMTMg
QEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0K
ICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2lj
aW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBk
b2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6
IDgwMHB4OyBmb250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJl
IGF1dG9zaXplZCB0byBqdXN0IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjAp
LCBzaW5jZSBkZXNwaXRlIGl0cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3
aWRlIHJvb3QgY2x1c3Rlci48YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4OyBmb250
LXNpemU6IDEuODc1cmVtIj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQg
dG8gMzBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGl0cyB3aWR0
aDo2MDBweCBtYWtlcyBpdCB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9m
IGl0cyBlbmNsb3NpbmcgY2x1c3RlciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVjb21lIGEgY2x1
c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1
ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBs
YWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAgIDxkaXYgc3R5
bGU9ImZvbnQtc2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxh
cmx5IGJlIGF1dG9zaXplZCB0byAyMHB4Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBi
ZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwg
c2luY2UgaXQncyBub3QgYW4gYXV0b3NpemluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVu
dCBlbGVtZW50IGlzIHRoZSBlbmNsb3NpbmcgYXV0b3NpemluZyBjbHVzdGVyIHdoaWNoIGlzIDQw
MHB4IHdpZGUuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2Vj
dGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQg
dXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1p
bi1uYXJyb3cuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXIt
d2lkZS1pbi1uYXJyb3cuaHRtbAppbmRleCBiMmVmMDEwN2M5ZWM2NmM3MjNhZTk2ZmI0NDY5NmJm
MzE2MTQ0N2NjLi44NWJjYTM5NWZmZDQ0NWU2OGVhMGQ0NDgxYmUwNjE3OTk3Y2NmMTc4IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4t
bmFycm93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rl
ci13aWRlLWluLW5hcnJvdy5odG1sCkBAIC0yNiwxMyArMjYsMTMgQEAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpIHsKICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxh
Ym9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHls
ZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQg
dG8ganVzdCAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVz
cGl0ZSBpdHMgd2lkdGg6ODAwcHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNs
dXN0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MDBweCI+CisgICAgICAgIFRoaXMg
dGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAq
IDYwMC8zMjApLCBzaW5jZSBpdHMgd2lkdGg6NjAwcHggbWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUg
bG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0
IHdpbGwgaXRzZWxmIGJlY29tZSBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBk
b2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNt
b2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAg
ICAgPC9kaXY+CiAKICAgICA8ZGl2PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJs
eSBiZSBhdXRvc2l6ZWQgdG8gMjBweC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUg
YXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNp
bmNlIGl0J3Mgbm90IGFuIGF1dG9zaXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQg
ZWxlbWVudCBpcyB0aGUgZW5jbG9zaW5nIGF1dG9zaXppbmcgY2x1c3RlciB3aGljaCBpcyA0MDBw
eCB3aWRlLjxicj4KICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3Rl
dHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0
IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVj
dGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4
cGVjdGVkLmh0bWwKaW5kZXggYTkwYTAxM2FmM2VkNGVlMDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4
OC4uY2FkMzFjNWI2NDhiMzAwNzk2ZTk3Njc3MjU4NWQxMWJkMGI5NzY3YSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0
ZWQuaHRtbApAQCAtMTIsMTEgKzEyLDEwIEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjog
MDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDMy
MHB4OyBmb250LXNpemU6IDFyZW0iPgotCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXpl
ZCwgYXMgdGhpcyBkaXYgaXMgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3Qg
Y2x1c3RlciwgYW5kIHRoaXMgZGl2IGlzIG5hcnJvdy48YnI+CisgICAgVGhpcyB0ZXh0IHNob3Vs
ZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNl
c3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAg
ICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxp
dCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBt
YWduYSBhbGlxdWEuCi0JPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0
IHNob3VsZCBub3QgYmUgYXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0
aCBvZiB0aGUgcGFyZW50IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRv
c2l6aW5nIG11bHRpcGxpZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hv
dWxkIGJlIGF1dG9zaXplZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKyAgICA8
ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6ZTogMi41cmVtIj4KKyAgICAgICAgVGhp
cyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2
ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2Vz
dG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNl
bGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIg
YWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFi
b3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAppbmRleCA0NTRl
YTYxZjNhZjc5YWZmODdiN2QzMzBjNTViNzkxNzYzYjUyMDdlLi4wNjg3NmVmZmM1NTAxYzE0OGQw
YWYyNzRiZDhkNTE5NzMzMjBmMjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCkBAIC0yNCw4ICsyNCw3IEBAIGlmICh3aW5kb3cuaW50
ZXJuYWxzKSB7CiAgICAgVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlz
IGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBh
bmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l
dCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGlu
Y2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPGRpdiBzdHls
ZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVk
IHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIHdo
aWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIuPGJyPgot
ICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4gV2lsbCBu
ZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2Ug
aXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3Np
bmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3Rl
ZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ct
b3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKaW5kZXggNGI3YTc3N2RjMzkxNWY1Y2E2MjE3
OWU4ODVlMDUwMDcxOGJlNzJiYy4uMzAzMDMxZTM1MThhNDM5NmJmMDcyNjM5ZjRlMzNjMzQyMjAz
NTllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVj
dGVkLmh0bWwKQEAgLTEyLDE3ICsxMiwxNyBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46
IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogPGJvZHk+CiAKIDxkaXYgc3R5bGU9IndpZHRoOiA0
MDBweCI+Ci0gIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRpdiBzdHls
ZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAv
MzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQg
ZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5k
cGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt
ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBp
bmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5
bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2Ug
aXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mICBpdHMgZW5jbG9z
aW5nIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KKyAgICAgICAg
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KKyAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gIDwvZGl2PgogCi0g
IDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMS4yNXJlbSI+CisgICAgPGRpdiBzdHlsZT0iZm9udC1z
aXplOiAxLjI1cmVtIj4KICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8g
MjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCkuPGJyPgogICAgICAgICBMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuCi0gIDwvZGl2PgorICAgIDwvZGl2PgogPC9kaXY+CiAKIDwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJm
bG93LXNjcm9sbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKaW5kZXggZjc0YTdhMjE0MDhjOGFlZjQ1ZmJh
ZWQ4NjVmNTlmN2VhOTNiODFlMC4uNzk3NjNkZWZmYWQ1Nzg3MTZmMTBhNWI4NGYyMDk1OWU4Y2Y5
MTFkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKQEAgLTIxLDE3
ICsyMSwxNyBAQCBpZiAod2luZG93LmludGVybmFscykgewogPGJvZHk+CiAKIDxkaXYgc3R5bGU9
IndpZHRoOiA0MDBweCI+Ci0gIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAg
PGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNl
IHRoaXMgaXMgcGFydCBvZiB0aGUgcm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRz
IGFyZSBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVudCBvZiB0
aGlzIGRpdi48YnI+Ci0gICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0
ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1
dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICA8ZGl2IHN0eWxlPSJvdmVyZmxv
dy14OiBzY3JvbGwiPgorICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgorICAgICAg
ICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250
IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29t
bW9uIGFuY2VzdG9yIG9mICBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNs
dXN0ZXIgaXRzZWxmLjxicj4KKyAgICAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICAgICAgPC9kaXY+
CiAgICAgPC9kaXY+Ci0gIDwvZGl2PgogCi0gIDxkaXY+CisgICAgPGRpdj4KICAgICAgICAgVGhp
cyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2
ICogNDAwLzMyMCkuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29u
c2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1
bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCi0gIDwvZGl2PgorICAgIDwvZGl2
PgogPC9kaXY+CiAKIDwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179797</attachid>
            <date>2012-12-17 13:50:47 -0800</date>
            <delta_ts>2012-12-18 14:02:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121217214804.patch</filename>
            <type>text/plain</type>
            <size>28841</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDU5MTc5NTM3MTZkMTRm
OWM3MDdlM2NkNzgyZTJkMjFiNDRkNTJmNS4uMDgyZTkyMWI2MDE0NzVlMTNjOWUxNzc3ZGUzYWI1
MjM5ZDQ0NGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCisg
ICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOiBDYWxscyBwcm9jZXNz
Q2x1c3RlciB3aXRoIG5ldyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOiBQYXNzZXMgYmxvY2sgY29udGFpbmluZyBh
bGwgdGV4dCBub2RlcyBpbnRvIHByb2Nlc3NDb250YWluZXIuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKTogfHBhcmVudEJsb2NrQ29udGFpbmluZ0Fs
bFRleHR8IHBhcmFtZXRlciBwYXNzZWQgaW50bworICAgICAgICBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNDb250YWluZXJB
dXRvc2l6aW5nQ2x1c3Rlcik6IENvbnNpZGVycyBhIGJsb2NrIGEgY2x1c3RlciBpZiBpdCBpcyB3
aWRlciB0aGFuCisgICAgICAgIGl0cyBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCB3
aXRoaW4gZW5jbG9zaW5nIGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVy
KS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXJJ
Z25vcmluZ1BhcmVudENsdXN0ZXIpOiBBIGNvbnZlbmllbmNlIG1ldGhvZCByZWR1Y2luZyBjb2Rl
IGR1cGxpY2F0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6Y2x1c3RlclNo
b3VsZEJlQXV0b3NpemVkKTogUGFzc2VzIG5ldyBwYXJhbWV0ZXIgdG8gbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGguCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aCk6IFVzZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIg
dG8gcGFzcyB0byBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KTogUmVt
b3ZlZCB1c2VsZXNzIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKTogVXNlcyBzaG9ydGVyIGlzQXV0b3Npemlu
Z0NsdXN0ZXIgY2FsbC4KIDIwMTItMTItMTcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTWFrZSBwb3BvdmVyIGNvbnRl
bnQgYWNjZXNzaWJsZSBmb3IgY2xpY2tzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuY3BwCmluZGV4IDNhY2MyMjJhYzBmMmEyZWNhMmY3OTdhNjFhNjFhOGJkZjc2MmE5
NjQuLjcyN2IzYTY2NGUzNTZhOGVmZjMzNzE4YjFlNzlkOTAxMGVhOWFhZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODUsNyAr
ODYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCog
bGF5b3V0Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxv
Y2soKTsKIAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwotICAgIHdoaWxl
IChjbHVzdGVyICYmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8ICFpc0F1dG9z
aXppbmdDbHVzdGVyKGNsdXN0ZXIpKSkKKyAgICB3aGlsZSAoY2x1c3RlciAmJiAhaXNBdXRvc2l6
aW5nQ2x1c3Rlcklnbm9yaW5nUGFyZW50Q2x1c3RlcihjbHVzdGVyKSkKICAgICAgICAgY2x1c3Rl
ciA9IGNsdXN0ZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgcHJvY2Vzc0NsdXN0ZXIoY2x1
c3RlciwgY29udGFpbmVyLCBsYXlvdXRSb290LCB3aW5kb3dJbmZvKTsKQEAgLTk0LDM2ICs5NSwz
NCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRlck9iamVjdCogbGF5
b3V0Um9vdCkKIAogdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9j
ayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
Um9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQogewotICAg
IEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQogICAgIC8vIE1hbnkgcGFn
ZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRo
ZQogICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9m
IHxjbHVzdGVyfCB3ZSBmaW5kCiAgICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2Yg
dGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCiAgICAgLy8gdGhlIGNs
dXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0
aGUgdGV4dCksCiAgICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjb25zdCBS
ZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFp
bmluZ0FsbFRleHQoY2x1c3Rlcik7Ci0gICAgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCA9IGxv
d2VzdENvbW1vbkFuY2VzdG9yLT5jb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgY29uc3QgUmVu
ZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVlcGVzdEJsb2NrQ29udGFp
bmluZ0FsbFRleHQoY2x1c3Rlcik7CisgICAgZmxvYXQgdGV4dFdpZHRoID0gYmxvY2tDb250YWlu
aW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IDE7Ci0gICAgaWYgKGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChsb3dlc3RDb21tb25BbmNl
c3RvciwgY29tbW9uQW5jZXN0b3JXaWR0aCkpIHsKKyAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0
b3NpemVkKGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIHRleHRXaWR0aCkpIHsKICAgICAgICAgaW50
IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ud2luZG93U2l6ZS5o
ZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9IGNsdXN0ZXItPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUud2lkdGgoKSA6
IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgLy8gSWdub3JlIGJv
eCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8gYXZvaWQgZXh0cmVtZSBt
dWx0aXBsaWVycy4KLSAgICAgICAgZmxvYXQgbG9naWNhbENsdXN0ZXJXaWR0aCA9IHN0ZDo6bWlu
PGZsb2F0Pihjb21tb25BbmNlc3RvcldpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOworICAgICAg
ICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KHRleHRXaWR0aCwg
bG9naWNhbExheW91dFdpZHRoKTsKIAogICAgICAgICBtdWx0aXBsaWVyID0gbG9naWNhbENsdXN0
ZXJXaWR0aCAvIGxvZ2ljYWxXaW5kb3dXaWR0aDsKICAgICAgICAgbXVsdGlwbGllciAqPSBtX2Rv
Y3VtZW50LT5zZXR0aW5ncygpLT50ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3RvcigpOwogICAg
ICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgoMS4wZiwgbXVsdGlwbGllcik7CiAgICAgfQogCi0g
ICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3
aW5kb3dJbmZvKTsKKyAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwg
YmxvY2tDb250YWluaW5nQWxsVGV4dCwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOwogfQogCi12
b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4
dEF1dG9zaXppbmdXaW5kb3dJbmZvJiB3aW5kb3dJbmZvKQordm9pZCBUZXh0QXV0b3NpemVyOjpw
cm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8p
CiB7CiAgICAgQVNTRVJUKGlzQXV0b3NpemluZ0NvbnRhaW5lcihjb250YWluZXIpKTsKIAotICAg
IGZsb2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnRh
aW5lcikgPyBtdWx0aXBsaWVyOiAxOworICAgIGZsb2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRh
aW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcikgPyBtdWx0aXBsaWVyOiAxOwogCiAgICAg
UmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRh
bnRzT2ZDb250YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CiAgICAgd2hpbGUgKGRl
c2NlbmRhbnQpIHsKQEAgLTEzNSwxMCArMTM0LDEwIEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJv
Y2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBS
CiAgICAgICAgICAgICAvLyBGSVhNRTogSW5jcmVhc2UgbGlzdCBtYXJrZXIgc2l6ZSBwcm9wb3J0
aW9uYXRlbHkuCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2Nl
bmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmIChpc0F1dG9zaXppbmdDbHVz
dGVyKGRlc2NlbmRhbnRCbG9jaykpCisgICAgICAgICAgICBpZiAoaXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQpKQogICAg
ICAgICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgZGVzY2VuZGFudEJs
b2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2Nr
LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgICAgIHByb2Nlc3ND
b250YWluZXIobXVsdGlwbGllciwgZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxU
ZXh0LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICB9CiAgICAgICAgIGRl
c2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMo
ZGVzY2VuZGFudCwgc3VidHJlZVJvb3QpOwogICAgIH0KQEAgLTE5NiwxNCArMTk1LDE0IEBAIGJv
b2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6
aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCitib29sIFRl
eHRBdXRvc2l6ZXI6OmlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxv
Y2sqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxs
VGV4dCkKIHsKICAgICAvLyAiQXV0b3NpemluZyBjbHVzdGVycyIgYXJlIHNwZWNpYWwgYXV0b3Np
emluZyBjb250YWluZXJzIHdpdGhpbiB3aGljaCB3ZQogICAgIC8vIHdhbnQgdG8gZW5mb3JjZSBh
IHVuaWZvcm0gdGV4dCBzaXplIG11bHRpcGxpZXIsIGluIHRoZSBob3BlcyBvZiBtYWtpbmcKICAg
ICAvLyB0aGUgbWFqb3Igc2VjdGlvbnMgb2YgdGhlIHBhZ2UgbG9vayBpbnRlcm5hbGx5IGNvbnNp
c3RlbnQuCi0gICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRlbnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0
b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCisgICAgLy8gQWxsIHRoZWlyIGRlc2NlbmRh
bnRzIChpbmNsdWRpbmcgb3RoZXIgYXV0b3NpemluZyBjb250YWluZXJzKSBtdXN0IHNoYXJlCiAg
ICAgLy8gdGhlIHNhbWUgbXVsdGlwbGllciwgZXhjZXB0IGZvciBzdWJ0cmVlcyB3aGljaCBhcmUg
dGhlbXNlbHZlcyBjbHVzdGVycywKLSAgICAvLyBhbmQgc29tZSBvZiB0aGVpciBkZXNjZW5kZW50
IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBhdCBhbGwKKyAgICAvLyBhbmQgc29t
ZSBvZiB0aGVpciBkZXNjZW5kYW50IGNvbnRhaW5lcnMgbWlnaHQgbm90IGJlIGF1dG9zaXplZCBh
dCBhbGwKICAgICAvLyAoZm9yIGV4YW1wbGUgaWYgdGhlaXIgaGVpZ2h0IGlzIGNvbnN0cmFpbmVk
KS4KICAgICAvLyBBZGRpdGlvbmFsbHksIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCByZXF1aXJl
cyBlYWNoIGNsdXN0ZXIgdG8gY29udGFpbiBhCiAgICAgLy8gbWluaW11bSBhbW91bnQgb2YgdGV4
dCwgd2l0aG91dCB3aGljaCBpdCB3b24ndCBiZSBhdXRvc2l6ZWQuCkBAIC0yMTIsMTEgKzIxMSwx
NCBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVy
QmxvY2sqIHJlbmRlcmVyKQogICAgIC8vIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMgKGh0dHA6
Ly93My5vcmcvVFIvY3NzMy1ib3gvI2Zsb3ctcm9vdCksIHNpbmNlCiAgICAgLy8gZmxvdyByb290
cyBjb3JyZXNwb25kIHRvIGJveCBjb250YWluZXJzIHRoYXQgYmVoYXZlIHNvbWV3aGF0CiAgICAg
Ly8gaW5kZXBlbmRlbnRseSBmcm9tIHRoZWlyIHBhcmVudCAoZm9yIGV4YW1wbGUgdGhleSBkb24n
dCBvdmVybGFwIGZsb2F0cykuCi0gICAgLy8gVGhlIGRlZmluaXRpb24gb2YgYSBmbG93IGZsb3cg
cm9vdCBhbHNvIGNvbnZlbmllbnRseSBpbmNsdWRlcyBtb3N0IG9mIHRoZQorICAgIC8vIFRoZSBk
ZWZpbml0aW9uIG9mIGEgZmxvdyByb290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qg
b2YgdGhlCiAgICAgLy8gd2F5cyB0aGF0IGEgYm94IGFuZCBpdHMgY2hpbGRyZW4gY2FuIGhhdmUg
c2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgd2lkdGgKICAgICAvLyBmcm9tIHRoZSBib3gncyBwYXJl
bnQgKHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHNpZ25pZmljYW50bHkgZGlmZmVyZW50CiAgICAg
Ly8gd2lkdGggYmxvY2tzIHdpdGhpbiBhIGNsdXN0ZXIsIHNpbmNlIHRoZSBuYXJyb3dlciBibG9j
a3Mgd291bGQgZW5kIHVwCiAgICAgLy8gbGFyZ2VyIHRoYW4gd291bGQgb3RoZXJ3aXNlIGJlIG5l
Y2Vzc2FyeSkuCisgICAgLy8gQWRkaXRpb25hbGx5LCBhbnkgY29udGFpbmVycyB0aGF0IGFyZSB3
aWRlciB0aGFuIHRoZSB8YmxvY2tDb250YWluaW5nQWxsVGV4dHwKKyAgICAvLyBvZiB0aGVpciBl
bmNsb3NpbmcgY2x1c3RlciBhbHNvIGJlY29tZSBjbHVzdGVycywgc2luY2UgdGhleSBuZWVkIHNw
ZWNpYWwKKyAgICAvLyB0cmVhdG1lbnQgZHVlIHRvIHRoZWlyIHdpZHRoLgogICAgIEFTU0VSVChp
c0F1dG9zaXppbmdDb250YWluZXIocmVuZGVyZXIpKTsKIAogICAgIHJldHVybiByZW5kZXJlci0+
aXNSZW5kZXJWaWV3KCkKQEAgLTIyNywxMiArMjI5LDE5IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6
aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayogcmVuZGVyZXIpCiAgICAgICAg
IHx8IHJlbmRlcmVyLT5pc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpCiAgICAgICAg
IHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkKICAgICAgICAgfHwgcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHJlbmRlcmVyLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpCi0gICAgICAgIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5pc0Rpc3Bs
YXlSZXBsYWNlZFR5cGUoKTsKKyAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPmlzRGlzcGxh
eVJlcGxhY2VkVHlwZSgpCisgICAgICAgIHx8IChwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxUZXh0
CisgICAgICAgICAgICAmJiByZW5kZXJlci0+Y29udGVudExvZ2ljYWxXaWR0aCgpID4gcGFyZW50
QmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAvLyBG
SVhNRTogVGFibGVzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyB0byBtdWx0aXBseSBhbGwgdGhlaXIg
Y29sdW1ucyBieQogICAgIC8vIHRoZSBzYW1lIGFtb3VudCBldmVuIGlmIHRoZXkncmUgZGlmZmVy
ZW50IHdpZHRoczsgc28gZG8gaGFzQ29sdW1ucygpCiAgICAgLy8gY29udGFpbmVycywgYW5kIHBy
b2JhYmx5IGZsZXhib3hlcy4uLgogfQogCitib29sIFRleHRBdXRvc2l6ZXI6OmlzQXV0b3Npemlu
Z0NsdXN0ZXJJZ25vcmluZ1BhcmVudENsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgcmV0dXJuIGlzQXV0b3NpemluZ0NvbnRhaW5lcihvYmplY3QpICYmIGlzQ29udGFp
bmVyQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhvYmplY3QpLCAwKTsKK30KKwogc3Rh
dGljIGJvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lcikKIHsKICAgICAvLyBGSVhNRTogUHJvcGFnYXRlIGNvbnN0cmFpbmVkbmVzcyBkb3du
IHRoZSB0cmVlLCB0byBhdm9pZCBpbmVmZmljaWVudGx5IHdhbGtpbmcgYmFjayB1cCBmcm9tIGVh
Y2ggYm94LgpAQCAtMjUzLDcgKzI2Miw4IEBAIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0Nv
bnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCisKK2Jvb2wgVGV4dEF1dG9zaXplcjo6Y29udGFp
bmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKIHsKICAg
ICAvLyBEb24ndCBhdXRvc2l6ZSBibG9jay1sZXZlbCB0ZXh0IHRoYXQgY2FuJ3Qgd3JhcCAoYXMg
aXQncyBsaWtlbHkgdG8KICAgICAvLyBleHBhbmQgc2lkZXdheXMgYW5kIGJyZWFrIHRoZSBwYWdl
J3MgbGF5b3V0KS4KQEAgLTI2Myw3ICsyNzMsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRh
aW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiAgICAg
cmV0dXJuICFjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChjb250YWluZXIpOwogfQogCi1ib29s
IFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9j
ayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpCitib29s
IFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9j
ayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgYmxvY2tXaWR0aCkKIHsKICAgICAvLyBE
b24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRhaW4gbGVzcyB0aGFuIDQgbGluZXMgb2Yg
dGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxpbmVzIGFyZSByZXF1aXJlZCwgc2luY2Ug
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTI3NiwxNyArMjg2LDE3IEBAIGJvb2wgVGV4
dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBs
b3dlc3RDb21tb25BbmNlCiAgICAgLy8gaW4gYW5kIHBhbiBmcm9tIHNpZGUgdG8gc2lkZSB0byBy
ZWFkIGVhY2ggbGluZSwgc2luY2UgaWYgdGhlcmUgYXJlIHZlcnkKICAgICAvLyBmZXcgbGluZXMg
b2YgdGV4dCB5b3UnbGwgb25seSBuZWVkIHRvIHBhbiBhY3Jvc3Mgb25jZSBvciB0d2ljZS4KICAg
ICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7Ci0gICAgZmxvYXQgbWluVGV4dFdpZHRo
ID0gY29tbW9uQW5jZXN0b3JXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OworICAgIGZsb2F0IG1pblRl
eHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09mVGV4dDsKICAgICBmbG9hdCB0ZXh0V2lk
dGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGxvd2VzdENvbW1vbkFuY2Vz
dG9yLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0
V2lkdGgoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgYmxvY2tDb250YWluaW5nQWxsVGV4dCwgbWlu
VGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgIGlmICh0ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRo
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4
dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sq
IGNvbnRhaW5lciwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQordm9pZCBU
ZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwg
ZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKQogewotICAgIGJvb2wgc2tpcExv
Y2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb250YWluZXIpOworICAgIGJv
b2wgc2tpcExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRCZUF1dG9zaXplZChjb250YWluZXIp
OwogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnRhaW5lciwgY29udGFpbmVyKTsKICAgICB3aGls
ZSAoZGVzY2VuZGFudCkgewpAQCAtMjk0LDggKzMwNCw4IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
ZmxvCiAgICAgICAgICAgICB0ZXh0V2lkdGggKz0gdG9SZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5y
ZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQtPnN0eWxlKCktPnNwZWNpZmllZEZvbnRT
aXplKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGRlc2NlbmRh
bnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzY2VuZGFudEJsb2NrID0gdG9SZW5k
ZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3Rl
cihkZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOworICAgICAg
ICAgICAgaWYgKCFpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywg
YmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRh
bnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5U
ZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRleHRXaWR0aCA+
PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjEsOCArMzMxLDYgQEAg
UmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2Vu
ZGFudHNPZkNvbnRhaW5lcnMoY29uc3QKIAogY29uc3QgUmVuZGVyQmxvY2sqIFRleHRBdXRvc2l6
ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayog
Y2x1c3RlcikKIHsKLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ2x1c3RlcihjbHVzdGVyKSk7Ci0K
ICAgICBzaXplX3QgZmlyc3REZXB0aCA9IDA7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBmaXJz
dFRleHRMZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY2x1c3RlciwgZmlyc3RE
ZXB0aCwgRmlyc3RUb0xhc3QpOwogICAgIGlmICghZmlyc3RUZXh0TGVhZikKQEAgLTM1NSw3ICsz
NjMsNyBAQCBjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9j
a0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlcgogCiAgICAgLy8gY29udGFpbmluZ0Jsb2Nr
KCkgc2hvdWxkIG5ldmVyIGxlYXZlIHRoZSBjbHVzdGVyLCBzaW5jZSBpdCBvbmx5IHNraXBzIGFu
Y2VzdG9ycyB3aGVuIGZpbmRpbmcgdGhlCiAgICAgLy8gY29udGFpbmVyIG9mIHBvc2l0aW9uOmFi
c29sdXRlL2ZpeGVkIGJsb2NrcywgYW5kIHRob3NlIGNhbm5vdCBleGlzdCBiZXR3ZWVuIGEgY2x1
c3RlciBhbmQgaXRzIHRleHQKLSAgICAvLyBub2RlcyBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIGFz
IGlzQXV0b3NpemluZ0NsdXN0ZXIgd291bGQgaGF2ZSBtYWRlIHRoZW0gaW50byB0aGVpciBvd24g
aW5kZXBlbmRlbnQKKyAgICAvLyBub2RlcyBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIGFzIGlzQ29u
dGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIgd291bGQgaGF2ZSBtYWRlIHRoZW0gaW50byB0aGVpciBv
d24gaW5kZXBlbmRlbnQKICAgICAvLyBjbHVzdGVyLgogICAgIFJlbmRlckJsb2NrKiBjb250YWlu
aW5nQmxvY2sgPSBmaXJzdE5vZGUtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIEFTU0VSVChjb250
YWluaW5nQmxvY2stPmlzRGVzY2VuZGFudE9mKGNsdXN0ZXIpKTsKQEAgLTM3MSw3ICszNzksNyBA
QCBjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6OmZpbmRGaXJzdFRleHRMZWFmTm90
SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iagogICAgICsrZGVwdGg7CiAgICAgY29uc3QgUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RUb0xhc3QpID8gcGFyZW50LT5maXJz
dENoaWxkKCkgOiBwYXJlbnQtPmxhc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkgewotICAg
ICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGlsZCkgfHwgIWlzQXV0b3NpemluZ0Ns
dXN0ZXIodG9SZW5kZXJCbG9jayhjaGlsZCkpKSB7CisgICAgICAgIGlmICghaXNBdXRvc2l6aW5n
Q2x1c3Rlcklnbm9yaW5nUGFyZW50Q2x1c3RlcihjaGlsZCkpIHsKICAgICAgICAgICAgIGNvbnN0
IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxk
LCBkZXB0aCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIGlmIChsZWFmKQogICAgICAgICAgICAg
ICAgIHJldHVybiBsZWFmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgK
aW5kZXggZGQzZTE5ZGRkM2JlYTRkMDAyNjhmYTJhYjAyYTlhNTY5MDRhMzE3ZS4uMGU2MGZiNDg3
OGI3YWViNDRkM2MzOGFmZmU2OTcxMTNhNDM0ZTI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5oCkBAIC0yOCwxNyArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShURVhU
X0FVVE9TSVpJTkcpCiAKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFJlbmRlclRleHQ7CiBzdHJ1Y3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvOwogCkBA
IC02MywyNyArNjAsMjUgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERv
Y3VtZW50Kik7CiAKICAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVy
LCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25z
dCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIo
ZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBw
cm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKIAogICAgIHZv
aWQgc2V0TXVsdGlwbGllcihSZW5kZXJPYmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9v
bCBpc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGlj
IGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOworICAgIHN0YXRp
YyBib29sIGlzQ29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBj
b25zdCBSZW5kZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgc3Rh
dGljIGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcklnbm9yaW5nUGFyZW50Q2x1c3Rlcihjb25zdCBS
ZW5kZXJPYmplY3QqKTsKIAotICAgIHN0YXRpYyBib29sIGNvbnRhaW5lclNob3VsZGJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpOwotICAgIHN0YXRpYyBib29sIGNsdXN0
ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0
b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpOwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVE
ZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1p
blRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgc3RhdGljIGJvb2wgY29udGFpbmVy
U2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcik7CisgICAgc3Rh
dGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
a0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBj
b25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdp
ZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJl
ZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1
dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCi0gICAgc3RhdGljIFJlbmRl
ck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNv
bnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGlu
KTsKKyAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2Vu
ZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
KiBzdGF5V2l0aGluKTsKIAotICAgIC8vIEZpbmRzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9y
IG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVzY2VuZGFudAotICAgIC8vIHRleHQgbm9kZSAo
ZXhjbHVkaW5nIHRob3NlIGJlbG9uZ2luZyB0byBvdGhlciBhdXRvc2l6aW5nIGNsdXN0ZXJzKS4K
ICAgICBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5n
QWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rlcik7CiAKLSAgICAvLyBEZXBlbmRpbmcg
b24gdGhlIHRyYXZlcnNhbCBkaXJlY3Rpb24gc3BlY2lmaWVkLCBmaW5kcyB0aGUgZmlyc3Qgb3Ig
dGhlIGxhc3QgbGVhZiB0ZXh0IG5vZGUgY2hpbGQgdGhhdCBkb2Vzbid0Ci0gICAgLy8gYmVsb25n
IHRvIGFueSBjbHVzdGVyLgotICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIGZpbmRGaXJz
dFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCosIHNpemVfdCYgZGVwdGgs
IFRyYXZlcnNhbERpcmVjdGlvbik7CisgICAgLy8gUmV0dXJucyB0aGUgZmlyc3QgdGV4dCBsZWFm
IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIGl0cyBkZXB0aCBzdGFydGluZyBmcm9tIHRoZSBn
aXZlbiBwYXJlbnQuCisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCogZmluZEZpcnN0VGV4
dExlYWZOb3RJbkNsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQsIHNpemVfdCYgZGVw
dGgsIFRyYXZlcnNhbERpcmVjdGlvbik7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggN2Y0YmMwNjMyZTk1MGI4MDljYWE3NTM2OGYyOGUyZmM3ODI5OWMxNS4uZDQwZDBl
YmQ3MGViNWNmMWE5Yjg2N2I4NTkzMmE4YWYxNDMwMDJjNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3Np
bmcgY2x1c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZpZWQgZXhp
c3RpbmcgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IGF1dG9zaXppbmcgYXBwcm9hY2ggdG8gaGFu
ZGxpbmcgb2YgdGhlIGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9kZXMgb2YgdGhlIGVuY2xvc2luZyBh
dXRvc2l6aW5nIGNsdXN0ZXIuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9jbHVz
dGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1
dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sOgorICAgICAgICAqIGZhc3QvdGV4
dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3Rl
eHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9z
aXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWw6CisgICAg
ICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xs
Lmh0bWw6CisKIDIwMTItMTItMTcgIEp1c3NpIEt1a2tvbmVuICA8anVzc2kua3Vra29uZW5AaW50
ZWwuY29tPgogICAgICAgICBbV0syXSBFbmFibGUgdGVzdHMgdGhhdCB1c2UgYm9vbGVhbiBvdmVy
cmlkZVByZWZlcmVuY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNTAwOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy1leHBlY3RlZC5odG1sCmlu
ZGV4IDZjZmYwNmU0NDhiMmY3NTgzYmRhMjAzNDNlZWJkZTIyNWM2NDY1NzAuLmQ0ZjhlMzU1ZWQ4
ZjcwODQwOTljZDZiZGUwNzM0MjQ5MjQyZmUzM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFy
cm93LWV4cGVjdGVkLmh0bWwKQEAgLTE3LDEzICsxNywxMyBAQCBib2R5IHsgd2lkdGg6IDgwMHB4
OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQogICAgICAgICBMb3JlbSBpcHN1bSBk
b2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNt
b2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAg
ICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQtc2l6ZTogMS4y
NXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIGp1c3QgMjBw
eCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIGRlc3BpdGUgaXRzIHdp
ZHRoOjgwMHB4IGl0IGlzIHBhcnQgb2YgdGhlIDQwMHB4IHdpZGUgcm9vdCBjbHVzdGVyLjxicj4K
KyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNjAwcHg7IGZvbnQtc2l6ZTogMS44NzVyZW0iPgorICAg
ICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAzMHB4IGNvbXB1dGVkIGZvbnQt
c2l6ZSAoMTYgKiA2MDAvMzIwKSwgc2luY2UgaXRzIHdpZHRoOjYwMHB4IG1ha2VzIGl0IHdpZGVy
IHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVy
LCBoZW5jZSBpdCB3aWxsIGl0c2VsZiBiZWNvbWUgYSBjbHVzdGVyLjxicj4KICAgICAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgogICAgIDwvZGl2PgogCiAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVt
Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBzaW1pbGFybHkgYmUgYXV0b3NpemVkIHRvIDIw
cHguPGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNv
bXB1dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAgLyAzMjApLCBzaW5jZSBpdCdzIG5vdCBhbiBhdXRv
c2l6aW5nIGNsdXN0ZXIgaXRzZWxmIGFuZCBpdHMgcGFyZW50IGVsZW1lbnQgaXMgdGhlIGVuY2xv
c2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIgd2hpY2ggaXMgNDAwcHggd2lkZS48YnI+CiAgICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sCmlu
ZGV4IGIyZWYwMTA3YzllYzY2YzcyM2FlOTZmYjQ0Njk2YmYzMTYxNDQ3Y2MuLjg1YmNhMzk1ZmZk
NDQ1ZTY4ZWEwZDQ0ODFiZTA2MTc5OTdjY2YxNzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwK
QEAgLTI2LDEzICsyNiwxMyBAQCBpZiAod2luZG93LmludGVybmFscykgewogICAgICAgICBMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAg
ICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0IDIwcHggY29tcHV0ZWQg
Zm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0cyB3aWR0aDo4MDBweCBp
dCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48YnI+CisgICAgPGRpdiBz
dHlsZT0id2lkdGg6IDYwMHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6
ZWQgdG8gMzBweCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGl0cyB3
aWR0aDo2MDBweCBtYWtlcyBpdCB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9y
IG9mIGl0cyBlbmNsb3NpbmcgY2x1c3RlciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVjb21lIGEg
Y2x1c3Rlci48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0
ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1
dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAgIDxkaXY+
Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxhcmx5IGJlIGF1dG9zaXplZCB0byAyMHB4
Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21w
dXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwgc2luY2UgaXQncyBub3QgYW4gYXV0b3Np
emluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVudCBlbGVtZW50IGlzIHRoZSBlbmNsb3Np
bmcgYXV0b3NpemluZyBjbHVzdGVyIHdoaWNoIGlzIDQwMHB4IHdpZGUuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbAppbmRleCBhOTBh
MDEzYWYzZWQ0ZWUwNGUyNmFjNjA3MjA2ZjkyZGFjYmI1YTg4Li5jYWQzMWM1YjY0OGIzMDA3OTZl
OTc2NzcyNTg1ZDExYmQwYjk3NjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQt
YXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCkBAIC0xMiwxMSArMTIs
MTAgQEAgYm9keSB7IHdpZHRoOiA4MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47
IH0KIDxib2R5PgogCiA8ZGl2IHN0eWxlPSJ3aWR0aDogMzIwcHg7IGZvbnQtc2l6ZTogMXJlbSI+
Ci0JVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUg
bG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYg
aXMgbmFycm93Ljxicj4KKyAgICBUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFz
IHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0
ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cuPGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNp
dCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1w
b3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLQk8ZGl2IHN0
eWxlPSJ3aWR0aDogODAwcHgiPgotICAgIAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6
ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sg
d2hpY2ggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+
Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxs
IG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIuPGJyPgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBw
eDsgZm9udC1zaXplOiAyLjVyZW0iPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdz
IHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBj
bHVzdGVyIHNvIGl0IGJlY29tZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQg
ZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFs
aXF1YS4KICAgICA8L2Rpdj4KIDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1
dG9zaXppbmcvd2lkZS1jaGlsZC5odG1sCmluZGV4IDQ1NGVhNjFmM2FmNzlhZmY4N2I3ZDMzMGM1
NWI3OTE3NjNiNTIwN2UuLjA2ODc2ZWZmYzU1MDFjMTQ4ZDBhZjI3NGJkOGQ1MTk3MzMyMGYyOTkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0
bWwKQEAgLTI0LDggKzI0LDcgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICBUaGlzIHRl
eHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQsIGFzIHRoaXMgZGl2IGlzIHRoZSBsb3dlc3QgY29t
bW9uIGFuY2VzdG9yIG9mIHRoZSByb290IGNsdXN0ZXIsIGFuZCB0aGlzIGRpdiBpcyBuYXJyb3cu
PGJyPgogICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNp
Y2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQg
ZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgotICAg
IAlUaGlzIHRleHQgc2hvdWxkIG5vdCBiZSBhdXRvc2l6ZWQgc2luY2UgaXQgZG9lc24ndCBhZmZl
Y3QgdGhlIHdpZHRoIG9mIHRoZSBwYXJlbnQgYmxvY2sgd2hpY2ggaXMgdXNlZCB0byBjYWxjdWxh
dGUgdGhlIGF1dG9zaXppbmcgbXVsdGlwbGllci48YnI+Ci0gICAgCUZJWE1FOiBJZGVhbGx5IHRo
aXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkLiBXaWxsIG5lZWQgdG8gYmUgZml4ZWQgbGF0ZXIu
PGJyPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgaXRzIGVuY2xvc2luZyBjbHVzdGVyIHNvIGl0IGJlY29t
ZXMgYSBjbHVzdGVyIGl0c2VsZi48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBh
bWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3Ig
aW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KICAgICA8L2Rpdj4K
IDwvZGl2PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lk
ZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0
ZWQuaHRtbAppbmRleCA0YjdhNzc3ZGMzOTE1ZjVjYTYyMTc5ZTg4NWUwNTAwNzE4YmU3MmJjLi4z
MDMwMzFlMzUxOGE0Mzk2YmYwNzI2MzlmNGUzM2MzNDIyMDM1OWU2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwtZXhwZWN0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93
aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTcgKzEy
LDE3IEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVu
OyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRpdiBzdHlsZT0i
b3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHg7IGZvbnQt
c2l6ZTogMS4yNXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRv
IDIwcHggY29tcHV0ZWQgZm9udCBzaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSB0aGlzIGlzIHBh
cnQgb2YgdGhlIHJvb3QgY2x1c3Rlciwgd2hvc2UgdGV4dCBkZXNjZW5kYW50cyBhcmUgYWxsIGNv
bnRhaW5lZCB3aXRoaW4gdGhlIDQwMHB4IHdpZGUgZ3JhbmRwYXJlbnQgb2YgdGhpcyBkaXYuPGJy
PgotICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuCisgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xs
Ij4KKyAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDIuNXJlbSI+
CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBzaW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxv
d2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNv
bWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAgICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRl
bXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAg
ICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+CiAKLSAgPGRpdiBzdHlsZT0iZm9udC1zaXpl
OiAxLjI1cmVtIj4KKyAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEuMjVyZW0iPgogICAgICAg
ICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6
ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0
LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5j
aWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAg
PC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwuaHRtbAppbmRleCBmNzRhN2EyMTQwOGM4YWVmNDVmYmFlZDg2NWY1OWY3ZWE5M2I4MWUwLi43
OTc2M2RlZmZhZDU3ODcxNmYxMGE1Yjg0ZjIwOTU5ZThjZjkxMWRhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5hcnJvdy1vdmVyZmxvdy1zY3Jv
bGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWluLW5h
cnJvdy1vdmVyZmxvdy1zY3JvbGwuaHRtbApAQCAtMjEsMTcgKzIxLDE3IEBAIGlmICh3aW5kb3cu
aW50ZXJuYWxzKSB7CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDQwMHB4Ij4KLSAgPGRp
diBzdHlsZT0ib3ZlcmZsb3cteDogc2Nyb2xsIj4KLSAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAw
cHgiPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1
dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBwYXJ0IG9mIHRoZSBy
b290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBjb250YWluZWQgd2l0
aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxicj4KLSAgICAgICAg
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+CisgICAgICAg
IDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweCI+CisgICAgICAgICAgICBUaGlzIHRleHQgc2hvdWxk
IGJlIGF1dG9zaXplZCB0byA0MHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA4MDAvMzIwKSBz
aW5jZSBpdCdzIHdpZGVyIHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgIGl0cyBl
bmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgorICAg
ICAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2lj
aW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBk
b2xvcmUgbWFnbmEgYWxpcXVhLgorICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KLSAgPC9kaXY+
CiAKLSAgPGRpdj4KKyAgICA8ZGl2PgogICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9z
aXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKS48YnI+CiAgICAg
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KLSAgPC9kaXY+CisgICAgPC9kaXY+CiA8L2Rpdj4KIAogPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180020</attachid>
            <date>2012-12-18 14:02:08 -0800</date>
            <delta_ts>2012-12-18 15:13:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121218215924.patch</filename>
            <type>text/plain</type>
            <size>28956</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2YTEwMDBjMWNkYmVh
ZmJkY2M5Yzg4ZWQyNGRjNmE4MjdiMzI3OS4uYTcyMTYxYzRkMTUzOGNjMTI4YmViNGJiMTFkNzIw
ZTgyM2ViODA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorCisg
ICAgICAgIFRoZSBjaGFuZ2UgZml4ZXMgc2V2ZXJhbCBjYXNlcyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUpOgorCisgICAgICAgICAg
ICBDYWxscyBwcm9jZXNzQ2x1c3RlciB3aXRoIGEgbmV3IG51bWJlciBvZiBhcmd1bWVudHMuCisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKToKKworICAg
ICAgICAgICAgUGFzc2VzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRleHQgbm9kZXMgaW50byBwcm9j
ZXNzQ29udGFpbmVyLiBBc3NlcnRpb24gcmVtb3ZlZCBzaW5jZSBpdCBjYW4gbm8gbG9uZ2VyIGJl
CisgICAgICAgICAgICBjaGVja2VkIHdpdGhvdXQgcGFzc2luZyBhbiBhZGRpdGlvbmFsIHBhcmFt
ZXRlciAodGhlIHBhcmVudCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0KSB0byB0aGUgZnVuY3Rp
b24KKyAgICAgICAgICAgIGZvciB0aGUgc2FrZSBvZiB0aGlzIGFzc2VydGlvbiBvbmx5LgorCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKToKKworICAg
ICAgICAgICAgfHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHR8IHBhcmFtZXRlciBwYXNzZWQg
aW50byBpc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyLgorCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjppc0NvbnRhaW5lckF1dG9zaXppbmdDbHVzdGVyKToKKworICAgICAgICAg
ICAgQ29uc2lkZXJzIGEgYmxvY2sgYSBjbHVzdGVyIGlmIGl0IGlzIHdpZGVyIHRoYW4gaXRzIHBh
cmVudCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBlbmNsb3NpbmcKKyAgICAgICAg
ICAgIGNsdXN0ZXIgKHJlbmFtZWQgZnJvbSBpc0F1dG9zaXppbmdDbHVzdGVyKS4KKworICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6aXNJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVzdGVy
KToKKworICAgICAgICAgICAgQ2hlY2tzIGlmIHRoZSByZW5kZXJlciBpcyBhbiBhdXRvc2luZyBj
b250YWluZXIgYW5kIGEgY2x1c3RlciAoYnV0IHdpdGhvdXQgdGhlIG5ldyBjaGVjayBmb3IgdGhl
IHJlbmRlcmVyCisgICAgICAgICAgICB0byBiZSB3aWRlciB0aGFuIHRoZSB0ZXh0IG9mIGl0cyBw
YXJlbnQgY2x1c3RlcikuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmNsdXN0
ZXJTaG91bGRCZUF1dG9zaXplZCk6CisKKyAgICAgICAgICAgIFBhc3NlcyBuZXcgcGFyYW1ldGVy
IHRvIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0
QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aCk6CisKKyAgICAgICAgICAgIFVz
ZXMgYmxvY2tDb250YWluaW5nQWxsVGV4dCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBpc0NvbnRhaW5l
ckF1dG9zaXppbmdDbHVzdGVyLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpm
aW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOgorCisgICAgICAgICAgICBBc3NlcnRp
b24gcmVtb3ZlZCBzaW5jZSBpdCBjYW4gbm8gbG9uZ2VyIGJlIGNoZWNrZWQgd2l0aG91dCBwYXNz
aW5nIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyICh0aGUKKyAgICAgICAgICAgIHBhcmVudCBibG9j
ayBjb250YWluaW5nIGFsbCB0ZXh0KSB0byB0aGUgZnVuY3Rpb24gZm9yIHRoZSBzYWtlIG9mIHRo
aXMgYXNzZXJ0aW9uIG9ubHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmZp
bmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKToKKyAgICAgICAgICAgIFVzZXMgc2hvcnRlciBp
c0luZGVwZW5kZW50QXV0b3NpemluZ0NsdXN0ZXIgY2FsbC4KKwogMjAxMi0xMi0xOCAgRW1pbCBB
IEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSGF2ZSBrRml4ZWRQb2ludERl
bm9taW5hdG9yIGJlIGNvbnN0YW50IGFjcm9zcyBwb3J0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuY3BwCmluZGV4IDNhY2MyMjJhYzBmMmEyZWNhMmY3OTdhNjFhNjFh
OGJkZjc2MmE5NjQuLmVjMGJhMWU0YjUwOTRjYjYyZmE5MjdmYWUyODg5N2IxMTM3NmQ4ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpA
QCAtODUsNyArODYsNyBAQCBib29sIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKFJlbmRl
ck9iamVjdCogbGF5b3V0Um9vdCkKICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250
YWluaW5nQmxvY2soKTsKIAogICAgIFJlbmRlckJsb2NrKiBjbHVzdGVyID0gY29udGFpbmVyOwot
ICAgIHdoaWxlIChjbHVzdGVyICYmICghaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNsdXN0ZXIpIHx8
ICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKSkKKyAgICB3aGlsZSAoY2x1c3RlciAmJiAh
aXNJbmRlcGVuZGVudEF1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKQogICAgICAgICBjbHVzdGVy
ID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBwcm9jZXNzQ2x1c3RlcihjbHVz
dGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8pOwpAQCAtOTQsMzYgKzk1LDM0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlv
dXRSb290KQogCiB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2Nr
KiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVS
b290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCiB7Ci0gICAg
QVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwotCiAgICAgLy8gTWFueSBwYWdl
cyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28gZXNwZWNpYWxseSBmb3IgdGhl
CiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRha2luZyB0aGUgd2lkdGggb2Yg
fGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0
aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUgb2YKICAgICAvLyB0aGUgY2x1
c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRoYXQgY29udGFpbnMgYWxsIHRo
ZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0ZWFkLgotICAgIGNvbnN0IFJl
bmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCBjb21tb25BbmNlc3RvcldpZHRoID0gbG93
ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBjb25zdCBSZW5k
ZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmREZWVwZXN0QmxvY2tDb250YWlu
aW5nQWxsVGV4dChjbHVzdGVyKTsKKyAgICBmbG9hdCB0ZXh0V2lkdGggPSBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAKICAgICBmbG9hdCBtdWx0aXBsaWVy
ID0gMTsKLSAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGxvd2VzdENvbW1vbkFuY2Vz
dG9yLCBjb21tb25BbmNlc3RvcldpZHRoKSkgeworICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRv
c2l6ZWQoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRoKSkgewogICAgICAgICBpbnQg
bG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby53aW5kb3dTaXplLmhl
aWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRoID0gY2x1c3Rlci0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS53aWR0aCgpIDog
d2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAgICAgICAvLyBJZ25vcmUgYm94
IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0byBhdm9pZCBleHRyZW1lIG11
bHRpcGxpZXJzLgotICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3RlcldpZHRoID0gc3RkOjptaW48
ZmxvYXQ+KGNvbW1vbkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxMYXlvdXRXaWR0aCk7CisgICAgICAg
IGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1pbjxmbG9hdD4odGV4dFdpZHRoLCBs
b2dpY2FsTGF5b3V0V2lkdGgpOwogCiAgICAgICAgIG11bHRpcGxpZXIgPSBsb2dpY2FsQ2x1c3Rl
cldpZHRoIC8gbG9naWNhbFdpbmRvd1dpZHRoOwogICAgICAgICBtdWx0aXBsaWVyICo9IG1fZG9j
dW1lbnQtPnNldHRpbmdzKCktPnRleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yKCk7CiAgICAg
ICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0aXBsaWVyKTsKICAgICB9CiAKLSAg
ICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgc3VidHJlZVJvb3QsIHdp
bmRvd0luZm8pOworICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlwbGllciwgY29udGFpbmVyLCBi
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2luZG93SW5mbyk7CiB9CiAKLXZv
aWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5k
ZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0
QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnBy
b2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIFJlbmRlck9iamVjdCog
c3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbykK
IHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNvbnRhaW5lcikpOwogCi0gICAg
ZmxvYXQgbG9jYWxNdWx0aXBsaWVyID0gY29udGFpbmVyU2hvdWxkYmVBdXRvc2l6ZWQoY29udGFp
bmVyKSA/IG11bHRpcGxpZXI6IDE7CisgICAgZmxvYXQgbG9jYWxNdWx0aXBsaWVyID0gY29udGFp
bmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29udGFpbmVyKSA/IG11bHRpcGxpZXI6IDE7CiAKICAgICBS
ZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFu
dHNPZkNvbnRhaW5lcnMoc3VidHJlZVJvb3QsIHN1YnRyZWVSb290KTsKICAgICB3aGlsZSAoZGVz
Y2VuZGFudCkgewpAQCAtMTM1LDEwICsxMzQsMTAgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9j
ZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFIK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1hcmtlciBzaXplIHByb3BvcnRp
b25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2Vu
ZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1Jl
bmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKGlzQXV0b3NpemluZ0NsdXN0
ZXIoZGVzY2VuZGFudEJsb2NrKSkKKyAgICAgICAgICAgIGlmIChpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCiAgICAg
ICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNjZW5kYW50Qmxv
Y2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ss
IGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0Nv
bnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgZGVz
Y2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhk
ZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMTk2LDE0ICsxOTUsMTQgQEAgYm9v
bCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK2Jvb2wgVGV4
dEF1dG9zaXplcjo6aXNDb250YWluZXJBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6
aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEg
dW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2luZwogICAg
IC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29rIGludGVybmFsbHkgY29uc2lz
dGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMgKGluY2x1ZGluZyBvdGhlciBhdXRv
c2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGFu
dHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKICAg
ICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1YnRyZWVzIHdoaWNoIGFyZSB0
aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRlbnQg
Y29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAorICAgIC8vIGFuZCBzb21l
IG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0
IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBoZWlnaHQgaXMgY29uc3RyYWluZWQp
LgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkIHJlcXVpcmVz
IGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBtaW5pbXVtIGFtb3VudCBvZiB0ZXh0
LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXplZC4KQEAgLTIxMiwxMSArMjExLDE0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyAoaHR0cDov
L3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2luY2UKICAgICAvLyBmbG93IHJvb3Rz
IGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBiZWhhdmUgc29tZXdoYXQKICAgICAv
LyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChmb3IgZXhhbXBsZSB0aGV5IGRvbid0
IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIGZsb3cgZmxvdyBy
b290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCisgICAgLy8gVGhlIGRl
ZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50bHkgaW5jbHVkZXMgbW9zdCBv
ZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0cyBjaGlsZHJlbiBjYW4gaGF2ZSBz
aWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8vIGZyb20gdGhlIGJveCdzIHBhcmVu
dCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQKICAgICAv
LyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2UgdGhlIG5hcnJvd2VyIGJsb2Nr
cyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgbmVj
ZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJlIHdp
ZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0fAorICAgIC8vIG9mIHRoZWlyIGVu
Y2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLCBzaW5jZSB0aGV5IG5lZWQgc3Bl
Y2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lkdGguCiAgICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKQpAQCAtMjI3LDEyICsyMjksMTkgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAg
fHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQogICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPmlzRGlzcGxh
eVJlcGxhY2VkVHlwZSgpOworICAgICAgICB8fCByZW5kZXJlci0+c3R5bGUoKS0+aXNEaXNwbGF5
UmVwbGFjZWRUeXBlKCkKKyAgICAgICAgfHwgKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQK
KyAgICAgICAgICAgICYmIHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCkgPiBwYXJlbnRC
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCkpOwogICAgIC8vIEZJ
WE1FOiBUYWJsZXMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBj
b2x1bW5zIGJ5CiAgICAgLy8gdGhlIHNhbWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJl
bnQgd2lkdGhzOyBzbyBkbyBoYXNDb2x1bW5zKCkKICAgICAvLyBjb250YWluZXJzLCBhbmQgcHJv
YmFibHkgZmxleGJveGVzLi4uCiB9CiAKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNJbmRlcGVuZGVu
dEF1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIHJl
dHVybiBpc0F1dG9zaXppbmdDb250YWluZXIob2JqZWN0KSAmJiBpc0NvbnRhaW5lckF1dG9zaXpp
bmdDbHVzdGVyKHRvUmVuZGVyQmxvY2sob2JqZWN0KSwgMCk7Cit9CisKIHN0YXRpYyBib29sIGNv
bnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7
CiAgICAgLy8gRklYTUU6IFByb3BhZ2F0ZSBjb25zdHJhaW5lZG5lc3MgZG93biB0aGUgdHJlZSwg
dG8gYXZvaWQgaW5lZmZpY2llbnRseSB3YWxraW5nIGJhY2sgdXAgZnJvbSBlYWNoIGJveC4KQEAg
LTI1Myw3ICsyNjIsNyBAQCBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5lZChj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRiZUF1dG9zaXplZChjb25zdCBSZW5kZXJC
bG9jayogY29udGFpbmVyKQorYm9vbCBUZXh0QXV0b3NpemVyOjpjb250YWluZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogewogICAgIC8vIERvbid0IGF1
dG9zaXplIGJsb2NrLWxldmVsIHRleHQgdGhhdCBjYW4ndCB3cmFwIChhcyBpdCdzIGxpa2VseSB0
bwogICAgIC8vIGV4cGFuZCBzaWRld2F5cyBhbmQgYnJlYWsgdGhlIHBhZ2UncyBsYXlvdXQpLgpA
QCAtMjYzLDcgKzI3Miw3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y29udGFpbmVyU2hvdWxkYmVB
dXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKICAgICByZXR1cm4gIWNvbnRl
bnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnRhaW5lcik7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXpl
cjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21t
b25BbmNlc3RvciwgZmxvYXQgY29tbW9uQW5jZXN0b3JXaWR0aCkKK2Jvb2wgVGV4dEF1dG9zaXpl
cjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRh
aW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKQogewogICAgIC8vIERvbid0IGF1dG9zaXpl
IGNsdXN0ZXJzIHRoYXQgY29udGFpbiBsZXNzIHRoYW4gNCBsaW5lcyBvZiB0ZXh0IChpbgogICAg
IC8vIHByYWN0aWNlIGxlc3MgbGluZXMgYXJlIHJlcXVpcmVkLCBzaW5jZSBtZWFzdXJlRGVzY2Vu
ZGFudFRleHRXaWR0aApAQCAtMjc2LDE3ICsyODUsMTcgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGxvd2VzdENvbW1vbkFu
Y2UKICAgICAvLyBpbiBhbmQgcGFuIGZyb20gc2lkZSB0byBzaWRlIHRvIHJlYWQgZWFjaCBsaW5l
LCBzaW5jZSBpZiB0aGVyZSBhcmUgdmVyeQogICAgIC8vIGZldyBsaW5lcyBvZiB0ZXh0IHlvdSds
bCBvbmx5IG5lZWQgdG8gcGFuIGFjcm9zcyBvbmNlIG9yIHR3aWNlLgogICAgIGNvbnN0IGZsb2F0
IG1pbkxpbmVzT2ZUZXh0ID0gNDsKLSAgICBmbG9hdCBtaW5UZXh0V2lkdGggPSBjb21tb25BbmNl
c3RvcldpZHRoICogbWluTGluZXNPZlRleHQ7CisgICAgZmxvYXQgbWluVGV4dFdpZHRoID0gYmxv
Y2tXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OwogICAgIGZsb2F0IHRleHRXaWR0aCA9IDA7Ci0gICAg
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgobG93ZXN0Q29tbW9uQW5jZXN0b3IsIG1pblRleHRX
aWR0aCwgdGV4dFdpZHRoKTsKKyAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChibG9ja0Nv
bnRhaW5pbmdBbGxUZXh0LCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRl
eHRXaWR0aCk7CiAgICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUZXh0QXV0b3NpemVyOjpt
ZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBm
bG9hdCBtaW5UZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCit2b2lkIFRleHRBdXRvc2l6ZXI6
Om1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBtaW5UZXh0
V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpCiB7Ci0gICAgYm9vbCBza2lwTG9jYWxUZXh0ID0gIWNv
bnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnRhaW5lcik7CisgICAgYm9vbCBza2lwTG9jYWxU
ZXh0ID0gIWNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcik7CiAKICAgICBSZW5k
ZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNP
ZkNvbnRhaW5lcnMoY29udGFpbmVyLCBjb250YWluZXIpOwogICAgIHdoaWxlIChkZXNjZW5kYW50
KSB7CkBAIC0yOTQsOCArMzAzLDggQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2Vu
ZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBmbG8KICAgICAgICAg
ICAgIHRleHRXaWR0aCArPSB0b1JlbmRlclRleHQoZGVzY2VuZGFudCktPnJlbmRlcmVkVGV4dExl
bmd0aCgpICogZGVzY2VuZGFudC0+c3R5bGUoKS0+c3BlY2lmaWVkRm9udFNpemUoKTsKICAgICAg
ICAgfSBlbHNlIGlmIChpc0F1dG9zaXppbmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAg
ICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2Nl
bmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRC
bG9jaykpCi0gICAgICAgICAgICAgICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2Vu
ZGFudEJsb2NrLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CisgICAgICAgICAgICBpZiAoIWlz
Q29udGFpbmVyQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0KSkKKyAgICAgICAgICAgICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChk
ZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIG1pblRleHRXaWR0aCwgdGV4
dFdpZHRoKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dFdpZHRoID49IG1pblRleHRXaWR0
aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyMSw4ICszMzAsNiBAQCBSZW5kZXJPYmplY3Qq
IFRleHRBdXRvc2l6ZXI6Om5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFp
bmVycyhjb25zdAogCiBjb25zdCBSZW5kZXJCbG9jayogVGV4dEF1dG9zaXplcjo6ZmluZERlZXBl
c3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNvbnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKQogewot
ICAgIEFTU0VSVChpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIpKTsKLQogICAgIHNpemVfdCBm
aXJzdERlcHRoID0gMDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGZpcnN0VGV4dExlYWYgPSBm
aW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjbHVzdGVyLCBmaXJzdERlcHRoLCBGaXJzdFRv
TGFzdCk7CiAgICAgaWYgKCFmaXJzdFRleHRMZWFmKQpAQCAtMzU1LDcgKzM2Miw3IEBAIGNvbnN0
IFJlbmRlckJsb2NrKiBUZXh0QXV0b3NpemVyOjpmaW5kRGVlcGVzdEJsb2NrQ29udGFpbmluZ0Fs
bFRleHQoY29uc3QgUmVuZGVyCiAKICAgICAvLyBjb250YWluaW5nQmxvY2soKSBzaG91bGQgbmV2
ZXIgbGVhdmUgdGhlIGNsdXN0ZXIsIHNpbmNlIGl0IG9ubHkgc2tpcHMgYW5jZXN0b3JzIHdoZW4g
ZmluZGluZyB0aGUKICAgICAvLyBjb250YWluZXIgb2YgcG9zaXRpb246YWJzb2x1dGUvZml4ZWQg
YmxvY2tzLCBhbmQgdGhvc2UgY2Fubm90IGV4aXN0IGJldHdlZW4gYSBjbHVzdGVyIGFuZCBpdHMg
dGV4dAotICAgIC8vIG5vZGVzIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYXMgaXNBdXRvc2l6aW5n
Q2x1c3RlciB3b3VsZCBoYXZlIG1hZGUgdGhlbSBpbnRvIHRoZWlyIG93biBpbmRlcGVuZGVudAor
ICAgIC8vIG5vZGVzIGxvd2VzdCBjb21tb24gYW5jZXN0b3IgYXMgaXNDb250YWluZXJBdXRvc2l6
aW5nQ2x1c3RlciB3b3VsZCBoYXZlIG1hZGUgdGhlbSBpbnRvIHRoZWlyIG93biBpbmRlcGVuZGVu
dAogICAgIC8vIGNsdXN0ZXIuCiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGZp
cnN0Tm9kZS0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+
aXNEZXNjZW5kYW50T2YoY2x1c3RlcikpOwpAQCAtMzcxLDcgKzM3OCw3IEBAIGNvbnN0IFJlbmRl
ck9iamVjdCogVGV4dEF1dG9zaXplcjo6ZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIoY29u
c3QgUmVuZGVyT2JqCiAgICAgKytkZXB0aDsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gKGRpcmVjdGlvbiA9PSBGaXJzdFRvTGFzdCkgPyBwYXJlbnQtPmZpcnN0Q2hpbGQoKSA6IHBh
cmVudC0+bGFzdENoaWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGlmICghaXNB
dXRvc2l6aW5nQ29udGFpbmVyKGNoaWxkKSB8fCAhaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRl
ckJsb2NrKGNoaWxkKSkpIHsKKyAgICAgICAgaWYgKCFpc0luZGVwZW5kZW50QXV0b3NpemluZ0Ns
dXN0ZXIoY2hpbGQpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QqIGxlYWYgPSBm
aW5kRmlyc3RUZXh0TGVhZk5vdEluQ2x1c3RlcihjaGlsZCwgZGVwdGgsIGRpcmVjdGlvbik7CiAg
ICAgICAgICAgICBpZiAobGVhZikKICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5oCmluZGV4IGRkM2UxOWRkZDNiZWE0ZDAw
MjY4ZmEyYWIwMmE5YTU2OTA0YTMxN2UuLjMxNTBmOGNjMjQ1ZDAwMjc4N2ExNmY3NzM4Y2EyYjdi
NWYxNGYyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3Np
emVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAt
MjgsMTcgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3Mg
UmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJUZXh0Owogc3Ry
dWN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbzsKIApAQCAtNjMsMjIgKzYwLDIxIEBAIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCopOwogCiAgICAgdm9pZCBw
cm9jZXNzQ2x1c3RlcihSZW5kZXJCbG9jayogY2x1c3RlciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
ciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJik7Ci0gICAgdm9pZCBwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRB
dXRvc2l6aW5nV2luZG93SW5mbyYpOworICAgIHZvaWQgcHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBt
dWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4
dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxpZXIoUmVuZGVy
T2JqZWN0KiwgZmxvYXQpOwogCiAgICAgc3RhdGljIGJvb2wgaXNBdXRvc2l6aW5nQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGlzQXV0b3NpemluZ0NsdXN0
ZXIoY29uc3QgUmVuZGVyQmxvY2sqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckF1dG9z
aXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgUmVuZGVyQmxvY2sqIHBhcmVu
dEJsb2NrQ29udGFpbmluZ0FsbFRleHQpOworICAgIHN0YXRpYyBib29sIGlzSW5kZXBlbmRlbnRB
dXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqKTsKIAotICAgIHN0YXRpYyBib29s
IGNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIp
OwotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5kZXJC
bG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgpOwot
ICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRlckJs
b2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7Cisg
ICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lcik7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVk
KGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dp
ZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBS
ZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5n
QWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIC8v
IFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2Nl
bmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNl
bHZlcykuCi0gICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rl
c2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKKyAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBuZXh0
SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKIAotICAgIC8vIEZpbmRzIHRo
ZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVzY2Vu
ZGFudAotICAgIC8vIHRleHQgbm9kZSAoZXhjbHVkaW5nIHRob3NlIGJlbG9uZ2luZyB0byBvdGhl
ciBhdXRvc2l6aW5nIGNsdXN0ZXJzKS4KICAgICBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGZp
bmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1c3Rl
cik7CiAKICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHRyYXZlcnNhbCBkaXJlY3Rpb24gc3BlY2lm
aWVkLCBmaW5kcyB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgbGVhZiB0ZXh0IG5vZGUgY2hpbGQgdGhh
dCBkb2Vzbid0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYzViYWU0NjM5NzhjNGM5ZDE3NTVjNzdjZmUyMTFkMGQ4Njk1MmIx
OS4uZDI0MjJhMTA1ZDZjZDA1MTczZmE1OTg1Yjg0ZjBiOTI3MTBmMTNiNyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIwIEBACisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBUZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVp
ciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVz
dGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAz
NjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9k
aWZpZWQgZXhpc3RpbmcgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IGF1dG9zaXppbmcgYXBwcm9h
Y2ggdG8gaGFuZGxpbmcgb2YgdGhlIGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIHdpZGVyIHRo
YW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9kZXMgb2YgdGhlIGVu
Y2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3Np
emluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICogZmFz
dC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sOgorICAgICAgICAq
IGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWw6CisgICAgICAgICogZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0
bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZs
b3ctc2Nyb2xsLmh0bWw6CisKIDIwMTItMTItMTggIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEhhdmUga0ZpeGVkUG9pbnREZW5vbWluYXRvciBiZSBjb25zdGFu
dCBhY3Jvc3MgcG9ydHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6
aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbApp
bmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWViZGUyMjVjNjQ2NTcwLi5kNGY4ZTM1NWVk
OGY3MDg0MDk5Y2Q2YmRlMDczNDI0OTI0MmZlMzNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5h
cnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNywxMyArMTcsMTMgQEAgYm9keSB7IHdpZHRoOiA4MDBw
eDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KICAgICAgICAgTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVz
bW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgog
ICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6IDEu
MjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0IDIw
cHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0cyB3
aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48YnI+
CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4OyBmb250LXNpemU6IDEuODc1cmVtIj4KKyAg
ICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBmb250
LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGl0cyB3aWR0aDo2MDBweCBtYWtlcyBpdCB3aWRl
ciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1c3Rl
ciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVjb21lIGEgY2x1c3Rlci48YnI+CiAgICAgICAgIExv
cmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBz
ZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25h
IGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMS4yNXJl
bSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxhcmx5IGJlIGF1dG9zaXplZCB0byAy
MHB4Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBj
b21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwgc2luY2UgaXQncyBub3QgYW4gYXV0
b3NpemluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVudCBlbGVtZW50IGlzIHRoZSBlbmNs
b3NpbmcgYXV0b3NpemluZyBjbHVzdGVyIHdoaWNoIGlzIDQwMHB4IHdpZGUuPGJyPgogICAgICAg
ICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxp
dCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBt
YWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbApp
bmRleCBiMmVmMDEwN2M5ZWM2NmM3MjNhZTk2ZmI0NDY5NmJmMzE2MTQ0N2NjLi44NWJjYTM5NWZm
ZDQ0NWU2OGVhMGQ0NDgxYmUwNjE3OTk3Y2NmMTc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1s
CkBAIC0yNiwxMyArMjYsMTMgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICAgICAgTG9y
ZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNl
ZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEg
YWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAg
ICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1dGVk
IGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAwcHgg
aXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxkaXYg
c3R5bGU9IndpZHRoOiA2MDBweCI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3Np
emVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBpdHMg
d2lkdGg6NjAwcHggbWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3Rv
ciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29tZSBh
IGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2Vj
dGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQg
dXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8ZGl2
PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBhdXRvc2l6ZWQgdG8gMjBw
eC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29t
cHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0J3Mgbm90IGFuIGF1dG9z
aXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVudCBpcyB0aGUgZW5jbG9z
aW5nIGF1dG9zaXppbmcgY2x1c3RlciB3aGljaCBpcyA0MDBweCB3aWRlLjxicj4KICAgICAgICAg
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKaW5kZXggYTkw
YTAxM2FmM2VkNGVlMDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4OC4uY2FkMzFjNWI2NDhiMzAwNzk2
ZTk3Njc3MjU4NWQxMWJkMGI5NzY3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTEgKzEy
LDEwIEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVu
OyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDMyMHB4OyBmb250LXNpemU6IDFyZW0i
PgotCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMgdGhl
IGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMgZGl2
IGlzIG5hcnJvdy48YnI+CisgICAgVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBh
cyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVz
dGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xvciBz
aXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVt
cG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCi0JPGRpdiBz
dHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3Np
emVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2Nr
IHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIuPGJy
PgotICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4gV2ls
bCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAw
cHg7IGZvbnQtc2l6ZTogMi41cmVtIj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQn
cyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3Npbmcg
Y2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3Jl
bSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBh
bGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1h
dXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAppbmRleCA0NTRlYTYxZjNhZjc5YWZmODdiN2QzMzBj
NTViNzkxNzYzYjUyMDdlLi4wNjg3NmVmZmM1NTAxYzE0OGQwYWYyNzRiZDhkNTE5NzMzMjBmMjk5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC5o
dG1sCkBAIC0yNCw4ICsyNCw3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgVGhpcyB0
ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNv
bW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93
Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAg
ICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZm
ZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3Vs
YXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxseSB0
aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVy
Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21w
dXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBs
b3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBiZWNv
bWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQg
YW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9y
IGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+
CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dp
ZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVj
dGVkLmh0bWwKaW5kZXggNGI3YTc3N2RjMzkxNWY1Y2E2MjE3OWU4ODVlMDUwMDcxOGJlNzJiYy4u
MzAzMDMxZTM1MThhNDM5NmJmMDcyNjM5ZjRlMzNjMzQyMjAzNTllNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcv
d2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKQEAgLTEyLDE3ICsx
MiwxNyBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRl
bjsgfQogPGJvZHk+CiAKIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+Ci0gIDxkaXYgc3R5bGU9
Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250
LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0
byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBpcyBw
YXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFsbCBj
b250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2Ljxi
cj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp
c2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBl
dCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9s
bCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVyZW0i
PgorICAgICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21w
dXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBs
b3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mICBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQgYmVj
b21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KKyAgICAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9y
IHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0
ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICAg
ICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gIDwvZGl2PgogCi0gIDxkaXYgc3R5bGU9ImZvbnQtc2l6
ZTogMS4yNXJlbSI+CisgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVtIj4KICAgICAg
ICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNp
emUgKDE2ICogNDAwLzMyMCkuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l
dCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGlu
Y2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCi0gIDwvZGl2PgorICAg
IDwvZGl2PgogPC9kaXY+CiAKIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLmh0bWwKaW5kZXggZjc0YTdhMjE0MDhjOGFlZjQ1ZmJhZWQ4NjVmNTlmN2VhOTNiODFlMC4u
Nzk3NjNkZWZmYWQ1Nzg3MTZmMTBhNWI4NGYyMDk1OWU4Y2Y5MTFkYSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Ny
b2xsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1u
YXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKQEAgLTIxLDE3ICsyMSwxNyBAQCBpZiAod2luZG93
LmludGVybmFscykgewogPGJvZHk+CiAKIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+Ci0gIDxk
aXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgw
MHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21w
dXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIHRoaXMgaXMgcGFydCBvZiB0aGUg
cm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRzIGFyZSBhbGwgY29udGFpbmVkIHdp
dGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVudCBvZiB0aGlzIGRpdi48YnI+Ci0gICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KKyAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgorICAgICAg
ICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgorICAgICAgICAgICAgVGhpcyB0ZXh0IHNob3Vs
ZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkg
c2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mICBpdHMg
ZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KKyAg
ICAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNp
Y2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQg
ZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gIDwvZGl2
PgogCi0gIDxkaXY+CisgICAgPGRpdj4KICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCkuPGJyPgogICAg
ICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcg
ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9y
ZSBtYWduYSBhbGlxdWEuCi0gIDwvZGl2PgorICAgIDwvZGl2PgogPC9kaXY+CiAKIDwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180042</attachid>
            <date>2012-12-18 15:13:47 -0800</date>
            <delta_ts>2012-12-18 20:34:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103627-20121218231103.patch</filename>
            <type>text/plain</type>
            <size>28788</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2YTEwMDBjMWNkYmVh
ZmJkY2M5Yzg4ZWQyNGRjNmE4MjdiMzI3OS4uNjk2NTgxMDUxOGE5N2NmYjdmYzVlNTY1MmZhYThi
NzhmMjVlYzAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTExLTI5ICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXpp
bmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxk
IGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBjbHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU29tZSBibG9ja3Mgb2YgdGV4dHMgbWlnaHQgYmUg
d2lkZXIgdGhhbiB0aGVpciBwYXJlbnQgY2x1c3RlcnMgYW5kIG5lZWQgdG8gYmUgYXV0b3NpemVk
IHNlcGFyYXRlbHkuCisKKyAgICAgICAgaXNBdXRvc2l6aW5nQ2x1c3RlcigpIG5vdyBjaGVja3Mg
Zm9yIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIGJlaW5nIGdyZWF0ZXIgdGhhbiB0aGUgd2lk
dGggb2YgdGhlIGxvd2VzdAorICAgICAgICBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9k
ZXMgb2YgdGhlIGVuY2xvc2luZyBjbHVzdGVyLiBUaGlzIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRl
eHQgaXMgcGFzc2VkIHRvIGFsbAorICAgICAgICB0cmVlIHRyYXZlcnNhbCBtZXRob2RzLgorICAg
ICAgICBBbiBvdmVybG9hZGVkIHZlcnNpb24gaXMgYWRkZWQgZm9yIGNhc2VzIHdoZW4gd2UgZG9u
J3QgaGF2ZSB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciB5ZXQuCisKKyAgICAgICAgVGhlIGNo
YW5nZSBmaXhlcyBzZXZlcmFsIGNhc2VzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzU3VidHJlZSk6CisKKyAgICAgICAgICAgIENhbGxzIHByb2Nl
c3NDbHVzdGVyIHdpdGggYSBuZXcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworICAgICAgICAoV2Vi
Q29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIpOgorCisgICAgICAgICAgICBQYXNz
ZXMgYmxvY2sgY29udGFpbmluZyBhbGwgdGV4dCBub2RlcyBpbnRvIHByb2Nlc3NDb250YWluZXIu
IEFzc2VydGlvbiByZW1vdmVkIHNpbmNlIGl0IGNhbiBubyBsb25nZXIgYmUKKyAgICAgICAgICAg
IGNoZWNrZWQgd2l0aG91dCBwYXNzaW5nIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyICh0aGUgcGFy
ZW50IGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRleHQpIHRvIHRoZSBmdW5jdGlvbgorICAgICAgICAg
ICAgZm9yIHRoZSBzYWtlIG9mIHRoaXMgYXNzZXJ0aW9uIG9ubHkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIpOgorCisgICAgICAgICAgICB8cGFy
ZW50QmxvY2tDb250YWluaW5nQWxsVGV4dHwgcGFyYW1ldGVyIHBhc3NlZCBpbnRvIGlzQXV0b3Np
emluZ0NsdXN0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OmlzQXV0b3Np
emluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25zdCBSZW5kZXJCbG9jayopKToKKwor
ICAgICAgICAgICAgVGhlIG92ZXJsb2FkZWQgbWV0aG9kIHRoYXQgaXMgdXNlZCB3aGVuIHRoZSBy
ZW5kZXIgYmxvY2sgY2hlY2tlZCBpcyBhbHJlYWR5IGtub3duIHRvIGJlIGFuIGF1dG9zaXppbmcK
KyAgICAgICAgICAgIGNvbnRhaW5lciBhbmQgdGhlcmUncyBmdWxsIGluZm9ybWF0aW9uIG5lY2Vz
c2FyeSB0byBkZXRlcm1pbmUgaWYgaXQncyBhIGNsdXN0ZXIgbGlrZSB0aGUgcGFyZW50IGJsb2Nr
CisgICAgICAgICAgICBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIGNs
dXN0ZXIuIAorICAgICAgICAgICAgQ29uc2lkZXJzIGEgYmxvY2sgYSBjbHVzdGVyIGlmIGl0IGlz
IHdpZGVyIHRoYW4gaXRzIHBhcmVudCBibG9jayBjb250YWluaW5nIGFsbCB0ZXh0IHdpdGhpbiBl
bmNsb3NpbmcKKyAgICAgICAgICAgIGNsdXN0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OlRleHRB
dXRvc2l6ZXI6OmlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyT2JqZWN0KikpOgorCisg
ICAgICAgICAgICBUaGUgb3ZlcmxvYWRlZCBtZXRob2QgdGhhdCBjaGVja3MgZm9yIHRoZSBnaXZl
biBvYmplY3QgdG8gYmUgYW4gYXV0b3NpemluZyBjb250YWluZXIgZmlyc3QgKGZvcgorICAgICAg
ICAgICAgY29udmVuaWVuY2Ugb2YgdGhlIGNhbGxlcikgYW5kIGRvZXNuJ3QgcmVxdWlyZSBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgcGFyZW50IGNsdXN0ZXIuIFVzZWQgd2hlbiBzdWNoCisgICAgICAg
ICAgICBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLCBmb3IgZXhhbXBsZSwgaW4gdGhlIHBy
b2Nlc3Mgb2YgcmV0cmlldmluZyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBwYXJlbnQKKyAgICAg
ICAgICAgIGNsdXN0ZXIgb3Igd2hlbiBsb29raW5nIGZvciB0aGUgcm9vdCBjbHVzdGVyIGluIHRo
ZSB0cmVlLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxk
QmVBdXRvc2l6ZWQpOgorCisgICAgICAgICAgICBQYXNzZXMgbmV3IHBhcmFtZXRlciB0byBtZWFz
dXJlRGVzY2VuZGFudFRleHRXaWR0aC4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgpOgorCisgICAgICAgICAgICBVc2VzIGJsb2Nr
Q29udGFpbmluZ0FsbFRleHQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gaXNBdXRvc2l6aW5nQ2x1c3Rl
ci4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6ZmluZERlZXBlc3RCbG9ja0Nv
bnRhaW5pbmdBbGxUZXh0KToKKworICAgICAgICAgICAgQXNzZXJ0aW9uIHJlbW92ZWQgc2luY2Ug
aXQgY2FuIG5vIGxvbmdlciBiZSBjaGVja2VkIHdpdGhvdXQgcGFzc2luZyBhbiBhZGRpdGlvbmFs
IHBhcmFtZXRlciAodGhlCisgICAgICAgICAgICBwYXJlbnQgYmxvY2sgY29udGFpbmluZyBhbGwg
dGV4dCkgdG8gdGhlIGZ1bmN0aW9uIGZvciB0aGUgc2FrZSBvZiB0aGlzIGFzc2VydGlvbiBvbmx5
LgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpmaW5kRmlyc3RUZXh0TGVhZk5v
dEluQ2x1c3Rlcik6CisgICAgICAgICAgICBVc2VzIHNob3J0ZXIgaXNBdXRvc2l6aW5nQ2x1c3Rl
ciBjYWxsLgorCiAyMDEyLTEyLTE4ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBIYXZlIGtGaXhlZFBvaW50RGVub21pbmF0b3IgYmUgY29uc3RhbnQgYWNyb3Nz
IHBvcnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXpl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKaW5kZXgg
M2FjYzIyMmFjMGYyYTJlY2EyZjc5N2E2MWE2MWE4YmRmNzYyYTk2NC4uNThlYTZlODA0ODdlYWVh
ZDhhOGM3OTFmZDU3ZmNiMmMxZmI0YjcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04NSw3ICs4Niw3IEBAIGJvb2wgVGV4dEF1
dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogICAgICAg
ICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpOwogCiAgICAgUmVuZGVy
QmxvY2sqIGNsdXN0ZXIgPSBjb250YWluZXI7Ci0gICAgd2hpbGUgKGNsdXN0ZXIgJiYgKCFpc0F1
dG9zaXppbmdDb250YWluZXIoY2x1c3RlcikgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3Rl
cikpKQorICAgIHdoaWxlIChjbHVzdGVyICYmICFpc0F1dG9zaXppbmdDbHVzdGVyKGNsdXN0ZXIp
KQogICAgICAgICBjbHVzdGVyID0gY2x1c3Rlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAKICAgICBw
cm9jZXNzQ2x1c3RlcihjbHVzdGVyLCBjb250YWluZXIsIGxheW91dFJvb3QsIHdpbmRvd0luZm8p
OwpAQCAtOTQsMzYgKzk1LDM0IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUo
UmVuZGVyT2JqZWN0KiBsYXlvdXRSb290KQogCiB2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3ND
bHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdp
bmRvd0luZm8pCiB7Ci0gICAgQVNTRVJUKGlzQXV0b3NpemluZ0NsdXN0ZXIoY2x1c3RlcikpOwot
CiAgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4gU28g
ZXNwZWNpYWxseSBmb3IgdGhlCiAgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0IHRh
a2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKICAgICAvLyB0aGUgbG93ZXN0IGNv
bW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5vZGUg
b2YKICAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2NrIHRo
YXQgY29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKICAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBpbnN0
ZWFkLgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlc3RvciA9IGZpbmRE
ZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKLSAgICBmbG9hdCBjb21tb25B
bmNlc3RvcldpZHRoID0gbG93ZXN0Q29tbW9uQW5jZXN0b3ItPmNvbnRlbnRMb2dpY2FsV2lkdGgo
KTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCA9IGZpbmRE
ZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjbHVzdGVyKTsKKyAgICBmbG9hdCB0ZXh0V2lk
dGggPSBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCk7CiAKICAg
ICBmbG9hdCBtdWx0aXBsaWVyID0gMTsKLSAgICBpZiAoY2x1c3RlclNob3VsZEJlQXV0b3NpemVk
KGxvd2VzdENvbW1vbkFuY2VzdG9yLCBjb21tb25BbmNlc3RvcldpZHRoKSkgeworICAgIGlmIChj
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgdGV4dFdpZHRo
KSkgewogICAgICAgICBpbnQgbG9naWNhbFdpbmRvd1dpZHRoID0gY2x1c3Rlci0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ud2luZG93U2l6ZS53aWR0aCgpIDogd2luZG93
SW5mby53aW5kb3dTaXplLmhlaWdodCgpOwogICAgICAgICBpbnQgbG9naWNhbExheW91dFdpZHRo
ID0gY2x1c3Rlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHdpbmRvd0luZm8ubWluTGF5
b3V0U2l6ZS53aWR0aCgpIDogd2luZG93SW5mby5taW5MYXlvdXRTaXplLmhlaWdodCgpOwogICAg
ICAgICAvLyBJZ25vcmUgYm94IHdpZHRoIGluIGV4Y2VzcyBvZiB0aGUgbGF5b3V0IHdpZHRoLCB0
byBhdm9pZCBleHRyZW1lIG11bHRpcGxpZXJzLgotICAgICAgICBmbG9hdCBsb2dpY2FsQ2x1c3Rl
cldpZHRoID0gc3RkOjptaW48ZmxvYXQ+KGNvbW1vbkFuY2VzdG9yV2lkdGgsIGxvZ2ljYWxMYXlv
dXRXaWR0aCk7CisgICAgICAgIGZsb2F0IGxvZ2ljYWxDbHVzdGVyV2lkdGggPSBzdGQ6Om1pbjxm
bG9hdD4odGV4dFdpZHRoLCBsb2dpY2FsTGF5b3V0V2lkdGgpOwogCiAgICAgICAgIG11bHRpcGxp
ZXIgPSBsb2dpY2FsQ2x1c3RlcldpZHRoIC8gbG9naWNhbFdpbmRvd1dpZHRoOwogICAgICAgICBt
dWx0aXBsaWVyICo9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCktPnRleHRBdXRvc2l6aW5nRm9udFNj
YWxlRmFjdG9yKCk7CiAgICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heCgxLjBmLCBtdWx0aXBs
aWVyKTsKICAgICB9CiAKLSAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5l
ciwgc3VidHJlZVJvb3QsIHdpbmRvd0luZm8pOworICAgIHByb2Nlc3NDb250YWluZXIobXVsdGlw
bGllciwgY29udGFpbmVyLCBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBzdWJ0cmVlUm9vdCwgd2lu
ZG93SW5mbyk7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9h
dCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lk
IFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciwgY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrQ29udGFpbmluZ0FsbFRl
eHQsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93
SW5mbyYgd2luZG93SW5mbykKIHsKICAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ29udGFpbmVyKGNv
bnRhaW5lcikpOwogCi0gICAgZmxvYXQgbG9jYWxNdWx0aXBsaWVyID0gY29udGFpbmVyU2hvdWxk
YmVBdXRvc2l6ZWQoY29udGFpbmVyKSA/IG11bHRpcGxpZXI6IDE7CisgICAgZmxvYXQgbG9jYWxN
dWx0aXBsaWVyID0gY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29udGFpbmVyKSA/IG11bHRp
cGxpZXI6IDE7CiAKICAgICBSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoc3VidHJlZVJvb3QsIHN1YnRyZWVSb290
KTsKICAgICB3aGlsZSAoZGVzY2VuZGFudCkgewpAQCAtMTM1LDEwICsxMzQsMTAgQEAgdm9pZCBU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIFIKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmNyZWFzZSBsaXN0IG1h
cmtlciBzaXplIHByb3BvcnRpb25hdGVseS4KICAgICAgICAgfSBlbHNlIGlmIChpc0F1dG9zaXpp
bmdDb250YWluZXIoZGVzY2VuZGFudCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNj
ZW5kYW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYg
KGlzQXV0b3NpemluZ0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrKSkKKyAgICAgICAgICAgIGlmIChp
c0F1dG9zaXppbmdDbHVzdGVyKGRlc2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4
dCkpCiAgICAgICAgICAgICAgICAgcHJvY2Vzc0NsdXN0ZXIoZGVzY2VuZGFudEJsb2NrLCBkZXNj
ZW5kYW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5k
YW50QmxvY2ssIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CisgICAgICAgICAgICAgICAg
cHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50QmxvY2ssIGJsb2NrQ29udGFp
bmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7CiAgICAgICAgIH0KICAg
ICAgICAgZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29u
dGFpbmVycyhkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CiAgICAgfQpAQCAtMTk2LDE0ICsxOTUs
MTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjppc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBUZXh0QXV0
b3NpemVyOjppc0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikK
K2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9j
ayogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBwYXJlbnRCbG9ja0NvbnRhaW5pbmdBbGxU
ZXh0KQogewogICAgIC8vICJBdXRvc2l6aW5nIGNsdXN0ZXJzIiBhcmUgc3BlY2lhbCBhdXRvc2l6
aW5nIGNvbnRhaW5lcnMgd2l0aGluIHdoaWNoIHdlCiAgICAgLy8gd2FudCB0byBlbmZvcmNlIGEg
dW5pZm9ybSB0ZXh0IHNpemUgbXVsdGlwbGllciwgaW4gdGhlIGhvcGVzIG9mIG1ha2luZwogICAg
IC8vIHRoZSBtYWpvciBzZWN0aW9ucyBvZiB0aGUgcGFnZSBsb29rIGludGVybmFsbHkgY29uc2lz
dGVudC4KLSAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGVudHMgKGluY2x1ZGluZyBvdGhlciBhdXRv
c2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKKyAgICAvLyBBbGwgdGhlaXIgZGVzY2VuZGFu
dHMgKGluY2x1ZGluZyBvdGhlciBhdXRvc2l6aW5nIGNvbnRhaW5lcnMpIG11c3Qgc2hhcmUKICAg
ICAvLyB0aGUgc2FtZSBtdWx0aXBsaWVyLCBleGNlcHQgZm9yIHN1YnRyZWVzIHdoaWNoIGFyZSB0
aGVtc2VsdmVzIGNsdXN0ZXJzLAotICAgIC8vIGFuZCBzb21lIG9mIHRoZWlyIGRlc2NlbmRlbnQg
Y29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0IGFsbAorICAgIC8vIGFuZCBzb21l
IG9mIHRoZWlyIGRlc2NlbmRhbnQgY29udGFpbmVycyBtaWdodCBub3QgYmUgYXV0b3NpemVkIGF0
IGFsbAogICAgIC8vIChmb3IgZXhhbXBsZSBpZiB0aGVpciBoZWlnaHQgaXMgY29uc3RyYWluZWQp
LgogICAgIC8vIEFkZGl0aW9uYWxseSwgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkIHJlcXVpcmVz
IGVhY2ggY2x1c3RlciB0byBjb250YWluIGEKICAgICAvLyBtaW5pbXVtIGFtb3VudCBvZiB0ZXh0
LCB3aXRob3V0IHdoaWNoIGl0IHdvbid0IGJlIGF1dG9zaXplZC4KQEAgLTIxMiwxMSArMjExLDE0
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJC
bG9jayogcmVuZGVyZXIpCiAgICAgLy8gYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyAoaHR0cDov
L3czLm9yZy9UUi9jc3MzLWJveC8jZmxvdy1yb290KSwgc2luY2UKICAgICAvLyBmbG93IHJvb3Rz
IGNvcnJlc3BvbmQgdG8gYm94IGNvbnRhaW5lcnMgdGhhdCBiZWhhdmUgc29tZXdoYXQKICAgICAv
LyBpbmRlcGVuZGVudGx5IGZyb20gdGhlaXIgcGFyZW50IChmb3IgZXhhbXBsZSB0aGV5IGRvbid0
IG92ZXJsYXAgZmxvYXRzKS4KLSAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIGZsb3cgZmxvdyBy
b290IGFsc28gY29udmVuaWVudGx5IGluY2x1ZGVzIG1vc3Qgb2YgdGhlCisgICAgLy8gVGhlIGRl
ZmluaXRpb24gb2YgYSBmbG93IHJvb3QgYWxzbyBjb252ZW5pZW50bHkgaW5jbHVkZXMgbW9zdCBv
ZiB0aGUKICAgICAvLyB3YXlzIHRoYXQgYSBib3ggYW5kIGl0cyBjaGlsZHJlbiBjYW4gaGF2ZSBz
aWduaWZpY2FudGx5IGRpZmZlcmVudCB3aWR0aAogICAgIC8vIGZyb20gdGhlIGJveCdzIHBhcmVu
dCAod2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQKICAgICAv
LyB3aWR0aCBibG9ja3Mgd2l0aGluIGEgY2x1c3Rlciwgc2luY2UgdGhlIG5hcnJvd2VyIGJsb2Nr
cyB3b3VsZCBlbmQgdXAKICAgICAvLyBsYXJnZXIgdGhhbiB3b3VsZCBvdGhlcndpc2UgYmUgbmVj
ZXNzYXJ5KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIGFueSBjb250YWluZXJzIHRoYXQgYXJlIHdp
ZGVyIHRoYW4gdGhlIHxibG9ja0NvbnRhaW5pbmdBbGxUZXh0fAorICAgIC8vIG9mIHRoZWlyIGVu
Y2xvc2luZyBjbHVzdGVyIGFsc28gYmVjb21lIGNsdXN0ZXJzLCBzaW5jZSB0aGV5IG5lZWQgc3Bl
Y2lhbAorICAgIC8vIHRyZWF0bWVudCBkdWUgdG8gdGhlaXIgd2lkdGguCiAgICAgQVNTRVJUKGlz
QXV0b3NpemluZ0NvbnRhaW5lcihyZW5kZXJlcikpOwogCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5p
c1JlbmRlclZpZXcoKQpAQCAtMjI3LDEyICsyMjksMTkgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpp
c0F1dG9zaXppbmdDbHVzdGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKICAgICAgICAg
fHwgcmVuZGVyZXItPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkKICAgICAgICAg
fHwgcmVuZGVyZXItPmhhc0NvbHVtbnMoKQogICAgICAgICB8fCByZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gcmVuZGVyZXItPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkKLSAgICAgICAgfHwgcmVuZGVyZXItPnN0eWxlKCktPmlzRGlzcGxh
eVJlcGxhY2VkVHlwZSgpOworICAgICAgICB8fCByZW5kZXJlci0+c3R5bGUoKS0+aXNEaXNwbGF5
UmVwbGFjZWRUeXBlKCkKKyAgICAgICAgfHwgKHBhcmVudEJsb2NrQ29udGFpbmluZ0FsbFRleHQK
KyAgICAgICAgICAgICYmIHJlbmRlcmVyLT5jb250ZW50TG9naWNhbFdpZHRoKCkgPiBwYXJlbnRC
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LT5jb250ZW50TG9naWNhbFdpZHRoKCkpOwogICAgIC8vIEZJ
WE1FOiBUYWJsZXMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHRvIG11bHRpcGx5IGFsbCB0aGVpciBj
b2x1bW5zIGJ5CiAgICAgLy8gdGhlIHNhbWUgYW1vdW50IGV2ZW4gaWYgdGhleSdyZSBkaWZmZXJl
bnQgd2lkdGhzOyBzbyBkbyBoYXNDb2x1bW5zKCkKICAgICAvLyBjb250YWluZXJzLCBhbmQgcHJv
YmFibHkgZmxleGJveGVzLi4uCiB9CiAKK2Jvb2wgVGV4dEF1dG9zaXplcjo6aXNBdXRvc2l6aW5n
Q2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gaXNBdXRv
c2l6aW5nQ29udGFpbmVyKG9iamVjdCkgJiYgaXNBdXRvc2l6aW5nQ2x1c3Rlcih0b1JlbmRlckJs
b2NrKG9iamVjdCksIDApOworfQorCiBzdGF0aWMgYm9vbCBjb250ZW50SGVpZ2h0SXNDb25zdHJh
aW5lZChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQogewogICAgIC8vIEZJWE1FOiBQcm9w
YWdhdGUgY29uc3RyYWluZWRuZXNzIGRvd24gdGhlIHRyZWUsIHRvIGF2b2lkIGluZWZmaWNpZW50
bHkgd2Fsa2luZyBiYWNrIHVwIGZyb20gZWFjaCBib3guCkBAIC0yNTMsNyArMjYyLDcgQEAgc3Rh
dGljIGJvb2wgY29udGVudEhlaWdodElzQ29uc3RyYWluZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lcikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVGV4dEF1dG9zaXplcjo6Y29u
dGFpbmVyU2hvdWxkYmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lcikKK2Jv
b2wgVGV4dEF1dG9zaXplcjo6Y29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lcikKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBibG9jay1sZXZlbCB0
ZXh0IHRoYXQgY2FuJ3Qgd3JhcCAoYXMgaXQncyBsaWtlbHkgdG8KICAgICAvLyBleHBhbmQgc2lk
ZXdheXMgYW5kIGJyZWFrIHRoZSBwYWdlJ3MgbGF5b3V0KS4KQEAgLTI2Myw3ICsyNzIsNyBAQCBi
b29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIpCiAgICAgcmV0dXJuICFjb250ZW50SGVpZ2h0SXNDb25zdHJhaW5l
ZChjb250YWluZXIpOwogfQogCi1ib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNv
bW1vbkFuY2VzdG9yV2lkdGgpCitib29sIFRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1
dG9zaXplZChjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQg
YmxvY2tXaWR0aCkKIHsKICAgICAvLyBEb24ndCBhdXRvc2l6ZSBjbHVzdGVycyB0aGF0IGNvbnRh
aW4gbGVzcyB0aGFuIDQgbGluZXMgb2YgdGV4dCAoaW4KICAgICAvLyBwcmFjdGljZSBsZXNzIGxp
bmVzIGFyZSByZXF1aXJlZCwgc2luY2UgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgKQEAgLTI3
NiwxNyArMjg1LDE3IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBsb3dlc3RDb21tb25BbmNlCiAgICAgLy8gaW4gYW5kIHBh
biBmcm9tIHNpZGUgdG8gc2lkZSB0byByZWFkIGVhY2ggbGluZSwgc2luY2UgaWYgdGhlcmUgYXJl
IHZlcnkKICAgICAvLyBmZXcgbGluZXMgb2YgdGV4dCB5b3UnbGwgb25seSBuZWVkIHRvIHBhbiBh
Y3Jvc3Mgb25jZSBvciB0d2ljZS4KICAgICBjb25zdCBmbG9hdCBtaW5MaW5lc09mVGV4dCA9IDQ7
Ci0gICAgZmxvYXQgbWluVGV4dFdpZHRoID0gY29tbW9uQW5jZXN0b3JXaWR0aCAqIG1pbkxpbmVz
T2ZUZXh0OworICAgIGZsb2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09m
VGV4dDsKICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4
dFdpZHRoKGxvd2VzdENvbW1vbkFuY2VzdG9yLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7Cisg
ICAgbWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoYmxvY2tDb250YWluaW5nQWxsVGV4dCwgYmxv
Y2tDb250YWluaW5nQWxsVGV4dCwgbWluVGV4dFdpZHRoLCB0ZXh0V2lkdGgpOwogICAgIGlmICh0
ZXh0V2lkdGggPj0gbWluVGV4dFdpZHRoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0
V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvYXQgbWluVGV4dFdpZHRoLCBm
bG9hdCYgdGV4dFdpZHRoKQordm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRl
eHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayog
YmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdp
ZHRoKQogewotICAgIGJvb2wgc2tpcExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91bGRiZUF1dG9z
aXplZChjb250YWluZXIpOworICAgIGJvb2wgc2tpcExvY2FsVGV4dCA9ICFjb250YWluZXJTaG91
bGRCZUF1dG9zaXplZChjb250YWluZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50
ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnRhaW5l
ciwgY29udGFpbmVyKTsKICAgICB3aGlsZSAoZGVzY2VuZGFudCkgewpAQCAtMjk0LDggKzMwMyw4
IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoY29uc3Qg
UmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgZmxvCiAgICAgICAgICAgICB0ZXh0V2lkdGggKz0gdG9S
ZW5kZXJUZXh0KGRlc2NlbmRhbnQpLT5yZW5kZXJlZFRleHRMZW5ndGgoKSAqIGRlc2NlbmRhbnQt
PnN0eWxlKCktPnNwZWNpZmllZEZvbnRTaXplKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNBdXRv
c2l6aW5nQ29udGFpbmVyKGRlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayog
ZGVzY2VuZGFudEJsb2NrID0gdG9SZW5kZXJCbG9jayhkZXNjZW5kYW50KTsKLSAgICAgICAgICAg
IGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihkZXNjZW5kYW50QmxvY2spKQotICAgICAgICAgICAg
ICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGRlc2NlbmRhbnRCbG9jaywgbWluVGV4dFdp
ZHRoLCB0ZXh0V2lkdGgpOworICAgICAgICAgICAgaWYgKCFpc0F1dG9zaXppbmdDbHVzdGVyKGRl
c2NlbmRhbnRCbG9jaywgYmxvY2tDb250YWluaW5nQWxsVGV4dCkpCisgICAgICAgICAgICAgICAg
bWVhc3VyZURlc2NlbmRhbnRUZXh0V2lkdGgoZGVzY2VuZGFudEJsb2NrLCBibG9ja0NvbnRhaW5p
bmdBbGxUZXh0LCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
MjEsOCArMzMwLDYgQEAgUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5QcmVPcmRl
clNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QKIAogY29uc3QgUmVuZGVyQmxv
Y2sqIFRleHRBdXRvc2l6ZXI6OmZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25z
dCBSZW5kZXJCbG9jayogY2x1c3RlcikKIHsKLSAgICBBU1NFUlQoaXNBdXRvc2l6aW5nQ2x1c3Rl
cihjbHVzdGVyKSk7Ci0KICAgICBzaXplX3QgZmlyc3REZXB0aCA9IDA7CiAgICAgY29uc3QgUmVu
ZGVyT2JqZWN0KiBmaXJzdFRleHRMZWFmID0gZmluZEZpcnN0VGV4dExlYWZOb3RJbkNsdXN0ZXIo
Y2x1c3RlciwgZmlyc3REZXB0aCwgRmlyc3RUb0xhc3QpOwogICAgIGlmICghZmlyc3RUZXh0TGVh
ZikKQEAgLTM3MSw3ICszNzgsNyBAQCBjb25zdCBSZW5kZXJPYmplY3QqIFRleHRBdXRvc2l6ZXI6
OmZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNvbnN0IFJlbmRlck9iagogICAgICsrZGVw
dGg7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IChkaXJlY3Rpb24gPT0gRmlyc3RU
b0xhc3QpID8gcGFyZW50LT5maXJzdENoaWxkKCkgOiBwYXJlbnQtPmxhc3RDaGlsZCgpOwogICAg
IHdoaWxlIChjaGlsZCkgewotICAgICAgICBpZiAoIWlzQXV0b3NpemluZ0NvbnRhaW5lcihjaGls
ZCkgfHwgIWlzQXV0b3NpemluZ0NsdXN0ZXIodG9SZW5kZXJCbG9jayhjaGlsZCkpKSB7CisgICAg
ICAgIGlmICghaXNBdXRvc2l6aW5nQ2x1c3RlcihjaGlsZCkpIHsKICAgICAgICAgICAgIGNvbnN0
IFJlbmRlck9iamVjdCogbGVhZiA9IGZpbmRGaXJzdFRleHRMZWFmTm90SW5DbHVzdGVyKGNoaWxk
LCBkZXB0aCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIGlmIChsZWFmKQogICAgICAgICAgICAg
ICAgIHJldHVybiBsZWFmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgK
aW5kZXggZGQzZTE5ZGRkM2JlYTRkMDAyNjhmYTJhYjAyYTlhNTY5MDRhMzE3ZS4uNmRjOWRiZjNj
NWI5MGMzNWIyMDQ5ZTNjYjUyOWE3MGUwZWM5ZTQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5oCkBAIC0yOCwxNyArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShURVhU
X0FVVE9TSVpJTkcpCiAKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFJlbmRlclRleHQ7CiBzdHJ1Y3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvOwogCkBA
IC02MywyMiArNjAsMjEgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBUZXh0QXV0b3NpemVyKERv
Y3VtZW50Kik7CiAKICAgICB2b2lkIHByb2Nlc3NDbHVzdGVyKFJlbmRlckJsb2NrKiBjbHVzdGVy
LCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25z
dCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKLSAgICB2b2lkIHByb2Nlc3NDb250YWluZXIo
ZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBw
cm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKIAogICAgIHZv
aWQgc2V0TXVsdGlwbGllcihSZW5kZXJPYmplY3QqLCBmbG9hdCk7CiAKICAgICBzdGF0aWMgYm9v
bCBpc0F1dG9zaXppbmdDb250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGlj
IGJvb2wgaXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJCbG9jayopOworICAgIHN0YXRp
YyBib29sIGlzQXV0b3NpemluZ0NsdXN0ZXIoY29uc3QgUmVuZGVyQmxvY2sqLCBjb25zdCBSZW5k
ZXJCbG9jayogcGFyZW50QmxvY2tDb250YWluaW5nQWxsVGV4dCk7CisgICAgc3RhdGljIGJvb2wg
aXNBdXRvc2l6aW5nQ2x1c3Rlcihjb25zdCBSZW5kZXJPYmplY3QqKTsKIAotICAgIHN0YXRpYyBi
b29sIGNvbnRhaW5lclNob3VsZGJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIpOwotICAgIHN0YXRpYyBib29sIGNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZChjb25zdCBSZW5k
ZXJCbG9jayogbG93ZXN0Q29tbW9uQW5jZXN0b3IsIGZsb2F0IGNvbW1vbkFuY2VzdG9yV2lkdGgp
OwotICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIGZsb2F0IG1pblRleHRXaWR0aCwgZmxvYXQmIHRleHRXaWR0aCk7
CisgICAgc3RhdGljIGJvb2wgY29udGFpbmVyU2hvdWxkQmVBdXRvc2l6ZWQoY29uc3QgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lcik7CisgICAgc3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKGNvbnN0IFJlbmRlckJsb2NrKiBibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9j
a1dpZHRoKTsKKyAgICBzdGF0aWMgdm9pZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWlu
aW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAg
IC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRl
c2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMgKGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhl
bXNlbHZlcykuCi0gICAgc3RhdGljIFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGlu
Z0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29u
c3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKKyAgICBzdGF0aWMgUmVuZGVyT2JqZWN0KiBu
ZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluKTsKIAotICAgIC8vIEZpbmRz
IHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZGVz
Y2VuZGFudAotICAgIC8vIHRleHQgbm9kZSAoZXhjbHVkaW5nIHRob3NlIGJlbG9uZ2luZyB0byBv
dGhlciBhdXRvc2l6aW5nIGNsdXN0ZXJzKS4KICAgICBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sq
IGZpbmREZWVwZXN0QmxvY2tDb250YWluaW5nQWxsVGV4dChjb25zdCBSZW5kZXJCbG9jayogY2x1
c3Rlcik7CiAKICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHRyYXZlcnNhbCBkaXJlY3Rpb24gc3Bl
Y2lmaWVkLCBmaW5kcyB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgbGVhZiB0ZXh0IG5vZGUgY2hpbGQg
dGhhdCBkb2Vzbid0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzViYWU0NjM5NzhjNGM5ZDE3NTVjNzdjZmUyMTFkMGQ4Njk1
MmIxOS4uZDI0MjJhMTA1ZDZjZDA1MTczZmE1OTg1Yjg0ZjBiOTI3MTBmMTNiNyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDEyLTExLTI5ICBBbnRvbiBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBUZXh0IEF1dG9zaXppbmc6IGNvbnRhaW5lcnMgd2lkZXIgdGhhbiB0
aGVpciBlbmNsb3NpbmcgY2x1c3RlcnMgc2hvdWxkIGJlIGF1dG9zaXplZCBhcyBzZXBhcmF0ZSBj
bHVzdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAzNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TW9kaWZpZWQgZXhpc3RpbmcgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IGF1dG9zaXppbmcgYXBw
cm9hY2ggdG8gaGFuZGxpbmcgb2YgdGhlIGVsZW1lbnRzIHRoYXQgYXJlCisgICAgICAgIHdpZGVy
IHRoYW4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHRleHQgbm9kZXMgb2YgdGhl
IGVuY2xvc2luZyBhdXRvc2l6aW5nIGNsdXN0ZXIuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0
b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0bWw6CisgICAgICAgICog
ZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5odG1sOgorICAgICAg
ICAqIGZhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLmh0bWw6CisgICAgICAgICogZmFz
dC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVk
Lmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3Zl
cmZsb3ctc2Nyb2xsLmh0bWw6CisKIDIwMTItMTItMTggIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEhhdmUga0ZpeGVkUG9pbnREZW5vbWluYXRvciBiZSBjb25z
dGFudCBhY3Jvc3MgcG9ydHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRv
c2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3ctZXhwZWN0ZWQuaHRt
bAppbmRleCA2Y2ZmMDZlNDQ4YjJmNzU4M2JkYTIwMzQzZWViZGUyMjVjNjQ2NTcwLi5kNGY4ZTM1
NWVkOGY3MDg0MDk5Y2Q2YmRlMDczNDI0OTI0MmZlMzNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93LWV4cGVjdGVkLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWlu
LW5hcnJvdy1leHBlY3RlZC5odG1sCkBAIC0xNywxMyArMTcsMTMgQEAgYm9keSB7IHdpZHRoOiA4
MDBweDsgbWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KICAgICAgICAgTG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBl
aXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVh
LgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBmb250LXNpemU6
IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZCB0byBqdXN0
IDIwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMC8zMjApLCBzaW5jZSBkZXNwaXRlIGl0
cyB3aWR0aDo4MDBweCBpdCBpcyBwYXJ0IG9mIHRoZSA0MDBweCB3aWRlIHJvb3QgY2x1c3Rlci48
YnI+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDYwMHB4OyBmb250LXNpemU6IDEuODc1cmVtIj4K
KyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMzBweCBjb21wdXRlZCBm
b250LXNpemUgKDE2ICogNjAwLzMyMCksIHNpbmNlIGl0cyB3aWR0aDo2MDBweCBtYWtlcyBpdCB3
aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1
c3RlciwgaGVuY2UgaXQgd2lsbCBpdHNlbGYgYmVjb21lIGEgY2x1c3Rlci48YnI+CiAgICAgICAg
IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0
LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1h
Z25hIGFsaXF1YS4KICAgICA8L2Rpdj4KIAogICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMS4y
NXJlbSI+Ci0gICAgICAgIFRoaXMgdGV4dCBzaG91bGQgc2ltaWxhcmx5IGJlIGF1dG9zaXplZCB0
byAyMHB4Ljxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBw
eCBjb21wdXRlZCBmb250LXNpemUgKDE2ICogNDAwIC8gMzIwKSwgc2luY2UgaXQncyBub3QgYW4g
YXV0b3NpemluZyBjbHVzdGVyIGl0c2VsZiBhbmQgaXRzIHBhcmVudCBlbGVtZW50IGlzIHRoZSBl
bmNsb3NpbmcgYXV0b3NpemluZyBjbHVzdGVyIHdoaWNoIGlzIDQwMHB4IHdpZGUuPGJyPgogICAg
ICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcg
ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9y
ZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2NsdXN0ZXItd2lkZS1pbi1uYXJyb3cuaHRt
bAppbmRleCBiMmVmMDEwN2M5ZWM2NmM3MjNhZTk2ZmI0NDY5NmJmMzE2MTQ0N2NjLi44NWJjYTM5
NWZmZDQ0NWU2OGVhMGQ0NDgxYmUwNjE3OTk3Y2NmMTc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy9jbHVzdGVyLXdpZGUtaW4tbmFycm93Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvY2x1c3Rlci13aWRlLWluLW5hcnJvdy5o
dG1sCkBAIC0yNiwxMyArMjYsMTMgQEAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKICAgICAgICAg
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs
IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn
bmEgYWxpcXVhLgogICAgIDwvZGl2PgogCi0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4K
LSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8ganVzdCAyMHB4IGNvbXB1
dGVkIGZvbnQtc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgZGVzcGl0ZSBpdHMgd2lkdGg6ODAw
cHggaXQgaXMgcGFydCBvZiB0aGUgNDAwcHggd2lkZSByb290IGNsdXN0ZXIuPGJyPgorICAgIDxk
aXYgc3R5bGU9IndpZHRoOiA2MDBweCI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0
b3NpemVkIHRvIDMwcHggY29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDYwMC8zMjApLCBzaW5jZSBp
dHMgd2lkdGg6NjAwcHggbWFrZXMgaXQgd2lkZXIgdGhhbiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNl
c3RvciBvZiBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIsIGhlbmNlIGl0IHdpbGwgaXRzZWxmIGJlY29t
ZSBhIGNsdXN0ZXIuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29u
c2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1
bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9kaXY+CiAKICAgICA8
ZGl2PgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIHNpbWlsYXJseSBiZSBhdXRvc2l6ZWQgdG8g
MjBweC48YnI+CisgICAgICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHgg
Y29tcHV0ZWQgZm9udC1zaXplICgxNiAqIDQwMCAvIDMyMCksIHNpbmNlIGl0J3Mgbm90IGFuIGF1
dG9zaXppbmcgY2x1c3RlciBpdHNlbGYgYW5kIGl0cyBwYXJlbnQgZWxlbWVudCBpcyB0aGUgZW5j
bG9zaW5nIGF1dG9zaXppbmcgY2x1c3RlciB3aGljaCBpcyA0MDBweCB3aWRlLjxicj4KICAgICAg
ICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVs
aXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUg
bWFnbmEgYWxpcXVhLgogICAgIDwvZGl2PgogPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNoaWxkLWV4cGVjdGVkLmh0bWwKaW5kZXgg
YTkwYTAxM2FmM2VkNGVlMDRlMjZhYzYwNzIwNmY5MmRhY2JiNWE4OC4uY2FkMzFjNWI2NDhiMzAw
Nzk2ZTk3Njc3MjU4NWQxMWJkMGI5NzY3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90
ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGlsZC1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQtZXhwZWN0ZWQuaHRtbApAQCAtMTIsMTEg
KzEyLDEwIEBAIGJvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlk
ZGVuOyB9CiA8Ym9keT4KIAogPGRpdiBzdHlsZT0id2lkdGg6IDMyMHB4OyBmb250LXNpemU6IDFy
ZW0iPgotCVRoaXMgdGV4dCBzaG91bGQgbm90IGJlIGF1dG9zaXplZCwgYXMgdGhpcyBkaXYgaXMg
dGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHJvb3QgY2x1c3RlciwgYW5kIHRoaXMg
ZGl2IGlzIG5hcnJvdy48YnI+CisgICAgVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVk
LCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBj
bHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFycm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xv
ciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2Qg
dGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCi0JPGRp
diBzdHlsZT0id2lkdGg6IDgwMHB4Ij4KLSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0
b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJs
b2NrIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIu
PGJyPgotICAgIAlGSVhNRTogSWRlYWxseSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4g
V2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxhdGVyLjxicj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDog
ODAwcHg7IGZvbnQtc2l6ZTogMi41cmVtIj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2Ug
aXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3Np
bmcgY2x1c3RlciBzbyBpdCBiZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwg
c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu
YSBhbGlxdWEuCiAgICAgPC9kaXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC1hdXRvc2l6aW5nL3dpZGUtY2hpbGQuaHRtbAppbmRleCA0NTRlYTYxZjNhZjc5YWZmODdiN2Qz
MzBjNTViNzkxNzYzYjUyMDdlLi4wNjg3NmVmZmM1NTAxYzE0OGQwYWYyNzRiZDhkNTE5NzMzMjBm
Mjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy93aWRlLWNo
aWxkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1jaGls
ZC5odG1sCkBAIC0yNCw4ICsyNCw3IEBAIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgVGhp
cyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkLCBhcyB0aGlzIGRpdiBpcyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcm9vdCBjbHVzdGVyLCBhbmQgdGhpcyBkaXYgaXMgbmFy
cm93Ljxicj4KICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRp
cGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3Jl
IGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4Ij4K
LSAgICAJVGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgYXV0b3NpemVkIHNpbmNlIGl0IGRvZXNuJ3Qg
YWZmZWN0IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50IGJsb2NrIHdoaWNoIGlzIHVzZWQgdG8gY2Fs
Y3VsYXRlIHRoZSBhdXRvc2l6aW5nIG11bHRpcGxpZXIuPGJyPgotICAgIAlGSVhNRTogSWRlYWxs
eSB0aGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXplZC4gV2lsbCBuZWVkIHRvIGJlIGZpeGVkIGxh
dGVyLjxicj4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBj
b21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRo
ZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGl0cyBlbmNsb3NpbmcgY2x1c3RlciBzbyBpdCBi
ZWNvbWVzIGEgY2x1c3RlciBpdHNlbGYuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBz
aXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVt
cG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCiAgICAgPC9k
aXY+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5n
L3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4
cGVjdGVkLmh0bWwKaW5kZXggNGI3YTc3N2RjMzkxNWY1Y2E2MjE3OWU4ODVlMDUwMDcxOGJlNzJi
Yy4uMzAzMDMxZTM1MThhNDM5NmJmMDcyNjM5ZjRlMzNjMzQyMjAzNTllNiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ct
c2Nyb2xsLWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXpp
bmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLWV4cGVjdGVkLmh0bWwKQEAgLTEyLDE3
ICsxMiwxNyBAQCBib2R5IHsgd2lkdGg6IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhp
ZGRlbjsgfQogPGJvZHk+CiAKIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+Ci0gIDxkaXYgc3R5
bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRpdiBzdHlsZT0id2lkdGg6IDgwMHB4OyBm
b250LXNpemU6IDEuMjVyZW0iPgotICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQgc2l6ZSAoMTYgKiA0MDAvMzIwKSwgc2luY2UgdGhpcyBp
cyBwYXJ0IG9mIHRoZSByb290IGNsdXN0ZXIsIHdob3NlIHRleHQgZGVzY2VuZGFudHMgYXJlIGFs
bCBjb250YWluZWQgd2l0aGluIHRoZSA0MDBweCB3aWRlIGdyYW5kcGFyZW50IG9mIHRoaXMgZGl2
Ljxicj4KLSAgICAgICAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFk
aXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9y
ZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLgorICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNj
cm9sbCI+CisgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA4MDBweDsgZm9udC1zaXplOiAyLjVy
ZW0iPgorICAgICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBj
b21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMyMCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRo
ZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mICBpdHMgZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQg
YmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4KKyAgICAgICAgICAgIExvcmVtIGlwc3VtIGRv
bG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21v
ZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAg
ICAgICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gIDwvZGl2PgogCi0gIDxkaXYgc3R5bGU9ImZvbnQt
c2l6ZTogMS4yNXJlbSI+CisgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVtIj4KICAg
ICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250
IHNpemUgKDE2ICogNDAwLzMyMCkuPGJyPgogICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQg
YW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9y
IGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuCi0gIDwvZGl2Pgor
ICAgIDwvZGl2PgogPC9kaXY+CiAKIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC1hdXRvc2l6aW5nL3dpZGUtaW4tbmFycm93LW92ZXJmbG93LXNjcm9sbC5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ct
c2Nyb2xsLmh0bWwKaW5kZXggZjc0YTdhMjE0MDhjOGFlZjQ1ZmJhZWQ4NjVmNTlmN2VhOTNiODFl
MC4uNzk3NjNkZWZmYWQ1Nzg3MTZmMTBhNWI4NGYyMDk1OWU4Y2Y5MTFkYSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1pbi1uYXJyb3ctb3ZlcmZsb3ct
c2Nyb2xsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvd2lkZS1p
bi1uYXJyb3ctb3ZlcmZsb3ctc2Nyb2xsLmh0bWwKQEAgLTIxLDE3ICsyMSwxNyBAQCBpZiAod2lu
ZG93LmludGVybmFscykgewogPGJvZHk+CiAKIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+Ci0g
IDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6IHNjcm9sbCI+Ci0gICAgPGRpdiBzdHlsZT0id2lkdGg6
IDgwMHB4Ij4KLSAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBj
b21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCksIHNpbmNlIHRoaXMgaXMgcGFydCBvZiB0
aGUgcm9vdCBjbHVzdGVyLCB3aG9zZSB0ZXh0IGRlc2NlbmRhbnRzIGFyZSBhbGwgY29udGFpbmVk
IHdpdGhpbiB0aGUgNDAwcHggd2lkZSBncmFuZHBhcmVudCBvZiB0aGlzIGRpdi48YnI+Ci0gICAg
ICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBl
bGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3Jl
IG1hZ25hIGFsaXF1YS4KKyAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OiBzY3JvbGwiPgorICAg
ICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogODAwcHgiPgorICAgICAgICAgICAgVGhpcyB0ZXh0IHNo
b3VsZCBiZSBhdXRvc2l6ZWQgdG8gNDBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogODAwLzMy
MCkgc2luY2UgaXQncyB3aWRlciB0aGFuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mICBp
dHMgZW5jbG9zaW5nIGNsdXN0ZXIgc28gaXQgYmVjb21lcyBhIGNsdXN0ZXIgaXRzZWxmLjxicj4K
KyAgICAgICAgICAgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4KKyAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+Ci0gIDwv
ZGl2PgogCi0gIDxkaXY+CisgICAgPGRpdj4KICAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBh
dXRvc2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250IHNpemUgKDE2ICogNDAwLzMyMCkuPGJyPgog
ICAgICAgICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNp
bmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYSBhbGlxdWEuCi0gIDwvZGl2PgorICAgIDwvZGl2PgogPC9kaXY+CiAKIDwvYm9k
eT4K
</data>

          </attachment>
      

    </bug>

</bugzilla>