<?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>97365</bug_id>
          
          <creation_ts>2012-09-21 14:55:57 -0700</creation_ts>
          <short_desc>ScrollingTreeState needs to be a tree of nodes</short_desc>
          <delta_ts>2012-10-02 15:42:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>725849</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-21 14:55:57 -0700</bug_when>
    <thetext>This is a step toward getting pages with fixed position to be able to be scrolled by the scrolling thread. In order to do that, fixed layers will have to be represented by nodes in the ScrollingTree…currently, the scrolling tree only ever has one node, so we have to do a little code restructuring to get it into a state where is can expect and handle multiple nodes. This is a first step along that path.

This patch specifically looks at ScrollingTreeState. Right now, the ScrollingTreeState attempts to contain all of the state information needed for the whole scrolling tree in one object. But in the future when there are multiple nodes in the scrolling tree, a single state object will not be sufficient. ScrollingState should also be represented by a tree. Technically, a HashTable would work too, but a tree will be better suited to communicating parent/child/sibling relationships for the scroll layers over to the ScrollingTree. This patch makes scrolling state into a tree. The old ScrollingTreeState class has become the ScrollingStateScrollingNode class since the majority of the class represents scroll state that is specific to ScrollableAreas and will not be applicable to fixed or sticky layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725866</commentid>
    <comment_count>1</comment_count>
      <attachid>165204</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-21 15:09:53 -0700</bug_when>
    <thetext>Created attachment 165204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725873</commentid>
    <comment_count>2</comment_count>
      <attachid>165204</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-09-21 15:14:35 -0700</bug_when>
    <thetext>Comment on attachment 165204
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:42
&gt; +class ScrollingStateNode : public ThreadSafeRefCounted&lt;ScrollingStateNode&gt; {

I don&apos;t think this needs to be ref counted; using WTF_MAKE_NONCOPYABLE and use OwnPtr instead of RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726048</commentid>
    <comment_count>3</comment_count>
      <attachid>165245</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-21 22:30:41 -0700</bug_when>
    <thetext>Created attachment 165245
Patch

Thanks, Anders! Here is a patch that addresses Anders&apos; comments and also hopefully will apply to the ews bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726050</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 22:33:56 -0700</bug_when>
    <thetext>Attachment 165245 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/page/scrolling/ScrollingTree.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:35:  The return type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726846</commentid>
    <comment_count>5</comment_count>
      <attachid>165245</attachid>
    <who name="Sami Kyöstilä">skyostil</who>
    <bug_when>2012-09-24 11:01:03 -0700</bug_when>
    <thetext>Comment on attachment 165245
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:57
&gt; +    void setScrollLayer(PlatformLayer*);

It seems weird to have these two variants share the same name. Do you really need both?

&gt; Source/WebCore/page/scrolling/ScrollingStateTree.h:49
&gt; +// ScrollingStateFixedNode and ScrollingStateStickyNode for fixed positioned objects and sticky positoned

Typo: positioned

&gt; Source/WebCore/page/scrolling/ScrollingStateTree.h:59
&gt; +     // Copies the current tree state and clears the changed properties mask in the original.

Indentation seems off here and after &quot;private&quot; below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726997</commentid>
    <comment_count>6</comment_count>
      <attachid>165245</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-09-24 14:22:00 -0700</bug_when>
    <thetext>Comment on attachment 165245
Patch

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

Going in the right direction, but I&apos;d like to see clarification of ownership when cloning nodes, and less duplication of state-related stuff.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:45
&gt; +    : m_scrollingStateTree(nodeState-&gt;scrollingStateTree())

When cloning the node tree, does the clone belong ot the same ScrollingStateTree or a new one?

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:48
&gt; +    , m_parent(nodeState-&gt;parent())
&gt; +    , m_firstChild(nodeState-&gt;firstChild())
&gt; +    , m_nextSibling(nodeState-&gt;nextSibling())

It&apos;s a bit confusing to have a copy ctor that also copies over the child/sibling pointers. What&apos;s the ownership model for those?

&gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:68
&gt; +    , m_changedProperties(stateNode-&gt;changedProperties())
&gt; +    , m_viewportRect(stateNode-&gt;viewportRect())
&gt; +    , m_contentsSize(stateNode-&gt;contentsSize())
&gt; +    , m_wheelEventHandlerCount(stateNode-&gt;wheelEventHandlerCount())
&gt; +    , m_shouldUpdateScrollLayerPositionOnMainThread(stateNode-&gt;shouldUpdateScrollLayerPositionOnMainThread())
&gt; +    , m_horizontalScrollElasticity(stateNode-&gt;horizontalScrollElasticity())
&gt; +    , m_verticalScrollElasticity(stateNode-&gt;verticalScrollElasticity())
&gt; +    , m_hasEnabledHorizontalScrollbar(stateNode-&gt;hasEnabledHorizontalScrollbar())
&gt; +    , m_hasEnabledVerticalScrollbar(stateNode-&gt;hasEnabledVerticalScrollbar())
&gt; +    , m_horizontalScrollbarMode(stateNode-&gt;horizontalScrollbarMode())
&gt; +    , m_verticalScrollbarMode(stateNode-&gt;verticalScrollbarMode())
&gt; +    , m_requestedScrollPosition(stateNode-&gt;requestedScrollPosition())
&gt; +    , m_scrollOrigin(stateNode-&gt;scrollOrigin())

Duplicates a lot of ScrollingTreeState setup. Maybe the node can just have a ScrollingTreeState member var?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727022</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-24 14:47:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 165245 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165245&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:57
&gt; &gt; +    void setScrollLayer(PlatformLayer*);
&gt; 
&gt; It seems weird to have these two variants share the same name. Do you really need both?
&gt; 

I do think having both is the easiest way. I will think abut it a bit more though.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateTree.h:49
&gt; &gt; +// ScrollingStateFixedNode and ScrollingStateStickyNode for fixed positioned objects and sticky positoned
&gt; 
&gt; Typo: positioned
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateTree.h:59
&gt; &gt; +     // Copies the current tree state and clears the changed properties mask in the original.
&gt; 
&gt; Indentation seems off here and after &quot;private&quot; below.

Thanks for catching these. Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727024</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-24 14:49:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 165245 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165245&amp;action=review
&gt; 
&gt; Going in the right direction, but I&apos;d like to see clarification of ownership when cloning nodes, and less duplication of state-related stuff.
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:45
&gt; &gt; +    : m_scrollingStateTree(nodeState-&gt;scrollingStateTree())
&gt; 
&gt; When cloning the node tree, does the clone belong ot the same ScrollingStateTree or a new one?
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:48
&gt; &gt; +    , m_parent(nodeState-&gt;parent())
&gt; &gt; +    , m_firstChild(nodeState-&gt;firstChild())
&gt; &gt; +    , m_nextSibling(nodeState-&gt;nextSibling())
&gt; 
&gt; It&apos;s a bit confusing to have a copy ctor that also copies over the child/sibling pointers. What&apos;s the ownership model for those?
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp:68
&gt; &gt; +    , m_changedProperties(stateNode-&gt;changedProperties())
&gt; &gt; +    , m_viewportRect(stateNode-&gt;viewportRect())
&gt; &gt; +    , m_contentsSize(stateNode-&gt;contentsSize())
&gt; &gt; +    , m_wheelEventHandlerCount(stateNode-&gt;wheelEventHandlerCount())
&gt; &gt; +    , m_shouldUpdateScrollLayerPositionOnMainThread(stateNode-&gt;shouldUpdateScrollLayerPositionOnMainThread())
&gt; &gt; +    , m_horizontalScrollElasticity(stateNode-&gt;horizontalScrollElasticity())
&gt; &gt; +    , m_verticalScrollElasticity(stateNode-&gt;verticalScrollElasticity())
&gt; &gt; +    , m_hasEnabledHorizontalScrollbar(stateNode-&gt;hasEnabledHorizontalScrollbar())
&gt; &gt; +    , m_hasEnabledVerticalScrollbar(stateNode-&gt;hasEnabledVerticalScrollbar())
&gt; &gt; +    , m_horizontalScrollbarMode(stateNode-&gt;horizontalScrollbarMode())
&gt; &gt; +    , m_verticalScrollbarMode(stateNode-&gt;verticalScrollbarMode())
&gt; &gt; +    , m_requestedScrollPosition(stateNode-&gt;requestedScrollPosition())
&gt; &gt; +    , m_scrollOrigin(stateNode-&gt;scrollOrigin())
&gt; 
&gt; Duplicates a lot of ScrollingTreeState setup. Maybe the node can just have a ScrollingTreeState member var?

Simon and I discussed his comments in person. The first two comments are definitely valid and they are generating some changes to the cloning code. The third comment is not actually an issue…the diff is just confusing because I moved files in subversion and then changed them, so the diff makes it look like duplicated code if you&apos;re not reading it very closely, but it is not in fact duplicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727250</commentid>
    <comment_count>9</comment_count>
      <attachid>165511</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-09-24 21:16:17 -0700</bug_when>
    <thetext>Created attachment 165511
Patch

Okay, the function is a bit complex, but I believe that this patch gets to cloning right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732086</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-01 16:06:45 -0700</bug_when>
    <thetext>Thanks, Simon! Committed changed with: http://trac.webkit.org/changeset/130091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732160</commentid>
    <comment_count>11</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-01 17:26:57 -0700</bug_when>
    <thetext>Attempted a GTK build fix with http://trac.webkit.org/changeset/130104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733155</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-02 15:42:28 -0700</bug_when>
    <thetext>This caused a regression, bug 98182.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165204</attachid>
            <date>2012-09-21 15:09:53 -0700</date>
            <delta_ts>2012-09-21 22:30:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>82298</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTI1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wOS0yMSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3MzY1CisgICAgICAgIFNjcm9sbGluZ1RyZWVTdGF0ZSBuZWVk
cyB0byBiZSBhIHRyZWUgb2Ygbm9kZXMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNob3VsZCBub3QgY2hhbmdlIGFueSBiZWhhdmlv
ci4KKworICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBTY3JvbGxpbmdUcmVlU3RhdGUgYXR0
ZW1wdGVkIHRvIGNvbnRhaW4gYWxsIG9mIAorICAgICAgICB0aGUgc3RhdGUgaW5mb3JtYXRpb24g
bmVlZGVkIGZvciB0aGUgd2hvbGUgc2Nyb2xsaW5nIHRyZWUgaW4gb25lIAorICAgICAgICBvYmpl
Y3QuIEJ1dCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG5vZGVzIGluIHRo
ZSAKKyAgICAgICAgc2Nyb2xsaW5nIHRyZWUsIGEgc2luZ2xlIHN0YXRlIG9iamVjdCB3aWxsIG5v
dCBiZSBzdWZmaWNpZW50LiAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGUgc2hvdWxkIGFsc28gYmUg
cmVwcmVzZW50ZWQgYnkgYSB0cmVlLiBUaGlzIHBhdGNoIG1ha2VzIAorICAgICAgICBzY3JvbGxp
bmcgc3RhdGUgaW50byBhIHRyZWUuIFRoZSBvbGQgU2Nyb2xsaW5nVHJlZVN0YXRlIGNsYXNzIGhh
cyAKKyAgICAgICAgYmVjb21lIHRoZSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgY2xhc3Mg
c2luY2UgdGhlIG1ham9yaXR5IG9mIAorICAgICAgICB0aGUgY2xhc3MgcmVwcmVzZW50cyBzY3Jv
bGwgc3RhdGUgdGhhdCBpcyBzcGVjaWZpYyB0byBTY3JvbGxhYmxlQXJlYXMgCisgICAgICAgIGFu
ZCB3aWxsIG5vdCBiZSBhcHBsaWNhYmxlIHRvIGZpeGVkIG9yIHN0aWNreSBsYXllcnMuCisKKyAg
ICAgICAgU29tZSBuZXcgZmlsZXMgYW5kIHNvbWUgbW92ZWQgZmlsZXMuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEV2ZXJ5dGhpbmcgdGhh
dCB1c2VkIHRvIHJlZmVyIHRvIHRoZSBTY3JvbGxpbmdUcmVlU3RhdGUgc2hvdWxkIG5vdyAKKyAg
ICAgICAgcmVmZXIgdG8gdGhlIFNjcm9sbGluZ1N0YXRlVHJlZSBpbnN0ZWFkLiBSaWdodCBub3cs
IGFsbCBvZiB0aGlzIGNvZGUgCisgICAgICAgIGNvbnRpbnVlcyB0byBkZWFsIHdpdGggb25seSB0
aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLiBJbiB0aGUgZnV0dXJlLCAKKyAgICAgICAgaXQgd2ls
bCBoYXZlIHRvIGRlYWwgd2l0aCBhbGwgb2YgdGhlIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6CisKKyAgICAgICAgVGhpcyBp
cyBhIG5ldyBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgbm9kZXMgaW4gdGhlIAorICAgICAg
ICBTY3JvbGxpbmdTdGF0ZVRyZWUuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Y2xvbmVDaGlsZE5vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6dHJhdmVyc2VOZXh0KToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdTdGF0ZU5vZGU6OnNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpzY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlTm9kZTo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVOb2RlOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
Tm9kZTo6c2V0TmV4dFNpYmxpbmcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nU3RhdGVOb2RlTWFjLm1tOiBDb3BpZWQgZnJvbSBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVN0YXRlTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpwbGF0Zm9ybVNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisKKyAgICAgICAg
UmlnaHQgbm93LCB0aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlIGlzIHRoZSBvbmx5IHR5
cGUgb2YgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZS4gSW4gdGhlIGZ1dHVyZSB0aGVyZSB3
aWxsIGJlLCBmb3IgZXhhbXBsZSwgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlcyB0
aGF0IHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2Ygc3RhdGUgCisgICAgICAgIGluZm9ybWF0
aW9uIHRvIGtlZXAgdHJhY2sgb2YuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcDogQ29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVN0YXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp+U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6Y2xvbmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Vmlld3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsT3JpZ2luKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDog
Q29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmguCisgICAgICAg
IChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6On5TY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpjb21taXQpOgorCisgICAgICAgIFRoZSBT
Y3JvbGxpbmdTdGF0ZVRyZWUgbWFuYWdlcyB0aGUgbm9kZXMgaW4gdGhlIHRyZWUgdmlhIHRoZSBy
b290IAorICAgICAgICBub2RlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY2xvbmluZyB0aGUgdHJl
ZSBhbmQgc2VuZGluZyBpdCBvdmVyIHRvIAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpzZXRIYXNDaGFuZ2VkUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6Omhhc0NoYW5nZWRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZTo6c2V0Um9vdFN0YXRlTm9k
ZSk6CisKKyAgICAgICAgRXZlcnl0aGluZyB0aGF0IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFNjcm9s
bGluZ1RyZWVTdGF0ZSBzaG91bGQgbm93IAorICAgICAgICByZWZlciB0byB0aGUgU2Nyb2xsaW5n
U3RhdGVUcmVlIGluc3RlYWQuIFJpZ2h0IG5vdywgYWxsIG9mIHRoaXMgY29kZSAKKyAgICAgICAg
Y29udGludWVzIHRvIGRlYWwgd2l0aCBvbmx5IHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUuIElu
IHRoZSBmdXR1cmUsIAorICAgICAgICBpdCB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIGFsbCBvZiB0
aGUgbm9kZXMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjp1cGRhdGUpOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNjcm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZU5vZGVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVOb2RlTWFjKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKToKKworICAgICAgICBT
Y3JvbGxpbmdUcmVlU3RhdGUuY3BwIC0tPiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcDogUmVtb3Zl
ZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGUuaCAtLT4gU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlLmgKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUu
aDogUmVtb3ZlZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0gLS0+IFNjcm9s
bGluZ1N0YXRlTm9kZU1hYy5tbQorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU3RhdGVNYWMubW06IFJlbW92ZWQuCisKIDIwMTItMDktMjEgIE1hcmsgUGlsZ3JpbSAg
PHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gcmVtb3ZlIGdldEZv
bnRGYW1pbHlGb3JDaGFyYWN0ZXJzIGZyb20gUGxhdGZvcm1TdXBwb3J0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxMSw5ICs1MTEsNiBAQAogCQkxQUE4Nzk5MDExQ0JF
ODQ2MDAzQzY2NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg3OThGMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5T
dHJhdGVneS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREExMTREQjQwOUYw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCAqLzsgfTsKIAkJMUFBQUREQTQxNERCNDA5RjAw
QUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFB
QUREQkUxNERDNjQwNzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERCQzE0REM2NDA2MDBB
RjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcCAqLzsgfTsKLQkJMUFBQUREQkYxNERDNjQw
NzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQUREQkQxNERDNjQwNjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWVTdGF0ZS5oICovOyB9OwotCQkxQUFBREREQTE0REM3NEVDMDBBRjY0QjMgLyogU2Ny
b2xsaW5nVHJlZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFBQURERDgxNERDNzRFQzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0
ZU1hYy5tbSAqLzsgfTsKIAkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWVOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQUFEREUxMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi87IH07
CiAJCTFBQUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTIxNERDOEM4
RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggKi87IH07CiAJCTFBQUFEREU4MTREQzhE
RjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREU2MTREQzhERjgwMEFGNjRCMyAvKiBT
Y3JvbGxpbmdUcmVlTm9kZU1hYy5tbSAqLzsgfTsKQEAgLTMyOTksNiArMzI5NiwxMyBAQAogCQk5
MzlCMDJFRTBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlCMDJFQzBFQTJEQkM0MDBDNTQ1
NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgKi87IH07CiAJCTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3
MCAvKiBXaWR0aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzlCMDJFRDBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICov
OyB9OwogCQk5M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EzOEI0QTBEMEU1
ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgKi87IH07CisJCTkzQTc5QTk0MTYwQ0VC
MjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNzlBOEUxNjBDRUIyNjAwMzEwRjA1IC8qIFNj
cm9sbGluZ1N0YXRlTm9kZS5jcHAgKi87IH07CisJCTkzQTc5QTk1MTYwQ0VCMjYwMDMxMEYwNSAv
KiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQTc5QThGMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5v
ZGUuaCAqLzsgfTsKKwkJOTNBNzlBOTYxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0E3OUE5MDE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlLmNwcCAqLzsgfTsKKwkJOTNBNzlBOTcxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZS5oICovOyB9OworCQk5M0E3OUE5ODE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xs
aW5nU3RhdGVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQTc5QTkyMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuY3Bw
ICovOyB9OworCQk5M0E3OUE5OTE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E3OUE5
MzE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggKi87IH07CisJCTkzQTc5
QTlGMTYwRDBERUMwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E3OUE5RTE2MEQwREVDMDAz
MTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tICovOyB9OwogCQk5M0IyRDgxNjBGOTky
MEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRk
ZW5UZXJtaW5hdGlvbi5oICovOyB9OwogCQk5M0IyRDgxODBGOTkyMEVFMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24ubW0g
Ki87IH07CiAJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTUwQjBCQ0E1
QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc1ODMsOSArNzU4Nyw2IEBACiAJCTFBQTg3OThGMTFDQkU4
NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbHVnaW5TdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QUFBRERBMTE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFBRERCQzE0REM2NDA2MDBBRjY0QjMgLyog
U2Nyb2xsaW5nVHJlZVN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBQUFEREJEMTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUFEREQ4MTREQzc0RUMwMEFGNjRCMyAvKiBTY3JvbGxp
bmdUcmVlU3RhdGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTY3JvbGxpbmdUcmVlU3RhdGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBQUFEREUxMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREUyMTREQzhDOEYwMEFGNjRCMyAvKiBT
Y3JvbGxpbmdUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxpbmdUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFNjE0
REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDkzLDYgKzEwNDk0LDEzIEBACiAJCTkzOUIwMkVD
MEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdpZHRoSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzlCMDJFRDBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaWR0aEl0ZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQTM4QjRBMEQwRTU4MDgwMDY4NzJDMiAvKiBFZGl0b3JD
b21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRvckNv
bW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE4RTE2MENFQjI2
MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzQTc5QThGMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTc5QTkwMTYwQ0VCMjYwMDMxMEYw
NSAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNBNzlBOTIxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdTdGF0ZVRyZWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE5MzE2MENFQjI2MDAzMTBG
MDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcm9sbGluZ1N0YXRlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0E3OUE5RTE2MEQwREVDMDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVOb2RlTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IyRDgxNTBGOTkyMEQyMDA2QUU2
QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3VkZGVuVGVybWluYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNC
MkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3VkZGVuVGVybWluYXRpb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250
ZXh0TWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGV4dE1lbnUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTkyLDggKzE0NjAwLDEyIEBACiAJ
CQkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLywKIAkJCQkx
QUFBRERFMTE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwICovLAogCQkJ
CTFBQUFEREUyMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oICovLAotCQkJ
CTFBQUFEREJDMTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuY3BwICovLAot
CQkJCTFBQUFEREJEMTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCAqLywK
KwkJCQk5M0E3OUE4RTE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAq
LywKKwkJCQk5M0E3OUE4RjE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmgg
Ki8sCisJCQkJOTNBNzlBOTAxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5jcHAgKi8sCisJCQkJOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oICovLAorCQkJCTkzQTc5QTkyMTYwQ0VCMjYwMDMxMEYwNSAv
KiBTY3JvbGxpbmdTdGF0ZVRyZWUuY3BwICovLAorCQkJCTkzQTc5QTkzMTYwQ0VCMjYwMDMxMEYw
NSAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc2Nyb2xsaW5n
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NjAyLDExICsxNDYxNCwxMSBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQUY2MkVFMzE0REEyMkE3
MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gKi8sCisJCQkJOTNBNzlBOUUx
NjBEMERFQzAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSAqLywKIAkJCQkxQUY2
MkYyMzE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFjLm1tICovLAogCQkJCTFB
MzU4NjJBMTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1tICovLAogCQkJCTFB
QUFEREU3MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oICovLAogCQkJ
CTFBQUFEREU2MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSAqLywK
LQkJCQkxQUFBREREODE0REM3NEVDMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMjQ5MDEsNyArMjQ5MTMsNiBAQAogCQkJCTFBQUFEREE0MTREQjQwOUYwMEFGNjRCMyAvKiBT
Y3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFBRERFNDE0REM4QzhGMDBBRjY0
QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREU5MTRE
QzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUFBQUREQkYxNERDNjQwNzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmll
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJj
aElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU3MCw2ICsyNTU4MSw5IEBACiAJCQkJ
RkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGQjkyREY0QjE1RkVEMDg3MDA5OTQ0MzMgLyogQ2xpcFBhdGhPcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTRGN0I0QTY2MTVGRjZENkEwMDZCNUYyMiAvKiBQbGF0Zm9ybU1lbW9yeUlu
c3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNBNzlBOTUxNjBDRUIyNjAwMzEw
RjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNBNzlBOTcx
NjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTNBNzlBOTkxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJl
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODEyMiw4ICsyODEzNiw2IEBACiAJCQkJMUEzNTg2MkMx
NTI1MjI1NDAwMjJBNjU5IC8qIFNjcm9sbGluZ1RyZWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQUFBRERFMzE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFBQURERTgxNERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVO
b2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBQUREQkUxNERDNjQwNzAwQUY2NEIzIC8q
IFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUFBREREQTE0REM3
NEVDMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlGNTVCM0REMTEyNTFGMTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRU
eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg2NjksNiArMjg2ODEsMTAgQEAKIAkJCQk5NzdF
MkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEYxRDExQkYxNUZGMzcyMDAwMjZFOTA4IC8qIFBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTc5QTk0MTYwQ0VCMjYwMDMxMEYwNSAv
KiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNBNzlBOTYxNjBD
RUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5M0E3OUE5ODE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTc5QTlGMTYwRDBERUMwMDMxMEYwNSAvKiBTY3Jv
bGxpbmdTdGF0ZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJl
dmlzaW9uIDEyOTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQAogI2luY2x1
ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxB
bmltYXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJl
ZS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCkBAIC01Niw5ICs1Nyw5IEBAIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpTY3Jv
bGxpbmdDb29yZGluYXQKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9mb3JjZU1haW5UaHJl
YWRTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhmYWxzZSkKICNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQotICAgICwgbV9zY3JvbGxpbmdUcmVlU3RhdGUoU2Nyb2xsaW5nVHJlZVN0YXRl
OjpjcmVhdGUoKSkKKyAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJl
ZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3Njcm9sbGluZ1RyZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRl
KHRoaXMpKQotICAgICwgbV9zY3JvbGxpbmdUcmVlU3RhdGVDb21taXR0ZXJUaW1lcih0aGlzLCAm
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyRmly
ZWQpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKHRoaXMsICZTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZCkK
ICNlbmRpZgogICAgICwgbV9wcml2YXRlKDApCiB7CkBAIC03MCw3ICs3MSw3IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQKICAgICBtX3BhZ2UgPSAwOwogCiAjaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1p
dHRlclRpbWVyLnN0b3AoKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVy
LnN0b3AoKTsKIAogICAgIC8vIEludmFsaWRhdGluZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2lsbCBi
cmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
IGFuZCBTY3JvbGxpbmdUcmVlIG9iamVjdHMuCiAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRj
aChiaW5kKCZTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBtX3Njcm9sbGluZ1RyZWUucmVsZWFz
ZSgpKSk7CkBAIC0yNTMsNyArMjU0LDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVx
dWVzdFNjcm9sbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3Njcm9sbGlu
Z1RyZWVTdGF0ZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwor
ICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJlcXVlc3RlZFNj
cm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1p
dCgpOwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKQEAgLTQxMywzNSArNDE0LDM3IEBAIHZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEZvcmNlTWFpblQKICNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3Jh
cGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNl
dFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgc2NoZWR1bGVU
cmVlU3RhdGVDb21taXQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0gICAgbV9zY3Jv
bGxpbmdUcmVlU3RhdGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CisgICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24ocmVnaW9uKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCiB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9s
bFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3Rh
dGUtPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRWZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0
aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICBt
X3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFy
YW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3Rh
dGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Ny
b2xsYmFyTW9kZSk7Ci0KLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0U2Nyb2xsT3JpZ2lu
KHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0
ZS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKLSAgICBt
X3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29u
dGVudHNTaXplKTsKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiBh
bmQgYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcyBuZWVkIHRvCisgICAg
Ly8gaGFuZGxlIG1vcmUgdGhhbiBqdXN0IHRoZSByb290IG5vZGUuIAorICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cik7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUpOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0
U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFy
YW1ldGVycy52aWV3cG9ydFJlY3QpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7
CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAogCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRI
YW5kbGVyQ291bnQpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2
ZW50SGFuZGxlckNvdW50KTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCkBA
IC00NTIsNDAgKzQ1NSw0MCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRV
cGRhCiAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgbGF5ZXIgcG9zaXRpb25pbmcgYnVncy4KICAg
ICBpZiAocmVhc29ucykKICAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlv
bigpOwotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKHJlYXNvbnMpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCktPnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1h
aW5UaHJlYWQocmVhc29ucyk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAog
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQogewot
ICAgIGlmIChtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+aGFzQ2hhbmdl
ZFByb3BlcnRpZXMoKSkKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2Vk
UHJvcGVydGllcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0
ZUNvbW1pdHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZUNvbW1pdHRlclRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2Nyb2xsaW5nVHJlZVN0YXRlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3Jv
bGxpbmdDb29yZGluYXRvcj4qKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5n
U3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvcj4q
KQogewogICAgIGNvbW1pdFRyZWVTdGF0ZSgpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbGluZ1Ry
ZWVTdGF0ZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBj
b21taXRUcmVlU3RhdGUoKTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVy
LnN0b3AoKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsK
IH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKCkKIHsKLSAg
ICBBU1NFUlQobV9zY3JvbGxpbmdUcmVlU3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpOwor
ICAgIEFTU0VSVChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7
CiAKLSAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGlu
Z1RyZWVTdGF0ZS0+Y29tbWl0KCk7CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJl
ZVN0YXRlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNvbW1pdCgpOwogICAgIFNjcm9sbGluZ1Ro
cmVhZDo6ZGlzcGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlLCBt
X3Njcm9sbGluZ1RyZWUuZ2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNlKCkpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5oCShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBA
IGNsYXNzIFBhZ2U7CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKLWNsYXNzIFNjcm9sbGluZ1RyZWVTdGF0ZTsK
K2NsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCiBjbGFzcyBTY3JvbGxpbmdUcmVlOwpAQCAtMTc2LDEyICsxNzYsMTIgQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogICAgIHZvaWQgc2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKTsKIAotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZVN0YXRlQ29tbWl0dGVyVGltZXJG
aXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvcj4qKTsKKyAgICB2b2lkIHNjcm9sbGluZ1N0
YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+Kik7
CiAgICAgdm9pZCBjb21taXRUcmVlU3RhdGUoKTsKIAotICAgIE93blB0cjxTY3JvbGxpbmdUcmVl
U3RhdGU+IG1fc2Nyb2xsaW5nVHJlZVN0YXRlOworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRy
ZWU+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlOwogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Nj
cm9sbGluZ1RyZWU7Ci0gICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5n
VHJlZVN0YXRlQ29tbWl0dGVyVGltZXI7CisgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXI7CiAjZW5kaWYKIAogICAgIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2Rl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCisKKyNpbmNsdWRl
ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiBzY3JvbGxpbmdTdGF0ZVRyZWUpCisgICAgOiBt
X3Njcm9sbGluZ1N0YXRlVHJlZShzY3JvbGxpbmdTdGF0ZVRyZWUpCisgICAgLCBtX3Njcm9sbExh
eWVyRGlkQ2hhbmdlKGZhbHNlKQoreworfQorCitTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbGlu
Z1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGVTdGF0ZSkKKyAgICA6IG1fc2Nyb2xs
aW5nU3RhdGVUcmVlKG5vZGVTdGF0ZS0+c2Nyb2xsaW5nU3RhdGVUcmVlKCkpCisgICAgLCBtX3Bh
cmVudChub2RlU3RhdGUtPnBhcmVudCgpKQorICAgICwgbV9maXJzdENoaWxkKG5vZGVTdGF0ZS0+
Zmlyc3RDaGlsZCgpKQorICAgICwgbV9uZXh0U2libGluZyhub2RlU3RhdGUtPm5leHRTaWJsaW5n
KCkpCisgICAgLCBtX3Njcm9sbExheWVyRGlkQ2hhbmdlKG5vZGVTdGF0ZS0+c2Nyb2xsTGF5ZXJE
aWRDaGFuZ2UoKSkKK3sKKyAgICBzZXRTY3JvbGxMYXllcihub2RlU3RhdGUtPnBsYXRmb3JtU2Ny
b2xsTGF5ZXIoKSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRlTm9k
ZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVm
UHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2hpbGROb2RlKQoreworICAgIGNoaWxkTm9kZS0+c2V0
UGFyZW50KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdENoaWxkKSB7CisgICAgICAgIG1f
Zmlyc3RDaGlsZCA9IGNoaWxkTm9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZv
ciAoU2Nyb2xsaW5nU3RhdGVOb2RlKiBleGlzdGluZ0NoaWxkID0gZmlyc3RDaGlsZCgpOyBleGlz
dGluZ0NoaWxkOyBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC0+bmV4dFNpYmxpbmcoKSkg
eworICAgICAgICBpZiAoIWV4aXN0aW5nQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ICAgIGV4aXN0aW5nQ2hpbGQtPnNldE5leHRTaWJsaW5nKGNoaWxkTm9kZS5nZXQoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OmNsb25lQ2hpbGROb2RlcyhTY3Jv
bGxpbmdTdGF0ZU5vZGUqIGNsb25lKQoreworICAgIGZvciAoU2Nyb2xsaW5nU3RhdGVOb2RlKiBz
dGF0ZU5vZGUgPSBmaXJzdENoaWxkKCk7IHN0YXRlTm9kZTsgc3RhdGVOb2RlID0gc3RhdGVOb2Rl
LT5uZXh0U2libGluZygpKQorICAgICAgICBjbG9uZS0+YXBwZW5kQ2hpbGQoc3RhdGVOb2RlLT5j
bG9uZU5vZGUoKSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlTm9kZSogU2Nyb2xsaW5nU3RhdGVOb2Rl
Ojp0cmF2ZXJzZU5leHQoKSBjb25zdAoreworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogY2hpbGQg
PSBmaXJzdENoaWxkKCk7CisgICAgaWYgKGNoaWxkKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisK
KyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOworICAgIGlm
IChzaWJsaW5nKQorICAgICAgICByZXR1cm4gc2libGluZzsKKworICAgIGNvbnN0IFNjcm9sbGlu
Z1N0YXRlTm9kZSogc3RhdGVOb2RlID0gdGhpczsKKyAgICB3aGlsZSAoIXNpYmxpbmcpIHsKKyAg
ICAgICAgc3RhdGVOb2RlID0gc3RhdGVOb2RlLT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKCFzdGF0
ZU5vZGUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgc2libGluZyA9IHN0YXRlTm9k
ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGVOb2RlKQorICAgICAgICBy
ZXR1cm4gc2libGluZzsKKworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZU5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU2Nyb2xsaW5nU3RhdGVOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVOb2RlX2gKKwor
I2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOworCitjbGFzcyBTY3JvbGxpbmdT
dGF0ZU5vZGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2Nyb2xsaW5nU3RhdGVOb2Rl
PiB7CitwdWJsaWM6CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSop
OworICAgIHZpcnR1YWwgflNjcm9sbGluZ1N0YXRlTm9kZSgpOworCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xvbmVOb2RlKCkgPSAwOworCisgICAgdmlydHVh
bCBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5z
aWduZWQgY2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
c2V0Q2hhbmdlZFByb3BlcnRpZXMoKSA9IDA7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bVNjcm9sbExheWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFw
aGljc0xheWVyKik7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKik7CisK
KyAgICBib29sIHNjcm9sbExheWVyRGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllckRpZENoYW5nZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoYm9vbCBz
Y3JvbGxMYXllckRpZENoYW5nZSkgeyBtX3Njcm9sbExheWVyRGlkQ2hhbmdlID0gc2Nyb2xsTGF5
ZXJEaWRDaGFuZ2U7IH0KKworICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogc2Nyb2xsaW5nU3RhdGVU
cmVlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7IH0KKworICAgIFNjcm9s
bGluZ1N0YXRlTm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQuZ2V0KCk7IH0K
KyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2Zp
cnN0Q2hpbGQuZ2V0KCk7IH0KKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5leHRTaWJsaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0U2libGluZy5nZXQoKTsgfQorCisgICAgdm9pZCBhcHBlbmRD
aGlsZChQYXNzUmVmUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4pOworICAgIFNjcm9sbGluZ1N0YXRl
Tm9kZSogdHJhdmVyc2VOZXh0KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBTY3JvbGxpbmdT
dGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9pZCBjbG9uZUNoaWxkTm9kZXMo
U2Nyb2xsaW5nU3RhdGVOb2RlKik7CisKKyAgICBTY3JvbGxpbmdTdGF0ZVRyZWUqIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1N0
YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisgICAgdm9pZCBzZXRGaXJz
dENoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSogZmlyc3RDaGlsZCkgeyBtX2ZpcnN0Q2hpbGQgPSBm
aXJzdENoaWxkOyB9CisgICAgdm9pZCBzZXROZXh0U2libGluZyhTY3JvbGxpbmdTdGF0ZU5vZGUq
IG5leHRTaWJsaW5nKSB7IG1fbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZzsgfQorCisgICAgUmVm
UHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gbV9wYXJlbnQ7CisgICAgUmVmUHRyPFNjcm9sbGluZ1N0
YXRlTm9kZT4gbV9maXJzdENoaWxkOworICAgIFJlZlB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IG1f
bmV4dFNpYmxpbmc7CisKKyAgICBib29sIG1fc2Nyb2xsTGF5ZXJEaWRDaGFuZ2U7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fcGxhdGZvcm1TY3Jv
bGxMYXllcjsKKyNlbmRpZgorCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nU3Rh
dGVOb2RlX2gKSW5kZXg6IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlLmNwcAkocmV2aXNpb24gMTI5MjQwKQkoZnJvbSBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlU3RhdGUuY3BwOjEyOTI0MCkKKysrIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmNwcAkocmV2aXNpb24gMTI5MjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
MTkgKzI0LDIyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9s
bGluZ1RyZWVTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
IgorCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAKICNpZiBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8U2Nyb2xs
aW5nVHJlZVN0YXRlPiBTY3JvbGxpbmdUcmVlU3RhdGU6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpj
cmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiBzdGF0ZVRyZWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKHN0YXRlVHJlZSkpOwogfQogCi1TY3JvbGxpbmdUcmVl
U3RhdGU6OlNjcm9sbGluZ1RyZWVTdGF0ZSgpCi0gICAgOiBtX2NoYW5nZWRQcm9wZXJ0aWVzKDAp
CitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHN0YXRlVHJlZSkKKyAgICA6IFNjcm9sbGluZ1N0YXRlTm9k
ZShzdGF0ZVRyZWUpCisgICAgLCBtX2NoYW5nZWRQcm9wZXJ0aWVzKDApCiAgICAgLCBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQoMCkKICAgICAsIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgwKQogICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShT
Y3JvbGxFbGFzdGljaXR5Tm9uZSkKQEAgLTQ4LDEzMCArNTEsMTYwIEBAIFNjcm9sbGluZ1RyZWVT
dGF0ZTo6U2Nyb2xsaW5nVHJlZVN0YXRlKCkKIHsKIH0KIAotU2Nyb2xsaW5nVHJlZVN0YXRlOjp+
U2Nyb2xsaW5nVHJlZVN0YXRlKCkKK1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVO
b2RlKQorICAgIDogU2Nyb2xsaW5nU3RhdGVOb2RlKHN0YXRlTm9kZSkKKyAgICAsIG1fY2hhbmdl
ZFByb3BlcnRpZXMoc3RhdGVOb2RlLT5jaGFuZ2VkUHJvcGVydGllcygpKQorICAgICwgbV92aWV3
cG9ydFJlY3Qoc3RhdGVOb2RlLT52aWV3cG9ydFJlY3QoKSkKKyAgICAsIG1fY29udGVudHNTaXpl
KHN0YXRlTm9kZS0+Y29udGVudHNTaXplKCkpCisgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291
bnQoc3RhdGVOb2RlLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCkpCisgICAgLCBtX3Nob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoc3RhdGVOb2RlLT5zaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkpCisgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KHN0YXRlTm9kZS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkK
KyAgICAsIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHN0YXRlTm9kZS0+dmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KCkpCisgICAgLCBtX2hhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHN0
YXRlTm9kZS0+aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAsIG1faGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHN0YXRlTm9kZS0+aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlKHN0YXRlTm9kZS0+aG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUoKSkKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKHN0YXRl
Tm9kZS0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCkpCisgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uKHN0YXRlTm9kZS0+cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSkKKyAgICAsIG1fc2Ny
b2xsT3JpZ2luKHN0YXRlTm9kZS0+c2Nyb2xsT3JpZ2luKCkpCit7Cit9CisKK1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6flNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpCiB7CiB9CiAK
LXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYg
dmlld3BvcnRSZWN0KQorUGFzc1JlZlB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6Y2xvbmVOb2RlKCkKK3sKKyAgICBSZWZQdHI8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlPiBjbG9uZSA9IGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUodGhpcykpOworICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CisgICAg
cmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKK30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OnNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCiB7CiAg
ICAgaWYgKG1fdmlld3BvcnRSZWN0ID09IHZpZXdwb3J0UmVjdCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV92aWV3cG9ydFJlY3QgPSB2aWV3cG9ydFJlY3Q7CiAgICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBWaWV3cG9ydFJlY3Q7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0No
YW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKK3ZvaWQgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgY29udGVu
dHNTaXplKQogewogICAgIGlmIChtX2NvbnRlbnRzU2l6ZSA9PSBjb250ZW50c1NpemUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOwogICAgIG1f
Y2hhbmdlZFByb3BlcnRpZXMgfD0gQ29udGVudHNTaXplOworICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdU
cmVlU3RhdGU6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgbm9uRmFz
dFNjcm9sbGFibGVSZWdpb24pCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbikKIHsKICAgICBpZiAobV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9PSBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9ub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbiA9IG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogICAgIG1fY2hhbmdlZFByb3BlcnRp
ZXMgfD0gTm9uRmFzdFNjcm9sbGFibGVSZWdpb247CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVT
dGF0ZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxl
ckNvdW50KQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKIHsKICAgICBpZiAo
bV93aGVlbEV2ZW50SGFuZGxlckNvdW50ID09IHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IHdoZWVsRXZlbnRI
YW5kbGVyQ291bnQ7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBXaGVlbEV2ZW50SGFuZGxl
ckNvdW50OworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGll
cyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMg
cmVhc29ucykKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFz
b25zIHJlYXNvbnMpCiB7CiAgICAgaWYgKG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCA9PSByZWFzb25zKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Nob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQgPSByZWFzb25zOwogICAgIG1f
Y2hhbmdlZFByb3BlcnRpZXMgfD0gU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZDsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRp
ZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIb3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhvcml6b250YWxTY3JvbGxF
bGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCiB7
CiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPT0gaG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkgPSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5
IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSkKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkpCiB7CiAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5
ID09IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV92
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSB2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHk7CiAgICAg
bV9jaGFuZ2VkUHJvcGVydGllcyB8PSBWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHk7CisgICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIo
Ym9vbCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpzZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Vu
YWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKQogewogICAgIGlmIChtX2hhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyID09IGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2hhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0gaGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXI7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBIYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFz
Q2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpz
ZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkVmVydGljYWxTY3Jv
bGxiYXIpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0SGFzRW5hYmxlZFZl
cnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQogewogICAg
IGlmIChtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9PSBoYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyID0gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIG1fY2hhbmdlZFByb3Bl
cnRpZXMgfD0gSGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgaG9y
aXpvbnRhbFNjcm9sbGJhck1vZGUpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSkKIHsKICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9PSBob3Jpem9u
dGFsU2Nyb2xsYmFyTW9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZSA9IGhvcml6b250YWxTY3JvbGxiYXJNb2RlOwogICAgIG1fY2hhbmdlZFByb3Bl
cnRpZXMgfD0gSG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFNjcm9sbGluZ1Ry
ZWVTdGF0ZTo6c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgdmVydGljYWxT
Y3JvbGxiYXJNb2RlKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKIHsK
ICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPT0gdmVydGljYWxTY3JvbGxiYXJNb2Rl
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZTsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFZlcnRpY2FsU2Ny
b2xsYmFyTW9kZTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3Bl
cnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRSZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pCit2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQogewogICAgIG1fcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24gPSByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKICAgICBtX2No
YW5nZWRQcm9wZXJ0aWVzIHw9IFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOworICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBT
Y3JvbGxpbmdUcmVlU3RhdGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xs
T3JpZ2luKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQogewogICAgIGlmIChtX3Njcm9sbE9yaWdp
biA9PSBzY3JvbGxPcmlnaW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2Nyb2xsT3JpZ2lu
ID0gc2Nyb2xsT3JpZ2luOwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2Nyb2xsT3JpZ2lu
OwotfQotCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRl
Ojpjb21taXQoKQotewotICAgIE93blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IHRyZWVTdGF0ZSA9
IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUoKnRoaXMpKTsKLSAgICBtX2NoYW5nZWRQ
cm9wZXJ0aWVzID0gMDsKLQotICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgpOworICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmgJKHJldmlzaW9uIDEyOTI0MCkJKGZyb20gcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmg6MTI5MjQwKQorKysgcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5oCShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MzIgKzIzLDI0IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBTY3JvbGxpbmdUcmVlU3RhdGVfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlU3RhdGVf
aAorI2lmbmRlZiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVfaAorI2RlZmluZSBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGVfaAogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
IAotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUaGUgU2Nyb2xsaW5nVHJlZVN0YXRlIG9iamVjdCBr
ZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBzY3JvbGxpbmcgcmVsYXRlZCBwcm9w
ZXJ0aWVzLgotLy8gV2hlbmV2ZXIgYW55IHByb3BlcnRpZXMgY2hhbmdlLCB0aGUgc2Nyb2xsaW5n
IGNvb3JkaW5hdG9yIHdpbGwgYmUgaW5mb3JtZWQgYW5kIHdpbGwgdXBkYXRlIHRoZSBzdGF0ZQot
Ly8gYW5kIHNjaGVkdWxlIGEgdGltZXIgdGhhdCB3aWxsIGNsb25lIHRoZSBuZXcgc3RhdGUgYW5k
IHNlbmQgaXQgb3ZlciB0byB0aGUgc2Nyb2xsaW5nIHRocmVhZCwgYXZvaWRpbmcgbG9ja2luZy4K
LS8vIEZJWE1FOiBPbmNlIHdlIHN1cHBvcnQgZmFzdCBzY3JvbGxpbmcgaW4gc3ViZnJhbWVzLCB0
aGlzIHdpbGwgaGF2ZSB0byBiZWNvbWUgYSB0cmVlLWxpa2Ugc3RydWN0dXJlLgotY2xhc3MgU2Ny
b2xsaW5nVHJlZVN0YXRlIHsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSA6IHB1
YmxpYyBTY3JvbGxpbmdTdGF0ZU5vZGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFNjcm9sbGluZ1RyZWVTdGF0ZT4gY3JlYXRlKCk7Ci0gICAgflNjcm9sbGluZ1RyZWVTdGF0ZSgp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gY3Jl
YXRlKFNjcm9sbGluZ1N0YXRlVHJlZSopOworICAgIHZpcnR1YWwgflNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSgpOwogCiAgICAgZW51bSBDaGFuZ2VkUHJvcGVydHkgewogICAgICAgICBWaWV3
cG9ydFJlY3QgPSAxIDw8IDAsCkBAIC02MywxMiArNTUsMTQgQEAgcHVibGljOgogICAgICAgICBI
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IDEgPDwgOSwKICAgICAgICAgVmVydGljYWxTY3JvbGxi
YXJNb2RlID0gMSA8PCAxMCwKICAgICAgICAgU2Nyb2xsT3JpZ2luID0gMSA8PCAxMSwKLSAgICAg
ICAgU2Nyb2xsTGF5ZXIgPSAxIDw8IDEyLAotICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
biA9IDEgPDwgMTMsCisgICAgICAgIFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uID0gMSA8PCAxMiwK
ICAgICB9OwogCi0gICAgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhbmdlZFByb3BlcnRpZXM7IH0KLSAgICB1bnNpZ25lZCBjaGFuZ2VkUHJvcGVydGllcygp
IGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRpZXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZU5vZGUoKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fY2hhbmdlZFByb3BlcnRpZXM7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYW5nZWRQcm9w
ZXJ0aWVzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZXNldENoYW5nZWRQcm9wZXJ0aWVzKCkgT1ZFUlJJREUgeyBtX2No
YW5nZWRQcm9wZXJ0aWVzID0gMDsgfQogCiAgICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0KICAgICB2b2lkIHNldFZpZXdwb3J0
UmVjdChjb25zdCBJbnRSZWN0Jik7CkBAIC0xMDMsMjAgKzk3LDE1IEBAIHB1YmxpYzoKICAgICBT
Y3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxTY3JvbGxiYXJNb2RlOyB9CiAgICAgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUo
U2Nyb2xsYmFyTW9kZSk7CiAKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVy
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKik7
Ci0KICAgICBjb25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRSZXF1ZXN0
ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwogCiAgICAgY29uc3QgSW50UG9pbnQm
IHNjcm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CiAgICAgdm9p
ZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmKTsKIAotICAgIC8vIENvcGllcyB0aGUg
Y3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNr
IGluIHRoZSBvcmlnaW5hbC4KLSAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gY29t
bWl0KCk7Ci0KIHByaXZhdGU6Ci0gICAgU2Nyb2xsaW5nVHJlZVN0YXRlKCk7CisgICAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSopOworICAgIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKIAogICAg
IHVuc2lnbmVkIG1fY2hhbmdlZFByb3BlcnRpZXM7CiAKQEAgLTE0MCwxNSArMTI5LDEwIEBAIHBy
aXZhdGU6CiAKICAgICBJbnRQb2ludCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOwogICAgIElu
dFBvaW50IG1fc2Nyb2xsT3JpZ2luOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0
cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXI7Ci0jZW5kaWYKLQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9M
TElORykKIAotI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVTdGF0ZV9oCisjZW5kaWYgLy8gU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorCisjaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlVHJlZT4gU2Nyb2xsaW5nU3RhdGVUcmVlOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgU2Nyb2xsaW5nU3RhdGVUcmVlKTsKK30KKworU2Nyb2xsaW5nU3RhdGVUcmVl
OjpTY3JvbGxpbmdTdGF0ZVRyZWUoKQorICAgIDogbV9yb290U3RhdGVOb2RlKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9oYXNDaGFuZ2VkUHJvcGVy
dGllcyhmYWxzZSkKK3sKK30KKworU2Nyb2xsaW5nU3RhdGVUcmVlOjp+U2Nyb2xsaW5nU3RhdGVU
cmVlKCkKK3sKK30KKworUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZ1N0
YXRlVHJlZTo6Y29tbWl0KCkKK3sKKyAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiB0cmVl
U3RhdGUgPSBTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTY3JvbGxp
bmdTdGF0ZU5vZGU+IHJvb3ROb2RlQ2xvbmUgPSBtX3Jvb3RTdGF0ZU5vZGUtPmNsb25lTm9kZSgp
OworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc2Nyb2xsaW5nUm9vdE5vZGUgPSBz
dGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqPihyb290Tm9kZUNsb25lLmdl
dCgpKTsKKyAgICB0cmVlU3RhdGUtPnNldFJvb3RTdGF0ZU5vZGUoc2Nyb2xsaW5nUm9vdE5vZGUp
OworICAgIHRyZWVTdGF0ZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CisKKyAgICAv
LyBTaW5jZSB3ZSdyZSBjb21taXR0aW5nIHRoZSBjbG9uZSBvZiB0aGUgdHJlZSwgd2UgY2FuIHJl
c2V0IGFsbCBvZiBvdXIgaW5kaWNhdG9ycyB0aGF0IHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkLgor
ICAgIG1faGFzQ2hhbmdlZFByb3BlcnRpZXMgPSBmYWxzZTsKKyAgICBmb3IgKFNjcm9sbGluZ1N0
YXRlTm9kZSogbm9kZVN0YXRlID0gbV9yb290U3RhdGVOb2RlLmdldCgpOyBub2RlU3RhdGU7IG5v
ZGVTdGF0ZSA9IG5vZGVTdGF0ZS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgLy8gV2UgbWln
aHQgd2FudCB0byBoYXZlIGNsb25lTm9kZSBkbyB0aGlzIGZvciB1cyBzbyB0aGF0IHdlIGRvbid0
IGhhdmUgdG8gdHJhdmVyc2UgdGhlIHRyZWUgdHdpY2UuCisgICAgICAgIG5vZGVTdGF0ZS0+c2V0
U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoZmFsc2UpOworICAgICAgICBub2RlU3RhdGUtPnJlc2V0Q2hh
bmdlZFByb3BlcnRpZXMoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJlZVN0YXRlLnJlbGVhc2Uo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1N0YXRlVHJlZV9oCisjZGVm
aW5lIFNjcm9sbGluZ1N0YXRlVHJlZV9oCisKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisgCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgCisvLyBUaGUgU2Nyb2xsaW5nU3RhdGVUcmVlIGlzIGEgdHJlZSB0aGF0IG1h
bmFnZWQgU2Nyb2xsaW5nU3RhdGVOb2Rlcy4gVGhlIG5vZGVzIGtlZXAgdHJhY2sgb2YgdGhlIGN1
cnJlbnQKKy8vIHN0YXRlIG9mIHNjcm9sbGluZyByZWxhdGVkIHByb3BlcnRpZXMuIFdoZW5ldmVy
IGFueSBwcm9wZXJ0aWVzIGNoYW5nZSwgdGhlIHNjcm9sbGluZyBjb29yZGluYXRvcgorLy8gd2ls
bCBiZSBpbmZvcm1lZCBhbmQgd2lsbCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9uZSB0
aGUgbmV3IHN0YXRlIHRyZWUgYW5kIHNlbmQgaXQgb3ZlciB0bworLy8gdGhlIHNjcm9sbGluZyB0
aHJlYWQsIGF2b2lkaW5nIGxvY2tpbmcuIAorCisvLyBGSVhNRTogUmlnaHQgbm93IHRoZSBzY3Jv
bGxpbmcgdGhyZWFkIG9ubHkgZXZlciBsb29rcyBhdCB0aGUgcm9vdCBub2RlLiBJbiB0aGUgZnV0
dXJlLCBpdCBzaG91bGQKKy8vIGxvb2sgYXQgdGhlIHdob2xlIHRyZWUgYW5kIGJ1aWxkIGEgU2Ny
b2xsaW5nVHJlZSB0aGF0IG1pbWljcyB0aGUgU2Nyb2xsaW5nU3RhdGVUcmVlLgorCisvLyBGSVhN
RTogUmlnaHQgbm93IHRoZXJlIGlzIG9ubHkgb25lIHR5cGUgb2YgU2Nyb2xsaW5nU3RhdGVOb2Rl
LCB3aGljaCBpcyB0aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLgorLy8gSXQgaXMgY3Vy
cmVudGx5IHVzZWQgZm9yIHRoZSBtYWluIGZyYW1lLCBidXQgaW4gdGhlIGZ1dHVyZSBpdCBzaG91
bGQgYmUgYWJsZSB0byBiZSB1c2VkIGZvciBzdWJmcmFtZXMKKy8vIGFuZCBvdmVyZmxvdyBhcmVh
cy4gSW4gdGhlIGZ1dHVyZSwgbW9yZSBjbGFzc2VzIHdpbGwgaW5oZXJpdCBmcm9tIFNjcm9sbGlu
Z1N0YXRlTm9kZSwgc3VjaCBhcworLy8gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUgYW5kIFNjcm9s
bGluZ1N0YXRlU3RpY2t5Tm9kZSBmb3IgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIGFuZCBzdGlj
a3kgcG9zaXRvbmVkCisvLyBvYmplY3RzLCByZXNwZWN0aXZlbHkuCisKK2NsYXNzIFNjcm9sbGlu
Z1N0YXRlVHJlZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVUcmVlPiBjcmVhdGUoKTsKKyAgICB+U2Nyb2xsaW5nU3RhdGVUcmVlKCk7CisgCisgICAgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgCisgICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0
cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBv
cmlnaW5hbC4KKyAgICAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IGNvbW1pdCgpOwor
IAorICAgIHZvaWQgc2V0SGFzQ2hhbmdlZFByb3BlcnRpZXMoYm9vbCBjaGFuZ2VkUHJvcGVydGll
cykgeyBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzID0gY2hhbmdlZFByb3BlcnRpZXM7IH0KKyAgICBi
b29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGFuZ2VkUHJv
cGVydGllczsgfQorCisgcHJpdmF0ZToKKyAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKCk7CisgCisg
ICAgdm9pZCBzZXRSb290U3RhdGVOb2RlKFBhc3NSZWZQdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlPiByb290U3RhdGVOb2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7
IH0KKyAKKyAgICBSZWZQdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0
ZU5vZGU7CisgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKwor
I2VuZGlmIC8vIFNjcm9sbGluZ1N0YXRlVHJlZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAkocmV2aXNpb24gMTI5MjQwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVO
b2RlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nU3RhdGVUcmVlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTE4LDIyICsxMTgsMjIgQEAgdm9pZCBTY3JvbGxpbmdUcmVlOjppbnZh
bGlkYXRlKCkKICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoZGVyZWZTY3JvbGxpbmdDb29yZGlu
YXRvciwgbV9zY3JvbGxpbmdDb29yZGluYXRvci5yZWxlYXNlKCkubGVha1JlZigpKSk7CiB9CiAK
LXZvaWQgU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlKFBhc3NPd25QdHI8U2Nyb2xs
aW5nVHJlZVN0YXRlPiBzY3JvbGxpbmdUcmVlU3RhdGUpCit2b2lkIFNjcm9sbGluZ1RyZWU6OmNv
bW1pdE5ld1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gc2Nyb2xsaW5n
U3RhdGVUcmVlKQogewogICAgIEFTU0VSVChTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVh
ZCgpKTsKIAotICAgIGlmIChzY3JvbGxpbmdUcmVlU3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkg
JiAoU2Nyb2xsaW5nVHJlZVN0YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50IHwgU2Nyb2xsaW5n
VHJlZVN0YXRlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiB8IFNjcm9sbGluZ1RyZWVTdGF0ZTo6
U2Nyb2xsTGF5ZXIpKSB7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpLT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
V2hlZWxFdmVudEhhbmRsZXJDb3VudCB8IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24pIHx8IHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpLT5zY3JvbGxMYXllckRpZENoYW5nZSgpKSB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2so
bV9tdXRleCk7CiAKLSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+Y2hhbmdlZFByb3Bl
cnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2Nyb2xsTGF5ZXJEaWRDaGFuZ2Uo
KSkKICAgICAgICAgICAgIG1fbWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24gPSBJbnRQb2ludCgpOwot
ICAgICAgICBpZiAoc2Nyb2xsaW5nVHJlZVN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Ny
b2xsaW5nVHJlZVN0YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50KQotICAgICAgICAgICAgbV9o
YXNXaGVlbEV2ZW50SGFuZGxlcnMgPSBzY3JvbGxpbmdUcmVlU3RhdGUtPndoZWVsRXZlbnRIYW5k
bGVyQ291bnQoKTsKLSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+Y2hhbmdlZFByb3Bl
cnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCi0g
ICAgICAgICAgICBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gc2Nyb2xsaW5nVHJlZVN0YXRl
LT5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpOworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVU
cmVlLT5yb290U3RhdGVOb2RlKCktPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OldoZWVsRXZlbnRIYW5kbGVyQ291bnQpCisgICAgICAgICAgICBtX2hh
c1doZWVsRXZlbnRIYW5kbGVycyA9IHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
LT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCisgICAgICAgICAgICBtX25v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2Rl
KCktPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCk7CiAgICAgfQogCi0gICAgbV9yb290Tm9kZS0+
dXBkYXRlKHNjcm9sbGluZ1RyZWVTdGF0ZS5nZXQoKSk7CisgICAgbV9yb290Tm9kZS0+dXBkYXRl
KHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKIAogICAgIHVwZGF0ZURlYnVn
Um9vdExheWVyKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBTY3JvbGxpbmdD
b29yZGluYXRvcjsKIGNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlOwotY2xhc3MgU2Nyb2xsaW5nVHJl
ZVN0YXRlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAvLyBUaGUgU2Nyb2xsaW5nVHJl
ZSBjbGFzcyBsaXZlcyBhbG1vc3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQg
YW5kIG1hbmFnZXMgdGhlCiAvLyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRo
ZSBwYWdlLiBJdCdzIGFsc28gcmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCBj
b21taXROZXdUcmVlU3RhdGUoUGFzc093blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+KTsKKyAgICB2
b2lkIGNvbW1pdE5ld1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4pOwog
CiAgICAgdm9pZCBzZXRNYWluRnJhbWVQaW5TdGF0ZShib29sIHBpbm5lZFRvVGhlTGVmdCwgYm9v
bCBwaW5uZWRUb1RoZVJpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcAkocmV2aXNpb24gMTI5MjQwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQogCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nU3RhdGVUcmVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsMzYgKzQ4LDM2
IEBAIFNjcm9sbGluZ1RyZWVOb2RlOjp+U2Nyb2xsaW5nVHJlZU5vZGUoKQogewogfQogCi12b2lk
IFNjcm9sbGluZ1RyZWVOb2RlOjp1cGRhdGUoU2Nyb2xsaW5nVHJlZVN0YXRlKiBzdGF0ZSkKK3Zv
aWQgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUq
IHN0YXRlKQogewotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGlu
Z1RyZWVTdGF0ZTo6Vmlld3BvcnRSZWN0KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRp
ZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KQogICAgICAg
ICBtX3ZpZXdwb3J0UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3QoKTsKIAotICAgIGlmIChzdGF0
ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6Q29udGVudHNTaXpl
KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6Q29udGVudHNTaXplKQogICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IHN0YXRl
LT5jb250ZW50c1NpemUoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQpCiAgICAgICAgIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZCA9IHN0YXRlLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KCk7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVl
U3RhdGU6Okhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdl
ZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkpCiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBz
dGF0ZS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6VmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQogICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IHN0YXRlLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHko
KTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVT
dGF0ZTo6SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgaWYgKHN0YXRlLT5jaGFu
Z2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhciA9IHN0YXRlLT5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOwogCi0gICAgaWYg
KHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0YXRlOjpIYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIpCisgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygp
ICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIYXNFbmFibGVkVmVydGljYWxTY3JvbGxi
YXIpCiAgICAgICAgIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gc3RhdGUtPmhhc0Vu
YWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOwogCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVy
dGllcygpICYgU2Nyb2xsaW5nVHJlZVN0YXRlOjpIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZSkKKyAg
ICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6Okhvcml6b250YWxTY3JvbGxiYXJNb2RlKQogICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJNb2RlID0gc3RhdGUtPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7CiAKLSAgICBpZiAo
c3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlZlcnRpY2Fs
U2Nyb2xsYmFyTW9kZSkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKICAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBzdGF0ZS0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7
CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3Rh
dGU6OlNjcm9sbE9yaWdpbikKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikKICAgICAgICAgbV9zY3Jv
bGxPcmlnaW4gPSBzdGF0ZS0+c2Nyb2xsT3JpZ2luKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkocmV2aXNpb24g
MTI5MjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsaW5nVHJlZTsKLWNs
YXNzIFNjcm9sbGluZ1RyZWVTdGF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZU5vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSopOwogICAgIHZp
cnR1YWwgflNjcm9sbGluZ1RyZWVOb2RlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNj
cm9sbGluZ1RyZWVTdGF0ZSopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUuY3BwCShyZXZpc2lvbiAx
MjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5oIgotCi0jaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
T3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRlOjpjcmVhdGUoKQot
ewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nVHJlZVN0YXRlKTsKLX0KLQotU2Ny
b2xsaW5nVHJlZVN0YXRlOjpTY3JvbGxpbmdUcmVlU3RhdGUoKQotICAgIDogbV9jaGFuZ2VkUHJv
cGVydGllcygwKQotICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KDApCi0gICAgLCBtX3No
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoMCkKLSAgICAsIG1faG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpCi0gICAgLCBtX3Zl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKLSAgICAsIG1faGFz
RW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpCi0gICAgLCBtX2hhc0VuYWJsZWRWZXJ0
aWNhbFNjcm9sbGJhcihmYWxzZSkKLSAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Ny
b2xsYmFyQXV0bykKLSAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8p
Ci17Ci19Ci0KLVNjcm9sbGluZ1RyZWVTdGF0ZTo6flNjcm9sbGluZ1RyZWVTdGF0ZSgpCi17Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVj
dCYgdmlld3BvcnRSZWN0KQotewotICAgIGlmIChtX3ZpZXdwb3J0UmVjdCA9PSB2aWV3cG9ydFJl
Y3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlld3BvcnRSZWN0ID0gdmlld3BvcnRSZWN0
OwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmlld3BvcnRSZWN0OwotfQotCi12b2lkIFNj
cm9sbGluZ1RyZWVTdGF0ZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRz
U2l6ZSkKLXsKLSAgICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNTaXplKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKLSAgICBtX2No
YW5nZWRQcm9wZXJ0aWVzIHw9IENvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVl
U3RhdGU6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNj
cm9sbGFibGVSZWdpb24pCi17Ci0gICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPT0g
bm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbm9uRmFz
dFNjcm9sbGFibGVSZWdpb24gPSBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKLSAgICBtX2NoYW5n
ZWRQcm9wZXJ0aWVzIHw9IE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwotfQotCi12b2lkIFNjcm9s
bGluZ1RyZWVTdGF0ZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2
ZW50SGFuZGxlckNvdW50KQotewotICAgIGlmIChtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQgPT0g
d2hlZWxFdmVudEhhbmRsZXJDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93aGVlbEV2
ZW50SGFuZGxlckNvdW50ID0gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKLSAgICBtX2NoYW5nZWRQ
cm9wZXJ0aWVzIHw9IFdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
VHJlZVN0YXRlOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgaWYgKG1fc2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9PSByZWFzb25zKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQgPSByZWFzb25zOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVl
U3RhdGU6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgaG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCi17Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkgPT0gaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBob3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQotewot
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNhbFNjcm9sbEVsYXN0
aWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5
ID0gdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0g
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6
c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9
PSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRIb3Jpem9udGFsU2Ny
b2xsYmFyOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxlZEhvcml6b250YWxT
Y3JvbGxiYXI7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIYXNFbmFibGVkVmVy
dGljYWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpCi17Ci0gICAg
aWYgKG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID09IGhhc0VuYWJsZWRWZXJ0aWNhbFNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNFbmFibGVkVmVydGljYWxTY3Jv
bGxiYXIgPSBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
VHJlZVN0YXRlOjpzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIGhvcml6
b250YWxTY3JvbGxiYXJNb2RlKQotewotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJNb2Rl
ID09IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hv
cml6b250YWxTY3JvbGxiYXJNb2RlID0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgbV9j
aGFuZ2VkUHJvcGVydGllcyB8PSBIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdUcmVlU3RhdGU6OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2Rl
IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKLXsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhck1v
ZGUgPT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLSAgICBtX2NoYW5n
ZWRQcm9wZXJ0aWVzIHw9IFZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLX0KLQotdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBy
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKLXsKLSAgICBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9u
ID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBS
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNl
dFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQotewotICAgIGlmICht
X3Njcm9sbE9yaWdpbiA9PSBzY3JvbGxPcmlnaW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2Nyb2xsT3JpZ2luID0gc2Nyb2xsT3JpZ2luOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0g
U2Nyb2xsT3JpZ2luOwotfQotCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xs
aW5nVHJlZVN0YXRlOjpjb21taXQoKQotewotICAgIE93blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+
IHRyZWVTdGF0ZSA9IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUoKnRoaXMpKTsKLSAg
ICBtX2NoYW5nZWRQcm9wZXJ0aWVzID0gMDsKLQotICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFz
ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmgJKHJldmlzaW9uIDEyOTI0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxpbmdUcmVlU3Rh
dGVfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlU3RhdGVfaAotCi0jaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNp
bmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhlIFNjcm9sbGluZ1RyZWVTdGF0ZSBv
YmplY3Qga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2Nyb2xsaW5nIHJlbGF0
ZWQgcHJvcGVydGllcy4KLS8vIFdoZW5ldmVyIGFueSBwcm9wZXJ0aWVzIGNoYW5nZSwgdGhlIHNj
cm9sbGluZyBjb29yZGluYXRvciB3aWxsIGJlIGluZm9ybWVkIGFuZCB3aWxsIHVwZGF0ZSB0aGUg
c3RhdGUKLS8vIGFuZCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9uZSB0aGUgbmV3IHN0
YXRlIGFuZCBzZW5kIGl0IG92ZXIgdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIGF2b2lkaW5nIGxv
Y2tpbmcuCi0vLyBGSVhNRTogT25jZSB3ZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIHN1YmZy
YW1lcywgdGhpcyB3aWxsIGhhdmUgdG8gYmVjb21lIGEgdHJlZS1saWtlIHN0cnVjdHVyZS4KLWNs
YXNzIFNjcm9sbGluZ1RyZWVTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
U2Nyb2xsaW5nVHJlZVN0YXRlPiBjcmVhdGUoKTsKLSAgICB+U2Nyb2xsaW5nVHJlZVN0YXRlKCk7
Ci0KLSAgICBlbnVtIENoYW5nZWRQcm9wZXJ0eSB7Ci0gICAgICAgIFZpZXdwb3J0UmVjdCA9IDEg
PDwgMCwKLSAgICAgICAgQ29udGVudHNTaXplID0gMSA8PCAxLAotICAgICAgICBOb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbiA9IDEgPDwgMiwKLSAgICAgICAgV2hlZWxFdmVudEhhbmRsZXJDb3VudCA9
IDEgPDwgMywKLSAgICAgICAgU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZCA9IDEgPDwgNCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSAxIDw8
IDUsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IDEgPDwgNiwKLSAgICAgICAg
SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIgPSAxIDw8IDcsCi0gICAgICAgIEhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhciA9IDEgPDwgOCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUgPSAxIDw8IDksCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IDEgPDwgMTAs
Ci0gICAgICAgIFNjcm9sbE9yaWdpbiA9IDEgPDwgMTEsCi0gICAgICAgIFNjcm9sbExheWVyID0g
MSA8PCAxMiwKLSAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEzLAotICAg
IH07Ci0KLSAgICBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9j
aGFuZ2VkUHJvcGVydGllczsgfQotICAgIHVuc2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQotCi0gICAgY29uc3QgSW50UmVjdCYg
dmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0KLSAgICB2b2lk
IHNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBjb25zdCBJbnRTaXplJiBj
b250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQotICAgIHZvaWQg
c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKLQotICAgIGNvbnN0IFJlZ2lvbiYgbm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uOyB9Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKLQotICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7IH0KLSAgICB2b2lkIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQodW5zaWduZWQpOwotCi0gICAgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMg
c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsgfQotICAg
IHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWlu
VGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eTsgfQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xs
RWxhc3RpY2l0eSk7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OyB9Ci0gICAg
dm9pZCBzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7Ci0KLSAg
ICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsgfQotICAgIHZvaWQgc2V0SGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOyB9
Ci0gICAgdm9pZCBzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBT
Y3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsgfQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUoU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xs
YmFyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOyB9Ci0gICAg
dm9pZCBzZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3Jv
bGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICBjb25zdCBJbnRQb2ludCYgcmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQ
b2ludCYpOwotCi0gICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsT3JpZ2luOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50
UG9pbnQmKTsKLQotICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVh
cnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KLSAgICBQYXNz
T3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gY29tbWl0KCk7Ci0KLXByaXZhdGU6Ci0gICAgU2Ny
b2xsaW5nVHJlZVN0YXRlKCk7Ci0KLSAgICB1bnNpZ25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOwot
Ci0gICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVjdDsKLSAgICBJbnRTaXplIG1fY29udGVudHNTaXpl
OwotCi0gICAgUmVnaW9uIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247Ci0KLSAgICB1bnNpZ25l
ZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7Ci0KLSAgICBNYWluVGhyZWFkU2Nyb2xsaW5nUmVh
c29ucyBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7Ci0KLSAg
ICBTY3JvbGxFbGFzdGljaXR5IG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7Ci0gICAgU2Ny
b2xsRWxhc3RpY2l0eSBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKLQotICAgIGJvb2wgbV9o
YXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBib29sIG1faGFzRW5hYmxlZFZlcnRp
Y2FsU2Nyb2xsYmFyOwotCi0gICAgU2Nyb2xsYmFyTW9kZSBtX2hvcml6b250YWxTY3JvbGxiYXJN
b2RlOwotICAgIFNjcm9sbGJhck1vZGUgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Ci0KLSAgICBJ
bnRQb2ludCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOwotICAgIEludFBvaW50IG1fc2Nyb2xs
T3JpZ2luOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVy
PiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXI7Ci0jZW5kaWYKLQotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2VuZGlm
IC8vIFNjcm9sbGluZ1RyZWVTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShy
ZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAK
ICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlNjcm9sbGluZ1RocmVhZC5oIgogI2ltcG9ydCAi
U2Nyb2xsaW5nVHJlZS5oIgotI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW1wb3J0
ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5o
PgogI2ltcG9ydCA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+
CkluZGV4OiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0JKHJl
dmlzaW9uIDEyOTI0MCkJKGZyb20gcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGF0
ZU1hYy5tbToxMjkyNDApCisrKyBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2Rl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0JKHJldmlzaW9u
IDEyOTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdT
dGF0ZU5vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDE4ICsyNCwyNSBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKKyNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZU5vZGUuaCIKKworI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRl
VHJlZS5oIgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QbGF0Zm9ybUxheWVyKiBTY3JvbGxpbmdUcmVlU3RhdGU6OnBsYXRmb3JtU2Ny
b2xsTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogU2Nyb2xsaW5nU3RhdGVOb2RlOjpwbGF0
Zm9ybVNjcm9sbExheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGF0Zm9ybVNjcm9sbExh
eWVyLmdldCgpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0U2Nyb2xsTGF5ZXIo
Y29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVO
b2RlOjpzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworICAg
IG1fcGxhdGZvcm1TY3JvbGxMYXllciA9IHBsYXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nU3RhdGVOb2RlOjpzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQogewogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtU2Nyb2xsTGF5ZXIgPSBncmFw
aGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDogbmlsOwogCkBAIC00
Myw3ICs1MCw4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTY3JvbGxMYXllcigKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9wbGF0Zm9ybVNjcm9sbExheWVyID0gcGxhdGZvcm1TY3Jv
bGxMYXllcjsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbExheWVyOworICAgIG1f
c2Nyb2xsTGF5ZXJEaWRDaGFuZ2UgPSB0cnVlOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5z
ZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVO
b2RlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVOb2RlTWFjLmgJKHJldmlzaW9uIDEyOTI0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBTY3JvbGxp
bmdUcmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Ny
b2xsaW5nVHJlZVN0YXRlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBPVkVSUklERTsKIAogICAg
IC8vIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIG1lbWJlciBmdW5jdGlvbnMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVOb2RlTWFjLm1tCShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKLSNp
bmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRpbGVDYWNoZS5oIgogI2lu
Y2x1ZGUgIldlYlRpbGVMYXllci5oIgpAQCAtNjIsMjYgKzYyLDI2IEBAIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjp+U2Nyb2xsaW5nVHJlZU5vZGUKICAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlk
YXRlKG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJl
ZU5vZGVNYWM6OnVwZGF0ZShTY3JvbGxpbmdUcmVlU3RhdGUqIHN0YXRlKQordm9pZCBTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUp
CiB7CiAgICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0ZSk7CiAKLSAgICBpZiAoc3Rh
dGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlNjcm9sbExheWVy
KQorICAgIGlmIChzdGF0ZS0+c2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoKSkKICAgICAgICAgbV9zY3Jv
bGxMYXllciA9IHN0YXRlLT5wbGF0Zm9ybVNjcm9sbExheWVyKCk7CiAKLSAgICBpZiAoc3RhdGUt
PmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlJlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uKQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pCiAgICAgICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHN0YXRlLT5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKTsKIAotICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIChTY3JvbGxpbmdUcmVlU3RhdGU6OlNj
cm9sbExheWVyIHwgU2Nyb2xsaW5nVHJlZVN0YXRlOjpDb250ZW50c1NpemUgfCBTY3JvbGxpbmdU
cmVlU3RhdGU6OlZpZXdwb3J0UmVjdCkpCisgICAgaWYgKHN0YXRlLT5zY3JvbGxMYXllckRpZENo
YW5nZSgpIHx8IHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6Q29udGVudHNTaXplIHwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpW
aWV3cG9ydFJlY3QpKQogICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3Np
dGlvbigpKTsKIAotICAgIGlmICgoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxp
bmdUcmVlU3RhdGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQp
KSB7CisgICAgaWYgKChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZCkpIHsKICAgICAgICAgdW5zaWduZWQgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgPSB0aGlz
LT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKICAgICAg
ICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKSB7CiAgICAgICAgICAgICAvLyBXZSdy
ZSB0cmFuc2l0aW9uaW5nIHRvIHRoZSBzbG93ICJ1cGRhdGUgc2Nyb2xsIGxheWVyIHBvc2l0aW9u
IG9uIHRoZSBtYWluIHRocmVhZCIgbW9kZS4KICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhl
IHByb2JhYmxlIG1haW4gdGhyZWFkIHNjcm9sbCBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNj
cm9sbCBsYXllciBwb3NpdGlvbi4KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3Bl
cnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pCisg
ICAgICAgICAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQogICAgICAgICAgICAgICAg
IG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS0+cmVxdWVzdGVkU2Ny
b2xsUG9zaXRpb24oKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIENHUG9p
bnQgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0KCkucG9zaXRpb247Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVN0YXRl
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlU3RhdGVNYWMubW0JKHJldmlzaW9uIDEyOTI0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKLQotI2lmIEVOQUJMRShUSFJFQURFRF9T
Q1JPTExJTkcpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1MYXllciogU2Nyb2xs
aW5nVHJlZVN0YXRlOjpwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wbGF0Zm9ybVNjcm9sbExheWVyLmdldCgpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0
ZTo6c2V0U2Nyb2xsTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsK
LSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyID0gZ3JhcGhpY3NMYXllciA/
IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbDsKLQotICAgIGlmIChtX3BsYXRm
b3JtU2Nyb2xsTGF5ZXIgPT0gcGxhdGZvcm1TY3JvbGxMYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wbGF0Zm9ybVNjcm9sbExheWVyID0gcGxhdGZvcm1TY3JvbGxMYXllcjsKLSAgICBt
X2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbExheWVyOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165245</attachid>
            <date>2012-09-21 22:30:41 -0700</date>
            <delta_ts>2012-09-24 21:16:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>96466</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTI5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wOS0yMSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3MzY1CisgICAgICAgIFNjcm9sbGluZ1RyZWVTdGF0ZSBuZWVk
cyB0byBiZSBhIHRyZWUgb2Ygbm9kZXMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNob3VsZCBub3QgY2hhbmdlIGFueSBiZWhhdmlv
ci4KKworICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBTY3JvbGxpbmdUcmVlU3RhdGUgYXR0
ZW1wdGVkIHRvIGNvbnRhaW4gYWxsIG9mIAorICAgICAgICB0aGUgc3RhdGUgaW5mb3JtYXRpb24g
bmVlZGVkIGZvciB0aGUgd2hvbGUgc2Nyb2xsaW5nIHRyZWUgaW4gb25lIAorICAgICAgICBvYmpl
Y3QuIEJ1dCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG5vZGVzIGluIHRo
ZSAKKyAgICAgICAgc2Nyb2xsaW5nIHRyZWUsIGEgc2luZ2xlIHN0YXRlIG9iamVjdCB3aWxsIG5v
dCBiZSBzdWZmaWNpZW50LiAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGUgc2hvdWxkIGFsc28gYmUg
cmVwcmVzZW50ZWQgYnkgYSB0cmVlLiBUaGlzIHBhdGNoIG1ha2VzIAorICAgICAgICBzY3JvbGxp
bmcgc3RhdGUgaW50byBhIHRyZWUuIFRoZSBvbGQgU2Nyb2xsaW5nVHJlZVN0YXRlIGNsYXNzIGhh
cyAKKyAgICAgICAgYmVjb21lIHRoZSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgY2xhc3Mg
c2luY2UgdGhlIG1ham9yaXR5IG9mIAorICAgICAgICB0aGUgY2xhc3MgcmVwcmVzZW50cyBzY3Jv
bGwgc3RhdGUgdGhhdCBpcyBzcGVjaWZpYyB0byBTY3JvbGxhYmxlQXJlYXMgCisgICAgICAgIGFu
ZCB3aWxsIG5vdCBiZSBhcHBsaWNhYmxlIHRvIGZpeGVkIG9yIHN0aWNreSBsYXllcnMuCisKKyAg
ICAgICAgU29tZSBuZXcgZmlsZXMgYW5kIHNvbWUgbW92ZWQgZmlsZXMuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEV2ZXJ5dGhpbmcgdGhh
dCB1c2VkIHRvIHJlZmVyIHRvIHRoZSBTY3JvbGxpbmdUcmVlU3RhdGUgc2hvdWxkIG5vdyAKKyAg
ICAgICAgcmVmZXIgdG8gdGhlIFNjcm9sbGluZ1N0YXRlVHJlZSBpbnN0ZWFkLiBSaWdodCBub3cs
IGFsbCBvZiB0aGlzIGNvZGUgCisgICAgICAgIGNvbnRpbnVlcyB0byBkZWFsIHdpdGggb25seSB0
aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLiBJbiB0aGUgZnV0dXJlLCAKKyAgICAgICAgaXQgd2ls
bCBoYXZlIHRvIGRlYWwgd2l0aCBhbGwgb2YgdGhlIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6CisKKyAgICAgICAgVGhpcyBp
cyBhIG5ldyBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgbm9kZXMgaW4gdGhlIAorICAgICAg
ICBTY3JvbGxpbmdTdGF0ZVRyZWUuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Y2xvbmVDaGlsZE5vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6dHJhdmVyc2VOZXh0KToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdTdGF0ZU5vZGU6OnNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpzY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlTm9kZTo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVOb2RlOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
Tm9kZTo6c2V0TmV4dFNpYmxpbmcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nU3RhdGVOb2RlTWFjLm1tOiBDb3BpZWQgZnJvbSBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVN0YXRlTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpwbGF0Zm9ybVNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisKKyAgICAgICAg
UmlnaHQgbm93LCB0aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlIGlzIHRoZSBvbmx5IHR5
cGUgb2YgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZS4gSW4gdGhlIGZ1dHVyZSB0aGVyZSB3
aWxsIGJlLCBmb3IgZXhhbXBsZSwgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlcyB0
aGF0IHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2Ygc3RhdGUgCisgICAgICAgIGluZm9ybWF0
aW9uIHRvIGtlZXAgdHJhY2sgb2YuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcDogQ29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVN0YXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp+U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6Y2xvbmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Vmlld3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsT3JpZ2luKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDog
Q29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmguCisgICAgICAg
IChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6On5TY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpjb21taXQpOgorCisgICAgICAgIFRoZSBT
Y3JvbGxpbmdTdGF0ZVRyZWUgbWFuYWdlcyB0aGUgbm9kZXMgaW4gdGhlIHRyZWUgdmlhIHRoZSBy
b290IAorICAgICAgICBub2RlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY2xvbmluZyB0aGUgdHJl
ZSBhbmQgc2VuZGluZyBpdCBvdmVyIHRvIAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpzZXRIYXNDaGFuZ2VkUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6Omhhc0NoYW5nZWRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZTo6c2V0Um9vdFN0YXRlTm9k
ZSk6CisKKyAgICAgICAgRXZlcnl0aGluZyB0aGF0IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFNjcm9s
bGluZ1RyZWVTdGF0ZSBzaG91bGQgbm93IAorICAgICAgICByZWZlciB0byB0aGUgU2Nyb2xsaW5n
U3RhdGVUcmVlIGluc3RlYWQuIFJpZ2h0IG5vdywgYWxsIG9mIHRoaXMgY29kZSAKKyAgICAgICAg
Y29udGludWVzIHRvIGRlYWwgd2l0aCBvbmx5IHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUuIElu
IHRoZSBmdXR1cmUsIAorICAgICAgICBpdCB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIGFsbCBvZiB0
aGUgbm9kZXMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjp1cGRhdGUpOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNjcm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZU5vZGVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVOb2RlTWFjKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKToKKworICAgICAgICBT
Y3JvbGxpbmdUcmVlU3RhdGUuY3BwIC0tPiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcDogUmVtb3Zl
ZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGUuaCAtLT4gU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlLmgKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUu
aDogUmVtb3ZlZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0gLS0+IFNjcm9s
bGluZ1N0YXRlTm9kZU1hYy5tbQorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU3RhdGVNYWMubW06IFJlbW92ZWQuCisKIDIwMTItMDktMjEgIEFtaSBGaXNjaG1hbiAg
PGZpc2NobWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBIVE1MTWVkaWFFbGVtZW50IGlzbid0
IGdhcmJhZ2UgY29sbGVjdGVkIGJldHdlZW4gZG9jdW1lbnQgcmVsb2FkcwpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsOSArNTExLDYgQEAKIAkJMUFBODc5OTAxMUNC
RTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1Z2lu
U3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxQUFBRERBMzE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERBMTE0REI0MDlG
MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi87IH07CiAJCTFBQUFEREE0MTREQjQwOUYw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJl
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFB
QUFEREJFMTREQzY0MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQUREQkMxNERDNjQwNjAw
QUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHAgKi87IH07Ci0JCTFBQUFEREJGMTREQzY0
MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREJEMTREQzY0MDYwMEFGNjRCMyAvKiBTY3Jv
bGxpbmdUcmVlU3RhdGUuaCAqLzsgfTsKLQkJMUFBQUREREExNERDNzRFQzAwQUY2NEIzIC8qIFNj
cm9sbGluZ1RyZWVTdGF0ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQUFEREQ4MTREQzc0RUMwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3Rh
dGVNYWMubW0gKi87IH07CiAJCTFBQUFEREUzMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUFBRERFMTE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwICovOyB9
OwogCQkxQUFBRERFNDE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREUyMTREQzhD
OEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oICovOyB9OwogCQkxQUFBRERFODE0REM4
REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERFNjE0REM4REY4MDBBRjY0QjMgLyog
U2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi87IH07CkBAIC0zMjk5LDYgKzMyOTYsMTMgQEAKIAkJ
OTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5QjAyRUMwRUEyREJDNDAwQzU0
NTcwIC8qIFdpZHRoSXRlcmF0b3IuY3BwICovOyB9OwogCQk5MzlCMDJFRjBFQTJEQkM0MDBDNTQ1
NzAgLyogV2lkdGhJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM5QjAyRUQwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuaCAq
LzsgfTsKIAkJOTNBMzhCNEIwRDBFNTgwODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBMzhCNEEwRDBF
NTgwODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwICovOyB9OworCQk5M0E3OUE5NDE2MENF
QjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTc5QThFMTYwQ0VCMjYwMDMxMEYwNSAvKiBT
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwICovOyB9OworCQk5M0E3OUE5NTE2MENFQjI2MDAzMTBGMDUg
LyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0E3OUE4RjE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVO
b2RlLmggKi87IH07CisJCTkzQTc5QTk2MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNBNzlBOTAxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5jcHAgKi87IH07CisJCTkzQTc5QTk3MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQTc5QTkxMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuaCAqLzsgfTsKKwkJOTNBNzlBOTgxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9s
bGluZ1N0YXRlVHJlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0E3OUE5MjE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmNw
cCAqLzsgfTsKKwkJOTNBNzlBOTkxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJl
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNzlB
OTMxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oICovOyB9OworCQk5M0E3
OUE5RjE2MEQwREVDMDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNzlBOUUxNjBEMERFQzAw
MzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSAqLzsgfTsKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC03NTgzLDkgKzc1ODcsNiBAQAogCQkxQUE4Nzk4RjExQ0JF
ODQ2MDAzQzY2NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGx1Z2luU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBQUREQTExNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBQUREQkMxNERDNjQwNjAwQUY2NEIzIC8q
IFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY3JvbGxpbmdUcmVlU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQUFBRERCRDE0REM2NDA2MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQUFBREREODE0REM3NEVDMDBBRjY0QjMgLyogU2Nyb2xs
aW5nVHJlZVN0YXRlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUFBRERFMTE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZU5vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFMjE0REM4QzhGMDBBRjY0QjMgLyog
U2Nyb2xsaW5nVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsaW5nVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTYx
NERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQ5Myw2ICsxMDQ5NCwxMyBAQAogCQk5MzlCMDJF
QzBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXaWR0aEl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTM5QjAyRUQwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lkdGhJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9y
Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0b3JD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNzlBOEUxNjBDRUIy
NjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0E3OUE4RjE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVO
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlTm9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE5MDE2MENFQjI2MDAzMTBG
MDUgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTc5QTkxMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzQTc5QTkyMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNzlBOTMxNjBDRUIyNjAwMzEw
RjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JvbGxpbmdTdGF0ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTNBNzlBOUUxNjBEMERFQzAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlTm9kZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCMkQ4MTUwRjk5MjBEMjAwNkFF
NkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
QjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyogQ29u
dGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNZW51
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU5Miw4ICsxNDYwMCwxMiBAQAog
CQkJCTFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8sCiAJCQkJ
MUFBQURERTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCAqLywKIAkJ
CQkxQUFBRERFMjE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLywKLQkJ
CQkxQUFBRERCQzE0REM2NDA2MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcCAqLywK
LQkJCQkxQUFBRERCRDE0REM2NDA2MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlLmggKi8s
CisJCQkJOTNBNzlBOEUxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5jcHAg
Ki8sCisJCQkJOTNBNzlBOEYxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5o
ICovLAorCQkJCTkzQTc5QTkwMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuY3BwICovLAorCQkJCTkzQTc5QTkxMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaCAqLywKKwkJCQk5M0E3OUE5MjE2MENFQjI2MDAzMTBGMDUg
LyogU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcCAqLywKKwkJCQk5M0E3OUE5MzE2MENFQjI2MDAzMTBG
MDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHNjcm9sbGlu
ZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDYwMiwxMSArMTQ2MTQsMTEgQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUFGNjJFRTMxNERBMjJB
NzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovLAorCQkJCTkzQTc5QTlF
MTYwRDBERUMwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFG
NjJGMjMxNERBRkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKIAkJCQkx
QTM1ODYyQTE1MjUyMjU0MDAyMkE2NTkgLyogU2Nyb2xsaW5nVHJlZU1hYy5tbSAqLywKIAkJCQkx
QUFBRERFNzE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCAqLywKIAkJ
CQkxQUFBRERFNjE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi8s
Ci0JCQkJMUFBQURERDgxNERDNzRFQzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZU1hYy5t
bSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTI0OTAxLDcgKzI0OTEzLDYgQEAKIAkJCQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyog
U2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQURERTQxNERDOEM4RjAwQUY2
NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFBRERFOTE0
REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBQUFEREJGMTREQzY0MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQzA5Qzg2MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RDZFMjYwOUFGOTQzNTAwRjU5NzU5IC8qIFNjcm9sbFZp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREQyMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFy
Y2hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1NzAsNiArMjU1ODEsOSBAQAogCQkJ
CUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkI5MkRGNEIxNUZFRDA4NzAwOTk0NDMzIC8qIENsaXBQYXRoT3BlcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0RjdCNEE2NjE1RkY2RDZBMDA2QjVGMjIgLyogUGxhdGZvcm1NZW1vcnlJ
bnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTc5QTk1MTYwQ0VCMjYwMDMx
MEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQTc5QTk3
MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTkzQTc5QTk5MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjgxMjIsOCArMjgxMzYsNiBAQAogCQkJCTFBMzU4NjJD
MTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBQUFEREU4MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVl
Tm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTFBQUFEREJFMTREQzY0MDcwMEFGNjRCMyAv
KiBTY3JvbGxpbmdUcmVlU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBQUREREExNERD
NzRFQzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUJDMjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDExMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NjY5LDYgKzI4NjgxLDEwIEBACiAJCQkJOTc3
RTJFMEUxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQ1MzczNTIxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTRGMUQxMUJGMTVGRjM3MjAwMDI2RTkwOCAvKiBQbGF0Zm9ybU1lbW9yeUluc3RydW1l
bnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0E3OUE5NDE2MENFQjI2MDAzMTBGMDUg
LyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTc5QTk2MTYw
Q0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTNBNzlBOTgxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJl
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0E3OUE5RjE2MEQwREVDMDAzMTBGMDUgLyogU2Ny
b2xsaW5nU3RhdGVOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShy
ZXZpc2lvbiAxMjkyOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAKICNpbmNs
dWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKKyNpbmNsdWRlICJT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpAQCAtNTYsOSArNTcsOSBAQCBTY3JvbGxpbmdDb29yZGluYXRvcjo6U2Ny
b2xsaW5nQ29vcmRpbmF0CiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fZm9yY2VNYWluVGhy
ZWFkU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZmFsc2UpCiAjaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKLSAgICAsIG1fc2Nyb2xsaW5nVHJlZVN0YXRlKFNjcm9sbGluZ1RyZWVTdGF0
ZTo6Y3JlYXRlKCkpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRy
ZWU6OmNyZWF0ZSgpKQogICAgICwgbV9zY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWU6OmNyZWF0
ZSh0aGlzKSkKLSAgICAsIG1fc2Nyb2xsaW5nVHJlZVN0YXRlQ29tbWl0dGVyVGltZXIodGhpcywg
JlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxpbmdUcmVlU3RhdGVDb21taXR0ZXJUaW1lckZp
cmVkKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQp
CiAjZW5kaWYKICAgICAsIG1fcHJpdmF0ZSgwKQogewpAQCAtNzAsNyArNzEsNyBAQCB2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpwYWdlRGVzdHJveWVkCiAgICAgbV9wYWdlID0gMDsKIAogI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGVDb21t
aXR0ZXJUaW1lci5zdG9wKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
ci5zdG9wKCk7CiAKICAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNjcm9sbGluZyB0cmVlIHdpbGwg
YnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBTY3JvbGxpbmdDb29yZGluYXRv
ciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3RzLgogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6aW52YWxpZGF0ZSwgbV9zY3JvbGxpbmdUcmVlLnJlbGVh
c2UoKSkpOwpAQCAtMjUzLDcgKzI1NCw3IEBAIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJl
cXVlc3RTY3JvbGwKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgbV9zY3JvbGxp
bmdUcmVlU3RhdGUtPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsK
KyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRSZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21t
aXQoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC00MTMsMzUgKzQxNCwzNyBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRGb3JjZU1haW5UCiAjaWYgRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdy
YXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQogewotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5z
ZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOwogICAgIHNjaGVkdWxl
VHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewotICAgIG1fc2Ny
b2xsaW5nVHJlZVN0YXRlLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOworICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKHJlZ2lvbik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAog
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3Jv
bGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzKQogewotICAgIG1fc2Nyb2xsaW5nVHJlZVN0
YXRlLT5zZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0SGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cik7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9s
bGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAg
bV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBh
cmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOwotICAgIG1fc2Nyb2xsaW5nVHJlZVN0
YXRlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNj
cm9sbGJhck1vZGUpOwotCi0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldFNjcm9sbE9yaWdp
bihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbik7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3Rh
dGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7Ci0gICAg
bV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNv
bnRlbnRzU2l6ZSk7CisgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24g
YW5kIGFsbCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MgbmVlZCB0bworICAg
IC8vIGhhbmRsZSBtb3JlIHRoYW4ganVzdCB0aGUgcm9vdCBub2RlLiAKKyAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0
aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxi
YXIpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhhc0Vu
YWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNh
bFNjcm9sbGJhcik7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+
c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZSk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+
c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlKTsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNl
dFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbik7CisgICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBh
cmFtZXRlcnMudmlld3BvcnRSZWN0KTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0
YXRlTm9kZSgpLT5zZXRDb250ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUp
OwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKIAogdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50
SGFuZGxlckNvdW50KQogewotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxF
dmVudEhhbmRsZXJDb3VudCk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIApA
QCAtNDUyLDQwICs0NTUsNDAgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2hvdWxk
VXBkYQogICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGxheWVyIHBvc2l0aW9uaW5nIGJ1Z3MuCiAg
ICAgaWYgKHJlYXNvbnMpCiAgICAgICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRp
b24oKTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChyZWFzb25zKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKHJlYXNvbnMpOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAK
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkKIHsK
LSAgICBpZiAobV9zY3JvbGxpbmdUcmVlU3RhdGVDb21taXR0ZXJUaW1lci5pc0FjdGl2ZSgpKQor
ICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9zY3JvbGxpbmdUcmVlU3RhdGUtPmhhc0NoYW5n
ZWRQcm9wZXJ0aWVzKCkpCisgICAgaWYgKCFtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdl
ZFByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxpbmdUcmVlU3Rh
dGVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNjcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Ny
b2xsaW5nQ29vcmRpbmF0b3I+KikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+
KikKIHsKICAgICBjb21taXRUcmVlU3RhdGUoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKQogewotICAgIGlmICghbV9zY3JvbGxpbmdU
cmVlU3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpCisgICAgaWYgKCFtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y29tbWl0VHJlZVN0YXRlKCk7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGVDb21taXR0ZXJUaW1l
ci5zdG9wKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7
CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbW1pdFRyZWVTdGF0ZSgpCiB7Ci0g
ICAgQVNTRVJUKG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKTsK
KyAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkp
OwogCi0gICAgT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gdHJlZVN0YXRlID0gbV9zY3JvbGxp
bmdUcmVlU3RhdGUtPmNvbW1pdCgpOworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IHRy
ZWVTdGF0ZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5jb21taXQoKTsKICAgICBTY3JvbGxpbmdU
aHJlYWQ6OmRpc3BhdGNoKGJpbmQoJlNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1RyZWVTdGF0ZSwg
bV9zY3JvbGxpbmdUcmVlLmdldCgpLCB0cmVlU3RhdGUucmVsZWFzZSgpKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaAkocmV2aXNpb24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QCBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGU7Ci1jbGFzcyBTY3JvbGxpbmdUcmVlU3RhdGU7
CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQogY2xhc3MgU2Nyb2xsaW5nVHJlZTsKQEAgLTE3NiwxMiArMTc2LDEyIEBAIHByaXZhdGU6
CiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKICAgICB2b2lkIHNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KCk7CiAKLSAgICB2b2lkIHNjcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVy
RmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+Kik7CisgICAgdm9pZCBzY3JvbGxpbmdT
dGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiop
OwogICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CiAKLSAgICBPd25QdHI8U2Nyb2xsaW5nVHJl
ZVN0YXRlPiBtX3Njcm9sbGluZ1RyZWVTdGF0ZTsKKyAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVU
cmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKICAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9z
Y3JvbGxpbmdUcmVlOwotICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGlu
Z1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyOworICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9y
PiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOwogI2VuZGlmCiAKICAgICBTY3Jv
bGxpbmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9k
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5oIgorCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5n
U3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSogc2Nyb2xsaW5nU3RhdGVUcmVlKQorICAgIDog
bV9zY3JvbGxpbmdTdGF0ZVRyZWUoc2Nyb2xsaW5nU3RhdGVUcmVlKQorICAgICwgbV9wYXJlbnQo
MCkKKyAgICAsIG1fZmlyc3RDaGlsZCgwKQorICAgICwgbV9uZXh0U2libGluZygwKQorICAgICwg
bV9zY3JvbGxMYXllckRpZENoYW5nZShmYWxzZSkKK3sKK30KKworU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlU3RhdGUpCisgICAg
OiBtX3Njcm9sbGluZ1N0YXRlVHJlZShub2RlU3RhdGUtPnNjcm9sbGluZ1N0YXRlVHJlZSgpKQor
ICAgICwgbV9wYXJlbnQobm9kZVN0YXRlLT5wYXJlbnQoKSkKKyAgICAsIG1fZmlyc3RDaGlsZChu
b2RlU3RhdGUtPmZpcnN0Q2hpbGQoKSkKKyAgICAsIG1fbmV4dFNpYmxpbmcobm9kZVN0YXRlLT5u
ZXh0U2libGluZygpKQorICAgICwgbV9zY3JvbGxMYXllckRpZENoYW5nZShub2RlU3RhdGUtPnNj
cm9sbExheWVyRGlkQ2hhbmdlKCkpCit7CisgICAgc2V0U2Nyb2xsTGF5ZXIobm9kZVN0YXRlLT5w
bGF0Zm9ybVNjcm9sbExheWVyKCkpOworfQorCitTY3JvbGxpbmdTdGF0ZU5vZGU6On5TY3JvbGxp
bmdTdGF0ZU5vZGUoKQoreworfQorCit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6YXBwZW5kQ2hp
bGQoU2Nyb2xsaW5nU3RhdGVOb2RlKiBjaGlsZE5vZGUpCit7CisgICAgY2hpbGROb2RlLT5zZXRQ
YXJlbnQodGhpcyk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0Q2hpbGQpIHsKKyAgICAgICAgbV9m
aXJzdENoaWxkID0gY2hpbGROb2RlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9y
IChTY3JvbGxpbmdTdGF0ZU5vZGUqIGV4aXN0aW5nQ2hpbGQgPSBmaXJzdENoaWxkKCk7IGV4aXN0
aW5nQ2hpbGQ7IGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLT5uZXh0U2libGluZygpKSB7
CisgICAgICAgIGlmICghZXhpc3RpbmdDaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAg
ICAgZXhpc3RpbmdDaGlsZC0+c2V0TmV4dFNpYmxpbmcoY2hpbGROb2RlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6Y2xvbmVDaGlsZE5vZGVzKFNjcm9sbGluZ1N0
YXRlTm9kZSogY2xvbmUpCit7CisgICAgZm9yIChTY3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9k
ZSA9IGZpcnN0Q2hpbGQoKTsgc3RhdGVOb2RlOyBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGUtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIGNsb25lLT5hcHBlbmRDaGlsZChzdGF0ZU5vZGUtPmNsb25lTm9k
ZSgpLmdldCgpKTsKK30KKworU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZU5vZGU6
OnRyYXZlcnNlTmV4dCgpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoY2hpbGQpCisgICAgICAgIHJldHVybiBjaGlsZDsKKwor
ICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7CisgICAgaWYg
KHNpYmxpbmcpCisgICAgICAgIHJldHVybiBzaWJsaW5nOworCisgICAgY29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlKiBzdGF0ZU5vZGUgPSB0aGlzOworICAgIHdoaWxlICghc2libGluZykgeworICAg
ICAgICBzdGF0ZU5vZGUgPSBzdGF0ZU5vZGUtPnBhcmVudCgpOworICAgICAgICBpZiAoIXN0YXRl
Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzaWJsaW5nID0gc3RhdGVOb2Rl
LT5uZXh0U2libGluZygpOworICAgIH0KKworICAgIGlmIChzdGF0ZU5vZGUpCisgICAgICAgIHJl
dHVybiBzaWJsaW5nOworCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
Tm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JvbGxpbmdTdGF0ZU5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdTdGF0ZU5vZGVfaAorCisj
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKKworY2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2RlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxpbmdTdGF0ZU5vZGUpOworCitwdWJsaWM6
CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSopOworICAgIHZpcnR1
YWwgflNjcm9sbGluZ1N0YXRlTm9kZSgpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFNjcm9s
bGluZ1N0YXRlTm9kZT4gY2xvbmVOb2RlKCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc0No
YW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY2hhbmdl
ZFByb3BlcnRpZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0Q2hhbmdlZFBy
b3BlcnRpZXMoKSA9IDA7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVy
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKik7
CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKik7CisKKyAgICBib29sIHNj
cm9sbExheWVyRGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllckRpZENoYW5n
ZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoYm9vbCBzY3JvbGxMYXllckRp
ZENoYW5nZSkgeyBtX3Njcm9sbExheWVyRGlkQ2hhbmdlID0gc2Nyb2xsTGF5ZXJEaWRDaGFuZ2U7
IH0KKworICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogc2Nyb2xsaW5nU3RhdGVUcmVlKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7IH0KKworICAgIFNjcm9sbGluZ1N0YXRlTm9k
ZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBTY3JvbGxpbmdTdGF0
ZU5vZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KKyAgICBT
Y3JvbGxpbmdTdGF0ZU5vZGUqIG5leHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U2li
bGluZzsgfQorCisgICAgdm9pZCBhcHBlbmRDaGlsZChTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKyAg
ICBTY3JvbGxpbmdTdGF0ZU5vZGUqIHRyYXZlcnNlTmV4dCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6
CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAgIHZvaWQg
Y2xvbmVDaGlsZE5vZGVzKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCisgICAgU2Nyb2xsaW5nU3Rh
dGVUcmVlKiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldFBh
cmVudChTY3JvbGxpbmdTdGF0ZU5vZGUqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQor
ICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChTY3JvbGxpbmdTdGF0ZU5vZGUqIGZpcnN0Q2hpbGQpIHsg
bV9maXJzdENoaWxkID0gZmlyc3RDaGlsZDsgfQorICAgIHZvaWQgc2V0TmV4dFNpYmxpbmcoU2Ny
b2xsaW5nU3RhdGVOb2RlKiBuZXh0U2libGluZykgeyBtX25leHRTaWJsaW5nID0gbmV4dFNpYmxp
bmc7IH0KKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbV9wYXJlbnQ7CisgICAgU2Nyb2xsaW5n
U3RhdGVOb2RlKiBtX2ZpcnN0Q2hpbGQ7CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBtX25leHRT
aWJsaW5nOworCisgICAgYm9vbCBtX3Njcm9sbExheWVyRGlkQ2hhbmdlOworCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xsTGF5
ZXI7CisjZW5kaWYKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1N0YXRlTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAJKHJldmlzaW9uIDEyOTI0MCkJKGZy
b20gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcDox
MjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5o
IgorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRlOjpj
cmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nVHJlZVN0YXRlKTsK
K30KKworU2Nyb2xsaW5nVHJlZVN0YXRlOjpTY3JvbGxpbmdUcmVlU3RhdGUoKQorICAgIDogbV9j
aGFuZ2VkUHJvcGVydGllcygwKQorICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KDApCisg
ICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoMCkKKyAg
ICAsIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpCisg
ICAgLCBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKKyAg
ICAsIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpCisgICAgLCBtX2hhc0Vu
YWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUoU2Nyb2xsYmFyQXV0bykKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9s
bGJhckF1dG8pCit7Cit9CisKK1Njcm9sbGluZ1RyZWVTdGF0ZTo6flNjcm9sbGluZ1RyZWVTdGF0
ZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3cG9ydFJlY3QoY29u
c3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQoreworICAgIGlmIChtX3ZpZXdwb3J0UmVjdCA9PSB2
aWV3cG9ydFJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlld3BvcnRSZWN0ID0gdmll
d3BvcnRSZWN0OworICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmlld3BvcnRSZWN0OworfQor
Cit2b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNTaXpl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsK
KyAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IENvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlU3RhdGU6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYg
bm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCit7CisgICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24gPT0gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKKyAg
ICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25l
ZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQoreworICAgIGlmIChtX3doZWVsRXZlbnRIYW5kbGVy
Q291bnQgPT0gd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV93aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKKyAgICBt
X2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCit7CisgICAgaWYg
KG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9PSByZWFzb25z
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQgPSByZWFzb25zOworICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlU3RhdGU6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0
aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCit7CisgICAgaWYgKG1faG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkgPT0gaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBob3Jpem9udGFs
U2Nyb2xsRWxhc3RpY2l0eTsKKyAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5OworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5KQoreworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmVydGljYWxTY3JvbGxF
bGFzdGljaXR5ID0gdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OworICAgIG1fY2hhbmdlZFByb3Bl
cnRpZXMgfD0gVmVydGljYWxTY3JvbGxFbGFzdGljaXR5OworfQorCit2b2lkIFNjcm9sbGluZ1Ry
ZWVTdGF0ZTo6c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcikKK3sKKyAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhciA9PSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRIb3Jp
em9udGFsU2Nyb2xsYmFyOworICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXI7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIp
Cit7CisgICAgaWYgKG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID09IGhhc0VuYWJsZWRW
ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNFbmFibGVkVmVy
dGljYWxTY3JvbGxiYXIgPSBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7CisgICAgbV9jaGFu
Z2VkUHJvcGVydGllcyB8PSBIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJN
b2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKQoreworICAgIGlmIChtX2hvcml6b250YWxTY3Jv
bGxiYXJNb2RlID09IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7
CisgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKK30K
Kwordm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3Jv
bGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKK3sKKyAgICBpZiAobV92ZXJ0aWNhbFNj
cm9sbGJhck1vZGUgPT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKKyAg
ICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKK30KKwordm9p
ZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKK3sKKyAgICBtX3JlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247CisgICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVl
U3RhdGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQorewor
ICAgIGlmIChtX3Njcm9sbE9yaWdpbiA9PSBzY3JvbGxPcmlnaW4pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc2Nyb2xsT3JpZ2luID0gc2Nyb2xsT3JpZ2luOworICAgIG1fY2hhbmdlZFByb3Bl
cnRpZXMgfD0gU2Nyb2xsT3JpZ2luOworfQorCitQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0
ZT4gU2Nyb2xsaW5nVHJlZVN0YXRlOjpjb21taXQoKQoreworICAgIE93blB0cjxTY3JvbGxpbmdU
cmVlU3RhdGU+IHRyZWVTdGF0ZSA9IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUoKnRo
aXMpKTsKKyAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzID0gMDsKKworICAgIHJldHVybiB0cmVlU3Rh
dGUucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQs
MjIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJl
ZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCisKKyNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxTY3JvbGxpbmdUcmVl
U3RhdGU+IFNjcm9sbGluZ1RyZWVTdGF0ZTo6Y3JlYXRlKCkKK093blB0cjxTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU+IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKFNjcm9s
bGluZ1N0YXRlVHJlZSogc3RhdGVUcmVlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Ny
b2xsaW5nVHJlZVN0YXRlKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZShzdGF0ZVRyZWUpKTsKIH0KIAotU2Nyb2xsaW5nVHJlZVN0YXRlOjpTY3Jv
bGxpbmdUcmVlU3RhdGUoKQotICAgIDogbV9jaGFuZ2VkUHJvcGVydGllcygwKQorU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5n
U3RhdGVUcmVlKiBzdGF0ZVRyZWUpCisgICAgOiBTY3JvbGxpbmdTdGF0ZU5vZGUoc3RhdGVUcmVl
KQorICAgICwgbV9jaGFuZ2VkUHJvcGVydGllcygwKQogICAgICwgbV93aGVlbEV2ZW50SGFuZGxl
ckNvdW50KDApCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQoMCkKICAgICAsIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmUpCkBAIC00OCwxMzAgKzUxLDE2MCBAQCBTY3JvbGxpbmdUcmVlU3RhdGU6OlNjcm9s
bGluZ1RyZWVTdGF0ZSgpCiB7CiB9CiAKLVNjcm9sbGluZ1RyZWVTdGF0ZTo6flNjcm9sbGluZ1Ry
ZWVTdGF0ZSgpCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZSkKKyAgICA6
IFNjcm9sbGluZ1N0YXRlTm9kZShzdGF0ZU5vZGUpCisgICAgLCBtX2NoYW5nZWRQcm9wZXJ0aWVz
KHN0YXRlTm9kZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAsIG1fdmlld3BvcnRSZWN0KHN0
YXRlTm9kZS0+dmlld3BvcnRSZWN0KCkpCisgICAgLCBtX2NvbnRlbnRzU2l6ZShzdGF0ZU5vZGUt
PmNvbnRlbnRzU2l6ZSgpKQorICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KHN0YXRlTm9k
ZS0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpKQorICAgICwgbV9zaG91bGRVcGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKHN0YXRlTm9kZS0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eShzdGF0ZU5vZGUtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpCisgICAgLCBtX3Zl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzdGF0ZU5vZGUtPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eSgpKQorICAgICwgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzdGF0ZU5vZGUtPmhh
c0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgLCBtX2hhc0VuYWJsZWRWZXJ0aWNh
bFNjcm9sbGJhcihzdGF0ZU5vZGUtPmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzdGF0ZU5vZGUtPmhvcml6b250YWxTY3JvbGxi
YXJNb2RlKCkpCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzdGF0ZU5vZGUtPnZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSgpKQorICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzdGF0
ZU5vZGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpCisgICAgLCBtX3Njcm9sbE9yaWdpbihz
dGF0ZU5vZGUtPnNjcm9sbE9yaWdpbigpKQoreworfQorCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6On5TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKQogewogfQogCi12b2lkIFNjcm9s
bGluZ1RyZWVTdGF0ZTo6c2V0Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVj
dCkKK1Bhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OmNsb25lTm9kZSgpCit7CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT4gY2xvbmUgPSBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKHRo
aXMpKTsKKyAgICBjbG9uZUNoaWxkTm9kZXMoY2xvbmUuZ2V0KCkpOworICAgIHJldHVybiBjbG9u
ZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRW
aWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewogICAgIGlmIChtX3Zp
ZXdwb3J0UmVjdCA9PSB2aWV3cG9ydFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdmll
d3BvcnRSZWN0ID0gdmlld3BvcnRSZWN0OwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmll
d3BvcnRSZWN0OworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVy
dGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldENvbnRlbnRzU2l6
ZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKIHsK
ICAgICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNTaXplKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IENvbnRlbnRzU2l6ZTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFz
Q2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCiB7CiAg
ICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPT0gbm9uRmFzdFNjcm9sbGFibGVSZWdp
b24pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFu
Z2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3Zv
aWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAgICAgaWYgKG1fd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCA9PSB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQgPSB3aGVlbEV2ZW50SGFuZGxlckNvdW50
OwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gV2hlZWxFdmVudEhhbmRsZXJDb3VudDsKKyAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCit2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25z
KQogewogICAgIGlmIChtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQgPT0gcmVhc29ucykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkID0gcmVhc29uczsKICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7Cisg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwog
fQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSkKK3ZvaWQgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShT
Y3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KQogewogICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID09IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0g
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0
SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRl
OjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KQogewogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5ID0gdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwogICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgfD0gVmVydGljYWxTY3JvbGxFbGFzdGljaXR5OworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzRW5h
YmxlZEhvcml6b250YWxTY3JvbGxiYXIpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkSG9yaXpv
bnRhbFNjcm9sbGJhcikKIHsKICAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
ciA9PSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRIb3Jpem9udGFs
U2Nyb2xsYmFyOwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXI7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9w
ZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SGFzRW5hYmxl
ZFZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQordm9p
ZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9s
bGJhcihib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcikKIHsKICAgICBpZiAobV9oYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXIgPT0gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0
SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRl
OjpzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhvcml6b250
YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpCiB7
CiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPT0gaG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUg
PSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhv
cml6b250YWxTY3JvbGxiYXJNb2RlOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXND
aGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNl
dFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSkKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRWZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUpCiB7CiAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXJNb2RlID09IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGU7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBWZXJ0aWNhbFNjcm9sbGJhck1vZGU7
CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQordm9pZCBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKIHsKICAgICBtX3JlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247CiAgICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJl
ZVN0YXRlOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbikKK3Zv
aWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50
UG9pbnQmIHNjcm9sbE9yaWdpbikKIHsKICAgICBpZiAobV9zY3JvbGxPcmlnaW4gPT0gc2Nyb2xs
T3JpZ2luKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Njcm9sbE9yaWdpbiA9IHNjcm9sbE9y
aWdpbjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbE9yaWdpbjsKLX0KLQotUGFz
c093blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IFNjcm9sbGluZ1RyZWVTdGF0ZTo6Y29tbWl0KCkK
LXsKLSAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiB0cmVlU3RhdGUgPSBhZG9wdFB0cihu
ZXcgU2Nyb2xsaW5nVHJlZVN0YXRlKCp0aGlzKSk7Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyA9
IDA7Ci0KLSAgICByZXR1cm4gdHJlZVN0YXRlLnJlbGVhc2UoKTsKKyAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxMjkyNDAp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTdGF0ZS5o
OjEyOTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTY3JvbGxpbmdUcmVlU3RhdGVfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVl
U3RhdGVfaAorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgi
CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRv
ci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVGhlIFNjcm9sbGluZ1RyZWVTdGF0ZSBvYmplY3Qga2VlcHMgdHJhY2sgb2YgdGhlIGN1
cnJlbnQgc3RhdGUgb2Ygc2Nyb2xsaW5nIHJlbGF0ZWQgcHJvcGVydGllcy4KKy8vIFdoZW5ldmVy
IGFueSBwcm9wZXJ0aWVzIGNoYW5nZSwgdGhlIHNjcm9sbGluZyBjb29yZGluYXRvciB3aWxsIGJl
IGluZm9ybWVkIGFuZCB3aWxsIHVwZGF0ZSB0aGUgc3RhdGUKKy8vIGFuZCBzY2hlZHVsZSBhIHRp
bWVyIHRoYXQgd2lsbCBjbG9uZSB0aGUgbmV3IHN0YXRlIGFuZCBzZW5kIGl0IG92ZXIgdG8gdGhl
IHNjcm9sbGluZyB0aHJlYWQsIGF2b2lkaW5nIGxvY2tpbmcuCisvLyBGSVhNRTogT25jZSB3ZSBz
dXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIHN1YmZyYW1lcywgdGhpcyB3aWxsIGhhdmUgdG8gYmVj
b21lIGEgdHJlZS1saWtlIHN0cnVjdHVyZS4KK2NsYXNzIFNjcm9sbGluZ1RyZWVTdGF0ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiBjcmVhdGUo
KTsKKyAgICB+U2Nyb2xsaW5nVHJlZVN0YXRlKCk7CisKKyAgICBlbnVtIENoYW5nZWRQcm9wZXJ0
eSB7CisgICAgICAgIFZpZXdwb3J0UmVjdCA9IDEgPDwgMCwKKyAgICAgICAgQ29udGVudHNTaXpl
ID0gMSA8PCAxLAorICAgICAgICBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IDEgPDwgMiwKKyAg
ICAgICAgV2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDEgPDwgMywKKyAgICAgICAgU2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9IDEgPDwgNCwKKyAgICAgICAgSG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSAxIDw8IDUsCisgICAgICAgIFZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eSA9IDEgPDwgNiwKKyAgICAgICAgSGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxi
YXIgPSAxIDw8IDcsCisgICAgICAgIEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IDEgPDwg
OCwKKyAgICAgICAgSG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSAxIDw8IDksCisgICAgICAgIFZl
cnRpY2FsU2Nyb2xsYmFyTW9kZSA9IDEgPDwgMTAsCisgICAgICAgIFNjcm9sbE9yaWdpbiA9IDEg
PDwgMTEsCisgICAgICAgIFNjcm9sbExheWVyID0gMSA8PCAxMiwKKyAgICAgICAgUmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEzLAorICAgIH07CisKKyAgICBib29sIGhhc0NoYW5nZWRQ
cm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQorICAgIHVu
c2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVy
dGllczsgfQorCisgICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydFJlY3Q7IH0KKyAgICB2b2lkIHNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRzU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNp
emUmKTsKKworICAgIGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKSBjb25z
dCB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOyB9CisgICAgdm9pZCBzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKworICAgIHVuc2lnbmVkIHdoZWVs
RXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRXZlbnRIYW5kbGVyQ291
bnQ7IH0KKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOworCisg
ICAgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsgfQorICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisK
KyAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsgfQorICAgIHZvaWQgc2V0SG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7CisKKyAgICBTY3JvbGxF
bGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5OyB9CisgICAgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0
aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7CisKKyAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cjsgfQorICAgIHZvaWQgc2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7CisK
KyAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgdm9pZCBzZXRIYXNFbmFibGVkVmVy
dGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsgfQor
ICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7CisKKyAg
ICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVydGljYWxTY3JvbGxiYXJNb2RlOyB9CisgICAgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbGJhck1v
ZGUoU2Nyb2xsYmFyTW9kZSk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExh
eWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVy
Kik7CisKKyAgICBjb25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRSZXF1
ZXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworCisgICAgY29uc3QgSW50UG9p
bnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CisgICAg
dm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIENvcGllcyB0
aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBt
YXNrIGluIHRoZSBvcmlnaW5hbC4KKyAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4g
Y29tbWl0KCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZVN0YXRlKCk7CisKKyAgICB1
bnNpZ25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOworCisgICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVj
dDsKKyAgICBJbnRTaXplIG1fY29udGVudHNTaXplOworCisgICAgUmVnaW9uIG1fbm9uRmFzdFNj
cm9sbGFibGVSZWdpb247CisKKyAgICB1bnNpZ25lZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7
CisKKyAgICBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyBtX3Nob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7CisKKyAgICBTY3JvbGxFbGFzdGljaXR5IG1faG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHk7CisgICAgU2Nyb2xsRWxhc3RpY2l0eSBtX3ZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eTsKKworICAgIGJvb2wgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cjsKKyAgICBib29sIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgU2Nyb2xs
YmFyTW9kZSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgIFNjcm9sbGJhck1vZGUgbV92
ZXJ0aWNhbFNjcm9sbGJhck1vZGU7CisKKyAgICBJbnRQb2ludCBtX3JlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uOworICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXI7Cisj
ZW5kaWYKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFRIUkVBREVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVTdGF0ZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTI5MjQwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDMyICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgU2Nyb2xsaW5nVHJlZVN0YXRlX2gKLSNkZWZpbmUgU2Ny
b2xsaW5nVHJlZVN0YXRlX2gKKyNpZm5kZWYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlX2gK
KyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlX2gKIAogI2lmIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNlbmRpZgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIFRoZSBTY3JvbGxpbmdUcmVlU3RhdGUgb2JqZWN0IGtlZXBzIHRyYWNrIG9mIHRo
ZSBjdXJyZW50IHN0YXRlIG9mIHNjcm9sbGluZyByZWxhdGVkIHByb3BlcnRpZXMuCi0vLyBXaGVu
ZXZlciBhbnkgcHJvcGVydGllcyBjaGFuZ2UsIHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3Igd2ls
bCBiZSBpbmZvcm1lZCBhbmQgd2lsbCB1cGRhdGUgdGhlIHN0YXRlCi0vLyBhbmQgc2NoZWR1bGUg
YSB0aW1lciB0aGF0IHdpbGwgY2xvbmUgdGhlIG5ldyBzdGF0ZSBhbmQgc2VuZCBpdCBvdmVyIHRv
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCBhdm9pZGluZyBsb2NraW5nLgotLy8gRklYTUU6IE9uY2Ug
d2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBzdWJmcmFtZXMsIHRoaXMgd2lsbCBoYXZlIHRv
IGJlY29tZSBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUuCi1jbGFzcyBTY3JvbGxpbmdUcmVlU3RhdGUg
eworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlIDogcHVibGljIFNjcm9sbGluZ1N0
YXRlTm9kZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0
YXRlPiBjcmVhdGUoKTsKLSAgICB+U2Nyb2xsaW5nVHJlZVN0YXRlKCk7CisgICAgc3RhdGljIE93
blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IGNyZWF0ZShTY3JvbGxpbmdTdGF0ZVRy
ZWUqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKTsKIAogICAg
IGVudW0gQ2hhbmdlZFByb3BlcnR5IHsKICAgICAgICAgVmlld3BvcnRSZWN0ID0gMSA8PCAwLApA
QCAtNjMsMTIgKzU2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgSG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUgPSAxIDw8IDksCiAgICAgICAgIFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IDEgPDwgMTAsCiAg
ICAgICAgIFNjcm9sbE9yaWdpbiA9IDEgPDwgMTEsCi0gICAgICAgIFNjcm9sbExheWVyID0gMSA8
PCAxMiwKLSAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEzLAorICAgICAg
ICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiA9IDEgPDwgMTIsCiAgICAgfTsKIAotICAgIGJvb2wg
aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVz
OyB9Ci0gICAgdW5zaWduZWQgY2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2No
YW5nZWRQcm9wZXJ0aWVzOyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRl
Tm9kZT4gY2xvbmVOb2RlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdl
ZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVz
OyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRpZXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRDaGFuZ2VkUHJvcGVydGllcygpIE9WRVJSSURFIHsgbV9jaGFuZ2VkUHJvcGVydGllcyA9IDA7
IH0KIAogICAgIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRSZWN0OyB9CiAgICAgdm9pZCBzZXRWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYp
OwpAQCAtMTAzLDIwICs5OCwxNSBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNh
bFNjcm9sbGJhck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsg
fQogICAgIHZvaWQgc2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUpOwogCi0g
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1TY3JvbGxMYXllcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0U2Nyb2xsTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciopOwotCiAgICAgY29uc3QgSW50UG9p
bnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKTsKIAogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbE9yaWdpbjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNv
bnN0IEludFBvaW50Jik7CiAKLSAgICAvLyBDb3BpZXMgdGhlIGN1cnJlbnQgdHJlZSBzdGF0ZSBh
bmQgY2xlYXJzIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMgbWFzayBpbiB0aGUgb3JpZ2luYWwuCi0g
ICAgUGFzc093blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IGNvbW1pdCgpOwotCiBwcml2YXRlOgot
ICAgIFNjcm9sbGluZ1RyZWVTdGF0ZSgpOworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZShTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUo
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAKICAgICB1bnNpZ25lZCBtX2NoYW5nZWRQ
cm9wZXJ0aWVzOwogCkBAIC0xNDAsMTUgKzEzMCwxMCBAQCBwcml2YXRlOgogCiAgICAgSW50UG9p
bnQgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKICAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdp
bjsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9w
bGF0Zm9ybVNjcm9sbExheWVyOwotI2VuZGlmCi0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAKLSNlbmRpZiAvLyBT
Y3JvbGxpbmdUcmVlU3RhdGVfaAorI2VuZGlmIC8vIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdTdGF0ZVRyZWUuaCIKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGlu
Z1N0YXRlVHJlZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGlu
Z1N0YXRlVHJlZSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlVHJlZTo6U2Nyb2xsaW5nU3RhdGVUcmVl
KCkKKyAgICA6IG1fcm9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNy
ZWF0ZSh0aGlzKSkKKyAgICAsIG1faGFzQ2hhbmdlZFByb3BlcnRpZXMoZmFsc2UpCit7Cit9CisK
K1Njcm9sbGluZ1N0YXRlVHJlZTo6flNjcm9sbGluZ1N0YXRlVHJlZSgpCit7Cit9CisKK1Bhc3NP
d25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBTY3JvbGxpbmdTdGF0ZVRyZWU6OmNvbW1pdCgpCit7
CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRlID0gU2Nyb2xsaW5nU3Rh
dGVUcmVlOjpjcmVhdGUoKTsKKyAgICB0cmVlU3RhdGUtPnNldFJvb3RTdGF0ZU5vZGUoc3RhdGlj
X3BvaW50ZXJfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KG1fcm9vdFN0YXRlTm9k
ZS0+Y2xvbmVOb2RlKCkpKTsKKyAgICB0cmVlU3RhdGUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVz
KHRydWUpOworICAgIAorICAgIC8vIFNpbmNlIHdlJ3JlIGNvbW1pdHRpbmcgdGhlIGNsb25lIG9m
IHRoZSB0cmVlLCB3ZSBjYW4gcmVzZXQgYWxsIG9mIG91ciBpbmRpY2F0b3JzIHRoYXQgcHJvcGVy
dGllcyBoYXZlIGNoYW5nZWQuCisgICAgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGZhbHNlOwor
ICAgIGZvciAoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlU3RhdGUgPSBtX3Jvb3RTdGF0ZU5vZGUu
Z2V0KCk7IG5vZGVTdGF0ZTsgbm9kZVN0YXRlID0gbm9kZVN0YXRlLT50cmF2ZXJzZU5leHQoKSkg
eworICAgICAgICAvLyBXZSBtaWdodCB3YW50IHRvIGhhdmUgY2xvbmVOb2RlIGRvIHRoaXMgZm9y
IHVzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0aGUgdHJlZSB0d2ljZS4KKyAg
ICAgICAgbm9kZVN0YXRlLT5zZXRTY3JvbGxMYXllckRpZENoYW5nZShmYWxzZSk7CisgICAgICAg
IG5vZGVTdGF0ZS0+cmVzZXRDaGFuZ2VkUHJvcGVydGllcygpOworICAgIH0KKworICAgIHJldHVy
biB0cmVlU3RhdGUucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
aW5nU3RhdGVUcmVlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVUcmVlX2gKKworI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisgCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
CisvLyBUaGUgU2Nyb2xsaW5nU3RhdGVUcmVlIGlzIGEgdHJlZSB0aGF0IG1hbmFnZWQgU2Nyb2xs
aW5nU3RhdGVOb2Rlcy4gVGhlIG5vZGVzIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQKKy8vIHN0
YXRlIG9mIHNjcm9sbGluZyByZWxhdGVkIHByb3BlcnRpZXMuIFdoZW5ldmVyIGFueSBwcm9wZXJ0
aWVzIGNoYW5nZSwgdGhlIHNjcm9sbGluZyBjb29yZGluYXRvcgorLy8gd2lsbCBiZSBpbmZvcm1l
ZCBhbmQgd2lsbCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9uZSB0aGUgbmV3IHN0YXRl
IHRyZWUgYW5kIHNlbmQgaXQgb3ZlciB0bworLy8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIGF2b2lk
aW5nIGxvY2tpbmcuIAorCisvLyBGSVhNRTogUmlnaHQgbm93IHRoZSBzY3JvbGxpbmcgdGhyZWFk
IG9ubHkgZXZlciBsb29rcyBhdCB0aGUgcm9vdCBub2RlLiBJbiB0aGUgZnV0dXJlLCBpdCBzaG91
bGQKKy8vIGxvb2sgYXQgdGhlIHdob2xlIHRyZWUgYW5kIGJ1aWxkIGEgU2Nyb2xsaW5nVHJlZSB0
aGF0IG1pbWljcyB0aGUgU2Nyb2xsaW5nU3RhdGVUcmVlLgorCisvLyBGSVhNRTogUmlnaHQgbm93
IHRoZXJlIGlzIG9ubHkgb25lIHR5cGUgb2YgU2Nyb2xsaW5nU3RhdGVOb2RlLCB3aGljaCBpcyB0
aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLgorLy8gSXQgaXMgY3VycmVudGx5IHVzZWQg
Zm9yIHRoZSBtYWluIGZyYW1lLCBidXQgaW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYmUgYWJsZSB0
byBiZSB1c2VkIGZvciBzdWJmcmFtZXMKKy8vIGFuZCBvdmVyZmxvdyBhcmVhcy4gSW4gdGhlIGZ1
dHVyZSwgbW9yZSBjbGFzc2VzIHdpbGwgaW5oZXJpdCBmcm9tIFNjcm9sbGluZ1N0YXRlTm9kZSwg
c3VjaCBhcworLy8gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUgYW5kIFNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZSBmb3IgZml4ZWQgcG9zaXRpb25lZCBvYmplY3RzIGFuZCBzdGlja3kgcG9zaXRvbmVk
CisvLyBvYmplY3RzLCByZXNwZWN0aXZlbHkuCisKK2NsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBjcmVh
dGUoKTsKKyAgICB+U2Nyb2xsaW5nU3RhdGVUcmVlKCk7CisgCisgICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3RhdGVO
b2RlLmdldCgpOyB9CisgCisgICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFu
ZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KKyAg
ICAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IGNvbW1pdCgpOworIAorICAgIHZvaWQg
c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXMoYm9vbCBjaGFuZ2VkUHJvcGVydGllcykgeyBtX2hhc0No
YW5nZWRQcm9wZXJ0aWVzID0gY2hhbmdlZFByb3BlcnRpZXM7IH0KKyAgICBib29sIGhhc0NoYW5n
ZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGFuZ2VkUHJvcGVydGllczsgfQor
CisgcHJpdmF0ZToKKyAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKCk7CisgCisgICAgdm9pZCBzZXRS
b290U3RhdGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290
U3RhdGVOb2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KKyAKKyAgICBP
d25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0ZU5vZGU7CisgICAg
Ym9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNj
cm9sbGluZ1N0YXRlVHJlZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlLmNwcAkocmV2aXNpb24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTE4LDIyICsxMTgsMjIgQEAgdm9pZCBTY3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlKCkKICAg
ICBjYWxsT25NYWluVGhyZWFkKGJpbmQoZGVyZWZTY3JvbGxpbmdDb29yZGluYXRvciwgbV9zY3Jv
bGxpbmdDb29yZGluYXRvci5yZWxlYXNlKCkubGVha1JlZigpKSk7CiB9CiAKLXZvaWQgU2Nyb2xs
aW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlKFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRl
PiBzY3JvbGxpbmdUcmVlU3RhdGUpCit2b2lkIFNjcm9sbGluZ1RyZWU6OmNvbW1pdE5ld1RyZWVT
dGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gc2Nyb2xsaW5nU3RhdGVUcmVlKQog
ewogICAgIEFTU0VSVChTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpKTsKIAotICAg
IGlmIChzY3JvbGxpbmdUcmVlU3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiAoU2Nyb2xsaW5n
VHJlZVN0YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50IHwgU2Nyb2xsaW5nVHJlZVN0YXRlOjpO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiB8IFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIp
KSB7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5jaGFuZ2Vk
UHJvcGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6V2hlZWxFdmVudEhh
bmRsZXJDb3VudCB8IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pIHx8IHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zY3JvbGxM
YXllckRpZENoYW5nZSgpKSB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CiAK
LSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoKSkKICAgICAgICAg
ICAgIG1fbWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24gPSBJbnRQb2ludCgpOwotICAgICAgICBpZiAo
c2Nyb2xsaW5nVHJlZVN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0
YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50KQotICAgICAgICAgICAgbV9oYXNXaGVlbEV2ZW50
SGFuZGxlcnMgPSBzY3JvbGxpbmdUcmVlU3RhdGUtPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsK
LSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1RyZWVTdGF0ZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCi0gICAgICAgICAgICBt
X25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gc2Nyb2xsaW5nVHJlZVN0YXRlLT5ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbigpOworICAgICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OldoZWVsRXZlbnRIYW5kbGVyQ291bnQpCisgICAgICAgICAgICBtX2hhc1doZWVsRXZlbnRI
YW5kbGVycyA9IHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT53aGVlbEV2ZW50
SGFuZGxlckNvdW50KCk7CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0
ZU5vZGUoKS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCisgICAgICAgICAgICBtX25vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uID0gc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPm5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKCk7CiAgICAgfQogCi0gICAgbV9yb290Tm9kZS0+dXBkYXRlKHNjcm9s
bGluZ1RyZWVTdGF0ZS5nZXQoKSk7CisgICAgbV9yb290Tm9kZS0+dXBkYXRlKHNjcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKIAogICAgIHVwZGF0ZURlYnVnUm9vdExheWVyKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZS5oCShyZXZpc2lvbiAxMjkyOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvcjsK
IGNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlOwotY2xhc3MgU2Nyb2xsaW5nVHJlZVN0YXRlOworY2xh
c3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAvLyBUaGUgU2Nyb2xsaW5nVHJlZSBjbGFzcyBsaXZl
cyBhbG1vc3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgYW5kIG1hbmFnZXMg
dGhlCiAvLyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRoZSBwYWdlLiBJdCdz
IGFsc28gcmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpAQCAtNzYsNyArNzYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCBjb21taXROZXdUcmVl
U3RhdGUoUGFzc093blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+KTsKKyAgICB2b2lkIGNvbW1pdE5l
d1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4pOwogCiAgICAgdm9pZCBz
ZXRNYWluRnJhbWVQaW5TdGF0ZShib29sIHBpbm5lZFRvVGhlTGVmdCwgYm9vbCBwaW5uZWRUb1Ro
ZVJpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVOb2RlLmNwcAkocmV2aXNpb24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCi0jaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDgsMzYgKzQ4LDM2IEBAIFNjcm9sbGlu
Z1RyZWVOb2RlOjp+U2Nyb2xsaW5nVHJlZU5vZGUoKQogewogfQogCi12b2lkIFNjcm9sbGluZ1Ry
ZWVOb2RlOjp1cGRhdGUoU2Nyb2xsaW5nVHJlZVN0YXRlKiBzdGF0ZSkKK3ZvaWQgU2Nyb2xsaW5n
VHJlZU5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlKQogewot
ICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6
Vmlld3BvcnRSZWN0KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KQogICAgICAgICBtX3ZpZXdwb3J0
UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3QoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFBy
b3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6Q29udGVudHNTaXplKQorICAgIGlmIChz
dGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
Q29udGVudHNTaXplKQogICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1Np
emUoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1Ry
ZWVTdGF0ZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCkKKyAg
ICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpCiAgICAg
ICAgIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9IHN0YXRl
LT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKLSAgICBp
ZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6Okhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMo
KSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkpCiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBzdGF0ZS0+aG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRp
ZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQorICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eSA9IHN0YXRlLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKIAotICAgIGlm
IChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6SGFzRW5h
YmxlZEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGll
cygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhcikKICAgICAgICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IHN0YXRl
LT5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOwogCi0gICAgaWYgKHN0YXRlLT5jaGFu
Z2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0YXRlOjpIYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIpCisgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpCiAgICAgICAg
IG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0gc3RhdGUtPmhhc0VuYWJsZWRWZXJ0aWNh
bFNjcm9sbGJhcigpOwogCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Ny
b2xsaW5nVHJlZVN0YXRlOjpIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZSkKKyAgICBpZiAoc3RhdGUt
PmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6
b250YWxTY3JvbGxiYXJNb2RlKQogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0g
c3RhdGUtPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5n
ZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhck1vZGUgPSBzdGF0ZS0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7CiAKLSAgICBpZiAo
c3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlNjcm9sbE9y
aWdpbikKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikKICAgICAgICAgbV9zY3JvbGxPcmlnaW4gPSBz
dGF0ZS0+c2Nyb2xsT3JpZ2luKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkocmV2aXNpb24gMTI5Mjk2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsaW5nVHJlZTsKLWNsYXNzIFNjcm9sbGlu
Z1RyZWVTdGF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIAogY2xhc3Mg
U2Nyb2xsaW5nVHJlZU5vZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9s
bGluZ1RyZWVOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSopOwogICAgIHZpcnR1YWwgflNjcm9s
bGluZ1RyZWVOb2RlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1RyZWVT
dGF0ZSopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYpID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUuY3BwCShyZXZpc2lvbiAxMjkyOTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5oIgotCi0jaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPFNjcm9s
bGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRlOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nVHJlZVN0YXRlKTsKLX0KLQotU2Nyb2xsaW5nVHJlZVN0
YXRlOjpTY3JvbGxpbmdUcmVlU3RhdGUoKQotICAgIDogbV9jaGFuZ2VkUHJvcGVydGllcygwKQot
ICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KDApCi0gICAgLCBtX3Nob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoMCkKLSAgICAsIG1faG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpCi0gICAgLCBtX3ZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKLSAgICAsIG1faGFzRW5hYmxlZEhvcml6
b250YWxTY3JvbGxiYXIoZmFsc2UpCi0gICAgLCBtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJh
cihmYWxzZSkKLSAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykK
LSAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCi17Ci19Ci0KLVNj
cm9sbGluZ1RyZWVTdGF0ZTo6flNjcm9sbGluZ1RyZWVTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgU2Ny
b2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KQotewotICAgIGlmIChtX3ZpZXdwb3J0UmVjdCA9PSB2aWV3cG9ydFJlY3QpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdmlld3BvcnRSZWN0ID0gdmlld3BvcnRSZWN0OwotICAgIG1fY2hh
bmdlZFByb3BlcnRpZXMgfD0gVmlld3BvcnRSZWN0OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVT
dGF0ZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKLXsKLSAg
ICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0
aWVzIHw9IENvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdp
b24pCi17Ci0gICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPT0gbm9uRmFzdFNjcm9s
bGFibGVSZWdpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24gPSBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVz
IHw9IE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0
ZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNv
dW50KQotewotICAgIGlmIChtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQgPT0gd2hlZWxFdmVudEhh
bmRsZXJDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93aGVlbEV2ZW50SGFuZGxlckNv
dW50ID0gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9
IFdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpz
ZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRT
Y3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAgaWYgKG1fc2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9PSByZWFzb25zKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQgPSByZWFz
b25zOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZDsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldEhv
cml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkpCi17Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPT0g
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKLSAg
ICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OwotfQot
Ci12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNj
cm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQotewotICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gdmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5OwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikK
LXsKLSAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9PSBoYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAg
IG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxi
YXIoYm9vbCBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpCi17Ci0gICAgaWYgKG1faGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyID09IGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBoYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBIYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpz
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3JvbGxi
YXJNb2RlKQotewotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID09IGhvcml6b250
YWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXJNb2RlID0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVl
U3RhdGU6OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Ny
b2xsYmFyTW9kZSkKLXsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPT0gdmVydGlj
YWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyTW9kZSA9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVz
IHw9IFZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6
OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiByZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbikKLXsKLSAgICBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uID0gcmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb247Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBSZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbjsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFNjcm9sbE9yaWdp
bihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQotewotICAgIGlmIChtX3Njcm9sbE9yaWdp
biA9PSBzY3JvbGxPcmlnaW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsT3JpZ2lu
ID0gc2Nyb2xsT3JpZ2luOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2Nyb2xsT3JpZ2lu
OwotfQotCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRl
Ojpjb21taXQoKQotewotICAgIE93blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IHRyZWVTdGF0ZSA9
IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUoKnRoaXMpKTsKLSAgICBtX2NoYW5nZWRQ
cm9wZXJ0aWVzID0gMDsKLQotICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVN0YXRlLmgJKHJldmlzaW9uIDEyOTI5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxpbmdUcmVlU3RhdGVfaAotI2RlZmlu
ZSBTY3JvbGxpbmdUcmVlU3RhdGVfaAotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
LQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gVGhlIFNjcm9sbGluZ1RyZWVTdGF0ZSBvYmplY3Qga2VlcHMg
dHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2Nyb2xsaW5nIHJlbGF0ZWQgcHJvcGVydGll
cy4KLS8vIFdoZW5ldmVyIGFueSBwcm9wZXJ0aWVzIGNoYW5nZSwgdGhlIHNjcm9sbGluZyBjb29y
ZGluYXRvciB3aWxsIGJlIGluZm9ybWVkIGFuZCB3aWxsIHVwZGF0ZSB0aGUgc3RhdGUKLS8vIGFu
ZCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9uZSB0aGUgbmV3IHN0YXRlIGFuZCBzZW5k
IGl0IG92ZXIgdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIGF2b2lkaW5nIGxvY2tpbmcuCi0vLyBG
SVhNRTogT25jZSB3ZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIHN1YmZyYW1lcywgdGhpcyB3
aWxsIGhhdmUgdG8gYmVjb21lIGEgdHJlZS1saWtlIHN0cnVjdHVyZS4KLWNsYXNzIFNjcm9sbGlu
Z1RyZWVTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJl
ZVN0YXRlPiBjcmVhdGUoKTsKLSAgICB+U2Nyb2xsaW5nVHJlZVN0YXRlKCk7Ci0KLSAgICBlbnVt
IENoYW5nZWRQcm9wZXJ0eSB7Ci0gICAgICAgIFZpZXdwb3J0UmVjdCA9IDEgPDwgMCwKLSAgICAg
ICAgQ29udGVudHNTaXplID0gMSA8PCAxLAotICAgICAgICBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
biA9IDEgPDwgMiwKLSAgICAgICAgV2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDEgPDwgMywKLSAg
ICAgICAgU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9IDEgPDwg
NCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSAxIDw8IDUsCi0gICAgICAg
IFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IDEgPDwgNiwKLSAgICAgICAgSGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXIgPSAxIDw8IDcsCi0gICAgICAgIEhhc0VuYWJsZWRWZXJ0aWNhbFNj
cm9sbGJhciA9IDEgPDwgOCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSAxIDw8
IDksCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IDEgPDwgMTAsCi0gICAgICAgIFNj
cm9sbE9yaWdpbiA9IDEgPDwgMTEsCi0gICAgICAgIFNjcm9sbExheWVyID0gMSA8PCAxMiwKLSAg
ICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEzLAotICAgIH07Ci0KLSAgICBi
b29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVy
dGllczsgfQotICAgIHVuc2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4g
bV9jaGFuZ2VkUHJvcGVydGllczsgfQotCi0gICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0KLSAgICB2b2lkIHNldFZpZXdwb3J0
UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQotICAgIHZvaWQgc2V0Q29udGVudHNT
aXplKGNvbnN0IEludFNpemUmKTsKLQotICAgIGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOyB9Ci0g
ICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKLQotICAg
IHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3doZWVs
RXZlbnRIYW5kbGVyQ291bnQ7IH0KLSAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
dW5zaWduZWQpOwotCi0gICAgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgc2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsgfQotICAgIHZvaWQgc2V0U2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xs
aW5nUmVhc29ucyk7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsgfQot
ICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7
Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OyB9Ci0gICAgdm9pZCBzZXRWZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7Ci0KLSAgICBib29sIGhhc0Vu
YWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcjsgfQotICAgIHZvaWQgc2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3Jv
bGxiYXIoYm9vbCk7Ci0KLSAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOyB9Ci0gICAgdm9pZCBz
ZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBTY3JvbGxiYXJNb2Rl
IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZTsgfQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xs
YmFyTW9kZSk7Ci0KLSAgICBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOyB9Ci0gICAgdm9pZCBzZXRWZXJ0
aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICBjb25zdCBJbnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xs
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwotCi0g
ICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
T3JpZ2luOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmKTsKLQot
ICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5n
ZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KLSAgICBQYXNzT3duUHRyPFNjcm9s
bGluZ1RyZWVTdGF0ZT4gY29tbWl0KCk7Ci0KLXByaXZhdGU6Ci0gICAgU2Nyb2xsaW5nVHJlZVN0
YXRlKCk7Ci0KLSAgICB1bnNpZ25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOwotCi0gICAgSW50UmVj
dCBtX3ZpZXdwb3J0UmVjdDsKLSAgICBJbnRTaXplIG1fY29udGVudHNTaXplOwotCi0gICAgUmVn
aW9uIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247Ci0KLSAgICB1bnNpZ25lZCBtX3doZWVsRXZl
bnRIYW5kbGVyQ291bnQ7Ci0KLSAgICBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyBtX3Nob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7Ci0KLSAgICBTY3JvbGxFbGFz
dGljaXR5IG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7Ci0gICAgU2Nyb2xsRWxhc3RpY2l0
eSBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKLQotICAgIGJvb2wgbV9oYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcjsKLSAgICBib29sIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
OwotCi0gICAgU2Nyb2xsYmFyTW9kZSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlOwotICAgIFNj
cm9sbGJhck1vZGUgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Ci0KLSAgICBJbnRQb2ludCBtX3Jl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uOwotICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOwotCi0j
aWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3Jt
U2Nyb2xsTGF5ZXI7Ci0jZW5kaWYKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2VuZGlmIC8vIFNjcm9sbGlu
Z1RyZWVTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAxMjky
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbXBvcnQgIlBh
Z2UuaCIKICNpbXBvcnQgIlNjcm9sbGluZ1RocmVhZC5oIgogI2ltcG9ydCAiU2Nyb2xsaW5nVHJl
ZS5oIgotI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdT
dGF0ZVRyZWUuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8
d3RmL0Z1bmN0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdT
dGF0ZU5vZGVNYWMubW0JKHJldmlzaW9uIDEyOTI0MCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGF0ZU1hYy5tbToxMjkyNDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisKKyNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtTGF5ZXIq
IFNjcm9sbGluZ1RyZWVTdGF0ZTo6cGxhdGZvcm1TY3JvbGxMYXllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1TY3JvbGxMYXllci5nZXQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdU
cmVlU3RhdGU6OnNldFNjcm9sbExheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIpCit7CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1TY3JvbGxMYXllciA9IGdyYXBoaWNz
TGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCkgOiBuaWw7CisKKyAgICBpZiAo
bV9wbGF0Zm9ybVNjcm9sbExheWVyID09IHBsYXRmb3JtU2Nyb2xsTGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGxhdGZvcm1TY3JvbGxMYXllciA9IHBsYXRmb3JtU2Nyb2xsTGF5ZXI7
CisgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBTY3JvbGxMYXllcjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1N0YXRlTm9kZU1hYy5tbQkocmV2aXNpb24gMTI5MjQwKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9kZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTggKzI0LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9k
ZS5oIgorCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAKICNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsYXRmb3JtTGF5ZXIq
IFNjcm9sbGluZ1RyZWVTdGF0ZTo6cGxhdGZvcm1TY3JvbGxMYXllcigpIGNvbnN0CitQbGF0Zm9y
bUxheWVyKiBTY3JvbGxpbmdTdGF0ZU5vZGU6OnBsYXRmb3JtU2Nyb2xsTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXIuZ2V0KCk7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nVHJlZVN0YXRlOjpzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyKQordm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldFNjcm9sbExheWVyKFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9wbGF0Zm9ybVNjcm9sbExheWVyID0g
cGxhdGZvcm1MYXllcjsKK30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldFNjcm9sbExh
eWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1TY3JvbGxMYXllciA9IGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVy
LT5wbGF0Zm9ybUxheWVyKCkgOiBuaWw7CiAKQEAgLTQzLDcgKzUwLDggQEAgdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldFNjcm9sbExheWVyKAogICAgICAgICByZXR1cm47CiAKICAgICBtX3Bs
YXRmb3JtU2Nyb2xsTGF5ZXIgPSBwbGF0Zm9ybVNjcm9sbExheWVyOwotICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgfD0gU2Nyb2xsTGF5ZXI7CisgICAgbV9zY3JvbGxMYXllckRpZENoYW5nZSA9IHRy
dWU7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRy
dWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAko
cmV2aXNpb24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIC8vIFNjcm9sbGluZ1RyZWVOb2RlIG1lbWJlciBmdW5jdGlv
bnMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZShTY3JvbGxpbmdUcmVlU3RhdGUqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSop
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpIE9WRVJSSURFOwogCiAgICAgLy8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRy
b2xsZXIgbWVtYmVyIGZ1bmN0aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0JKHJldmlzaW9u
IDEyOTI5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdU
cmVlTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUg
IlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0
ZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiVGlsZUNhY2hlLmgiCiAjaW5jbHVkZSAiV2ViVGlsZUxheWVyLmgiCkBA
IC02MiwyNiArNjIsMjYgQEAgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6On5TY3JvbGxpbmdUcmVlTm9k
ZQogICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVy
LmdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGlu
Z1RyZWVTdGF0ZSogc3RhdGUpCit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjp1cGRhdGUoU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZSkKIHsKICAgICBTY3JvbGxpbmdUcmVlTm9k
ZTo6dXBkYXRlKHN0YXRlKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIpCisgICAgaWYgKHN0YXRlLT5zY3JvbGxM
YXllckRpZENoYW5nZSgpKQogICAgICAgICBtX3Njcm9sbExheWVyID0gc3RhdGUtPnBsYXRmb3Jt
U2Nyb2xsTGF5ZXIoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1RyZWVTdGF0ZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pCisgICAgaWYgKHN0YXRl
LT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1
ZXN0ZWRTY3JvbGxQb3NpdGlvbikKICAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc3RhdGUtPnJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOwogCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVy
dGllcygpICYgKFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIgfCBTY3JvbGxpbmdUcmVl
U3RhdGU6OkNvbnRlbnRzU2l6ZSB8IFNjcm9sbGluZ1RyZWVTdGF0ZTo6Vmlld3BvcnRSZWN0KSkK
KyAgICBpZiAoc3RhdGUtPnNjcm9sbExheWVyRGlkQ2hhbmdlKCkgfHwgc3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpDb250ZW50c1NpemUg
fCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZpZXdwb3J0UmVjdCkpCiAgICAgICAgIHVw
ZGF0ZU1haW5GcmFtZVBpblN0YXRlKHNjcm9sbFBvc2l0aW9uKCkpOwogCi0gICAgaWYgKChzdGF0
ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCkpIHsKKyAgICBpZiAoKHN0YXRlLT5jaGFu
Z2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKSkgewogICAgICAgICB1bnNpZ25lZCBt
YWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyA9IHRoaXMtPnNob3VsZFVwZGF0ZVNjcm9sbExheWVy
UG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIAogICAgICAgICBpZiAobWFpblRocmVhZFNjcm9sbGlu
Z1JlYXNvbnMpIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIHNs
b3cgInVwZGF0ZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gb24gdGhlIG1haW4gdGhyZWFkIiBtb2Rl
LgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJvYmFibGUgbWFpbiB0aHJlYWQgc2Ny
b2xsIHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIGxheWVyIHBvc2l0aW9uLgotICAg
ICAgICAgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0
YXRlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3Jv
bGxQb3NpdGlvbiA9IHN0YXRlLT5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQ0dQb2ludCBzY3JvbGxMYXllclBvc2l0aW9uID0g
bV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTdGF0ZU1hYy5tbQko
cmV2aXNpb24gMTI5Mjk2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTdGF0ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVT
dGF0ZS5oIgotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1QbGF0Zm9ybUxheWVyKiBTY3JvbGxpbmdUcmVlU3RhdGU6OnBsYXRmb3JtU2Ny
b2xsTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXIuZ2V0
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTY3JvbGxMYXllcihjb25zdCBH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtU2Nyb2xsTGF5ZXIgPSBncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1M
YXllcigpIDogbmlsOwotCi0gICAgaWYgKG1fcGxhdGZvcm1TY3JvbGxMYXllciA9PSBwbGF0Zm9y
bVNjcm9sbExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXRmb3JtU2Nyb2xsTGF5
ZXIgPSBwbGF0Zm9ybVNjcm9sbExheWVyOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gU2Ny
b2xsTGF5ZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCg==
</data>
<flag name="review"
          id="177240"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165511</attachid>
            <date>2012-09-24 21:16:17 -0700</date>
            <delta_ts>2012-10-01 13:39:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>84533</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wOS0yNCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk3MzY1CisgICAgICAgIFNjcm9sbGluZ1RyZWVTdGF0ZSBuZWVk
cyB0byBiZSBhIHRyZWUgb2Ygbm9kZXMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHNob3VsZCBub3QgY2hhbmdlIGFueSBiZWhhdmlv
ci4KKworICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBTY3JvbGxpbmdUcmVlU3RhdGUgYXR0
ZW1wdGVkIHRvIGNvbnRhaW4gYWxsIG9mIAorICAgICAgICB0aGUgc3RhdGUgaW5mb3JtYXRpb24g
bmVlZGVkIGZvciB0aGUgd2hvbGUgc2Nyb2xsaW5nIHRyZWUgaW4gb25lIAorICAgICAgICBvYmpl
Y3QuIEJ1dCBpbiB0aGUgZnV0dXJlIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG5vZGVzIGluIHRo
ZSAKKyAgICAgICAgc2Nyb2xsaW5nIHRyZWUsIGEgc2luZ2xlIHN0YXRlIG9iamVjdCB3aWxsIG5v
dCBiZSBzdWZmaWNpZW50LiAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGUgc2hvdWxkIGFsc28gYmUg
cmVwcmVzZW50ZWQgYnkgYSB0cmVlLiBUaGlzIHBhdGNoIG1ha2VzIAorICAgICAgICBzY3JvbGxp
bmcgc3RhdGUgaW50byBhIHRyZWUuIFRoZSBvbGQgU2Nyb2xsaW5nVHJlZVN0YXRlIGNsYXNzIGhh
cyAKKyAgICAgICAgYmVjb21lIHRoZSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgY2xhc3Mg
c2luY2UgdGhlIG1ham9yaXR5IG9mIAorICAgICAgICB0aGUgY2xhc3MgcmVwcmVzZW50cyBzY3Jv
bGwgc3RhdGUgdGhhdCBpcyBzcGVjaWZpYyB0byBTY3JvbGxhYmxlQXJlYXMgCisgICAgICAgIGFu
ZCB3aWxsIG5vdCBiZSBhcHBsaWNhYmxlIHRvIGZpeGVkIG9yIHN0aWNreSBsYXllcnMuCisKKyAg
ICAgICAgU29tZSBuZXcgZmlsZXMgYW5kIHNvbWUgbW92ZWQgZmlsZXMuCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIEV2ZXJ5dGhpbmcgdGhh
dCB1c2VkIHRvIHJlZmVyIHRvIHRoZSBTY3JvbGxpbmdUcmVlU3RhdGUgc2hvdWxkIG5vdyAKKyAg
ICAgICAgcmVmZXIgdG8gdGhlIFNjcm9sbGluZ1N0YXRlVHJlZSBpbnN0ZWFkLiBSaWdodCBub3cs
IGFsbCBvZiB0aGlzIGNvZGUgCisgICAgICAgIGNvbnRpbnVlcyB0byBkZWFsIHdpdGggb25seSB0
aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLiBJbiB0aGUgZnV0dXJlLCAKKyAgICAgICAgaXQgd2ls
bCBoYXZlIHRvIGRlYWwgd2l0aCBhbGwgb2YgdGhlIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvcik6CisKKyAgICAgICAgVGhpcyBp
cyBhIG5ldyBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aGUgbm9kZXMgaW4gdGhlIAorICAgICAg
ICBTY3JvbGxpbmdTdGF0ZVRyZWUuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Y2xvbmVDaGlsZE5vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6dHJhdmVyc2VOZXh0KToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdTdGF0ZU5vZGU6OnNjcm9sbExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpzY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlTm9kZTo6bmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVOb2RlOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
Tm9kZTo6c2V0TmV4dFNpYmxpbmcpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5tbToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nU3RhdGVOb2RlTWFjLm1tOiBDb3BpZWQgZnJvbSBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVN0YXRlTWFjLm1tLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpwbGF0Zm9ybVNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisKKyAgICAgICAg
UmlnaHQgbm93LCB0aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlIGlzIHRoZSBvbmx5IHR5
cGUgb2YgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZS4gSW4gdGhlIGZ1dHVyZSB0aGVyZSB3
aWxsIGJlLCBmb3IgZXhhbXBsZSwgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlcyB0
aGF0IHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2Ygc3RhdGUgCisgICAgICAgIGluZm9ybWF0
aW9uIHRvIGtlZXAgdHJhY2sgb2YuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcDogQ29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVN0YXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp+U2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6Y2xvbmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Vmlld3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0SGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsT3JpZ2luKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDog
Q29waWVkIGZyb20gcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmguCisgICAgICAg
IChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6On5TY3JvbGxpbmdTdGF0ZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpjb21taXQpOgorCisgICAgICAgIFRoZSBT
Y3JvbGxpbmdTdGF0ZVRyZWUgbWFuYWdlcyB0aGUgbm9kZXMgaW4gdGhlIHRyZWUgdmlhIHRoZSBy
b290IAorICAgICAgICBub2RlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgY2xvbmluZyB0aGUgdHJl
ZSBhbmQgc2VuZGluZyBpdCBvdmVyIHRvIAorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4K
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVUcmVlOjpzZXRIYXNDaGFuZ2VkUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6Omhhc0NoYW5nZWRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZTo6c2V0Um9vdFN0YXRlTm9k
ZSk6CisKKyAgICAgICAgRXZlcnl0aGluZyB0aGF0IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFNjcm9s
bGluZ1RyZWVTdGF0ZSBzaG91bGQgbm93IAorICAgICAgICByZWZlciB0byB0aGUgU2Nyb2xsaW5n
U3RhdGVUcmVlIGluc3RlYWQuIFJpZ2h0IG5vdywgYWxsIG9mIHRoaXMgY29kZSAKKyAgICAgICAg
Y29udGludWVzIHRvIGRlYWwgd2l0aCBvbmx5IHRoZSByb290IG5vZGUgb2YgdGhlIHRyZWUuIElu
IHRoZSBmdXR1cmUsIAorICAgICAgICBpdCB3aWxsIGhhdmUgdG8gZGVhbCB3aXRoIGFsbCBvZiB0
aGUgbm9kZXMuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjp1cGRhdGUpOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFNjcm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZU5vZGVNYWMuaDoKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVOb2RlTWFjKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKToKKworICAgICAgICBT
Y3JvbGxpbmdUcmVlU3RhdGUuY3BwIC0tPiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3Bw
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcDogUmVtb3Zl
ZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGUuaCAtLT4gU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlLmgKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUu
aDogUmVtb3ZlZC4KKworICAgICAgICBTY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0gLS0+IFNjcm9s
bGluZ1N0YXRlTm9kZU1hYy5tbQorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU3RhdGVNYWMubW06IFJlbW92ZWQuCisKIDIwMTItMDktMjQgIExhc3psbyBHb21ib3Mg
IDxsLmdvbWJvc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIFJlbW92ZSBjYWly
byBwcmVmaXggZnJvbSBpbmNsdWRlIHN0YXRlbWVudHMgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjkzODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTUxMSw5ICs1MTEsNiBAQAogCQkxQUE4Nzk5MDExQ0JFODQ2MDAzQzY2
NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQTg3OThGMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBQUFE
REEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAv
KiBTY3JvbGxpbmdUcmVlLmNwcCAqLzsgfTsKIAkJMUFBQUREQTQxNERCNDA5RjAwQUY2NEIzIC8q
IFNjcm9sbGluZ1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUFBQUREQkUxNERD
NjQwNzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUFBRERCQzE0REM2NDA2MDBBRjY0QjMgLyog
U2Nyb2xsaW5nVHJlZVN0YXRlLmNwcCAqLzsgfTsKLQkJMUFBQUREQkYxNERDNjQwNzAwQUY2NEIz
IC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBQUREQkQxNERDNjQwNjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVT
dGF0ZS5oICovOyB9OwotCQkxQUFBREREQTE0REM3NEVDMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJl
ZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBQURERDgxNERDNzRFQzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZU1hYy5tbSAq
LzsgfTsKIAkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREUx
MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi87IH07CiAJCTFBQUFE
REU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTIxNERDOEM4RjAwQUY2NEIz
IC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggKi87IH07CiAJCTFBQUFEREU4MTREQzhERjgwMEFGNjRC
MyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREU2MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlTm9kZU1hYy5tbSAqLzsgfTsKQEAgLTMyOTksNiArMzI5NiwxMyBAQAogCQk5MzlCMDJFRTBF
QTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlCMDJFQzBFQTJEQkM0MDBDNTQ1NzAgLyogV2lk
dGhJdGVyYXRvci5jcHAgKi87IH07CiAJCTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0
aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzlCMDJFRDBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICovOyB9OwogCQk5
M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0EzOEI0QTBEMEU1ODA4MDA2ODcy
QzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgKi87IH07CisJCTkzQTc5QTk0MTYwQ0VCMjYwMDMxMEYw
NSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNBNzlBOEUxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0
YXRlTm9kZS5jcHAgKi87IH07CisJCTkzQTc5QTk1MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxp
bmdTdGF0ZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzQTc5QThGMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCAqLzsg
fTsKKwkJOTNBNzlBOTYxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0E3OUE5MDE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNw
cCAqLzsgfTsKKwkJOTNBNzlBOTcxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZS5oICovOyB9OworCQk5M0E3OUE5ODE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVU
cmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
QTc5QTkyMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZVRyZWUuY3BwICovOyB9Owor
CQk5M0E3OUE5OTE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E3OUE5MzE2MENFQjI2
MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmggKi87IH07CisJCTkzQTc5QTlGMTYwRDBE
RUMwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0E3OUE5RTE2MEQwREVDMDAzMTBGMDUgLyog
U2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tICovOyB9OwogCQk5M0IyRDgxNjBGOTkyMEQyMDA2QUU2
QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5h
dGlvbi5oICovOyB9OwogCQk5M0IyRDgxODBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWlu
YXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24ubW0gKi87IH07CiAJ
CTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdB
IC8qIENvbnRleHRNZW51LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTc1ODMsOSArNzU4Nyw2IEBACiAJCTFBQTg3OThGMTFDQkU4NDYwMDNDNjY0
RiAvKiBQbHVnaW5TdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bHVnaW5TdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMTE0
REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQUFBRERCQzE0REM2NDA2MDBBRjY0QjMgLyogU2Nyb2xsaW5n
VHJlZVN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9s
bGluZ1RyZWVTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUFEREJE
MTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTFBQUFEREQ4MTREQzc0RUMwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3Rh
dGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxp
bmdUcmVlU3RhdGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREUx
MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBQUFEREUyMTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVl
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERFNjE0REM4REY4MDBB
RjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNDkzLDYgKzEwNDk0LDEzIEBACiAJCTkzOUIwMkVDMEVBMkRCQzQw
MEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdpZHRoSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzlCMDJFRDBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXaWR0aEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzQTM4QjRBMEQwRTU4MDgwMDY4NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRvckNvbW1hbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE4RTE2MENFQjI2MDAzMTBGMDUg
LyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNjcm9sbGluZ1N0YXRlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzQTc5QThGMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVOb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQTc5QTkwMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNB
NzlBOTIxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdTdGF0ZVRyZWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE5MzE2MENFQjI2MDAzMTBGMDUgLyogU2Ny
b2xsaW5nU3RhdGVUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bGluZ1N0YXRlVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0E3OUE5RTE2
MEQwREVDMDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VkZGVu
VGVybWluYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCMkQ4MTcwRjk5
MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3VkZGVuVGVybWluYXRpb24ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGV4dE1lbnUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTkyLDggKzE0NjAwLDEyIEBACiAJCQkJMUFBQURE
QTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLywKIAkJCQkxQUFBRERFMTE0
REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwICovLAogCQkJCTFBQUFEREUy
MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5oICovLAotCQkJCTFBQUFEREJD
MTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuY3BwICovLAotCQkJCTFBQUFE
REJEMTREQzY0MDYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCAqLywKKwkJCQk5M0E3
OUE4RTE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCAqLywKKwkJCQk5
M0E3OUE4RjE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmggKi8sCisJCQkJ
OTNBNzlBOTAxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5j
cHAgKi8sCisJCQkJOTNBNzlBOTExNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZS5oICovLAorCQkJCTkzQTc5QTkyMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxp
bmdTdGF0ZVRyZWUuY3BwICovLAorCQkJCTkzQTc5QTkzMTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3Jv
bGxpbmdTdGF0ZVRyZWUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc2Nyb2xsaW5nOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NjAyLDExICsxNDYxNCwxMSBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQUY2MkVFMzE0REEyMkE3MDA0MTU1NkMg
LyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gKi8sCisJCQkJOTNBNzlBOUUxNjBEMERFQzAw
MzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSAqLywKIAkJCQkxQUY2MkYyMzE0REFG
RTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFjLm1tICovLAogCQkJCTFBMzU4NjJBMTUy
NTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVlTWFjLm1tICovLAogCQkJCTFBQUFEREU3MTRE
QzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oICovLAogCQkJCTFBQUFEREU2
MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSAqLywKLQkJCQkxQUFB
REREODE0REM3NEVDMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1tICovLAogCQkJ
KTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjQ5MDEs
NyArMjQ5MTMsNiBAQAogCQkJCTFBQUFEREE0MTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFBRERFNDE0REM4QzhGMDBBRjY0QjMgLyogU2Ny
b2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREU5MTREQzhERjgwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBQURE
QkYxNERDNjQwNzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9sbFR5cGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyogU2Nyb2xsVmlldy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU3MCw2ICsyNTU4MSw5IEBACiAJCQkJRkQ1MzczNTMx
MzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjkyREY0
QjE1RkVEMDg3MDA5OTQ0MzMgLyogQ2xpcFBhdGhPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTRGN0I0QTY2MTVGRjZENkEwMDZCNUYyMiAvKiBQbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNBNzlBOTUxNjBDRUIyNjAwMzEwRjA1IC8qIFNj
cm9sbGluZ1N0YXRlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNBNzlBOTcxNjBDRUIyNjAw
MzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJOTNBNzlBOTkxNjBDRUIyNjAwMzEwRjA1IC8qIFNjcm9sbGluZ1N0YXRlVHJlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yODEyMiw4ICsyODEzNiw2IEBACiAJCQkJMUEzNTg2MkMxNTI1MjI1NDAw
MjJBNjU5IC8qIFNjcm9sbGluZ1RyZWVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFBRERF
MzE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFBQURERTgxNERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJMUFBQUREQkUxNERDNjQwNzAwQUY2NEIzIC8qIFNjcm9sbGlu
Z1RyZWVTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUFBREREQTE0REM3NEVDMDBBRjY0
QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNDQx
QzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlGNTVCM0REMTEyNTFGMTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjg2NjksNiArMjg2ODEsMTAgQEAKIAkJCQk5NzdFMkUwRTEyRjBG
QzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1
MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEYx
RDExQkYxNUZGMzcyMDAwMjZFOTA4IC8qIFBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTkzQTc5QTk0MTYwQ0VCMjYwMDMxMEYwNSAvKiBTY3JvbGxp
bmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNBNzlBOTYxNjBDRUIyNjAwMzEw
RjA1IC8qIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk5M0E3OUE5ODE2MENFQjI2MDAzMTBGMDUgLyogU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTkzQTc5QTlGMTYwRDBERUMwMDMxMEYwNSAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEy
OTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQAogI2luY2x1ZGUgIlJlZ2lv
bi5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5o
IgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC01Niw5ICs1Nyw5IEBAIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29y
ZGluYXQKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9mb3JjZU1haW5UaHJlYWRTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcyhmYWxzZSkKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQotICAgICwgbV9zY3JvbGxpbmdUcmVlU3RhdGUoU2Nyb2xsaW5nVHJlZVN0YXRlOjpjcmVhdGUo
KSkKKyAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZTo6Y3JlYXRl
KCkpCiAgICAgLCBtX3Njcm9sbGluZ1RyZWUoU2Nyb2xsaW5nVHJlZTo6Y3JlYXRlKHRoaXMpKQot
ICAgICwgbV9zY3JvbGxpbmdUcmVlU3RhdGVDb21taXR0ZXJUaW1lcih0aGlzLCAmU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNjcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyRmlyZWQpCisgICAg
LCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKHRoaXMsICZTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXJGaXJlZCkKICNlbmRpZgog
ICAgICwgbV9wcml2YXRlKDApCiB7CkBAIC03MCw3ICs3MSw3IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQKICAgICBtX3BhZ2UgPSAwOwogCiAjaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVy
LnN0b3AoKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsK
IAogICAgIC8vIEludmFsaWRhdGluZyB0aGUgc2Nyb2xsaW5nIHRyZWUgd2lsbCBicmVhayB0aGUg
cmVmZXJlbmNlIGN5Y2xlIGJldHdlZW4gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGFuZCBTY3Jv
bGxpbmdUcmVlIG9iamVjdHMuCiAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChiaW5kKCZT
Y3JvbGxpbmdUcmVlOjppbnZhbGlkYXRlLCBtX3Njcm9sbGluZ1RyZWUucmVsZWFzZSgpKSk7CkBA
IC0yNTMsNyArMjU0LDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9s
bAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0
ZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogICAg
IHJldHVybiB0cnVlOwogI2Vsc2UKQEAgLTQxMywzNSArNDE0LDM3IEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldEZvcmNlTWFpblQKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXIpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldFNjcm9sbExh
eWVyKHNjcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVl
U3RhdGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CisgICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
cmVnaW9uKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCiB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRl
cnMmIHNjcm9sbFBhcmFtZXRlcnMpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldEhv
cml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRWZXJ0aWNhbFNjcm9s
bEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOwot
ICAgIG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBt
X3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9s
bFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGlu
Z1RyZWVTdGF0ZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5o
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldFZl
cnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSk7Ci0KLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBh
cmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+c2V0Vmll
d3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKLSAgICBtX3Njcm9sbGlu
Z1RyZWVTdGF0ZS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXpl
KTsKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiBhbmQgYWxsIG9m
IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcyBuZWVkIHRvCisgICAgLy8gaGFuZGxl
IG1vcmUgdGhhbiBqdXN0IHRoZSByb290IG5vZGUuIAorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBh
cmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3Jv
bGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxi
YXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZFZlcnRp
Y2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIb3Jpem9u
dGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2Rl
KTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWZXJ0aWNh
bFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwor
CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2Nyb2xsT3Jp
Z2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52
aWV3cG9ydFJlY3QpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkt
PnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CiAgICAgc2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQpCiB7Ci0gICAgbV9zY3JvbGxpbmdUcmVlU3RhdGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxl
ckNvdW50KTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCkBAIC00NTIsNDAg
KzQ1NSw0MCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhCiAgICAg
Ly8gaW4gb3JkZXIgdG8gYXZvaWQgbGF5ZXIgcG9zaXRpb25pbmcgYnVncy4KICAgICBpZiAocmVh
c29ucykKICAgICAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwotICAg
IG1fc2Nyb2xsaW5nVHJlZVN0YXRlLT5zZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKHJlYXNvbnMpOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
cmVhc29ucyk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAogdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQogewotICAgIGlmICht
X3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+aGFzQ2hhbmdlZFByb3BlcnRp
ZXMoKSkKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGll
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRl
clRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRl
clRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2Nyb2xsaW5nVHJlZVN0YXRlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29y
ZGluYXRvcj4qKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsaW5nU3RhdGVUcmVl
Q29tbWl0dGVyVGltZXJGaXJlZChUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRvcj4qKQogewogICAg
IGNvbW1pdFRyZWVTdGF0ZSgpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21t
aXRUcmVlU3RhdGVJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFtX3Njcm9sbGluZ1RyZWVTdGF0ZS0+
aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5o
YXNDaGFuZ2VkUHJvcGVydGllcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb21taXRUcmVl
U3RhdGUoKTsKLSAgICBtX3Njcm9sbGluZ1RyZWVTdGF0ZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsK
KyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKIH0KIAogdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tbWl0VHJlZVN0YXRlKCkKIHsKLSAgICBBU1NFUlQo
bV9zY3JvbGxpbmdUcmVlU3RhdGUtPmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkpOworICAgIEFTU0VS
VChtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7CiAKLSAgICBP
d25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiB0cmVlU3RhdGUgPSBtX3Njcm9sbGluZ1RyZWVTdGF0
ZS0+Y29tbWl0KCk7CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRlID0g
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmNvbW1pdCgpOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlz
cGF0Y2goYmluZCgmU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlLCBtX3Njcm9sbGlu
Z1RyZWUuZ2V0KCksIHRyZWVTdGF0ZS5yZWxlYXNlKCkpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShy
ZXZpc2lvbiAxMjkzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFBh
Z2U7CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJpdmF0ZTsKLWNsYXNzIFNjcm9sbGluZ1RyZWVTdGF0ZTsKK2NsYXNzIFNj
cm9sbGluZ1N0YXRlVHJlZTsKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBjbGFz
cyBTY3JvbGxpbmdUcmVlOwpAQCAtMTc2LDEyICsxNzYsMTIgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQogICAgIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQo
KTsKIAotICAgIHZvaWQgc2Nyb2xsaW5nVHJlZVN0YXRlQ29tbWl0dGVyVGltZXJGaXJlZChUaW1l
cjxTY3JvbGxpbmdDb29yZGluYXRvcj4qKTsKKyAgICB2b2lkIHNjcm9sbGluZ1N0YXRlVHJlZUNv
bW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+Kik7CiAgICAgdm9p
ZCBjb21taXRUcmVlU3RhdGUoKTsKIAotICAgIE93blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IG1f
c2Nyb2xsaW5nVHJlZVN0YXRlOworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlOwogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1Ry
ZWU7Ci0gICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5nVHJlZVN0YXRl
Q29tbWl0dGVyVGltZXI7CisgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xs
aW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXI7CiAjZW5kaWYKIAogICAgIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCisKKyNpbmNsdWRlICJTY3JvbGxp
bmdTdGF0ZVRyZWUuaCIKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxpbmdTdGF0ZU5vZGUo
U2Nyb2xsaW5nU3RhdGVUcmVlKiBzY3JvbGxpbmdTdGF0ZVRyZWUpCisgICAgOiBtX3Njcm9sbGlu
Z1N0YXRlVHJlZShzY3JvbGxpbmdTdGF0ZVRyZWUpCisgICAgLCBtX3BhcmVudCgwKQorICAgICwg
bV9zY3JvbGxMYXllckRpZENoYW5nZShmYWxzZSkKK3sKK30KKworLy8gVGhpcyBjb3B5IGNvbnN0
cnVjdG9yIGlzIHVzZWQgZm9yIGNsb25pbmcgbm9kZXMgaW4gdGhlIHRyZWUsIGFuZCBpdCBkb2Vz
bid0IG1ha2Ugc2Vuc2UKKy8vIHRvIGNsb25lIHRoZSByZWxhdGlvbnNoaXAgcG9pbnRlcnMsIHNv
IGRvbid0IGNvcHkgdGhhdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcmlnaW5hbAorLy8gbm9kZS4K
K1Njcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9k
ZSogc3RhdGVOb2RlKQorICAgIDogbV9zY3JvbGxpbmdTdGF0ZVRyZWUoMCkKKyAgICAsIG1fcGFy
ZW50KDApCisgICAgLCBtX3Njcm9sbExheWVyRGlkQ2hhbmdlKHN0YXRlTm9kZS0+c2Nyb2xsTGF5
ZXJEaWRDaGFuZ2UoKSkKK3sKKyAgICBzZXRTY3JvbGxMYXllcihzdGF0ZU5vZGUtPnBsYXRmb3Jt
U2Nyb2xsTGF5ZXIoKSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRl
Tm9kZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjphcHBlbmRDaGlsZChQYXNz
T3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2hpbGROb2RlKQoreworICAgIGNoaWxkTm9kZS0+
c2V0UGFyZW50KHRoaXMpOworICAgIAorICAgIGlmICghbV9maXJzdENoaWxkKSB7CisgICAgICAg
IG1fZmlyc3RDaGlsZCA9IGNoaWxkTm9kZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZvciAoU2Nyb2xsaW5nU3RhdGVOb2RlKiBleGlzdGluZ0NoaWxkID0gZmlyc3RDaGlsZCgpOyBl
eGlzdGluZ0NoaWxkOyBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAoIWV4aXN0aW5nQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAg
ICAgICAgIGV4aXN0aW5nQ2hpbGQtPnNldE5leHRTaWJsaW5nKGNoaWxkTm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZU5vZGU6OnRyYXZlcnNl
TmV4dCgpIGNvbnN0Cit7CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKKyAgICBpZiAoY2hpbGQpCisgICAgICAgIHJldHVybiBjaGlsZDsKKworICAgIFNjcm9s
bGluZ1N0YXRlTm9kZSogc2libGluZyA9IG5leHRTaWJsaW5nKCk7CisgICAgaWYgKHNpYmxpbmcp
CisgICAgICAgIHJldHVybiBzaWJsaW5nOworCisgICAgY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2Rl
KiBzdGF0ZU5vZGUgPSB0aGlzOworICAgIHdoaWxlICghc2libGluZykgeworICAgICAgICBzdGF0
ZU5vZGUgPSBzdGF0ZU5vZGUtPnBhcmVudCgpOworICAgICAgICBpZiAoIXN0YXRlTm9kZSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzaWJsaW5nID0gc3RhdGVOb2RlLT5uZXh0U2li
bGluZygpOworICAgIH0KKworICAgIGlmIChzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBzaWJs
aW5nOworCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxp
bmdTdGF0ZU5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdTdGF0ZU5vZGVfaAorCisjaWYgRU5BQkxF
KFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworI2lmIFBM
QVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CisKK2NsYXNzIFNjcm9s
bGluZ1N0YXRlTm9kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsaW5nU3RhdGVO
b2RlKTsKKworcHVibGljOgorICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVRy
ZWUqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKKworICAgIHZpcnR1YWwg
UGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lTm9kZSgpID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZXNldENoYW5nZWRQcm9wZXJ0aWVzKCkgPSAwOworCisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1TY3JvbGxMYXllcigpIGNvbnN0OworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoY29uc3Qg
R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoUGxhdGZvcm1MYXllciop
OworCisgICAgYm9vbCBzY3JvbGxMYXllckRpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsTGF5ZXJEaWRDaGFuZ2U7IH0KKyAgICB2b2lkIHNldFNjcm9sbExheWVyRGlkQ2hhbmdlKGJv
b2wgc2Nyb2xsTGF5ZXJEaWRDaGFuZ2UpIHsgbV9zY3JvbGxMYXllckRpZENoYW5nZSA9IHNjcm9s
bExheWVyRGlkQ2hhbmdlOyB9CisKKyAgICBTY3JvbGxpbmdTdGF0ZVRyZWUqIHNjcm9sbGluZ1N0
YXRlVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nU3RhdGVUcmVlOyB9CisgICAgdm9p
ZCBzZXRTY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xsaW5nU3RhdGVUcmVlKiB0cmVlKSB7IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlID0gdHJlZTsgfQorCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBwYXJl
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIFNjcm9sbGluZ1N0YXRlTm9kZSog
Zmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZC5nZXQoKTsgfQorICAgIFNj
cm9sbGluZ1N0YXRlTm9kZSogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHRTaWJs
aW5nLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFBhcmVudChTY3JvbGxpbmdTdGF0ZU5vZGUqIHBh
cmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChQYXNz
T3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gZmlyc3RDaGlsZCkgeyBtX2ZpcnN0Q2hpbGQgPSBm
aXJzdENoaWxkOyB9CisgICAgdm9pZCBzZXROZXh0U2libGluZyhQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlTm9kZT4gbmV4dFNpYmxpbmcpIHsgbV9uZXh0U2libGluZyA9IG5leHRTaWJsaW5nOyB9
CisKKyAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7
CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiB0cmF2ZXJzZU5leHQoKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKworICAg
IFNjcm9sbGluZ1N0YXRlVHJlZSogbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CisKK3ByaXZhdGU6Cisg
ICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBtX3BhcmVudDsKKyAgICBPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVOb2RlPiBtX2ZpcnN0Q2hpbGQ7CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gbV9u
ZXh0U2libGluZzsKKworICAgIGJvb2wgbV9zY3JvbGxMYXllckRpZENoYW5nZTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9wbGF0Zm9ybVNjcm9s
bExheWVyOworI2VuZGlmCisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdTdGF0
ZU5vZGVfaApJbmRleDogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuY3BwCShyZXZpc2lvbiAxMjkyNDApCShmcm9tIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTdGF0ZS5jcHA6MTI5MjQwKQorKysgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuY3BwCShyZXZpc2lvbiAxMjkyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
OSArMjQsMjMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
aW5nVHJlZVN0YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgi
CisKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiBTY3JvbGxpbmdUcmVlU3RhdGU6
OmNyZWF0ZSgpCitQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiBzdGF0ZVRy
ZWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKHN0YXRlVHJl
ZSkpOwogfQogCi1TY3JvbGxpbmdUcmVlU3RhdGU6OlNjcm9sbGluZ1RyZWVTdGF0ZSgpCi0gICAg
OiBtX2NoYW5nZWRQcm9wZXJ0aWVzKDApCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHN0YXRlVHJlZSkK
KyAgICA6IFNjcm9sbGluZ1N0YXRlTm9kZShzdGF0ZVRyZWUpCisgICAgLCBtX2NoYW5nZWRQcm9w
ZXJ0aWVzKDApCiAgICAgLCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoMCkKICAgICAsIG1fc2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQogICAgICwgbV9ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKQEAgLTQ4LDEzMCAr
NTIsMTU5IEBAIFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsaW5nVHJlZVN0YXRlKCkKIHsKIH0K
IAotU2Nyb2xsaW5nVHJlZVN0YXRlOjp+U2Nyb2xsaW5nVHJlZVN0YXRlKCkKK1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlKQorICAgIDogU2Nyb2xsaW5nU3RhdGVOb2RlKHN0
YXRlTm9kZSkKKyAgICAsIG1fY2hhbmdlZFByb3BlcnRpZXMoc3RhdGVOb2RlLT5jaGFuZ2VkUHJv
cGVydGllcygpKQorICAgICwgbV92aWV3cG9ydFJlY3Qoc3RhdGVOb2RlLT52aWV3cG9ydFJlY3Qo
KSkKKyAgICAsIG1fY29udGVudHNTaXplKHN0YXRlTm9kZS0+Y29udGVudHNTaXplKCkpCisgICAg
LCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQoc3RhdGVOb2RlLT53aGVlbEV2ZW50SGFuZGxlckNv
dW50KCkpCisgICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoc3RhdGVOb2RlLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KCkpCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHN0YXRlTm9kZS0+aG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkKKyAgICAsIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KHN0YXRlTm9kZS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpCisgICAgLCBtX2hhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHN0YXRlTm9kZS0+aGFzRW5hYmxlZEhvcml6b250YWxTY3Jv
bGxiYXIoKSkKKyAgICAsIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHN0YXRlTm9kZS0+
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxi
YXJNb2RlKHN0YXRlTm9kZS0+aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSkKKyAgICAsIG1fdmVy
dGljYWxTY3JvbGxiYXJNb2RlKHN0YXRlTm9kZS0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCkpCisg
ICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHN0YXRlTm9kZS0+cmVxdWVzdGVkU2Nyb2xs
UG9zaXRpb24oKSkKKyAgICAsIG1fc2Nyb2xsT3JpZ2luKHN0YXRlTm9kZS0+c2Nyb2xsT3JpZ2lu
KCkpCit7Cit9CisKK1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6flNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSgpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3
cG9ydFJlY3QoY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQorUGFzc093blB0cjxTY3JvbGxp
bmdTdGF0ZU5vZGU+IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y2xvbmVOb2RlKCkKK3sK
KyAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBjbG9uZSA9IGFkb3B0UHRy
KG5ldyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUodGhpcykpOworICAgIHJldHVybiBjbG9u
ZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRW
aWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewogICAgIGlmIChtX3Zp
ZXdwb3J0UmVjdCA9PSB2aWV3cG9ydFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdmll
d3BvcnRSZWN0ID0gdmlld3BvcnRSZWN0OwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmll
d3BvcnRSZWN0OworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVy
dGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldENvbnRlbnRzU2l6
ZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKIHsK
ICAgICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNTaXplKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IENvbnRlbnRzU2l6ZTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFz
Q2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldE5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCiB7CiAg
ICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPT0gbm9uRmFzdFNjcm9sbGFibGVSZWdp
b24pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBu
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFu
Z2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3Zv
aWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCiB7CiAgICAgaWYgKG1fd2hlZWxFdmVu
dEhhbmRsZXJDb3VudCA9PSB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQgPSB3aGVlbEV2ZW50SGFuZGxlckNvdW50
OwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gV2hlZWxFdmVudEhhbmRsZXJDb3VudDsKKyAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCit2
b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyByZWFzb25z
KQogewogICAgIGlmIChtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQgPT0gcmVhc29ucykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkID0gcmVhc29uczsKICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7Cisg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOwog
fQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSkKK3ZvaWQgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShT
Y3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KQogewogICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID09IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0g
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0
SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRl
OjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSB2ZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KQogewogICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5ID0gdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwogICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgfD0gVmVydGljYWxTY3JvbGxFbGFzdGljaXR5OworICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlU3RhdGU6OnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzRW5h
YmxlZEhvcml6b250YWxTY3JvbGxiYXIpCit2b2lkIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkSG9yaXpv
bnRhbFNjcm9sbGJhcikKIHsKICAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
ciA9PSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRIb3Jpem9udGFs
U2Nyb2xsYmFyOwogICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXI7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9w
ZXJ0aWVzKHRydWUpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0SGFzRW5hYmxl
ZFZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQordm9p
ZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9s
bGJhcihib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcikKIHsKICAgICBpZiAobV9oYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXIgPT0gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0
SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRl
OjpzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKQordm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldEhvcml6b250
YWxTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpCiB7
CiAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPT0gaG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUg
PSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhv
cml6b250YWxTY3JvbGxiYXJNb2RlOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXND
aGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNl
dFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSkKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRWZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUpCiB7CiAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXJNb2RlID09IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGU7CiAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBWZXJ0aWNhbFNjcm9sbGJhck1vZGU7
CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQordm9pZCBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKIHsKICAgICBtX3JlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247CiAgICAgbV9jaGFuZ2VkUHJvcGVy
dGllcyB8PSBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJl
ZVN0YXRlOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbikKK3Zv
aWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50
UG9pbnQmIHNjcm9sbE9yaWdpbikKIHsKICAgICBpZiAobV9zY3JvbGxPcmlnaW4gPT0gc2Nyb2xs
T3JpZ2luKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Njcm9sbE9yaWdpbiA9IHNjcm9sbE9y
aWdpbjsKICAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbE9yaWdpbjsKLX0KLQotUGFz
c093blB0cjxTY3JvbGxpbmdUcmVlU3RhdGU+IFNjcm9sbGluZ1RyZWVTdGF0ZTo6Y29tbWl0KCkK
LXsKLSAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiB0cmVlU3RhdGUgPSBhZG9wdFB0cihu
ZXcgU2Nyb2xsaW5nVHJlZVN0YXRlKCp0aGlzKSk7Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyA9
IDA7Ci0KLSAgICByZXR1cm4gdHJlZVN0YXRlLnJlbGVhc2UoKTsKKyAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZS5oCShyZXZpc2lvbiAxMjkyNDApCShmcm9tIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTdGF0ZS5oOjEyOTI0MCkKKysrIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAko
cmV2aXNpb24gMTI5MjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDMyICsyMywyNCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2Ny
b2xsaW5nVHJlZVN0YXRlX2gKLSNkZWZpbmUgU2Nyb2xsaW5nVHJlZVN0YXRlX2gKKyNpZm5kZWYg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlX2gKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAKLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJlZ2lv
bi5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU5vZGUuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZSBTY3JvbGxpbmdU
cmVlU3RhdGUgb2JqZWN0IGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNjcm9s
bGluZyByZWxhdGVkIHByb3BlcnRpZXMuCi0vLyBXaGVuZXZlciBhbnkgcHJvcGVydGllcyBjaGFu
Z2UsIHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3Igd2lsbCBiZSBpbmZvcm1lZCBhbmQgd2lsbCB1
cGRhdGUgdGhlIHN0YXRlCi0vLyBhbmQgc2NoZWR1bGUgYSB0aW1lciB0aGF0IHdpbGwgY2xvbmUg
dGhlIG5ldyBzdGF0ZSBhbmQgc2VuZCBpdCBvdmVyIHRvIHRoZSBzY3JvbGxpbmcgdGhyZWFkLCBh
dm9pZGluZyBsb2NraW5nLgotLy8gRklYTUU6IE9uY2Ugd2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGlu
ZyBpbiBzdWJmcmFtZXMsIHRoaXMgd2lsbCBoYXZlIHRvIGJlY29tZSBhIHRyZWUtbGlrZSBzdHJ1
Y3R1cmUuCi1jbGFzcyBTY3JvbGxpbmdUcmVlU3RhdGUgeworY2xhc3MgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlIDogcHVibGljIFNjcm9sbGluZ1N0YXRlTm9kZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiBjcmVhdGUoKTsKLSAgICB+U2Ny
b2xsaW5nVHJlZVN0YXRlKCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKik7CisgICAgdmlydHVhbCB+
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCk7CiAKICAgICBlbnVtIENoYW5nZWRQcm9wZXJ0
eSB7CiAgICAgICAgIFZpZXdwb3J0UmVjdCA9IDEgPDwgMCwKQEAgLTYzLDEyICs1NSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIEhvcml6b250YWxTY3JvbGxiYXJNb2RlID0gMSA8PCA5LAogICAgICAg
ICBWZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSAxIDw8IDEwLAogICAgICAgICBTY3JvbGxPcmlnaW4g
PSAxIDw8IDExLAotICAgICAgICBTY3JvbGxMYXllciA9IDEgPDwgMTIsCi0gICAgICAgIFJlcXVl
c3RlZFNjcm9sbFBvc2l0aW9uID0gMSA8PCAxMywKKyAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9z
aXRpb24gPSAxIDw8IDEyLAogICAgIH07CiAKLSAgICBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVz
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQotICAgIHVuc2lnbmVkIGNo
YW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQor
ICAgIHZpcnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lTm9kZSgpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgY2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5n
ZWRQcm9wZXJ0aWVzOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0Q2hhbmdlZFByb3BlcnRpZXMo
KSBPVkVSUklERSB7IG1fY2hhbmdlZFByb3BlcnRpZXMgPSAwOyB9CiAKICAgICBjb25zdCBJbnRS
ZWN0JiB2aWV3cG9ydFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0UmVjdDsgfQogICAg
IHZvaWQgc2V0Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTEwMywyMCArOTcsMTUg
QEAgcHVibGljOgogICAgIFNjcm9sbGJhck1vZGUgdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7IH0KICAgICB2b2lkIHNldFZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlKTsKIAotICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtU2Nyb2xsTGF5ZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjcm9sbExheWVyKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKTsKLQogICAgIGNvbnN0IEludFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247IH0KICAg
ICB2b2lkIHNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxP
cmlnaW47IH0KICAgICB2b2lkIHNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYpOwogCi0g
ICAgLy8gQ29waWVzIHRoZSBjdXJyZW50IHRyZWUgc3RhdGUgYW5kIGNsZWFycyB0aGUgY2hhbmdl
ZCBwcm9wZXJ0aWVzIG1hc2sgaW4gdGhlIG9yaWdpbmFsLgotICAgIFBhc3NPd25QdHI8U2Nyb2xs
aW5nVHJlZVN0YXRlPiBjb21taXQoKTsKLQogcHJpdmF0ZToKLSAgICBTY3JvbGxpbmdUcmVlU3Rh
dGUoKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nU3RhdGVUcmVl
Kik7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSopOwogCiAgICAgdW5zaWduZWQgbV9jaGFuZ2VkUHJvcGVydGllczsKIApAQCAtMTQw
LDE1ICsxMjksMTAgQEAgcHJpdmF0ZToKIAogICAgIEludFBvaW50IG1fcmVxdWVzdGVkU2Nyb2xs
UG9zaXRpb247CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47Ci0KLSNpZiBQTEFURk9STShN
QUMpCi0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fcGxhdGZvcm1TY3JvbGxMYXllcjsK
LSNlbmRpZgotCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQogCi0jZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZVN0YXRlX2gK
KyNlbmRpZiAvLyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGVfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVUcmVlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorCisj
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gU2Nyb2xsaW5nU3RhdGVUcmVlOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nU3RhdGVUcmVlKTsKK30KKwor
U2Nyb2xsaW5nU3RhdGVUcmVlOjpTY3JvbGxpbmdTdGF0ZVRyZWUoKQorICAgIDogbV9yb290U3Rh
dGVOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpKQorICAgICwg
bV9oYXNDaGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKK3sKK30KKworU2Nyb2xsaW5nU3RhdGVUcmVl
Ojp+U2Nyb2xsaW5nU3RhdGVUcmVlKCkKK3sKK30KKworUGFzc093blB0cjxTY3JvbGxpbmdTdGF0
ZVRyZWU+IFNjcm9sbGluZ1N0YXRlVHJlZTo6Y29tbWl0KCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGNsb25lcyB0aGUgZW50aXJlIFNjcm9sbGluZ1N0YXRlVHJlZS4KKyAgICBPd25QdHI8U2Ny
b2xsaW5nU3RhdGVUcmVlPiB0cmVlU3RhdGUgPSBTY3JvbGxpbmdTdGF0ZVRyZWU6OmNyZWF0ZSgp
OworCisgICAgLy8gY3VycmVudE5vZGUgaXMgdGhlIG5vZGUgdGhhdCB3ZSBhcmUgY3VycmVudGx5
IGNsb25pbmcuCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBjdXJyZW50Tm9kZSA9IG1fcm9vdFN0
YXRlTm9kZS5nZXQoKTsKKworICAgIC8vIG5leHROb2RlIHJlcHJlc2VudHMgdGhlIG5leHROb2Rl
IHdlIHdpbGwgY2xvbmUuIFNvbWUgdHJlZSB0cmF2ZXJzYWwgaXMgcmVxdWlyZWQgdG8gZmluZCBp
dC4KKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5leHROb2RlID0gMDsKKworICAgIC8vIEFzIHdl
IGNsb25lIGVhY2ggbm9kZSwgd2Ugd2FudCB0byBzZXQgdGhlIGNsb25lZCBub2RlcyByZWxhdGlv
bnNoaXAgcG9pbnRlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBjbG9uZWQgbm9kZXMg
aW4gdGhlIGNsb25lIHRyZWUuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHdlIG5lZWQgdG8ga2VlcCB0
cmFjayBvZiB0aGUgYXBwcm9wcmlhdGUKKyAgICAvLyBub2Rlcy4KKyAgICBTY3JvbGxpbmdTdGF0
ZU5vZGUqIGNsb25lUGFyZW50ID0gMDsKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIGNsb25lUHJl
dmlvdXNTaWJsaW5nID0gMDsKKworICAgIC8vIE5vdyB0cmF2ZXJzZSB0aGUgdHJlZSBhbmQgY2xv
bmUgZWFjaCBub2RlLgorICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBQYXNzT3du
UHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xvbmVOb2RlID0gY3VycmVudE5vZGUtPmNsb25lTm9k
ZSgpOworCisgICAgICAgIC8vIFNldCByZWxhdGlvbnNoaXBzIGZvciB0aGUgbmV3bHkgY2xvbmVk
IG5vZGUuCisgICAgICAgIGNsb25lTm9kZS0+c2V0U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CisgICAgICAgIGNsb25lTm9kZS0+c2V0UGFyZW50KGNsb25lUGFyZW50KTsKKyAg
ICAgICAgaWYgKGNsb25lUGFyZW50KSB7CisgICAgICAgICAgICBpZiAoIWNsb25lUGFyZW50LT5m
aXJzdENoaWxkKCkpCisgICAgICAgICAgICAgICAgY2xvbmVQYXJlbnQtPnNldEZpcnN0Q2hpbGQo
Y2xvbmVOb2RlKTsKKyAgICAgICAgICAgIGlmIChjbG9uZVByZXZpb3VzU2libGluZykKKyAgICAg
ICAgICAgICAgICBjbG9uZVByZXZpb3VzU2libGluZy0+c2V0TmV4dFNpYmxpbmcoY2xvbmVOb2Rl
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBmaW5kIHRoZSBuZXh0IG5vZGUsIGFuZCBz
ZXQgdXAgdGhlIGNsb25lUGFyZW50IGFuZCBjbG9uZVByZXZpb3VzU2libGluZyBwb2ludGVyIGFw
cHJvcHJpYXRlbHkuCisgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpKSB7Cisg
ICAgICAgICAgICBuZXh0Tm9kZSA9IGN1cnJlbnROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAg
ICAgICBjbG9uZVBhcmVudCA9IGNsb25lTm9kZS5nZXQoKTsKKyAgICAgICAgICAgIGNsb25lUHJl
dmlvdXNTaWJsaW5nID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Tm9kZS0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICAgICAgbmV4dE5vZGUgPSBjdXJyZW50Tm9kZS0+bmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgICAgIGNsb25lUGFyZW50ID0gY2xvbmVOb2RlLT5wYXJlbnQoKTsKKyAg
ICAgICAgICAgIGNsb25lUHJldmlvdXNTaWJsaW5nID0gY2xvbmVOb2RlLmdldCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZmlyc3QgY2hpbGQgYW5k
IG5vIG5leHQgc2libGluZywgdGhlbiB3ZSBoYXZlIHRvIHRyYXZlcnNlIHVwIGFuZCBvdmVyIGlu
IHRoZSB0cmVlLgorICAgICAgICAgICAgbmV4dE5vZGUgPSAwOworICAgICAgICAgICAgU2Nyb2xs
aW5nU3RhdGVOb2RlKiB0cmF2ZXJzYWxOb2RlID0gY3VycmVudE5vZGU7CisgICAgICAgICAgICBT
Y3JvbGxpbmdTdGF0ZU5vZGUqIGNsb25lVHJhdmVyc2FsTm9kZSA9IGNsb25lTm9kZS5nZXQoKTsK
KyAgICAgICAgICAgIGNsb25lUHJldmlvdXNTaWJsaW5nID0gMDsKKyAgICAgICAgICAgIHdoaWxl
ICghbmV4dE5vZGUpIHsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWxOb2RlID0gdHJhdmVyc2Fs
Tm9kZS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgY2xvbmVUcmF2ZXJzYWxOb2RlID0gY2xv
bmVUcmF2ZXJzYWxOb2RlLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRyYXZlcnNh
bE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSAwOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV4dE5v
ZGUgPSB0cmF2ZXJzYWxOb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIGNsb25l
UHJldmlvdXNTaWJsaW5nID0gY2xvbmVUcmF2ZXJzYWxOb2RlOworICAgICAgICAgICAgICAgIGNs
b25lUGFyZW50ID0gY2xvbmVQcmV2aW91c1NpYmxpbmcgPyBjbG9uZVByZXZpb3VzU2libGluZy0+
cGFyZW50KCkgOiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1
cnJlbnROb2RlID09IG1fcm9vdFN0YXRlTm9kZSkKKyAgICAgICAgICAgIHRyZWVTdGF0ZS0+c2V0
Um9vdFN0YXRlTm9kZShzdGF0aWNfcG9pbnRlcl9jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT4oY2xvbmVOb2RlKSk7CisKKyAgICAgICAgLy8gQmVmb3JlIHdlIG1vdmUgb24sIHJlc2V0
IGFsbCBvZiBvdXIgaW5kaWNhdG9ycyB0aGF0IHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkIG9uIHRo
ZSBvcmlnaW5hbCB0cmVlLgorICAgICAgICBjdXJyZW50Tm9kZS0+c2V0U2Nyb2xsTGF5ZXJEaWRD
aGFuZ2UoZmFsc2UpOworICAgICAgICBjdXJyZW50Tm9kZS0+cmVzZXRDaGFuZ2VkUHJvcGVydGll
cygpOworCisgICAgICAgIGN1cnJlbnROb2RlID0gbmV4dE5vZGU7CisgICAgfQorCisgICAgLy8g
Tm93IHRoZSBjbG9uZSB0cmVlIGhhcyBjaGFuZ2VkIHByb3BlcnRpZXMsIGFuZCB0aGUgb3JpZ2lu
YWwgdHJlZSBkb2VzIG5vdC4KKyAgICB0cmVlU3RhdGUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVz
KHRydWUpOworICAgIG1faGFzQ2hhbmdlZFByb3BlcnRpZXMgPSBmYWxzZTsKKworICAgIHJldHVy
biB0cmVlU3RhdGUucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xs
aW5nU3RhdGVUcmVlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVUcmVlX2gKKworI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisgCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
CisvLyBUaGUgU2Nyb2xsaW5nU3RhdGVUcmVlIGlzIGEgdHJlZSB0aGF0IG1hbmFnZWQgU2Nyb2xs
aW5nU3RhdGVOb2Rlcy4gVGhlIG5vZGVzIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQKKy8vIHN0
YXRlIG9mIHNjcm9sbGluZyByZWxhdGVkIHByb3BlcnRpZXMuIFdoZW5ldmVyIGFueSBwcm9wZXJ0
aWVzIGNoYW5nZSwgdGhlIHNjcm9sbGluZyBjb29yZGluYXRvcgorLy8gd2lsbCBiZSBpbmZvcm1l
ZCBhbmQgd2lsbCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9uZSB0aGUgbmV3IHN0YXRl
IHRyZWUgYW5kIHNlbmQgaXQgb3ZlciB0bworLy8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIGF2b2lk
aW5nIGxvY2tpbmcuIAorCisvLyBGSVhNRTogUmlnaHQgbm93IHRoZSBzY3JvbGxpbmcgdGhyZWFk
IG9ubHkgZXZlciBsb29rcyBhdCB0aGUgcm9vdCBub2RlLiBJbiB0aGUgZnV0dXJlLCBpdCBzaG91
bGQKKy8vIGxvb2sgYXQgdGhlIHdob2xlIHRyZWUgYW5kIGJ1aWxkIGEgU2Nyb2xsaW5nVHJlZSB0
aGF0IG1pbWljcyB0aGUgU2Nyb2xsaW5nU3RhdGVUcmVlLgorCisvLyBGSVhNRTogUmlnaHQgbm93
IHRoZXJlIGlzIG9ubHkgb25lIHR5cGUgb2YgU2Nyb2xsaW5nU3RhdGVOb2RlLCB3aGljaCBpcyB0
aGUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLgorLy8gSXQgaXMgY3VycmVudGx5IHVzZWQg
Zm9yIHRoZSBtYWluIGZyYW1lLCBidXQgaW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYmUgYWJsZSB0
byBiZSB1c2VkIGZvciBzdWJmcmFtZXMKKy8vIGFuZCBvdmVyZmxvdyBhcmVhcy4gSW4gdGhlIGZ1
dHVyZSwgbW9yZSBjbGFzc2VzIHdpbGwgaW5oZXJpdCBmcm9tIFNjcm9sbGluZ1N0YXRlTm9kZSwg
c3VjaCBhcworLy8gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUgYW5kIFNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZSBmb3IgZml4ZWQgcG9zaXRpb24gb2JqZWN0cyBhbmQgc3RpY2t5IHBvc2l0b25lZAor
Ly8gb2JqZWN0cywgcmVzcGVjdGl2ZWx5LgorCitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWUgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gY3JlYXRl
KCk7CisgICAgflNjcm9sbGluZ1N0YXRlVHJlZSgpOworCisgICAgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2Rl
LmdldCgpOyB9CisKKyAgICAvLyBDb3BpZXMgdGhlIGN1cnJlbnQgdHJlZSBzdGF0ZSBhbmQgY2xl
YXJzIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMgbWFzayBpbiB0aGUgb3JpZ2luYWwuCisgICAgUGFz
c093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IGNvbW1pdCgpOworCisgICAgdm9pZCBzZXRIYXND
aGFuZ2VkUHJvcGVydGllcyhib29sIGNoYW5nZWRQcm9wZXJ0aWVzKSB7IG1faGFzQ2hhbmdlZFBy
b3BlcnRpZXMgPSBjaGFuZ2VkUHJvcGVydGllczsgfQorICAgIGJvb2wgaGFzQ2hhbmdlZFByb3Bl
cnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOyB9CisKK3ByaXZh
dGU6CisgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKCk7CisKKyAgICB2b2lkIHNldFJvb3RTdGF0ZU5v
ZGUoUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IHJvb3RTdGF0ZU5vZGUp
IHsgbV9yb290U3RhdGVOb2RlID0gcm9vdFN0YXRlTm9kZTsgfQorCisgICAgT3duUHRyPFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gbV9yb290U3RhdGVOb2RlOworICAgIGJvb2wgbV9oYXND
aGFuZ2VkUHJvcGVydGllczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdTdGF0
ZVRyZWVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZS5jcHAJKHJldmlzaW9uIDEyOTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBA
CiAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE4LDIyICsxMTgsMjIgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlOjppbnZhbGlkYXRlKCkKICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoZGVyZWZTY3Jv
bGxpbmdDb29yZGluYXRvciwgbV9zY3JvbGxpbmdDb29yZGluYXRvci5yZWxlYXNlKCkubGVha1Jl
ZigpKSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlKFBhc3NP
d25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiBzY3JvbGxpbmdUcmVlU3RhdGUpCit2b2lkIFNjcm9s
bGluZ1RyZWU6OmNvbW1pdE5ld1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJl
ZT4gc2Nyb2xsaW5nU3RhdGVUcmVlKQogewogICAgIEFTU0VSVChTY3JvbGxpbmdUaHJlYWQ6Omlz
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIGlmIChzY3JvbGxpbmdUcmVlU3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiAoU2Nyb2xsaW5nVHJlZVN0YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50
IHwgU2Nyb2xsaW5nVHJlZVN0YXRlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiB8IFNjcm9sbGlu
Z1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlVHJlZS0+
cm9vdFN0YXRlTm9kZSgpLT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6V2hlZWxFdmVudEhhbmRsZXJDb3VudCB8IFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pIHx8IHNjcm9sbGluZ1N0YXRlVHJlZS0+
cm9vdFN0YXRlTm9kZSgpLT5zY3JvbGxMYXllckRpZENoYW5nZSgpKSB7CiAgICAgICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CiAKLSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+
Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2Nyb2xsTGF5ZXIpCisg
ICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2Nyb2xsTGF5
ZXJEaWRDaGFuZ2UoKSkKICAgICAgICAgICAgIG1fbWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24gPSBJ
bnRQb2ludCgpOwotICAgICAgICBpZiAoc2Nyb2xsaW5nVHJlZVN0YXRlLT5jaGFuZ2VkUHJvcGVy
dGllcygpICYgU2Nyb2xsaW5nVHJlZVN0YXRlOjpXaGVlbEV2ZW50SGFuZGxlckNvdW50KQotICAg
ICAgICAgICAgbV9oYXNXaGVlbEV2ZW50SGFuZGxlcnMgPSBzY3JvbGxpbmdUcmVlU3RhdGUtPndo
ZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKLSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWVTdGF0ZS0+
Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pCi0gICAgICAgICAgICBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gc2Nyb2xs
aW5nVHJlZVN0YXRlLT5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpOworICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OldoZWVsRXZlbnRIYW5kbGVyQ291bnQpCisgICAg
ICAgICAgICBtX2hhc1doZWVsRXZlbnRIYW5kbGVycyA9IHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgICAgIGlmIChzY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCisgICAg
ICAgICAgICBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCktPm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCk7CiAgICAgfQogCi0gICAg
bV9yb290Tm9kZS0+dXBkYXRlKHNjcm9sbGluZ1RyZWVTdGF0ZS5nZXQoKSk7CisgICAgbV9yb290
Tm9kZS0+dXBkYXRlKHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKIAogICAg
IHVwZGF0ZURlYnVnUm9vdExheWVyKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxMjkzODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UG9pbnQ7CiBjbGFz
cyBTY3JvbGxpbmdDb29yZGluYXRvcjsKIGNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlOwotY2xhc3Mg
U2Nyb2xsaW5nVHJlZVN0YXRlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAvLyBUaGUg
U2Nyb2xsaW5nVHJlZSBjbGFzcyBsaXZlcyBhbG1vc3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9s
bGluZyB0aHJlYWQgYW5kIG1hbmFnZXMgdGhlCiAvLyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSBy
ZWdpb25zIG9uIHRoZSBwYWdlLiBJdCdzIGFsc28gcmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5n
IGV2ZW50cwpAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7
Ci0gICAgdm9pZCBjb21taXROZXdUcmVlU3RhdGUoUGFzc093blB0cjxTY3JvbGxpbmdUcmVlU3Rh
dGU+KTsKKyAgICB2b2lkIGNvbW1pdE5ld1RyZWVTdGF0ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0
YXRlVHJlZT4pOwogCiAgICAgdm9pZCBzZXRNYWluRnJhbWVQaW5TdGF0ZShib29sIHBpbm5lZFRv
VGhlTGVmdCwgYm9vbCBwaW5uZWRUb1RoZVJpZ2h0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmNwcAkocmV2aXNpb24g
MTI5Mzg5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQogCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0YXRlLmgiCisjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDgsMzYgKzQ4LDM2IEBAIFNjcm9sbGluZ1RyZWVOb2RlOjp+U2Nyb2xsaW5nVHJlZU5vZGUoKQog
ewogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlOjp1cGRhdGUoU2Nyb2xsaW5nVHJlZVN0YXRl
KiBzdGF0ZSkKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIHN0YXRlKQogewotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMo
KSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6Vmlld3BvcnRSZWN0KQorICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRS
ZWN0KQogICAgICAgICBtX3ZpZXdwb3J0UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3QoKTsKIAot
ICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6
Q29udGVudHNTaXplKQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplKQogICAgICAgICBtX2NvbnRlbnRz
U2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFBy
b3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZCkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkg
JiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQpCiAgICAgICAgIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCA9IHN0YXRlLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKCk7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdUcmVlU3RhdGU6Okhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KQorICAgIGlmIChz
dGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkgPSBzdGF0ZS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKIAotICAgIGlm
IChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQog
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IHN0YXRlLT52ZXJ0aWNhbFNjcm9s
bEVsYXN0aWNpdHkoKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1RyZWVTdGF0ZTo6SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgaWYg
KHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKICAgICAgICAgbV9oYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhciA9IHN0YXRlLT5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigp
OwogCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0
YXRlOjpIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpCisgICAgaWYgKHN0YXRlLT5jaGFuZ2Vk
UHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIYXNFbmFibGVkVmVy
dGljYWxTY3JvbGxiYXIpCiAgICAgICAgIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID0g
c3RhdGUtPmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOwogCi0gICAgaWYgKHN0YXRlLT5j
aGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nVHJlZVN0YXRlOjpIb3Jpem9udGFsU2Nyb2xs
YmFyTW9kZSkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTY3JvbGxiYXJNb2RlKQogICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXJNb2RlID0gc3RhdGUtPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7
CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3Rh
dGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0
aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSkKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBzdGF0ZS0+dmVydGljYWxTY3Jv
bGxiYXJNb2RlKCk7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3Jv
bGxpbmdUcmVlU3RhdGU6OlNjcm9sbE9yaWdpbikKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9w
ZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikKICAg
ICAgICAgbV9zY3JvbGxPcmlnaW4gPSBzdGF0ZS0+c2Nyb2xsT3JpZ2luKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUu
aAkocmV2aXNpb24gMTI5Mzg5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xs
aW5nVHJlZTsKLWNsYXNzIFNjcm9sbGluZ1RyZWVTdGF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZU5vZGUgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJl
ZSopOwogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVOb2RlKCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlKFNjcm9sbGluZ1RyZWVTdGF0ZSopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU3RhdGUuY3Bw
CShyZXZpc2lvbiAxMjkzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGF0
ZS5oIgotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRl
OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nVHJlZVN0YXRl
KTsKLX0KLQotU2Nyb2xsaW5nVHJlZVN0YXRlOjpTY3JvbGxpbmdUcmVlU3RhdGUoKQotICAgIDog
bV9jaGFuZ2VkUHJvcGVydGllcygwKQotICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KDAp
Ci0gICAgLCBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoMCkK
LSAgICAsIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUp
Ci0gICAgLCBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkK
LSAgICAsIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpCi0gICAgLCBtX2hh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSkKLSAgICAsIG1faG9yaXpvbnRhbFNjcm9s
bGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKLSAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlKFNj
cm9sbGJhckF1dG8pCi17Ci19Ci0KLVNjcm9sbGluZ1RyZWVTdGF0ZTo6flNjcm9sbGluZ1RyZWVT
dGF0ZSgpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRWaWV3cG9ydFJlY3Qo
Y29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQotewotICAgIGlmIChtX3ZpZXdwb3J0UmVjdCA9
PSB2aWV3cG9ydFJlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlld3BvcnRSZWN0ID0g
dmlld3BvcnRSZWN0OwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmlld3BvcnRSZWN0Owot
fQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSkKLXsKLSAgICBpZiAobV9jb250ZW50c1NpemUgPT0gY29udGVudHNT
aXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6
ZTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IENvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdUcmVlU3RhdGU6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lv
biYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCi17Ci0gICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24gPT0gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsK
LSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwotfQot
Ci12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNp
Z25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQotewotICAgIGlmIChtX3doZWVsRXZlbnRIYW5k
bGVyQ291bnQgPT0gd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKLSAg
ICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFdoZWVsRXZlbnRIYW5kbGVyQ291bnQ7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHJlYXNvbnMpCi17Ci0gICAg
aWYgKG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9PSByZWFz
b25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQgPSByZWFzb25zOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0g
U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsKLX0KLQotdm9pZCBT
Y3JvbGxpbmdUcmVlU3RhdGU6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVs
YXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCi17Ci0gICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkgPT0gaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBob3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IEhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5OwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHkgdmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KQotewotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9PSB2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5ID0gdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgfD0gVmVydGljYWxTY3JvbGxFbGFzdGljaXR5OwotfQotCi12b2lkIFNjcm9sbGlu
Z1RyZWVTdGF0ZTo6c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKLXsKLSAgICBpZiAobV9oYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhciA9PSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhciA9IGhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gSGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXI7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRI
YXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxi
YXIpCi17Ci0gICAgaWYgKG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyID09IGhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNFbmFibGVk
VmVydGljYWxTY3JvbGxiYXIgPSBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgbV9j
aGFuZ2VkUHJvcGVydGllcyB8PSBIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxi
YXJNb2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKQotewotICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXJNb2RlID09IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0gaG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGU7Ci0gICAgbV9jaGFuZ2VkUHJvcGVydGllcyB8PSBIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsK
LX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJNb2RlIHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKLXsKLSAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhck1vZGUgPT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsK
LSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLX0KLQot
dm9pZCBTY3JvbGxpbmdUcmVlU3RhdGU6OnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKLXsKLSAgICBtX3JlcXVlc3RlZFNj
cm9sbFBvc2l0aW9uID0gcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb247Ci0gICAgbV9jaGFuZ2VkUHJv
cGVydGllcyB8PSBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbjsKLX0KLQotdm9pZCBTY3JvbGxpbmdU
cmVlU3RhdGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQot
ewotICAgIGlmIChtX3Njcm9sbE9yaWdpbiA9PSBzY3JvbGxPcmlnaW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2Nyb2xsT3JpZ2luID0gc2Nyb2xsT3JpZ2luOwotICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgfD0gU2Nyb2xsT3JpZ2luOwotfQotCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVT
dGF0ZT4gU2Nyb2xsaW5nVHJlZVN0YXRlOjpjb21taXQoKQotewotICAgIE93blB0cjxTY3JvbGxp
bmdUcmVlU3RhdGU+IHRyZWVTdGF0ZSA9IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU3RhdGUo
KnRoaXMpKTsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzID0gMDsKLQotICAgIHJldHVybiB0cmVl
U3RhdGUucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVN0YXRlLmgJKHJldmlzaW9uIDEyOTM4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3Jv
bGxpbmdUcmVlU3RhdGVfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlU3RhdGVfaAotCi0jaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
VHlwZXMuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhlIFNjcm9sbGlu
Z1RyZWVTdGF0ZSBvYmplY3Qga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2Ny
b2xsaW5nIHJlbGF0ZWQgcHJvcGVydGllcy4KLS8vIFdoZW5ldmVyIGFueSBwcm9wZXJ0aWVzIGNo
YW5nZSwgdGhlIHNjcm9sbGluZyBjb29yZGluYXRvciB3aWxsIGJlIGluZm9ybWVkIGFuZCB3aWxs
IHVwZGF0ZSB0aGUgc3RhdGUKLS8vIGFuZCBzY2hlZHVsZSBhIHRpbWVyIHRoYXQgd2lsbCBjbG9u
ZSB0aGUgbmV3IHN0YXRlIGFuZCBzZW5kIGl0IG92ZXIgdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQs
IGF2b2lkaW5nIGxvY2tpbmcuCi0vLyBGSVhNRTogT25jZSB3ZSBzdXBwb3J0IGZhc3Qgc2Nyb2xs
aW5nIGluIHN1YmZyYW1lcywgdGhpcyB3aWxsIGhhdmUgdG8gYmVjb21lIGEgdHJlZS1saWtlIHN0
cnVjdHVyZS4KLWNsYXNzIFNjcm9sbGluZ1RyZWVTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZVN0YXRlPiBjcmVhdGUoKTsKLSAgICB+U2Nyb2xsaW5n
VHJlZVN0YXRlKCk7Ci0KLSAgICBlbnVtIENoYW5nZWRQcm9wZXJ0eSB7Ci0gICAgICAgIFZpZXdw
b3J0UmVjdCA9IDEgPDwgMCwKLSAgICAgICAgQ29udGVudHNTaXplID0gMSA8PCAxLAotICAgICAg
ICBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IDEgPDwgMiwKLSAgICAgICAgV2hlZWxFdmVudEhh
bmRsZXJDb3VudCA9IDEgPDwgMywKLSAgICAgICAgU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCA9IDEgPDwgNCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkgPSAxIDw8IDUsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IDEgPDwg
NiwKLSAgICAgICAgSGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIgPSAxIDw8IDcsCi0gICAg
ICAgIEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IDEgPDwgOCwKLSAgICAgICAgSG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUgPSAxIDw8IDksCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSA9IDEgPDwgMTAsCi0gICAgICAgIFNjcm9sbE9yaWdpbiA9IDEgPDwgMTEsCi0gICAgICAgIFNj
cm9sbExheWVyID0gMSA8PCAxMiwKLSAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAx
IDw8IDEzLAotICAgIH07Ci0KLSAgICBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQotICAgIHVuc2lnbmVkIGNoYW5nZWRQcm9w
ZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQotCi0gICAgY29u
c3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7
IH0KLSAgICB2b2lkIHNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsg
fQotICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKLQotICAgIGNvbnN0
IFJlZ2lvbiYgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX25vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uOyB9Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mKTsKLQotICAgIHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7IH0KLSAgICB2b2lkIHNl
dFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOwotCi0gICAgTWFpblRocmVhZFNjcm9s
bGluZ1JlYXNvbnMgc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRo
cmVhZDsgfQotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7Ci0KLSAgICBTY3JvbGxFbGFzdGlj
aXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eTsgfQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eSk7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5OyB9Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eSk7Ci0KLSAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsgfQotICAgIHZvaWQgc2V0
SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBib29sIGhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoYm9v
bCk7Ci0KLSAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsgfQotICAgIHZvaWQgc2V0SG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBTY3JvbGxiYXJNb2RlIHZl
cnRpY2FsU2Nyb2xsYmFyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXJN
b2RlOyB9Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSk7
Ci0KLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICBjb25zdCBJ
bnRQb2ludCYgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVl
c3RlZFNjcm9sbFBvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYpOwotCi0gICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxPcmln
aW4oY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0
YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5h
bC4KLSAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTdGF0ZT4gY29tbWl0KCk7Ci0KLXByaXZh
dGU6Ci0gICAgU2Nyb2xsaW5nVHJlZVN0YXRlKCk7Ci0KLSAgICB1bnNpZ25lZCBtX2NoYW5nZWRQ
cm9wZXJ0aWVzOwotCi0gICAgSW50UmVjdCBtX3ZpZXdwb3J0UmVjdDsKLSAgICBJbnRTaXplIG1f
Y29udGVudHNTaXplOwotCi0gICAgUmVnaW9uIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247Ci0K
LSAgICB1bnNpZ25lZCBtX3doZWVsRXZlbnRIYW5kbGVyQ291bnQ7Ci0KLSAgICBNYWluVGhyZWFk
U2Nyb2xsaW5nUmVhc29ucyBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQ7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHk7Ci0gICAgU2Nyb2xsRWxhc3RpY2l0eSBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKLQot
ICAgIGJvb2wgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBib29sIG1faGFz
RW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgU2Nyb2xsYmFyTW9kZSBtX2hvcml6b250
YWxTY3JvbGxiYXJNb2RlOwotICAgIFNjcm9sbGJhck1vZGUgbV92ZXJ0aWNhbFNjcm9sbGJhck1v
ZGU7Ci0KLSAgICBJbnRQb2ludCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uOwotICAgIEludFBv
aW50IG1fc2Nyb2xsT3JpZ2luOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxQ
bGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXI7Ci0jZW5kaWYKLQotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKLQotI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjLm1tCShyZXZpc2lvbiAxMjkzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlNjcm9sbGluZ1RocmVhZC5o
IgogI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZS5oIgotI2ltcG9ydCAiU2Nyb2xsaW5nVHJlZVN0YXRl
LmgiCisjaW1wb3J0ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbXBvcnQgPHd0Zi9N
YWluVGhyZWFkLmg+CkluZGV4OiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2Rl
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5v
ZGVNYWMubW0JKHJldmlzaW9uIDEyOTI0MCkJKGZyb20gcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTdGF0ZU1hYy5tbToxMjkyNDApCisrKyBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nU3RhdGVOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMu
bW0JKHJldmlzaW9uIDEyOTI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDE4ICsyNCwy
NSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVl
U3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU5vZGUuaCIKKworI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlVHJlZS5oIgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybUxheWVyKiBTY3JvbGxpbmdUcmVlU3RhdGU6
OnBsYXRmb3JtU2Nyb2xsTGF5ZXIoKSBjb25zdAorUGxhdGZvcm1MYXllciogU2Nyb2xsaW5nU3Rh
dGVOb2RlOjpwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGF0
Zm9ybVNjcm9sbExheWVyLmdldCgpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGF0ZTo6c2V0
U2Nyb2xsTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3ZvaWQgU2Ny
b2xsaW5nU3RhdGVOb2RlOjpzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKQoreworICAgIG1fcGxhdGZvcm1TY3JvbGxMYXllciA9IHBsYXRmb3JtTGF5ZXI7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjpzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQogewogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtU2Nyb2xs
TGF5ZXIgPSBncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpIDog
bmlsOwogCkBAIC00Myw3ICs1MCw4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVN0YXRlOjpzZXRTY3Jv
bGxMYXllcigKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wbGF0Zm9ybVNjcm9sbExheWVyID0g
cGxhdGZvcm1TY3JvbGxMYXllcjsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbExh
eWVyOworICAgIG1fc2Nyb2xsTGF5ZXJEaWRDaGFuZ2UgPSB0cnVlOworICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVOb2RlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLmgJKHJldmlzaW9uIDEyOTM4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICAvLyBTY3JvbGxpbmdUcmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGUoU2Nyb2xsaW5nVHJlZVN0YXRlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBPVkVS
UklERTsKIAogICAgIC8vIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIG1lbWJlciBmdW5jdGlv
bnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJl
ZU5vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLm1tCShyZXZpc2lvbiAxMjkzODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z1RyZWUuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRpbGVD
YWNoZS5oIgogI2luY2x1ZGUgIldlYlRpbGVMYXllci5oIgpAQCAtNjIsMjYgKzYyLDI2IEBAIFNj
cm9sbGluZ1RyZWVOb2RlTWFjOjp+U2Nyb2xsaW5nVHJlZU5vZGUKICAgICAgICAgQ0ZSdW5Mb29w
VGltZXJJbnZhbGlkYXRlKG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQoKSk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnVwZGF0ZShTY3JvbGxpbmdUcmVlU3RhdGUqIHN0YXRlKQor
dm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSogc3RhdGUpCiB7CiAgICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0ZSk7CiAK
LSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6
OlNjcm9sbExheWVyKQorICAgIGlmIChzdGF0ZS0+c2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoKSkKICAg
ICAgICAgbV9zY3JvbGxMYXllciA9IHN0YXRlLT5wbGF0Zm9ybVNjcm9sbExheWVyKCk7CiAKLSAg
ICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKQorICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMo
KSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24p
CiAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHN0YXRlLT5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bigpKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIChTY3JvbGxpbmdU
cmVlU3RhdGU6OlNjcm9sbExheWVyIHwgU2Nyb2xsaW5nVHJlZVN0YXRlOjpDb250ZW50c1NpemUg
fCBTY3JvbGxpbmdUcmVlU3RhdGU6OlZpZXdwb3J0UmVjdCkpCisgICAgaWYgKHN0YXRlLT5zY3Jv
bGxMYXllckRpZENoYW5nZSgpIHx8IHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplIHwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQogICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0
ZShzY3JvbGxQb3NpdGlvbigpKTsKIAotICAgIGlmICgoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVz
KCkgJiBTY3JvbGxpbmdUcmVlU3RhdGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQpKSB7CisgICAgaWYgKChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCkpIHsKICAgICAgICAgdW5zaWduZWQgbWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMgPSB0aGlzLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFk
KCk7CiAKICAgICAgICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKSB7CiAgICAgICAg
ICAgICAvLyBXZSdyZSB0cmFuc2l0aW9uaW5nIHRvIHRoZSBzbG93ICJ1cGRhdGUgc2Nyb2xsIGxh
eWVyIHBvc2l0aW9uIG9uIHRoZSBtYWluIHRocmVhZCIgbW9kZS4KICAgICAgICAgICAgIC8vIElu
aXRpYWxpemUgdGhlIHByb2JhYmxlIG1haW4gdGhyZWFkIHNjcm9sbCBwb3NpdGlvbiB3aXRoIHRo
ZSBjdXJyZW50IHNjcm9sbCBsYXllciBwb3NpdGlvbi4KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+
Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1RyZWVTdGF0ZTo6UmVxdWVzdGVkU2Nyb2xs
UG9zaXRpb24pCisgICAgICAgICAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS0+
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIENHUG9pbnQgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0KCku
cG9zaXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZVN0YXRlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU3RhdGVNYWMubW0JKHJldmlzaW9uIDEyOTM4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU3RhdGVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RhdGUuaCIKLQotI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1M
YXllciogU2Nyb2xsaW5nVHJlZVN0YXRlOjpwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybVNjcm9sbExheWVyLmdldCgpOwotfQotCi12b2lkIFNjcm9s
bGluZ1RyZWVTdGF0ZTo6c2V0U2Nyb2xsTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllcikKLXsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyID0gZ3Jh
cGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbDsKLQotICAg
IGlmIChtX3BsYXRmb3JtU2Nyb2xsTGF5ZXIgPT0gcGxhdGZvcm1TY3JvbGxMYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wbGF0Zm9ybVNjcm9sbExheWVyID0gcGxhdGZvcm1TY3JvbGxM
YXllcjsKLSAgICBtX2NoYW5nZWRQcm9wZXJ0aWVzIHw9IFNjcm9sbExheWVyOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQo=
</data>
<flag name="review"
          id="177576"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>