<?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>20980</bug_id>
          
          <creation_ts>2008-09-21 17:00:27 -0700</creation_ts>
          <short_desc>Split off uncommonly used data from Node similar to ElementRareData</short_desc>
          <delta_ts>2008-09-25 19:37:54 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="David Smith">catfish.man</reporter>
          <assigned_to name="David Smith">catfish.man</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92043</commentid>
    <comment_count>0</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-21 17:00:27 -0700</bug_when>
    <thetext>There are a number of fairly hot virtual functions on Node that could be made non-virtual if there was a free bit to put a flag in. Darin mentioned that he was considering making a NodeRareData, so I&apos;m investigating doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92044</commentid>
    <comment_count>1</comment_count>
      <attachid>23636</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-21 17:05:56 -0700</bug_when>
    <thetext>Created attachment 23636
Draft patch

Current status is: passes run-webkit-tests, appears to be around a 1.2% regression on slickspeed, haven&apos;t tested anything else yet. Next up is cleanup and instrumenting the various bits on Node to see which ones are rare enough to move into RareData, then I&apos;ll use a newly free bit or two to get rid of perf regressions and it should be ready for review then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92046</commentid>
    <comment_count>2</comment_count>
      <attachid>23637</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-21 17:07:58 -0700</bug_when>
    <thetext>Created attachment 23637
Correct draft patch

Forgot to svn add NodeRareData.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92058</commentid>
    <comment_count>3</comment_count>
      <attachid>23637</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 19:06:40 -0700</bug_when>
    <thetext>Comment on attachment 23637
Correct draft patch

This looks really good!

+    virtual NodeRareData* createRareData();

The createRareData function itself shouldn&apos;t be virtual. Instead only the function that actually calls new should be a virtual function. That can be named something like newRareData().

+#ifndef NodeRareData_h

This file needs a copyright and license header.

I also think you&apos;re including too many headers in the file. Include only what&apos;s absolutely required.

We might want to consider having the RareData just be a struct or a class with public data rather than a class with accessor functions. The accessor functions could all be back in Node.

If we arrange things carefully, NodeListsNodeData doesn&apos;t have to be in the NodeRareData header. We might not be able to inline the access to it.

+        NodeRareData()
+        : m_nodeLists(0)
+        , m_tabIndex(0)
+        , m_tabIndexSetExplicitly(false)
+        {
+            
+        }

We normally indent the : and commas. There&apos;s no need to initialize an OwnPtr to 0 -- smart pointers initialize themselves. There shouldn&apos;t be a space between the brackets.

+        void setNodeLists(NodeListsNodeData * lists) { m_nodeLists.set(lists); }

No space before the *. The argument to setNodeLists should probably be an auto_ptr.

+        NodeListsNodeData *nodeLists() const { return m_nodeLists ? m_nodeLists.get() : 0; }

The * should be next to the type name. There&apos;s no need for the ternary operator here. The get() function already returns 0. for that case.

+        void setTabIndex(short idx) { m_tabIndex = idx; m_tabIndexSetExplicitly = true; }

Should say index here -- no need to abbreviate to idx.

+    if(hasRareData())

Missing space here. I think this would read nicer with the ternary operator.

+    NodeRareData *rd = createRareData();

The * needs to go next to the type, not the variable name. I suggest &quot;data&quot; as the name rather than &quot;rd&quot;.

-    ASSERT(m_nodeLists);
+    ASSERT(rareData());

Should assert rareData()-&gt;nodeLists() too.

     // Perform error checking as required by spec for setting Node.prefix. Used by
-    // Element::setPrefix() and Attr::setPrefix()
+    // Node::setPrefix() and Attr::setPrefix()

Is this change correct?

-    ElementRareData(Element*);
+    ElementRareData(Node *);

This should not change. It should still take an Element.

-inline ElementRareData::ElementRareData(Element* element)
-    : m_minimumSizeForResizing(defaultMinimumSizeForResizing())
-    , m_computedStyle(0)
-    , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+    
+inline ElementRareData::ElementRareData(Node *node)
+: m_minimumSizeForResizing(defaultMinimumSizeForResizing())
+, m_computedStyle(0)
+, m_needsFocusAppearanceUpdateSoonAfterAttach(false)

None of this should be changing.

-inline ElementRareData* Element::rareData()
+inline ElementRareData* Element::elementRareData()

You shouldn&apos;t change the name to elementRareData(). Instead you should have this have the same name, but a different return type, than the rareData() function in the base class. That way, you can just call rareData() and get the object of the right type. You&apos;ll see -- it&apos;ll work well.

-    return hasRareData() ? rareDataFromMap(this) : 0;
+    return hasRareData() ? static_cast&lt;ElementRareData*&gt;(NodeRareData::rareDataFromMap(this)) : 0;

The implementation should just be this instead:

    inline ElementRareData* Element::rareData()
    {
        return static_cast&lt;ElementRareData*&gt;(Node::rareData());
    }

Also, this needs to be in a header file now that it&apos;s protected rather than private. It might be used by derived classes. I think the inline function definitions should go in ElementRareData.h.

The createRareData function should be inlined and non-virtual and should be overridden much the way I suggest overriding rareData() above.

Most of the changes in Element.cpp shouldn&apos;t be necessary if you follow that plan.

+    void setHasRareData(bool b = true) { m_hasRareData = b; }

That function should be private or non-existent.

Good luck. I can&apos;t wait to see another draft of this patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92059</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 19:07:17 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; appears to be around a 1.2% regression on slickspeed

Darn!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92249</commentid>
    <comment_count>5</comment_count>
      <attachid>23686</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-22 17:41:18 -0700</bug_when>
    <thetext>Created attachment 23686
Improved patch

This addresses a lot of the comments above, as well as making a few other changes:

* createRareData was changed to ensureRareData, since that&apos;s what it actually does. The createRareData name is now used for the virtual function that creates the correct type of RareData.

* I couldn&apos;t figure out how to implement rareData() for Element in terms of Node&apos;s rareData(); it failed to link due to rareData() being inline in the cpp file. I tried moving it to the .h file, but that required including NodeRareData.h in Node.h, and that in turn required making NodeRareData.h a public header (since Node.h is used in WebKit). That seemed less than ideal.

* I also wasn&apos;t sure how to move NodeListsNodeData out of NodeRareData.h, since it appears to be necessary for typedef HashMap&lt;const Node*, NodeRareData*&gt; NodeRareDataMap; to work.

* I changed the hasRareData() check in rareData() to an ASSERT, since most callsites were already checking it anyway.

* I left the accessors in NodeRareData rather than just making things public, since it enforces updating m_tabIndexSetExplicitly when changing m_tabIndex

One nice thing is that due to removing redundant checks and being more careful to use hasRareData() instead of checking for rareData() being non-null, this appears to remove most/all of the performance downside. A few things got faster (non-queryselectorall slickspeed, xpath getelementsbyclassname), a few got slower (js getelementsbyclassname, queryselectorall slickspeed). I suspect that&apos;s mostly due to inaccuracies in the tests I&apos;m using, although I suppose it could be due to Node being smaller now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92290</commentid>
    <comment_count>6</comment_count>
      <attachid>23695</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-22 23:46:41 -0700</bug_when>
    <thetext>Created attachment 23695
Make things go zoom

This moves another bit (focus) into rareData and uses the space to add an isContainer flag. This allows firstChild(), lastChild(), childNodeCount(), and childNode() to be converted from virtual to inline for a nice speedup:

0.5% on prototype slickspeed
11.7% on jquery slickspeed
5.1% on ext slickspeed
7.9% on qsa slickspeed

Presumably other things are sped up as well, since a lot of stuff uses these directly or indirectly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92312</commentid>
    <comment_count>7</comment_count>
      <attachid>23700</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-23 04:11:37 -0700</bug_when>
    <thetext>Created attachment 23700
Now with ChangeLog and a few cleanups

I did some instrumenting of Node and browsed around for a while, the only site that has a ton of rareData on it is digg.com, which appears to call childNodes on *almost every node on the entire site*. Even the ones that can&apos;t possibly have children, like CharacterData. However, even with that I couldn&apos;t get it to show up as a measurable regression in the pageload testing I did on digg.

This should probably be tested on the internal PLT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92811</commentid>
    <comment_count>8</comment_count>
      <attachid>23700</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-25 15:14:59 -0700</bug_when>
    <thetext>Comment on attachment 23700
Now with ChangeLog and a few cleanups

Great work!

 #include &quot;Node.h&quot;
+#include &quot;ContainerNode.h&quot;
 
We don&apos;t need both. The Node.h include can be replaced by the ContainerNode one. Same applies in the other places you made this change

-ContainerNode::ContainerNode(Document* doc, bool isElement)
-    : EventTargetNode(doc, isElement)
+ContainerNode::ContainerNode(Document* doc, bool isElement, bool isContainer)
+    : EventTargetNode(doc, isElement, isContainer)

+    ContainerNode(Document*, bool isElement = false, bool isContainer = true);

There&apos;s no need for the constructor of ContainerNode to take an isContainer argument. Just pass true!

+    if (hasRareData())
+    {   

Brace goes on the same line as the if in the Safari coding style.

 class CSSStyleDeclaration;
-class ElementRareData;
 class IntSize;
+class ElementRareData;

Please put this back into alphabetical order.

+    virtual NodeRareData* createRareData();

Please make this private instead of protected. There&apos;s no need for Element or any class derived from it to call this function.

+#ifndef ElementRareData_h

This file needs a header.

+#include &quot;NodeRareData.h&quot;
+#include &quot;Element.h&quot;

Sort includes alphabetically.

+static inline IntSize defaultMinimumSizeForResizing()
+{
+    return IntSize(INT_MAX, INT_MAX);
+}

Functions in headers should not be marked &quot;static&quot; because that gives internal linkage. Just make this inline.

+void ElementRareData::resetComputedStyle(Element* element)
+{
+    if (!m_computedStyle)
+        return;
+    m_computedStyle-&gt;deref(element-&gt;document()-&gt;renderArena());
+    m_computedStyle = 0;
+}

This function either needs to be marked inline or moved to a .cpp file.

+    void setTabIndex(short index) { m_tabIndex = index; m_tabIndexSetExplicitly = true; }

I think this should be named setTabIndexExplicitly.

+void Node::setFocus(bool b)
+{ 
+    ensureRareData()-&gt;m_focused = b;
+}

Maybe this have a short-circuit case if both hasRareData() and b are false?

+    if(hasRareData())

Needs a space after &quot;if&quot;. Also, probably easier to read if written with &amp;&amp;.

-    virtual bool childTypeAllowed(NodeType) { return false; }
+    virtual bool childTypeAllowed(NodeType t) { return false; }

Argument name &quot;t&quot; should be omitted here. This should not have been changed.

+    virtual NodeRareData* createRareData();

This function should be private.

+    NodeRareData* rareData();
+    const NodeRareData* rareData() const;

One of these should be an inline that calls the other and does const_cast.

+#ifndef NodeRareData_h

This file needs a header.

+#include &quot;StringHash.h&quot;
+#include &lt;wtf/HashSet.h&gt;
+#include &lt;wtf/OwnPtr.h&gt;
+#include &quot;DynamicNodeList.h&quot;

Sort includes alphabetically.

review- because there are a lot of suggested changes, but this is looking good and getting close to ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92825</commentid>
    <comment_count>9</comment_count>
      <attachid>23828</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-25 16:56:14 -0700</bug_when>
    <thetext>Created attachment 23828
Addresses review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92826</commentid>
    <comment_count>10</comment_count>
      <attachid>23829</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-25 16:58:16 -0700</bug_when>
    <thetext>Created attachment 23829
Oops

That was an old version of the patch before. Infinite-recursed in rareData().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92845</commentid>
    <comment_count>11</comment_count>
      <attachid>23829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-25 18:52:00 -0700</bug_when>
    <thetext>Comment on attachment 23829
Oops

+inline Node *Node::containerChildNode(unsigned index) const

Need to move the * to the left so it&apos;s next to the return value type name.

In Node.cpp:

-
+    
 // --------

This is showing up because you added spaces on a blank line.

+    if(b || hasRareData())

Need a space after the if before the parenthesis.

+    NodeRareData *data = ensureRareData();

+    NodeRareData *data = ensureRareData();

Need to move the * to the left so it&apos;s by the type name.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92846</commentid>
    <comment_count>12</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2008-09-25 19:37:54 -0700</bug_when>
    <thetext>Committed in r36923</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23636</attachid>
            <date>2008-09-21 17:05:56 -0700</date>
            <delta_ts>2008-09-21 17:07:58 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>noderaredatadraft1.txt</filename>
            <type>text/plain</type>
            <size>21278</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwog
Y2xhc3MgRWxlbWVudFJhcmVEYXRhOwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEVsZW1lbnRSYXJl
RGF0YTsKIAogY2xhc3MgRWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoK
QEAgLTE5NywxMyArMTk4LDYgQEAKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc1JhcmVEYXRhOyB9Ci0gICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIgPSB0cnVlKSB7
IG1faGFzUmFyZURhdGEgPSBiOyB9Ci0KLSAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCk7
Ci0gICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwotICAgIEVsZW1l
bnRSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVB
dHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0dHJp
YnV0ZSgpIGNvbnN0IHt9CkBAIC0yMjEsNiArMjE1LDEwIEBACiAgICAgUXVhbGlmaWVkTmFtZSBt
X3RhZ05hbWU7CiAKIHByb3RlY3RlZDoKKyAgICBFbGVtZW50UmFyZURhdGEqIGVsZW1lbnRSYXJl
RGF0YSgpOworICAgIGNvbnN0IEVsZW1lbnRSYXJlRGF0YSogZWxlbWVudFJhcmVEYXRhKCkgY29u
c3Q7CisgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgCiAg
ICAgbXV0YWJsZSBSZWZQdHI8TmFtZWRBdHRyTWFwPiBuYW1lZEF0dHJNYXA7CiAKICAgICAvLyBU
aGVzZSB0d28gYml0cyBhcmUgcmVhbGx5IHVzZWQgYnkgdGhlIFN0eWxlZEVsZW1lbnQgc3ViY2xh
c3MsIGJ1dCB0aGV5IGFyZSBwdWxsZWQgdXAgaGVyZSBpbiBvcmRlciB0byBiZSBzaGFyZWQgd2l0
aCBvdGhlcgpAQCAtMjM2LDcgKzIzNCw2IEBACiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhcnNp
bmdDaGlsZHJlbkZpbmlzaGVkIDogMTsKLSAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwogfTsK
IAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDMyICs1OCwxMiBAQAogI2luY2x1ZGUgPGtq
cy9FeGVjU3RhdGUuaD4KICNpbmNsdWRlIDxranMvSlNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWRMZWFrQ291bnRlci5oPgorI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0cnVjdCBO
b2RlTGlzdHNOb2RlRGF0YSB7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+
IE5vZGVMaXN0U2V0OwotICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNXaXRoQ2FjaGVzOwotCi0gICAg
RHluYW1pY05vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOwotCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqPiBDYWNoZU1hcDsK
LSAgICBDYWNoZU1hcCBtX2NsYXNzTm9kZUxpc3RDYWNoZXM7Ci0gICAgQ2FjaGVNYXAgbV9uYW1l
Tm9kZUxpc3RDYWNoZXM7Ci0KLSAgICB+Tm9kZUxpc3RzTm9kZURhdGEoKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xhc3NOb2RlTGlzdENhY2hlcyk7Ci0gICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX25hbWVOb2RlTGlzdENhY2hlcyk7Ci0gICAgfQotCi0gICAgdm9pZCBpbnZh
bGlkYXRlQ2FjaGVzKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0
cmlidXRlcygpOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotfTsKLQogLy8gLS0tLS0tLS0K
IAogYm9vbCBOb2RlOjppc1N1cHBvcnRlZChjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKQEAgLTE2MSw3ICsxNDEsNiBAQAogICAgICwgbV9wcmV2aW91cygwKQog
ICAgICwgbV9uZXh0KDApCiAgICAgLCBtX3JlbmRlcmVyKDApCi0gICAgLCBtX3RhYkluZGV4KDAp
CiAgICAgLCBtX3N0eWxlQ2hhbmdlKE5vU3R5bGVDaGFuZ2UpCiAgICAgLCBtX2hhc0lkKGZhbHNl
KQogICAgICwgbV9oYXNDbGFzcyhmYWxzZSkKQEAgLTE3NSw3ICsxNTQsNyBAQAogICAgICwgbV9p
bkFjdGl2ZUNoYWluKGZhbHNlKQogICAgICwgbV9pbkRldGFjaChmYWxzZSkKICAgICAsIG1faW5T
dWJ0cmVlTWFyayhmYWxzZSkKLSAgICAsIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5KGZhbHNlKQor
ICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKICAgICAsIG1faXNFbGVtZW50KGlzRWxlbWVudCkK
IHsKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTAsOCArMTg5LDE4IEBACiAgICAgICAgIG5vZGVDb3Vu
dGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9ub2RlTGlzdHMgJiYgbV9kb2N1
bWVudCkKLSAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOworICAgIGlm
ICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgQVNTRVJUKCFOb2RlUmFyZURhdGE6OnJhcmVEYXRh
TWFwKCkuY29udGFpbnModGhpcykpOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9kb2N1bWVu
dCAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPnJl
bW92ZU5vZGVMaXN0Q2FjaGUoKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVSYXJlRGF0YU1hcCYg
ZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKKyAgICAgICAgTm9kZVJhcmVE
YXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKKyAgICAgICAgQVNTRVJU
KGl0ICE9IGRhdGFNYXAuZW5kKCkpOworICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAg
ICAgZGF0YU1hcC5yZW1vdmUoaXQpOworICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigpKQogICAg
ICAgICBkZXRhY2goKTsKQEAgLTIyMiw2ICsyMTEsMzkgQEAKICAgICAgICAgbV9uZXh0LT5zZXRQ
cmV2aW91c1NpYmxpbmcoMCk7CiB9CiAKK2lubGluZSBOb2RlUmFyZURhdGEqIE5vZGU6OnJhcmVE
YXRhKCkKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IE5vZGVSYXJlRGF0YTo6cmFyZURh
dGFGcm9tTWFwKHRoaXMpIDogMDsKK30KKworaW5saW5lIGNvbnN0IE5vZGVSYXJlRGF0YSogTm9k
ZTo6cmFyZURhdGEoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gTm9kZVJh
cmVEYXRhOjpyYXJlRGF0YUZyb21NYXAodGhpcykgOiAwOworfQorCitOb2RlUmFyZURhdGEqIE5v
ZGU6OmNyZWF0ZVJhcmVEYXRhKCkKK3sKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAg
cmV0dXJuIE5vZGVSYXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpOworICAgIEFTU0VSVCgh
Tm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBOb2RlUmFy
ZURhdGEqIGRhdGEgPSBuZXcgTm9kZVJhcmVEYXRhOworICAgIE5vZGVSYXJlRGF0YTo6cmFyZURh
dGFNYXAoKS5zZXQodGhpcywgZGF0YSk7CisgICAgc2V0SGFzUmFyZURhdGEodHJ1ZSk7CisgICAg
cmV0dXJuIGRhdGE7Cit9CisgICAgCitzaG9ydCBOb2RlOjp0YWJJbmRleCgpIGNvbnN0Cit7Cisg
ICAgaWYoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCktPnRhYkluZGV4
KCk7CisgICAgcmV0dXJuIDA7Cit9CisgICAgCit2b2lkIE5vZGU6OnNldFRhYkluZGV4RXhwbGlj
aXRseShzaG9ydCBpKQoreworICAgIGNyZWF0ZVJhcmVEYXRhKCktPnNldFRhYkluZGV4KGkpOwor
fQorCiBTdHJpbmcgTm9kZTo6bm9kZVZhbHVlKCkgY29uc3QKIHsKICAgcmV0dXJuIFN0cmluZygp
OwpAQCAtMjQwLDEyICsyNjIsMTMgQEAKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Y2hp
bGROb2RlcygpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykgewotICAgICAgICBtX25vZGVMaXN0
cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBOb2RlUmFyZURhdGEgKnJkID0gY3Jl
YXRlUmFyZURhdGEoKTsKKyAgICBpZiAoIXJkLT5ub2RlTGlzdHMoKSkgeworICAgICAgICByZC0+
c2V0Tm9kZUxpc3RzKG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CiAgICAgICAgIGRvY3VtZW50KCkt
PmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gQ2hpbGROb2RlTGlzdDo6
Y3JlYXRlKHRoaXMsICZtX25vZGVMaXN0cy0+bV9jaGlsZE5vZGVMaXN0Q2FjaGVzKTsKKyAgICBy
ZXR1cm4gQ2hpbGROb2RlTGlzdDo6Y3JlYXRlKHRoaXMsICZyZC0+bm9kZUxpc3RzKCktPm1fY2hp
bGROb2RlTGlzdENhY2hlcyk7CiB9CiAKIE5vZGUqIE5vZGU6OnZpcnR1YWxGaXJzdENoaWxkKCkg
Y29uc3QKQEAgLTQ2NiwxMiArNDg5LDE0IEBACiAKIGJvb2wgTm9kZTo6aXNGb2N1c2FibGUoKSBj
b25zdAogewotICAgIHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRseTsKKyAgICBpZihoYXNS
YXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNp
dGx5KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE5vZGU6OmlzS2V5Ym9hcmRGb2N1
c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkg
JiYgbV90YWJJbmRleCA+PSAwOworICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIHRhYkluZGV4
KCkgPj0gMDsKIH0KIAogYm9vbCBOb2RlOjppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKQEAgLTQ5
MCwyNSArNTE1LDI3IEBACiAKIHZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHlu
YW1pY05vZGVMaXN0KiBsaXN0KQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsKLSAgICAgICAg
bV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9kZVJhcmVEYXRh
ICpyZCA9IGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgaWYgKCFyZC0+bm9kZUxpc3RzKCkpIHsKKyAg
ICAgICAgcmQtPnNldE5vZGVMaXN0cyhuZXcgTm9kZUxpc3RzTm9kZURhdGEpOwogICAgICAgICBk
b2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfSBlbHNlIGlmICghbV9kb2N1bWVu
dC0+aGFzTm9kZUxpc3RDYWNoZXMoKSkgewogICAgICAgICAvLyBXZSBoYXZlbid0IGJlZW4gcmVj
ZWl2aW5nIG5vdGlmaWNhdGlvbnMgd2hpbGUgdGhlcmUgd2VyZSBubyByZWdpc3RlcmVkIGxpc3Rz
LCBzbyB0aGUgY2FjaGUgaXMgaW52YWxpZCBub3cuCi0gICAgICAgIG1fbm9kZUxpc3RzLT5pbnZh
bGlkYXRlQ2FjaGVzKCk7CisgICAgICAgIHJkLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hl
cygpOwogICAgIH0KIAogICAgIGlmIChsaXN0LT5oYXNPd25DYWNoZXMoKSkKLSAgICAgICAgbV9u
b2RlTGlzdHMtPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKKyAgICAgICAgcmQtPm5vZGVM
aXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6dW5y
ZWdpc3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgQVNT
RVJUKG1fbm9kZUxpc3RzKTsKKyAgICBBU1NFUlQocmFyZURhdGEoKSk7CiAgICAgaWYgKGxpc3Qt
Pmhhc093bkNhY2hlcygpKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hl
cy5yZW1vdmUobGlzdCk7Ci0gICAgICAgIGlmIChtX25vZGVMaXN0cy0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBtX25vZGVMaXN0cy5jbGVhcigpOworICAgICAgICBOb2RlUmFyZURhdGEgKnJk
ID0gcmFyZURhdGEoKTsKKyAgICAgICAgcmQtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hl
cy5yZW1vdmUobGlzdCk7CisgICAgICAgIGlmIChyZC0+bm9kZUxpc3RzKCktPmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgcmQtPmNsZWFyTm9kZUxpc3RzKCk7CiAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTYsMTMg
KzU0MywxNCBAQAogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hh
bmdlZCgpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICBOb2RlUmFyZURhdGEgKnJkID0g
cmFyZURhdGEoKTsKKyAgICBpZiAoIXJkIHx8ICFyZC0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fbm9kZUxpc3RzLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0
cmlidXRlcygpOworICAgIHJkLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBl
bmRPbkF0dHJpYnV0ZXMoKTsKIAotICAgIGlmIChtX25vZGVMaXN0cy0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgaWYgKHJkLT5ub2RlTGlzdHMoKS0+aXNF
bXB0eSgpKSB7CisgICAgICAgIHJkLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICBkb2N1bWVu
dCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgfQogfQpAQCAtNTM1LDE3ICs1NjMsMTgg
QEAKIAogdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpCiB7
Ci0gICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICBOb2RlUmFyZURhdGEgKnJkID0gcmFyZURhdGEo
KTsKKyAgICBpZiAoIXJkIHx8ICFyZC0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fbm9kZUxpc3RzLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CisgICAgcmQtPm5vZGVMaXN0cygp
LT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RT
ZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsK
LSAgICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IG1f
bm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQorICAg
IE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gcmQtPm5vZGVM
aXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsKKyAgICBmb3IgKE5vZGVMaXN0c05vZGVE
YXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IHJkLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dp
dGhDYWNoZXMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKICAgICAgICAgKCppKS0+aW52YWxpZGF0
ZUNhY2hlKCk7CiAKLSAgICBpZiAobV9ub2RlTGlzdHMtPmlzRW1wdHkoKSkgewotICAgICAgICBt
X25vZGVMaXN0cy5jbGVhcigpOworICAgIGlmIChyZC0+bm9kZUxpc3RzKCktPmlzRW1wdHkoKSkg
eworICAgICAgICByZC0+Y2xlYXJOb2RlTGlzdHMoKTsKICAgICAgICAgZG9jdW1lbnQoKS0+cmVt
b3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIH0KQEAgLTY1Miw3ICs2ODEsNyBAQAogdm9pZCBO
b2RlOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQg
Ynkgc3BlYyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQotICAgIC8vIEVsZW1lbnQ6
OnNldFByZWZpeCgpIGFuZCBBdHRyOjpzZXRQcmVmaXgoKQorICAgIC8vIE5vZGU6OnNldFByZWZp
eCgpIGFuZCBBdHRyOjpzZXRQcmVmaXgoKQogCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBw
b3J0IGZvciBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHBy
ZWZpeCBjb250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KICAgICAKQEAgLTExOTgsMTIgKzEy
MjcsMTMgQEAKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUo
Y29uc3QgU3RyaW5nJiBlbGVtZW50TmFtZSkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0g
ICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVS
YXJlRGF0YSAqcmQgPSBjcmVhdGVSYXJlRGF0YSgpOworICAgIGlmICghcmQtPm5vZGVMaXN0cygp
KSB7CisgICAgICAgIHJkLT5zZXROb2RlTGlzdHMobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKICAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHBhaXI8
Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9u
b2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwgMCk7CisgICAg
cGFpcjxOb2RlTGlzdHNOb2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSByZC0+bm9kZUxpc3RzKCktPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwg
MCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25k
ID0gbmV3IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOwogICAgIApAQCAtMTIxMiwxMiArMTI0Miwx
MyBAQAogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0g
ICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVS
YXJlRGF0YSAqcmQgPSBjcmVhdGVSYXJlRGF0YSgpOworICAgIGlmICghcmQtPm5vZGVMaXN0cygp
KSB7CisgICAgICAgIHJkLT5zZXROb2RlTGlzdHMobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKICAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHBhaXI8
Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9u
b2RlTGlzdHMtPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywgMCk7CisgICAg
cGFpcjxOb2RlTGlzdHNOb2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSByZC0+bm9kZUxpc3RzKCktPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywg
MCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25k
ID0gbmV3IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOwogICAgIApJbmRleDogV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlz
aW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDQ0ICs0NiwzMiBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlhN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVJh
cmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIHVzaW5nIG5hbWVzcGFjZSBYTUxOYW1lczsKIAotY2xhc3MgRWxlbWVudFJhcmVEYXRh
IHsKK2NsYXNzIEVsZW1lbnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVibGlj
OgotICAgIEVsZW1lbnRSYXJlRGF0YShFbGVtZW50Kik7CisgICAgRWxlbWVudFJhcmVEYXRhKE5v
ZGUgKik7CiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCopOwotCisgICAgCiAg
ICAgSW50U2l6ZSBtX21pbmltdW1TaXplRm9yUmVzaXppbmc7CiAgICAgUmVuZGVyU3R5bGUqIG1f
Y29tcHV0ZWRTdHlsZTsKICAgICBib29sIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29u
QWZ0ZXJBdHRhY2g7CiB9OwotCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgRWxlbWVudCosIEVsZW1l
bnRSYXJlRGF0YSo+IEVsZW1lbnRSYXJlRGF0YU1hcDsKLQotc3RhdGljIEVsZW1lbnRSYXJlRGF0
YU1hcCYgcmFyZURhdGFNYXAoKQotewotICAgIHN0YXRpYyBFbGVtZW50UmFyZURhdGFNYXAqIGRh
dGFNYXAgPSBuZXcgRWxlbWVudFJhcmVEYXRhTWFwOwotICAgIHJldHVybiAqZGF0YU1hcDsKLX0K
LQotc3RhdGljIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGFGcm9tTWFwKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIHJhcmVEYXRhTWFwKCkuZ2V0KGVsZW1lbnQpOwotfQot
CisgICAgCiBzdGF0aWMgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXpp
bmcoKQogewogICAgIHJldHVybiBJbnRTaXplKElOVF9NQVgsIElOVF9NQVgpOwogfQotCi1pbmxp
bmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEoRWxlbWVudCogZWxlbWVudCkKLSAg
ICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemlu
ZygpKQotICAgICwgbV9jb21wdXRlZFN0eWxlKDApCi0gICAgLCBtX25lZWRzRm9jdXNBcHBlYXJh
bmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKQorICAgIAoraW5saW5lIEVsZW1lbnRSYXJl
RGF0YTo6RWxlbWVudFJhcmVEYXRhKE5vZGUgKm5vZGUpCis6IG1fbWluaW11bVNpemVGb3JSZXNp
emluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQorLCBtX2NvbXB1dGVkU3R5bGUo
MCkKKywgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkK
IHsKIH0KIApAQCAtOTQsNyArODIsNyBAQAogICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxl
bWVudC0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAgbV9jb21wdXRlZFN0eWxlID0g
MDsKIH0KLQorICAgIAogRWxlbWVudDo6RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogQ29udGFpbmVyTm9kZShkb2MsIHRydWUpCiAgICAg
LCBtX3RhZ05hbWUodGFnTmFtZSkKQEAgLTEwNSw3ICs5Myw2IEBACiAgICAgLCBtX3N5bmNocm9u
aXppbmdTVkdBdHRyaWJ1dGVzKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3BhcnNpbmdDaGlsZHJl
bkZpbmlzaGVkKHRydWUpCi0gICAgLCBtX2hhc1JhcmVEYXRhKGZhbHNlKQogewogfQogCkBAIC0x
MTMsMzUgKzEwMCwyNSBAQAogewogICAgIGlmIChuYW1lZEF0dHJNYXApCiAgICAgICAgIG5hbWVk
QXR0ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKLQotICAgIGlmICghaGFzUmFyZURhdGEoKSkK
LSAgICAgICAgQVNTRVJUKCFyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgRWxlbWVudFJhcmVEYXRhTWFwJiBkYXRhTWFwID0gcmFyZURhdGFNYXAoKTsK
LSAgICAgICAgRWxlbWVudFJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0
aGlzKTsKLSAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxl
dGUgaXQtPnNlY29uZDsKLSAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwotICAgIH0KIH0KIAot
aW5saW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKQoraW5saW5lIEVsZW1l
bnRSYXJlRGF0YSogRWxlbWVudDo6ZWxlbWVudFJhcmVEYXRhKCkKIHsKLSAgICByZXR1cm4gaGFz
UmFyZURhdGEoKSA/IHJhcmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7CisgICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlUmFyZURhdGE6OnJh
cmVEYXRhRnJvbU1hcCh0aGlzKSkgOiAwOwogfQogCi1pbmxpbmUgY29uc3QgRWxlbWVudFJhcmVE
YXRhKiBFbGVtZW50OjpyYXJlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgRWxlbWVudFJhcmVE
YXRhKiBFbGVtZW50OjplbGVtZW50UmFyZURhdGEoKSBjb25zdAogewotICAgIHJldHVybiBoYXNS
YXJlRGF0YSgpID8gcmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKKyAgICByZXR1cm4gaGFzUmFy
ZURhdGEoKSA/IHN0YXRpY19jYXN0PEVsZW1lbnRSYXJlRGF0YSo+KE5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFGcm9tTWFwKHRoaXMpKSA6IDA7CiB9CiAKLUVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6
Y3JlYXRlUmFyZURhdGEoKQorTm9kZVJhcmVEYXRhKiBFbGVtZW50OjpjcmVhdGVSYXJlRGF0YSgp
CiB7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybiByYXJlRGF0YU1hcCgp
LmdldCh0aGlzKTsKLSAgICBBU1NFUlQoIXJhcmVEYXRhTWFwKCkuY29udGFpbnModGhpcykpOwor
ICAgICAgICByZXR1cm4gTm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmdldCh0aGlzKTsKKyAg
ICBBU1NFUlQoIU5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CiAg
ICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0gbmV3IEVsZW1lbnRSYXJlRGF0YSh0aGlzKTsKLSAg
ICByYXJlRGF0YU1hcCgpLnNldCh0aGlzLCBkYXRhKTsKKyAgICBOb2RlUmFyZURhdGE6OnJhcmVE
YXRhTWFwKCkuc2V0KHRoaXMsIGRhdGEpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAg
IHJldHVybiBkYXRhOwogfQpAQCAtNzE3LDcgKzY5NCw3IEBACiB7CiAgICAgY3JlYXRlUmVuZGVy
ZXJJZk5lZWRlZCgpOwogICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotICAgIGlmIChFbGVt
ZW50UmFyZURhdGEqIHJkID0gcmFyZURhdGEoKSkgeworICAgIGlmIChFbGVtZW50UmFyZURhdGEq
IHJkID0gZWxlbWVudFJhcmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHJkLT5tX25lZWRzRm9jdXNB
cHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKSB7CiAgICAgICAgICAgICBpZiAoaXNGb2N1
c2FibGUoKSAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwpAQCAtNzI5LDcg
KzcwNiw3IEBACiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgY2FuY2VsRm9jdXNBcHBl
YXJhbmNlVXBkYXRlKCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgp
KQorICAgIGlmIChFbGVtZW50UmFyZURhdGEqIHJkID0gZWxlbWVudFJhcmVEYXRhKCkpCiAgICAg
ICAgIHJkLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7CiAgICAgQ29udGFpbmVyTm9kZTo6ZGV0
YWNoKCk7CiB9CkBAIC03NDcsNyArNzI0LDcgQEAKICNlbmRpZgogCiAgICAgaWYgKChjaGFuZ2Ug
PiBOb0NoYW5nZSB8fCBjaGFuZ2VkKCkpKSB7Ci0gICAgICAgIGlmIChFbGVtZW50UmFyZURhdGEq
IHJkID0gcmFyZURhdGEoKSkKKyAgICAgICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSBlbGVt
ZW50UmFyZURhdGEoKSkKICAgICAgICAgICAgIHJkLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7
CiAgICAgfQogICAgIGlmIChoYXNQYXJlbnRTdHlsZSAmJiAoY2hhbmdlID49IEluaGVyaXQgfHwg
Y2hhbmdlZCgpKSkgewpAQCAtMTE1Niw3ICsxMTMzLDcgQEAKICAgICAgICAgcGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKHRoaXMsIGRvYy0+ZnJhbWUoKSk7CiAKICAgICBp
ZiAoIWlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGEoKS0+bV9uZWVkc0Zv
Y3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IHRydWU7CisgICAgICAgIHN0YXRp
Y19jYXN0PEVsZW1lbnRSYXJlRGF0YSAqPihjcmVhdGVSYXJlRGF0YSgpKS0+bV9uZWVkc0ZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IHRydWU7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgICAgIApAQCAtMTIyMiwxNSArMTE5OSwxNCBAQAogCiBJbnRTaXplIEVsZW1l
bnQ6Om1pbmltdW1TaXplRm9yUmVzaXppbmcoKSBjb25zdAogewotICAgIGNvbnN0IEVsZW1lbnRS
YXJlRGF0YSogcmQgPSByYXJlRGF0YSgpOwotICAgIHJldHVybiByZCA/IHJkLT5tX21pbmltdW1T
aXplRm9yUmVzaXppbmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpOworICAgIHJl
dHVybiBoYXNSYXJlRGF0YSgpID8gZWxlbWVudFJhcmVEYXRhKCktPm1fbWluaW11bVNpemVGb3JS
ZXNpemluZyA6IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCk7CiB9CiAKIHZvaWQgRWxl
bWVudDo6c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhjb25zdCBJbnRTaXplJiBzaXplKQogewot
ICAgIGlmIChzaXplID09IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkgJiYgIXJhcmVE
YXRhKCkpCisgICAgaWYgKHNpemUgPT0gZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAm
JiAhaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNyZWF0ZVJhcmVEYXRhKCkt
Pm1fbWluaW11bVNpemVGb3JSZXNpemluZyA9IHNpemU7CisgICAgc3RhdGljX2Nhc3Q8RWxlbWVu
dFJhcmVEYXRhICo+KGNyZWF0ZVJhcmVEYXRhKCkpLT5tX21pbmltdW1TaXplRm9yUmVzaXppbmcg
PSBzaXplOwogfQogCiBSZW5kZXJTdHlsZSogRWxlbWVudDo6Y29tcHV0ZWRTdHlsZSgpCkBAIC0x
MjQzLDcgKzEyMTksNyBAQAogICAgICAgICAvLyBkb2N1bWVudCB0cmVlIGFuZCBmaWd1cmUgb3V0
IHdoZW4gdG8gZGVzdHJveSB0aGUgY29tcHV0ZWQgc3R5bGUgZm9yIHN1Y2ggZWxlbWVudHMuCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgRWxlbWVudFJhcmVEYXRhKiByZCA9IGNyZWF0ZVJhcmVE
YXRhKCk7CisgICAgRWxlbWVudFJhcmVEYXRhKiByZCA9IHN0YXRpY19jYXN0PEVsZW1lbnRSYXJl
RGF0YSAqPihjcmVhdGVSYXJlRGF0YSgpKTsKICAgICBpZiAoIXJkLT5tX2NvbXB1dGVkU3R5bGUp
CiAgICAgICAgIHJkLT5tX2NvbXB1dGVkU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
KCktPnN0eWxlRm9yRWxlbWVudCh0aGlzLCBwYXJlbnQoKSA/IHBhcmVudCgpLT5jb21wdXRlZFN0
eWxlKCkgOiAwKTsKICAgICByZXR1cm4gcmQtPm1fY29tcHV0ZWRTdHlsZTsKQEAgLTEyNTEsNyAr
MTIyNyw3IEBACiAKIHZvaWQgRWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkK
IHsKLSAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCisgICAgaWYgKEVs
ZW1lbnRSYXJlRGF0YSogcmQgPSBlbGVtZW50UmFyZURhdGEoKSkKICAgICAgICAgcmQtPm1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKICAgICBpZiAo
ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAgICBkb2N1bWVudCgpLT5j
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDM2NzM2KQorKysgV2Vi
Q29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw4IEBACiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0cmluZ0J1aWxkZXI7Ci0K
K2NsYXNzIE5vZGVSYXJlRGF0YTsKKyAgICAKIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKIAog
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTI3NSw3ICsyNzYsNyBAQAogICAgIHZpcnR1
YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBiID0gdHJ1ZSwgYm9vbCBwYXVzZT1mYWxzZSkgeyBtX2Fj
dGl2ZSA9IGI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sIGIgPSB0cnVlKSB7
IG1faG92ZXJlZCA9IGI7IH0KIAotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3RhYkluZGV4OyB9CisgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0
OwogCiAgICAgLyoqCiAgICAgICogV2hldGhlciB0aGlzIG5vZGUgY2FuIHJlY2VpdmUgdGhlIGtl
eWJvYXJkIGZvY3VzLgpAQCAtNDk3LDEyICs0OTgsMTUgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
TW92ZVRvTmV3T3duZXJEb2N1bWVudCgpIHsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBnZXRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IH0KLSAg
ICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpKQotICAgIHsgCi0gICAgICAgIG1f
dGFiSW5kZXggPSBpOyAKLSAgICAgICAgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgPSB0cnVlOwot
ICAgIH0KLQorICAgIHZvaWQgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGkpOworICAgIAor
ICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhOyB9Cisg
ICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIgPSB0cnVlKSB7IG1faGFzUmFyZURhdGEgPSBi
OyB9CisgICAgCisgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSgpOworICAgIGNvbnN0IE5vZGVS
YXJlRGF0YSogcmFyZURhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVSYXJlRGF0YSogY3Jl
YXRlUmFyZURhdGEoKTsKKyAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSog
bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0OwogCkBAIC01MTEsMTAgKzUxNSw2IEBACiAg
ICAgTm9kZSogbV9uZXh0OwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKIAotICAgIE93
blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7Ci0KLSAgICBzaG9ydCBtX3RhYklu
ZGV4OwotCiAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBtb3JlIHRoYW4gMTYgYml0cyBo
ZXJlIC0tIGFkZGluZyBtb3JlIHdvdWxkIGluY3JlYXNlIHRoZSBzaXplIG9mIGFsbCBOb2Rlcwog
CiAgICAgdW5zaWduZWQgbV9zdHlsZUNoYW5nZSA6IDI7CkBAIC01MzAsOSArNTMwLDEwIEBACiAg
ICAgYm9vbCBtX2luQWN0aXZlQ2hhaW4gOiAxOwogICAgIGJvb2wgbV9pbkRldGFjaCA6IDE7CiAg
ICAgYm9vbCBtX2luU3VidHJlZU1hcmsgOiAxOwotICAgIGJvb2wgbV90YWJJbmRleFNldEV4cGxp
Y2l0bHkgOiAxOworICAgIGJvb2wgbV9oYXNSYXJlRGF0YSA6IDE7CiAgICAgY29uc3QgYm9vbCBt
X2lzRWxlbWVudCA6IDE7CiAgICAgLy8gbm8gYml0cyBsZWZ0CisgICAKIAogICAgIEVsZW1lbnQq
IGFuY2VzdG9yRWxlbWVudCgpIGNvbnN0OwogCkBAIC01NDIsNyArNTQzLDcgQEAKICAgICB2aXJ0
dWFsIE5vZGUqIHZpcnR1YWxMYXN0Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmly
dHVhbEhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogfTsKLQorIAogfSAv
L25hbWVzcGFjZQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw2ICs2NjAs
NyBAQAogCQk1REQwQTM4MTBEOUFDNjA3MDA1NkMxMjIgLyogRE9NRWxlbWVudFRpbWVDb250cm9s
LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDE1RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9s
LmggKi87IH07CiAJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4
QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87IH07CiAJCTVERkU4
RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAv
KiBTY2hlZHVsZWRBY3Rpb24uaCAqLzsgfTsKKwkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8q
IE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjMxODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovOyB9Owog
CQk2MzQ1OUM2NTBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzNDU5QzYzMEU3OUNEMzMwMDhB
REZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oICovOyB9OwogCQk2MzQ1OUM2NjBFNzlDRDMzMDA4QURG
QUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjM0NTlDNjQwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9y
LmNwcCAqLzsgfTsKIAkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNEN0Iz
MkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovOyB9OwpAQCAtNTM0Miw2
ICs1MzQzLDcgQEAKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1RENGODM2QzBENTkxNTk4MDA5NTNCQzYgLyogUGx1Z2lu
SW5mb1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkluZm9T
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MzE4OUFFMjBFODNBMzMzMDAw
MTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vZGVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MzQ1OUM2MzBF
NzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTTnRoU2VsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjM0NTlDNjQwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU050aFNlbGVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVS
ZW5kZXJTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlUmVuZGVy
U3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNTcwLDYgKzEzNTcyLDcg
QEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRvbSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNjMxODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8q
IE5vZGVSYXJlRGF0YS5oICovLAogCQkJCTU0QzUwRjdBMEU4MDFERjMwMDk4MzJBMCAvKiBYTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcCAqLywKIAkJCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyog
Tm9kZVJlbmRlclN0eWxlLmggKi8sCiAJCQkJQThDNEE3RkMwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0
dHIuY3BwICovLApAQCAtMTU4NDQsNiArMTU4NDcsNyBAQAogCQkJCUJDNUVCQTBEMEU4MjNBMUMw
MEIyNTk2NSAvKiBBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCQTExMEU4MjNF
NDcwMEIyNTk2NSAvKiBLZXlmcmFtZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3MURB
MEU4MjQwNzMwMEU3Rjk3NSAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2
MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzIyNzI4NzBFODJFNzA3MDBFN0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzIyNzJBMjBFODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyMjcyQUQwRTgyRThGMzAwRTdGOTc1IC8qIEN1cnNvckxpc3Qu
aCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23637</attachid>
            <date>2008-09-21 17:07:58 -0700</date>
            <delta_ts>2008-09-22 17:41:18 -0700</delta_ts>
            <desc>Correct draft patch</desc>
            <filename>noderaredatadraft2.txt</filename>
            <type>text/plain</type>
            <size>24417</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwog
Y2xhc3MgRWxlbWVudFJhcmVEYXRhOwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEVsZW1lbnRSYXJl
RGF0YTsKIAogY2xhc3MgRWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoK
QEAgLTE5NywxMyArMTk4LDYgQEAKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc1JhcmVEYXRhOyB9Ci0gICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIgPSB0cnVlKSB7
IG1faGFzUmFyZURhdGEgPSBiOyB9Ci0KLSAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCk7
Ci0gICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwotICAgIEVsZW1l
bnRSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVB
dHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0dHJp
YnV0ZSgpIGNvbnN0IHt9CkBAIC0yMjEsNiArMjE1LDEwIEBACiAgICAgUXVhbGlmaWVkTmFtZSBt
X3RhZ05hbWU7CiAKIHByb3RlY3RlZDoKKyAgICBFbGVtZW50UmFyZURhdGEqIGVsZW1lbnRSYXJl
RGF0YSgpOworICAgIGNvbnN0IEVsZW1lbnRSYXJlRGF0YSogZWxlbWVudFJhcmVEYXRhKCkgY29u
c3Q7CisgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgCiAg
ICAgbXV0YWJsZSBSZWZQdHI8TmFtZWRBdHRyTWFwPiBuYW1lZEF0dHJNYXA7CiAKICAgICAvLyBU
aGVzZSB0d28gYml0cyBhcmUgcmVhbGx5IHVzZWQgYnkgdGhlIFN0eWxlZEVsZW1lbnQgc3ViY2xh
c3MsIGJ1dCB0aGV5IGFyZSBwdWxsZWQgdXAgaGVyZSBpbiBvcmRlciB0byBiZSBzaGFyZWQgd2l0
aCBvdGhlcgpAQCAtMjM2LDcgKzIzNCw2IEBACiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhcnNp
bmdDaGlsZHJlbkZpbmlzaGVkIDogMTsKLSAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwogfTsK
IAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKyNp
Zm5kZWYgTm9kZVJhcmVEYXRhX2gKKyNkZWZpbmUgTm9kZVJhcmVEYXRhX2gKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgor
I2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUg
IkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgorI2luY2x1ZGUgIkNsYXNzTm9k
ZUxpc3QuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiTmFtZU5vZGVMaXN0
LmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIlNlbGVjdG9yTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJTdHJp
bmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CisjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1
ZGUgPGtqcy9FeGVjU3RhdGUuaD4KKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CisgICAgc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0
PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OworICAgICAgICBOb2RlTGlzdFNldCBtX2xp
c3RzV2l0aENhY2hlczsKKyAgICAgICAgCisgICAgICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
IG1fY2hpbGROb2RlTGlzdENhY2hlczsKKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKj4gQ2FjaGVNYXA7CisgICAgICAgIENh
Y2hlTWFwIG1fY2xhc3NOb2RlTGlzdENhY2hlczsKKyAgICAgICAgQ2FjaGVNYXAgbV9uYW1lTm9k
ZUxpc3RDYWNoZXM7CisgICAgICAgIAorICAgICAgICB+Tm9kZUxpc3RzTm9kZURhdGEoKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc05vZGVMaXN0Q2FjaGVz
KTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX25hbWVOb2RlTGlzdENhY2hlcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOworICAg
ICAgICB2b2lkIGludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CisgICAg
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIH07CisgICAgCisgICAgdHlwZWRlZiBIYXNo
TWFwPGNvbnN0IE5vZGUqLCBOb2RlUmFyZURhdGEqPiBOb2RlUmFyZURhdGFNYXA7CisgICAgCisg
ICAgY2xhc3MgTm9kZVJhcmVEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGVSYXJlRGF0
YSgpCisgICAgICAgIDogbV9ub2RlTGlzdHMoMCkKKyAgICAgICAgLCBtX3RhYkluZGV4KDApCisg
ICAgICAgICwgbV90YWJJbmRleFNldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgTm9kZVJhcmVEYXRh
TWFwJiByYXJlRGF0YU1hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBOb2RlUmFy
ZURhdGFNYXAqIGRhdGFNYXAgPSBuZXcgTm9kZVJhcmVEYXRhTWFwOworICAgICAgICAgICAgcmV0
dXJuICpkYXRhTWFwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgTm9kZVJh
cmVEYXRhKiByYXJlRGF0YUZyb21NYXAoY29uc3QgTm9kZSogbm9kZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHJhcmVEYXRhTWFwKCkuZ2V0KG5vZGUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigp
OyB9CisgICAgICAgIHZvaWQgc2V0Tm9kZUxpc3RzKE5vZGVMaXN0c05vZGVEYXRhICogbGlzdHMp
IHsgbV9ub2RlTGlzdHMuc2V0KGxpc3RzKTsgfQorICAgICAgICBOb2RlTGlzdHNOb2RlRGF0YSAq
bm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHMgPyBtX25vZGVMaXN0cy5nZXQo
KSA6IDA7IH0KKyAgICAgICAgCisgICAgICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV90YWJJbmRleDsgfQorICAgICAgICB2b2lkIHNldFRhYkluZGV4KHNob3J0IGlkeCkgeyBt
X3RhYkluZGV4ID0gaWR4OyBtX3RhYkluZGV4U2V0RXhwbGljaXRseSA9IHRydWU7IH0KKyAgICAg
ICAgYm9vbCB0YWJJbmRleFNldEV4cGxpY2l0bHkoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4
U2V0RXhwbGljaXRseTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBPd25QdHI8
Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOworICAgICAgICBzaG9ydCBtX3RhYkluZGV4
OworICAgICAgICBib29sIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5IDogMTsKKyAgICB9OworICAg
IAorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUv
ZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzMiArNTgsMTIgQEAKICNpbmNsdWRl
IDxranMvRXhlY1N0YXRlLmg+CiAjaW5jbHVkZSA8a2pzL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdHJ1
Y3QgTm9kZUxpc3RzTm9kZURhdGEgewotICAgIHR5cGVkZWYgSGFzaFNldDxEeW5hbWljTm9kZUxp
c3QqPiBOb2RlTGlzdFNldDsKLSAgICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0aENhY2hlczsKLQot
ICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzIG1fY2hpbGROb2RlTGlzdENhY2hlczsKLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKj4gQ2FjaGVN
YXA7Ci0gICAgQ2FjaGVNYXAgbV9jbGFzc05vZGVMaXN0Q2FjaGVzOwotICAgIENhY2hlTWFwIG1f
bmFtZU5vZGVMaXN0Q2FjaGVzOwotCi0gICAgfk5vZGVMaXN0c05vZGVEYXRhKCkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsYXNzTm9kZUxpc3RDYWNoZXMpOwotICAgICAgICBk
ZWxldGVBbGxWYWx1ZXMobV9uYW1lTm9kZUxpc3RDYWNoZXMpOwotICAgIH0KLQotICAgIHZvaWQg
aW52YWxpZGF0ZUNhY2hlcygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRP
bkF0dHJpYnV0ZXMoKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKLX07Ci0KIC8vIC0tLS0t
LS0tCiAKIGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoY29uc3QgU3RyaW5nJiBmZWF0dXJlLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24pCkBAIC0xNjEsNyArMTQxLDYgQEAKICAgICAsIG1fcHJldmlvdXMo
MCkKICAgICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQotICAgICwgbV90YWJJbmRl
eCgwKQogICAgICwgbV9zdHlsZUNoYW5nZShOb1N0eWxlQ2hhbmdlKQogICAgICwgbV9oYXNJZChm
YWxzZSkKICAgICAsIG1faGFzQ2xhc3MoZmFsc2UpCkBAIC0xNzUsNyArMTU0LDcgQEAKICAgICAs
IG1faW5BY3RpdmVDaGFpbihmYWxzZSkKICAgICAsIG1faW5EZXRhY2goZmFsc2UpCiAgICAgLCBt
X2luU3VidHJlZU1hcmsoZmFsc2UpCi0gICAgLCBtX3RhYkluZGV4U2V0RXhwbGljaXRseShmYWxz
ZSkKKyAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCiAgICAgLCBtX2lzRWxlbWVudChpc0VsZW1l
bnQpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjEwLDggKzE4OSwxOCBAQAogICAgICAgICBub2Rl
Q291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbm9kZUxpc3RzICYmIG1f
ZG9jdW1lbnQpCi0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKKyAg
ICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIEFTU0VSVCghTm9kZVJhcmVEYXRhOjpyYXJl
RGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fZG9j
dW1lbnQgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBtX2RvY3VtZW50
LT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAgICAgIAorICAgICAgICBOb2RlUmFyZURhdGFN
YXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CisgICAgICAgIE5vZGVS
YXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7CisgICAgICAgIEFT
U0VSVChpdCAhPSBkYXRhTWFwLmVuZCgpKTsKKyAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGRhdGFNYXAucmVtb3ZlKGl0KTsKKyAgICB9CiAKICAgICBpZiAocmVuZGVyZXIoKSkK
ICAgICAgICAgZGV0YWNoKCk7CkBAIC0yMjIsNiArMjExLDM5IEBACiAgICAgICAgIG1fbmV4dC0+
c2V0UHJldmlvdXNTaWJsaW5nKDApOwogfQogCitpbmxpbmUgTm9kZVJhcmVEYXRhKiBOb2RlOjpy
YXJlRGF0YSgpCit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7Cit9CisKK2lubGluZSBjb25zdCBOb2RlUmFyZURhdGEq
IE5vZGU6OnJhcmVEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IE5v
ZGVSYXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKK30KKworTm9kZVJhcmVEYXRh
KiBOb2RlOjpjcmVhdGVSYXJlRGF0YSgpCit7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAg
ICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKTsKKyAgICBBU1NF
UlQoIU5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CisgICAgTm9k
ZVJhcmVEYXRhKiBkYXRhID0gbmV3IE5vZGVSYXJlRGF0YTsKKyAgICBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhTWFwKCkuc2V0KHRoaXMsIGRhdGEpOworICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwor
ICAgIHJldHVybiBkYXRhOworfQorICAgIAorc2hvcnQgTm9kZTo6dGFiSW5kZXgoKSBjb25zdAor
eworICAgIGlmKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiByYXJlRGF0YSgpLT50YWJJ
bmRleCgpOworICAgIHJldHVybiAwOworfQorICAgIAordm9pZCBOb2RlOjpzZXRUYWJJbmRleEV4
cGxpY2l0bHkoc2hvcnQgaSkKK3sKKyAgICBjcmVhdGVSYXJlRGF0YSgpLT5zZXRUYWJJbmRleChp
KTsKK30KKwogU3RyaW5nIE5vZGU6Om5vZGVWYWx1ZSgpIGNvbnN0CiB7CiAgIHJldHVybiBTdHJp
bmcoKTsKQEAgLTI0MCwxMiArMjYyLDEzIEBACiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmNoaWxkTm9kZXMoKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsKLSAgICAgICAgbV9ub2Rl
TGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9kZVJhcmVEYXRhICpyZCA9
IGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgaWYgKCFyZC0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAg
cmQtPnNldE5vZGVMaXN0cyhuZXcgTm9kZUxpc3RzTm9kZURhdGEpOwogICAgICAgICBkb2N1bWVu
dCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIENoaWxkTm9kZUxp
c3Q6OmNyZWF0ZSh0aGlzLCAmbV9ub2RlTGlzdHMtPm1fY2hpbGROb2RlTGlzdENhY2hlcyk7Cisg
ICAgcmV0dXJuIENoaWxkTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCAmcmQtPm5vZGVMaXN0cygpLT5t
X2NoaWxkTm9kZUxpc3RDYWNoZXMpOwogfQogCiBOb2RlKiBOb2RlOjp2aXJ0dWFsRmlyc3RDaGls
ZCgpIGNvbnN0CkBAIC00NjYsMTIgKzQ4OSwxNCBAQAogCiBib29sIE5vZGU6OmlzRm9jdXNhYmxl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90YWJJbmRleFNldEV4cGxpY2l0bHk7CisgICAgaWYo
aGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCktPnRhYkluZGV4U2V0RXhw
bGljaXRseSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBOb2RlOjppc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIHJldHVybiBpc0ZvY3VzYWJs
ZSgpICYmIG1fdGFiSW5kZXggPj0gMDsKKyAgICByZXR1cm4gaXNGb2N1c2FibGUoKSAmJiB0YWJJ
bmRleCgpID49IDA7CiB9CiAKIGJvb2wgTm9kZTo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkBA
IC00OTAsMjUgKzUxNSwyNyBAQAogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0
KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAg
ICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJl
RGF0YSAqcmQgPSBjcmVhdGVSYXJlRGF0YSgpOworICAgIGlmICghcmQtPm5vZGVMaXN0cygpKSB7
CisgICAgICAgIHJkLT5zZXROb2RlTGlzdHMobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKICAgICAg
ICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0gZWxzZSBpZiAoIW1fZG9j
dW1lbnQtPmhhc05vZGVMaXN0Q2FjaGVzKCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZW4ndCBiZWVu
IHJlY2VpdmluZyBub3RpZmljYXRpb25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJlZCBs
aXN0cywgc28gdGhlIGNhY2hlIGlzIGludmFsaWQgbm93LgotICAgICAgICBtX25vZGVMaXN0cy0+
aW52YWxpZGF0ZUNhY2hlcygpOworICAgICAgICByZC0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVD
YWNoZXMoKTsKICAgICB9CiAKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAg
IG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CisgICAgICAgIHJkLT5u
b2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuYWRkKGxpc3QpOwogfQogCiB2b2lkIE5vZGU6
OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQogewotICAg
IEFTU0VSVChtX25vZGVMaXN0cyk7CisgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIGlmIChs
aXN0LT5oYXNPd25DYWNoZXMoKSkgewotICAgICAgICBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhD
YWNoZXMucmVtb3ZlKGxpc3QpOwotICAgICAgICBpZiAobV9ub2RlTGlzdHMtPmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICAgICAgTm9kZVJhcmVEYXRh
ICpyZCA9IHJhcmVEYXRhKCk7CisgICAgICAgIHJkLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhD
YWNoZXMucmVtb3ZlKGxpc3QpOworICAgICAgICBpZiAocmQtPm5vZGVMaXN0cygpLT5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIHJkLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICAgICAgZG9j
dW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTE2
LDEzICs1NDMsMTQgQEAKIAogdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0
ZUNoYW5nZWQoKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpCisgICAgTm9kZVJhcmVEYXRhICpy
ZCA9IHJhcmVEYXRhKCk7CisgICAgaWYgKCFyZCB8fCAhcmQtPm5vZGVMaXN0cygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX25vZGVMaXN0cy0+aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRP
bkF0dHJpYnV0ZXMoKTsKKyAgICByZC0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXNUaGF0
RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobV9ub2RlTGlzdHMtPmlzRW1wdHkoKSkg
ewotICAgICAgICBtX25vZGVMaXN0cy5jbGVhcigpOworICAgIGlmIChyZC0+bm9kZUxpc3RzKCkt
PmlzRW1wdHkoKSkgeworICAgICAgICByZC0+Y2xlYXJOb2RlTGlzdHMoKTsKICAgICAgICAgZG9j
dW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIH0KQEAgLTUzNSwxNyArNTYz
LDE4IEBACiAKIHZvaWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZWQo
KQogewotICAgIGlmICghbV9ub2RlTGlzdHMpCisgICAgTm9kZVJhcmVEYXRhICpyZCA9IHJhcmVE
YXRhKCk7CisgICAgaWYgKCFyZCB8fCAhcmQtPm5vZGVMaXN0cygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX25vZGVMaXN0cy0+aW52YWxpZGF0ZUNhY2hlcygpOworICAgIHJkLT5ub2RlTGlz
dHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVM
aXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuZW5k
KCk7Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkg
PSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkK
KyAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IHJkLT5u
b2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7CisgICAgZm9yIChOb2RlTGlzdHNO
b2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSByZC0+bm9kZUxpc3RzKCktPm1fbGlz
dHNXaXRoQ2FjaGVzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCiAgICAgICAgICgqaSktPmludmFs
aWRhdGVDYWNoZSgpOwogCi0gICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICBpZiAocmQtPm5vZGVMaXN0cygpLT5pc0VtcHR5
KCkpIHsKKyAgICAgICAgcmQtPmNsZWFyTm9kZUxpc3RzKCk7CiAgICAgICAgIGRvY3VtZW50KCkt
PnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiB9CkBAIC02NTIsNyArNjgxLDcgQEAKIHZv
aWQgTm9kZTo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJlcXVp
cmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKLSAgICAvLyBFbGVt
ZW50OjpzZXRQcmVmaXgoKSBhbmQgQXR0cjo6c2V0UHJlZml4KCkKKyAgICAvLyBOb2RlOjpzZXRQ
cmVmaXgoKSBhbmQgQXR0cjo6c2V0UHJlZml4KCkKIAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
c3VwcG9ydCBmb3IgSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmll
ZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCiAgICAgCkBAIC0xMTk4LDEy
ICsxMjI3LDEzIEBACiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlO
YW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykg
ewotICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBO
b2RlUmFyZURhdGEgKnJkID0gY3JlYXRlUmFyZURhdGEoKTsKKyAgICBpZiAoIXJkLT5ub2RlTGlz
dHMoKSkgeworICAgICAgICByZC0+c2V0Tm9kZUxpc3RzKG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7
CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAKLSAgICBw
YWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9
IG1fbm9kZUxpc3RzLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIDApOwor
ICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gcmQtPm5vZGVMaXN0cygpLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5h
bWUsIDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNl
Y29uZCA9IG5ldyBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczsKICAgICAKQEAgLTEyMTIsMTIgKzEy
NDIsMTMgQEAKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNz
TmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykg
ewotICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBO
b2RlUmFyZURhdGEgKnJkID0gY3JlYXRlUmFyZURhdGEoKTsKKyAgICBpZiAoIXJkLT5ub2RlTGlz
dHMoKSkgeworICAgICAgICByZC0+c2V0Tm9kZUxpc3RzKG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7
CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAKLSAgICBw
YWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9
IG1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMsIDApOwor
ICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gcmQtPm5vZGVMaXN0cygpLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFt
ZXMsIDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNl
Y29uZCA9IG5ldyBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczsKICAgICAKSW5kZXg6IFdlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw0NCArNDYsMzIgQEAKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5v
ZGVSYXJlRGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgWE1MTmFtZXM7CiAKLWNsYXNzIEVsZW1lbnRSYXJl
RGF0YSB7CitjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhIHsKIHB1
YmxpYzoKLSAgICBFbGVtZW50UmFyZURhdGEoRWxlbWVudCopOworICAgIEVsZW1lbnRSYXJlRGF0
YShOb2RlICopOwogICAgIHZvaWQgcmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqKTsKLQorICAg
IAogICAgIEludFNpemUgbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOwogICAgIFJlbmRlclN0eWxl
KiBtX2NvbXB1dGVkU3R5bGU7CiAgICAgYm9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRl
U29vbkFmdGVyQXR0YWNoOwogfTsKLQotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBF
bGVtZW50UmFyZURhdGEqPiBFbGVtZW50UmFyZURhdGFNYXA7Ci0KLXN0YXRpYyBFbGVtZW50UmFy
ZURhdGFNYXAmIHJhcmVEYXRhTWFwKCkKLXsKLSAgICBzdGF0aWMgRWxlbWVudFJhcmVEYXRhTWFw
KiBkYXRhTWFwID0gbmV3IEVsZW1lbnRSYXJlRGF0YU1hcDsKLSAgICByZXR1cm4gKmRhdGFNYXA7
Ci19Ci0KLXN0YXRpYyBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhRnJvbU1hcChjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQotewotICAgIHJldHVybiByYXJlRGF0YU1hcCgpLmdldChlbGVtZW50KTsK
LX0KLQorICAgIAogc3RhdGljIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJl
c2l6aW5nKCkKIHsKICAgICByZXR1cm4gSW50U2l6ZShJTlRfTUFYLCBJTlRfTUFYKTsKIH0KLQot
aW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKEVsZW1lbnQqIGVsZW1lbnQp
Ci0gICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVz
aXppbmcoKSkKLSAgICAsIG1fY29tcHV0ZWRTdHlsZSgwKQotICAgICwgbV9uZWVkc0ZvY3VzQXBw
ZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKKyAgICAKK2lubGluZSBFbGVtZW50
UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShOb2RlICpub2RlKQorOiBtX21pbmltdW1TaXplRm9y
UmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKKywgbV9jb21wdXRlZFN0
eWxlKDApCissIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goZmFs
c2UpCiB7CiB9CiAKQEAgLTk0LDcgKzgyLDcgQEAKICAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVm
KGVsZW1lbnQtPmRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogICAgIG1fY29tcHV0ZWRTdHls
ZSA9IDA7CiB9Ci0KKyAgICAKIEVsZW1lbnQ6OkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IENvbnRhaW5lck5vZGUoZG9jLCB0cnVlKQog
ICAgICwgbV90YWdOYW1lKHRhZ05hbWUpCkBAIC0xMDUsNyArOTMsNiBAQAogICAgICwgbV9zeW5j
aHJvbml6aW5nU1ZHQXR0cmlidXRlcyhmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYXJzaW5nQ2hp
bGRyZW5GaW5pc2hlZCh0cnVlKQotICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKIHsKIH0KIApA
QCAtMTEzLDM1ICsxMDAsMjUgQEAKIHsKICAgICBpZiAobmFtZWRBdHRyTWFwKQogICAgICAgICBu
YW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVtZW50KCk7Ci0KLSAgICBpZiAoIWhhc1JhcmVEYXRh
KCkpCi0gICAgICAgIEFTU0VSVCghcmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEVsZW1lbnRSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IHJhcmVEYXRhTWFw
KCk7Ci0gICAgICAgIEVsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZp
bmQodGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdCAhPSBkYXRhTWFwLmVuZCgpKTsKLSAgICAgICAg
ZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgICAgIGRhdGFNYXAucmVtb3ZlKGl0KTsKLSAgICB9CiB9
CiAKLWlubGluZSBFbGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OnJhcmVEYXRhKCkKK2lubGluZSBF
bGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OmVsZW1lbnRSYXJlRGF0YSgpCiB7Ci0gICAgcmV0dXJu
IGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YUZyb21NYXAodGhpcykgOiAwOworICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudFJhcmVEYXRhKj4oTm9kZVJhcmVEYXRh
OjpyYXJlRGF0YUZyb21NYXAodGhpcykpIDogMDsKIH0KIAotaW5saW5lIGNvbnN0IEVsZW1lbnRS
YXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKSBjb25zdAoraW5saW5lIGNvbnN0IEVsZW1lbnRS
YXJlRGF0YSogRWxlbWVudDo6ZWxlbWVudFJhcmVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7CisgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlUmFyZURhdGE6
OnJhcmVEYXRhRnJvbU1hcCh0aGlzKSkgOiAwOwogfQogCi1FbGVtZW50UmFyZURhdGEqIEVsZW1l
bnQ6OmNyZWF0ZVJhcmVEYXRhKCkKK05vZGVSYXJlRGF0YSogRWxlbWVudDo6Y3JlYXRlUmFyZURh
dGEoKQogewogICAgIGlmIChoYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1cm4gcmFyZURhdGFN
YXAoKS5nZXQodGhpcyk7Ci0gICAgQVNTRVJUKCFyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuIE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5nZXQodGhpcyk7
CisgICAgQVNTRVJUKCFOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCkuY29udGFpbnModGhpcykp
OwogICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IG5ldyBFbGVtZW50UmFyZURhdGEodGhpcyk7
Ci0gICAgcmFyZURhdGFNYXAoKS5zZXQodGhpcywgZGF0YSk7CisgICAgTm9kZVJhcmVEYXRhOjpy
YXJlRGF0YU1hcCgpLnNldCh0aGlzLCBkYXRhKTsKICAgICBzZXRIYXNSYXJlRGF0YSh0cnVlKTsK
ICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTcxNyw3ICs2OTQsNyBAQAogewogICAgIGNyZWF0ZVJl
bmRlcmVySWZOZWVkZWQoKTsKICAgICBDb250YWluZXJOb2RlOjphdHRhY2goKTsKLSAgICBpZiAo
RWxlbWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpIHsKKyAgICBpZiAoRWxlbWVudFJhcmVE
YXRhKiByZCA9IGVsZW1lbnRSYXJlRGF0YSgpKSB7CiAgICAgICAgIGlmIChyZC0+bV9uZWVkc0Zv
Y3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCkgewogICAgICAgICAgICAgaWYgKGlz
Rm9jdXNhYmxlKCkgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24oKTsKQEAgLTcy
OSw3ICs3MDYsNyBAQAogdm9pZCBFbGVtZW50OjpkZXRhY2goKQogewogICAgIGNhbmNlbEZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZSgpOwotICAgIGlmIChFbGVtZW50UmFyZURhdGEqIHJkID0gcmFyZURh
dGEoKSkKKyAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IGVsZW1lbnRSYXJlRGF0YSgpKQog
ICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOwogICAgIENvbnRhaW5lck5vZGU6
OmRldGFjaCgpOwogfQpAQCAtNzQ3LDcgKzcyNCw3IEBACiAjZW5kaWYKIAogICAgIGlmICgoY2hh
bmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewotICAgICAgICBpZiAoRWxlbWVudFJhcmVE
YXRhKiByZCA9IHJhcmVEYXRhKCkpCisgICAgICAgIGlmIChFbGVtZW50UmFyZURhdGEqIHJkID0g
ZWxlbWVudFJhcmVEYXRhKCkpCiAgICAgICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRo
aXMpOwogICAgIH0KICAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYgKGNoYW5nZSA+PSBJbmhlcml0
IHx8IGNoYW5nZWQoKSkpIHsKQEAgLTExNTYsNyArMTEzMyw3IEBACiAgICAgICAgIHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0aGlzLCBkb2MtPmZyYW1lKCkpOwogCiAg
ICAgaWYgKCFpc0ZvY3VzYWJsZSgpKSB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhKCktPm1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSB0cnVlOworICAgICAgICBz
dGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEgKj4oY3JlYXRlUmFyZURhdGEoKSktPm1fbmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSB0cnVlOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKQEAgLTEyMjIsMTUgKzExOTksMTQgQEAKIAogSW50U2l6ZSBF
bGVtZW50OjptaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkgY29uc3QKIHsKLSAgICBjb25zdCBFbGVt
ZW50UmFyZURhdGEqIHJkID0gcmFyZURhdGEoKTsKLSAgICByZXR1cm4gcmQgPyByZC0+bV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nIDogZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKKyAg
ICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgpLT5tX21pbmltdW1TaXpl
Rm9yUmVzaXppbmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKLSAgICBpZiAoc2l6ZSA9PSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpICYmICFy
YXJlRGF0YSgpKQorICAgIGlmIChzaXplID09IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5n
KCkgJiYgIWhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBjcmVhdGVSYXJlRGF0
YSgpLT5tX21pbmltdW1TaXplRm9yUmVzaXppbmcgPSBzaXplOworICAgIHN0YXRpY19jYXN0PEVs
ZW1lbnRSYXJlRGF0YSAqPihjcmVhdGVSYXJlRGF0YSgpKS0+bV9taW5pbXVtU2l6ZUZvclJlc2l6
aW5nID0gc2l6ZTsKIH0KIAogUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoKQpA
QCAtMTI0Myw3ICsxMjE5LDcgQEAKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmlndXJl
IG91dCB3aGVuIHRvIGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1lbnRz
LgogICAgICAgICByZXR1cm4gMDsKIAotICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBjcmVhdGVS
YXJlRGF0YSgpOworICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
UmFyZURhdGEgKj4oY3JlYXRlUmFyZURhdGEoKSk7CiAgICAgaWYgKCFyZC0+bV9jb21wdXRlZFN0
eWxlKQogICAgICAgICByZC0+bV9jb21wdXRlZFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcywgcGFyZW50KCkgPyBwYXJlbnQoKS0+Y29tcHV0
ZWRTdHlsZSgpIDogMCk7CiAgICAgcmV0dXJuIHJkLT5tX2NvbXB1dGVkU3R5bGU7CkBAIC0xMjUx
LDcgKzEyMjcsNyBAQAogCiB2b2lkIEVsZW1lbnQ6OmNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0
ZSgpCiB7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgpKQorICAgIGlm
IChFbGVtZW50UmFyZURhdGEqIHJkID0gZWxlbWVudFJhcmVEYXRhKCkpCiAgICAgICAgIHJkLT5t
X25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gZmFsc2U7CiAgICAg
aWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhpcykKICAgICAgICAgZG9jdW1lbnQo
KS0+Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzNjczNikKKysr
IFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsOCBAQAogY2xh
c3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHJpbmdCdWlsZGVy
OwotCitjbGFzcyBOb2RlUmFyZURhdGE7CisgICAgCiBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGE7
CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC0yNzUsNyArMjc2LDcgQEAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgYiA9IHRydWUsIGJvb2wgcGF1c2U9ZmFsc2UpIHsg
bV9hY3RpdmUgPSBiOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWQoYm9vbCBiID0gdHJ1
ZSkgeyBtX2hvdmVyZWQgPSBiOyB9CiAKLSAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQorICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBj
b25zdDsKIAogICAgIC8qKgogICAgICAqIFdoZXRoZXIgdGhpcyBub2RlIGNhbiByZWNlaXZlIHRo
ZSBrZXlib2FyZCBmb2N1cy4KQEAgLTQ5NywxMiArNDk4LDE1IEBACiAgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyB9
Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkKLSAgICB7IAotICAgICAg
ICBtX3RhYkluZGV4ID0gaTsgCi0gICAgICAgIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5ID0gdHJ1
ZTsKLSAgICB9Ci0KKyAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpKTsKKyAg
ICAKKyAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YTsg
fQorICAgIHZvaWQgc2V0SGFzUmFyZURhdGEoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc1JhcmVEYXRh
ID0gYjsgfQorICAgIAorICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEoKTsKKyAgICBjb25zdCBO
b2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBOb2RlUmFyZURhdGEq
IGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyU3R5
bGUqIG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKIApAQCAtNTExLDEwICs1MTUsNiBA
QAogICAgIE5vZGUqIG1fbmV4dDsKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKLSAg
ICBPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOwotCi0gICAgc2hvcnQgbV90
YWJJbmRleDsKLQogICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgbW9yZSB0aGFuIDE2IGJp
dHMgaGVyZSAtLSBhZGRpbmcgbW9yZSB3b3VsZCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiBhbGwgTm9k
ZXMKIAogICAgIHVuc2lnbmVkIG1fc3R5bGVDaGFuZ2UgOiAyOwpAQCAtNTMwLDkgKzUzMCwxMCBA
QAogICAgIGJvb2wgbV9pbkFjdGl2ZUNoYWluIDogMTsKICAgICBib29sIG1faW5EZXRhY2ggOiAx
OwogICAgIGJvb2wgbV9pblN1YnRyZWVNYXJrIDogMTsKLSAgICBib29sIG1fdGFiSW5kZXhTZXRF
eHBsaWNpdGx5IDogMTsKKyAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwogICAgIGNvbnN0IGJv
b2wgbV9pc0VsZW1lbnQgOiAxOwogICAgIC8vIG5vIGJpdHMgbGVmdAorICAgCiAKICAgICBFbGVt
ZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKIApAQCAtNTQyLDcgKzU0Myw3IEBACiAgICAg
dmlydHVhbCBOb2RlKiB2aXJ0dWFsTGFzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHZpcnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKIH07Ci0KKyAK
IH0gLy9uYW1lc3BhY2UKIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjczNikKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjAsNiAr
NjYwLDcgQEAKIAkJNUREMEEzODEwRDlBQzYwNzAwNTZDMTIyIC8qIERPTUVsZW1lbnRUaW1lQ29u
dHJvbC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQxNUYxNjgwRDlBMTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29u
dHJvbC5oICovOyB9OwogCQk1REZFOEY1NjBEMTY0NzdCMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
QTM3OEJBMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwICovOyB9OwogCQk1
REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQjBEMTVGNjQyMDBCNzkz
RDYgLyogU2NoZWR1bGVkQWN0aW9uLmggKi87IH07CisJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLzsg
fTsKIAkJNjM0NTlDNjUwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzQ1OUM2MzBFNzlDRDMz
MDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCAqLzsgfTsKIAkJNjM0NTlDNjYwRTc5Q0QzMzAw
OEFERkFGIC8qIENTU050aFNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDYzNDU5QzY0MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxl
Y3Rvci5jcHAgKi87IH07CiAJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVy
U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYz
RDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLzsgfTsKQEAgLTUz
NDIsNiArNTM0Myw3IEBACiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWRO
YW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNURDRjgzNkMwRDU5MTU5ODAwOTUzQkM2IC8qIFBs
dWdpbkluZm9TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5J
bmZvU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjMxODlBRTIwRTgzQTMz
MzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOb2RlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjM0NTlD
NjMwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU050aFNlbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTYzNDU5QzY0MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NOdGhTZWxlY3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBO
b2RlUmVuZGVyU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVJl
bmRlclN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzU3MCw2ICsxMzU3
Miw3IEBACiAJCUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0
MSAvKiBOb2RlUmFyZURhdGEuaCAqLywKIAkJCQk1NEM1MEY3QTBFODAxREYzMDA5ODMyQTAgLyog
WE1MVG9rZW5pemVyTGlieG1sMi5jcHAgKi8sCiAJCQkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLAogCQkJCUE4QzRBN0ZDMDlENTYzMjcwMDAzQUM4RCAv
KiBBdHRyLmNwcCAqLywKQEAgLTE1ODQ0LDYgKzE1ODQ3LDcgQEAKIAkJCQlCQzVFQkEwRDBFODIz
QTFDMDBCMjU5NjUgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQkExMTBF
ODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIy
NzFEQTBFODI0MDczMDBFN0Y5NzUgLyogQW5pbWF0aW9uTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMyMjcyODcwRTgyRTcwNzAwRTdGOTc1IC8qIFN0eWxlUmVmbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyMjcyQTIwRTgyRTg3QzAwRTdGOTc1IC8qIEN1cnNvckRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjI3MkFEMEU4MkU4RjMwMEU3Rjk3NSAvKiBDdXJzb3JM
aXN0LmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23686</attachid>
            <date>2008-09-22 17:41:18 -0700</date>
            <delta_ts>2008-09-23 04:11:37 -0700</delta_ts>
            <desc>Improved patch</desc>
            <filename>noderaredatadraft3.txt</filename>
            <type>text/plain</type>
            <size>27618</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzNjczNikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02NjAsOCArNjYwLDEwIEBACiAJCTVERDBBMzgxMEQ5QUM2MDcwMDU2
QzEyMiAvKiBET01FbGVtZW50VGltZUNvbnRyb2wuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTY4MEQ5QTE2NUQwMDMz
Q0U5NyAvKiBET01FbGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKIAkJNURGRThGNTYwRDE2NDc3
QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1
bGVkQWN0aW9uLmNwcCAqLzsgfTsKIAkJNURGRThGNTcwRDE2NDc3QzAwNzZFOTM3IC8qIFNjaGVk
dWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5oICovOyB9Owor
CQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzE4OUFFMjBFODNBMzMzMDAwMTJF
NDEgLyogTm9kZVJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsg
fTsKIAkJNjM0NTlDNjUwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzQ1OUM2MzBFNzlDRDMz
MDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCAqLzsgfTsKIAkJNjM0NTlDNjYwRTc5Q0QzMzAw
OEFERkFGIC8qIENTU050aFNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDYzNDU5QzY0MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxl
Y3Rvci5jcHAgKi87IH07CisJCTYzN0I3QURGMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYz
N0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLzsgfTsKIAkJNjNE
N0IzMkQwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oICovOyB9OwogCQk2NTBGNTNEQzA5RDE1RERBMDBDOUIwQzgg
LyogQ1NTR3JhbW1hci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUwRjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLzsgfTsKIAkJ
NjUwRjUzREQwOUQxNURERjAwQzlCMEM4IC8qIENTU0dyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxNDQwOUQxMzA0MzAwMEU2MUQ3
IC8qIENTU0dyYW1tYXIuY3BwICovOyB9OwpAQCAtNTM0Miw4ICs1MzQ0LDEwIEBACiAJCTU1MEEw
QkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJNURDRjgzNkMwRDU5MTU5ODAwOTUzQkM2IC8qIFBsdWdpbkluZm9TdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5JbmZvU3RvcmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNjMxODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlUmFyZURhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjM0NTlDNjMwRTc5Q0QzMzAwOEFERkFGIC8qIENT
U050aFNlbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU050aFNl
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzNDU5QzY0MEU3OUNEMzMw
MDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NOdGhTZWxlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVy
U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVJlbmRlclN0eWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MEY1M0RCMDlEMTVEREEwMEM5QjBD
OCAvKiBDU1NHcmFtbWFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NH
cmFtbWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MEZCRjI3MEQ5QUYwNDYw
MDhGQzI5MiAvKiBTVkdIS2VybkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHSEtlcm5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEzNTcwLDYgKzEzNTc0LDggQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8q
IGRvbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNjMx
ODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovLAorCQkJCTYzN0I3QURF
MEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCAqLywKIAkJCQk1NEM1MEY3QTBF
ODAxREYzMDA5ODMyQTAgLyogWE1MVG9rZW5pemVyTGlieG1sMi5jcHAgKi8sCiAJCQkJNjNEN0Iz
MkMwRTc4Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLAogCQkJCUE4QzRBN0ZD
MDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKQEAgLTE1MTAwLDYgKzE1MTA2LDggQEAK
IAkJCQk5M0NDRjAyNzBBRjZDNTI5MDAwMThFODkgLyogTmF2aWdhdGlvbkFjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjU2RDM3NDMwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDExNUI1MjA5Rjg0QjcxMDBDQTRG
QzEgLyogTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjMxODlBRTMwRTgzQTMz
MzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzEw
QTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZF
NzMzMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE1ODA0LDcgKzE1ODEyLDYgQEAKIAkJCQkzMTZGRTA4MjBFNkNDQzI4MDBC
RjYwODggLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Mjg0QURERTBFNkZFQjMxMDAyRUVGQkQgLyogVXNlclN0eWxlU2hlZXRMb2FkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0I0QkU4MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjNEN0IzMkQwRTc4Q0QzRjAwRjc2
MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjM0NTlDNjUwRTc5
Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUZG
QkI4MzBFN0M1QTNEMDA0MDc3MzAgLyogQWNjZXNzaWJpbGl0eUxpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU4NTYsNiArMTU4NjMsNyBAQAogCQkJCUIyRjM0RkU2MEU4MkY4MTQw
MEY2MjdDRCAvKiBETlMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OTU4MjU2MEU4NTdBN0UwMEY4
MkM4MyAvKiBJbWFnZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDQjQxM0UwRTg2MzNG
RDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjM3QjdBREYwRTg3
NjdCODAwRTMyMTk0IC8qIEVsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkocmV2aXNpb24gMzY3MzYpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNTUgKzQ2LDEzIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiWE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJFbGVtZW50UmFyZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIFhNTE5hbWVzOwotCi1jbGFzcyBF
bGVtZW50UmFyZURhdGEgewotcHVibGljOgotICAgIEVsZW1lbnRSYXJlRGF0YShFbGVtZW50Kik7
Ci0gICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCopOwotCi0gICAgSW50U2l6ZSBt
X21pbmltdW1TaXplRm9yUmVzaXppbmc7Ci0gICAgUmVuZGVyU3R5bGUqIG1fY29tcHV0ZWRTdHls
ZTsKLSAgICBib29sIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7
Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgRWxlbWVudCosIEVsZW1lbnRSYXJlRGF0YSo+
IEVsZW1lbnRSYXJlRGF0YU1hcDsKLQotc3RhdGljIEVsZW1lbnRSYXJlRGF0YU1hcCYgcmFyZURh
dGFNYXAoKQotewotICAgIHN0YXRpYyBFbGVtZW50UmFyZURhdGFNYXAqIGRhdGFNYXAgPSBuZXcg
RWxlbWVudFJhcmVEYXRhTWFwOwotICAgIHJldHVybiAqZGF0YU1hcDsKLX0KLQotc3RhdGljIEVs
ZW1lbnRSYXJlRGF0YSogcmFyZURhdGFGcm9tTWFwKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgcmV0dXJuIHJhcmVEYXRhTWFwKCkuZ2V0KGVsZW1lbnQpOwotfQotCi1zdGF0aWMgaW5s
aW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQotewotICAgIHJldHVy
biBJbnRTaXplKElOVF9NQVgsIElOVF9NQVgpOwotfQotCi1pbmxpbmUgRWxlbWVudFJhcmVEYXRh
OjpFbGVtZW50UmFyZURhdGEoRWxlbWVudCogZWxlbWVudCkKLSAgICA6IG1fbWluaW11bVNpemVG
b3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQotICAgICwgbV9jb21w
dXRlZFN0eWxlKDApCi0gICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVy
QXR0YWNoKGZhbHNlKQotewotfQotCi12b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRl
ZFN0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnJlbmRlckFyZW5hKCkpOwotICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7Ci19Ci0KKyAg
ICAKIEVsZW1lbnQ6OkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKICAgICA6IENvbnRhaW5lck5vZGUoZG9jLCB0cnVlKQogICAgICwgbV90YWdOYW1l
KHRhZ05hbWUpCkBAIC0xMDUsNyArNjMsNiBAQCBFbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhCiAgICAgLCBtX3N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzKGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX3BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKHRydWUpCi0gICAgLCBtX2hh
c1JhcmVEYXRhKGZhbHNlKQogewogfQogCkBAIC0xMTMsMzkgKzcwLDMwIEBAIEVsZW1lbnQ6On5F
bGVtZW50KCkKIHsKICAgICBpZiAobmFtZWRBdHRyTWFwKQogICAgICAgICBuYW1lZEF0dHJNYXAt
PmRldGFjaEZyb21FbGVtZW50KCk7Ci0KLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCi0gICAgICAg
IEFTU0VSVCghcmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEVsZW1lbnRSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IHJhcmVEYXRhTWFwKCk7Ci0gICAgICAg
IEVsZW1lbnRSYXJlRGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7Ci0g
ICAgICAgIEFTU0VSVChpdCAhPSBkYXRhTWFwLmVuZCgpKTsKLSAgICAgICAgZGVsZXRlIGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIGRhdGFNYXAucmVtb3ZlKGl0KTsKLSAgICB9CiB9CiAKIGlubGluZSBF
bGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OnJhcmVEYXRhKCkKIHsKLSAgICByZXR1cm4gaGFzUmFy
ZURhdGEoKSA/IHJhcmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7CisgICAgQVNTRVJUKGhhc1JhcmVE
YXRhKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlUmFy
ZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKSk7CiB9Ci0KKyAgICAKIGlubGluZSBjb25zdCBF
bGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OnJhcmVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7CisgICAgQVNTRVJUKGhh
c1JhcmVEYXRhKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50UmFyZURh
dGEqPihOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKSk7CiB9Ci0KLUVsZW1lbnRS
YXJlRGF0YSogRWxlbWVudDo6Y3JlYXRlUmFyZURhdGEoKQorICAgIAoraW5saW5lIEVsZW1lbnRS
YXJlRGF0YSogRWxlbWVudDo6ZW5zdXJlUmFyZURhdGEoKQogewotICAgIGlmIChoYXNSYXJlRGF0
YSgpKQotICAgICAgICByZXR1cm4gcmFyZURhdGFNYXAoKS5nZXQodGhpcyk7Ci0gICAgQVNTRVJU
KCFyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKLSAgICBFbGVtZW50UmFyZURhdGEqIGRh
dGEgPSBuZXcgRWxlbWVudFJhcmVEYXRhKHRoaXMpOwotICAgIHJhcmVEYXRhTWFwKCkuc2V0KHRo
aXMsIGRhdGEpOwotICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwotICAgIHJldHVybiBkYXRhOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlOjplbnN1cmVSYXJl
RGF0YSgpKTsKIH0KLQorICAgIAorTm9kZVJhcmVEYXRhKiBFbGVtZW50OjpjcmVhdGVSYXJlRGF0
YSgpCit7CisgICAgcmV0dXJuIG5ldyBFbGVtZW50UmFyZURhdGEodGhpcyk7Cit9CisgICAgCiBQ
YXNzUmVmUHRyPE5vZGU+IEVsZW1lbnQ6OmNsb25lTm9kZShib29sIGRlZXApCiB7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03MTcsMTEgKzY2NSwxMyBAQCB2b2lkIEVsZW1lbnQ6OmF0
dGFjaCgpCiB7CiAgICAgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogICAgIENvbnRhaW5lck5v
ZGU6OmF0dGFjaCgpOwotICAgIGlmIChFbGVtZW50UmFyZURhdGEqIHJkID0gcmFyZURhdGEoKSkg
ewotICAgICAgICBpZiAocmQtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJB
dHRhY2gpIHsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICB7ICAgCisgICAgICAgIEVsZW1l
bnRSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5tX25lZWRz
Rm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKSB7CiAgICAgICAgICAgICBpZiAo
aXNGb2N1c2FibGUoKSAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwotICAg
ICAgICAgICAgcmQtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2gg
PSBmYWxzZTsKKyAgICAgICAgICAgIGRhdGEtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVT
b29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTcyOSw4ICs2
NzksOCBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiB7
CiAgICAgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJl
RGF0YSogcmQgPSByYXJlRGF0YSgpKQotICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRo
aXMpOworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5yZXNldENv
bXB1dGVkU3R5bGUodGhpcyk7CiAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CiB9CiAKQEAg
LTc0Nyw4ICs2OTcsOCBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNo
CiAjZW5kaWYKIAogICAgIGlmICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewot
ICAgICAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAgICAg
ICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgICAgICBpZiAoaGFzUmFyZURhdGEo
KSkKKyAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAg
ICB9CiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFu
Z2VkKCkpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwpAQCAtMTE1Niw3ICsxMTA2LDcg
QEAgdm9pZCBFbGVtZW50Ojpmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91cwogICAgICAgICBwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKTsK
IAogICAgIGlmICghaXNGb2N1c2FibGUoKSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YSgpLT5t
X25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gdHJ1ZTsKKyAgICAg
ICAgZW5zdXJlUmFyZURhdGEoKS0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRl
ckF0dGFjaCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtMTIy
MiwxNSArMTE3MiwxNCBAQCBTdHJpbmcgRWxlbWVudDo6dGl0bGUoKSBjb25zdAogCiBJbnRTaXpl
IEVsZW1lbnQ6Om1pbmltdW1TaXplRm9yUmVzaXppbmcoKSBjb25zdAogewotICAgIGNvbnN0IEVs
ZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgpOwotICAgIHJldHVybiByZCA/IHJkLT5tX21p
bmltdW1TaXplRm9yUmVzaXppbmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpOwor
ICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZvclJl
c2l6aW5nIDogZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjpzZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0g
ICAgaWYgKHNpemUgPT0gZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAmJiAhcmFyZURh
dGEoKSkKKyAgICBpZiAoc2l6ZSA9PSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpICYm
ICFoYXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAgY3JlYXRlUmFyZURhdGEoKS0+
bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nID0gc2l6ZTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5t
X21pbmltdW1TaXplRm9yUmVzaXppbmcgPSBzaXplOwogfQogCiBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6Y29tcHV0ZWRTdHlsZSgpCkBAIC0xMjQzLDE2ICsxMTkyLDE2IEBAIFJlbmRlclN0eWxlKiBF
bGVtZW50Ojpjb21wdXRlZFN0eWxlKCkKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmln
dXJlIG91dCB3aGVuIHRvIGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1l
bnRzLgogICAgICAgICByZXR1cm4gMDsKIAotICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBjcmVh
dGVSYXJlRGF0YSgpOwotICAgIGlmICghcmQtPm1fY29tcHV0ZWRTdHlsZSkKLSAgICAgICAgcmQt
Pm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JF
bGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDApOwot
ICAgIHJldHVybiByZC0+bV9jb21wdXRlZFN0eWxlOworICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0
YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUpCisg
ICAgICAgIGRhdGEtPm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5
bGUoKSA6IDApOworICAgIHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CiB9CiAKIHZvaWQg
RWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIHsKLSAgICBpZiAoRWxlbWVu
dFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAgIHJkLT5tX25lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gZmFsc2U7CisgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCisgICAgICAgIHJhcmVEYXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29u
QWZ0ZXJBdHRhY2ggPSBmYWxzZTsKICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9
PSB0aGlzKQogICAgICAgICBkb2N1bWVudCgpLT5jYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUo
KTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEF0dHI7CiBjbGFzcyBBdHRyaWJ1dGU7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwot
Y2xhc3MgRWxlbWVudFJhcmVEYXRhOwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEVsZW1lbnRSYXJl
RGF0YTsKIAogY2xhc3MgRWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoK
QEAgLTE5NywxMyArMTk3LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVudENv
dW50KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUmFyZURhdGE7IH0KLSAgICB2b2lkIHNldEhhc1JhcmVEYXRhKGJvb2wgYiA9
IHRydWUpIHsgbV9oYXNSYXJlRGF0YSA9IGI7IH0KLQotICAgIEVsZW1lbnRSYXJlRGF0YSogcmFy
ZURhdGEoKTsKLSAgICBjb25zdCBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7Ci0g
ICAgRWxlbWVudFJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOwotCiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0
eWxlQXR0cmlidXRlKCkgY29uc3Qge30KQEAgLTIyMSw2ICsyMTQsMTEgQEAgcHJpdmF0ZToKICAg
ICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKIAogcHJvdGVjdGVkOgorICAgIEVsZW1lbnRSYXJl
RGF0YSogcmFyZURhdGEoKTsKKyAgICBjb25zdCBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCkg
Y29uc3Q7CisgICAgRWxlbWVudFJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOworICAgIHZpcnR1
YWwgTm9kZVJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOworICAgIAogICAgIG11dGFibGUgUmVm
UHRyPE5hbWVkQXR0ck1hcD4gbmFtZWRBdHRyTWFwOwogCiAgICAgLy8gVGhlc2UgdHdvIGJpdHMg
YXJlIHJlYWxseSB1c2VkIGJ5IHRoZSBTdHlsZWRFbGVtZW50IHN1YmNsYXNzLCBidXQgdGhleSBh
cmUgcHVsbGVkIHVwIGhlcmUgaW4gb3JkZXIgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIKQEAgLTIz
Niw3ICsyMzQsNiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhcnNpbmdD
aGlsZHJlbkZpbmlzaGVkIDogMTsKLSAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwogfTsKIAog
fSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBA
QAorI2lmbmRlZiBFbGVtZW50UmFyZURhdGFfaAorI2RlZmluZSBFbGVtZW50UmFyZURhdGFfaAor
CisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9k
ZVJhcmVEYXRhIHsKK3B1YmxpYzoKKyAgICBFbGVtZW50UmFyZURhdGEoRWxlbWVudCopOworICAg
IHZvaWQgcmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqKTsKKyAgICAKKyAgICBJbnRTaXplIG1f
bWluaW11bVNpemVGb3JSZXNpemluZzsKKyAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRlZFN0eWxl
OworICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsK
K307CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemlu
ZygpCit7CisgICAgcmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7Cit9CisKK2lubGlu
ZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlKQorICAgIDogbV9t
aW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCisg
ICAgLCBtX2NvbXB1dGVkU3R5bGUoMCkKKyAgICAsIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRh
dGVTb29uQWZ0ZXJBdHRhY2goZmFsc2UpCit7Cit9CisKK3ZvaWQgRWxlbWVudFJhcmVEYXRhOjpy
ZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIW1fY29tcHV0
ZWRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxl
bWVudC0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgbV9jb21wdXRlZFN0eWxlID0g
MDsKK30KKworfQorI2VuZGlmIEVsZW1lbnRSYXJlRGF0YV9oCkluZGV4OiBXZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzY3
MzYpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMzIgKzU4
LDEyIEBACiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUgPGtqcy9KU0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CisjaW5jbHVkZSAiTm9k
ZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKLQotc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKLSAgICB0eXBlZGVmIEhhc2hT
ZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7Ci0gICAgTm9kZUxpc3RTZXQgbV9saXN0
c1dpdGhDYWNoZXM7Ci0KLSAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxp
c3RDYWNoZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlcyo+IENhY2hlTWFwOwotICAgIENhY2hlTWFwIG1fY2xhc3NOb2RlTGlzdENhY2hlczsK
LSAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENhY2hlczsKLQotICAgIH5Ob2RlTGlzdHNOb2Rl
RGF0YSgpCi0gICAgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc05vZGVMaXN0Q2Fj
aGVzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbmFtZU5vZGVMaXN0Q2FjaGVzKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLSAgICB2b2lkIGludmFsaWRhdGVD
YWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
Ci19OwotCisgICAgCiAvLyAtLS0tLS0tLQogCiBib29sIE5vZGU6OmlzU3VwcG9ydGVkKGNvbnN0
IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQpAQCAtMTYxLDcgKzE0MSw2
IEBAIE5vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBpc0VsZW1lbnQKICAgICAsIG1fcHJl
dmlvdXMoMCkKICAgICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQotICAgICwgbV90
YWJJbmRleCgwKQogICAgICwgbV9zdHlsZUNoYW5nZShOb1N0eWxlQ2hhbmdlKQogICAgICwgbV9o
YXNJZChmYWxzZSkKICAgICAsIG1faGFzQ2xhc3MoZmFsc2UpCkBAIC0xNzUsNyArMTU0LDcgQEAg
Tm9kZTo6Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudAogICAgICwgbV9pbkFjdGl2
ZUNoYWluKGZhbHNlKQogICAgICwgbV9pbkRldGFjaChmYWxzZSkKICAgICAsIG1faW5TdWJ0cmVl
TWFyayhmYWxzZSkKLSAgICAsIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5KGZhbHNlKQorICAgICwg
bV9oYXNSYXJlRGF0YShmYWxzZSkKICAgICAsIG1faXNFbGVtZW50KGlzRWxlbWVudCkKIHsKICNp
Zm5kZWYgTkRFQlVHCkBAIC0yMTAsOCArMTg5LDE4IEBAIE5vZGU6On5Ob2RlKCkKICAgICAgICAg
bm9kZUNvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25vZGVMaXN0cyAm
JiBtX2RvY3VtZW50KQotICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7
CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBBU1NFUlQoIU5vZGVSYXJlRGF0YTo6
cmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2RvY3VtZW50ICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQorICAgICAgICAgICAgbV9kb2N1
bWVudC0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOworICAgICAgICAKKyAgICAgICAgTm9kZVJhcmVE
YXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFw
KCk7CisgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9
IGRhdGFNYXAuZmluZCh0aGlzKTsKKyAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkp
OworICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQp
OworICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICBkZXRhY2goKTsKQEAgLTIy
Miw2ICsyMTEsNDUgQEAgTm9kZTo6fk5vZGUoKQogICAgICAgICBtX25leHQtPnNldFByZXZpb3Vz
U2libGluZygwKTsKIH0KIAoraW5saW5lIE5vZGVSYXJlRGF0YSogTm9kZTo6cmFyZURhdGEoKQor
eworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICByZXR1cm4gTm9kZVJhcmVEYXRhOjpy
YXJlRGF0YUZyb21NYXAodGhpcyk7Cit9CisgICAgCitpbmxpbmUgY29uc3QgTm9kZVJhcmVEYXRh
KiBOb2RlOjpyYXJlRGF0YSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwor
ICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKTsKK30KKworTm9k
ZVJhcmVEYXRhKiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpCit7CisgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCisgICAgICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKTsK
KyAgICAKKyAgICBBU1NFUlQoIU5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5jb250YWlucyh0
aGlzKSk7CisgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gY3JlYXRlUmFyZURhdGEoKTsKKyAgICBO
b2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCkuc2V0KHRoaXMsIGRhdGEpOworICAgIG1faGFzUmFy
ZURhdGEgPSB0cnVlOworICAgIHJldHVybiBkYXRhOworfQorICAgIAorTm9kZVJhcmVEYXRhKiBO
b2RlOjpjcmVhdGVSYXJlRGF0YSgpCit7CisgICAgcmV0dXJuIG5ldyBOb2RlUmFyZURhdGE7Cit9
CisgICAgCitzaG9ydCBOb2RlOjp0YWJJbmRleCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyByYXJlRGF0YSgpLT50YWJJbmRleCgpIDogMDsKK30KKyAgICAKK3ZvaWQgTm9k
ZTo6c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGkpCit7CisgICAgZW5zdXJlUmFyZURhdGEo
KS0+c2V0VGFiSW5kZXgoaSk7Cit9CisKIFN0cmluZyBOb2RlOjpub2RlVmFsdWUoKSBjb25zdAog
ewogICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNDAsMTIgKzI2OCwxMyBAQCB2b2lkIE5vZGU6OnNl
dE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmNoaWxkTm9kZXMoKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsKLSAgICAgICAgbV9ub2Rl
TGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9kZVJhcmVEYXRhICpkYXRh
ID0gZW5zdXJlUmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7CisgICAg
ICAgIGRhdGEtPnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPihu
ZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RD
YWNoZSgpOwogICAgIH0KIAotICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywg
Jm1fbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOworICAgIHJldHVybiBDaGlsZE5v
ZGVMaXN0OjpjcmVhdGUodGhpcywgJmRhdGEtPm5vZGVMaXN0cygpLT5tX2NoaWxkTm9kZUxpc3RD
YWNoZXMpOwogfQogCiBOb2RlKiBOb2RlOjp2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0CkBAIC00
NjYsMTIgKzQ5NSwxNCBAQCBib29sIE5vZGU6OmNhbkxhenlBdHRhY2goKQogCiBib29sIE5vZGU6
OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90YWJJbmRleFNldEV4cGxpY2l0
bHk7CisgICAgaWYoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCktPnRh
YkluZGV4U2V0RXhwbGljaXRseSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBOb2Rl
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIHJldHVy
biBpc0ZvY3VzYWJsZSgpICYmIG1fdGFiSW5kZXggPj0gMDsKKyAgICByZXR1cm4gaXNGb2N1c2Fi
bGUoKSAmJiB0YWJJbmRleCgpID49IDA7CiB9CiAKIGJvb2wgTm9kZTo6aXNNb3VzZUZvY3VzYWJs
ZSgpIGNvbnN0CkBAIC00OTAsMjUgKzUyMSwyOCBAQCB1bnNpZ25lZCBOb2RlOjpub2RlSW5kZXgo
KSBjb25zdAogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2Rl
TGlzdCogbGlzdCkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9kZUxp
c3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9
IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAg
ICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3
IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2Fj
aGUoKTsKICAgICB9IGVsc2UgaWYgKCFtX2RvY3VtZW50LT5oYXNOb2RlTGlzdENhY2hlcygpKSB7
CiAgICAgICAgIC8vIFdlIGhhdmVuJ3QgYmVlbiByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyB3aGls
ZSB0aGVyZSB3ZXJlIG5vIHJlZ2lzdGVyZWQgbGlzdHMsIHNvIHRoZSBjYWNoZSBpcyBpbnZhbGlk
IG5vdy4KLSAgICAgICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICAgICAg
ZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoKTsKICAgICB9CiAKICAgICBpZiAo
bGlzdC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAgIG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENh
Y2hlcy5hZGQobGlzdCk7CisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENh
Y2hlcy5hZGQobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlz
dChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgQVNTRVJUKG1fbm9kZUxpc3RzKTsKKyAg
ICBBU1NFUlQocmFyZURhdGEoKSk7CisgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygp
KTsKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMt
Pm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKLSAgICAgICAgaWYgKG1fbm9kZUxpc3Rz
LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgICAg
IE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIGRhdGEtPm5vZGVMaXN0
cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlzdCk7CisgICAgICAgIGlmIChkYXRhLT5u
b2RlTGlzdHMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0
cygpOwogICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTE2LDEzICs1NTAsMTYgQEAgdm9pZCBOb2RlOjp1bnJlZ2lzdGVy
RHluYW1pY05vZGVMaXN0KER5bgogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0
cmlidXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSByYXJl
RGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fbm9kZUxpc3RzLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygp
OworICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0
cmlidXRlcygpOwogCi0gICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCktPmlzRW1wdHko
KSkgeworICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICBkb2N1bWVudCgp
LT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgfQogfQpAQCAtNTM1LDE3ICs1NzIsMjAgQEAg
dm9pZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZwogCiB2b2lkIE5vZGU6Om5v
dGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1fbm9kZUxp
c3RzKQorICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5vZGVS
YXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXMoKTsK
KyAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAgTm9kZUxp
c3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+bV9s
aXN0c1dpdGhDYWNoZXMuZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxp
c3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuYmVnaW4o
KTsgaSAhPSBlbmQ7ICsraSkKKyAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0
ZXJhdG9yIGVuZCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsK
KyAgICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IGRh
dGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpICE9IGVuZDsgKytp
KQogICAgICAgICAoKmkpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAotICAgIGlmIChtX25vZGVMaXN0
cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgaWYgKGRh
dGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YS0+Y2xlYXJOb2RlTGlz
dHMoKTsKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgIH0K
IH0KQEAgLTExOTgsMTIgKzEyMzgsMTMgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0
RWxlbWVudHNCeQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5TmFt
ZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsK
LSAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9k
ZVJhcmVEYXRhICpkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEtPm5vZGVM
aXN0cygpKSB7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVM
aXN0c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9jdW1lbnQo
KS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURh
dGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9ub2RlTGlzdHMtPm1fbmFt
ZU5vZGVMaXN0Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwgMCk7CisgICAgcGFpcjxOb2RlTGlzdHNO
b2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBkYXRhLT5ub2RlTGlz
dHMoKS0+bV9uYW1lTm9kZUxpc3RDYWNoZXMuYWRkKGVsZW1lbnROYW1lLCAwKTsKICAgICBpZiAo
cmVzdWx0LnNlY29uZCkKICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBuZXcgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXM7CiAgICAgCkBAIC0xMjEyLDEyICsxMjUzLDEzIEBAIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4g
Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCiB7
Ci0gICAgaWYgKCFtX25vZGVMaXN0cykgewotICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5v
ZGVMaXN0c05vZGVEYXRhKTsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSBlbnN1cmVSYXJlRGF0
YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9k
ZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2Rl
RGF0YSkpOwogICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQog
Ci0gICAgcGFpcjxOb2RlTGlzdHNOb2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiBy
ZXN1bHQgPSBtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVMaXN0Q2FjaGVzLmFkZChjbGFzc05hbWVz
LCAwKTsKKyAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRk
KGNsYXNzTmFtZXMsIDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQu
Zmlyc3QtPnNlY29uZCA9IG5ldyBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczsKICAgICAKSW5kZXg6
IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDM2NzM2KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw4ICs1Niw3IEBAIGNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xh
c3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHJpbmdCdWlsZGVyOwotCi1zdHJ1Y3QgTm9kZUxpc3Rz
Tm9kZURhdGE7CitjbGFzcyBOb2RlUmFyZURhdGE7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKQEAgLTI3NSw3ICsyNzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2ZShib29sIGIgPSB0cnVlLCBib29sIHBhdXNlPWZhbHNlKSB7IG1fYWN0aXZlID0gYjsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVkKGJvb2wgYiA9IHRydWUpIHsgbV9ob3ZlcmVkID0g
YjsgfQogCi0gICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
SW5kZXg7IH0KKyAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKICAgICAvKioK
ICAgICAgKiBXaGV0aGVyIHRoaXMgbm9kZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMu
CkBAIC00OTcsMTEgKzQ5NiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Vi
cmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QgeyB9Ci0gICAg
dm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkKLSAgICB7IAotICAgICAgICBtX3Rh
YkluZGV4ID0gaTsgCi0gICAgICAgIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsKLSAg
ICB9CisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSk7CisgICAgCisgICAg
Ym9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7IH0KKyAgICAK
KyAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCk7CisgICAgY29uc3QgTm9kZVJhcmVEYXRhKiBy
YXJlRGF0YSgpIGNvbnN0OworICAgIE5vZGVSYXJlRGF0YSogZW5zdXJlUmFyZURhdGEoKTsKKyAg
ICB2aXJ0dWFsIE5vZGVSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3Q7CkBA
IC01MTEsMTAgKzUxMyw2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogbV9uZXh0OwogICAgIFJlbmRl
ck9iamVjdCogbV9yZW5kZXJlcjsKIAotICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9u
b2RlTGlzdHM7Ci0KLSAgICBzaG9ydCBtX3RhYkluZGV4OwotCiAgICAgLy8gbWFrZSBzdXJlIHdl
IGRvbid0IHVzZSBtb3JlIHRoYW4gMTYgYml0cyBoZXJlIC0tIGFkZGluZyBtb3JlIHdvdWxkIGlu
Y3JlYXNlIHRoZSBzaXplIG9mIGFsbCBOb2RlcwogCiAgICAgdW5zaWduZWQgbV9zdHlsZUNoYW5n
ZSA6IDI7CkBAIC01MzAsOSArNTI4LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2luQWN0aXZl
Q2hhaW4gOiAxOwogICAgIGJvb2wgbV9pbkRldGFjaCA6IDE7CiAgICAgYm9vbCBtX2luU3VidHJl
ZU1hcmsgOiAxOwotICAgIGJvb2wgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgOiAxOworICAgIGJv
b2wgbV9oYXNSYXJlRGF0YSA6IDE7CiAgICAgY29uc3QgYm9vbCBtX2lzRWxlbWVudCA6IDE7CiAg
ICAgLy8gbm8gYml0cyBsZWZ0CisgICAKIAogICAgIEVsZW1lbnQqIGFuY2VzdG9yRWxlbWVudCgp
IGNvbnN0OwogCkBAIC01NDIsNyArNTQxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIE5vZGUq
IHZpcnR1YWxMYXN0Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbEhhc1Rh
Z05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogfTsKLQorIAogfSAvL25hbWVzcGFj
ZQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAor
I2lmbmRlZiBOb2RlUmFyZURhdGFfaAorI2RlZmluZSBOb2RlUmFyZURhdGFfaAorCisjaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CisgICAgdHlwZWRlZiBIYXNoU2V0
PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OworICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNX
aXRoQ2FjaGVzOworICAgIAorICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzIG1fY2hpbGROb2Rl
TGlzdENhY2hlczsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9k
ZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOworICAgIENhY2hlTWFwIG1fY2xhc3NOb2RlTGlzdENh
Y2hlczsKKyAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENhY2hlczsKKyAgICAKKyAgICB+Tm9k
ZUxpc3RzTm9kZURhdGEoKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xhc3NO
b2RlTGlzdENhY2hlcyk7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX25hbWVOb2RlTGlzdENh
Y2hlcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOworICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKK307CisgICAgCitjbGFzcyBOb2RlUmFyZURhdGEgeworcHVibGljOiAg
ICAKKyAgICBOb2RlUmFyZURhdGEoKQorICAgICAgICA6IG1fdGFiSW5kZXgoMCkKKyAgICAgICAg
LCBtX3RhYkluZGV4U2V0RXhwbGljaXRseShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IE5vZGUqLCBOb2RlUmFyZURhdGEqPiBOb2RlUmFyZURhdGFNYXA7
CisgICAgCisgICAgc3RhdGljIE5vZGVSYXJlRGF0YU1hcCYgcmFyZURhdGFNYXAoKQorICAgIHsK
KyAgICAgICAgc3RhdGljIE5vZGVSYXJlRGF0YU1hcCogZGF0YU1hcCA9IG5ldyBOb2RlUmFyZURh
dGFNYXA7CisgICAgICAgIHJldHVybiAqZGF0YU1hcDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IE5vZGVSYXJlRGF0YSogcmFyZURhdGFGcm9tTWFwKGNvbnN0IE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gcmFyZURhdGFNYXAoKS5nZXQobm9kZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KKyAgICB2b2lk
IHNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBt
X25vZGVMaXN0cy5zZXQobGlzdHMucmVsZWFzZSgpKTsgfQorICAgIE5vZGVMaXN0c05vZGVEYXRh
KiBub2RlTGlzdHMoKSBjb25zdCB7IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQorICAgIAor
ICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQorICAgIHZv
aWQgc2V0VGFiSW5kZXgoc2hvcnQgaW5kZXgpIHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYklu
ZGV4U2V0RXhwbGljaXRseSA9IHRydWU7IH0KKyAgICBib29sIHRhYkluZGV4U2V0RXhwbGljaXRs
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5OyB9CisgICAgICAgIAor
cHJpdmF0ZToKKyAgICBPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOworICAg
IHNob3J0IG1fdGFiSW5kZXg7CisgICAgYm9vbCBtX3RhYkluZGV4U2V0RXhwbGljaXRseSA6IDE7
Cit9OworfSAvL25hbWVzcGFjZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23695</attachid>
            <date>2008-09-22 23:46:41 -0700</date>
            <delta_ts>2008-09-23 04:11:37 -0700</delta_ts>
            <desc>Make things go zoom</desc>
            <filename>noderaredatawithiscontainerdraft1.txt</filename>
            <type>text/plain</type>
            <size>37932</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM2Nzk0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsNiArNzIyLDcgQEAgX19aTks3V2ViQ29yZTEzSGl0
VGVzdFJlc3VsdDVpbWFnZUV2CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NXRpdGxlRXYK
IF9fWk5LN1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQ5aW1hZ2VSZWN0RXYKIF9fWk5LN1dlYkNvcmUx
M1Jlc291cmNlRXJyb3JjdlA3TlNFcnJvckV2CitfX1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2Rl
MTRjaGlsZE5vZGVDb3VudEV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEwcmVxdWVz
dFVSTEV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjExZnJhbWVMb2FkZXJFdgogX19a
Tks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMXN1YnJlc291cmNlRVJLTlNfNEtVUkxFCkBAIC03
NjgsNiArNzY5LDcgQEAgX19aTks3V2ViQ29yZTRLVVJMY3ZQNU5TVVJMRXYKIF9fWk5LN1dlYkNv
cmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3Vi
cmVzb3VyY2VVUkxzRVJOM1dURjZWZWN0b3JJTlNfNEtVUkxFTG0wRUVFCiBfX1pOSzdXZWJDb3Jl
NE5vZGU5bm9kZUluZGV4RXYKK19fWk5LN1dlYkNvcmUxM0NvbnRhaW5lck5vZGU5Y2hpbGROb2Rl
RWoKIF9fWk5LN1dlYkNvcmU0UGFnZTEwcGx1Z2luRGF0YUV2CiBfX1pOSzdXZWJDb3JlNFBhZ2Uz
NGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFdgogX19aTks3V2ViQ29yZTRQYWdl
OWdyb3VwTmFtZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzY3OTQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjYwLDggKzY2MCwxMCBAQAogCQk1REQwQTM4
MTBEOUFDNjA3MDA1NkMxMjIgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggaW4gQ29weSBHZW5l
cmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE2
ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJCTVE
RkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4QkEwRDE1RjY0MjAwQjc5
M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87IH07CiAJCTVERkU4RjU3MEQxNjQ3N0MwMDc2
RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rp
b24uaCAqLzsgfTsKKwkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjMxODlBRTIw
RTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKCk7IH07IH07CiAJCTYzNDU5QzY1MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxl
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0
NTlDNjMwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmggKi87IH07CiAJCTYzNDU5
QzY2MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MzQ1OUM2NDBFNzlDRDMzMDA4QURGQUYg
LyogQ1NTTnRoU2VsZWN0b3IuY3BwICovOyB9OworCQk2MzdCN0FERjBFODc2N0I4MDBFMzIxOTQg
LyogRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmgg
Ki87IH07CiAJCTYzRDdCMzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzRDdCMzJDMEU3
OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLzsgfTsKIAkJNjUwRjUzREMwOUQx
NUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MEY1M0RCMDlEMTVEREEwMEM5QjBDOCAvKiBDU1NHcmFtbWFy
LmggKi87IH07CiAJCTY1MEY1M0REMDlEMTVEREYwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MTQ0MDlE
MTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLzsgfTsKQEAgLTUzNDEsOCArNTM0Mywx
MCBAQAogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFs
aWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1l
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1
YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5JbmZvU3Rv
cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb1N0b3JlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAv
KiBOb2RlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVJh
cmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzNDU5QzYzMEU3OUNEMzMw
MDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NOdGhTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MzQ1
OUM2NDBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTTnRoU2VsZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVE
YXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJlRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0Mg
LyogTm9kZVJlbmRlclN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5v
ZGVSZW5kZXJTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBGNTNEQjA5
RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBG
QkYyNzBEOUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0hLZXJuRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzU2OCw2ICsxMzU3Miw4IEBACiAJCUY1MjNEMzI0MDJERTQ0
NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLywK
KwkJCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8sCiAJ
CQkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnhtbDIuY3BwICov
LAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywK
IAkJCQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCkBAIC0xNTA5Nyw2
ICsxNTEwMyw4IEBACiAJCQkJOTNDQ0YwMjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmlnYXRpb25B
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzQzMEFEQkE1REUwMEE0NTU0RCAvKiBO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxMTVCNTIw
OUY4NEI3MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzRDdCMzJEMEU3
OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYz
MTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg1NEZFNzMxMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTgwMSw3ICsxNTgwOSw2IEBACiAJCQkJMzE2RkUw
ODIwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzI4NEFEREUwRTZGRUIzMTAwMkVFRkJEIC8qIFVzZXJTdHls
ZVNoZWV0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdCNEJFODBFNzEyNDE2MDAwMzg4
NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTYzRDdCMzJE
MEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTYzNDU5QzY1MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjlGRkJCODMwRTdDNUEzRDAwNDA3NzMwIC8qIEFjY2Vzc2liaWxpdHlMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE1ODUzLDYgKzE1ODYwLDcgQEAKIAkJCQlCMkYz
NEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODk1ODI1
NjBFODU3QTdFMDBGODJDODMgLyogSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
Q0I0MTNFMEU4NjMzRkQwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTYzN0I3QURGMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDM2Nzk0KQorKysgV2ViQ29y
ZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAK
ICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAzNjc5NCkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIHN0YXRpYyBOb2RlQ2FsbGJh
Y2tRdWV1ZSogc19wb3N0QXR0YWNoQ2EKIAogc3RhdGljIHNpemVfdCBzX2F0dGFjaERlcHRoID0g
MDsKIAotQ29udGFpbmVyTm9kZTo6Q29udGFpbmVyTm9kZShEb2N1bWVudCogZG9jLCBib29sIGlz
RWxlbWVudCkKLSAgICA6IEV2ZW50VGFyZ2V0Tm9kZShkb2MsIGlzRWxlbWVudCkKK0NvbnRhaW5l
ck5vZGU6OkNvbnRhaW5lck5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBpc0VsZW1lbnQsIGJvb2wg
aXNDb250YWluZXIpCisgICAgOiBFdmVudFRhcmdldE5vZGUoZG9jLCBpc0VsZW1lbnQsIGlzQ29u
dGFpbmVyKQogICAgICwgbV9maXJzdENoaWxkKDApCiAgICAgLCBtX2xhc3RDaGlsZCgwKQogewpA
QCAtMTE5LDE3ICsxMTksNiBAQCBDb250YWluZXJOb2RlOjp+Q29udGFpbmVyTm9kZSgpCiAgICAg
cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKIH0KIAotCi1Ob2RlKiBDb250YWluZXJOb2RlOjp2aXJ0dWFs
Rmlyc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmlyc3RDaGlsZDsKLX0KLQotTm9k
ZSogQ29udGFpbmVyTm9kZTo6dmlydHVhbExhc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbGFzdENoaWxkOwotfQotCiBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMs
IGJvb2wgc2hvdWxkTGF6eUF0dGFjaCkKIHsKICAgICAvLyBDaGVjayB0aGF0IHRoaXMgbm9kZSBp
cyBub3QgImZsb2F0aW5nIi4KSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDM2Nzk0KQor
KysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIHR5cGVkZWYgdm9pZCAoKk5vZGVDYWxsYmFjaykoTm9kZSopOwogCiBjbGFzcyBDb250
YWluZXJOb2RlIDogcHVibGljIEV2ZW50VGFyZ2V0Tm9kZSB7CiBwdWJsaWM6Ci0gICAgQ29udGFp
bmVyTm9kZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UpOworICAgIENvbnRhaW5l
ck5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlLCBib29sIGlzQ29udGFpbmVy
ID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB+Q29udGFpbmVyTm9kZSgpOwogCiAgICAgTm9kZSogZmly
c3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQpAQCAtNTIsOCArNTIsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgPSB0cnVlKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0aXZlID0gdHJ1ZSwgYm9vbCBwYXVzZSA9IGZh
bHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sID0gdHJ1ZSk7Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZSog
Y2hpbGROb2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBjaGlsZE5vZGVD
b3VudCgpIGNvbnN0OworICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpAQCAtNzcsOSArNzcsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoUG9zdEF0dGFjaENhbGxi
YWNrcygpOwotCi0gICAgdmlydHVhbCBOb2RlKiB2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTm9kZSogdmlydHVhbExhc3RDaGlsZCgpIGNvbnN0OwogICAgIAogICAgIHN0
YXRpYyB2b2lkIGFkZENoaWxkTm9kZXNUb0RlbGV0aW9uUXVldWUoTm9kZSomIGhlYWQsIE5vZGUq
JiB0YWlsLCBDb250YWluZXJOb2RlKik7CiAKQEAgLTg5LDYgKzg2LDI2IEBAIHByaXZhdGU6CiAg
ICAgTm9kZSogbV9maXJzdENoaWxkOwogICAgIE5vZGUqIG1fbGFzdENoaWxkOwogfTsKKyAgICAK
K2lubGluZSB1bnNpZ25lZCBOb2RlOjpjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Y2hp
bGROb2RlQ291bnQoKTsKK30KKworaW5saW5lIE5vZGUgKk5vZGU6OmNvbnRhaW5lckNoaWxkTm9k
ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29udGFpbmVyTm9kZSo+KHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOworfQorCitpbmxpbmUgTm9k
ZSogTm9kZTo6Y29udGFpbmVyRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Zmlyc3RDaGlsZCgpOworfQorCitp
bmxpbmUgTm9kZSogTm9kZTo6Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29udGFpbmVyTm9kZSo+KHRoaXMpLT5sYXN0Q2hpbGQoKTsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzY3
OTQpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNTUg
KzQ2LDEzIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMu
aCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJFbGVtZW50UmFyZURh
dGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogdXNpbmcgbmFtZXNwYWNlIFhNTE5hbWVzOwotCi1jbGFzcyBFbGVtZW50UmFyZURhdGEgewot
cHVibGljOgotICAgIEVsZW1lbnRSYXJlRGF0YShFbGVtZW50Kik7Ci0gICAgdm9pZCByZXNldENv
bXB1dGVkU3R5bGUoRWxlbWVudCopOwotCi0gICAgSW50U2l6ZSBtX21pbmltdW1TaXplRm9yUmVz
aXppbmc7Ci0gICAgUmVuZGVyU3R5bGUqIG1fY29tcHV0ZWRTdHlsZTsKLSAgICBib29sIG1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7Ci19OwotCi10eXBlZGVmIEhh
c2hNYXA8Y29uc3QgRWxlbWVudCosIEVsZW1lbnRSYXJlRGF0YSo+IEVsZW1lbnRSYXJlRGF0YU1h
cDsKLQotc3RhdGljIEVsZW1lbnRSYXJlRGF0YU1hcCYgcmFyZURhdGFNYXAoKQotewotICAgIHN0
YXRpYyBFbGVtZW50UmFyZURhdGFNYXAqIGRhdGFNYXAgPSBuZXcgRWxlbWVudFJhcmVEYXRhTWFw
OwotICAgIHJldHVybiAqZGF0YU1hcDsKLX0KLQotc3RhdGljIEVsZW1lbnRSYXJlRGF0YSogcmFy
ZURhdGFGcm9tTWFwKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIHJhcmVE
YXRhTWFwKCkuZ2V0KGVsZW1lbnQpOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgZGVmYXVs
dE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQotewotICAgIHJldHVybiBJbnRTaXplKElOVF9NQVgs
IElOVF9NQVgpOwotfQotCi1pbmxpbmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEo
RWxlbWVudCogZWxlbWVudCkKLSAgICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0
TWluaW11bVNpemVGb3JSZXNpemluZygpKQotICAgICwgbV9jb21wdXRlZFN0eWxlKDApCi0gICAg
LCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGZhbHNlKQotewot
fQotCi12b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRvY3VtZW50KCktPnJlbmRlckFyZW5h
KCkpOwotICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7Ci19Ci0KKyAgICAKIEVsZW1lbnQ6OkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IENv
bnRhaW5lck5vZGUoZG9jLCB0cnVlKQogICAgICwgbV90YWdOYW1lKHRhZ05hbWUpCkBAIC0xMDUs
NyArNjMsNiBAQCBFbGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiAgICAg
LCBtX3N5bmNocm9uaXppbmdTVkdBdHRyaWJ1dGVzKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3Bh
cnNpbmdDaGlsZHJlbkZpbmlzaGVkKHRydWUpCi0gICAgLCBtX2hhc1JhcmVEYXRhKGZhbHNlKQog
ewogfQogCkBAIC0xMTMsMzkgKzcwLDMwIEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKIHsKICAgICBp
ZiAobmFtZWRBdHRyTWFwKQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVtZW50
KCk7Ci0KLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCi0gICAgICAgIEFTU0VSVCghcmFyZURhdGFN
YXAoKS5jb250YWlucyh0aGlzKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEVsZW1lbnRSYXJlRGF0
YU1hcCYgZGF0YU1hcCA9IHJhcmVEYXRhTWFwKCk7Ci0gICAgICAgIEVsZW1lbnRSYXJlRGF0YU1h
cDo6aXRlcmF0b3IgaXQgPSBkYXRhTWFwLmZpbmQodGhpcyk7Ci0gICAgICAgIEFTU0VSVChpdCAh
PSBkYXRhTWFwLmVuZCgpKTsKLSAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgICAgIGRh
dGFNYXAucmVtb3ZlKGl0KTsKLSAgICB9CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGEqIEVs
ZW1lbnQ6OnJhcmVEYXRhKCkKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRh
RnJvbU1hcCh0aGlzKSA6IDA7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJv
bU1hcCh0aGlzKSk7CiB9Ci0KKyAgICAKIGlubGluZSBjb25zdCBFbGVtZW50UmFyZURhdGEqIEVs
ZW1lbnQ6OnJhcmVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJh
cmVEYXRhRnJvbU1hcCh0aGlzKSA6IDA7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50UmFyZURhdGEqPihOb2RlUmFyZURhdGE6
OnJhcmVEYXRhRnJvbU1hcCh0aGlzKSk7CiB9Ci0KLUVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6
Y3JlYXRlUmFyZURhdGEoKQorICAgIAoraW5saW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6
ZW5zdXJlUmFyZURhdGEoKQogewotICAgIGlmIChoYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1
cm4gcmFyZURhdGFNYXAoKS5nZXQodGhpcyk7Ci0gICAgQVNTRVJUKCFyYXJlRGF0YU1hcCgpLmNv
bnRhaW5zKHRoaXMpKTsKLSAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBuZXcgRWxlbWVudFJh
cmVEYXRhKHRoaXMpOwotICAgIHJhcmVEYXRhTWFwKCkuc2V0KHRoaXMsIGRhdGEpOwotICAgIHNl
dEhhc1JhcmVEYXRhKHRydWUpOwotICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFbGVtZW50UmFyZURhdGEqPihOb2RlOjplbnN1cmVSYXJlRGF0YSgpKTsKIH0KLQorICAg
IAorTm9kZVJhcmVEYXRhKiBFbGVtZW50OjpjcmVhdGVSYXJlRGF0YSgpCit7CisgICAgcmV0dXJu
IG5ldyBFbGVtZW50UmFyZURhdGEodGhpcyk7Cit9CisgICAgCiBQYXNzUmVmUHRyPE5vZGU+IEVs
ZW1lbnQ6OmNsb25lTm9kZShib29sIGRlZXApCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CkBAIC03MTcsMTEgKzY2NSwxMyBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiB7CiAgICAgY3Jl
YXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOwotICAg
IGlmIChFbGVtZW50UmFyZURhdGEqIHJkID0gcmFyZURhdGEoKSkgewotICAgICAgICBpZiAocmQt
Pm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2gpIHsKKyAgICBpZiAo
aGFzUmFyZURhdGEoKSkKKyAgICB7ICAgCisgICAgICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9
IHJhcmVEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKSB7CiAgICAgICAgICAgICBpZiAoaXNGb2N1c2FibGUoKSAmJiBk
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwotICAgICAgICAgICAgcmQtPm1fbmVl
ZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKKyAgICAgICAg
ICAgIGRhdGEtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTcyOSw4ICs2NzksOCBAQCB2b2lkIEVsZW1l
bnQ6OmF0dGFjaCgpCiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgY2FuY2VsRm9jdXNB
cHBlYXJhbmNlVXBkYXRlKCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0
YSgpKQotICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgIGlmIChoYXNS
YXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7
CiAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CiB9CiAKQEAgLTc0Nyw4ICs2OTcsOCBAQCB2
b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAjZW5kaWYKIAogICAgIGlm
ICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewotICAgICAgICBpZiAoRWxlbWVu
dFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAgICAgICByZC0+cmVzZXRDb21wdXRl
ZFN0eWxlKHRoaXMpOworICAgICAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgICAgIHJh
cmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAgICB9CiAgICAgaWYgKGhhc1Bh
cmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7CiAgICAgICAg
IFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5
bGVGb3JFbGVtZW50KHRoaXMpOwpAQCAtMTE1Niw3ICsxMTA2LDcgQEAgdm9pZCBFbGVtZW50Ojpm
b2N1cyhib29sIHJlc3RvcmVQcmV2aW91cwogICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKTsKIAogICAgIGlmICghaXNGb2N1
c2FibGUoKSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YSgpLT5tX25lZWRzRm9jdXNBcHBlYXJh
bmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gdHJ1ZTsKKyAgICAgICAgZW5zdXJlUmFyZURhdGEo
KS0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IHRydWU7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtMTIyMiwxNSArMTE3MiwxNCBAQCBT
dHJpbmcgRWxlbWVudDo6dGl0bGUoKSBjb25zdAogCiBJbnRTaXplIEVsZW1lbnQ6Om1pbmltdW1T
aXplRm9yUmVzaXppbmcoKSBjb25zdAogewotICAgIGNvbnN0IEVsZW1lbnRSYXJlRGF0YSogcmQg
PSByYXJlRGF0YSgpOwotICAgIHJldHVybiByZCA/IHJkLT5tX21pbmltdW1TaXplRm9yUmVzaXpp
bmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpOworICAgIHJldHVybiBoYXNSYXJl
RGF0YSgpID8gcmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nIDogZGVmYXVsdE1p
bmltdW1TaXplRm9yUmVzaXppbmcoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRNaW5pbXVtU2l6
ZUZvclJlc2l6aW5nKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHNpemUgPT0gZGVm
YXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAmJiAhcmFyZURhdGEoKSkKKyAgICBpZiAoc2l6
ZSA9PSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpICYmICFoYXNSYXJlRGF0YSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgY3JlYXRlUmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZvclJl
c2l6aW5nID0gc2l6ZTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX21pbmltdW1TaXplRm9yUmVz
aXppbmcgPSBzaXplOwogfQogCiBSZW5kZXJTdHlsZSogRWxlbWVudDo6Y29tcHV0ZWRTdHlsZSgp
CkBAIC0xMjQzLDE2ICsxMTkyLDE2IEBAIFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKCkKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmlndXJlIG91dCB3aGVuIHRvIGRl
c3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1lbnRzLgogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBjcmVhdGVSYXJlRGF0YSgpOwotICAg
IGlmICghcmQtPm1fY29tcHV0ZWRTdHlsZSkKLSAgICAgICAgcmQtPm1fY29tcHV0ZWRTdHlsZSA9
IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVu
dCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDApOwotICAgIHJldHVybiByZC0+bV9j
b21wdXRlZFN0eWxlOworICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVEYXRh
KCk7CisgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUpCisgICAgICAgIGRhdGEtPm1fY29t
cHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50
KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDApOworICAgIHJl
dHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2FuY2VsRm9j
dXNBcHBlYXJhbmNlVXBkYXRlKCkKIHsKLSAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IHJh
cmVEYXRhKCkpCi0gICAgICAgIHJkLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFm
dGVyQXR0YWNoID0gZmFsc2U7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJhcmVE
YXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxz
ZTsKICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAgICBk
b2N1bWVudCgpLT5jYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKIH0KSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDM2Nzk0KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0dHI7CiBjbGFzcyBB
dHRyaWJ1dGU7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgRWxlbWVudFJhcmVE
YXRhOwogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEVsZW1lbnRSYXJlRGF0YTsKIAogY2xhc3MgRWxl
bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoKQEAgLTE5NywxMyArMTk3LDYg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGNoaWxkRWxlbWVudENvdW50KCkgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURh
dGE7IH0KLSAgICB2b2lkIHNldEhhc1JhcmVEYXRhKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNSYXJl
RGF0YSA9IGI7IH0KLQotICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEoKTsKLSAgICBjb25z
dCBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7Ci0gICAgRWxlbWVudFJhcmVEYXRh
KiBjcmVhdGVSYXJlRGF0YSgpOwotCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUF0dHJpYnV0ZU1h
cCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCkgY29u
c3Qge30KQEAgLTIyMSw2ICsyMTQsMTEgQEAgcHJpdmF0ZToKICAgICBRdWFsaWZpZWROYW1lIG1f
dGFnTmFtZTsKIAogcHJvdGVjdGVkOgorICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEoKTsK
KyAgICBjb25zdCBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7CisgICAgRWxlbWVu
dFJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOworICAgIHZpcnR1YWwgTm9kZVJhcmVEYXRhKiBj
cmVhdGVSYXJlRGF0YSgpOworICAgIAogICAgIG11dGFibGUgUmVmUHRyPE5hbWVkQXR0ck1hcD4g
bmFtZWRBdHRyTWFwOwogCiAgICAgLy8gVGhlc2UgdHdvIGJpdHMgYXJlIHJlYWxseSB1c2VkIGJ5
IHRoZSBTdHlsZWRFbGVtZW50IHN1YmNsYXNzLCBidXQgdGhleSBhcmUgcHVsbGVkIHVwIGhlcmUg
aW4gb3JkZXIgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIKQEAgLTIzNiw3ICsyMzQsNiBAQCBwcm90
ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX3BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkIDog
MTsKLSAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRl
eDogV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50
UmFyZURhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorI2lmbmRlZiBFbGVtZW50
UmFyZURhdGFfaAorI2RlZmluZSBFbGVtZW50UmFyZURhdGFfaAorCisjaW5jbHVkZSAiTm9kZVJh
cmVEYXRhLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitjbGFzcyBFbGVtZW50UmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVEYXRhIHsKK3B1Ymxp
YzoKKyAgICBFbGVtZW50UmFyZURhdGEoRWxlbWVudCopOworICAgIHZvaWQgcmVzZXRDb21wdXRl
ZFN0eWxlKEVsZW1lbnQqKTsKKyAgICAKKyAgICBJbnRTaXplIG1fbWluaW11bVNpemVGb3JSZXNp
emluZzsKKyAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRlZFN0eWxlOworfTsKKworc3RhdGljIGlu
bGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKK3sKKyAgICByZXR1
cm4gSW50U2l6ZShJTlRfTUFYLCBJTlRfTUFYKTsKK30KKworaW5saW5lIEVsZW1lbnRSYXJlRGF0
YTo6RWxlbWVudFJhcmVEYXRhKEVsZW1lbnQqIGUpCisgICAgOiBtX21pbmltdW1TaXplRm9yUmVz
aXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKKyAgICAsIG1fY29tcHV0ZWRT
dHlsZSgwKQoreworfQorCit2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxl
KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRvY3VtZW50KCkt
PnJlbmRlckFyZW5hKCkpOworICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7Cit9CisKK30KKyNlbmRp
ZiBFbGVtZW50UmFyZURhdGFfaApJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lv
biAzNjc5NCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDggKzU2LDggQEAgdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAgICAgCiBz
dGF0aWMgSGFzaFNldDxFdmVudFRhcmdldE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0
ZWRDbGlja3MgPSAwOyAKIAotRXZlbnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUoRG9jdW1l
bnQqIGRvYywgYm9vbCBpc0VsZW1lbnQpCi0gICAgOiBOb2RlKGRvYywgaXNFbGVtZW50KQorRXZl
bnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBpc0VsZW1l
bnQsIGJvb2wgaXNDb250YWluZXIpCisgICAgOiBOb2RlKGRvYywgaXNFbGVtZW50LCBpc0NvbnRh
aW5lcikKICAgICAsIG1fcmVnZExpc3RlbmVycygwKQogewogfQpJbmRleDogV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRO
b2RlLmgJKHJldmlzaW9uIDM2Nzk0KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBFdmVu
dFRhcmdldE5vZGUgOiBwdWJsaWMgTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBFdmVudFRhcmdldCB7CiBwdWJsaWM6Ci0gICAgRXZlbnRUYXJnZXROb2RlKERvY3VtZW50Kiwg
Ym9vbCBpc0VsZW1lbnQgPSBmYWxzZSk7CisgICAgRXZlbnRUYXJnZXROb2RlKERvY3VtZW50Kiwg
Ym9vbCBpc0VsZW1lbnQgPSBmYWxzZSwgYm9vbCBpc0NvbnRhaW5lciA9IGZhbHNlKTsKICAgICB2
aXJ0dWFsIH5FdmVudFRhcmdldE5vZGUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0V2ZW50VGFy
Z2V0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzNjc5NCkK
KysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzMiArNTgsMTIg
QEAKICNpbmNsdWRlIDxranMvRXhlY1N0YXRlLmg+CiAjaW5jbHVkZSA8a2pzL0pTTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KKyNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotCi1zdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEgewotICAgIHR5cGVkZWYgSGFzaFNldDxE
eW5hbWljTm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKLSAgICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0
aENhY2hlczsKLQotICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzIG1fY2hpbGROb2RlTGlzdENh
Y2hlczsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIER5bmFtaWNOb2RlTGlzdDo6Q2Fj
aGVzKj4gQ2FjaGVNYXA7Ci0gICAgQ2FjaGVNYXAgbV9jbGFzc05vZGVMaXN0Q2FjaGVzOwotICAg
IENhY2hlTWFwIG1fbmFtZU5vZGVMaXN0Q2FjaGVzOwotCi0gICAgfk5vZGVMaXN0c05vZGVEYXRh
KCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsYXNzTm9kZUxpc3RDYWNoZXMp
OwotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9uYW1lTm9kZUxpc3RDYWNoZXMpOwotICAgIH0K
LQotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hl
c1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKLX07
Ci0KKyAgICAKIC8vIC0tLS0tLS0tCiAKIGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoY29uc3QgU3Ry
aW5nJiBmZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCkBAIC0xNTYsMTIgKzEzNiwxMSBA
QCBOb2RlOjpTdHlsZUNoYW5nZSBOb2RlOjpkaWZmKCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIGNo
OwogfQogCi1Ob2RlOjpOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50KQorTm9kZTo6
Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudCwgYm9vbCBpc0NvbnRhaW5lcikKICAg
ICA6IG1fZG9jdW1lbnQoZG9jKQogICAgICwgbV9wcmV2aW91cygwKQogICAgICwgbV9uZXh0KDAp
CiAgICAgLCBtX3JlbmRlcmVyKDApCi0gICAgLCBtX3RhYkluZGV4KDApCiAgICAgLCBtX3N0eWxl
Q2hhbmdlKE5vU3R5bGVDaGFuZ2UpCiAgICAgLCBtX2hhc0lkKGZhbHNlKQogICAgICwgbV9oYXND
bGFzcyhmYWxzZSkKQEAgLTE2OSwxNCArMTQ4LDE0IEBAIE5vZGU6Ok5vZGUoRG9jdW1lbnQqIGRv
YywgYm9vbCBpc0VsZW1lbnQKICAgICAsIG1faGFzQ2hhbmdlZENoaWxkKGZhbHNlKQogICAgICwg
bV9pbkRvY3VtZW50KGZhbHNlKQogICAgICwgbV9pc0xpbmsoZmFsc2UpCi0gICAgLCBtX2ZvY3Vz
ZWQoZmFsc2UpCiAgICAgLCBtX2FjdGl2ZShmYWxzZSkKICAgICAsIG1faG92ZXJlZChmYWxzZSkK
ICAgICAsIG1faW5BY3RpdmVDaGFpbihmYWxzZSkKICAgICAsIG1faW5EZXRhY2goZmFsc2UpCiAg
ICAgLCBtX2luU3VidHJlZU1hcmsoZmFsc2UpCi0gICAgLCBtX3RhYkluZGV4U2V0RXhwbGljaXRs
eShmYWxzZSkKKyAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCiAgICAgLCBtX2lzRWxlbWVudChp
c0VsZW1lbnQpCisgICAgLCBtX2lzQ29udGFpbmVyKGlzQ29udGFpbmVyKQogewogI2lmbmRlZiBO
REVCVUcKICAgICBpZiAoc2hvdWxkSWdub3JlTGVha3MpCkBAIC0yMTAsOCArMTg5LDE4IEBAIE5v
ZGU6On5Ob2RlKCkKICAgICAgICAgbm9kZUNvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAot
ICAgIGlmIChtX25vZGVMaXN0cyAmJiBtX2RvY3VtZW50KQotICAgICAgICBkb2N1bWVudCgpLT5y
ZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBB
U1NFUlQoIU5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIGlmIChtX2RvY3VtZW50ICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygp
KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOworICAgICAg
ICAKKyAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXAmIGRhdGFNYXAgPSBOb2Rl
UmFyZURhdGE6OnJhcmVEYXRhTWFwKCk7CisgICAgICAgIE5vZGVSYXJlRGF0YTo6Tm9kZVJhcmVE
YXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlzKTsKKyAgICAgICAgQVNTRVJU
KGl0ICE9IGRhdGFNYXAuZW5kKCkpOworICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAg
ICAgZGF0YU1hcC5yZW1vdmUoaXQpOworICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigpKQogICAg
ICAgICBkZXRhY2goKTsKQEAgLTIyMiw2ICsyMTEsNDUgQEAgTm9kZTo6fk5vZGUoKQogICAgICAg
ICBtX25leHQtPnNldFByZXZpb3VzU2libGluZygwKTsKIH0KIAoraW5saW5lIE5vZGVSYXJlRGF0
YSogTm9kZTo6cmFyZURhdGEoKQoreworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBy
ZXR1cm4gTm9kZVJhcmVEYXRhOjpyYXJlRGF0YUZyb21NYXAodGhpcyk7Cit9CisgICAgCitpbmxp
bmUgY29uc3QgTm9kZVJhcmVEYXRhKiBOb2RlOjpyYXJlRGF0YSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGhhc1JhcmVEYXRhKCkpOworICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJv
bU1hcCh0aGlzKTsKK30KKworTm9kZVJhcmVEYXRhKiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpCit7
CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJh
cmVEYXRhRnJvbU1hcCh0aGlzKTsKKyAgICAKKyAgICBBU1NFUlQoIU5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7CisgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gY3Jl
YXRlUmFyZURhdGEoKTsKKyAgICBOb2RlUmFyZURhdGE6OnJhcmVEYXRhTWFwKCkuc2V0KHRoaXMs
IGRhdGEpOworICAgIG1faGFzUmFyZURhdGEgPSB0cnVlOworICAgIHJldHVybiBkYXRhOworfQor
ICAgIAorTm9kZVJhcmVEYXRhKiBOb2RlOjpjcmVhdGVSYXJlRGF0YSgpCit7CisgICAgcmV0dXJu
IG5ldyBOb2RlUmFyZURhdGE7Cit9CisgICAgCitzaG9ydCBOb2RlOjp0YWJJbmRleCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT50YWJJbmRleCgpIDog
MDsKK30KKyAgICAKK3ZvaWQgTm9kZTo6c2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGkpCit7
CisgICAgZW5zdXJlUmFyZURhdGEoKS0+c2V0VGFiSW5kZXgoaSk7Cit9CisKIFN0cmluZyBOb2Rl
Ojpub2RlVmFsdWUoKSBjb25zdAogewogICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNDAsMjIgKzI2
OCwxMyBAQCB2b2lkIE5vZGU6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9kZXMoKQogewotICAgIGlmICghbV9ub2RlTGlz
dHMpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7Cisg
ICAgTm9kZVJhcmVEYXRhICpkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEt
Pm5vZGVMaXN0cygpKSB7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRy
PE5vZGVMaXN0c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9j
dW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHJldHVybiBDaGlsZE5v
ZGVMaXN0OjpjcmVhdGUodGhpcywgJm1fbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMp
OwotfQotCi1Ob2RlKiBOb2RlOjp2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLU5vZGUqIE5vZGU6OnZpcnR1YWxMYXN0Q2hpbGQoKSBjb25zdAotewotICAg
IHJldHVybiAwOworICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgJmRhdGEt
Pm5vZGVMaXN0cygpLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOwogfQogCiBib29sIE5vZGU6OnZp
cnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdApAQCAtNDYzLDE1ICs0
ODIsMjggQEAgYm9vbCBOb2RlOjpjYW5MYXp5QXR0YWNoKCkKIHsKICAgICByZXR1cm4gc2hhZG93
QW5jZXN0b3JOb2RlKCkgPT0gdGhpczsKIH0KKyAgICAKK3ZvaWQgTm9kZTo6c2V0Rm9jdXMoYm9v
bCBiKQoreyAKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX2ZvY3VzZWQgPSBiOworfQogCitib29s
IE5vZGU6OnJhcmVEYXRhRm9jdXNlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRh
KCkpOworICAgIHJldHVybiByYXJlRGF0YSgpLT5tX2ZvY3VzZWQ7Cit9CisgICAgCiBib29sIE5v
ZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90YWJJbmRleFNldEV4cGxp
Y2l0bHk7CisgICAgaWYoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhKCkt
PnRhYkluZGV4U2V0RXhwbGljaXRseSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBO
b2RlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIHJl
dHVybiBpc0ZvY3VzYWJsZSgpICYmIG1fdGFiSW5kZXggPj0gMDsKKyAgICByZXR1cm4gaXNGb2N1
c2FibGUoKSAmJiB0YWJJbmRleCgpID49IDA7CiB9CiAKIGJvb2wgTm9kZTo6aXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0CkBAIC00OTAsMjUgKzUyMiwyOCBAQCB1bnNpZ25lZCBOb2RlOjpub2RlSW5k
ZXgoKSBjb25zdAogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNO
b2RlTGlzdCogbGlzdCkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9k
ZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0
YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAg
ICAgICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4o
bmV3IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0
Q2FjaGUoKTsKICAgICB9IGVsc2UgaWYgKCFtX2RvY3VtZW50LT5oYXNOb2RlTGlzdENhY2hlcygp
KSB7CiAgICAgICAgIC8vIFdlIGhhdmVuJ3QgYmVlbiByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyB3
aGlsZSB0aGVyZSB3ZXJlIG5vIHJlZ2lzdGVyZWQgbGlzdHMsIHNvIHRoZSBjYWNoZSBpcyBpbnZh
bGlkIG5vdy4KLSAgICAgICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICAg
ICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoKTsKICAgICB9CiAKICAgICBp
ZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAgIG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0
aENhY2hlcy5hZGQobGlzdCk7CisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0
aENhY2hlcy5hZGQobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2Rl
TGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgQVNTRVJUKG1fbm9kZUxpc3RzKTsK
KyAgICBBU1NFUlQocmFyZURhdGEoKSk7CisgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpKTsKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpIHsKLSAgICAgICAgbV9ub2RlTGlz
dHMtPm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKLSAgICAgICAgaWYgKG1fbm9kZUxp
c3RzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAg
ICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIGRhdGEtPm5vZGVM
aXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlzdCk7CisgICAgICAgIGlmIChkYXRh
LT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkYXRhLT5jbGVhck5vZGVM
aXN0cygpOwogICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNTE2LDEzICs1NTEsMTYgQEAgdm9pZCBOb2RlOjp1bnJlZ2lz
dGVyRHluYW1pY05vZGVMaXN0KER5bgogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3Rz
QXR0cmlidXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICBpZiAoIWhh
c1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSBy
YXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fbm9kZUxpc3RzLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRl
cygpOworICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9u
QXR0cmlidXRlcygpOwogCi0gICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCktPmlzRW1w
dHkoKSkgeworICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICBkb2N1bWVu
dCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgfQogfQpAQCAtNTM1LDE3ICs1NzMsMjAg
QEAgdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZwogCiB2b2lkIE5vZGU6
Om5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1fbm9k
ZUxpc3RzKQorICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5v
ZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXMo
KTsKKyAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAgTm9k
ZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+
bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9k
ZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6
Oml0ZXJhdG9yIGVuZCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQo
KTsKKyAgICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9
IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKQogICAgICAgICAoKmkpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAotICAgIGlmIChtX25vZGVM
aXN0cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgaWYg
KGRhdGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YS0+Y2xlYXJOb2Rl
TGlzdHMoKTsKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAg
IH0KIH0KQEAgLTU1NiwxNiArNTk3LDYgQEAgdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNDaGls
ZHJlbkNoYW5nZQogICAgICAgICBuLT5ub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdl
ZCgpOwogfQogCi11bnNpZ25lZCBOb2RlOjpjaGlsZE5vZGVDb3VudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLU5vZGUgKk5vZGU6OmNoaWxkTm9kZSh1bnNpZ25lZCAvKmluZGV4Ki8p
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGUgKk5vZGU6OnRyYXZlcnNlTmV4dE5v
ZGUoY29uc3QgTm9kZSAqc3RheVdpdGhpbikgY29uc3QKIHsKICAgICBpZiAoZmlyc3RDaGlsZCgp
KQpAQCAtMTE5OCwxMiArMTIyOSwxMyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRF
bGVtZW50c0J5CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1l
KGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykgewot
ICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBOb2Rl
UmFyZURhdGEgKmRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxp
c3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxp
c3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSkpOwogICAgICAgICBkb2N1bWVudCgp
LT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCi0gICAgcGFpcjxOb2RlTGlzdHNOb2RlRGF0
YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25vZGVMaXN0cy0+bV9uYW1l
Tm9kZUxpc3RDYWNoZXMuYWRkKGVsZW1lbnROYW1lLCAwKTsKKyAgICBwYWlyPE5vZGVMaXN0c05v
ZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGRhdGEtPm5vZGVMaXN0
cygpLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIDApOwogICAgIGlmIChy
ZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ldyBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlczsKICAgICAKQEAgLTEyMTIsMTIgKzEyNDQsMTMgQEAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBO
b2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKIHsK
LSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9k
ZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IGVuc3VyZVJhcmVEYXRh
KCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXROb2Rl
TGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05vZGVE
YXRhKSk7CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAK
LSAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMs
IDApOworICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9v
bD4gcmVzdWx0ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQo
Y2xhc3NOYW1lcywgMCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJlc3VsdC5m
aXJzdC0+c2Vjb25kID0gbmV3IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOwogICAgIApJbmRleDog
V2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2
aXNpb24gMzY3OTQpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDggKzU2LDcgQEAgY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFz
cyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0cmluZ0J1aWxkZXI7Ci0KLXN0cnVjdCBOb2RlTGlzdHNO
b2RlRGF0YTsKK2NsYXNzIE5vZGVSYXJlRGF0YTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIApAQCAtOTksNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBTdHlsZUNoYW5nZSB7IE5v
Q2hhbmdlLCBOb0luaGVyaXQsIEluaGVyaXQsIERldGFjaCwgRm9yY2UgfTsgICAgCiAgICAgc3Rh
dGljIFN0eWxlQ2hhbmdlIGRpZmYoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSopOwogCi0gICAg
Tm9kZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UpOworICAgIE5vZGUoRG9jdW1l
bnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlLCBib29sIGlzQ29udGFpbmVyID0gZmFsc2UpOwog
ICAgIHZpcnR1YWwgfk5vZGUoKTsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBm
b3IgTm9kZQpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICBOb2RlKiBwcmV2aW91c1Np
YmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CiAgICAgTm9kZSogbmV4dFNpYmxp
bmcoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IGNoaWxkTm9kZXMoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1
cm4gdmlydHVhbEZpcnN0Q2hpbGQoKTsgfQotICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0IHsg
cmV0dXJuIHZpcnR1YWxMYXN0Q2hpbGQoKTsgfQorICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSBjb25z
dCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckZpcnN0Q2hpbGQoKSA6IDA7
IH0KKyAgICBOb2RlKiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUo
KSA/IGNvbnRhaW5lckxhc3RDaGlsZCgpIDogMDsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNBdHRy
aWJ1dGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMoKSBj
b25zdDsKIApAQCAtMTU2LDYgKzE1NSw3IEBAIHB1YmxpYzoKICAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCiAKICAgICBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzRWxlbWVudDsgfQorICAgIGJvb2wgaXNDb250YWluZXJOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0NvbnRhaW5lcjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIEVOQUJMRShTVkcpCkBAIC0yNTAsNyArMjUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5BY3RpdmVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5BY3RpdmVDaGFpbjsgfQogICAgIGJvb2wgaW5EZXRhY2goKSBjb25zdCB7IHJldHVybiBtX2lu
RGV0YWNoOyB9CiAgICAgYm9vbCBob3ZlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9ob3ZlcmVkOyB9
Ci0gICAgYm9vbCBmb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9mb2N1c2VkOyB9CisgICAgYm9v
bCBmb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhRm9jdXNl
ZCgpIDogZmFsc2U7IH0KICAgICBib29sIGF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9hdHRh
Y2hlZDsgfQogICAgIHZvaWQgc2V0QXR0YWNoZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2F0dGFjaGVk
ID0gYjsgfQogICAgIGJvb2wgY2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVDaGFuZ2Ug
IT0gTm9TdHlsZUNoYW5nZTsgfQpAQCAtMjcxLDExICsyNzEsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgbGF6eUF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBiID0gdHJ1ZSkgeyBtX2ZvY3VzZWQgPSBiOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgYiA9IHRydWUpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRBY3RpdmUoYm9vbCBiID0gdHJ1ZSwgYm9vbCBwYXVzZT1mYWxzZSkgeyBtX2FjdGl2
ZSA9IGI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sIGIgPSB0cnVlKSB7IG1f
aG92ZXJlZCA9IGI7IH0KIAotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3RhYkluZGV4OyB9CisgICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0Owog
CiAgICAgLyoqCiAgICAgICogV2hldGhlciB0aGlzIG5vZGUgY2FuIHJlY2VpdmUgdGhlIGtleWJv
YXJkIGZvY3VzLgpAQCAtMzI0LDkgKzMyNCw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBpc1JlYWRPbmx5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRU5USVRZ
X1JFRkVSRU5DRV9OT0RFOyB9Ci0gICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9k
ZVR5cGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjaGlsZE5vZGVD
b3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZSogY2hpbGROb2RlKHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0KSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIDogMDsg
fQorICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gaXND
b250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGUoaW5kZXgpIDogMDsgfQogCiAgICAg
LyoqCiAgICAgICogRG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmlu
ZCB0aGUgbm9kZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuIFRoaXMgdXNlcyB0aGUgc2FtZSBv
cmRlciB0aGF0CkBAIC00OTcsMTMgKzQ5NywyMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Qg
eyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkKLSAgICB7IAotICAg
ICAgICBtX3RhYkluZGV4ID0gaTsgCi0gICAgICAgIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5ID0g
dHJ1ZTsKLSAgICB9CisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSk7Cisg
ICAgCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7
IH0KKyAgICAKKyAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCk7CisgICAgY29uc3QgTm9kZVJh
cmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OworICAgIE5vZGVSYXJlRGF0YSogZW5zdXJlUmFyZURh
dGEoKTsKKyAgICB2aXJ0dWFsIE5vZGVSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbEhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0OwogCiBwcml2YXRlOgorICAgIE5vZGUqIGNvbnRhaW5lckNoaWxkTm9kZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgY29udGFpbmVyQ2hpbGROb2RlQ291bnQoKSBj
b25zdDsKKyAgICBOb2RlKiBjb250YWluZXJGaXJzdENoaWxkKCkgY29uc3Q7CisgICAgTm9kZSog
Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCByYXJlRGF0YUZvY3VzZWQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkg
Y29uc3Q7CiAKICAgICBEb2NQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CkBAIC01MTEsMTAgKzUy
MSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogbV9uZXh0OwogICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJlcjsKIAotICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7Ci0K
LSAgICBzaG9ydCBtX3RhYkluZGV4OwotCiAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBt
b3JlIHRoYW4gMTYgYml0cyBoZXJlIC0tIGFkZGluZyBtb3JlIHdvdWxkIGluY3JlYXNlIHRoZSBz
aXplIG9mIGFsbCBOb2RlcwogCiAgICAgdW5zaWduZWQgbV9zdHlsZUNoYW5nZSA6IDI7CkBAIC01
MjQsMjUgKzUzMCwyMyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDaGFuZ2VkQ2hpbGQgOiAx
OwogICAgIGJvb2wgbV9pbkRvY3VtZW50IDogMTsKICAgICBib29sIG1faXNMaW5rIDogMTsKLSAg
ICBib29sIG1fZm9jdXNlZCA6IDE7CiAgICAgYm9vbCBtX2FjdGl2ZSA6IDE7CiAgICAgYm9vbCBt
X2hvdmVyZWQgOiAxOwogICAgIGJvb2wgbV9pbkFjdGl2ZUNoYWluIDogMTsKICAgICBib29sIG1f
aW5EZXRhY2ggOiAxOwogICAgIGJvb2wgbV9pblN1YnRyZWVNYXJrIDogMTsKLSAgICBib29sIG1f
dGFiSW5kZXhTZXRFeHBsaWNpdGx5IDogMTsKKyAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwog
ICAgIGNvbnN0IGJvb2wgbV9pc0VsZW1lbnQgOiAxOworcHJvdGVjdGVkOgorICAgIGNvbnN0IGJv
b2wgbV9pc0NvbnRhaW5lciA6IDE7CiAgICAgLy8gbm8gYml0cyBsZWZ0Citwcml2YXRlOgorICAg
CiAKICAgICBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKIAogICAgIHZvaWQgYXBw
ZW5kVGV4dENvbnRlbnQoYm9vbCBjb252ZXJ0QlJzVG9OZXdsaW5lcywgU3RyaW5nQnVpbGRlciYp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBOb2RlKiB2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTm9kZSogdmlydHVhbExhc3RDaGlsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCB2aXJ0dWFsSGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiB9Owot
CiB9IC8vbmFtZXNwYWNlCiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACisjaWZuZGVmIE5vZGVSYXJlRGF0YV9oCisjZGVmaW5lIE5vZGVSYXJlRGF0
YV9oCisKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKKyAgICB0
eXBlZGVmIEhhc2hTZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7CisgICAgTm9kZUxp
c3RTZXQgbV9saXN0c1dpdGhDYWNoZXM7CisgICAgCisgICAgRHluYW1pY05vZGVMaXN0OjpDYWNo
ZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKj4gQ2FjaGVNYXA7CisgICAgQ2FjaGVNYXAgbV9j
bGFzc05vZGVMaXN0Q2FjaGVzOworICAgIENhY2hlTWFwIG1fbmFtZU5vZGVMaXN0Q2FjaGVzOwor
ICAgIAorICAgIH5Ob2RlTGlzdHNOb2RlRGF0YSgpCisgICAgeworICAgICAgICBkZWxldGVBbGxW
YWx1ZXMobV9jbGFzc05vZGVMaXN0Q2FjaGVzKTsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1f
bmFtZU5vZGVMaXN0Q2FjaGVzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGVzKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygp
OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworfTsKKyAgICAKK2NsYXNzIE5vZGVSYXJlRGF0
YSB7CitwdWJsaWM6ICAgIAorICAgIE5vZGVSYXJlRGF0YSgpCisgICAgICAgIDogbV9mb2N1c2Vk
KGZhbHNlKQorICAgICAgICAsIG1fdGFiSW5kZXgoMCkKKyAgICAgICAgLCBtX3RhYkluZGV4U2V0
RXhwbGljaXRseShmYWxzZSkKKyAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRl
U29vbkFmdGVyQXR0YWNoKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgTm9kZSosIE5vZGVSYXJlRGF0YSo+IE5vZGVSYXJlRGF0YU1hcDsKKyAgICAKKyAg
ICBzdGF0aWMgTm9kZVJhcmVEYXRhTWFwJiByYXJlRGF0YU1hcCgpCisgICAgeworICAgICAgICBz
dGF0aWMgTm9kZVJhcmVEYXRhTWFwKiBkYXRhTWFwID0gbmV3IE5vZGVSYXJlRGF0YU1hcDsKKyAg
ICAgICAgcmV0dXJuICpkYXRhTWFwOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZVJhcmVE
YXRhKiByYXJlRGF0YUZyb21NYXAoY29uc3QgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiByYXJlRGF0YU1hcCgpLmdldChub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVh
ck5vZGVMaXN0cygpIHsgbV9ub2RlTGlzdHMuY2xlYXIoKTsgfQorICAgIHZvaWQgc2V0Tm9kZUxp
c3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3Rz
LnNldChsaXN0cy5yZWxlYXNlKCkpOyB9CisgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CisgICAgCisgICAgc2hvcnQg
dGFiSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4OyB9CisgICAgdm9pZCBzZXRUYWJJ
bmRleChzaG9ydCBpbmRleCkgeyBtX3RhYkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhTZXRFeHBs
aWNpdGx5ID0gdHJ1ZTsgfQorICAgIGJvb2wgdGFiSW5kZXhTZXRFeHBsaWNpdGx5KCkgY29uc3Qg
eyByZXR1cm4gbV90YWJJbmRleFNldEV4cGxpY2l0bHk7IH0KKyAgICAgICAgCisgICAgYm9vbCBt
X2ZvY3VzZWQgOiAxOworCitwcml2YXRlOgorICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4g
bV9ub2RlTGlzdHM7CisgICAgc2hvcnQgbV90YWJJbmRleDsKKyAgICBib29sIG1fdGFiSW5kZXhT
ZXRFeHBsaWNpdGx5IDogMTsKK3B1YmxpYzoKKyAgICBib29sIG1fbmVlZHNGb2N1c0FwcGVhcmFu
Y2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggOiAxOyAvL2ZvciBFbGVtZW50UmFyZURhdGEKK307Cit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDM2Nzk0
KQorKysgV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgog
I2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFdl
YkNvcmUveG1sL1hQYXRoVXRpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhV
dGlsLmNwcAkocmV2aXNpb24gMzY3OTQpCisrKyBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKFhQQVRIKQogCiAjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23700</attachid>
            <date>2008-09-23 04:11:37 -0700</date>
            <delta_ts>2008-09-25 16:56:14 -0700</delta_ts>
            <desc>Now with ChangeLog and a few cleanups</desc>
            <filename>noderaredata1.txt</filename>
            <type>text/plain</type>
            <size>43316</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjgwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDgtMDktMjMgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTgwCisg
ICAgICAgIFNwbGl0IG9mZiB1bmNvbW1vbmx5IHVzZWQgZGF0YSBmcm9tIE5vZGUgc2ltaWxhciB0
byBFbGVtZW50UmFyZURhdGEKKyAgICAgICAgCisgICAgICAgIFNhdmVzIGFuIE93blB0ciBhbmQg
YSBzaG9ydCBvbiBOb2RlLCBhcyB3ZWxsIGFzIHByb3ZpZGluZyByb29tIGZvciBhbiBpc0NvbnRh
aW5lciBiaXQsCisgICAgICAgIHdoaWNoIGluIHR1cm4gYWxsb3dzIGlubGluaW5nIGZpcnN0Q2hp
bGQoKSwgbGFzdENoaWxkKCksIGNoaWxkTm9kZUNvdW50KCksIGFuZCBjaGlsZE5vZGUoKQorICAg
ICAgICBmb3IgYSA1LTEwKyUgcGVyZm9ybWFuY2Ugd2luIG9uIFNsaWNrU3BlZWQgYW5kIGFzc29y
dGVkIHNwZWVkdXBzIG9uIG90aGVyIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4
cDogCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNwcDogSW5jbHVkZSBDb250YWluZXJOb2RlIHRvIHBpY2sg
dXAgaXRzIGRlZmluaXRpb25zIGZvciBjaGlsZE5vZGVDb3VudCgpLCBldGMuLi4KKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IFNldCBpc0NvbnRhaW5lciB0byB0cnVlCisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKToKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5oOiBUaGVzZSBOb2RlIGlubGluZXMgYXJlIGhlcmUgdG8gYXZvaWQgaW5j
bHVkaW5nIENvbnRhaW5lck5vZGUuaCBpbiBOb2RlLmgKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KTogVXNlIENvbnRhaW5lck5vZGUncyBkZWZpbml0aW9u
LCBoYXZpbmcgcHJvdmVkIHRoYXQgdGhlIE5vZGUgaXMgYSBjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjb250YWluZXJGaXJzdENoaWxkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNvbnRhaW5lckxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OiBNb3N0IG9mIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIG1vdmluZyBFbGVtZW50UmFyZURhdGEgdG8g
RWxlbWVudFJhcmVEYXRhLmggYW5kIE5vZGVSYXJlRGF0YS5oCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpFbGVtZW50KTogCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVSYXJlRGF0YSk6IFJlbmFtZWQgZnJvbSBjcmVhdGVSYXJlRGF0YQor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3JlYXRlUmFyZURhdGEpOiBVc2VkIGJ5IGVuc3Vy
ZVJhcmVEYXRhIHRvIGdldCB0aGUgY29ycmVjdCByYXJlRGF0YSB0eXBlCisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjphdHRhY2gpOiBDaGVjayBoYXNSYXJlRGF0YSByYXRoZXIgdGhhbiBudWxs
LWNoZWNraW5nIHJhcmVEYXRhKCkKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6IGRpdHRvCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjptaW5pbXVtU2l6ZUZvclJlc2l6aW5nKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUpOiBkaXR0bworICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOiBBZGRlZDsgZXZlcnl0aGluZyBj
b3BpZWQgZnJvbSBFbGVtZW50LmNwcAorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE1pbmltdW1T
aXplRm9yUmVzaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVt
ZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUpOiBQYXNzIHRoZSBp
c0NvbnRhaW5lciBmbGFnIHVwIHRoZSBjaGFpbgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6On5Ob2RlKTogcmFyZURhdGEgY2xlYW51cCBj
b2RlIG1vdmVkIGZyb20gRWxlbWVudCBhbmQgY2hhbmdlZCB0byB1c2UgaGFzUmFyZURhdGEKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmVuc3VyZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJhcmVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRhYkluZGV4KTogbm9uemVybyB0YWIgaW5kZXhl
cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRUYWJJbmRl
eEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2Rlcyk6IE5vZGVM
aXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRGb2N1
cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyYXJlRGF0YUZvY3VzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6aXNGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNL
ZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFt
aWNOb2RlTGlzdCk6IE5vZGVMaXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hh
bmdlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKTog
ZGl0dG8KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Zmly
c3RDaGlsZCk6IFVzZSBpc0NvbnRhaW5lck5vZGUoKSB0byBkZXZpcnR1YWxpemUKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6Omxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojppc0NvbnRhaW5lck5vZGUpOiBUYWtlIGFkdmFudGFnZSBvZiBhIG5ld2x5IGZyZWVkIGJpdCB0
byBzdG9yZSB3aGV0aGVyIHdlJ3JlIGEgY29udGFpbmVyCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojpmb2N1c2VkKTogZm9jdXMgaXMgaW4gcmFyZURhdGEgaWYgc2V0CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjaGlsZFR5cGVBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNoaWxk
Tm9kZUNvdW50KTogVXNlIGlzQ29udGFpbmVyTm9kZSgpIHRvIGRldmlydHVhbGl6ZQorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2RlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6Omhhc1JhcmVEYXRhKTogVXNlIGFub3RoZXIgbmV3bHkgZnJlZWQgYml0IHRvIHN0b3JlIHdo
ZXRoZXIgd2UgaGF2ZSByYXJlIGRhdGE7IGF2b2lkcyBkb2luZyBoYXNoIGxvb2t1cHMgaW4gdGhl
IGNvbW1vbiBjYXNlCisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOiBBZGRlZC4gTW9zdCBv
ZiB0aGlzIGlzIGp1c3QgcHJvcGVydGllcyBtb3ZlZCBmcm9tIE5vZGUKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0c05vZGVEYXRhOjp+Tm9kZUxpc3RzTm9kZURhdGEpOiBNb3ZlZCBmcm9tIE5v
ZGUuY3BwIHNpbmNlIHdlIE5vZGVSYXJlRGF0YSBuZWVkcyB0byBwdXQgdGhlbSBpbiBhIEhhc2hU
YWJsZSA6KAorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6OmNsZWFyTm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
YXJlRGF0YTo6c2V0Tm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6dGFiSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpzZXRUYWJJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnRhYkluZGV4U2V0RXhwbGljaXRseSk6CisgICAgICAgICog
ZG9tL1RyZWVXYWxrZXIuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMg
ZGVmaW5pdGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorICAgICAgICAqIHhtbC9Y
UGF0aFV0aWwuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMgZGVmaW5p
dGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorCiAyMDA4LTA5LTIzICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4u
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzNjgwMykKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtNzIyLDYgKzcyMiw3IEBAIF9fWk5LN1dlYkNvcmUxM0hp
dFRlc3RSZXN1bHQ1aW1hZ2VFdgogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDV0aXRsZUV2
CiBfX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0OWltYWdlUmVjdEV2CiBfX1pOSzdXZWJDb3Jl
MTNSZXNvdXJjZUVycm9yY3ZQN05TRXJyb3JFdgorX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9k
ZTE0Y2hpbGROb2RlQ291bnRFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMHJlcXVl
c3RVUkxFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMWZyYW1lTG9hZGVyRXYKIF9f
Wk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTFzdWJyZXNvdXJjZUVSS05TXzRLVVJMRQpAQCAt
NzY4LDYgKzc2OSw3IEBAIF9fWk5LN1dlYkNvcmU0S1VSTGN2UDVOU1VSTEV2CiBfX1pOSzdXZWJD
b3JlNE5vZGUxNGlzRGVzY2VuZGFudE9mRVBLUzBfCiBfX1pOSzdXZWJDb3JlNE5vZGUxOGdldFN1
YnJlc291cmNlVVJMc0VSTjNXVEY2VmVjdG9ySU5TXzRLVVJMRUxtMEVFRQogX19aTks3V2ViQ29y
ZTROb2RlOW5vZGVJbmRleEV2CitfX1pOSzdXZWJDb3JlMTNDb250YWluZXJOb2RlOWNoaWxkTm9k
ZUVqCiBfX1pOSzdXZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgogX19aTks3V2ViQ29yZTRQYWdl
MzRpbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlRXYKIF9fWk5LN1dlYkNvcmU0UGFn
ZTlncm91cE5hbWVFdgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDM2ODAzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2MCw4ICs2NjAsMTAgQEAKIAkJNUREMEEz
ODEwRDlBQzYwNzAwNTZDMTIyIC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxNUYx
NjgwRDlBMTY1RDAwMzNDRTk3IC8qIERPTUVsZW1lbnRUaW1lQ29udHJvbC5oICovOyB9OwogCQk1
REZFOEY1NjBEMTY0NzdCMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJBMEQxNUY2NDIwMEI3
OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwICovOyB9OwogCQk1REZFOEY1NzBEMTY0NzdDMDA3
NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzhCQjBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0
aW9uLmggKi87IH07CisJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYzMTg5QUUy
MEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9ICgpOyB9OyB9OwogCQk2MzQ1OUM2NTBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2Vs
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYz
NDU5QzYzMEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oICovOyB9OwogCQk2MzQ1
OUM2NjBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0NTlDNjQwRTc5Q0QzMzAwOEFERkFG
IC8qIENTU050aFNlbGVjdG9yLmNwcCAqLzsgfTsKKwkJNjM3QjdBREYwRTg3NjdCODAwRTMyMTk0
IC8qIEVsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjM3QjdBREUwRTg3NjdCODAwRTMyMTk0IC8qIEVsZW1lbnRSYXJlRGF0YS5o
ICovOyB9OwogCQk2M0Q3QjMyRDBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2M0Q3QjMyQzBF
NzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi87IH07CiAJCTY1MEY1M0RDMDlE
MTVEREEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTBGNTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1h
ci5oICovOyB9OwogCQk2NTBGNTNERDA5RDE1RERGMDBDOUIwQzggLyogQ1NTR3JhbW1hci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODE0NDA5
RDEzMDQzMDAwRTYxRDcgLyogQ1NTR3JhbW1hci5jcHAgKi87IH07CkBAIC01MzQyLDggKzUzNDQs
MTAgQEAKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVh
bGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBR
dWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQk1RENGODM2QzBENTkxNTk4MDA5NTNCQzYgLyogUGx1Z2luSW5mb1N0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkluZm9TdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEg
LyogTm9kZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVS
YXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MzQ1OUM2MzBFNzlDRDMz
MDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTTnRoU2VsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjM0
NTlDNjQwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNlbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU050aFNlbGVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNjM3QjdBREUwRTg3NjdCODAwRTMyMTk0IC8qIEVsZW1lbnRSYXJl
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50UmFyZURhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjNEN0IzMkMwRTc4Q0QzRjAwRjc2MTdD
IC8qIE5vZGVSZW5kZXJTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b2RlUmVuZGVyU3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwRjUzREIw
OUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUw
RkJGMjcwRDlBRjA0NjAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdIS2VybkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTM1NzEsNiArMTM1NzUsOCBAQAogCQlGNTIzRDMyNDAyREU0
NDc4MDE4NjM1Q0EgLyogZG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk2MzE4OUFFMjBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggKi8s
CisJCQkJNjM3QjdBREUwRTg3NjdCODAwRTMyMTk0IC8qIEVsZW1lbnRSYXJlRGF0YS5oICovLAog
CQkJCTU0QzUwRjdBMEU4MDFERjMwMDk4MzJBMCAvKiBYTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCAq
LywKIAkJCQk2M0Q3QjMyQzBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8s
CiAJCQkJQThDNEE3RkMwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuY3BwICovLApAQCAtMTUxMDAs
NiArMTUxMDYsOCBAQAogCQkJCTkzQ0NGMDI3MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9u
QWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzc0MzBBREJBNURFMDBBNDU1NEQgLyog
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTE1QjUy
MDlGODRCNzEwMENBNEZDMSAvKiBOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2M0Q3QjMyRDBF
NzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2
MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9kZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTRGRTczMTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODU0RkU3MzMwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM1MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTU4MDQsNyArMTU4MTIsNiBAQAogCQkJCTMxNkZF
MDgyMEU2Q0NDMjgwMEJGNjA4OCAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcyODRBRERFMEU2RkVCMzEwMDJFRUZCRCAvKiBVc2VyU3R5
bGVTaGVldExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4
ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk2M0Q3QjMy
RDBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2MzQ1OUM2NTBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI5RkZCQjgzMEU3QzVBM0QwMDQwNzczMCAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJh
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTg1Niw2ICsxNTg2Myw3IEBACiAJCQkJQjJG
MzRGRTYwRTgyRjgxNDAwRjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg5NTgy
NTYwRTg1N0E3RTAwRjgyQzgzIC8qIEltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OENCNDEzRTBFODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk2MzdCN0FERjBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzBCM0JFMjBFODg0OTIxMDA5NzcwQzUgLyogSlNDYW52YXNQaXhlbEFycmF5
Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAzNjgw
MykKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMzY4MDMpCisrKyBXZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBzdGF0
aWMgTm9kZUNhbGxiYWNrUXVldWUqIHNfcG9zdEF0dGFjaENhCiAKIHN0YXRpYyBzaXplX3Qgc19h
dHRhY2hEZXB0aCA9IDA7CiAKLUNvbnRhaW5lck5vZGU6OkNvbnRhaW5lck5vZGUoRG9jdW1lbnQq
IGRvYywgYm9vbCBpc0VsZW1lbnQpCi0gICAgOiBFdmVudFRhcmdldE5vZGUoZG9jLCBpc0VsZW1l
bnQpCitDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNF
bGVtZW50LCBib29sIGlzQ29udGFpbmVyKQorICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNF
bGVtZW50LCBpc0NvbnRhaW5lcikKICAgICAsIG1fZmlyc3RDaGlsZCgwKQogICAgICwgbV9sYXN0
Q2hpbGQoMCkKIHsKQEAgLTExOSwxNyArMTE5LDYgQEAgQ29udGFpbmVyTm9kZTo6fkNvbnRhaW5l
ck5vZGUoKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAKLQotTm9kZSogQ29udGFpbmVy
Tm9kZTo6dmlydHVhbEZpcnN0Q2hpbGQoKSBjb25zdAotewotICAgIHJldHVybiBtX2ZpcnN0Q2hp
bGQ7Ci19Ci0KLU5vZGUqIENvbnRhaW5lck5vZGU6OnZpcnR1YWxMYXN0Q2hpbGQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2xhc3RDaGlsZDsKLX0KLQogYm9vbCBDb250YWluZXJOb2RlOjppbnNl
cnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBib29sIHNob3VsZExhenlBdHRhY2gpCiB7CiAgICAgLy8gQ2hlY2sgdGhh
dCB0aGlzIG5vZGUgaXMgbm90ICJmbG9hdGluZyIuCkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZp
c2lvbiAzNjgwMykKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQCB0eXBlZGVmIHZvaWQgKCpOb2RlQ2FsbGJhY2spKE5vZGUqKTsK
IAogY2xhc3MgQ29udGFpbmVyTm9kZSA6IHB1YmxpYyBFdmVudFRhcmdldE5vZGUgewogcHVibGlj
OgotICAgIENvbnRhaW5lck5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlKTsK
KyAgICBDb250YWluZXJOb2RlKERvY3VtZW50KiwgYm9vbCBpc0VsZW1lbnQgPSBmYWxzZSwgYm9v
bCBpc0NvbnRhaW5lciA9IHRydWUpOwogICAgIHZpcnR1YWwgfkNvbnRhaW5lck5vZGUoKTsKIAog
ICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KQEAg
LTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sID0g
dHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSA9IHRydWUsIGJv
b2wgcGF1c2UgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWQoYm9vbCA9IHRy
dWUpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKKyAgICBOb2RlKiBjaGlsZE5vZGUodW5zaWduZWQg
aW5kZXgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3LDkgKzc3LDYg
QEAgcHJvdGVjdGVkOgogICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFBv
c3RBdHRhY2hDYWxsYmFja3MoKTsKLQotICAgIHZpcnR1YWwgTm9kZSogdmlydHVhbEZpcnN0Q2hp
bGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGUqIHZpcnR1YWxMYXN0Q2hpbGQoKSBjb25zdDsK
ICAgICAKICAgICBzdGF0aWMgdm9pZCBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKE5vZGUq
JiBoZWFkLCBOb2RlKiYgdGFpbCwgQ29udGFpbmVyTm9kZSopOwogCkBAIC04OSw2ICs4NiwyNiBA
QCBwcml2YXRlOgogICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBtX2xhc3RDaGls
ZDsKIH07CisgICAgCitpbmxpbmUgdW5zaWduZWQgTm9kZTo6Y29udGFpbmVyQ2hpbGROb2RlQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb250YWluZXJOb2Rl
Kj4odGhpcyktPmNoaWxkTm9kZUNvdW50KCk7Cit9CisKK2lubGluZSBOb2RlICpOb2RlOjpjb250
YWluZXJDaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Y2hpbGROb2RlKGluZGV4KTsKK30K
KworaW5saW5lIE5vZGUqIE5vZGU6OmNvbnRhaW5lckZpcnN0Q2hpbGQoKSBjb25zdAoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb250YWluZXJOb2RlKj4odGhpcyktPmZpcnN0Q2hp
bGQoKTsKK30KKworaW5saW5lIE5vZGUqIE5vZGU6OmNvbnRhaW5lckxhc3RDaGlsZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+
bGFzdENoaWxkKCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDM2ODAzKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDU1ICs0NiwxMyBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
RWxlbWVudFJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBYTUxOYW1lczsKLQotY2xhc3MgRWxlbWVu
dFJhcmVEYXRhIHsKLXB1YmxpYzoKLSAgICBFbGVtZW50UmFyZURhdGEoRWxlbWVudCopOwotICAg
IHZvaWQgcmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqKTsKLQotICAgIEludFNpemUgbV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nOwotICAgIFJlbmRlclN0eWxlKiBtX2NvbXB1dGVkU3R5bGU7Ci0g
ICAgYm9vbCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwotfTsK
LQotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEVsZW1lbnQqLCBFbGVtZW50UmFyZURhdGEqPiBFbGVt
ZW50UmFyZURhdGFNYXA7Ci0KLXN0YXRpYyBFbGVtZW50UmFyZURhdGFNYXAmIHJhcmVEYXRhTWFw
KCkKLXsKLSAgICBzdGF0aWMgRWxlbWVudFJhcmVEYXRhTWFwKiBkYXRhTWFwID0gbmV3IEVsZW1l
bnRSYXJlRGF0YU1hcDsKLSAgICByZXR1cm4gKmRhdGFNYXA7Ci19Ci0KLXN0YXRpYyBFbGVtZW50
UmFyZURhdGEqIHJhcmVEYXRhRnJvbU1hcChjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IHJldHVybiByYXJlRGF0YU1hcCgpLmdldChlbGVtZW50KTsKLX0KLQotc3RhdGljIGlubGluZSBJ
bnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKLXsKLSAgICByZXR1cm4gSW50
U2l6ZShJTlRfTUFYLCBJTlRfTUFYKTsKLX0KLQotaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxl
bWVudFJhcmVEYXRhKEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBtX21pbmltdW1TaXplRm9yUmVz
aXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKLSAgICAsIG1fY29tcHV0ZWRT
dHlsZSgwKQotICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFj
aChmYWxzZSkKLXsKLX0KLQotdm9pZCBFbGVtZW50UmFyZURhdGE6OnJlc2V0Q29tcHV0ZWRTdHls
ZShFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghbV9jb21wdXRlZFN0eWxlKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9jb21wdXRlZFN0eWxlLT5kZXJlZihlbGVtZW50LT5kb2N1bWVudCgp
LT5yZW5kZXJBcmVuYSgpKTsKLSAgICBtX2NvbXB1dGVkU3R5bGUgPSAwOwotfQotCisgICAgCiBF
bGVtZW50OjpFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MpCiAgICAgOiBDb250YWluZXJOb2RlKGRvYywgdHJ1ZSkKICAgICAsIG1fdGFnTmFtZSh0YWdO
YW1lKQpAQCAtMTA1LDcgKzYzLDYgQEAgRWxlbWVudDo6RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YQogICAgICwgbV9zeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlcyhmYWxzZSkKICNlbmRp
ZgogICAgICwgbV9wYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCh0cnVlKQotICAgICwgbV9oYXNSYXJl
RGF0YShmYWxzZSkKIHsKIH0KIApAQCAtMTEzLDM5ICs3MCwzMCBAQCBFbGVtZW50Ojp+RWxlbWVu
dCgpCiB7CiAgICAgaWYgKG5hbWVkQXR0ck1hcCkKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXRh
Y2hGcm9tRWxlbWVudCgpOwotCi0gICAgaWYgKCFoYXNSYXJlRGF0YSgpKQotICAgICAgICBBU1NF
UlQoIXJhcmVEYXRhTWFwKCkuY29udGFpbnModGhpcykpOwotICAgIGVsc2UgewotICAgICAgICBF
bGVtZW50UmFyZURhdGFNYXAmIGRhdGFNYXAgPSByYXJlRGF0YU1hcCgpOwotICAgICAgICBFbGVt
ZW50UmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YU1hcC5maW5kKHRoaXMpOwotICAgICAg
ICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5lbmQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25k
OwotICAgICAgICBkYXRhTWFwLnJlbW92ZShpdCk7Ci0gICAgfQogfQogCiBpbmxpbmUgRWxlbWVu
dFJhcmVEYXRhKiBFbGVtZW50OjpyYXJlRGF0YSgpCiB7Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRh
KCkgPyByYXJlRGF0YUZyb21NYXAodGhpcykgOiAwOworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudFJhcmVEYXRhKj4oTm9kZVJhcmVEYXRh
OjpyYXJlRGF0YUZyb21NYXAodGhpcykpOwogfQotCisgICAgCiBpbmxpbmUgY29uc3QgRWxlbWVu
dFJhcmVEYXRhKiBFbGVtZW50OjpyYXJlRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyByYXJlRGF0YUZyb21NYXAodGhpcykgOiAwOworICAgIEFTU0VSVChoYXNSYXJl
RGF0YSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudFJhcmVEYXRhKj4o
Tm9kZVJhcmVEYXRhOjpyYXJlRGF0YUZyb21NYXAodGhpcykpOwogfQotCi1FbGVtZW50UmFyZURh
dGEqIEVsZW1lbnQ6OmNyZWF0ZVJhcmVEYXRhKCkKKyAgICAKK2lubGluZSBFbGVtZW50UmFyZURh
dGEqIEVsZW1lbnQ6OmVuc3VyZVJhcmVEYXRhKCkKIHsKLSAgICBpZiAoaGFzUmFyZURhdGEoKSkK
LSAgICAgICAgcmV0dXJuIHJhcmVEYXRhTWFwKCkuZ2V0KHRoaXMpOwotICAgIEFTU0VSVCghcmFy
ZURhdGFNYXAoKS5jb250YWlucyh0aGlzKSk7Ci0gICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0g
bmV3IEVsZW1lbnRSYXJlRGF0YSh0aGlzKTsKLSAgICByYXJlRGF0YU1hcCgpLnNldCh0aGlzLCBk
YXRhKTsKLSAgICBzZXRIYXNSYXJlRGF0YSh0cnVlKTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudFJhcmVEYXRhKj4oTm9kZTo6ZW5zdXJlUmFyZURhdGEo
KSk7CiB9Ci0KKyAgICAKK05vZGVSYXJlRGF0YSogRWxlbWVudDo6Y3JlYXRlUmFyZURhdGEoKQor
eworICAgIHJldHVybiBuZXcgRWxlbWVudFJhcmVEYXRhKHRoaXMpOworfQorICAgIAogUGFzc1Jl
ZlB0cjxOb2RlPiBFbGVtZW50OjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNzE3LDExICs2NjUsMTMgQEAgdm9pZCBFbGVtZW50OjphdHRhY2go
KQogewogICAgIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKICAgICBDb250YWluZXJOb2RlOjph
dHRhY2goKTsKLSAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpIHsKLSAg
ICAgICAgaWYgKHJkLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
KSB7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgeyAgIAorICAgICAgICBFbGVtZW50UmFy
ZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOworICAgICAgICBpZiAoZGF0YS0+bV9uZWVkc0ZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCkgewogICAgICAgICAgICAgaWYgKGlzRm9j
dXNhYmxlKCkgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24oKTsKLSAgICAgICAg
ICAgIHJkLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gZmFs
c2U7CisgICAgICAgICAgICBkYXRhLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFm
dGVyQXR0YWNoID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC03MjksOCArNjc5LDgg
QEAgdm9pZCBFbGVtZW50OjphdHRhY2goKQogdm9pZCBFbGVtZW50OjpkZXRhY2goKQogewogICAg
IGNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwotICAgIGlmIChFbGVtZW50UmFyZURhdGEq
IHJkID0gcmFyZURhdGEoKSkKLSAgICAgICAgcmQtPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsK
KyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+cmVzZXRDb21wdXRl
ZFN0eWxlKHRoaXMpOwogICAgIENvbnRhaW5lck5vZGU6OmRldGFjaCgpOwogfQogCkBAIC03NDcs
OCArNjk3LDggQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaAogI2Vu
ZGlmCiAKICAgICBpZiAoKGNoYW5nZSA+IE5vQ2hhbmdlIHx8IGNoYW5nZWQoKSkpIHsKLSAgICAg
ICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgpKQotICAgICAgICAgICAgcmQt
PnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKKyAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisg
ICAgICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7CiAgICAgfQog
ICAgIGlmIChoYXNQYXJlbnRTdHlsZSAmJiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hhbmdlZCgp
KSkgewogICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzKTsKQEAgLTExNTYsNyArMTEwNiw3IEBAIHZv
aWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXMKICAgICAgICAgcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKHRoaXMsIGRvYy0+ZnJhbWUoKSk7CiAKICAg
ICBpZiAoIWlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGEoKS0+bV9uZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IHRydWU7CisgICAgICAgIGVu
c3VyZVJhcmVEYXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRh
Y2ggPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTEyMjIsMTUg
KzExNzIsMTQgQEAgU3RyaW5nIEVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIAogSW50U2l6ZSBFbGVt
ZW50OjptaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkgY29uc3QKIHsKLSAgICBjb25zdCBFbGVtZW50
UmFyZURhdGEqIHJkID0gcmFyZURhdGEoKTsKLSAgICByZXR1cm4gcmQgPyByZC0+bV9taW5pbXVt
U2l6ZUZvclJlc2l6aW5nIDogZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKKyAgICBy
ZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm1fbWluaW11bVNpemVGb3JSZXNpemlu
ZyA6IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlm
IChzaXplID09IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkgJiYgIXJhcmVEYXRhKCkp
CisgICAgaWYgKHNpemUgPT0gZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAmJiAhaGFz
UmFyZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNyZWF0ZVJhcmVEYXRhKCktPm1fbWlu
aW11bVNpemVGb3JSZXNpemluZyA9IHNpemU7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+bV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nID0gc2l6ZTsKIH0KIAogUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNv
bXB1dGVkU3R5bGUoKQpAQCAtMTI0MywxNiArMTE5MiwxNiBAQCBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6Y29tcHV0ZWRTdHlsZSgpCiAgICAgICAgIC8vIGRvY3VtZW50IHRyZWUgYW5kIGZpZ3VyZSBv
dXQgd2hlbiB0byBkZXN0cm95IHRoZSBjb21wdXRlZCBzdHlsZSBmb3Igc3VjaCBlbGVtZW50cy4K
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFbGVtZW50UmFyZURhdGEqIHJkID0gY3JlYXRlUmFy
ZURhdGEoKTsKLSAgICBpZiAoIXJkLT5tX2NvbXB1dGVkU3R5bGUpCi0gICAgICAgIHJkLT5tX2Nv
bXB1dGVkU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVu
dCh0aGlzLCBwYXJlbnQoKSA/IHBhcmVudCgpLT5jb21wdXRlZFN0eWxlKCkgOiAwKTsKLSAgICBy
ZXR1cm4gcmQtPm1fY29tcHV0ZWRTdHlsZTsKKyAgICBFbGVtZW50UmFyZURhdGEqIGRhdGEgPSBl
bnN1cmVSYXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bV9jb21wdXRlZFN0eWxlKQorICAgICAg
ICBkYXRhLT5tX2NvbXB1dGVkU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0
eWxlRm9yRWxlbWVudCh0aGlzLCBwYXJlbnQoKSA/IHBhcmVudCgpLT5jb21wdXRlZFN0eWxlKCkg
OiAwKTsKKyAgICByZXR1cm4gZGF0YS0+bV9jb21wdXRlZFN0eWxlOwogfQogCiB2b2lkIEVsZW1l
bnQ6OmNhbmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpCiB7Ci0gICAgaWYgKEVsZW1lbnRSYXJl
RGF0YSogcmQgPSByYXJlRGF0YSgpKQotICAgICAgICByZC0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5j
ZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IGZhbHNlOworICAgIGlmIChoYXNSYXJlRGF0YSgpKQor
ICAgICAgICByYXJlRGF0YSgpLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVy
QXR0YWNoID0gZmFsc2U7CiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhp
cykKICAgICAgICAgZG9jdW1lbnQoKS0+Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7CiB9
CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RWxlbWVudC5oCShyZXZpc2lvbiAzNjgwMykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dHRyOwogY2xhc3MgQXR0cmlidXRlOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNz
IEVsZW1lbnRSYXJlRGF0YTsKIGNsYXNzIEludFNpemU7CitjbGFzcyBFbGVtZW50UmFyZURhdGE7
CiAKIGNsYXNzIEVsZW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CiBwdWJsaWM6CkBAIC0x
OTcsMTMgKzE5Nyw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVy
biBtX2hhc1JhcmVEYXRhOyB9Ci0gICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIgPSB0cnVl
KSB7IG1faGFzUmFyZURhdGEgPSBiOyB9Ci0KLSAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRh
KCk7Ci0gICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OwotICAgIEVs
ZW1lbnRSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0
dHJpYnV0ZSgpIGNvbnN0IHt9CkBAIC0yMjEsNiArMjE0LDExIEBAIHByaXZhdGU6CiAgICAgUXVh
bGlmaWVkTmFtZSBtX3RhZ05hbWU7CiAKIHByb3RlY3RlZDoKKyAgICBFbGVtZW50UmFyZURhdGEq
IHJhcmVEYXRhKCk7CisgICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0
OworICAgIEVsZW1lbnRSYXJlRGF0YSogZW5zdXJlUmFyZURhdGEoKTsKKyAgICB2aXJ0dWFsIE5v
ZGVSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKKyAgICAKICAgICBtdXRhYmxlIFJlZlB0cjxO
YW1lZEF0dHJNYXA+IG5hbWVkQXR0ck1hcDsKIAogICAgIC8vIFRoZXNlIHR3byBiaXRzIGFyZSBy
ZWFsbHkgdXNlZCBieSB0aGUgU3R5bGVkRWxlbWVudCBzdWJjbGFzcywgYnV0IHRoZXkgYXJlIHB1
bGxlZCB1cCBoZXJlIGluIG9yZGVyIHRvIGJlIHNoYXJlZCB3aXRoIG90aGVyCkBAIC0yMzYsNyAr
MjM0LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGJvb2wgbV9wYXJzaW5nQ2hpbGRy
ZW5GaW5pc2hlZCA6IDE7Ci0gICAgYm9vbCBtX2hhc1JhcmVEYXRhIDogMTsKIH07CiAKIH0gLy9u
YW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKyNp
Zm5kZWYgRWxlbWVudFJhcmVEYXRhX2gKKyNkZWZpbmUgRWxlbWVudFJhcmVEYXRhX2gKKworI2lu
Y2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorY2xhc3MgRWxlbWVudFJhcmVEYXRhIDogcHVibGljIE5vZGVSYXJl
RGF0YSB7CitwdWJsaWM6CisgICAgRWxlbWVudFJhcmVEYXRhKEVsZW1lbnQqKTsKKyAgICB2b2lk
IHJlc2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50Kik7CisgICAgCisgICAgSW50U2l6ZSBtX21pbmlt
dW1TaXplRm9yUmVzaXppbmc7CisgICAgUmVuZGVyU3R5bGUqIG1fY29tcHV0ZWRTdHlsZTsKK307
CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
Cit7CisgICAgcmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7Cit9CisKK2lubGluZSBF
bGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlKQorICAgIDogbV9taW5p
bXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCisgICAg
LCBtX2NvbXB1dGVkU3R5bGUoMCkKK3sKK30KKwordm9pZCBFbGVtZW50UmFyZURhdGE6OnJlc2V0
Q29tcHV0ZWRTdHlsZShFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmICghbV9jb21wdXRlZFN0
eWxlKQorICAgICAgICByZXR1cm47CisgICAgbV9jb21wdXRlZFN0eWxlLT5kZXJlZihlbGVtZW50
LT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKKyAgICBtX2NvbXB1dGVkU3R5bGUgPSAwOwor
fQorCit9CisjZW5kaWYgRWxlbWVudFJhcmVEYXRhX2gKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2Rl
LmNwcAkocmV2aXNpb24gMzY4MDMpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw4IEBAIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOwogICAgIAogc3RhdGljIEhhc2hTZXQ8RXZlbnRUYXJnZXROb2RlKj4qIGdOb2Rlc0Rpc3Bh
dGNoaW5nU2ltdWxhdGVkQ2xpY2tzID0gMDsgCiAKLUV2ZW50VGFyZ2V0Tm9kZTo6RXZlbnRUYXJn
ZXROb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50KQotICAgIDogTm9kZShkb2MsIGlz
RWxlbWVudCkKK0V2ZW50VGFyZ2V0Tm9kZTo6RXZlbnRUYXJnZXROb2RlKERvY3VtZW50KiBkb2Ms
IGJvb2wgaXNFbGVtZW50LCBib29sIGlzQ29udGFpbmVyKQorICAgIDogTm9kZShkb2MsIGlzRWxl
bWVudCwgaXNDb250YWluZXIpCiAgICAgLCBtX3JlZ2RMaXN0ZW5lcnMoMCkKIHsKIH0KSW5kZXg6
IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAzNjgwMykKKysrIFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEZyYW1l
OwogY2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVibGljIE5vZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgotICAgIEV2ZW50VGFyZ2V0Tm9k
ZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UpOworICAgIEV2ZW50VGFyZ2V0Tm9k
ZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UsIGJvb2wgaXNDb250YWluZXIgPSBm
YWxzZSk7CiAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXROb2RlKCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNFdmVudFRhcmdldE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2
aXNpb24gMzY4MDMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsMzIgKzU4LDEyIEBACiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUgPGtq
cy9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CisjaW5j
bHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKLQotc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7Ci0gICAgTm9kZUxpc3RT
ZXQgbV9saXN0c1dpdGhDYWNoZXM7Ci0KLSAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyBtX2No
aWxkTm9kZUxpc3RDYWNoZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOwotICAgIENhY2hlTWFwIG1fY2xhc3NOb2RlTGlz
dENhY2hlczsKLSAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENhY2hlczsKLQotICAgIH5Ob2Rl
TGlzdHNOb2RlRGF0YSgpCi0gICAgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc05v
ZGVMaXN0Q2FjaGVzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbmFtZU5vZGVMaXN0Q2Fj
aGVzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLSAgICB2b2lkIGlu
dmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3Q7Ci19OwotCisgICAgCiAvLyAtLS0tLS0tLQogCiBib29sIE5vZGU6OmlzU3VwcG9y
dGVkKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQpAQCAtMTU2
LDEyICsxMzYsMTEgQEAgTm9kZTo6U3R5bGVDaGFuZ2UgTm9kZTo6ZGlmZiggUmVuZGVyU3R5bAog
ICAgIHJldHVybiBjaDsKIH0KIAotTm9kZTo6Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxl
bWVudCkKK05vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBpc0VsZW1lbnQsIGJvb2wgaXND
b250YWluZXIpCiAgICAgOiBtX2RvY3VtZW50KGRvYykKICAgICAsIG1fcHJldmlvdXMoMCkKICAg
ICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQotICAgICwgbV90YWJJbmRleCgwKQog
ICAgICwgbV9zdHlsZUNoYW5nZShOb1N0eWxlQ2hhbmdlKQogICAgICwgbV9oYXNJZChmYWxzZSkK
ICAgICAsIG1faGFzQ2xhc3MoZmFsc2UpCkBAIC0xNjksMTQgKzE0OCwxNCBAQCBOb2RlOjpOb2Rl
KERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50CiAgICAgLCBtX2hhc0NoYW5nZWRDaGlsZChm
YWxzZSkKICAgICAsIG1faW5Eb2N1bWVudChmYWxzZSkKICAgICAsIG1faXNMaW5rKGZhbHNlKQot
ICAgICwgbV9mb2N1c2VkKGZhbHNlKQogICAgICwgbV9hY3RpdmUoZmFsc2UpCiAgICAgLCBtX2hv
dmVyZWQoZmFsc2UpCiAgICAgLCBtX2luQWN0aXZlQ2hhaW4oZmFsc2UpCiAgICAgLCBtX2luRGV0
YWNoKGZhbHNlKQogICAgICwgbV9pblN1YnRyZWVNYXJrKGZhbHNlKQotICAgICwgbV90YWJJbmRl
eFNldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgLCBtX2hhc1JhcmVEYXRhKGZhbHNlKQogICAgICwg
bV9pc0VsZW1lbnQoaXNFbGVtZW50KQorICAgICwgbV9pc0NvbnRhaW5lcihpc0NvbnRhaW5lcikK
IHsKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNob3VsZElnbm9yZUxlYWtzKQpAQCAtMjA5LDkg
KzE4OCwxOSBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgZWxzZQogICAgICAgICBub2RlQ291bnRlci5k
ZWNyZW1lbnQoKTsKICNlbmRpZgotCi0gICAgaWYgKG1fbm9kZUxpc3RzICYmIG1fZG9jdW1lbnQp
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKKyAgICAKKyAgICBp
ZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIEFTU0VSVCghTm9kZVJhcmVEYXRhOjpyYXJlRGF0
YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fZG9jdW1l
bnQgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBtX2RvY3VtZW50LT5y
ZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAgICAgIAorICAgICAgICBOb2RlUmFyZURhdGE6Ok5v
ZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKKyAg
ICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YU1h
cC5maW5kKHRoaXMpOworICAgICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5lbmQoKSk7CisgICAg
ICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkYXRhTWFwLnJlbW92ZShpdCk7CisgICAg
fQogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIGRldGFjaCgpOwpAQCAtMjIyLDYgKzIx
MSw0NSBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgICAgIG1fbmV4dC0+c2V0UHJldmlvdXNTaWJsaW5n
KDApOwogfQogCitpbmxpbmUgTm9kZVJhcmVEYXRhKiBOb2RlOjpyYXJlRGF0YSgpCit7CisgICAg
QVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRh
RnJvbU1hcCh0aGlzKTsKK30KKyAgICAKK2lubGluZSBjb25zdCBOb2RlUmFyZURhdGEqIE5vZGU6
OnJhcmVEYXRhKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CisgICAgcmV0
dXJuIE5vZGVSYXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpOworfQorCitOb2RlUmFyZURh
dGEqIE5vZGU6OmVuc3VyZVJhcmVEYXRhKCkKK3sKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIE5vZGVSYXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpOworICAgIAor
ICAgIEFTU0VSVCghTm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsK
KyAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBjcmVhdGVSYXJlRGF0YSgpOworICAgIE5vZGVSYXJl
RGF0YTo6cmFyZURhdGFNYXAoKS5zZXQodGhpcywgZGF0YSk7CisgICAgbV9oYXNSYXJlRGF0YSA9
IHRydWU7CisgICAgcmV0dXJuIGRhdGE7Cit9CisgICAgCitOb2RlUmFyZURhdGEqIE5vZGU6OmNy
ZWF0ZVJhcmVEYXRhKCkKK3sKKyAgICByZXR1cm4gbmV3IE5vZGVSYXJlRGF0YTsKK30KKyAgICAK
K3Nob3J0IE5vZGU6OnRhYkluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEo
KSA/IHJhcmVEYXRhKCktPnRhYkluZGV4KCkgOiAwOworfQorICAgIAordm9pZCBOb2RlOjpzZXRU
YWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkKK3sKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRU
YWJJbmRleChpKTsKK30KKwogU3RyaW5nIE5vZGU6Om5vZGVWYWx1ZSgpIGNvbnN0CiB7CiAgIHJl
dHVybiBTdHJpbmcoKTsKQEAgLTI0MCwyMiArMjY4LDEzIEBAIHZvaWQgTm9kZTo6c2V0Tm9kZVZh
bHVlKGNvbnN0IFN0cmluZyYgLyoKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Y2hpbGRO
b2RlcygpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykgewotICAgICAgICBtX25vZGVMaXN0cy5z
ZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSBlbnN1
cmVSYXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0
YS0+c2V0Tm9kZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2Rl
TGlzdHNOb2RlRGF0YSkpOwogICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIENoaWxkTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCAmbV9ub2Rl
TGlzdHMtPm1fY2hpbGROb2RlTGlzdENhY2hlcyk7Ci19Ci0KLU5vZGUqIE5vZGU6OnZpcnR1YWxG
aXJzdENoaWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6dmly
dHVhbExhc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIENoaWxk
Tm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCAmZGF0YS0+bm9kZUxpc3RzKCktPm1fY2hpbGROb2RlTGlz
dENhY2hlcyk7CiB9CiAKIGJvb2wgTm9kZTo6dmlydHVhbEhhc1RhZ05hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0CkBAIC00NjMsMTUgKzQ4MiwyOCBAQCBib29sIE5vZGU6OmNhbkxhenlB
dHRhY2goKQogewogICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSB0aGlzOwogfQor
ICAgIAordm9pZCBOb2RlOjpzZXRGb2N1cyhib29sIGIpCit7IAorICAgIGVuc3VyZVJhcmVEYXRh
KCktPm1fZm9jdXNlZCA9IGI7Cit9CiAKK2Jvb2wgTm9kZTo6cmFyZURhdGFGb2N1c2VkKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CisgICAgcmV0dXJuIHJhcmVEYXRhKCkt
Pm1fZm9jdXNlZDsKK30KKyAgICAKIGJvb2wgTm9kZTo6aXNGb2N1c2FibGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRseTsKKyAgICBpZihoYXNSYXJlRGF0YSgp
KQorICAgICAgICByZXR1cm4gcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE5vZGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5
Ym9hcmRFdmVudCopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkgJiYgbV90YWJJ
bmRleCA+PSAwOworICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIHRhYkluZGV4KCkgPj0gMDsK
IH0KIAogYm9vbCBOb2RlOjppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKQEAgLTQ5MCwyNSArNTIy
LDI4IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAKIHZvaWQgTm9kZTo6cmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQogewotICAgIGlmICgh
bV9ub2RlTGlzdHMpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2Rl
RGF0YSk7CisgICAgTm9kZVJhcmVEYXRhICpkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKyAgICBp
ZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhzdGQ6
OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0gZWxzZSBpZiAoIW1f
ZG9jdW1lbnQtPmhhc05vZGVMaXN0Q2FjaGVzKCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZW4ndCBi
ZWVuIHJlY2VpdmluZyBub3RpZmljYXRpb25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJl
ZCBsaXN0cywgc28gdGhlIGNhY2hlIGlzIGludmFsaWQgbm93LgotICAgICAgICBtX25vZGVMaXN0
cy0+aW52YWxpZGF0ZUNhY2hlcygpOworICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxp
ZGF0ZUNhY2hlcygpOwogICAgIH0KIAogICAgIGlmIChsaXN0LT5oYXNPd25DYWNoZXMoKSkKLSAg
ICAgICAgbV9ub2RlTGlzdHMtPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKKyAgICAgICAg
ZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKIH0KIAogdm9p
ZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkK
IHsKLSAgICBBU1NFUlQobV9ub2RlTGlzdHMpOworICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKKyAg
ICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwogICAgIGlmIChsaXN0LT5oYXNPd25D
YWNoZXMoKSkgewotICAgICAgICBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMucmVtb3Zl
KGxpc3QpOwotICAgICAgICBpZiAobV9ub2RlTGlzdHMtPmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICAgICAgTm9kZVJhcmVEYXRhICpkYXRhID0gcmFy
ZURhdGEoKTsKKyAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLnJl
bW92ZShsaXN0KTsKKyAgICAgICAgaWYgKGRhdGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIGRhdGEtPmNsZWFyTm9kZUxpc3RzKCk7CiAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTYsMTMg
KzU1MSwxNiBAQCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluCiAKIHZv
aWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKLSAgICBp
ZiAoIW1fbm9kZUxpc3RzKQorICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5u
b2RlTGlzdHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ub2RlTGlzdHMtPmludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CisgICAgZGF0YS0+bm9kZUxpc3RzKCkt
PmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAKLSAgICBpZiAobV9u
b2RlTGlzdHMtPmlzRW1wdHkoKSkgewotICAgICAgICBtX25vZGVMaXN0cy5jbGVhcigpOworICAg
IGlmIChkYXRhLT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRhdGEtPmNsZWFy
Tm9kZUxpc3RzKCk7CiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsK
ICAgICB9CiB9CkBAIC01MzUsMTcgKzU3MywyMCBAQCB2b2lkIE5vZGU6Om5vdGlmeU5vZGVMaXN0
c0F0dHJpYnV0ZUNoYW5nCiAKIHZvaWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNDaGlsZHJl
bkNoYW5nZWQoKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpCisgICAgaWYgKCFoYXNSYXJlRGF0
YSgpKQorICAgICAgICByZXR1cm47CisgICAgTm9kZVJhcmVEYXRhICpkYXRhID0gcmFyZURhdGEo
KTsKKyAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X25vZGVMaXN0cy0+aW52YWxpZGF0ZUNhY2hlcygpOworICAgIGRhdGEtPm5vZGVMaXN0cygpLT5p
bnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6
Oml0ZXJhdG9yIGVuZCA9IG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsKLSAg
ICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IG1fbm9k
ZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQorICAgIE5v
ZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5kID0gZGF0YS0+bm9kZUxp
c3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmVuZCgpOworICAgIGZvciAoTm9kZUxpc3RzTm9kZURh
dGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBpID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNX
aXRoQ2FjaGVzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCiAgICAgICAgICgqaSktPmludmFsaWRh
dGVDYWNoZSgpOwogCi0gICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAg
bV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCktPmlzRW1wdHko
KSkgeworICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICBkb2N1bWVudCgp
LT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgfQogfQpAQCAtNTU2LDE2ICs1OTcsNiBAQCB2
b2lkIE5vZGU6Om5vdGlmeU5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlCiAgICAgICAgIG4tPm5vdGlm
eUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiB9CiAKLXVuc2lnbmVkIE5vZGU6OmNo
aWxkTm9kZUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSAqTm9kZTo6
Y2hpbGROb2RlKHVuc2lnbmVkIC8qaW5kZXgqLykgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0K
LQogTm9kZSAqTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlICpzdGF5V2l0aGluKSBj
b25zdAogewogICAgIGlmIChmaXJzdENoaWxkKCkpCkBAIC0xMTk4LDEyICsxMjI5LDEzIEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKIAogUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50TmFtZSkK
IHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcg
Tm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IGVuc3VyZVJhcmVE
YXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXRO
b2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05v
ZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9
CiAKLSAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IG1fbm9kZUxpc3RzLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5h
bWUsIDApOworICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwg
Ym9vbD4gcmVzdWx0ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFk
ZChlbGVtZW50TmFtZSwgMCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJlc3Vs
dC5maXJzdC0+c2Vjb25kID0gbmV3IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOwogICAgIApAQCAt
MTIxMiwxMiArMTI0NCwxMyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50
c0J5CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
Y29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsKLSAg
ICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9kZVJh
cmVEYXRhICpkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEtPm5vZGVMaXN0
cygpKSB7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0
c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9jdW1lbnQoKS0+
YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6
OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9ub2RlTGlzdHMtPm1fY2xhc3NO
b2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywgMCk7CisgICAgcGFpcjxOb2RlTGlzdHNOb2Rl
RGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBkYXRhLT5ub2RlTGlzdHMo
KS0+bV9jbGFzc05vZGVMaXN0Q2FjaGVzLmFkZChjbGFzc05hbWVzLCAwKTsKICAgICBpZiAocmVz
dWx0LnNlY29uZCkKICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBuZXcgRHluYW1pY05v
ZGVMaXN0OjpDYWNoZXM7CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzNjgwMykKKysrIFdlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsNyBAQCBjbGFzcyBSZW5kZXJBcmVu
YTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3RyaW5n
QnVpbGRlcjsKLQotc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhOworY2xhc3MgTm9kZVJhcmVEYXRh
OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC05OSw3ICs5OCw3IEBAIHB1Ymxp
YzoKICAgICBlbnVtIFN0eWxlQ2hhbmdlIHsgTm9DaGFuZ2UsIE5vSW5oZXJpdCwgSW5oZXJpdCwg
RGV0YWNoLCBGb3JjZSB9OyAgICAKICAgICBzdGF0aWMgU3R5bGVDaGFuZ2UgZGlmZihSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKik7CiAKLSAgICBOb2RlKERvY3VtZW50KiwgYm9vbCBpc0VsZW1l
bnQgPSBmYWxzZSk7CisgICAgTm9kZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2Us
IGJvb2wgaXNDb250YWluZXIgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+Tm9kZSgpOwogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCkBAIC0xMTQsOCArMTEzLDggQEAg
cHVibGljOgogICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
dmlvdXM7IH0KICAgICBOb2RlKiBuZXh0U2libGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsg
fQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlTGlzdD4gY2hpbGROb2RlcygpOwotICAgIE5v
ZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsRmlyc3RDaGlsZCgpOyB9Ci0g
ICAgTm9kZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbExhc3RDaGlsZCgpOyB9
CisgICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIGlzQ29udGFpbmVyTm9kZSgp
ID8gY29udGFpbmVyRmlyc3RDaGlsZCgpIDogMDsgfQorICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIGlzQ29udGFpbmVyTm9kZSgpID8gY29udGFpbmVyTGFzdENoaWxkKCkgOiAw
OyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IE5hbWVkQXR0ck1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCkBAIC0xNTYsNiArMTU1LDcgQEAg
cHVibGljOgogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKIAogICAgIGJv
b2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbGVtZW50OyB9CisgICAgYm9v
bCBpc0NvbnRhaW5lck5vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29udGFpbmVyOyB9CiAgICAg
dmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAj
aWYgRU5BQkxFKFNWRykKQEAgLTI1MCw3ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbkFj
dGl2ZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9pbkFjdGl2ZUNoYWluOyB9CiAgICAgYm9vbCBp
bkRldGFjaCgpIGNvbnN0IHsgcmV0dXJuIG1faW5EZXRhY2g7IH0KICAgICBib29sIGhvdmVyZWQo
KSBjb25zdCB7IHJldHVybiBtX2hvdmVyZWQ7IH0KLSAgICBib29sIGZvY3VzZWQoKSBjb25zdCB7
IHJldHVybiBtX2ZvY3VzZWQ7IH0KKyAgICBib29sIGZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBo
YXNSYXJlRGF0YSgpID8gcmFyZURhdGFGb2N1c2VkKCkgOiBmYWxzZTsgfQogICAgIGJvb2wgYXR0
YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2F0dGFjaGVkOyB9CiAgICAgdm9pZCBzZXRBdHRhY2hl
ZChib29sIGIgPSB0cnVlKSB7IG1fYXR0YWNoZWQgPSBiOyB9CiAgICAgYm9vbCBjaGFuZ2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZUNoYW5nZSAhPSBOb1N0eWxlQ2hhbmdlOyB9CkBAIC0yNzEs
MTEgKzI3MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXp5QXR0YWNoKCk7CiAgICAgdmlydHVh
bCBib29sIGNhbkxhenlBdHRhY2goKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29s
IGIgPSB0cnVlKSB7IG1fZm9jdXNlZCA9IGI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
Ym9vbCBiID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sIGIgPSB0cnVl
LCBib29sIHBhdXNlPWZhbHNlKSB7IG1fYWN0aXZlID0gYjsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRIb3ZlcmVkKGJvb2wgYiA9IHRydWUpIHsgbV9ob3ZlcmVkID0gYjsgfQogCi0gICAgdmlydHVh
bCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0KKyAgICB2aXJ0
dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBXaGV0aGVyIHRo
aXMgbm9kZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCkBAIC0zMjQsOSArMzI0LDkg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkgY29uc3Qg
eyByZXR1cm4gbm9kZVR5cGUoKSA9PSBFTlRJVFlfUkVGRVJFTkNFX05PREU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBO
b2RlKiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBj
aGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlIHQpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5zaWdu
ZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNv
bnRhaW5lckNoaWxkTm9kZUNvdW50KCkgOiAwOyB9CisgICAgTm9kZSogY2hpbGROb2RlKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckNo
aWxkTm9kZShpbmRleCkgOiAwOyB9CiAKICAgICAvKioKICAgICAgKiBEb2VzIGEgcHJlLW9yZGVy
IHRyYXZlcnNhbCBvZiB0aGUgdHJlZSB0byBmaW5kIHRoZSBub2RlIG5leHQgbm9kZSBhZnRlciB0
aGlzIG9uZS4gVGhpcyB1c2VzIHRoZSBzYW1lIG9yZGVyIHRoYXQKQEAgLTQ5NywxMyArNDk3LDIz
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpIHsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0
cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IH0KLSAgICB2b2lkIHNldFRhYkluZGV4RXhw
bGljaXRseShzaG9ydCBpKQotICAgIHsgCi0gICAgICAgIG1fdGFiSW5kZXggPSBpOyAKLSAgICAg
ICAgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgPSB0cnVlOwotICAgIH0KKyAgICB2b2lkIHNldFRh
YkluZGV4RXhwbGljaXRseShzaG9ydCBpKTsKKyAgICAKKyAgICBib29sIGhhc1JhcmVEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YTsgfQorICAgIAorICAgIE5vZGVSYXJlRGF0YSog
cmFyZURhdGEoKTsKKyAgICBjb25zdCBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7Cisg
ICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOworICAgIHZpcnR1YWwgTm9kZVJhcmVE
YXRhKiBjcmVhdGVSYXJlRGF0YSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSGFz
VGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgTm9k
ZSogY29udGFpbmVyQ2hpbGROb2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIGNvbnN0OworICAgIE5vZGUqIGNvbnRhaW5lckZp
cnN0Q2hpbGQoKSBjb25zdDsKKyAgICBOb2RlKiBjb250YWluZXJMYXN0Q2hpbGQoKSBjb25zdDsK
KyAgICBib29sIHJhcmVEYXRhRm9jdXNlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyU3R5
bGUqIG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKIAogICAgIERvY1B0cjxEb2N1bWVu
dD4gbV9kb2N1bWVudDsKQEAgLTUxMSwxMCArNTIxLDYgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBt
X25leHQ7CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogCi0gICAgT3duUHRyPE5vZGVM
aXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKLQotICAgIHNob3J0IG1fdGFiSW5kZXg7Ci0KICAg
ICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUgdGhhbiAxNiBiaXRzIGhlcmUgLS0gYWRk
aW5nIG1vcmUgd291bGQgaW5jcmVhc2UgdGhlIHNpemUgb2YgYWxsIE5vZGVzCiAKICAgICB1bnNp
Z25lZCBtX3N0eWxlQ2hhbmdlIDogMjsKQEAgLTUyNCwyNSArNTMwLDIwIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2hhc0NoYW5nZWRDaGlsZCA6IDE7CiAgICAgYm9vbCBtX2luRG9jdW1lbnQgOiAx
OwogICAgIGJvb2wgbV9pc0xpbmsgOiAxOwotICAgIGJvb2wgbV9mb2N1c2VkIDogMTsKICAgICBi
b29sIG1fYWN0aXZlIDogMTsKICAgICBib29sIG1faG92ZXJlZCA6IDE7CiAgICAgYm9vbCBtX2lu
QWN0aXZlQ2hhaW4gOiAxOwogICAgIGJvb2wgbV9pbkRldGFjaCA6IDE7CiAgICAgYm9vbCBtX2lu
U3VidHJlZU1hcmsgOiAxOwotICAgIGJvb2wgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgOiAxOwor
ICAgIGJvb2wgbV9oYXNSYXJlRGF0YSA6IDE7CiAgICAgY29uc3QgYm9vbCBtX2lzRWxlbWVudCA6
IDE7Ci0gICAgLy8gbm8gYml0cyBsZWZ0CisgICAgY29uc3QgYm9vbCBtX2lzQ29udGFpbmVyIDog
MTsKKyAgICAvLyBubyBiaXRzIGxlZnQgICAKIAogICAgIEVsZW1lbnQqIGFuY2VzdG9yRWxlbWVu
dCgpIGNvbnN0OwogCiAgICAgdm9pZCBhcHBlbmRUZXh0Q29udGVudChib29sIGNvbnZlcnRCUnNU
b05ld2xpbmVzLCBTdHJpbmdCdWlsZGVyJikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5vZGUqIHZp
cnR1YWxGaXJzdENoaWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlKiB2aXJ0dWFsTGFzdENo
aWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHZpcnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBjb25zdDsKIH07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2lmbmRlZiBOREVC
VUcKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKyNpZm5kZWYgTm9kZVJhcmVE
YXRhX2gKKyNkZWZpbmUgTm9kZVJhcmVEYXRhX2gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlICJEeW5hbWljTm9kZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
Tm9kZUxpc3RzTm9kZURhdGEgeworICAgIHR5cGVkZWYgSGFzaFNldDxEeW5hbWljTm9kZUxpc3Qq
PiBOb2RlTGlzdFNldDsKKyAgICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0aENhY2hlczsKKyAgICAK
KyAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7CisgICAg
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqPiBD
YWNoZU1hcDsKKyAgICBDYWNoZU1hcCBtX2NsYXNzTm9kZUxpc3RDYWNoZXM7CisgICAgQ2FjaGVN
YXAgbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgCisgICAgfk5vZGVMaXN0c05vZGVEYXRhKCkK
KyAgICB7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsYXNzTm9kZUxpc3RDYWNoZXMpOwor
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9uYW1lTm9kZUxpc3RDYWNoZXMpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVDYWNo
ZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Cit9
OworICAgIAorY2xhc3MgTm9kZVJhcmVEYXRhIHsKK3B1YmxpYzogICAgCisgICAgTm9kZVJhcmVE
YXRhKCkKKyAgICAgICAgOiBtX2ZvY3VzZWQoZmFsc2UpCisgICAgICAgICwgbV90YWJJbmRleCgw
KQorICAgICAgICAsIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5KGZhbHNlKQorICAgICAgICAsIG1f
bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBOb2RlKiwgTm9kZVJhcmVEYXRhKj4g
Tm9kZVJhcmVEYXRhTWFwOworICAgIAorICAgIHN0YXRpYyBOb2RlUmFyZURhdGFNYXAmIHJhcmVE
YXRhTWFwKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBOb2RlUmFyZURhdGFNYXAqIGRhdGFNYXAg
PSBuZXcgTm9kZVJhcmVEYXRhTWFwOworICAgICAgICByZXR1cm4gKmRhdGFNYXA7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBOb2RlUmFyZURhdGEqIHJhcmVEYXRhRnJvbU1hcChjb25zdCBOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJhcmVEYXRhTWFwKCkuZ2V0KG5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVh
cigpOyB9CisgICAgdm9pZCBzZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2Rl
RGF0YT4gbGlzdHMpIHsgbV9ub2RlTGlzdHMuc2V0KGxpc3RzLnJlbGVhc2UoKSk7IH0KKyAgICBO
b2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHMu
Z2V0KCk7IH0KKyAgICAKKyAgICBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
SW5kZXg7IH0KKyAgICB2b2lkIHNldFRhYkluZGV4KHNob3J0IGluZGV4KSB7IG1fdGFiSW5kZXgg
PSBpbmRleDsgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgPSB0cnVlOyB9CisgICAgYm9vbCB0YWJJ
bmRleFNldEV4cGxpY2l0bHkoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRs
eTsgfQorICAgICAgICAKKyAgICBib29sIG1fZm9jdXNlZCA6IDE7CisKK3ByaXZhdGU6CisgICAg
T3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKKyAgICBzaG9ydCBtX3RhYklu
ZGV4OworICAgIGJvb2wgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgOiAxOworcHVibGljOgorICAg
IGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7IC8v
Zm9yIEVsZW1lbnRSYXJlRGF0YQorfTsKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcAkocmV2aXNpb24gMzY4MDMpCisrKyBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1
ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiAzNjgwMykKKysrIFdl
YkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpZiBFTkFCTEUoWFBBVEgpCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiQ29udGFp
bmVyTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgWFBhdGggewo=
</data>
<flag name="review"
          id="10637"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23828</attachid>
            <date>2008-09-25 16:56:14 -0700</date>
            <delta_ts>2008-09-25 16:58:16 -0700</delta_ts>
            <desc>Addresses review comments</desc>
            <filename>noderaredata2.txt</filename>
            <type>text/plain</type>
            <size>44466</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjkxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDgtMDktMjUgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTgwCisg
ICAgICAgIFNwbGl0IG9mZiB1bmNvbW1vbmx5IHVzZWQgZGF0YSBmcm9tIE5vZGUgc2ltaWxhciB0
byBFbGVtZW50UmFyZURhdGEKKyAgICAgICAgCisgICAgICAgIFNhdmVzIGFuIE93blB0ciBhbmQg
YSBzaG9ydCBvbiBOb2RlLCBhcyB3ZWxsIGFzIHByb3ZpZGluZyByb29tIGZvciBhbiBpc0NvbnRh
aW5lciBiaXQsCisgICAgICAgIHdoaWNoIGluIHR1cm4gYWxsb3dzIGlubGluaW5nIGZpcnN0Q2hp
bGQoKSwgbGFzdENoaWxkKCksIGNoaWxkTm9kZUNvdW50KCksIGFuZCBjaGlsZE5vZGUoKQorICAg
ICAgICBmb3IgYSA1LTEwKyUgcGVyZm9ybWFuY2Ugd2luIG9uIFNsaWNrU3BlZWQgYW5kIGFzc29y
dGVkIHNwZWVkdXBzIG9uIG90aGVyIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4
cDogCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNwcDogSW5jbHVkZSBDb250YWluZXJOb2RlIHRvIHBpY2sg
dXAgaXRzIGRlZmluaXRpb25zIGZvciBjaGlsZE5vZGVDb3VudCgpLCBldGMuLi4KKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IFNldCBpc0NvbnRhaW5lciB0byB0cnVlCisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKToKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5oOiBUaGVzZSBOb2RlIGlubGluZXMgYXJlIGhlcmUgdG8gYXZvaWQgaW5j
bHVkaW5nIENvbnRhaW5lck5vZGUuaCBpbiBOb2RlLmgKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KTogVXNlIENvbnRhaW5lck5vZGUncyBkZWZpbml0aW9u
LCBoYXZpbmcgcHJvdmVkIHRoYXQgdGhlIE5vZGUgaXMgYSBjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjb250YWluZXJGaXJzdENoaWxkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNvbnRhaW5lckxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OiBNb3N0IG9mIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIG1vdmluZyBFbGVtZW50UmFyZURhdGEgdG8g
RWxlbWVudFJhcmVEYXRhLmggYW5kIE5vZGVSYXJlRGF0YS5oCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpFbGVtZW50KTogCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVSYXJlRGF0YSk6IFJlbmFtZWQgZnJvbSBjcmVhdGVSYXJlRGF0YQor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3JlYXRlUmFyZURhdGEpOiBVc2VkIGJ5IGVuc3Vy
ZVJhcmVEYXRhIHRvIGdldCB0aGUgY29ycmVjdCByYXJlRGF0YSB0eXBlCisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjphdHRhY2gpOiBDaGVjayBoYXNSYXJlRGF0YSByYXRoZXIgdGhhbiBudWxs
LWNoZWNraW5nIHJhcmVEYXRhKCkKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6IGRpdHRvCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjptaW5pbXVtU2l6ZUZvclJlc2l6aW5nKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUpOiBkaXR0bworICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOiBBZGRlZDsgZXZlcnl0aGluZyBj
b3BpZWQgZnJvbSBFbGVtZW50LmNwcAorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE1pbmltdW1T
aXplRm9yUmVzaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVt
ZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUpOiBQYXNzIHRoZSBp
c0NvbnRhaW5lciBmbGFnIHVwIHRoZSBjaGFpbgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6On5Ob2RlKTogcmFyZURhdGEgY2xlYW51cCBj
b2RlIG1vdmVkIGZyb20gRWxlbWVudCBhbmQgY2hhbmdlZCB0byB1c2UgaGFzUmFyZURhdGEKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmVuc3VyZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJhcmVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRhYkluZGV4KTogbm9uemVybyB0YWIgaW5kZXhl
cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRUYWJJbmRl
eEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2Rlcyk6IE5vZGVM
aXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRGb2N1
cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyYXJlRGF0YUZvY3VzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6aXNGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNL
ZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFt
aWNOb2RlTGlzdCk6IE5vZGVMaXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hh
bmdlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKTog
ZGl0dG8KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Zmly
c3RDaGlsZCk6IFVzZSBpc0NvbnRhaW5lck5vZGUoKSB0byBkZXZpcnR1YWxpemUKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6Omxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojppc0NvbnRhaW5lck5vZGUpOiBUYWtlIGFkdmFudGFnZSBvZiBhIG5ld2x5IGZyZWVkIGJpdCB0
byBzdG9yZSB3aGV0aGVyIHdlJ3JlIGEgY29udGFpbmVyCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojpmb2N1c2VkKTogZm9jdXMgaXMgaW4gcmFyZURhdGEgaWYgc2V0CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjaGlsZFR5cGVBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNoaWxk
Tm9kZUNvdW50KTogVXNlIGlzQ29udGFpbmVyTm9kZSgpIHRvIGRldmlydHVhbGl6ZQorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2RlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6Omhhc1JhcmVEYXRhKTogVXNlIGFub3RoZXIgbmV3bHkgZnJlZWQgYml0IHRvIHN0b3JlIHdo
ZXRoZXIgd2UgaGF2ZSByYXJlIGRhdGE7IGF2b2lkcyBkb2luZyBoYXNoIGxvb2t1cHMgaW4gdGhl
IGNvbW1vbiBjYXNlCisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOiBBZGRlZC4gTW9zdCBv
ZiB0aGlzIGlzIGp1c3QgcHJvcGVydGllcyBtb3ZlZCBmcm9tIE5vZGUKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0c05vZGVEYXRhOjp+Tm9kZUxpc3RzTm9kZURhdGEpOiBNb3ZlZCBmcm9tIE5v
ZGUuY3BwIHNpbmNlIHdlIE5vZGVSYXJlRGF0YSBuZWVkcyB0byBwdXQgdGhlbSBpbiBhIEhhc2hU
YWJsZSA6KAorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6OmNsZWFyTm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
YXJlRGF0YTo6c2V0Tm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6dGFiSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpzZXRUYWJJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnRhYkluZGV4U2V0RXhwbGljaXRseSk6CisgICAgICAgICog
ZG9tL1RyZWVXYWxrZXIuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMg
ZGVmaW5pdGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorICAgICAgICAqIHhtbC9Y
UGF0aFV0aWwuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMgZGVmaW5p
dGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorCiAyMDA4LTA5LTI1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM2OTEyKQor
KysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsNiArNzIy
LDcgQEAgX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDVpbWFnZUV2CiBfX1pOSzdXZWJDb3Jl
MTNIaXRUZXN0UmVzdWx0NXRpdGxlRXYKIF9fWk5LN1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQ5aW1h
Z2VSZWN0RXYKIF9fWk5LN1dlYkNvcmUxM1Jlc291cmNlRXJyb3JjdlA3TlNFcnJvckV2CitfX1pO
SzdXZWJDb3JlMTNDb250YWluZXJOb2RlMTRjaGlsZE5vZGVDb3VudEV2CiBfX1pOSzdXZWJDb3Jl
MTREb2N1bWVudExvYWRlcjEwcmVxdWVzdFVSTEV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExv
YWRlcjExZnJhbWVMb2FkZXJFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMXN1YnJl
c291cmNlRVJLTlNfNEtVUkxFCkBAIC03NjgsNiArNzY5LDcgQEAgX19aTks3V2ViQ29yZTRLVVJM
Y3ZQNU5TVVJMRXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8KIF9f
Wk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dURjZWZWN0b3JJTlNfNEtV
UkxFTG0wRUVFCiBfX1pOSzdXZWJDb3JlNE5vZGU5bm9kZUluZGV4RXYKK19fWk5LN1dlYkNvcmUx
M0NvbnRhaW5lck5vZGU5Y2hpbGROb2RlRWoKIF9fWk5LN1dlYkNvcmU0UGFnZTEwcGx1Z2luRGF0
YUV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1v
ZGVFdgogX19aTks3V2ViQ29yZTRQYWdlOWdyb3VwTmFtZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjY1
LDkgKzY2NSwxMSBAQAogCQk1REQwQTM4MTBEOUFDNjA3MDA1NkMxMjIgLyogRE9NRWxlbWVudFRp
bWVDb250cm9sLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRp
bWVDb250cm9sLmggKi87IH07CiAJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVs
ZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87IH07
CiAJCTVERkU4RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2NDIw
MEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uaCAqLzsgfTsKKwkJNjMxODlBRTMwRTgzQTMzMzAw
MDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjMxODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTYzNDU5QzY1MEU3OUNE
MzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0NTlDNjMwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNl
bGVjdG9yLmggKi87IH07CiAJCTYzNDU5QzY2MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxl
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
MzQ1OUM2NDBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwICovOyB9OwogCQk2
M0Q3QjMyRDBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2M0Q3QjMyQzBFNzhDRDNGMDBGNzYx
N0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi87IH07CisJCTYzRjVENEY3MEU4QzRCNzEwMEMwQkQw
NCAvKiBFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEu
aCAqLzsgfTsKIAkJNjUwRjUzREMwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MEY1M0RCMDlEMTVE
REEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggKi87IH07CiAJCTY1MEY1M0REMDlEMTVEREYwMEM5
QjBDOCAvKiBDU1NHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAq
LzsgfTsKIAkJNjUwRkJGMkEwRDlBRjA0NzAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTBGQkYyNzBE
OUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLzsgfTsKQEAgLTUzNjgsOCAr
NTM3MCwxMCBAQAogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZp
ZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5J
bmZvU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzMTg5QUUyMEU4M0EzMzMwMDAx
MkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Tm9kZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzNDU5QzYzMEU3
OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NOdGhTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2MzQ1OUM2NDBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTTnRoU2VsZWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVu
dFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJl
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBG
NzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5vZGVSZW5kZXJTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBG
NTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTBGQkYyNzBEOUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0hLZXJuRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzYyOCw2ICsxMzYzMiw4IEBACiAJCUY1MjNEMzI0
MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEu
aCAqLywKKwkJCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmgg
Ki8sCiAJCQkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnhtbDIu
Y3BwICovLAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUu
aCAqLywKIAkJCQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCkBAIC0x
NTE2Myw2ICsxNTE2OSw4IEBACiAJCQkJOTNDQ0YwMjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmln
YXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzQzMEFEQkE1REUwMEE0NTU0
RCAvKiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQx
MTVCNTIwOUY4NEI3MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzRDdC
MzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5v
ZGVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTkyOCw2ICsxNTkzNiw3IEBACiAJCQkJ
QThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhBNDhBN0EwRTg2Q0Y4QzAwRTIyNUREIC8qIEV2ZW50VGFyZ2V0U1ZHRWxlbWVudEluc3Rh
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzBCM0JFMjBFODg0OTIxMDA5NzcwQzUgLyogSlND
YW52YXNQaXhlbEFycmF5Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKKwkJCQk2M0Y1RDRGNzBFOEM0
QjcxMDBDMEJEMDQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdl
YkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAzNjkxMikKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9k
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogCi0jaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTm9k
ZUNhbGxiYWNrUXVldWUqIHNfcG9zdEF0dGFjaENhCiBzdGF0aWMgc2l6ZV90IHNfYXR0YWNoRGVw
dGggPSAwOwogCiBDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2MsIGJv
b2wgaXNFbGVtZW50KQotICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50KQorICAg
IDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50LCB0cnVlKQogICAgICwgbV9maXJzdENo
aWxkKDApCiAgICAgLCBtX2xhc3RDaGlsZCgwKQogewpAQCAtNjcsMTYgKzY3LDYgQEAgQ29udGFp
bmVyTm9kZTo6fkNvbnRhaW5lck5vZGUoKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAK
LU5vZGUqIENvbnRhaW5lck5vZGU6OnZpcnR1YWxGaXJzdENoaWxkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9maXJzdENoaWxkOwotfQotCi1Ob2RlKiBDb250YWluZXJOb2RlOjp2aXJ0dWFsTGFz
dENoaWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXN0Q2hpbGQ7Ci19Ci0KIGJvb2wgQ29u
dGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUq
IHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQogewog
ICAgIC8vIENoZWNrIHRoYXQgdGhpcyBub2RlIGlzIG5vdCAiZmxvYXRpbmciLgpJbmRleDogV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuaAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShi
b29sIGFjdGl2ZSA9IHRydWUsIGJvb2wgcGF1c2UgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lk
IHNldEhvdmVyZWQoYm9vbCA9IHRydWUpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2Rl
Q291bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisgICAgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKQEAgLTg4LDkgKzg4LDYgQEAgcHJvdGVjdGVkOgogICAgIAogcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBkaXNwYXRjaFBvc3RBdHRhY2hDYWxsYmFja3MoKTsKLQotICAgIHZpcnR1YWwg
Tm9kZSogdmlydHVhbEZpcnN0Q2hpbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGUqIHZpcnR1
YWxMYXN0Q2hpbGQoKSBjb25zdDsKICAgICAKICAgICBib29sIGdldFVwcGVyTGVmdENvcm5lcihp
bnQmIHgsIGludCYgeSkgY29uc3Q7CiAgICAgYm9vbCBnZXRMb3dlclJpZ2h0Q29ybmVyKGludCYg
eCwgaW50JiB5KSBjb25zdDsKQEAgLTk4LDYgKzk1LDI2IEBAIHByaXZhdGU6CiAgICAgTm9kZSog
bV9maXJzdENoaWxkOwogICAgIE5vZGUqIG1fbGFzdENoaWxkOwogfTsKKyAgICAKK2lubGluZSB1
bnNpZ25lZCBOb2RlOjpjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Y2hpbGROb2RlQ291
bnQoKTsKK30KKworaW5saW5lIE5vZGUgKk5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29udGFpbmVy
Tm9kZSo+KHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOworfQorCitpbmxpbmUgTm9kZSogTm9kZTo6
Y29udGFpbmVyRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Zmlyc3RDaGlsZCgpOworfQorCitpbmxpbmUgTm9k
ZSogTm9kZTo6Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29udGFpbmVyTm9kZSo+KHRoaXMpLT5sYXN0Q2hpbGQoKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzY5MTIpCisrKyBX
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVk
aXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtMzksNjIgKzQwLDE5IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
TmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgot
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgWE1MTmFtZXM7Ci0KLWNs
YXNzIEVsZW1lbnRSYXJlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudFJhcmVEYXRhKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50Kik7Ci0KLSAgICBJbnRT
aXplIG1fbWluaW11bVNpemVGb3JSZXNpemluZzsKLSAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRl
ZFN0eWxlOwotICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0
dGFjaDsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50KiwgRWxlbWVudFJhcmVE
YXRhKj4gRWxlbWVudFJhcmVEYXRhTWFwOwotCi1zdGF0aWMgRWxlbWVudFJhcmVEYXRhTWFwJiBy
YXJlRGF0YU1hcCgpCi17Ci0gICAgc3RhdGljIEVsZW1lbnRSYXJlRGF0YU1hcCogZGF0YU1hcCA9
IG5ldyBFbGVtZW50UmFyZURhdGFNYXA7Ci0gICAgcmV0dXJuICpkYXRhTWFwOwotfQotCi1zdGF0
aWMgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YUZyb21NYXAoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKLXsKLSAgICByZXR1cm4gcmFyZURhdGFNYXAoKS5nZXQoZWxlbWVudCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCi17Ci0gICAg
cmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7Ci19Ci0KLWlubGluZSBFbGVtZW50UmFy
ZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9taW5pbXVt
U2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCi0gICAgLCBt
X2NvbXB1dGVkU3R5bGUoMCkKLSAgICAsIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29u
QWZ0ZXJBdHRhY2goZmFsc2UpCi17Ci19Ci0KLXZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIW1fY29tcHV0ZWRTdHls
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxlbWVudC0+
ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9jb21wdXRlZFN0eWxlID0gMDsKLX0K
LQorICAgIAogRWxlbWVudDo6RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQogICAgIDogQ29udGFpbmVyTm9kZShkb2MsIHRydWUpCiAgICAgLCBtX3Rh
Z05hbWUodGFnTmFtZSkKQEAgLTEwNSw3ICs2Myw2IEBAIEVsZW1lbnQ6OkVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKICAgICAsIG1fc3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXMoZmFs
c2UpCiAjZW5kaWYKICAgICAsIG1fcGFyc2luZ0NoaWxkcmVuRmluaXNoZWQodHJ1ZSkKLSAgICAs
IG1faGFzUmFyZURhdGEoZmFsc2UpCiB7CiB9CiAKQEAgLTExMywzOSArNzAsMjkgQEAgRWxlbWVu
dDo6fkVsZW1lbnQoKQogewogICAgIGlmIChuYW1lZEF0dHJNYXApCiAgICAgICAgIG5hbWVkQXR0
ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKLQotICAgIGlmICghaGFzUmFyZURhdGEoKSkKLSAg
ICAgICAgQVNTRVJUKCFyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgRWxlbWVudFJhcmVEYXRhTWFwJiBkYXRhTWFwID0gcmFyZURhdGFNYXAoKTsKLSAg
ICAgICAgRWxlbWVudFJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlz
KTsKLSAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUg
aXQtPnNlY29uZDsKLSAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwotICAgIH0KIH0KIAogaW5s
aW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKQogewotICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gcmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKKyAgICByZXR1cm4gY29u
c3RfY2FzdChyYXJlRGF0YSgpKTsKIH0KLQorICAgIAogaW5saW5lIGNvbnN0IEVsZW1lbnRSYXJl
RGF0YSogRWxlbWVudDo6cmFyZURhdGEoKSBjb25zdAogewotICAgIHJldHVybiBoYXNSYXJlRGF0
YSgpID8gcmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRSYXJlRGF0YSo+KE5vZGVS
YXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpKTsKIH0KLQotRWxlbWVudFJhcmVEYXRhKiBF
bGVtZW50OjpjcmVhdGVSYXJlRGF0YSgpCisgICAgCitpbmxpbmUgRWxlbWVudFJhcmVEYXRhKiBF
bGVtZW50OjplbnN1cmVSYXJlRGF0YSgpCiB7Ci0gICAgaWYgKGhhc1JhcmVEYXRhKCkpCi0gICAg
ICAgIHJldHVybiByYXJlRGF0YU1hcCgpLmdldCh0aGlzKTsKLSAgICBBU1NFUlQoIXJhcmVEYXRh
TWFwKCkuY29udGFpbnModGhpcykpOwotICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IG5ldyBF
bGVtZW50UmFyZURhdGEodGhpcyk7Ci0gICAgcmFyZURhdGFNYXAoKS5zZXQodGhpcywgZGF0YSk7
Ci0gICAgc2V0SGFzUmFyZURhdGEodHJ1ZSk7Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnRSYXJlRGF0YSo+KE5vZGU6OmVuc3VyZVJhcmVEYXRhKCkpOwog
fQotCisgICAgCitOb2RlUmFyZURhdGEqIEVsZW1lbnQ6OmNyZWF0ZVJhcmVEYXRhKCkKK3sKKyAg
ICByZXR1cm4gbmV3IEVsZW1lbnRSYXJlRGF0YSh0aGlzKTsKK30KKyAgICAKIFBhc3NSZWZQdHI8
Tm9kZT4gRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkKIHsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKQEAgLTcxNywxMSArNjY0LDEyIEBAIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkKIHsK
ICAgICBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNo
KCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgpKSB7Ci0gICAgICAg
IGlmIChyZC0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCkgewor
ICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7ICAgCisgICAgICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0
YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNl
VXBkYXRlU29vbkFmdGVyQXR0YWNoKSB7CiAgICAgICAgICAgICBpZiAoaXNGb2N1c2FibGUoKSAm
JiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwotICAgICAgICAgICAgcmQtPm1f
bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKKyAgICAg
ICAgICAgIGRhdGEtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2gg
PSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTcyOSw4ICs2NzcsOCBAQCB2b2lkIEVs
ZW1lbnQ6OmF0dGFjaCgpCiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgY2FuY2VsRm9j
dXNBcHBlYXJhbmNlVXBkYXRlKCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJl
RGF0YSgpKQotICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgIGlmICho
YXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUodGhp
cyk7CiAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CiB9CiAKQEAgLTc0Nyw4ICs2OTUsOCBA
QCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAjZW5kaWYKIAogICAg
IGlmICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkgewotICAgICAgICBpZiAoRWxl
bWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAgICAgICByZC0+cmVzZXRDb21w
dXRlZFN0eWxlKHRoaXMpOworICAgICAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgICAg
IHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAgICB9CiAgICAgaWYgKGhh
c1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7CiAgICAg
ICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+
c3R5bGVGb3JFbGVtZW50KHRoaXMpOwpAQCAtMTE1Niw3ICsxMTA0LDcgQEAgdm9pZCBFbGVtZW50
Ojpmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91cwogICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKTsKIAogICAgIGlmICghaXNG
b2N1c2FibGUoKSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YSgpLT5tX25lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gdHJ1ZTsKKyAgICAgICAgZW5zdXJlUmFyZURh
dGEoKS0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IHRydWU7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtMTIyMiwxNSArMTE3MCwxNCBA
QCBTdHJpbmcgRWxlbWVudDo6dGl0bGUoKSBjb25zdAogCiBJbnRTaXplIEVsZW1lbnQ6Om1pbmlt
dW1TaXplRm9yUmVzaXppbmcoKSBjb25zdAogewotICAgIGNvbnN0IEVsZW1lbnRSYXJlRGF0YSog
cmQgPSByYXJlRGF0YSgpOwotICAgIHJldHVybiByZCA/IHJkLT5tX21pbmltdW1TaXplRm9yUmVz
aXppbmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpOworICAgIHJldHVybiBoYXNS
YXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nIDogZGVmYXVs
dE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRNaW5pbXVt
U2l6ZUZvclJlc2l6aW5nKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHNpemUgPT0g
ZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAmJiAhcmFyZURhdGEoKSkKKyAgICBpZiAo
c2l6ZSA9PSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpICYmICFoYXNSYXJlRGF0YSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgY3JlYXRlUmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZv
clJlc2l6aW5nID0gc2l6ZTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX21pbmltdW1TaXplRm9y
UmVzaXppbmcgPSBzaXplOwogfQogCiBSZW5kZXJTdHlsZSogRWxlbWVudDo6Y29tcHV0ZWRTdHls
ZSgpCkBAIC0xMjQzLDE2ICsxMTkwLDE2IEBAIFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRl
ZFN0eWxlKCkKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQgZmlndXJlIG91dCB3aGVuIHRv
IGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVsZW1lbnRzLgogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBjcmVhdGVSYXJlRGF0YSgpOwot
ICAgIGlmICghcmQtPm1fY29tcHV0ZWRTdHlsZSkKLSAgICAgICAgcmQtPm1fY29tcHV0ZWRTdHls
ZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBh
cmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDApOwotICAgIHJldHVybiByZC0+
bV9jb21wdXRlZFN0eWxlOworICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVE
YXRhKCk7CisgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUpCisgICAgICAgIGRhdGEtPm1f
Y29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVt
ZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDApOworICAg
IHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2FuY2Vs
Rm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIHsKLSAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9
IHJhcmVEYXRhKCkpCi0gICAgICAgIHJkLT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29v
bkFmdGVyQXR0YWNoID0gZmFsc2U7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJh
cmVEYXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBm
YWxzZTsKICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAg
ICBkb2N1bWVudCgpLT5jYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKIH0KSW5kZXg6IFdl
YkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDM2OTEyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsMTMgKzE5Nyw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRD
b3VudCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7
IHJldHVybiBtX2hhc1JhcmVEYXRhOyB9Ci0gICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIg
PSB0cnVlKSB7IG1faGFzUmFyZURhdGEgPSBiOyB9Ci0KLSAgICBFbGVtZW50UmFyZURhdGEqIHJh
cmVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0Owot
ICAgIEVsZW1lbnRSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsKLQogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVT
dHlsZUF0dHJpYnV0ZSgpIGNvbnN0IHt9CkBAIC0yMTksOCArMjEyLDEzIEBAIHByaXZhdGU6CiAK
IHByaXZhdGU6CiAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7CisgICAgdmlydHVhbCBOb2Rl
UmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKCk7CiAKIHByb3RlY3RlZDoKKyAgICBFbGVtZW50UmFy
ZURhdGEqIHJhcmVEYXRhKCk7CisgICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YSgp
IGNvbnN0OworICAgIEVsZW1lbnRSYXJlRGF0YSogZW5zdXJlUmFyZURhdGEoKTsKKyAgICAKICAg
ICBtdXRhYmxlIFJlZlB0cjxOYW1lZEF0dHJNYXA+IG5hbWVkQXR0ck1hcDsKIAogICAgIC8vIFRo
ZXNlIHR3byBiaXRzIGFyZSByZWFsbHkgdXNlZCBieSB0aGUgU3R5bGVkRWxlbWVudCBzdWJjbGFz
cywgYnV0IHRoZXkgYXJlIHB1bGxlZCB1cCBoZXJlIGluIG9yZGVyIHRvIGJlIHNoYXJlZCB3aXRo
IG90aGVyCkBAIC0yMzYsNyArMjM0LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9wYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCA6IDE7Ci0gICAgYm9vbCBtX2hhc1JhcmVEYXRh
IDogMTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjAgQEAKKy8qKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFNtaXRoIDxjYXRmaXNoLm1h
bkBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIEVsZW1lbnRSYXJlRGF0YV9oCisjZGVmaW5lIEVsZW1l
bnRSYXJlRGF0YV9oCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVE
YXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEVsZW1lbnRSYXJlRGF0
YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgeworcHVibGljOgorICAgIEVsZW1lbnRSYXJlRGF0YShF
bGVtZW50Kik7CisgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCopOworICAgIAor
ICAgIEludFNpemUgbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOworICAgIFJlbmRlclN0eWxlKiBt
X2NvbXB1dGVkU3R5bGU7Cit9OworCitpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVG
b3JSZXNpemluZygpCit7CisgICAgcmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7Cit9
CisKK2lubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlKQor
ICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6
aW5nKCkpCisgICAgLCBtX2NvbXB1dGVkU3R5bGUoMCkKK3sKK30KKworaW5saW5lIHZvaWQgRWxl
bWVudFJhcmVEYXRhOjpyZXNldENvbXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBpZiAoIW1fY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tcHV0ZWRT
dHlsZS0+ZGVyZWYoZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgbV9j
b21wdXRlZFN0eWxlID0gMDsKK30KKworfQorI2VuZGlmIEVsZW1lbnRSYXJlRGF0YV9oCkluZGV4
OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDM2OTEyKQorKysgV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKICAgICAKIHN0YXRpYyBIYXNoU2V0PEV2ZW50VGFyZ2V0
Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7IAogCi1FdmVudFRh
cmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudCkK
LSAgICA6IE5vZGUoZG9jLCBpc0VsZW1lbnQpCitFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0
Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudCwgYm9vbCBpc0NvbnRhaW5lcikKKyAg
ICA6IE5vZGUoZG9jLCBpc0VsZW1lbnQsIGlzQ29udGFpbmVyKQogICAgICwgbV9yZWdkTGlzdGVu
ZXJzKDApCiB7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24gMzY5MTIpCisr
KyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEV2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBOb2Rl
LAogICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoK
LSAgICBFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlKTsK
KyAgICBFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlLCBi
b29sIGlzQ29udGFpbmVyID0gZmFsc2UpOwogICAgIHZpcnR1YWwgfkV2ZW50VGFyZ2V0Tm9kZSgp
OwogCiAgICAgdmlydHVhbCBib29sIGlzRXZlbnRUYXJnZXROb2RlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDM2OTEyKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJOU1Jlc29sdmVyLmgi
CiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgpAQCAtNjIsMjggKzYzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKLQotc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7Ci0gICAgTm9kZUxpc3RT
ZXQgbV9saXN0c1dpdGhDYWNoZXM7Ci0KLSAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyBtX2No
aWxkTm9kZUxpc3RDYWNoZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOwotICAgIENhY2hlTWFwIG1fY2xhc3NOb2RlTGlz
dENhY2hlczsKLSAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENhY2hlczsKLQotICAgIH5Ob2Rl
TGlzdHNOb2RlRGF0YSgpCi0gICAgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc05v
ZGVMaXN0Q2FjaGVzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbmFtZU5vZGVMaXN0Q2Fj
aGVzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLSAgICB2b2lkIGlu
dmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3Q7Ci19OwotCisgICAgCiAvLyAtLS0tLS0tLQogCiBib29sIE5vZGU6OmlzU3VwcG9y
dGVkKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQpAQCAtMTU2
LDEyICsxMzYsMTEgQEAgTm9kZTo6U3R5bGVDaGFuZ2UgTm9kZTo6ZGlmZiggUmVuZGVyU3R5bAog
ICAgIHJldHVybiBjaDsKIH0KIAotTm9kZTo6Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxl
bWVudCkKK05vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBpc0VsZW1lbnQsIGJvb2wgaXND
b250YWluZXIpCiAgICAgOiBtX2RvY3VtZW50KGRvYykKICAgICAsIG1fcHJldmlvdXMoMCkKICAg
ICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQotICAgICwgbV90YWJJbmRleCgwKQog
ICAgICwgbV9zdHlsZUNoYW5nZShOb1N0eWxlQ2hhbmdlKQogICAgICwgbV9oYXNJZChmYWxzZSkK
ICAgICAsIG1faGFzQ2xhc3MoZmFsc2UpCkBAIC0xNjksMTQgKzE0OCwxNCBAQCBOb2RlOjpOb2Rl
KERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50CiAgICAgLCBtX2hhc0NoYW5nZWRDaGlsZChm
YWxzZSkKICAgICAsIG1faW5Eb2N1bWVudChmYWxzZSkKICAgICAsIG1faXNMaW5rKGZhbHNlKQot
ICAgICwgbV9mb2N1c2VkKGZhbHNlKQogICAgICwgbV9hY3RpdmUoZmFsc2UpCiAgICAgLCBtX2hv
dmVyZWQoZmFsc2UpCiAgICAgLCBtX2luQWN0aXZlQ2hhaW4oZmFsc2UpCiAgICAgLCBtX2luRGV0
YWNoKGZhbHNlKQogICAgICwgbV9pblN1YnRyZWVNYXJrKGZhbHNlKQotICAgICwgbV90YWJJbmRl
eFNldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgLCBtX2hhc1JhcmVEYXRhKGZhbHNlKQogICAgICwg
bV9pc0VsZW1lbnQoaXNFbGVtZW50KQorICAgICwgbV9pc0NvbnRhaW5lcihpc0NvbnRhaW5lcikK
IHsKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNob3VsZElnbm9yZUxlYWtzKQpAQCAtMjA5LDkg
KzE4OCwxOSBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgZWxzZQogICAgICAgICBub2RlQ291bnRlci5k
ZWNyZW1lbnQoKTsKICNlbmRpZgotCi0gICAgaWYgKG1fbm9kZUxpc3RzICYmIG1fZG9jdW1lbnQp
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKKyAgICAKKyAgICBp
ZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIEFTU0VSVCghTm9kZVJhcmVEYXRhOjpyYXJlRGF0
YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fZG9jdW1l
bnQgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBtX2RvY3VtZW50LT5y
ZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAgICAgIAorICAgICAgICBOb2RlUmFyZURhdGE6Ok5v
ZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKTsKKyAg
ICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YU1h
cC5maW5kKHRoaXMpOworICAgICAgICBBU1NFUlQoaXQgIT0gZGF0YU1hcC5lbmQoKSk7CisgICAg
ICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkYXRhTWFwLnJlbW92ZShpdCk7CisgICAg
fQogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIGRldGFjaCgpOwpAQCAtMjIyLDYgKzIx
MSw0NCBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgICAgIG1fbmV4dC0+c2V0UHJldmlvdXNTaWJsaW5n
KDApOwogfQogCitpbmxpbmUgTm9kZVJhcmVEYXRhKiBOb2RlOjpyYXJlRGF0YSgpCit7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3QocmFyZURhdGEoKSk7Cit9CisgICAgCitpbmxpbmUgY29uc3QgTm9k
ZVJhcmVEYXRhKiBOb2RlOjpyYXJlRGF0YSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1JhcmVE
YXRhKCkpOworICAgIHJldHVybiBOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKTsK
K30KKworTm9kZVJhcmVEYXRhKiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpCit7CisgICAgaWYgKGhh
c1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiByYXJlRGF0YSgpOworICAgIAorICAgIEFTU0VS
VCghTm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBOb2Rl
UmFyZURhdGEqIGRhdGEgPSBjcmVhdGVSYXJlRGF0YSgpOworICAgIE5vZGVSYXJlRGF0YTo6cmFy
ZURhdGFNYXAoKS5zZXQodGhpcywgZGF0YSk7CisgICAgbV9oYXNSYXJlRGF0YSA9IHRydWU7Cisg
ICAgcmV0dXJuIGRhdGE7Cit9CisgICAgCitOb2RlUmFyZURhdGEqIE5vZGU6OmNyZWF0ZVJhcmVE
YXRhKCkKK3sKKyAgICByZXR1cm4gbmV3IE5vZGVSYXJlRGF0YTsKK30KKyAgICAKK3Nob3J0IE5v
ZGU6OnRhYkluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVE
YXRhKCktPnRhYkluZGV4KCkgOiAwOworfQorICAgIAordm9pZCBOb2RlOjpzZXRUYWJJbmRleEV4
cGxpY2l0bHkoc2hvcnQgaSkKK3sKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRUYWJJbmRleEV4
cGxpY2l0bHkoaSk7Cit9CisKIFN0cmluZyBOb2RlOjpub2RlVmFsdWUoKSBjb25zdAogewogICBy
ZXR1cm4gU3RyaW5nKCk7CkBAIC0yNDAsMjIgKzI2NywxMyBAQCB2b2lkIE5vZGU6OnNldE5vZGVW
YWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxk
Tm9kZXMoKQogewotICAgIGlmICghbV9ub2RlTGlzdHMpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMu
c2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgTm9kZVJhcmVEYXRhICpkYXRhID0gZW5z
dXJlUmFyZURhdGEoKTsKKyAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7CisgICAgICAgIGRh
dGEtPnNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPihuZXcgTm9k
ZUxpc3RzTm9kZURhdGEpKTsKICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgp
OwogICAgIH0KIAotICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgJm1fbm9k
ZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOwotfQotCi1Ob2RlKiBOb2RlOjp2aXJ0dWFs
Rmlyc3RDaGlsZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5vZGU6OnZp
cnR1YWxMYXN0Q2hpbGQoKSBjb25zdAotewotICAgIHJldHVybiAwOworICAgIHJldHVybiBDaGls
ZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgJmRhdGEtPm5vZGVMaXN0cygpLT5tX2NoaWxkTm9kZUxp
c3RDYWNoZXMpOwogfQogCiBib29sIE5vZGU6OnZpcnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdApAQCAtNDYzLDE1ICs0ODEsMjcgQEAgYm9vbCBOb2RlOjpjYW5MYXp5
QXR0YWNoKCkKIHsKICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gdGhpczsKIH0K
KyAgICAKK3ZvaWQgTm9kZTo6c2V0Rm9jdXMoYm9vbCBiKQoreyAKKyAgICBpZihiIHx8IGhhc1Jh
cmVEYXRhKCkpCisgICAgICAgIGVuc3VyZVJhcmVEYXRhKCktPm1fZm9jdXNlZCA9IGI7Cit9CiAK
K2Jvb2wgTm9kZTo6cmFyZURhdGFGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzUmFy
ZURhdGEoKSk7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPm1fZm9jdXNlZDsKK30KKyAgICAKIGJv
b2wgTm9kZTo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3RhYkluZGV4U2V0
RXhwbGljaXRseTsKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT50YWJJ
bmRleFNldEV4cGxpY2l0bHkoKTsKIH0KIAogYm9vbCBOb2RlOjppc0tleWJvYXJkRm9jdXNhYmxl
KEtleWJvYXJkRXZlbnQqKSBjb25zdAogewotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIG1f
dGFiSW5kZXggPj0gMDsKKyAgICByZXR1cm4gaXNGb2N1c2FibGUoKSAmJiB0YWJJbmRleCgpID49
IDA7CiB9CiAKIGJvb2wgTm9kZTo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkBAIC00OTAsMjUg
KzUyMCwyOCBAQCB1bnNpZ25lZCBOb2RlOjpub2RlSW5kZXgoKSBjb25zdAogCiB2b2lkIE5vZGU6
OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKLSAgICBp
ZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3Rz
Tm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7Cisg
ICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXROb2RlTGlzdHMo
c3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05vZGVEYXRhKSk7
CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9IGVsc2UgaWYg
KCFtX2RvY3VtZW50LT5oYXNOb2RlTGlzdENhY2hlcygpKSB7CiAgICAgICAgIC8vIFdlIGhhdmVu
J3QgYmVlbiByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyB3aGlsZSB0aGVyZSB3ZXJlIG5vIHJlZ2lz
dGVyZWQgbGlzdHMsIHNvIHRoZSBjYWNoZSBpcyBpbnZhbGlkIG5vdy4KLSAgICAgICAgbV9ub2Rl
TGlzdHMtPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmlu
dmFsaWRhdGVDYWNoZXMoKTsKICAgICB9CiAKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkp
Ci0gICAgICAgIG1fbm9kZUxpc3RzLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CisgICAg
ICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CiB9CiAK
IHZvaWQgTm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqIGxp
c3QpCiB7Ci0gICAgQVNTRVJUKG1fbm9kZUxpc3RzKTsKKyAgICBBU1NFUlQocmFyZURhdGEoKSk7
CisgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKICAgICBpZiAobGlzdC0+aGFz
T3duQ2FjaGVzKCkpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMtPm1fbGlzdHNXaXRoQ2FjaGVzLnJl
bW92ZShsaXN0KTsKLSAgICAgICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9
IHJhcmVEYXRhKCk7CisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hl
cy5yZW1vdmUobGlzdCk7CisgICAgICAgIGlmIChkYXRhLT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICAgICAgZG9j
dW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTE2
LDEzICs1NDksMTYgQEAgdm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bgog
CiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpCiB7Ci0g
ICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSByYXJlRGF0YSgpOworICAgIGlmICghZGF0
YS0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbm9kZUxpc3RzLT5pbnZh
bGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOworICAgIGRhdGEtPm5vZGVMaXN0
cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogCi0gICAgaWYg
KG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsK
KyAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCktPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhLT5j
bGVhck5vZGVMaXN0cygpOwogICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVOb2RlTGlzdENhY2hl
KCk7CiAgICAgfQogfQpAQCAtNTM1LDE3ICs1NzEsMjAgQEAgdm9pZCBOb2RlOjpub3RpZnlOb2Rl
TGlzdHNBdHRyaWJ1dGVDaGFuZwogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hp
bGRyZW5DaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAgIGlmICghaGFzUmFy
ZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVE
YXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICBkYXRhLT5ub2RlTGlzdHMo
KS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0
U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7
Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBt
X25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAg
ICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGRhdGEtPm5v
ZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5lbmQoKTsKKyAgICBmb3IgKE5vZGVMaXN0c05v
ZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xp
c3RzV2l0aENhY2hlcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQogICAgICAgICAoKmkpLT5pbnZh
bGlkYXRlQ2FjaGUoKTsKIAotICAgIGlmIChtX25vZGVMaXN0cy0+aXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fbm9kZUxpc3RzLmNsZWFyKCk7CisgICAgaWYgKGRhdGEtPm5vZGVMaXN0cygpLT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZGF0YS0+Y2xlYXJOb2RlTGlzdHMoKTsKICAgICAgICAgZG9jdW1l
bnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIH0KQEAgLTU1NiwxNiArNTk1LDYg
QEAgdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZQogICAgICAgICBuLT5u
b3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwogfQogCi11bnNpZ25lZCBOb2Rl
OjpjaGlsZE5vZGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgKk5v
ZGU6OmNoaWxkTm9kZSh1bnNpZ25lZCAvKmluZGV4Ki8pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KIE5vZGUgKk5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSAqc3RheVdpdGhp
bikgY29uc3QKIHsKICAgICBpZiAoZmlyc3RDaGlsZCgpKQpAQCAtMTE5OCwxMiArMTIyNywxMyBA
QCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAKIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5h
bWUpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0cykgewotICAgICAgICBtX25vZGVMaXN0cy5zZXQo
bmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSBlbnN1cmVS
YXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+
c2V0Tm9kZUxpc3RzKHN0ZDo6YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2RlTGlz
dHNOb2RlRGF0YSkpOwogICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAg
ICAgfQogCi0gICAgcGFpcjxOb2RlTGlzdHNOb2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX25vZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZXMuYWRkKGVsZW1l
bnROYW1lLCAwKTsKKyAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0
b3IsIGJvb2w+IHJlc3VsdCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX25hbWVOb2RlTGlzdENhY2hl
cy5hZGQoZWxlbWVudE5hbWUsIDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKQogICAgICAgICBy
ZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ldyBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczsKICAgICAK
QEAgLTEyMTIsMTIgKzEyNDIsMTMgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxl
bWVudHNCeQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7
Ci0gICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5v
ZGVSYXJlRGF0YSAqZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2Rl
TGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2Rl
TGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50
KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9CiAKLSAgICBwYWlyPE5vZGVMaXN0c05vZGVE
YXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbm9kZUxpc3RzLT5tX2Ns
YXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMsIDApOworICAgIHBhaXI8Tm9kZUxpc3Rz
Tm9kZURhdGE6OkNhY2hlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gZGF0YS0+bm9kZUxp
c3RzKCktPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywgMCk7CiAgICAgaWYg
KHJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbmV3IER5bmFt
aWNOb2RlTGlzdDo6Q2FjaGVzOwogICAgIApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDcgQEAgY2xhc3MgUmVuZGVy
QXJlbmE7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0
cmluZ0J1aWxkZXI7Ci0KLXN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKK2NsYXNzIE5vZGVSYXJl
RGF0YTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtOTksNyArOTgsNyBAQCBw
dWJsaWM6CiAgICAgZW51bSBTdHlsZUNoYW5nZSB7IE5vQ2hhbmdlLCBOb0luaGVyaXQsIEluaGVy
aXQsIERldGFjaCwgRm9yY2UgfTsgICAgCiAgICAgc3RhdGljIFN0eWxlQ2hhbmdlIGRpZmYoUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSopOwogCi0gICAgTm9kZShEb2N1bWVudCosIGJvb2wgaXNF
bGVtZW50ID0gZmFsc2UpOworICAgIE5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZh
bHNlLCBib29sIGlzQ29udGFpbmVyID0gZmFsc2UpOwogICAgIHZpcnR1YWwgfk5vZGUoKTsKIAog
ICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZQpAQCAtMTE0LDggKzExMyw4
IEBAIHB1YmxpYzoKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBt
X3ByZXZpb3VzOyB9CiAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25l
eHQ7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMoKTsKLSAg
ICBOb2RlKiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbEZpcnN0Q2hpbGQoKTsg
fQotICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxMYXN0Q2hpbGQo
KTsgfQorICAgIE5vZGUqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5v
ZGUoKSA/IGNvbnRhaW5lckZpcnN0Q2hpbGQoKSA6IDA7IH0KKyAgICBOb2RlKiBsYXN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckxhc3RDaGlsZCgp
IDogMDsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBOYW1lZEF0dHJNYXAqIGF0dHJpYnV0ZXMoKSBjb25zdDsKIApAQCAtMTU2LDYgKzE1NSw3
IEBAIHB1YmxpYzoKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAg
ICBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2lzRWxlbWVudDsgfQorICAg
IGJvb2wgaXNDb250YWluZXJOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRhaW5lcjsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogI2lmIEVOQUJMRShTVkcpCkBAIC0yNTAsNyArMjUwLDcgQEAgcHVibGljOgogICAgIGJvb2wg
aW5BY3RpdmVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5BY3RpdmVDaGFpbjsgfQogICAgIGJv
b2wgaW5EZXRhY2goKSBjb25zdCB7IHJldHVybiBtX2luRGV0YWNoOyB9CiAgICAgYm9vbCBob3Zl
cmVkKCkgY29uc3QgeyByZXR1cm4gbV9ob3ZlcmVkOyB9Ci0gICAgYm9vbCBmb2N1c2VkKCkgY29u
c3QgeyByZXR1cm4gbV9mb2N1c2VkOyB9CisgICAgYm9vbCBmb2N1c2VkKCkgY29uc3QgeyByZXR1
cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhRm9jdXNlZCgpIDogZmFsc2U7IH0KICAgICBib29s
IGF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2hlZDsgfQogICAgIHZvaWQgc2V0QXR0
YWNoZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2F0dGFjaGVkID0gYjsgfQogICAgIGJvb2wgY2hhbmdl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVDaGFuZ2UgIT0gTm9TdHlsZUNoYW5nZTsgfQpAQCAt
MjcxLDExICsyNzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgbGF6eUF0dGFjaCgpOwogICAgIHZp
cnR1YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
Ym9vbCBiID0gdHJ1ZSkgeyBtX2ZvY3VzZWQgPSBiOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZv
Y3VzKGJvb2wgYiA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBiID0g
dHJ1ZSwgYm9vbCBwYXVzZT1mYWxzZSkgeyBtX2FjdGl2ZSA9IGI7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0SG92ZXJlZChib29sIGIgPSB0cnVlKSB7IG1faG92ZXJlZCA9IGI7IH0KIAotICAgIHZp
cnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4OyB9CisgICAg
dmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogV2hldGhl
ciB0aGlzIG5vZGUgY2FuIHJlY2VpdmUgdGhlIGtleWJvYXJkIGZvY3VzLgpAQCAtMzI1LDggKzMy
NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbm9kZVR5cGUoKSA9PSBFTlRJVFlfUkVGRVJFTkNFX05PREU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2Rl
KiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNoaWxkTm9k
ZUNvdW50KCkgY29uc3QgeyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGls
ZE5vZGVDb3VudCgpIDogMDsgfQorICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGUoaW5k
ZXgpIDogMDsgfQogCiAgICAgLyoqCiAgICAgICogRG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwg
b2YgdGhlIHRyZWUgdG8gZmluZCB0aGUgbm9kZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuIFRo
aXMgdXNlcyB0aGUgc2FtZSBvcmRlciB0aGF0CkBAIC00OTcsMTMgKzQ5NywyMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKSB7IH0KICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3Rv
cjxTdHJpbmc+JikgY29uc3QgeyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hv
cnQgaSkKLSAgICB7IAotICAgICAgICBtX3RhYkluZGV4ID0gaTsgCi0gICAgICAgIG1fdGFiSW5k
ZXhTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsKLSAgICB9CisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxp
Y2l0bHkoc2hvcnQgaSk7CisgICAgCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzUmFyZURhdGE7IH0KKyAgICAKKyAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCk7
CisgICAgY29uc3QgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OworICAgIE5vZGVSYXJl
RGF0YSogZW5zdXJlUmFyZURhdGEoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbEhh
c1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZp
cnR1YWwgTm9kZVJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YSgpOworICAgIE5vZGUqIGNvbnRhaW5l
ckNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgY29udGFpbmVy
Q2hpbGROb2RlQ291bnQoKSBjb25zdDsKKyAgICBOb2RlKiBjb250YWluZXJGaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgTm9kZSogY29udGFpbmVyTGFzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCBy
YXJlRGF0YUZvY3VzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25SZW5k
ZXJlclJlbmRlclN0eWxlKCkgY29uc3Q7CiAKICAgICBEb2NQdHI8RG9jdW1lbnQ+IG1fZG9jdW1l
bnQ7CkBAIC01MTEsMTAgKzUyMSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogbV9uZXh0OwogICAg
IFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKIAotICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0
YT4gbV9ub2RlTGlzdHM7Ci0KLSAgICBzaG9ydCBtX3RhYkluZGV4OwotCiAgICAgLy8gbWFrZSBz
dXJlIHdlIGRvbid0IHVzZSBtb3JlIHRoYW4gMTYgYml0cyBoZXJlIC0tIGFkZGluZyBtb3JlIHdv
dWxkIGluY3JlYXNlIHRoZSBzaXplIG9mIGFsbCBOb2RlcwogCiAgICAgdW5zaWduZWQgbV9zdHls
ZUNoYW5nZSA6IDI7CkBAIC01MjQsMjUgKzUzMCwyMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9o
YXNDaGFuZ2VkQ2hpbGQgOiAxOwogICAgIGJvb2wgbV9pbkRvY3VtZW50IDogMTsKICAgICBib29s
IG1faXNMaW5rIDogMTsKLSAgICBib29sIG1fZm9jdXNlZCA6IDE7CiAgICAgYm9vbCBtX2FjdGl2
ZSA6IDE7CiAgICAgYm9vbCBtX2hvdmVyZWQgOiAxOwogICAgIGJvb2wgbV9pbkFjdGl2ZUNoYWlu
IDogMTsKICAgICBib29sIG1faW5EZXRhY2ggOiAxOwogICAgIGJvb2wgbV9pblN1YnRyZWVNYXJr
IDogMTsKLSAgICBib29sIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5IDogMTsKKyAgICBib29sIG1f
aGFzUmFyZURhdGEgOiAxOwogICAgIGNvbnN0IGJvb2wgbV9pc0VsZW1lbnQgOiAxOwotICAgIC8v
IG5vIGJpdHMgbGVmdAorICAgIGNvbnN0IGJvb2wgbV9pc0NvbnRhaW5lciA6IDE7CisgICAgLy8g
bm8gYml0cyBsZWZ0ICAgCiAKICAgICBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsK
IAogICAgIHZvaWQgYXBwZW5kVGV4dENvbnRlbnQoYm9vbCBjb252ZXJ0QlJzVG9OZXdsaW5lcywg
U3RyaW5nQnVpbGRlciYpIGNvbnN0OwotCi0gICAgdmlydHVhbCBOb2RlKiB2aXJ0dWFsRmlyc3RD
aGlsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZSogdmlydHVhbExhc3RDaGlsZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiB9OwotCiB9IC8vbmFtZXNwYWNlCiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBX
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0
aCA8Y2F0ZmlzaC5tYW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBOb2RlUmFyZURhdGFfaAorI2Rl
ZmluZSBOb2RlUmFyZURhdGFfaAorCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBOb2RlTGlzdHNO
b2RlRGF0YSB7CisgICAgdHlwZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0
U2V0OworICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNXaXRoQ2FjaGVzOworICAgIAorICAgIER5bmFt
aWNOb2RlTGlzdDo6Q2FjaGVzIG1fY2hpbGROb2RlTGlzdENhY2hlczsKKyAgICAKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOwor
ICAgIENhY2hlTWFwIG1fY2xhc3NOb2RlTGlzdENhY2hlczsKKyAgICBDYWNoZU1hcCBtX25hbWVO
b2RlTGlzdENhY2hlczsKKyAgICAKKyAgICB+Tm9kZUxpc3RzTm9kZURhdGEoKQorICAgIHsKKyAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xhc3NOb2RlTGlzdENhY2hlcyk7CisgICAgICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX25hbWVOb2RlTGlzdENhY2hlcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlcygpOworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBl
bmRPbkF0dHJpYnV0ZXMoKTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKK307CisgICAgCitj
bGFzcyBOb2RlUmFyZURhdGEgeworcHVibGljOiAgICAKKyAgICBOb2RlUmFyZURhdGEoKQorICAg
ICAgICA6IG1fZm9jdXNlZChmYWxzZSkKKyAgICAgICAgLCBtX3RhYkluZGV4KDApCisgICAgICAg
ICwgbV90YWJJbmRleFNldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0ZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChmYWxzZSkKKyAgICB7CisgICAgfQorCisg
ICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IE5vZGUqLCBOb2RlUmFyZURhdGEqPiBOb2RlUmFyZURh
dGFNYXA7CisgICAgCisgICAgc3RhdGljIE5vZGVSYXJlRGF0YU1hcCYgcmFyZURhdGFNYXAoKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIE5vZGVSYXJlRGF0YU1hcCogZGF0YU1hcCA9IG5ldyBOb2Rl
UmFyZURhdGFNYXA7CisgICAgICAgIHJldHVybiAqZGF0YU1hcDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIE5vZGVSYXJlRGF0YSogcmFyZURhdGFGcm9tTWFwKGNvbnN0IE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICByZXR1cm4gcmFyZURhdGFNYXAoKS5nZXQobm9kZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KKyAg
ICB2b2lkIHNldE5vZGVMaXN0cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0
cykgeyBtX25vZGVMaXN0cy5zZXQobGlzdHMucmVsZWFzZSgpKTsgfQorICAgIE5vZGVMaXN0c05v
ZGVEYXRhKiBub2RlTGlzdHMoKSBjb25zdCB7IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQor
ICAgIAorICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQor
ICAgIHZvaWQgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGluZGV4KSB7IG1fdGFiSW5kZXgg
PSBpbmRleDsgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgPSB0cnVlOyB9CisgICAgYm9vbCB0YWJJ
bmRleFNldEV4cGxpY2l0bHkoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRs
eTsgfQorICAgICAgICAKKyAgICBib29sIG1fZm9jdXNlZCA6IDE7CisKK3ByaXZhdGU6CisgICAg
T3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKKyAgICBzaG9ydCBtX3RhYklu
ZGV4OworICAgIGJvb2wgbV90YWJJbmRleFNldEV4cGxpY2l0bHkgOiAxOworcHVibGljOgorICAg
IGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7IC8v
Zm9yIEVsZW1lbnRSYXJlRGF0YQorfTsKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8a2pzL0V4ZWNT
dGF0ZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJOb2RlLmgiCisj
aW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHJldmlzaW9uIDM2OTEy
KQorKysgV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogCiAjaWYgRU5BQkxFKFhQQVRIKQogCi0jaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1
ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQ
YXRoIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23829</attachid>
            <date>2008-09-25 16:58:16 -0700</date>
            <delta_ts>2008-09-25 18:52:00 -0700</delta_ts>
            <desc>Oops</desc>
            <filename>noderaredata2.txt</filename>
            <type>text/plain</type>
            <size>44505</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjkxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODggQEAKKzIwMDgtMDktMjUgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTgwCisg
ICAgICAgIFNwbGl0IG9mZiB1bmNvbW1vbmx5IHVzZWQgZGF0YSBmcm9tIE5vZGUgc2ltaWxhciB0
byBFbGVtZW50UmFyZURhdGEKKyAgICAgICAgCisgICAgICAgIFNhdmVzIGFuIE93blB0ciBhbmQg
YSBzaG9ydCBvbiBOb2RlLCBhcyB3ZWxsIGFzIHByb3ZpZGluZyByb29tIGZvciBhbiBpc0NvbnRh
aW5lciBiaXQsCisgICAgICAgIHdoaWNoIGluIHR1cm4gYWxsb3dzIGlubGluaW5nIGZpcnN0Q2hp
bGQoKSwgbGFzdENoaWxkKCksIGNoaWxkTm9kZUNvdW50KCksIGFuZCBjaGlsZE5vZGUoKQorICAg
ICAgICBmb3IgYSA1LTEwKyUgcGVyZm9ybWFuY2Ugd2luIG9uIFNsaWNrU3BlZWQgYW5kIGFzc29y
dGVkIHNwZWVkdXBzIG9uIG90aGVyIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4
cDogCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNwcDogSW5jbHVkZSBDb250YWluZXJOb2RlIHRvIHBpY2sg
dXAgaXRzIGRlZmluaXRpb25zIGZvciBjaGlsZE5vZGVDb3VudCgpLCBldGMuLi4KKyAgICAgICAg
KiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IFNldCBpc0NvbnRhaW5lciB0byB0cnVlCisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKToKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5oOiBUaGVzZSBOb2RlIGlubGluZXMgYXJlIGhlcmUgdG8gYXZvaWQgaW5j
bHVkaW5nIENvbnRhaW5lck5vZGUuaCBpbiBOb2RlLmgKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KTogVXNlIENvbnRhaW5lck5vZGUncyBkZWZpbml0aW9u
LCBoYXZpbmcgcHJvdmVkIHRoYXQgdGhlIE5vZGUgaXMgYSBjb250YWluZXIKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjb250YWluZXJGaXJzdENoaWxkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNvbnRhaW5lckxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OiBNb3N0IG9mIHRoZSBjaGFuZ2VzIGhlcmUgYXJlIG1vdmluZyBFbGVtZW50UmFyZURhdGEgdG8g
RWxlbWVudFJhcmVEYXRhLmggYW5kIE5vZGVSYXJlRGF0YS5oCisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpFbGVtZW50KTogCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVSYXJlRGF0YSk6IFJlbmFtZWQgZnJvbSBjcmVhdGVSYXJlRGF0YQor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3JlYXRlUmFyZURhdGEpOiBVc2VkIGJ5IGVuc3Vy
ZVJhcmVEYXRhIHRvIGdldCB0aGUgY29ycmVjdCByYXJlRGF0YSB0eXBlCisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjphdHRhY2gpOiBDaGVjayBoYXNSYXJlRGF0YSByYXRoZXIgdGhhbiBudWxs
LWNoZWNraW5nIHJhcmVEYXRhKCkKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6IGRpdHRvCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpmb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjptaW5pbXVtU2l6ZUZvclJlc2l6aW5nKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUpOiBkaXR0bworICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOiBBZGRlZDsgZXZlcnl0aGluZyBj
b3BpZWQgZnJvbSBFbGVtZW50LmNwcAorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE1pbmltdW1T
aXplRm9yUmVzaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVt
ZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUpOiBQYXNzIHRoZSBp
c0NvbnRhaW5lciBmbGFnIHVwIHRoZSBjaGFpbgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6On5Ob2RlKTogcmFyZURhdGEgY2xlYW51cCBj
b2RlIG1vdmVkIGZyb20gRWxlbWVudCBhbmQgY2hhbmdlZCB0byB1c2UgaGFzUmFyZURhdGEKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmVuc3VyZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJhcmVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRhYkluZGV4KTogbm9uemVybyB0YWIgaW5kZXhl
cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRUYWJJbmRl
eEV4cGxpY2l0bHkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2Rlcyk6IE5vZGVM
aXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRGb2N1
cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyYXJlRGF0YUZvY3VzZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6aXNGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNL
ZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFt
aWNOb2RlTGlzdCk6IE5vZGVMaXN0cyBhcmUgbm93IGluIHJhcmVEYXRhCisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hh
bmdlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKTog
ZGl0dG8KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Zmly
c3RDaGlsZCk6IFVzZSBpc0NvbnRhaW5lck5vZGUoKSB0byBkZXZpcnR1YWxpemUKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6Omxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojppc0NvbnRhaW5lck5vZGUpOiBUYWtlIGFkdmFudGFnZSBvZiBhIG5ld2x5IGZyZWVkIGJpdCB0
byBzdG9yZSB3aGV0aGVyIHdlJ3JlIGEgY29udGFpbmVyCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojpmb2N1c2VkKTogZm9jdXMgaXMgaW4gcmFyZURhdGEgaWYgc2V0CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpjaGlsZFR5cGVBbGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNoaWxk
Tm9kZUNvdW50KTogVXNlIGlzQ29udGFpbmVyTm9kZSgpIHRvIGRldmlydHVhbGl6ZQorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2RlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6Omhhc1JhcmVEYXRhKTogVXNlIGFub3RoZXIgbmV3bHkgZnJlZWQgYml0IHRvIHN0b3JlIHdo
ZXRoZXIgd2UgaGF2ZSByYXJlIGRhdGE7IGF2b2lkcyBkb2luZyBoYXNoIGxvb2t1cHMgaW4gdGhl
IGNvbW1vbiBjYXNlCisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOiBBZGRlZC4gTW9zdCBv
ZiB0aGlzIGlzIGp1c3QgcHJvcGVydGllcyBtb3ZlZCBmcm9tIE5vZGUKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0c05vZGVEYXRhOjp+Tm9kZUxpc3RzTm9kZURhdGEpOiBNb3ZlZCBmcm9tIE5v
ZGUuY3BwIHNpbmNlIHdlIE5vZGVSYXJlRGF0YSBuZWVkcyB0byBwdXQgdGhlbSBpbiBhIEhhc2hU
YWJsZSA6KAorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6OmNsZWFyTm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
YXJlRGF0YTo6c2V0Tm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6dGFiSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpzZXRUYWJJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlUmFyZURhdGE6OnRhYkluZGV4U2V0RXhwbGljaXRseSk6CisgICAgICAgICog
ZG9tL1RyZWVXYWxrZXIuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMg
ZGVmaW5pdGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorICAgICAgICAqIHhtbC9Y
UGF0aFV0aWwuY3BwOiBJbmNsdWRlIENvbnRhaW5lck5vZGUgdG8gcGljayB1cCBpdHMgZGVmaW5p
dGlvbnMgZm9yIGNoaWxkTm9kZUNvdW50KCksIGV0Yy4uLgorCiAyMDA4LTA5LTI1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM2OTEyKQor
KysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03MjIsNiArNzIy
LDcgQEAgX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDVpbWFnZUV2CiBfX1pOSzdXZWJDb3Jl
MTNIaXRUZXN0UmVzdWx0NXRpdGxlRXYKIF9fWk5LN1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQ5aW1h
Z2VSZWN0RXYKIF9fWk5LN1dlYkNvcmUxM1Jlc291cmNlRXJyb3JjdlA3TlNFcnJvckV2CitfX1pO
SzdXZWJDb3JlMTNDb250YWluZXJOb2RlMTRjaGlsZE5vZGVDb3VudEV2CiBfX1pOSzdXZWJDb3Jl
MTREb2N1bWVudExvYWRlcjEwcmVxdWVzdFVSTEV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExv
YWRlcjExZnJhbWVMb2FkZXJFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMXN1YnJl
c291cmNlRVJLTlNfNEtVUkxFCkBAIC03NjgsNiArNzY5LDcgQEAgX19aTks3V2ViQ29yZTRLVVJM
Y3ZQNU5TVVJMRXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8KIF9f
Wk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dURjZWZWN0b3JJTlNfNEtV
UkxFTG0wRUVFCiBfX1pOSzdXZWJDb3JlNE5vZGU5bm9kZUluZGV4RXYKK19fWk5LN1dlYkNvcmUx
M0NvbnRhaW5lck5vZGU5Y2hpbGROb2RlRWoKIF9fWk5LN1dlYkNvcmU0UGFnZTEwcGx1Z2luRGF0
YUV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1v
ZGVFdgogX19aTks3V2ViQ29yZTRQYWdlOWdyb3VwTmFtZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjY1
LDkgKzY2NSwxMSBAQAogCQk1REQwQTM4MTBEOUFDNjA3MDA1NkMxMjIgLyogRE9NRWxlbWVudFRp
bWVDb250cm9sLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRp
bWVDb250cm9sLmggKi87IH07CiAJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVs
ZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi87IH07
CiAJCTVERkU4RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTM3OEJCMEQxNUY2NDIw
MEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uaCAqLzsgfTsKKwkJNjMxODlBRTMwRTgzQTMzMzAw
MDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjMxODlBRTIwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTYzNDU5QzY1MEU3OUNE
MzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0NTlDNjMwRTc5Q0QzMzAwOEFERkFGIC8qIENTU050aFNl
bGVjdG9yLmggKi87IH07CiAJCTYzNDU5QzY2MEU3OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxl
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
MzQ1OUM2NDBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwICovOyB9OwogCQk2
M0Q3QjMyRDBFNzhDRDNGMDBGNzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2M0Q3QjMyQzBFNzhDRDNGMDBGNzYx
N0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi87IH07CisJCTYzRjVENEY3MEU4QzRCNzEwMEMwQkQw
NCAvKiBFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVtZW50UmFyZURhdGEu
aCAqLzsgfTsKIAkJNjUwRjUzREMwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MEY1M0RCMDlEMTVE
REEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggKi87IH07CiAJCTY1MEY1M0REMDlEMTVEREYwMEM5
QjBDOCAvKiBDU1NHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAq
LzsgfTsKIAkJNjUwRkJGMkEwRDlBRjA0NzAwOEZDMjkyIC8qIFNWR0hLZXJuRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTBGQkYyNzBE
OUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLzsgfTsKQEAgLTUzNjgsOCAr
NTM3MCwxMCBAQAogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZp
ZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5J
bmZvU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzMTg5QUUyMEU4M0EzMzMwMDAx
MkU0MSAvKiBOb2RlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Tm9kZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYzNDU5QzYzMEU3
OUNEMzMwMDhBREZBRiAvKiBDU1NOdGhTZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NOdGhTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2MzQ1OUM2NDBFNzlDRDMzMDA4QURGQUYgLyogQ1NTTnRoU2VsZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTTnRoU2VsZWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVu
dFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSYXJl
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2M0Q3QjMyQzBFNzhDRDNGMDBG
NzYxN0MgLyogTm9kZVJlbmRlclN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5vZGVSZW5kZXJTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTBG
NTNEQjA5RDE1RERBMDBDOUIwQzggLyogQ1NTR3JhbW1hci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTR3JhbW1hci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTBGQkYyNzBEOUFGMDQ2MDA4RkMyOTIgLyogU1ZHSEtlcm5FbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0hLZXJuRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzYyOCw2ICsxMzYzMiw4IEBACiAJCUY1MjNEMzI0
MDJERTQ0NzgwMTg2MzVDQSAvKiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTYzMTg5QUUyMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEu
aCAqLywKKwkJCQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmgg
Ki8sCiAJCQkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnhtbDIu
Y3BwICovLAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUu
aCAqLywKIAkJCQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCkBAIC0x
NTE2Myw2ICsxNTE2OSw4IEBACiAJCQkJOTNDQ0YwMjcwQUY2QzUyOTAwMDE4RTg5IC8qIE5hdmln
YXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NkQzNzQzMEFEQkE1REUwMEE0NTU0
RCAvKiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQx
MTVCNTIwOUY4NEI3MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzRDdC
MzJEMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5v
ZGVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTkyOCw2ICsxNTkzNiw3IEBACiAJCQkJ
QThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhBNDhBN0EwRTg2Q0Y4QzAwRTIyNUREIC8qIEV2ZW50VGFyZ2V0U1ZHRWxlbWVudEluc3Rh
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzBCM0JFMjBFODg0OTIxMDA5NzcwQzUgLyogSlND
YW52YXNQaXhlbEFycmF5Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKKwkJCQk2M0Y1RDRGNzBFOEM0
QjcxMDBDMEJEMDQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdl
YkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAzNjkxMikKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9k
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogCi0jaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgTm9k
ZUNhbGxiYWNrUXVldWUqIHNfcG9zdEF0dGFjaENhCiBzdGF0aWMgc2l6ZV90IHNfYXR0YWNoRGVw
dGggPSAwOwogCiBDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2MsIGJv
b2wgaXNFbGVtZW50KQotICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50KQorICAg
IDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50LCB0cnVlKQogICAgICwgbV9maXJzdENo
aWxkKDApCiAgICAgLCBtX2xhc3RDaGlsZCgwKQogewpAQCAtNjcsMTYgKzY3LDYgQEAgQ29udGFp
bmVyTm9kZTo6fkNvbnRhaW5lck5vZGUoKQogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAK
LU5vZGUqIENvbnRhaW5lck5vZGU6OnZpcnR1YWxGaXJzdENoaWxkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9maXJzdENoaWxkOwotfQotCi1Ob2RlKiBDb250YWluZXJOb2RlOjp2aXJ0dWFsTGFz
dENoaWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXN0Q2hpbGQ7Ci19Ci0KIGJvb2wgQ29u
dGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUq
IHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQogewog
ICAgIC8vIENoZWNrIHRoYXQgdGhpcyBub2RlIGlzIG5vdCAiZmxvYXRpbmciLgpJbmRleDogV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuaAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cyhib29sID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShi
b29sIGFjdGl2ZSA9IHRydWUsIGJvb2wgcGF1c2UgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lk
IHNldEhvdmVyZWQoYm9vbCA9IHRydWUpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2Rl
Q291bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisgICAgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKKyAgICBOb2Rl
KiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKQEAgLTg4LDkgKzg4LDYgQEAgcHJvdGVjdGVkOgogICAgIAogcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBkaXNwYXRjaFBvc3RBdHRhY2hDYWxsYmFja3MoKTsKLQotICAgIHZpcnR1YWwg
Tm9kZSogdmlydHVhbEZpcnN0Q2hpbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGUqIHZpcnR1
YWxMYXN0Q2hpbGQoKSBjb25zdDsKICAgICAKICAgICBib29sIGdldFVwcGVyTGVmdENvcm5lcihp
bnQmIHgsIGludCYgeSkgY29uc3Q7CiAgICAgYm9vbCBnZXRMb3dlclJpZ2h0Q29ybmVyKGludCYg
eCwgaW50JiB5KSBjb25zdDsKQEAgLTk4LDYgKzk1LDI2IEBAIHByaXZhdGU6CiAgICAgTm9kZSog
bV9maXJzdENoaWxkOwogICAgIE5vZGUqIG1fbGFzdENoaWxkOwogfTsKKyAgICAKK2lubGluZSB1
bnNpZ25lZCBOb2RlOjpjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Y2hpbGROb2RlQ291
bnQoKTsKK30KKworaW5saW5lIE5vZGUgKk5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29udGFpbmVy
Tm9kZSo+KHRoaXMpLT5jaGlsZE5vZGUoaW5kZXgpOworfQorCitpbmxpbmUgTm9kZSogTm9kZTo6
Y29udGFpbmVyRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IENvbnRhaW5lck5vZGUqPih0aGlzKS0+Zmlyc3RDaGlsZCgpOworfQorCitpbmxpbmUgTm9k
ZSogTm9kZTo6Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29udGFpbmVyTm9kZSo+KHRoaXMpLT5sYXN0Q2hpbGQoKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzY5MTIpCisrKyBX
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVk
aXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtMzksNjIgKzQwLDE5IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
TmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgot
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgWE1MTmFtZXM7Ci0KLWNs
YXNzIEVsZW1lbnRSYXJlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudFJhcmVEYXRhKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50Kik7Ci0KLSAgICBJbnRT
aXplIG1fbWluaW11bVNpemVGb3JSZXNpemluZzsKLSAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRl
ZFN0eWxlOwotICAgIGJvb2wgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0
dGFjaDsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50KiwgRWxlbWVudFJhcmVE
YXRhKj4gRWxlbWVudFJhcmVEYXRhTWFwOwotCi1zdGF0aWMgRWxlbWVudFJhcmVEYXRhTWFwJiBy
YXJlRGF0YU1hcCgpCi17Ci0gICAgc3RhdGljIEVsZW1lbnRSYXJlRGF0YU1hcCogZGF0YU1hcCA9
IG5ldyBFbGVtZW50UmFyZURhdGFNYXA7Ci0gICAgcmV0dXJuICpkYXRhTWFwOwotfQotCi1zdGF0
aWMgRWxlbWVudFJhcmVEYXRhKiByYXJlRGF0YUZyb21NYXAoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKLXsKLSAgICByZXR1cm4gcmFyZURhdGFNYXAoKS5nZXQoZWxlbWVudCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCi17Ci0gICAg
cmV0dXJuIEludFNpemUoSU5UX01BWCwgSU5UX01BWCk7Ci19Ci0KLWlubGluZSBFbGVtZW50UmFy
ZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlbGVtZW50KQotICAgIDogbV9taW5pbXVt
U2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCi0gICAgLCBt
X2NvbXB1dGVkU3R5bGUoMCkKLSAgICAsIG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29u
QWZ0ZXJBdHRhY2goZmFsc2UpCi17Ci19Ci0KLXZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIW1fY29tcHV0ZWRTdHls
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxlbWVudC0+
ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9jb21wdXRlZFN0eWxlID0gMDsKLX0K
LQorICAgIAogRWxlbWVudDo6RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQogICAgIDogQ29udGFpbmVyTm9kZShkb2MsIHRydWUpCiAgICAgLCBtX3Rh
Z05hbWUodGFnTmFtZSkKQEAgLTEwNSw3ICs2Myw2IEBAIEVsZW1lbnQ6OkVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKICAgICAsIG1fc3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXMoZmFs
c2UpCiAjZW5kaWYKICAgICAsIG1fcGFyc2luZ0NoaWxkcmVuRmluaXNoZWQodHJ1ZSkKLSAgICAs
IG1faGFzUmFyZURhdGEoZmFsc2UpCiB7CiB9CiAKQEAgLTExMywzOSArNzAsMjkgQEAgRWxlbWVu
dDo6fkVsZW1lbnQoKQogewogICAgIGlmIChuYW1lZEF0dHJNYXApCiAgICAgICAgIG5hbWVkQXR0
ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKLQotICAgIGlmICghaGFzUmFyZURhdGEoKSkKLSAg
ICAgICAgQVNTRVJUKCFyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgRWxlbWVudFJhcmVEYXRhTWFwJiBkYXRhTWFwID0gcmFyZURhdGFNYXAoKTsKLSAg
ICAgICAgRWxlbWVudFJhcmVEYXRhTWFwOjppdGVyYXRvciBpdCA9IGRhdGFNYXAuZmluZCh0aGlz
KTsKLSAgICAgICAgQVNTRVJUKGl0ICE9IGRhdGFNYXAuZW5kKCkpOwotICAgICAgICBkZWxldGUg
aXQtPnNlY29uZDsKLSAgICAgICAgZGF0YU1hcC5yZW1vdmUoaXQpOwotICAgIH0KIH0KIAogaW5s
aW5lIEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKQogewotICAgIHJldHVybiBo
YXNSYXJlRGF0YSgpID8gcmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKKyAgICBBU1NFUlQoaGFz
UmFyZURhdGEoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRSYXJlRGF0YSo+KE5v
ZGVSYXJlRGF0YTo6cmFyZURhdGFGcm9tTWFwKHRoaXMpKTsKIH0KLQorICAgIAogaW5saW5lIGNv
bnN0IEVsZW1lbnRSYXJlRGF0YSogRWxlbWVudDo6cmFyZURhdGEoKSBjb25zdAogewotICAgIHJl
dHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGFGcm9tTWFwKHRoaXMpIDogMDsKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxjb25zdCBFbGVtZW50UmFyZURhdGEqPihyYXJlRGF0YSgpKTsKIH0KLQot
RWxlbWVudFJhcmVEYXRhKiBFbGVtZW50OjpjcmVhdGVSYXJlRGF0YSgpCisgICAgCitpbmxpbmUg
RWxlbWVudFJhcmVEYXRhKiBFbGVtZW50OjplbnN1cmVSYXJlRGF0YSgpCiB7Ci0gICAgaWYgKGhh
c1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybiByYXJlRGF0YU1hcCgpLmdldCh0aGlzKTsKLSAg
ICBBU1NFUlQoIXJhcmVEYXRhTWFwKCkuY29udGFpbnModGhpcykpOwotICAgIEVsZW1lbnRSYXJl
RGF0YSogZGF0YSA9IG5ldyBFbGVtZW50UmFyZURhdGEodGhpcyk7Ci0gICAgcmFyZURhdGFNYXAo
KS5zZXQodGhpcywgZGF0YSk7Ci0gICAgc2V0SGFzUmFyZURhdGEodHJ1ZSk7Ci0gICAgcmV0dXJu
IGRhdGE7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRSYXJlRGF0YSo+KE5vZGU6OmVu
c3VyZVJhcmVEYXRhKCkpOwogfQotCisgICAgCitOb2RlUmFyZURhdGEqIEVsZW1lbnQ6OmNyZWF0
ZVJhcmVEYXRhKCkKK3sKKyAgICByZXR1cm4gbmV3IEVsZW1lbnRSYXJlRGF0YSh0aGlzKTsKK30K
KyAgICAKIFBhc3NSZWZQdHI8Tm9kZT4gRWxlbWVudDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTcxNywxMSArNjY0LDEyIEBAIHZvaWQgRWxl
bWVudDo6YXR0YWNoKCkKIHsKICAgICBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgQ29u
dGFpbmVyTm9kZTo6YXR0YWNoKCk7Ci0gICAgaWYgKEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJl
RGF0YSgpKSB7Ci0gICAgICAgIGlmIChyZC0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNv
b25BZnRlckF0dGFjaCkgeworICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7ICAgCisgICAgICAgIEVs
ZW1lbnRSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIGlmIChkYXRhLT5tX25l
ZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKSB7CiAgICAgICAgICAgICBp
ZiAoaXNGb2N1c2FibGUoKSAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCiAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwot
ICAgICAgICAgICAgcmQtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRh
Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGRhdGEtPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRh
dGVTb29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTcyOSw4
ICs2NzcsOCBAQCB2b2lkIEVsZW1lbnQ6OmF0dGFjaCgpCiB2b2lkIEVsZW1lbnQ6OmRldGFjaCgp
CiB7CiAgICAgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7Ci0gICAgaWYgKEVsZW1lbnRS
YXJlRGF0YSogcmQgPSByYXJlRGF0YSgpKQotICAgICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxl
KHRoaXMpOworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5yZXNl
dENvbXB1dGVkU3R5bGUodGhpcyk7CiAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CiB9CiAK
QEAgLTc0Nyw4ICs2OTUsOCBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdl
IGNoCiAjZW5kaWYKIAogICAgIGlmICgoY2hhbmdlID4gTm9DaGFuZ2UgfHwgY2hhbmdlZCgpKSkg
ewotICAgICAgICBpZiAoRWxlbWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAg
ICAgICByZC0+cmVzZXRDb21wdXRlZFN0eWxlKHRoaXMpOworICAgICAgICBpZiAoaGFzUmFyZURh
dGEoKSkKKyAgICAgICAgICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsK
ICAgICB9CiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBj
aGFuZ2VkKCkpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCkt
PnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwpAQCAtMTE1Niw3ICsxMTA0
LDcgQEAgdm9pZCBFbGVtZW50Ojpmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91cwogICAgICAgICBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgp
KTsKIAogICAgIGlmICghaXNGb2N1c2FibGUoKSkgewotICAgICAgICBjcmVhdGVSYXJlRGF0YSgp
LT5tX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gdHJ1ZTsKKyAg
ICAgICAgZW5zdXJlUmFyZURhdGEoKS0+bV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25B
ZnRlckF0dGFjaCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAt
MTIyMiwxNSArMTE3MCwxNCBAQCBTdHJpbmcgRWxlbWVudDo6dGl0bGUoKSBjb25zdAogCiBJbnRT
aXplIEVsZW1lbnQ6Om1pbmltdW1TaXplRm9yUmVzaXppbmcoKSBjb25zdAogewotICAgIGNvbnN0
IEVsZW1lbnRSYXJlRGF0YSogcmQgPSByYXJlRGF0YSgpOwotICAgIHJldHVybiByZCA/IHJkLT5t
X21pbmltdW1TaXplRm9yUmVzaXppbmcgOiBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
OworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bV9taW5pbXVtU2l6ZUZv
clJlc2l6aW5nIDogZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKTsKIH0KIAogdm9pZCBF
bGVtZW50OjpzZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKGNvbnN0IEludFNpemUmIHNpemUpCiB7
Ci0gICAgaWYgKHNpemUgPT0gZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSAmJiAhcmFy
ZURhdGEoKSkKKyAgICBpZiAoc2l6ZSA9PSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
ICYmICFoYXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm47Ci0gICAgY3JlYXRlUmFyZURhdGEo
KS0+bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nID0gc2l6ZTsKKyAgICBlbnN1cmVSYXJlRGF0YSgp
LT5tX21pbmltdW1TaXplRm9yUmVzaXppbmcgPSBzaXplOwogfQogCiBSZW5kZXJTdHlsZSogRWxl
bWVudDo6Y29tcHV0ZWRTdHlsZSgpCkBAIC0xMjQzLDE2ICsxMTkwLDE2IEBAIFJlbmRlclN0eWxl
KiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKCkKICAgICAgICAgLy8gZG9jdW1lbnQgdHJlZSBhbmQg
ZmlndXJlIG91dCB3aGVuIHRvIGRlc3Ryb3kgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBzdWNoIGVs
ZW1lbnRzLgogICAgICAgICByZXR1cm4gMDsKIAotICAgIEVsZW1lbnRSYXJlRGF0YSogcmQgPSBj
cmVhdGVSYXJlRGF0YSgpOwotICAgIGlmICghcmQtPm1fY29tcHV0ZWRTdHlsZSkKLSAgICAgICAg
cmQtPm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVG
b3JFbGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IDAp
OwotICAgIHJldHVybiByZC0+bV9jb21wdXRlZFN0eWxlOworICAgIEVsZW1lbnRSYXJlRGF0YSog
ZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUp
CisgICAgICAgIGRhdGEtPm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVk
U3R5bGUoKSA6IDApOworICAgIHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CiB9CiAKIHZv
aWQgRWxlbWVudDo6Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKIHsKLSAgICBpZiAoRWxl
bWVudFJhcmVEYXRhKiByZCA9IHJhcmVEYXRhKCkpCi0gICAgICAgIHJkLT5tX25lZWRzRm9jdXNB
cHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gZmFsc2U7CisgICAgaWYgKGhhc1JhcmVE
YXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCktPm1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVT
b29uQWZ0ZXJBdHRhY2ggPSBmYWxzZTsKICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUo
KSA9PSB0aGlzKQogICAgICAgICBkb2N1bWVudCgpLT5jYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRh
dGUoKTsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDM2OTEyKQorKysgV2ViQ29yZS9kb20vRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTMgKzE5Nyw2IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgaGFz
UmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhOyB9Ci0gICAgdm9pZCBzZXRI
YXNSYXJlRGF0YShib29sIGIgPSB0cnVlKSB7IG1faGFzUmFyZURhdGEgPSBiOyB9Ci0KLSAgICBF
bGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudFJhcmVEYXRhKiBy
YXJlRGF0YSgpIGNvbnN0OwotICAgIEVsZW1lbnRSYXJlRGF0YSogY3JlYXRlUmFyZURhdGEoKTsK
LQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpIGNvbnN0IHt9CkBAIC0yMTksOCArMjEy
LDEzIEBAIHByaXZhdGU6CiAKIHByaXZhdGU6CiAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7
CisgICAgdmlydHVhbCBOb2RlUmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKCk7CiAKIHByb3RlY3Rl
ZDoKKyAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCk7CisgICAgY29uc3QgRWxlbWVudFJh
cmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OworICAgIEVsZW1lbnRSYXJlRGF0YSogZW5zdXJlUmFy
ZURhdGEoKTsKKyAgICAKICAgICBtdXRhYmxlIFJlZlB0cjxOYW1lZEF0dHJNYXA+IG5hbWVkQXR0
ck1hcDsKIAogICAgIC8vIFRoZXNlIHR3byBiaXRzIGFyZSByZWFsbHkgdXNlZCBieSB0aGUgU3R5
bGVkRWxlbWVudCBzdWJjbGFzcywgYnV0IHRoZXkgYXJlIHB1bGxlZCB1cCBoZXJlIGluIG9yZGVy
IHRvIGJlIHNoYXJlZCB3aXRoIG90aGVyCkBAIC0yMzYsNyArMjM0LDYgQEAgcHJvdGVjdGVkOgog
CiBwcml2YXRlOgogICAgIGJvb2wgbV9wYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCA6IDE7Ci0gICAg
Ym9vbCBtX2hhc1JhcmVEYXRhIDogMTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1l
bnRSYXJlRGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRh
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qKgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlk
IFNtaXRoIDxjYXRmaXNoLm1hbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEVsZW1lbnRSYXJlRGF0
YV9oCisjZGVmaW5lIEVsZW1lbnRSYXJlRGF0YV9oCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2Ns
YXNzIEVsZW1lbnRSYXJlRGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgeworcHVibGljOgorICAg
IEVsZW1lbnRSYXJlRGF0YShFbGVtZW50Kik7CisgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUo
RWxlbWVudCopOworICAgIAorICAgIEludFNpemUgbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOwor
ICAgIFJlbmRlclN0eWxlKiBtX2NvbXB1dGVkU3R5bGU7Cit9OworCitpbmxpbmUgSW50U2l6ZSBk
ZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCit7CisgICAgcmV0dXJuIEludFNpemUoSU5U
X01BWCwgSU5UX01BWCk7Cit9CisKK2lubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJl
RGF0YShFbGVtZW50KiBlKQorICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRN
aW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCisgICAgLCBtX2NvbXB1dGVkU3R5bGUoMCkKK3sKK30K
KworaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNldENvbXB1dGVkU3R5bGUoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBpZiAoIW1fY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVuZGVy
QXJlbmEoKSk7CisgICAgbV9jb21wdXRlZFN0eWxlID0gMDsKK30KKworfQorI2VuZGlmIEVsZW1l
bnRSYXJlRGF0YV9oCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDM2OTEy
KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsOCArNTcsOCBAQCB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKICAgICAKIHN0YXRpYyBI
YXNoU2V0PEV2ZW50VGFyZ2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cyA9IDA7IAogCi1FdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9j
LCBib29sIGlzRWxlbWVudCkKLSAgICA6IE5vZGUoZG9jLCBpc0VsZW1lbnQpCitFdmVudFRhcmdl
dE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9jLCBib29sIGlzRWxlbWVudCwgYm9v
bCBpc0NvbnRhaW5lcikKKyAgICA6IE5vZGUoZG9jLCBpc0VsZW1lbnQsIGlzQ29udGFpbmVyKQog
ICAgICwgbV9yZWdkTGlzdGVuZXJzKDApCiB7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAko
cmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEV2ZW50VGFyZ2V0
Tm9kZSA6IHB1YmxpYyBOb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEV2ZW50
VGFyZ2V0IHsKIHB1YmxpYzoKLSAgICBFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqLCBib29sIGlz
RWxlbWVudCA9IGZhbHNlKTsKKyAgICBFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqLCBib29sIGlz
RWxlbWVudCA9IGZhbHNlLCBib29sIGlzQ29udGFpbmVyID0gZmFsc2UpOwogICAgIHZpcnR1YWwg
fkV2ZW50VGFyZ2V0Tm9kZSgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRXZlbnRUYXJnZXROb2Rl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDM2OTEyKQorKysgV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
TmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgpAQCAtNjIsMjggKzYzLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotc3RydWN0IE5vZGVMaXN0c05v
ZGVEYXRhIHsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RT
ZXQ7Ci0gICAgTm9kZUxpc3RTZXQgbV9saXN0c1dpdGhDYWNoZXM7Ci0KLSAgICBEeW5hbWljTm9k
ZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOwotICAgIENhY2hl
TWFwIG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENh
Y2hlczsKLQotICAgIH5Ob2RlTGlzdHNOb2RlRGF0YSgpCi0gICAgewotICAgICAgICBkZWxldGVB
bGxWYWx1ZXMobV9jbGFzc05vZGVMaXN0Q2FjaGVzKTsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fbmFtZU5vZGVMaXN0Q2FjaGVzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVDYWNo
ZXMoKTsKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci19OwotCisgICAgCiAvLyAtLS0tLS0tLQogCiBi
b29sIE5vZGU6OmlzU3VwcG9ydGVkKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQpAQCAtMTU2LDEyICsxMzYsMTEgQEAgTm9kZTo6U3R5bGVDaGFuZ2UgTm9kZTo6
ZGlmZiggUmVuZGVyU3R5bAogICAgIHJldHVybiBjaDsKIH0KIAotTm9kZTo6Tm9kZShEb2N1bWVu
dCogZG9jLCBib29sIGlzRWxlbWVudCkKK05vZGU6Ok5vZGUoRG9jdW1lbnQqIGRvYywgYm9vbCBp
c0VsZW1lbnQsIGJvb2wgaXNDb250YWluZXIpCiAgICAgOiBtX2RvY3VtZW50KGRvYykKICAgICAs
IG1fcHJldmlvdXMoMCkKICAgICAsIG1fbmV4dCgwKQogICAgICwgbV9yZW5kZXJlcigwKQotICAg
ICwgbV90YWJJbmRleCgwKQogICAgICwgbV9zdHlsZUNoYW5nZShOb1N0eWxlQ2hhbmdlKQogICAg
ICwgbV9oYXNJZChmYWxzZSkKICAgICAsIG1faGFzQ2xhc3MoZmFsc2UpCkBAIC0xNjksMTQgKzE0
OCwxNCBAQCBOb2RlOjpOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50CiAgICAgLCBt
X2hhc0NoYW5nZWRDaGlsZChmYWxzZSkKICAgICAsIG1faW5Eb2N1bWVudChmYWxzZSkKICAgICAs
IG1faXNMaW5rKGZhbHNlKQotICAgICwgbV9mb2N1c2VkKGZhbHNlKQogICAgICwgbV9hY3RpdmUo
ZmFsc2UpCiAgICAgLCBtX2hvdmVyZWQoZmFsc2UpCiAgICAgLCBtX2luQWN0aXZlQ2hhaW4oZmFs
c2UpCiAgICAgLCBtX2luRGV0YWNoKGZhbHNlKQogICAgICwgbV9pblN1YnRyZWVNYXJrKGZhbHNl
KQotICAgICwgbV90YWJJbmRleFNldEV4cGxpY2l0bHkoZmFsc2UpCisgICAgLCBtX2hhc1JhcmVE
YXRhKGZhbHNlKQogICAgICwgbV9pc0VsZW1lbnQoaXNFbGVtZW50KQorICAgICwgbV9pc0NvbnRh
aW5lcihpc0NvbnRhaW5lcikKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNob3VsZElnbm9y
ZUxlYWtzKQpAQCAtMjA5LDkgKzE4OCwxOSBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgZWxzZQogICAg
ICAgICBub2RlQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgotCi0gICAgaWYgKG1fbm9kZUxp
c3RzICYmIG1fZG9jdW1lbnQpCi0gICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU5vZGVMaXN0Q2Fj
aGUoKTsKKyAgICAKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIEFTU0VSVCghTm9k
ZVJhcmVEYXRhOjpyYXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKG1fZG9jdW1lbnQgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAg
ICAgICBtX2RvY3VtZW50LT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAgICAgIAorICAgICAg
ICBOb2RlUmFyZURhdGE6Ok5vZGVSYXJlRGF0YU1hcCYgZGF0YU1hcCA9IE5vZGVSYXJlRGF0YTo6
cmFyZURhdGFNYXAoKTsKKyAgICAgICAgTm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gZGF0YU1hcC5maW5kKHRoaXMpOworICAgICAgICBBU1NFUlQoaXQgIT0gZGF0
YU1hcC5lbmQoKSk7CisgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBkYXRhTWFw
LnJlbW92ZShpdCk7CisgICAgfQogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIGRldGFj
aCgpOwpAQCAtMjIyLDYgKzIxMSw0NCBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgICAgIG1fbmV4dC0+
c2V0UHJldmlvdXNTaWJsaW5nKDApOwogfQogCitpbmxpbmUgTm9kZVJhcmVEYXRhKiBOb2RlOjpy
YXJlRGF0YSgpCit7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAgIHJldHVybiBOb2Rl
UmFyZURhdGE6OnJhcmVEYXRhRnJvbU1hcCh0aGlzKTsKK30KKyAgICAKK2lubGluZSBjb25zdCBO
b2RlUmFyZURhdGEqIE5vZGU6OnJhcmVEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxjb25zdCBOb2RlUmFyZURhdGEqPihyYXJlRGF0YSgpKTsKK30KKworTm9kZVJhcmVEYXRh
KiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpCit7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAg
ICAgIHJldHVybiByYXJlRGF0YSgpOworICAgIAorICAgIEFTU0VSVCghTm9kZVJhcmVEYXRhOjpy
YXJlRGF0YU1hcCgpLmNvbnRhaW5zKHRoaXMpKTsKKyAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBj
cmVhdGVSYXJlRGF0YSgpOworICAgIE5vZGVSYXJlRGF0YTo6cmFyZURhdGFNYXAoKS5zZXQodGhp
cywgZGF0YSk7CisgICAgbV9oYXNSYXJlRGF0YSA9IHRydWU7CisgICAgcmV0dXJuIGRhdGE7Cit9
CisgICAgCitOb2RlUmFyZURhdGEqIE5vZGU6OmNyZWF0ZVJhcmVEYXRhKCkKK3sKKyAgICByZXR1
cm4gbmV3IE5vZGVSYXJlRGF0YTsKK30KKyAgICAKK3Nob3J0IE5vZGU6OnRhYkluZGV4KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPnRhYkluZGV4KCkg
OiAwOworfQorICAgIAordm9pZCBOb2RlOjpzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkK
K3sKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXRUYWJJbmRleEV4cGxpY2l0bHkoaSk7Cit9CisK
IFN0cmluZyBOb2RlOjpub2RlVmFsdWUoKSBjb25zdAogewogICByZXR1cm4gU3RyaW5nKCk7CkBA
IC0yNDAsMjIgKzI2NywxMyBAQCB2b2lkIE5vZGU6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcm
IC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9kZXMoKQogewotICAgIGlm
ICghbV9ub2RlTGlzdHMpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNO
b2RlRGF0YSk7CisgICAgTm9kZVJhcmVEYXRhICpkYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKKyAg
ICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7CisgICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhz
dGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPihuZXcgTm9kZUxpc3RzTm9kZURhdGEpKTsK
ICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogICAgIH0KIAotICAgIHJl
dHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgJm1fbm9kZUxpc3RzLT5tX2NoaWxkTm9k
ZUxpc3RDYWNoZXMpOwotfQotCi1Ob2RlKiBOb2RlOjp2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5vZGU6OnZpcnR1YWxMYXN0Q2hpbGQoKSBj
b25zdAotewotICAgIHJldHVybiAwOworICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUo
dGhpcywgJmRhdGEtPm5vZGVMaXN0cygpLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOwogfQogCiBi
b29sIE5vZGU6OnZpcnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdApA
QCAtNDYzLDE1ICs0ODEsMjcgQEAgYm9vbCBOb2RlOjpjYW5MYXp5QXR0YWNoKCkKIHsKICAgICBy
ZXR1cm4gc2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gdGhpczsKIH0KKyAgICAKK3ZvaWQgTm9kZTo6
c2V0Rm9jdXMoYm9vbCBiKQoreyAKKyAgICBpZihiIHx8IGhhc1JhcmVEYXRhKCkpCisgICAgICAg
IGVuc3VyZVJhcmVEYXRhKCktPm1fZm9jdXNlZCA9IGI7Cit9CiAKK2Jvb2wgTm9kZTo6cmFyZURh
dGFGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CisgICAgcmV0
dXJuIHJhcmVEYXRhKCktPm1fZm9jdXNlZDsKK30KKyAgICAKIGJvb2wgTm9kZTo6aXNGb2N1c2Fi
bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRseTsKKyAgICBy
ZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT50YWJJbmRleFNldEV4cGxpY2l0bHko
KTsKIH0KIAogYm9vbCBOb2RlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBj
b25zdAogewotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIG1fdGFiSW5kZXggPj0gMDsKKyAg
ICByZXR1cm4gaXNGb2N1c2FibGUoKSAmJiB0YWJJbmRleCgpID49IDA7CiB9CiAKIGJvb2wgTm9k
ZTo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkBAIC00OTAsMjUgKzUyMCwyOCBAQCB1bnNpZ25l
ZCBOb2RlOjpub2RlSW5kZXgoKSBjb25zdAogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05v
ZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7
Ci0gICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5v
ZGVSYXJlRGF0YSAqZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2Rl
TGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2Rl
TGlzdHNOb2RlRGF0YT4obmV3IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50
KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9IGVsc2UgaWYgKCFtX2RvY3VtZW50LT5oYXNO
b2RlTGlzdENhY2hlcygpKSB7CiAgICAgICAgIC8vIFdlIGhhdmVuJ3QgYmVlbiByZWNlaXZpbmcg
bm90aWZpY2F0aW9ucyB3aGlsZSB0aGVyZSB3ZXJlIG5vIHJlZ2lzdGVyZWQgbGlzdHMsIHNvIHRo
ZSBjYWNoZSBpcyBpbnZhbGlkIG5vdy4KLSAgICAgICAgbV9ub2RlTGlzdHMtPmludmFsaWRhdGVD
YWNoZXMoKTsKKyAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoKTsK
ICAgICB9CiAKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAgIG1fbm9kZUxp
c3RzLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CisgICAgICAgIGRhdGEtPm5vZGVMaXN0
cygpLT5tX2xpc3RzV2l0aENhY2hlcy5hZGQobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdp
c3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgQVNTRVJU
KG1fbm9kZUxpc3RzKTsKKyAgICBBU1NFUlQocmFyZURhdGEoKSk7CisgICAgQVNTRVJUKHJhcmVE
YXRhKCktPm5vZGVMaXN0cygpKTsKICAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpIHsKLSAg
ICAgICAgbV9ub2RlTGlzdHMtPm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKLSAgICAg
ICAgaWYgKG1fbm9kZUxpc3RzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fbm9kZUxpc3Rz
LmNsZWFyKCk7CisgICAgICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAg
ICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlzdCk7Cisg
ICAgICAgIGlmIChkYXRhLT5ub2RlTGlzdHMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBk
YXRhLT5jbGVhck5vZGVMaXN0cygpOwogICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9k
ZUxpc3RDYWNoZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTE2LDEzICs1NDksMTYgQEAgdm9p
ZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bgogCiB2b2lkIE5vZGU6Om5vdGlm
eUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX25vZGVMaXN0
cykKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBOb2RlUmFy
ZURhdGEgKmRhdGEgPSByYXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fbm9kZUxpc3RzLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERl
cGVuZE9uQXR0cmlidXRlcygpOworICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2Fj
aGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogCi0gICAgaWYgKG1fbm9kZUxpc3RzLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9ub2RlTGlzdHMuY2xlYXIoKTsKKyAgICBpZiAoZGF0YS0+bm9k
ZUxpc3RzKCktPmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwog
ICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAgICAgfQogfQpAQCAt
NTM1LDE3ICs1NzEsMjAgQEAgdm9pZCBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFu
ZwogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCkKIHsK
LSAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgaWYgKCFk
YXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ub2RlTGlzdHMtPmlu
dmFsaWRhdGVDYWNoZXMoKTsKKyAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hl
cygpOwogCi0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQg
PSBtX25vZGVMaXN0cy0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlz
dHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX25vZGVMaXN0cy0+bV9saXN0
c1dpdGhDYWNoZXMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICBOb2RlTGlzdHNOb2RlRGF0
YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3Rz
V2l0aENhY2hlcy5lbmQoKTsKKyAgICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNl
dDo6aXRlcmF0b3IgaSA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdp
bigpOyBpICE9IGVuZDsgKytpKQogICAgICAgICAoKmkpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAot
ICAgIGlmIChtX25vZGVMaXN0cy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbm9kZUxpc3RzLmNs
ZWFyKCk7CisgICAgaWYgKGRhdGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZGF0YS0+Y2xlYXJOb2RlTGlzdHMoKTsKICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxp
c3RDYWNoZSgpOwogICAgIH0KIH0KQEAgLTU1NiwxNiArNTk1LDYgQEAgdm9pZCBOb2RlOjpub3Rp
ZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZQogICAgICAgICBuLT5ub3RpZnlMb2NhbE5vZGVMaXN0
c0NoaWxkcmVuQ2hhbmdlZCgpOwogfQogCi11bnNpZ25lZCBOb2RlOjpjaGlsZE5vZGVDb3VudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgKk5vZGU6OmNoaWxkTm9kZSh1bnNp
Z25lZCAvKmluZGV4Ki8pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGUgKk5vZGU6
OnRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSAqc3RheVdpdGhpbikgY29uc3QKIHsKICAgICBp
ZiAoZmlyc3RDaGlsZCgpKQpAQCAtMTE5OCwxMiArMTIyNywxMyBAQCBQYXNzUmVmUHRyPE5vZGVM
aXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6Omdl
dEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgaWYgKCFt
X25vZGVMaXN0cykgewotICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVE
YXRhKTsKKyAgICBOb2RlUmFyZURhdGEgKmRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOworICAgIGlm
ICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKHN0ZDo6
YXV0b19wdHI8Tm9kZUxpc3RzTm9kZURhdGE+KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSkpOwogICAg
ICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCi0gICAgcGFpcjxO
b2RlTGlzdHNOb2RlRGF0YTo6Q2FjaGVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX25v
ZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZXMuYWRkKGVsZW1lbnROYW1lLCAwKTsKKyAgICBw
YWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9
IGRhdGEtPm5vZGVMaXN0cygpLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUs
IDApOwogICAgIGlmIChyZXN1bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29u
ZCA9IG5ldyBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczsKICAgICAKQEAgLTEyMTIsMTIgKzEyNDIs
MTMgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogCiBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYg
Y2xhc3NOYW1lcykKIHsKLSAgICBpZiAoIW1fbm9kZUxpc3RzKSB7Ci0gICAgICAgIG1fbm9kZUxp
c3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIE5vZGVSYXJlRGF0YSAqZGF0YSA9
IGVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAg
ICBkYXRhLT5zZXROb2RlTGlzdHMoc3RkOjphdXRvX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4obmV3
IE5vZGVMaXN0c05vZGVEYXRhKSk7CiAgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2Fj
aGUoKTsKICAgICB9CiAKLSAgICBwYWlyPE5vZGVMaXN0c05vZGVEYXRhOjpDYWNoZU1hcDo6aXRl
cmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMu
YWRkKGNsYXNzTmFtZXMsIDApOworICAgIHBhaXI8Tm9kZUxpc3RzTm9kZURhdGE6OkNhY2hlTWFw
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fY2xhc3NOb2Rl
TGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywgMCk7CiAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAg
ICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbmV3IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
OwogICAgIApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDggKzU2LDcgQEAgY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0cmluZ0J1aWxkZXI7Ci0KLXN0
cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKK2NsYXNzIE5vZGVSYXJlRGF0YTsKIAogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtOTksNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBT
dHlsZUNoYW5nZSB7IE5vQ2hhbmdlLCBOb0luaGVyaXQsIEluaGVyaXQsIERldGFjaCwgRm9yY2Ug
fTsgICAgCiAgICAgc3RhdGljIFN0eWxlQ2hhbmdlIGRpZmYoUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSopOwogCi0gICAgTm9kZShEb2N1bWVudCosIGJvb2wgaXNFbGVtZW50ID0gZmFsc2UpOwor
ICAgIE5vZGUoRG9jdW1lbnQqLCBib29sIGlzRWxlbWVudCA9IGZhbHNlLCBib29sIGlzQ29udGFp
bmVyID0gZmFsc2UpOwogICAgIHZpcnR1YWwgfk5vZGUoKTsKIAogICAgIC8vIERPTSBtZXRob2Rz
ICYgYXR0cmlidXRlcyBmb3IgTm9kZQpAQCAtMTE0LDggKzExMyw4IEBAIHB1YmxpYzoKICAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CiAgICAg
Tm9kZSogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGNoaWxkTm9kZXMoKTsKLSAgICBOb2RlKiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbEZpcnN0Q2hpbGQoKTsgfQotICAgIE5vZGUqIGxhc3RD
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxMYXN0Q2hpbGQoKTsgfQorICAgIE5vZGUqIGZp
cnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBpc0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckZp
cnN0Q2hpbGQoKSA6IDA7IH0KKyAgICBOb2RlKiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBp
c0NvbnRhaW5lck5vZGUoKSA/IGNvbnRhaW5lckxhc3RDaGlsZCgpIDogMDsgfQogICAgIHZpcnR1
YWwgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOYW1lZEF0dHJNYXAq
IGF0dHJpYnV0ZXMoKSBjb25zdDsKIApAQCAtMTU2LDYgKzE1NSw3IEBAIHB1YmxpYzoKICAgICAv
LyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAgICBib29sIGlzRWxlbWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2lzRWxlbWVudDsgfQorICAgIGJvb2wgaXNDb250YWluZXJO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbnRhaW5lcjsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0hUTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIEVOQUJMRShTVkcp
CkBAIC0yNTAsNyArMjUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5BY3RpdmVDaGFpbigpIGNv
bnN0IHsgcmV0dXJuIG1faW5BY3RpdmVDaGFpbjsgfQogICAgIGJvb2wgaW5EZXRhY2goKSBjb25z
dCB7IHJldHVybiBtX2luRGV0YWNoOyB9CiAgICAgYm9vbCBob3ZlcmVkKCkgY29uc3QgeyByZXR1
cm4gbV9ob3ZlcmVkOyB9Ci0gICAgYm9vbCBmb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9mb2N1
c2VkOyB9CisgICAgYm9vbCBmb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZURhdGEoKSA/
IHJhcmVEYXRhRm9jdXNlZCgpIDogZmFsc2U7IH0KICAgICBib29sIGF0dGFjaGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRhY2hlZDsgfQogICAgIHZvaWQgc2V0QXR0YWNoZWQoYm9vbCBiID0gdHJ1
ZSkgeyBtX2F0dGFjaGVkID0gYjsgfQogICAgIGJvb2wgY2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3R5bGVDaGFuZ2UgIT0gTm9TdHlsZUNoYW5nZTsgfQpAQCAtMjcxLDExICsyNzEsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgbGF6eUF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5MYXp5
QXR0YWNoKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBiID0gdHJ1ZSkgeyBt
X2ZvY3VzZWQgPSBiOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgYiA9IHRydWUp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBiID0gdHJ1ZSwgYm9vbCBwYXVzZT1m
YWxzZSkgeyBtX2FjdGl2ZSA9IGI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29s
IGIgPSB0cnVlKSB7IG1faG92ZXJlZCA9IGI7IH0KIAotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4OyB9CisgICAgdmlydHVhbCBzaG9ydCB0YWJJ
bmRleCgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogV2hldGhlciB0aGlzIG5vZGUgY2FuIHJl
Y2VpdmUgdGhlIGtleWJvYXJkIGZvY3VzLgpAQCAtMzI1LDggKzMyNSw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkgY29uc3QgeyByZXR1cm4gbm9kZVR5cGUoKSA9
PSBFTlRJVFlfUkVGRVJFTkNFX05PREU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxs
b3dlZChOb2RlVHlwZSkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNo
aWxkTm9kZUNvdW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlKiBjaGlsZE5vZGUodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gaXNDb250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGVDb3VudCgpIDogMDsg
fQorICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gaXND
b250YWluZXJOb2RlKCkgPyBjb250YWluZXJDaGlsZE5vZGUoaW5kZXgpIDogMDsgfQogCiAgICAg
LyoqCiAgICAgICogRG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmlu
ZCB0aGUgbm9kZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuIFRoaXMgdXNlcyB0aGUgc2FtZSBv
cmRlciB0aGF0CkBAIC00OTcsMTMgKzQ5NywyMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Qg
eyB9Ci0gICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSkKLSAgICB7IAotICAg
ICAgICBtX3RhYkluZGV4ID0gaTsgCi0gICAgICAgIG1fdGFiSW5kZXhTZXRFeHBsaWNpdGx5ID0g
dHJ1ZTsKLSAgICB9CisgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQgaSk7Cisg
ICAgCisgICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7
IH0KKyAgICAKKyAgICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhKCk7CisgICAgY29uc3QgTm9kZVJh
cmVEYXRhKiByYXJlRGF0YSgpIGNvbnN0OworICAgIE5vZGVSYXJlRGF0YSogZW5zdXJlUmFyZURh
dGEoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbEhhc1RhZ05hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgTm9kZVJhcmVEYXRh
KiBjcmVhdGVSYXJlRGF0YSgpOworICAgIE5vZGUqIGNvbnRhaW5lckNoaWxkTm9kZSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgY29udGFpbmVyQ2hpbGROb2RlQ291bnQoKSBj
b25zdDsKKyAgICBOb2RlKiBjb250YWluZXJGaXJzdENoaWxkKCkgY29uc3Q7CisgICAgTm9kZSog
Y29udGFpbmVyTGFzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCByYXJlRGF0YUZvY3VzZWQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkg
Y29uc3Q7CiAKICAgICBEb2NQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CkBAIC01MTEsMTAgKzUy
MSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogbV9uZXh0OwogICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJlcjsKIAotICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7Ci0K
LSAgICBzaG9ydCBtX3RhYkluZGV4OwotCiAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBt
b3JlIHRoYW4gMTYgYml0cyBoZXJlIC0tIGFkZGluZyBtb3JlIHdvdWxkIGluY3JlYXNlIHRoZSBz
aXplIG9mIGFsbCBOb2RlcwogCiAgICAgdW5zaWduZWQgbV9zdHlsZUNoYW5nZSA6IDI7CkBAIC01
MjQsMjUgKzUzMCwyMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDaGFuZ2VkQ2hpbGQgOiAx
OwogICAgIGJvb2wgbV9pbkRvY3VtZW50IDogMTsKICAgICBib29sIG1faXNMaW5rIDogMTsKLSAg
ICBib29sIG1fZm9jdXNlZCA6IDE7CiAgICAgYm9vbCBtX2FjdGl2ZSA6IDE7CiAgICAgYm9vbCBt
X2hvdmVyZWQgOiAxOwogICAgIGJvb2wgbV9pbkFjdGl2ZUNoYWluIDogMTsKICAgICBib29sIG1f
aW5EZXRhY2ggOiAxOwogICAgIGJvb2wgbV9pblN1YnRyZWVNYXJrIDogMTsKLSAgICBib29sIG1f
dGFiSW5kZXhTZXRFeHBsaWNpdGx5IDogMTsKKyAgICBib29sIG1faGFzUmFyZURhdGEgOiAxOwog
ICAgIGNvbnN0IGJvb2wgbV9pc0VsZW1lbnQgOiAxOwotICAgIC8vIG5vIGJpdHMgbGVmdAorICAg
IGNvbnN0IGJvb2wgbV9pc0NvbnRhaW5lciA6IDE7CisgICAgLy8gbm8gYml0cyBsZWZ0ICAgCiAK
ICAgICBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKIAogICAgIHZvaWQgYXBwZW5k
VGV4dENvbnRlbnQoYm9vbCBjb252ZXJ0QlJzVG9OZXdsaW5lcywgU3RyaW5nQnVpbGRlciYpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBOb2RlKiB2aXJ0dWFsRmlyc3RDaGlsZCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgTm9kZSogdmlydHVhbExhc3RDaGlsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCB2aXJ0dWFsSGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiB9OwotCiB9
IC8vbmFtZXNwYWNlCiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk2IEBACisvKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0aCA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBOb2RlUmFyZURhdGFfaAorI2RlZmluZSBOb2RlUmFyZURhdGFf
aAorCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CisgICAgdHlw
ZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OworICAgIE5vZGVMaXN0
U2V0IG1fbGlzdHNXaXRoQ2FjaGVzOworICAgIAorICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
IG1fY2hpbGROb2RlTGlzdENhY2hlczsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyo+IENhY2hlTWFwOworICAgIENhY2hlTWFwIG1fY2xh
c3NOb2RlTGlzdENhY2hlczsKKyAgICBDYWNoZU1hcCBtX25hbWVOb2RlTGlzdENhY2hlczsKKyAg
ICAKKyAgICB+Tm9kZUxpc3RzTm9kZURhdGEoKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fY2xhc3NOb2RlTGlzdENhY2hlcyk7CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX25h
bWVOb2RlTGlzdENhY2hlcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hl
cygpOworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKK307CisgICAgCitjbGFzcyBOb2RlUmFyZURhdGEg
eworcHVibGljOiAgICAKKyAgICBOb2RlUmFyZURhdGEoKQorICAgICAgICA6IG1fZm9jdXNlZChm
YWxzZSkKKyAgICAgICAgLCBtX3RhYkluZGV4KDApCisgICAgICAgICwgbV90YWJJbmRleFNldEV4
cGxpY2l0bHkoZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNv
b25BZnRlckF0dGFjaChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdHlwZWRlZiBIYXNoTWFw
PGNvbnN0IE5vZGUqLCBOb2RlUmFyZURhdGEqPiBOb2RlUmFyZURhdGFNYXA7CisgICAgCisgICAg
c3RhdGljIE5vZGVSYXJlRGF0YU1hcCYgcmFyZURhdGFNYXAoKQorICAgIHsKKyAgICAgICAgc3Rh
dGljIE5vZGVSYXJlRGF0YU1hcCogZGF0YU1hcCA9IG5ldyBOb2RlUmFyZURhdGFNYXA7CisgICAg
ICAgIHJldHVybiAqZGF0YU1hcDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE5vZGVSYXJlRGF0
YSogcmFyZURhdGFGcm9tTWFwKGNvbnN0IE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gcmFyZURhdGFNYXAoKS5nZXQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJO
b2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KKyAgICB2b2lkIHNldE5vZGVMaXN0
cyhzdGQ6OmF1dG9fcHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cy5z
ZXQobGlzdHMucmVsZWFzZSgpKTsgfQorICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMo
KSBjb25zdCB7IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQorICAgIAorICAgIHNob3J0IHRh
YkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQorICAgIHZvaWQgc2V0VGFiSW5k
ZXhFeHBsaWNpdGx5KHNob3J0IGluZGV4KSB7IG1fdGFiSW5kZXggPSBpbmRleDsgbV90YWJJbmRl
eFNldEV4cGxpY2l0bHkgPSB0cnVlOyB9CisgICAgYm9vbCB0YWJJbmRleFNldEV4cGxpY2l0bHko
KSBjb25zdCB7IHJldHVybiBtX3RhYkluZGV4U2V0RXhwbGljaXRseTsgfQorICAgICAgICAKKyAg
ICBib29sIG1fZm9jdXNlZCA6IDE7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPE5vZGVMaXN0c05v
ZGVEYXRhPiBtX25vZGVMaXN0czsKKyAgICBzaG9ydCBtX3RhYkluZGV4OworICAgIGJvb2wgbV90
YWJJbmRleFNldEV4cGxpY2l0bHkgOiAxOworcHVibGljOgorICAgIGJvb2wgbV9uZWVkc0ZvY3Vz
QXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA6IDE7IC8vZm9yIEVsZW1lbnRSYXJlRGF0
YQorfTsKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9UcmVlV2Fs
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAkocmV2aXNp
b24gMzY5MTIpCisrKyBXZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiQ29udGFpbmVy
Tm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHJldmlzaW9uIDM2OTEyKQorKysgV2ViQ29yZS94bWwv
WFBhdGhVdGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5B
QkxFKFhQQVRIKQogCi0jaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsK
</data>
<flag name="review"
          id="10726"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>