<?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>22379</bug_id>
          
          <creation_ts>2008-11-20 02:20:35 -0800</creation_ts>
          <short_desc>Make CSSOM use less memory</short_desc>
          <delta_ts>2008-12-06 21:10:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99442</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-20 02:20:35 -0800</bug_when>
    <thetext>CSSOM data structures have quite a bit of air at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99443</commentid>
    <comment_count>1</comment_count>
      <attachid>25308</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-20 02:29:23 -0800</bug_when>
    <thetext>Created attachment 25308
some simple wins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99445</commentid>
    <comment_count>2</comment_count>
      <attachid>25308</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-11-20 02:34:27 -0800</bug_when>
    <thetext>Comment on attachment 25308
some simple wins

r=me

I think it would be a good idea to perf-test, though the only part I&apos;d really worry about is the 15-bit and 31-bit bitfields.

Not required though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99446</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-20 02:50:15 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/css/CSSMutableStyleDeclaration.cpp
Sending        WebCore/css/CSSMutableStyleDeclaration.h
Sending        WebCore/css/CSSProperty.h
Sending        WebCore/css/CSSStyleSheet.cpp
Sending        WebCore/css/CSSStyleSheet.h
Sending        WebCore/css/StyleBase.h
Transmitting file data .......
Committed revision 38617.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99447</commentid>
    <comment_count>4</comment_count>
      <attachid>25308</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-20 02:51:04 -0800</bug_when>
    <thetext>Comment on attachment 25308
some simple wins

Clearing the review flag, futher improvements are possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101164</commentid>
    <comment_count>5</comment_count>
      <attachid>25703</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 00:37:45 -0800</bug_when>
    <thetext>Created attachment 25703
reduce size of the CSSSelector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101166</commentid>
    <comment_count>6</comment_count>
      <attachid>25704</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 01:08:42 -0800</bug_when>
    <thetext>Created attachment 25704
implemented bdash&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101167</commentid>
    <comment_count>7</comment_count>
      <attachid>25704</attachid>
    <who name="">mitz</who>
    <bug_when>2008-12-03 01:15:25 -0800</bug_when>
    <thetext>Comment on attachment 25704
implemented bdash&apos;s comments

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101171</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 01:43:50 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.scons
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/css/CSSGrammar.y
Deleting       WebCore/css/CSSNthSelector.cpp
Deleting       WebCore/css/CSSNthSelector.h
Sending        WebCore/css/CSSParser.cpp
Sending        WebCore/css/CSSParser.h
Sending        WebCore/css/CSSSelector.cpp
Sending        WebCore/css/CSSSelector.h
Sending        WebCore/css/CSSStyleSelector.cpp
Transmitting file data ............
Committed revision 38934.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101172</commentid>
    <comment_count>9</comment_count>
      <attachid>25704</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 01:45:08 -0800</bug_when>
    <thetext>Comment on attachment 25704
implemented bdash&apos;s comments

Clearing the review flag for more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101251</commentid>
    <comment_count>10</comment_count>
      <attachid>25721</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 13:24:08 -0800</bug_when>
    <thetext>Created attachment 25721
Store CSSSelectors to an array instead of a linked list</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101252</commentid>
    <comment_count>11</comment_count>
      <attachid>25721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-03 13:30:47 -0800</bug_when>
    <thetext>Comment on attachment 25721
Store CSSSelectors to an array instead of a linked list

&gt; Index: WebCore/css/CSSSelectorList.cpp
&gt; ===================================================================
&gt; --- WebCore/css/CSSSelectorList.cpp	(revision 0)
&gt; +++ WebCore/css/CSSSelectorList.cpp	(revision 0)
&gt; @@ -0,0 +1,55 @@
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;CSSSelectorList.h&quot;

This needs a license header. Also, we don&apos;t usually put spaces between these two includes.

&gt; Index: WebCore/css/CSSSelectorList.h
&gt; ===================================================================
&gt; --- WebCore/css/CSSSelectorList.h	(revision 0)
&gt; +++ WebCore/css/CSSSelectorList.h	(revision 0)
&gt; @@ -0,0 +1,31 @@
&gt; +#ifndef CSSSelectorList_h
&gt; +#define CSSSelectorList_h

This needs a license header.

It&apos;s a little annoying that this class is called &quot;List&quot; when that so often means linked list, but I think that&apos;s the best name.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101262</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 14:26:34 -0800</bug_when>
    <thetext>This was landed in r38964 (with the license headers)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101263</commentid>
    <comment_count>13</comment_count>
      <attachid>25721</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-03 14:26:54 -0800</bug_when>
    <thetext>Comment on attachment 25721
Store CSSSelectors to an array instead of a linked list

Was landed, clearing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101457</commentid>
    <comment_count>14</comment_count>
      <attachid>25768</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-05 02:36:16 -0800</bug_when>
    <thetext>Created attachment 25768
switch CSSMutableStyleDeclaration out from the DeprecatedValueList.

Also did some simple optimizations to avoid moving memory around when not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101479</commentid>
    <comment_count>15</comment_count>
      <attachid>25768</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-05 06:03:56 -0800</bug_when>
    <thetext>Comment on attachment 25768
switch CSSMutableStyleDeclaration out from the DeprecatedValueList.

&gt; +    Vector&lt;CSSProperty&gt;::const_iterator it = findPropertyWithId(propertyID);

Something I always tell people who are working with Vector is that iterators are just pointers and thus I think it&apos;s unnecessary to use the typedef or use end() to indicate &quot;not found&quot;. So I would have done:

    const CSSProperty* property = findPropertyWithId(propertyID);

And I would have make it return 0 when not found rather than end().

&gt; +    String value = returnText ? (*it).value()-&gt;cssText() : String();

I think it-&gt;value() reads better than (*it).value.

&gt; +            (*it) = property;

No parentheses needed here.

&gt;  void CSSMutableStyleDeclaration::removePropertiesInSet(const int* set, unsigned length, bool notifyChanged)
&gt;  {
&gt; -    bool changed = false;
&gt; -    for (unsigned i = 0; i &lt; length; i++) {
&gt; -        RefPtr&lt;CSSValue&gt; value = getPropertyCSSValue(set[i]);
&gt; -        if (value) {
&gt; -            m_values.remove(CSSProperty(set[i], value.release(), false));
&gt; -            changed = true;
&gt; +    ASSERT(!m_iteratorCount);
&gt; +    
&gt; +    if (m_properties.isEmpty())
&gt; +        return;
&gt; +    
&gt; +    // FIXME: This is often used with static sets and in that case constructing the hash repeatedly is pretty pointless.
&gt; +    HashSet&lt;unsigned&gt; toRemove;
&gt; +    for (unsigned i = 0; i &lt; length; i++)
&gt; +        toRemove.add(set[i]);

I think we should change this function to take a HashSet and make a helper function to use with it. I think the function is *always* used with static sets.

I don&apos;t understand why you chose HashSet&lt;unsigned&gt; rather than HashSet&lt;int&gt; or HashSet&lt;CSSPropertyID&gt;.

&gt; Index: WebCore/css/CSSProperty.h
&gt; ===================================================================
&gt; --- WebCore/css/CSSProperty.h	(revision 39020)
&gt; +++ WebCore/css/CSSProperty.h	(working copy)
&gt; @@ -45,6 +45,7 @@ public:
&gt;          m_id = other.m_id;
&gt;          m_shorthandID = other.m_shorthandID;
&gt;          m_important = other.m_important;
&gt; +        m_implicit = other.m_implicit;
&gt;          m_value = other.m_value;
&gt;          return *this;
&gt;      }


Maybe you could land this change sepaarately?

&gt; +namespace WTF {
&gt; +    template&lt;&gt; struct VectorTraits&lt;WebCore::CSSProperty&gt; : SimpleClassVectorTraits { };
&gt; +}

I think this needs a comment to explain what it means and why we&apos;re doing it.

&gt; -    Vector&lt;int&gt; properties;
&gt; -    DeprecatedValueListConstIterator&lt;CSSProperty&gt; end;
&gt; -    for (DeprecatedValueListConstIterator&lt;CSSProperty&gt; it(style-&gt;valuesIterator()); it != end; ++it) {
&gt; -        const CSSProperty&amp; property = *it;
&gt; -        RefPtr&lt;CSSValue&gt; value = getPropertyCSSValue(property.id());
&gt; -        if (value &amp;&amp; (value-&gt;cssText() == property.value()-&gt;cssText()))
&gt; -            properties.append(property.id());
&gt; +    Vector&lt;int&gt; propertiesToRemove;
&gt; +    {
&gt; +        CSSMutableStyleDeclaration::const_iterator end = style-&gt;end();
&gt; +        for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it) {
&gt; +            const CSSProperty&amp; property = *it;
&gt; +            RefPtr&lt;CSSValue&gt; value = getPropertyCSSValue(property.id());
&gt; +            if (value &amp;&amp; (value-&gt;cssText() == property.value()-&gt;cssText()))
&gt; +                propertiesToRemove.append(property.id());
&gt; +        }
&gt;      }
&gt;  
&gt; -    for (unsigned i = 0; i &lt; properties.size(); i++)
&gt; -        style-&gt;removeProperty(properties[i]);
&gt; +    // FIXME: This should use mass removal.
&gt; +    for (unsigned i = 0; i &lt; propertiesToRemove.size(); i++)
&gt; +        style-&gt;removeProperty(propertiesToRemove[i]);
&gt;  }

Why not change this to use removePropertiesFromSet now? If you&apos;re going to add a comment, please mention the name of the function specifically.

How did you test the impact on speed?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101699</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-06 17:46:14 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 25768 [review])
&gt; &gt; +    Vector&lt;CSSProperty&gt;::const_iterator it = findPropertyWithId(propertyID);
&gt; 
&gt; Something I always tell people who are working with Vector is that iterators
&gt; are just pointers and thus I think it&apos;s unnecessary to use the typedef or use
&gt; end() to indicate &quot;not found&quot;. So I would have done:

I was planning to do an empty slot optimization but then decided that it is not really needed. Use of iterators was a leftover from that.
 
&gt;     const CSSProperty* property = findPropertyWithId(propertyID);

Done.

&gt; I think we should change this function to take a HashSet and make a helper
&gt; function to use with it. I think the function is *always* used with static
&gt; sets.

Left as a future exercise.

&gt; &gt; +        m_implicit = other.m_implicit;
&gt; &gt;          m_value = other.m_value;

&gt; Maybe you could land this change sepaarately?

Ok.

&gt; Why not change this to use removePropertiesFromSet now? If you&apos;re going to add
&gt; a comment, please mention the name of the function specifically.

It not fully equivalent though perhaps it should be. I didn&apos;t want to introduce many behavioral changes.

Left as a future exercise.
 
&gt; How did you test the impact on speed?

PLT seemed to show a slight progression.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101700</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-06 17:46:23 -0800</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Sending        LayoutTests/editing/pasteboard/5780697-2-expected.txt
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/css/CSSMutableStyleDeclaration.cpp
Sending        WebCore/css/CSSMutableStyleDeclaration.h
Sending        WebCore/css/CSSProperty.h
Sending        WebCore/css/CSSStyleDeclaration.cpp
Sending        WebCore/css/CSSStyleSelector.cpp
Sending        WebCore/dom/EventTarget.h
Sending        WebCore/editing/ApplyStyleCommand.cpp
Sending        WebCore/editing/Editor.cpp
Sending        WebCore/editing/ReplaceSelectionCommand.cpp
Sending        WebCore/editing/markup.cpp
Transmitting file data ..............
Committed revision 39075.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101708</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-12-06 21:10:07 -0800</bug_when>
    <thetext>This one is getting crowded, continuing in Bug 22717: Make CSS values use less memory</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25308</attachid>
            <date>2008-11-20 02:29:23 -0800</date>
            <delta_ts>2008-11-20 02:51:04 -0800</delta_ts>
            <desc>some simple wins</desc>
            <filename>cssom-memory-basic.patch</filename>
            <type>text/plain</type>
            <size>7291</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDgtMTEtMjAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3OQorICAgICAgICBNYWtl
IENTU09NIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICAKKyAgICAgICAgLSBTaHJpbmsgQ1NTUHJv
cGVydHkgYnkgaGFsZiBieSB1c2luZyBiaXRmaWVsZHMuCisgICAgICAgIC0gR2V0IHJpZCBvZiBt
X3N0cmljdFBhcnNpbmcgZmllbGQgaW4gU3R5bGVCYXNlIGJ5IG1vdmluZyBpdCB1cCB0byBDU1NT
dHlsZVNoZWV0CisgICAgICAgICAgYW5kIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLiBUaGlz
IHJlZHVjZXMgc2l6ZSBvZiBtYW55IGhpZ2hseSBwb3B1bGFyIG9iamVjdHMuCisKKyAgICAgICAg
KiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0p
OgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFN0cmljdFBhcnNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnVzZVN0cmljdFBh
cnNpbmcpOgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eS5oOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxl
U2hlZXQpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjpzZXRTdHJpY3RQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2hlZXQ6OnVzZVN0cmljdFBhcnNpbmcpOgorICAgICAgICAqIGNzcy9TdHlsZUJhc2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQmFzZTo6dXNlU3RyaWN0UGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJhc2U6OlN0eWxlQmFzZSk6CisKIDIwMDgtMTEtMTkgIERhcmlu
IEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggYnVzdGFnZS4KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9u
IDM4NDA1KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMzgsNiArMzksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24oKQogICAgIDogbV9ub2RlKDApCiAgICAgLCBtX3ZhcmlhYmxl
RGVwZW5kZW50VmFsdWVDb3VudCgwKQorICAgICwgbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQogewog
fQogCkBAIC00NSw2ICs0Nyw3IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRh
YmxlU3QKICAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KQogICAgICwgbV9ub2RlKDAp
CiAgICAgLCBtX3ZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCgwKQorICAgICwgbV9zdHJpY3RQ
YXJzaW5nKCFwYXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpCiB7CiB9CiAKQEAg
LTUzLDYgKzU2LDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdAog
ICAgICwgbV92YWx1ZXModmFsdWVzKQogICAgICwgbV9ub2RlKDApCiAgICAgLCBtX3ZhcmlhYmxl
RGVwZW5kZW50VmFsdWVDb3VudCh2YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQpCisgICAgLCBt
X3N0cmljdFBhcnNpbmcoIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKSkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCiB9CkBAIC02
MSw2ICs2NSw3IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3QKICAg
ICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KQogICAgICwgbV9ub2RlKDApCiAgICAgLCBt
X3ZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCgwKQorICAgICwgbV9zdHJpY3RQYXJzaW5nKCFw
YXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpCiB7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHByb3BlcnRpZXNb
aV0pOwpAQCAtNzUsNiArODAsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgQ1NTTXV0
YWJsZVN0CiB7CiAgICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1lIG5vZGUsIGp1c3Qg
bGVhdmUgdGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCiAgICAgbV92YWx1ZXMgPSBvdGhlci5tX3Zh
bHVlczsKKyAgICBtX3N0cmljdFBhcnNpbmcgPSBvdGhlci5tX3N0cmljdFBhcnNpbmc7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgJKHJldmlzaW9uIDM4NDA1KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw5IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaGFzVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFibGVEZXBlbmRlbnRWYWx1ZUNvdW50ID4gMDsgfQogICAgIAorICAgIHZvaWQgc2V0U3Ry
aWN0UGFyc2luZyhib29sIGIpIHsgbV9zdHJpY3RQYXJzaW5nID0gYjsgfQorICAgIGJvb2wgdXNl
U3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQorICAgIAog
cHJvdGVjdGVkOgogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVu
dFJ1bGUpOwogCkBAIC0xMzEsNyArMTM0LDggQEAgcHJpdmF0ZToKICAKICAgICBEZXByZWNhdGVk
VmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKICAgICBOb2RlKiBtX25vZGU7Ci0gICAg
dW5zaWduZWQgbV92YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQ7CisgICAgdW5zaWduZWQgbV92
YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQgOiAzMTsKKyAgICBib29sIG1fc3RyaWN0UGFyc2lu
ZyA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgJKHJl
dmlzaW9uIDM4NDA1KQorKysgV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsOSArNjEsOSBAQCBwdWJsaWM6CiAKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENTU1Byb3BlcnR5JiwgY29uc3QgQ1NTUHJvcGVydHkmKTsKIAotICAgIC8vIG1ha2Ug
c3VyZSB0aGUgZm9sbG93aW5nIGZpdHMgaW4gNCBieXRlcy4KLSAgICBpbnQgbV9pZDsKLSAgICBp
bnQgbV9zaG9ydGhhbmRJRDsgIC8vIElmIHRoaXMgcHJvcGVydHkgd2FzIHNldCBhcyBwYXJ0IG9m
IGEgc2hvcnRoYW5kLCBnaXZlcyB0aGUgc2hvcnRoYW5kLgorICAgIC8vIE1ha2Ugc3VyZSB0aGUg
Zm9sbG93aW5nIGZpdHMgaW4gNCBieXRlcy4gUmVhbGx5LgorICAgIGludCBtX2lkIDogMTU7Cisg
ICAgaW50IG1fc2hvcnRoYW5kSUQgOiAxNTsgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFz
IHBhcnQgb2YgYSBzaG9ydGhhbmQsIGdpdmVzIHRoZSBzaG9ydGhhbmQuCiAgICAgYm9vbCBtX2lt
cG9ydGFudCA6IDE7CiAgICAgYm9vbCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3Qg
dGhlIHByb3BlcnR5IHdhcyBzZXQgaW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRo
YW5kLgogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzg0MDUpCisrKyBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QCBDU1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlCiAgICAgLCBtX25hbWVz
cGFjZXMoMCkKICAgICAsIG1fY2hhcnNldChjaGFyc2V0KQogICAgICwgbV9sb2FkQ29tcGxldGVk
KGZhbHNlKQorICAgICwgbV9zdHJpY3RQYXJzaW5nKCFwYXJlbnRTaGVldCB8fCBwYXJlbnRTaGVl
dC0+dXNlU3RyaWN0UGFyc2luZygpKQogewogfQogCkBAIC00Niw2ICs0Nyw3IEBAIENTU1N0eWxl
U2hlZXQ6OkNTU1N0eWxlU2hlZXQoTm9kZSAqcGFyZW4KICAgICAsIG1fbmFtZXNwYWNlcygwKQog
ICAgICwgbV9jaGFyc2V0KGNoYXJzZXQpCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCisg
ICAgLCBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCiB7CiB9CiAKQEAgLTU0LDYgKzU2LDcgQEAgQ1NT
U3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChDU1NSdWxlICpvdwogICAgICwgbV9uYW1lc3BhY2Vz
KDApCiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENvbXBsZXRlZChmYWxz
ZSkKKyAgICAsIG1fc3RyaWN0UGFyc2luZyghb3duZXJSdWxlIHx8IG93bmVyUnVsZS0+dXNlU3Ry
aWN0UGFyc2luZygpKQogewogICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0ID0gb3duZXJS
dWxlID8gb3duZXJSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwogICAgIG1fZG9jID0gcGFy
ZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+ZG9jKCkgOiAwOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAko
cmV2aXNpb24gMzg0MDUpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDYgKzg4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbG9hZENvbXBsZXRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9hZENvbXBsZXRlZDsgfQogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRTdWJyZXNvdXJjZVVSTFN0cmluZ3MoSGFzaFNldDxTdHJpbmc+JiwgY29uc3QgU3RyaW5n
JiBiYXNlVVJMKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldFN0cmljdFBhcnNpbmcoYm9vbCBi
KSB7IG1fc3RyaWN0UGFyc2luZyA9IGI7IH0KKyAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIAogcHJpdmF0ZToKICAgICBDU1NTdHls
ZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpOwpAQCAtMTAwLDcgKzEwMyw4IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnQqIG1f
ZG9jOwogICAgIENTU05hbWVzcGFjZSogbV9uYW1lc3BhY2VzOwogICAgIFN0cmluZyBtX2NoYXJz
ZXQ7Ci0gICAgYm9vbCBtX2xvYWRDb21wbGV0ZWQ7CisgICAgYm9vbCBtX2xvYWRDb21wbGV0ZWQg
OiAxOworICAgIGJvb2wgbV9zdHJpY3RQYXJzaW5nIDogMTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9TdHlsZUJhc2UuaAkocmV2aXNpb24gMzg0MDUpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAKLSAgICAgICAgdm9pZCBzZXRT
dHJpY3RQYXJzaW5nKGJvb2wgYikgeyBtX3N0cmljdFBhcnNpbmcgPSBiOyB9Ci0gICAgICAgIGJv
b2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQor
ICAgICAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiAhbV9wYXJlbnQg
fHwgbV9wYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9QYXJlbnQoKSB7IH0KIApAQCAtNzcsMTMgKzc2LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0eWxlQmFzZShTdHlsZUJhc2Uq
IHBhcmVudCkKICAgICAgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQotICAgICAgICAgICAgLCBt
X3N0cmljdFBhcnNpbmcoIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKSkKICAg
ICAgICAgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBTdHlsZUJhc2UqIG1f
cGFyZW50OwotICAgICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsKICAgICB9OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25703</attachid>
            <date>2008-12-03 00:37:45 -0800</date>
            <delta_ts>2008-12-03 01:08:42 -0800</delta_ts>
            <desc>reduce size of the CSSSelector</desc>
            <filename>cssom-memory-selector.patch</filename>
            <type>text/plain</type>
            <size>34685</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDgtMTItMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3OQorICAgICAgICBNYWtl
IENTU09NIHVzZSBsZXNzIG1lbW9yeQorCisgICAgICAgIFJlZHVjZSBzaXplIG9mIHRoZSBDU1NT
ZWxlY3RvciBieSAzLzggYnkgbW92aW5nIHJhcmVseSB1c2VkIGZpZWxkcyB0byBhIHJhcmUgZGF0
YQorICAgICAgICBzdHJ1Y3QuIEJyb3dzaW5nIGFyb3VuZCB3aXRoIHNvbWUgaW5zdHJ1bWVudGF0
aW9uIHNob3dlZCB0aGF0IH4wLjElIG9mIGFsbCBzZWxlY3RvcnMKKyAgICAgICAgZW5jb3VudGVy
ZWQgaGFkIHJhcmUgZGF0YS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBlbGltaW5hdGVz
IHRoZSBDU1NOdGhTZWxlY3RvciBzdWJjbGFzcyB3aGljaCB3aWxsIG1ha2UgcG9zc2libGUgdG8g
c3RvcmUKKyAgICAgICAgQ1NTU2VsZWN0b3JzIGluIGFuIGFycmF5IGluc3RlYWQgb2YgYSBsaW5r
ZWQgbGlzdCBmb3IgZnV0aGVyIG1lbW9yeSBzYXZpbmdzLgorCisgICAgICAgICogY3NzL0NTU0dy
YW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTnRoU2VsZWN0b3IuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGNzcy9DU1NOdGhTZWxlY3Rvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1Nl
bGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Nl
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yOjphdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNl
dEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6cGFyc2VOdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6Om1hdGNoTnRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpSYXJlRGF0YTo6cGFyc2VOdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3I6OlJhcmVEYXRhOjptYXRjaE50aCk6CisgICAgICAgICogY3NzL0NTU1NlbGVj
dG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6Q1NTU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6On5DU1NTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTZWxlY3Rvcjo6dGFnSGlzdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6c2V0VGFnSGlzdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6aGFz
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjphcmd1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2ltcGxlU2VsZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yOjpzZXRTaW1wbGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpSYXJlRGF0YTo6flJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpj
cmVhdGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KToKKwogMjAwOC0xMi0wMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJKHJldmlz
aW9uIDM4ODMzKQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUg
IkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NO
dGhTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtODI2LDEwICs4MjUsMTAgQEAgc2Vs
ZWN0b3I6CiAgICAgICAgIGVsc2UgaWYgKCQkKSB7CiAgICAgICAgICAgICBDU1NQYXJzZXIqIHAg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgQ1NTU2VsZWN0
b3IqIGVuZCA9ICQkOwotICAgICAgICAgICAgd2hpbGUgKGVuZC0+bV90YWdIaXN0b3J5KQotICAg
ICAgICAgICAgICAgIGVuZCA9IGVuZC0+bV90YWdIaXN0b3J5OworICAgICAgICAgICAgd2hpbGUg
KGVuZC0+dGFnSGlzdG9yeSgpKQorICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9y
eSgpOwogICAgICAgICAgICAgZW5kLT5tX3JlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRh
bnQ7Ci0gICAgICAgICAgICBlbmQtPm1fdGFnSGlzdG9yeSA9IHAtPnNpbmtGbG9hdGluZ1NlbGVj
dG9yKCQxKTsKKyAgICAgICAgICAgIGVuZC0+c2V0VGFnSGlzdG9yeShwLT5zaW5rRmxvYXRpbmdT
ZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBwLT5kb2N1bWVu
dCgpKQogICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc0Rlc2NlbmRhbnRSdWxlcyh0cnVlKTsK
ICAgICAgICAgfQpAQCAtODQxLDEwICs4NDAsMTAgQEAgc2VsZWN0b3I6CiAgICAgICAgIGVsc2Ug
aWYgKCQkKSB7CiAgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgQ1NTU2VsZWN0b3IqIGVuZCA9ICQkOwotICAgICAg
ICAgICAgd2hpbGUgKGVuZC0+bV90YWdIaXN0b3J5KQotICAgICAgICAgICAgICAgIGVuZCA9IGVu
ZC0+bV90YWdIaXN0b3J5OworICAgICAgICAgICAgd2hpbGUgKGVuZC0+dGFnSGlzdG9yeSgpKQor
ICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOwogICAgICAgICAgICAgZW5k
LT5tX3JlbGF0aW9uID0gJDI7Ci0gICAgICAgICAgICBlbmQtPm1fdGFnSGlzdG9yeSA9IHAtPnNp
bmtGbG9hdGluZ1NlbGVjdG9yKCQxKTsKKyAgICAgICAgICAgIGVuZC0+c2V0VGFnSGlzdG9yeShw
LT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgaWYgKCQyID09IENTU1Nl
bGVjdG9yOjpDaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gcC0+
ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jLT5zZXRVc2VzRGVzY2VuZGFudFJ1
bGVzKHRydWUpOwpAQCAtOTQ1LDEwICs5NDQsMTAgQEAgc3BlY2lmaWVyX2xpc3Q6CiAgICAgICAg
ICAgICAkJCA9ICQxOwogICAgICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgICAgIENTU1NlbGVjdG9yKiBlbmQgPSAkMTsKLSAg
ICAgICAgICAgIHdoaWxlIChlbmQtPm1fdGFnSGlzdG9yeSkKLSAgICAgICAgICAgICAgICBlbmQg
PSBlbmQtPm1fdGFnSGlzdG9yeTsKKyAgICAgICAgICAgIHdoaWxlIChlbmQtPnRhZ0hpc3Rvcnko
KSkKKyAgICAgICAgICAgICAgICBlbmQgPSBlbmQtPnRhZ0hpc3RvcnkoKTsKICAgICAgICAgICAg
IGVuZC0+bV9yZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKLSAgICAgICAgICAg
IGVuZC0+bV90YWdIaXN0b3J5ID0gcC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDIpOworICAgICAg
ICAgICAgZW5kLT5zZXRUYWdIaXN0b3J5KHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQyKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgfCBzcGVjaWZpZXJfbGlzdCBlcnJvciB7CkBAIC05NjMsNyAr
OTYyLDYgQEAgc3BlY2lmaWVyOgogICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpJ
ZDsKICAgICAgICAgaWYgKCFwLT5tX3N0cmljdCkKICAgICAgICAgICAgICQxLmxvd2VyKCk7Ci0g
ICAgICAgICQkLT5tX2F0dHIgPSBpZEF0dHI7CiAgICAgICAgICQkLT5tX3ZhbHVlID0gJDE7CiAg
ICAgfQogICB8IEhFWCB7CkBAIC05NzUsNyArOTczLDYgQEAgc3BlY2lmaWVyOgogICAgICAgICAg
ICAgJCQtPm1fbWF0Y2ggPSBDU1NTZWxlY3Rvcjo6SWQ7CiAgICAgICAgICAgICBpZiAoIXAtPm1f
c3RyaWN0KQogICAgICAgICAgICAgICAgICQxLmxvd2VyKCk7Ci0gICAgICAgICAgICAkJC0+bV9h
dHRyID0gaWRBdHRyOwogICAgICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTk5MSw3ICs5ODgsNiBAQCBjbGFzczoKICAgICAgICAgJCQtPm1fbWF0Y2ggPSBD
U1NTZWxlY3Rvcjo6Q2xhc3M7CiAgICAgICAgIGlmICghcC0+bV9zdHJpY3QpCiAgICAgICAgICAg
ICAkMi5sb3dlcigpOwotICAgICAgICAkJC0+bV9hdHRyID0gY2xhc3NBdHRyOwogICAgICAgICAk
JC0+bV92YWx1ZSA9ICQyOwogICAgIH0KICAgOwpAQCAtMTAxMCwxMiArMTAwNiwxMiBAQCBhdHRy
X25hbWU6CiBhdHRyaWI6CiAgICAgJ1snIG1heWJlX3NwYWNlIGF0dHJfbmFtZSAnXScgewogICAg
ICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0aW5n
U2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICQzLCBudWxsQXRvbSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgJDMsIG51bGxBdG9tKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2VsZWN0
b3I6OlNldDsKICAgICB9CiAgICAgfCAnWycgbWF5YmVfc3BhY2UgYXR0cl9uYW1lIG1hdGNoIG1h
eWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBtYXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3Io
KTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICQzLCBudWxs
QXRvbSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
JDMsIG51bGxBdG9tKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gKENTU1NlbGVjdG9yOjpNYXRj
aCkkNDsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkNjsKICAgICB9CkBAIC0xMDIzLDE2ICsxMDE5
LDE2IEBAIGF0dHJpYjoKICAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9ICQz
OwogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
OwogICAgICAgICAkJCA9IHAtPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKLSAgICAgICAgJCQt
Pm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LCAkNCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcC0+bV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3Bh
Y2UobmFtZXNwYWNlUHJlZml4KSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVk
TmFtZShuYW1lc3BhY2VQcmVmaXgsICQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwLT5tX3N0eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgp
KSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKICAgICB9CiAgICAg
fCAnWycgbWF5YmVfc3BhY2UgbmFtZXNwYWNlX3NlbGVjdG9yIGF0dHJfbmFtZSBtYXRjaCBtYXli
ZV9zcGFjZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAgICAgICAgQXRvbWlj
U3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9ICQzOwogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZUZsb2F0
aW5nU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobmFtZXNw
YWNlUHJlZml4LCAkNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bV9z
dHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KSk7CisgICAgICAg
ICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsICQ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5tX3N0eWxlU2hlZXQtPmRldGVybWlu
ZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gKENT
U1NlbGVjdG9yOjpNYXRjaCkkNTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkNzsKICAgICB9CkBA
IC0xMTA3LDkgKzExMDMsOSBAQCBwc2V1ZG86CiAgICAgLy8gdXNlZCBieSA6bnRoLSooYXgrYikK
ICAgICB8ICc6JyBGVU5DVElPTiBOVEggJyknIHsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxD
U1NTZWxlY3Rvcio+KHAtPmNyZWF0ZUZsb2F0aW5nTnRoU2VsZWN0b3IoKSk7CisgICAgICAgICQk
ID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwogICAgICAgICAkJC0+bV9tYXRjaCA9IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKLSAgICAgICAgJCQtPm1fYXJndW1lbnQgPSAkMzsKKyAg
ICAgICAgJCQtPnNldEFyZ3VtZW50KCQzKTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsKICAg
ICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7CiAg
ICAgICAgIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3duKQpAQCAtMTEyNSw5
ICsxMTIxLDkgQEAgcHNldWRvOgogICAgIC8vIHVzZWQgYnkgOm50aC0qCiAgICAgfCAnOicgRlVO
Q1RJT04gSU5URUdFUiAnKScgewogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1NlbGVjdG9y
Kj4ocC0+Y3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpKTsKKyAgICAgICAgJCQgPSBwLT5jcmVh
dGVGbG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzOwotICAgICAgICAkJC0+bV9hcmd1bWVudCA9IFN0cmluZzo6bnVtYmVyKCQz
KTsKKyAgICAgICAgJCQtPnNldEFyZ3VtZW50KFN0cmluZzo6bnVtYmVyKCQzKSk7CiAgICAgICAg
ICQkLT5tX3ZhbHVlID0gJDI7CiAgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHR5cGUg
PSAkJC0+cHNldWRvVHlwZSgpOwogICAgICAgICBpZiAodHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvVW5rbm93bikKQEAgLTExNDMsOSArMTEzOSw5IEBAIHBzZXVkbzoKICAgICAvLyB1c2VkIGJ5
IDpudGgtKihvZGQvZXZlbikgYW5kIDpsYW5nCiAgICAgfCAnOicgRlVOQ1RJT04gSURFTlQgJykn
IHsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcio+KHAtPmNyZWF0ZUZsb2F0
aW5nTnRoU2VsZWN0b3IoKSk7CisgICAgICAgICQkID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxlY3Rv
cigpOwogICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKLSAg
ICAgICAgJCQtPm1fYXJndW1lbnQgPSAkMzsKKyAgICAgICAgJCQtPnNldEFyZ3VtZW50KCQzKTsK
ICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsKICAgICAgICAg
Q1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7CkBAIC0xMTY3
LDcgKzExNjMsNyBAQCBwc2V1ZG86CiAgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgJCQgPSBwLT5jcmVhdGVGbG9h
dGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzczsKLSAgICAgICAgICAgICQkLT5tX3NpbXBsZVNlbGVjdG9yID0gcC0+c2lua0Zs
b2F0aW5nU2VsZWN0b3IoJDQpOworICAgICAgICAgICAgJCQtPnNldFNpbXBsZVNlbGVjdG9yKHAt
PnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQ0KSk7CiAgICAgICAgICAgICAkMi5sb3dlcigpOwogICAg
ICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTTnRoU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU050aFNlbGVj
dG9yLmNwcAkocmV2aXNpb24gMzg4MzMpCisrKyBXZWJDb3JlL2Nzcy9DU1NOdGhTZWxlY3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTTnRoU2VsZWN0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRzCi1i
b29sIENTU050aFNlbGVjdG9yOjpwYXJzZU50aCgpCi17Ci0gICAgaWYgKG1fcGFyc2VkTnRoKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIG1fYXIgPSBtX2Fy
Z3VtZW50OwotICAgIAotICAgIGlmIChtX2FyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIG1fcGFyc2VkTnRoID0gdHJ1ZTsKLSAgICBtX2EgPSAwOwotICAgIG1f
YiA9IDA7Ci0gICAgaWYgKG1fYXIgPT0gIm9kZCIpIHsKLSAgICAgICAgbV9hID0gMjsKLSAgICAg
ICAgbV9iID0gMTsKLSAgICB9IGVsc2UgaWYgKG1fYXIgPT0gImV2ZW4iKSB7Ci0gICAgICAgIG1f
YSA9IDI7Ci0gICAgICAgIG1fYiA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IG4gPSBt
X2FyLmZpbmQoJ24nKTsKLSAgICAgICAgaWYgKG4gIT0gLTEpIHsKLSAgICAgICAgICAgIGlmICht
X2FyWzBdID09ICctJykgewotICAgICAgICAgICAgICAgIGlmIChuID09IDEpCi0gICAgICAgICAg
ICAgICAgICAgIG1fYSA9IC0xOyAvLyAtbiA9PSAtMW4KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1fYSA9IG1fYXIuc3Vic3RyaW5nKDAsIG4pLnRvSW50KCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCFuKQotICAgICAgICAgICAgICAgIG1fYSA9IDE7IC8vIG4g
PT0gMW4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2EgPSBtX2FyLnN1YnN0
cmluZygwLCBuKS50b0ludCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgcCA9IG1f
YXIuZmluZCgnKycsIG4pOwotICAgICAgICAgICAgaWYgKHAgIT0gLTEpCi0gICAgICAgICAgICAg
ICAgbV9iID0gbV9hci5zdWJzdHJpbmcocCArIDEsIG1fYXIubGVuZ3RoKCkgLSBwIC0gMSkudG9J
bnQoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHAgPSBtX2FyLmZpbmQo
Jy0nLCBuKTsKLSAgICAgICAgICAgICAgICBtX2IgPSAtbV9hci5zdWJzdHJpbmcocCArIDEsIG1f
YXIubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX2IgPSBtX2FyLnRvSW50KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi0vLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgbnRoLWFyZ3VtZW50
cwotYm9vbCBDU1NOdGhTZWxlY3Rvcjo6bWF0Y2hOdGgoaW50IGNvdW50KQotewotICAgIGlmICgh
bV9hKQotICAgICAgICByZXR1cm4gY291bnQgPT0gbV9iOwotICAgIGVsc2UgaWYgKG1fYSA+IDAp
IHsKLSAgICAgICAgaWYgKGNvdW50IDwgbV9iKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICByZXR1cm4gKGNvdW50IC0gbV9iKSAlIG1fYSA9PSAwOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChjb3VudCA+IG1fYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIChtX2IgLSBjb3VudCkgJSAoLW1fYSkgPT0gMDsKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU050aFNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTnRoU2VsZWN0b3IuaAkocmV2aXNpb24gMzg4MzMp
CisrKyBXZWJDb3JlL2Nzcy9DU1NOdGhTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFNtaXRoIChjYXRm
aXNoLm1hbkBnbWFpbC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDU1NOdGhTZWxlY3Rvcl9oCi0jZGVmaW5lIENT
U050aFNlbGVjdG9yX2gKLQotI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKLSNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyB0aGlzIGNsYXNz
IHJlcHJlc2VudHMgYSBzZWxlY3RvciB1c2luZyA6bnRoLWNoaWxkIGZvciBhIFN0eWxlUnVsZQot
ICAgIGNsYXNzIENTU050aFNlbGVjdG9yIDogcHVibGljIENTU1NlbGVjdG9yIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIENTU050aFNlbGVjdG9yKCkKLSAgICAgICAgICAgIDogbV9hKDApCi0gICAg
ICAgICAgICAsIG1fYigwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NOdGhT
ZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLSAgICAgICAgICAgIDogbV9hKDAp
Ci0gICAgICAgICAgICAsIG1fYigwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB+
Q1NTTnRoU2VsZWN0b3IoKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGJvb2wgcGFyc2VOdGgoKTsKLSAgICAgICAgYm9vbCBtYXRjaE50aChpbnQgY291bnQpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fYTsKLSAgICAgICAgaW50IG1fYjsKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDU1NTZWxlY3Rvcl9oCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAJKHJldmlzaW9uIDM4ODMzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkNTU1JlZmxlY3RW
YWx1ZS5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3Iu
aCIKLSNpbmNsdWRlICJDU1NOdGhTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5o
IgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NVbmljb2RlUmFuZ2VW
YWx1ZS5oIgpAQCAtNDM3NCwxMyArNDM3Myw2IEBAIENTU1NlbGVjdG9yKiBDU1NQYXJzZXI6OmNy
ZWF0ZUZsb2F0aW5nU2UKICAgICBtX2Zsb2F0aW5nU2VsZWN0b3JzLmFkZChzZWxlY3Rvcik7CiAg
ICAgcmV0dXJuIHNlbGVjdG9yOwogfQotICAgIAotQ1NTTnRoU2VsZWN0b3IqIENTU1BhcnNlcjo6
Y3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpCi17Ci0gICAgQ1NTTnRoU2VsZWN0b3IqIHNlbGVj
dG9yID0gbmV3IENTU050aFNlbGVjdG9yOwotICAgIG1fZmxvYXRpbmdTZWxlY3RvcnMuYWRkKHNl
bGVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3I7Ci19CiAKIENTU1NlbGVjdG9yKiBDU1NQYXJz
ZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCShyZXZpc2lvbiAzODgzMykKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBDU1NSdWxlOwogICAgIGNsYXNzIENTU1J1bGVMaXN0OwogICAgIGNsYXNzIENTU1NlbGVjdG9y
OwotICAgIGNsYXNzIENTU050aFNlbGVjdG9yOwogICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAg
ICAgY2xhc3MgQ1NTVmFsdWU7CiAgICAgY2xhc3MgQ1NTVmFsdWVMaXN0OwpAQCAtMTUzLDcgKzE1
Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHl5cGFyc2UoKTsKIAogICAg
ICAgICBDU1NTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwotICAgICAgICBDU1NO
dGhTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpOwogICAgICAgICBDU1NTZWxl
Y3Rvciogc2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NTU2VsZWN0b3IqKTsKIAogICAgICAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGNyZWF0ZUZsb2F0aW5nVmFsdWVMaXN0KCk7CkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU2VsZWN0
b3IuY3BwCShyZXZpc2lvbiAzODgzMykKKysrIFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAgICAgMjAwMSBBbmRy
ZWFzIFNjaGxhcGJhY2ggKHNjaGxwYmNoQGlhbS51bmliZS5jaCkKICAqICAgICAgICAgICAgICAg
MjAwMS0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29t
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNSwxNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAKKyNpbmNsdWRlICJ3dGYvQXNzZXJ0aW9u
cy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiB1bnNpZ25lZCBpbnQgQ1NTU2VsZWN0b3I6OnNwZWNpZmljaXR5KCkKIHsKQEAgLTUy
LDggKzU4LDggQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobV90YWdIaXN0b3J5KQotICAgICAgICBz
ICs9IG1fdGFnSGlzdG9yeS0+c3BlY2lmaWNpdHkoKTsKKyAgICBpZiAoQ1NTU2VsZWN0b3IqIHRh
Z0hpc3RvcnkgPSB0aGlzLT50YWdIaXN0b3J5KCkpCisgICAgICAgIHMgKz0gdGFnSGlzdG9yeS0+
c3BlY2lmaWNpdHkoKTsKIAogICAgIC8vIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IG92ZXJmbG93CiAg
ICAgcmV0dXJuIHMgJiAweGZmZmZmZjsKQEAgLTMyNCwxNCArMzMwLDE0IEBAIGJvb2wgQ1NTU2Vs
ZWN0b3I6Om9wZXJhdG9yPT0oY29uc3QgQ1NTU2UKICAgICBjb25zdCBDU1NTZWxlY3Rvciogc2Vs
MiA9ICZvdGhlcjsKIAogICAgIHdoaWxlIChzZWwxICYmIHNlbDIpIHsKLSAgICAgICAgaWYgKHNl
bDEtPm1fdGFnICE9IHNlbDItPm1fdGFnIHx8IHNlbDEtPm1fYXR0ciAhPSBzZWwyLT5tX2F0dHIg
fHwKKyAgICAgICAgaWYgKHNlbDEtPm1fdGFnICE9IHNlbDItPm1fdGFnIHx8IHNlbDEtPmF0dHJp
YnV0ZSgpICE9IHNlbDItPmF0dHJpYnV0ZSgpIHx8CiAgICAgICAgICAgICAgc2VsMS0+cmVsYXRp
b24oKSAhPSBzZWwyLT5yZWxhdGlvbigpIHx8IHNlbDEtPm1fbWF0Y2ggIT0gc2VsMi0+bV9tYXRj
aCB8fAogICAgICAgICAgICAgIHNlbDEtPm1fdmFsdWUgIT0gc2VsMi0+bV92YWx1ZSB8fAogICAg
ICAgICAgICAgIHNlbDEtPnBzZXVkb1R5cGUoKSAhPSBzZWwyLT5wc2V1ZG9UeXBlKCkgfHwKLSAg
ICAgICAgICAgICBzZWwxLT5tX2FyZ3VtZW50ICE9IHNlbDItPm1fYXJndW1lbnQpCisgICAgICAg
ICAgICAgc2VsMS0+YXJndW1lbnQoKSAhPSBzZWwyLT5hcmd1bWVudCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBzZWwxID0gc2VsMS0+bV90YWdIaXN0b3J5OwotICAgICAg
ICBzZWwyID0gc2VsMi0+bV90YWdIaXN0b3J5OworICAgICAgICBzZWwxID0gc2VsMS0+dGFnSGlz
dG9yeSgpOworICAgICAgICBzZWwyID0gc2VsMi0+dGFnSGlzdG9yeSgpOwogICAgIH0KIAogICAg
IGlmIChzZWwxIHx8IHNlbDIpCkBAIC0zNjUsMTEgKzM3MSwxMSBAQCBTdHJpbmcgQ1NTU2VsZWN0
b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICBzdHIgKz0gIjoiOwogICAgICAg
ICAgICAgc3RyICs9IGNzLT5tX3ZhbHVlOwogICAgICAgICAgICAgaWYgKGNzLT5wc2V1ZG9UeXBl
KCkgPT0gUHNldWRvTm90KSB7Ci0gICAgICAgICAgICAgICAgaWYgKENTU1NlbGVjdG9yKiBzdWJT
ZWwgPSBjcy0+bV9zaW1wbGVTZWxlY3RvcikKKyAgICAgICAgICAgICAgICBpZiAoQ1NTU2VsZWN0
b3IqIHN1YlNlbCA9IGNzLT5zaW1wbGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gc3ViU2VsLT5zZWxlY3RvclRleHQoKTsKICAgICAgICAgICAgICAgICBzdHIgKz0gIiki
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChjcy0+cHNldWRvVHlwZSgpID09IFBzZXVkb0xhbmcp
IHsKLSAgICAgICAgICAgICAgICBzdHIgKz0gY3MtPm1fYXJndW1lbnQ7CisgICAgICAgICAgICAg
ICAgc3RyICs9IGNzLT5hcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIHN0ciArPSAiKSI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3MtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnQpIHsKQEAgLTM3NywxMCArMzgzLDEwIEBAIFN0cmluZyBDU1NTZWxl
Y3Rvcjo6c2VsZWN0b3JUZXh0KCkgY29uc3QKICAgICAgICAgICAgIHN0ciArPSBjcy0+bV92YWx1
ZTsKICAgICAgICAgfSBlbHNlIGlmIChjcy0+aGFzQXR0cmlidXRlKCkpIHsKICAgICAgICAgICAg
IHN0ciArPSAiWyI7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCA9IGNz
LT5tX2F0dHIucHJlZml4KCk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCA9IGNzLT5hdHRyaWJ1dGUoKS5wcmVmaXgoKTsKICAgICAgICAgICAgIGlmICghcHJlZml4Lmlz
TnVsbCgpKQogICAgICAgICAgICAgICAgIHN0ciArPSBwcmVmaXggKyAifCI7Ci0gICAgICAgICAg
ICBzdHIgKz0gY3MtPm1fYXR0ci5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIHN0ciArPSBjcy0+
YXR0cmlidXRlKCkubG9jYWxOYW1lKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5tX21hdGNo
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CiAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSAiPSI7CkBAIC00MTMsMTMgKzQxOSwxMyBAQCBTdHJpbmcgQ1NTU2Vs
ZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgc3RyICs9ICJcIl0i
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChjcy0+cmVsYXRpb24oKSAh
PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IgfHwgIWNzLT5tX3RhZ0hpc3RvcnkpCisgICAgICAg
IGlmIChjcy0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IgfHwgIWNzLT50
YWdIaXN0b3J5KCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY3MgPSBjcy0+bV90YWdI
aXN0b3J5OworICAgICAgICBjcyA9IGNzLT50YWdIaXN0b3J5KCk7CiAgICAgfQogCi0gICAgaWYg
KGNzLT5tX3RhZ0hpc3RvcnkpIHsKLSAgICAgICAgU3RyaW5nIHRhZ0hpc3RvcnlUZXh0ID0gY3Mt
Pm1fdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCk7CisgICAgaWYgKENTU1NlbGVjdG9yKiB0YWdI
aXN0b3J5ID0gY3MtPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBTdHJpbmcgdGFnSGlzdG9yeVRl
eHQgPSB0YWdIaXN0b3J5LT5zZWxlY3RvclRleHQoKTsKICAgICAgICAgaWYgKGNzLT5yZWxhdGlv
bigpID09IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudCkKICAgICAgICAgICAgIHN0ciA9IHRh
Z0hpc3RvcnlUZXh0ICsgIiArICIgKyBzdHI7CiAgICAgICAgIGVsc2UgaWYgKGNzLT5yZWxhdGlv
bigpID09IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50KQpAQCAtNDMzLDUgKzQzOSw5NyBA
QCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAKICAgICByZXR1cm4g
c3RyOwogfQorICAgIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgQ1NTU2VsZWN0b3I6OmF0dHJpYnV0
ZSgpIGNvbnN0Cit7IAorICAgIHN3aXRjaCAobV9tYXRjaCkgeworICAgIGNhc2UgSWQ6CisgICAg
ICAgIHJldHVybiBpZEF0dHI7CisgICAgY2FzZSBDbGFzczoKKyAgICAgICAgcmV0dXJuIGNsYXNz
QXR0cjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0
YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSA6IGFueVFOYW1lKCk7CisgICAgfQorfQorCit2b2lk
IENTU1NlbGVjdG9yOjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIAor
eyAKKyAgICBjcmVhdGVSYXJlRGF0YSgpOyAKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRy
aWJ1dGUgPSB2YWx1ZTsgCit9CisKK2Jvb2wgQ1NTU2VsZWN0b3I6OnBhcnNlTnRoKCkKK3sKKyAg
ICBpZiAoIW1faGFzUmFyZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9w
YXJzZWROdGgpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1fcGFyc2VkTnRoID0gbV9kYXRh
Lm1fcmFyZURhdGEtPnBhcnNlTnRoKCk7CisgICAgcmV0dXJuIG1fcGFyc2VkTnRoOworfQorCiti
b29sIENTU1NlbGVjdG9yOjptYXRjaE50aChpbnQgY291bnQpCit7CisgICAgQVNTRVJUKG1faGFz
UmFyZURhdGEpOworICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bWF0Y2hOdGgoY291bnQp
OworfQorCisvLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRzCiti
b29sIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6cGFyc2VOdGgoKQoreyAgICAKKyAgICBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50ID0gbV9hcmd1bWVudDsKKyAgICAKKyAgICBpZiAoYXJndW1lbnQuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9hID0gMDsKKyAgICBt
X2IgPSAwOworICAgIGlmIChhcmd1bWVudCA9PSAib2RkIikgeworICAgICAgICBtX2EgPSAyOwor
ICAgICAgICBtX2IgPSAxOworICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gImV2ZW4iKSB7Cisg
ICAgICAgIG1fYSA9IDI7CisgICAgICAgIG1fYiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aW50IG4gPSBhcmd1bWVudC5maW5kKCduJyk7CisgICAgICAgIGlmIChuICE9IC0xKSB7CisgICAg
ICAgICAgICBpZiAoYXJndW1lbnRbMF0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgaWYgKG4g
PT0gMSkKKyAgICAgICAgICAgICAgICAgICAgbV9hID0gLTE7IC8vIC1uID09IC0xbgorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9hID0gYXJndW1lbnQuc3Vic3Ry
aW5nKDAsIG4pLnRvSW50KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFuKQorICAgICAgICAg
ICAgICAgIG1fYSA9IDE7IC8vIG4gPT0gMW4KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX2EgPSBhcmd1bWVudC5zdWJzdHJpbmcoMCwgbikudG9JbnQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaW50IHAgPSBhcmd1bWVudC5maW5kKCcrJywgbik7CisgICAgICAgICAg
ICBpZiAocCAhPSAtMSkKKyAgICAgICAgICAgICAgICBtX2IgPSBhcmd1bWVudC5zdWJzdHJpbmco
cCArIDEsIGFyZ3VtZW50Lmxlbmd0aCgpIC0gcCAtIDEpLnRvSW50KCk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwID0gYXJndW1lbnQuZmluZCgnLScsIG4pOworICAgICAg
ICAgICAgICAgIG1fYiA9IC1hcmd1bWVudC5zdWJzdHJpbmcocCArIDEsIGFyZ3VtZW50Lmxlbmd0
aCgpIC0gcCAtIDEpLnRvSW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9iID0gYXJndW1lbnQudG9JbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CiAKKy8vIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBjaGVja2luZyBudGgtYXJndW1lbnRzCiti
b29sIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6bWF0Y2hOdGgoaW50IGNvdW50KQoreworICAgIGlm
ICghbV9hKQorICAgICAgICByZXR1cm4gY291bnQgPT0gbV9iOworICAgIGVsc2UgaWYgKG1fYSA+
IDApIHsKKyAgICAgICAgaWYgKGNvdW50IDwgbV9iKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gKGNvdW50IC0gbV9iKSAlIG1fYSA9PSAwOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChjb3VudCA+IG1fYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIChtX2IgLSBjb3VudCkgJSAoLW1fYSkgPT0gMDsKKyAgICB9Cit9CisgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHJldmlzaW9uIDM4ODMz
KQorKysgV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNDAg
KzMyLDM4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NTZWxlY3RvciB7CiAg
ICAgcHVibGljOgogICAgICAgICBDU1NTZWxlY3RvcigpCi0gICAgICAgICAgICA6IG1fdGFnSGlz
dG9yeSgwKQotICAgICAgICAgICAgLCBtX3NpbXBsZVNlbGVjdG9yKDApCi0gICAgICAgICAgICAs
IG1fbmV4dFNlbGVjdG9yKDApCi0gICAgICAgICAgICAsIG1fYXJndW1lbnQobnVsbEF0b20pCi0g
ICAgICAgICAgICAsIG1fYXR0cihhbnlRTmFtZSgpKQorICAgICAgICAgICAgOiBtX25leHRTZWxl
Y3RvcigwKQogICAgICAgICAgICAgLCBtX3RhZyhhbnlRTmFtZSgpKQogICAgICAgICAgICAgLCBt
X3JlbGF0aW9uKERlc2NlbmRhbnQpCiAgICAgICAgICAgICAsIG1fbWF0Y2goTm9uZSkKICAgICAg
ICAgICAgICwgbV9wc2V1ZG9UeXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAgICAgICwgbV9w
YXJzZWROdGgoZmFsc2UpCisgICAgICAgICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCiAgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZGF0YS5tX3RhZ0hpc3RvcnkgPSAwOwogICAgICAgICB9CiAK
ICAgICAgICAgQ1NTU2VsZWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCi0gICAgICAg
ICAgICA6IG1fdGFnSGlzdG9yeSgwKQotICAgICAgICAgICAgLCBtX3NpbXBsZVNlbGVjdG9yKDAp
Ci0gICAgICAgICAgICAsIG1fbmV4dFNlbGVjdG9yKDApCi0gICAgICAgICAgICAsIG1fYXJndW1l
bnQobnVsbEF0b20pCi0gICAgICAgICAgICAsIG1fYXR0cihhbnlRTmFtZSgpKQorICAgICAgICAg
ICAgOiBtX25leHRTZWxlY3RvcigwKQogICAgICAgICAgICAgLCBtX3RhZyhxTmFtZSkKICAgICAg
ICAgICAgICwgbV9yZWxhdGlvbihEZXNjZW5kYW50KQogICAgICAgICAgICAgLCBtX21hdGNoKE5v
bmUpCiAgICAgICAgICAgICAsIG1fcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAg
ICAgICAsIG1fcGFyc2VkTnRoKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hhc1JhcmVEYXRhKGZh
bHNlKQogICAgICAgICB7CisgICAgICAgICAgICBtX2RhdGEubV90YWdIaXN0b3J5ID0gMDsKICAg
ICAgICAgfQogCiAgICAgICAgIH5DU1NTZWxlY3RvcigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGRlbGV0ZSBtX3RhZ0hpc3Rvcnk7Ci0gICAgICAgICAgICBkZWxldGUgbV9zaW1wbGVTZWxlY3Rv
cjsKKyAgICAgICAgICAgIGlmIChtX2hhc1JhcmVEYXRhKQorICAgICAgICAgICAgICAgIGRlbGV0
ZSBtX2RhdGEubV9yYXJlRGF0YTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBk
ZWxldGUgbV9kYXRhLm1fdGFnSGlzdG9yeTsKICAgICAgICAgICAgIGRlbGV0ZSBtX25leHRTZWxl
Y3RvcjsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICB2b2lkIGFwcGVuZChDU1NTZWxl
Y3RvciogbikKICAgICAgICAgewogICAgICAgICAgICAgQ1NTU2VsZWN0b3IqIGVuZCA9IHRoaXM7
CkBAIC0xOTMsMzAgKzE5MSw3NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAg
ICAgZXh0cmFjdFBzZXVkb1R5cGUoKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
c2V1ZG9UeXBlPihtX3BzZXVkb1R5cGUpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBD
U1NTZWxlY3RvciogdGFnSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBt
X2RhdGEubV9yYXJlRGF0YS0+bV90YWdIaXN0b3J5IDogbV9kYXRhLm1fdGFnSGlzdG9yeTsgfQor
ICAgICAgICB2b2lkIHNldFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3IqIHRhZ0hpc3RvcnkpIHsgaWYg
KG1faGFzUmFyZURhdGEpIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3RhZ0hpc3RvcnkgPSB0YWdIaXN0
b3J5OyBlbHNlIG1fZGF0YS5tX3RhZ0hpc3RvcnkgPSB0YWdIaXN0b3J5OyB9CiAKICAgICAgICAg
Ym9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiBtX3RhZyAhPSBhbnlRTmFtZSgpOyB9Ci0gICAg
ICAgIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyICE9IGFueVFOYW1l
KCk7IH0KKyAgICAgICAgYm9vbCBoYXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX21hdGNo
ID09IElkIHx8IG1fbWF0Y2ggPT0gQ2xhc3MgfHwgKG1faGFzUmFyZURhdGEgJiYgbV9kYXRhLm1f
cmFyZURhdGEtPm1fYXR0cmlidXRlICE9IGFueVFOYW1lKCkpOyB9CisgICAgICAgIAorICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdDsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBt
X2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1bWVudCA6IG51bGxBdG9tOyB9CisgICAgICAgIENTU1Nl
bGVjdG9yKiBzaW1wbGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBt
X2RhdGEubV9yYXJlRGF0YS0+bV9zaW1wbGVTZWxlY3RvciA6IDA7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IGNyZWF0ZVJh
cmVEYXRhKCk7IG1fZGF0YS5tX3JhcmVEYXRhLT5tX2FyZ3VtZW50ID0gdmFsdWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRTaW1wbGVTZWxlY3RvcihDU1NTZWxlY3RvciogdmFsdWUpIHsgY3JlYXRlUmFy
ZURhdGEoKTsgbV9kYXRhLm1fcmFyZURhdGEtPm1fc2ltcGxlU2VsZWN0b3IgPSB2YWx1ZTsgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBwYXJzZU50aCgpOworICAgICAgICBib29sIG1hdGNoTnRo
KGludCBjb3VudCk7CiAKICAgICAgICAgUmVsYXRpb24gcmVsYXRpb24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxSZWxhdGlvbj4obV9yZWxhdGlvbik7IH0KIAogICAgICAgICBtdXRhYmxl
IEF0b21pY1N0cmluZyBtX3ZhbHVlOwotICAgICAgICBDU1NTZWxlY3RvciogbV90YWdIaXN0b3J5
OwotICAgICAgICBDU1NTZWxlY3RvciogbV9zaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBmb3IgOm5v
dC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG1fbmV4dFNlbGVjdG9yOyAvLyB1c2VkIGZvciAsLWNo
YWluZWQgc2VsZWN0b3JzCi0gICAgICAgIEF0b21pY1N0cmluZyBtX2FyZ3VtZW50OyAvLyBVc2Vk
IGZvciA6Y29udGFpbnMsIDpsYW5nIGFuZCA6bnRoLSoKLQotICAgICAgICBRdWFsaWZpZWROYW1l
IG1fYXR0cjsKICAgICAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZzsKIAogICAgICAgICB1bnNpZ25l
ZCBtX3JlbGF0aW9uICAgICAgICAgICA6IDM7IC8vIGVudW0gUmVsYXRpb24KICAgICAgICAgbXV0
YWJsZSB1bnNpZ25lZCBtX21hdGNoICAgICAgOiA0OyAvLyBlbnVtIE1hdGNoCiAgICAgICAgIG11
dGFibGUgdW5zaWduZWQgbV9wc2V1ZG9UeXBlIDogODsgLy8gUHNldWRvVHlwZQogICAgICAgICAK
LSAgICBwcm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX3BhcnNlZE50aCAg
ICAgICAgICAgICAgOiAxOyAvLyB1c2VkIGluIENTU050aFNlbGVjdG9yCisgICAgICAgIGJvb2wg
bV9oYXNSYXJlRGF0YSAgICAgICAgICAgIDogMTsKIAotICAgIHByaXZhdGU6CiAgICAgICAgIHZv
aWQgZXh0cmFjdFBzZXVkb1R5cGUoKSBjb25zdDsKKworICAgICAgICBzdHJ1Y3QgUmFyZURhdGEg
eworICAgICAgICAgICAgUmFyZURhdGEoQ1NTU2VsZWN0b3IqIHRhZ0hpc3RvcnkpCisgICAgICAg
ICAgICAgICAgOiBtX3RhZ0hpc3RvcnkodGFnSGlzdG9yeSkKKyAgICAgICAgICAgICAgICAsIG1f
c2ltcGxlU2VsZWN0b3IoMCkKKyAgICAgICAgICAgICAgICAsIG1fYXR0cmlidXRlKGFueVFOYW1l
KCkpCisgICAgICAgICAgICAgICAgLCBtX2FyZ3VtZW50KG51bGxBdG9tKQorICAgICAgICAgICAg
ICAgICwgbV9hKDApCisgICAgICAgICAgICAgICAgLCBtX2IoMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH5SYXJlRGF0YSgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZGVsZXRlIG1fdGFnSGlzdG9yeTsKKyAgICAgICAgICAgICAgICBkZWxldGUg
bV9zaW1wbGVTZWxlY3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgcGFyc2VO
dGgoKTsKKyAgICAgICAgICAgIGJvb2wgbWF0Y2hOdGgoaW50IGNvdW50KTsKKworICAgICAgICAg
ICAgQ1NTU2VsZWN0b3IqIG1fdGFnSGlzdG9yeTsKKyAgICAgICAgICAgIENTU1NlbGVjdG9yKiBt
X3NpbXBsZVNlbGVjdG9yOyAvLyBVc2VkIGZvciA6bm90LgorICAgICAgICAgICAgUXVhbGlmaWVk
TmFtZSBtX2F0dHJpYnV0ZTsgLy8gdXNlZCBmb3IgYXR0cmlidXRlIHNlbGVjdG9yCisgICAgICAg
ICAgICBBdG9taWNTdHJpbmcgbV9hcmd1bWVudDsgLy8gVXNlZCBmb3IgOmNvbnRhaW5zLCA6bGFu
ZyBhbmQgOm50aC0qCisgICAgICAgICAgICBpbnQgbV9hOyAvLyBVc2VkIGZvciA6bnRoLSoKKyAg
ICAgICAgICAgIGludCBtX2I7IC8vIFVzZWQgZm9yIDpudGgtKgorICAgICAgICB9OworCisgICAg
ICAgIHZvaWQgY3JlYXRlUmFyZURhdGEoKSB7IAorICAgICAgICAgICAgaWYgKG1faGFzUmFyZURh
dGEpIAorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZGF0YS5tX3JhcmVE
YXRhID0gbmV3IFJhcmVEYXRhKG1fZGF0YS5tX3RhZ0hpc3RvcnkpOyAKKyAgICAgICAgICAgIG1f
aGFzUmFyZURhdGEgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBDU1NTZWxlY3RvciogbV90YWdIaXN0b3J5OworICAgICAgICAgICAgUmFy
ZURhdGEqIG1fcmFyZURhdGE7CisgICAgICAgIH0gbV9kYXRhOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAz
ODgzMykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VTb3VyY2UuaCIKICNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCi0jaW5jbHVk
ZSAiQ1NTTnRoU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKQEAg
LTE2MzYsNyArMTYzNSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5
bGUKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9uKCk7
CiAKICAgICAvLyBQcmVwYXJlIG5leHQgc2VsCi0gICAgc2VsID0gc2VsLT5tX3RhZ0hpc3Rvcnk7
CisgICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7CiAgICAgaWYgKCFzZWwpCiAgICAgICAgIHJl
dHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKQEAgLTE3OTgsMTkgKzE3OTcsMjEgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogCiAgICAgICAgIGlmIChzZWwtPm1fbWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQogICAgICAgICAgICAgcmV0dXJuIGUtPmhhc0lEKCkgJiYg
ZS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBzZWwtPm1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2VsLT5hdHRyaWJ1dGUoKTsKIAogICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoZSBjYXNlIHdlcmUgZWxlbWVudFN0eWxlIGlzIDAuCi0gICAgICAg
IGlmIChlbGVtZW50U3R5bGUgJiYgKCFlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCAoIXN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihlKS0+aXNNYXBwZWRBdHRyaWJ1dGUoc2VsLT5tX2F0dHIpICYm
IHNlbC0+bV9hdHRyICE9IHR5cGVBdHRyICYmIHNlbC0+bV9hdHRyICE9IHJlYWRvbmx5QXR0cikp
KSB7CisgICAgICAgIGlmIChlbGVtZW50U3R5bGUgJiYgKCFlLT5pc1N0eWxlZEVsZW1lbnQoKSB8
fCAoIXN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlKS0+aXNNYXBwZWRBdHRyaWJ1dGUoYXR0
cikgJiYgYXR0ciAhPSB0eXBlQXR0ciAmJiBhdHRyICE9IHJlYWRvbmx5QXR0cikpKSB7CiAgICAg
ICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoKTsg
Ly8gU3BlY2lhbC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFkb25seSIgYXR0cmlidXRlcyBzbyBp
bnB1dCBmb3JtIGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4KICAgICAgICAgICAgIGlmIChzZWxl
Y3RvckF0dHJzKQotICAgICAgICAgICAgICAgIHNlbGVjdG9yQXR0cnMtPmFkZChzZWwtPm1fYXR0
ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICAgICAgICAgIHNlbGVjdG9yQXR0cnMtPmFk
ZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gZS0+Z2V0QXR0cmlidXRlKHNlbC0+bV9hdHRyKTsKKyAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGUtPmdldEF0dHJpYnV0ZShhdHRyKTsKICAg
ICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRyaWJ1dGUgaXMgbm90IHNldAogCi0gICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2Rv
Y3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoc2Vs
LT5tX2F0dHIpOworICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElzSFRN
TCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOwogCiAgICAg
ICAgIHN3aXRjaCAoc2VsLT5tX21hdGNoKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4
YWN0OgpAQCAtMTg3MSwxMCArMTg3MiwxMCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVj
dG9yQ2hlY2tlcjo6CiAgICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250LgogICAgICAgICBp
ZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCkgewogICAgICAg
ICAgICAgLy8gY2hlY2sgdGhlIHNpbXBsZSBzZWxlY3RvcgotICAgICAgICAgICAgZm9yIChDU1NT
ZWxlY3Rvciogc3ViU2VsID0gc2VsLT5tX3NpbXBsZVNlbGVjdG9yOyBzdWJTZWw7IHN1YlNlbCA9
IHN1YlNlbC0+bV90YWdIaXN0b3J5KSB7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBz
dWJTZWwgPSBzZWwtPnNpbXBsZVNlbGVjdG9yKCk7IHN1YlNlbDsgc3ViU2VsID0gc3ViU2VsLT50
YWdIaXN0b3J5KCkpIHsKICAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0LiBJIGRv
bid0IHJlYWxseSBrbm93IHdoeSB0aGlzIGlzIGEKICAgICAgICAgICAgICAgICAvLyByZXN0cmlj
dGlvbiBpbiBDU1MzLCBidXQgaXQgaXMsIHNvIGxldCdzIGhvbm9yIGl0LgotICAgICAgICAgICAg
ICAgIGlmIChzdWJTZWwtPm1fc2ltcGxlU2VsZWN0b3IpCisgICAgICAgICAgICAgICAgaWYgKHN1
YlNlbC0+c2ltcGxlU2VsZWN0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgc2VsZWN0b3JBdHRy
cywgZHluYW1pY1BzZXVkbywgaXNBbmNlc3RvciwgdHJ1ZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50
UGFyZW50U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNzcs
NyArMjA3OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb050aENoaWxkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNf
Y2FzdDxDU1NOdGhTZWxlY3Rvcio+KHNlbCktPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAg
aWYgKCFzZWwtPnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGlmIChlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKQEAgLTIxMDQs
MTMgKzIxMDUsMTMgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6Ogog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxD
U1NOdGhTZWxlY3Rvcio+KHNlbCktPm1hdGNoTnRoKGNvdW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZUeXBl
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxDU1NOdGhTZWxlY3Rvcio+KHNl
bCktPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnRO
b2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKQEAgLTIxMjgsMTMgKzIxMjksMTMgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8Q1NTTnRoU2VsZWN0b3IqPihzZWwpLT5tYXRjaE50aChjb3VudCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb050aExhc3RDaGlsZDogewotICAgICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Q1NT
TnRoU2VsZWN0b3IqPihzZWwpLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgIGlmICghc2Vs
LT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIHBhcmVudE5vZGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oZS0+cGFyZW50Tm9kZSgpKTsKQEAgLTIxNTIsMTMgKzIxNTMsMTMgQEAgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8Q1NTTnRoU2VsZWN0b3IqPihzZWwpLT5tYXRjaE50aChjb3VudCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb050aExhc3RPZlR5cGU6IHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PENT
U050aFNlbGVjdG9yKj4oc2VsKS0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNl
bC0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgaWYgKGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUo
KSkgewogICAgICAgICAgICAgICAgICAgICBFbGVtZW50KiBwYXJlbnROb2RlID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KGUtPnBhcmVudE5vZGUoKSk7CkBAIC0yMTc3LDcgKzIxNzgsNyBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2li
bGluZygpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxDU1NOdGhTZWxlY3Rvcio+KHNlbCktPm1hdGNoTnRoKGNvdW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjI5OSw5ICsyMzAwLDEwIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjoKIAogICAgICAgICAgICAgICAgICAgICBuID0gbi0+cGFyZW50KCk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwg
IXZhbHVlLnN0YXJ0c1dpdGgoc2VsLT5tX2FyZ3VtZW50LCBmYWxzZSkpCisgICAgICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9IHNlbC0+YXJndW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRoKGFyZ3Vt
ZW50LCBmYWxzZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBzZWwtPm1fYXJndW1lbnQubGVuZ3RoKCkgJiYgdmFsdWVb
c2VsLT5tX2FyZ3VtZW50Lmxlbmd0aCgpXSAhPSAnLScpCisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlLmxlbmd0aCgpICE9IGFyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0
aCgpXSAhPSAnLScpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25704</attachid>
            <date>2008-12-03 01:08:42 -0800</date>
            <delta_ts>2008-12-03 01:45:08 -0800</delta_ts>
            <desc>implemented bdash&apos;s comments</desc>
            <filename>cssom-memory-selector-2.patch</filename>
            <type>text/plain</type>
            <size>34668</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODkzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMDgtMTItMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3OQorICAgICAgICBNYWtl
IENTU09NIHVzZSBsZXNzIG1lbW9yeQorCisgICAgICAgIFJlZHVjZSBzaXplIG9mIHRoZSBDU1NT
ZWxlY3RvciBieSAzLzggYnkgbW92aW5nIHJhcmVseSB1c2VkIGZpZWxkcyB0byBhIHJhcmUgZGF0
YQorICAgICAgICBzdHJ1Y3QuIEJyb3dzaW5nIGFyb3VuZCB3aXRoIHNvbWUgaW5zdHJ1bWVudGF0
aW9uIHNob3dlZCB0aGF0IH4wLjElIG9mIGFsbCBzZWxlY3RvcnMKKyAgICAgICAgZW5jb3VudGVy
ZWQgaGFkIHJhcmUgZGF0YS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBlbGltaW5hdGVz
IHRoZSBDU1NOdGhTZWxlY3RvciBzdWJjbGFzcyB3aGljaCB3aWxsIG1ha2UgcG9zc2libGUgdG8g
c3RvcmUKKyAgICAgICAgQ1NTU2VsZWN0b3JzIGluIGFuIGFycmF5IGluc3RlYWQgb2YgYSBsaW5r
ZWQgbGlzdCBmb3IgZnV0aGVyIG1lbW9yeSBzYXZpbmdzLgorCisgICAgICAgICogY3NzL0NTU0dy
YW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTnRoU2VsZWN0b3IuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGNzcy9DU1NOdGhTZWxlY3Rvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1Nl
bGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogY3NzL0NTU1Nl
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yOjpzZXRUYWdIaXN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjphdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldFNpbXBsZVNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1NlbGVjdG9yOjpwYXJzZU50aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6bWF0Y2hOdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpwYXJzZU50aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6Om1h
dGNoTnRoKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjpDU1NTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6fkNTU1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjp0YWdIaXN0
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpoYXNBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjpzaW1wbGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9y
OjpjcmVhdGVSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKToKKwogMjAwOC0xMi0wMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJKHJl
dmlzaW9uIDM4ODMzKQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJD
U1NOdGhTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtODI2LDEwICs4MjUsMTAgQEAg
c2VsZWN0b3I6CiAgICAgICAgIGVsc2UgaWYgKCQkKSB7CiAgICAgICAgICAgICBDU1NQYXJzZXIq
IHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgQ1NTU2Vs
ZWN0b3IqIGVuZCA9ICQkOwotICAgICAgICAgICAgd2hpbGUgKGVuZC0+bV90YWdIaXN0b3J5KQot
ICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+bV90YWdIaXN0b3J5OworICAgICAgICAgICAgd2hp
bGUgKGVuZC0+dGFnSGlzdG9yeSgpKQorICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlz
dG9yeSgpOwogICAgICAgICAgICAgZW5kLT5tX3JlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OkRlc2Nl
bmRhbnQ7Ci0gICAgICAgICAgICBlbmQtPm1fdGFnSGlzdG9yeSA9IHAtPnNpbmtGbG9hdGluZ1Nl
bGVjdG9yKCQxKTsKKyAgICAgICAgICAgIGVuZC0+c2V0VGFnSGlzdG9yeShwLT5zaW5rRmxvYXRp
bmdTZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBwLT5kb2N1
bWVudCgpKQogICAgICAgICAgICAgICAgIGRvYy0+c2V0VXNlc0Rlc2NlbmRhbnRSdWxlcyh0cnVl
KTsKICAgICAgICAgfQpAQCAtODQxLDEwICs4NDAsMTAgQEAgc2VsZWN0b3I6CiAgICAgICAgIGVs
c2UgaWYgKCQkKSB7CiAgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgQ1NTU2VsZWN0b3IqIGVuZCA9ICQkOwotICAg
ICAgICAgICAgd2hpbGUgKGVuZC0+bV90YWdIaXN0b3J5KQotICAgICAgICAgICAgICAgIGVuZCA9
IGVuZC0+bV90YWdIaXN0b3J5OworICAgICAgICAgICAgd2hpbGUgKGVuZC0+dGFnSGlzdG9yeSgp
KQorICAgICAgICAgICAgICAgIGVuZCA9IGVuZC0+dGFnSGlzdG9yeSgpOwogICAgICAgICAgICAg
ZW5kLT5tX3JlbGF0aW9uID0gJDI7Ci0gICAgICAgICAgICBlbmQtPm1fdGFnSGlzdG9yeSA9IHAt
PnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKTsKKyAgICAgICAgICAgIGVuZC0+c2V0VGFnSGlzdG9y
eShwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgaWYgKCQyID09IENT
U1NlbGVjdG9yOjpDaGlsZCkgewogICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0g
cC0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jLT5zZXRVc2VzRGVzY2VuZGFu
dFJ1bGVzKHRydWUpOwpAQCAtOTQ1LDEwICs5NDQsMTAgQEAgc3BlY2lmaWVyX2xpc3Q6CiAgICAg
ICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgICAgIENTU1NlbGVjdG9yKiBlbmQgPSAkMTsK
LSAgICAgICAgICAgIHdoaWxlIChlbmQtPm1fdGFnSGlzdG9yeSkKLSAgICAgICAgICAgICAgICBl
bmQgPSBlbmQtPm1fdGFnSGlzdG9yeTsKKyAgICAgICAgICAgIHdoaWxlIChlbmQtPnRhZ0hpc3Rv
cnkoKSkKKyAgICAgICAgICAgICAgICBlbmQgPSBlbmQtPnRhZ0hpc3RvcnkoKTsKICAgICAgICAg
ICAgIGVuZC0+bV9yZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKLSAgICAgICAg
ICAgIGVuZC0+bV90YWdIaXN0b3J5ID0gcC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDIpOworICAg
ICAgICAgICAgZW5kLT5zZXRUYWdIaXN0b3J5KHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQyKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBzcGVjaWZpZXJfbGlzdCBlcnJvciB7CkBAIC05NjMs
NyArOTYyLDYgQEAgc3BlY2lmaWVyOgogICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9y
OjpJZDsKICAgICAgICAgaWYgKCFwLT5tX3N0cmljdCkKICAgICAgICAgICAgICQxLmxvd2VyKCk7
Ci0gICAgICAgICQkLT5tX2F0dHIgPSBpZEF0dHI7CiAgICAgICAgICQkLT5tX3ZhbHVlID0gJDE7
CiAgICAgfQogICB8IEhFWCB7CkBAIC05NzUsNyArOTczLDYgQEAgc3BlY2lmaWVyOgogICAgICAg
ICAgICAgJCQtPm1fbWF0Y2ggPSBDU1NTZWxlY3Rvcjo6SWQ7CiAgICAgICAgICAgICBpZiAoIXAt
Pm1fc3RyaWN0KQogICAgICAgICAgICAgICAgICQxLmxvd2VyKCk7Ci0gICAgICAgICAgICAkJC0+
bV9hdHRyID0gaWRBdHRyOwogICAgICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMTsKICAgICAgICAg
fQogICAgIH0KQEAgLTk5MSw3ICs5ODgsNiBAQCBjbGFzczoKICAgICAgICAgJCQtPm1fbWF0Y2gg
PSBDU1NTZWxlY3Rvcjo6Q2xhc3M7CiAgICAgICAgIGlmICghcC0+bV9zdHJpY3QpCiAgICAgICAg
ICAgICAkMi5sb3dlcigpOwotICAgICAgICAkJC0+bV9hdHRyID0gY2xhc3NBdHRyOwogICAgICAg
ICAkJC0+bV92YWx1ZSA9ICQyOwogICAgIH0KICAgOwpAQCAtMTAxMCwxMiArMTAwNiwxMiBAQCBh
dHRyX25hbWU6CiBhdHRyaWI6CiAgICAgJ1snIG1heWJlX3NwYWNlIGF0dHJfbmFtZSAnXScgewog
ICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0
aW5nU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICQzLCBudWxsQXRvbSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgJDMsIG51bGxBdG9tKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2Vs
ZWN0b3I6OlNldDsKICAgICB9CiAgICAgfCAnWycgbWF5YmVfc3BhY2UgYXR0cl9uYW1lIG1hdGNo
IG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBtYXliZV9zcGFjZSAnXScgewogICAgICAgICAk
JCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZsb2F0aW5nU2VsZWN0
b3IoKTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICQzLCBu
dWxsQXRvbSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgJDMsIG51bGxBdG9tKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gKENTU1NlbGVjdG9yOjpN
YXRjaCkkNDsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkNjsKICAgICB9CkBAIC0xMDIzLDE2ICsx
MDE5LDE2IEBAIGF0dHJpYjoKICAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9
ICQzOwogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKLSAgICAgICAg
JCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LCAkNCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+bV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1l
c3BhY2UobmFtZXNwYWNlUHJlZml4KSk7CisgICAgICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlm
aWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsICQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwLT5tX3N0eWxlU2hlZXQtPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVm
aXgpKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKICAgICB9CiAg
ICAgfCAnWycgbWF5YmVfc3BhY2UgbmFtZXNwYWNlX3NlbGVjdG9yIGF0dHJfbmFtZSBtYXRjaCBt
YXliZV9zcGFjZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAgICAgICAgQXRv
bWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9ICQzOwogICAgICAgICBDU1NQYXJzZXIqIHAgPSBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZUZs
b2F0aW5nU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPm1fYXR0ciA9IFF1YWxpZmllZE5hbWUobmFt
ZXNwYWNlUHJlZml4LCAkNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+
bV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KSk7CisgICAg
ICAgICQkLT5zZXRBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsICQ0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5tX3N0eWxlU2hlZXQtPmRldGVy
bWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKSk7CiAgICAgICAgICQkLT5tX21hdGNoID0g
KENTU1NlbGVjdG9yOjpNYXRjaCkkNTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkNzsKICAgICB9
CkBAIC0xMTA3LDkgKzExMDMsOSBAQCBwc2V1ZG86CiAgICAgLy8gdXNlZCBieSA6bnRoLSooYXgr
YikKICAgICB8ICc6JyBGVU5DVElPTiBOVEggJyknIHsKICAgICAgICAgQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2Fz
dDxDU1NTZWxlY3Rvcio+KHAtPmNyZWF0ZUZsb2F0aW5nTnRoU2VsZWN0b3IoKSk7CisgICAgICAg
ICQkID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwogICAgICAgICAkJC0+bV9tYXRjaCA9
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsKLSAgICAgICAgJCQtPm1fYXJndW1lbnQgPSAkMzsK
KyAgICAgICAgJCQtPnNldEFyZ3VtZW50KCQzKTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsK
ICAgICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7
CiAgICAgICAgIGlmICh0eXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Vbmtub3duKQpAQCAtMTEy
NSw5ICsxMTIxLDkgQEAgcHNldWRvOgogICAgIC8vIHVzZWQgYnkgOm50aC0qCiAgICAgfCAnOicg
RlVOQ1RJT04gSU5URUdFUiAnKScgewogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1NlbGVj
dG9yKj4ocC0+Y3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpKTsKKyAgICAgICAgJCQgPSBwLT5j
cmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5tX21hdGNoID0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzOwotICAgICAgICAkJC0+bV9hcmd1bWVudCA9IFN0cmluZzo6bnVtYmVy
KCQzKTsKKyAgICAgICAgJCQtPnNldEFyZ3VtZW50KFN0cmluZzo6bnVtYmVyKCQzKSk7CiAgICAg
ICAgICQkLT5tX3ZhbHVlID0gJDI7CiAgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHR5
cGUgPSAkJC0+cHNldWRvVHlwZSgpOwogICAgICAgICBpZiAodHlwZSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvVW5rbm93bikKQEAgLTExNDMsOSArMTEzOSw5IEBAIHBzZXVkbzoKICAgICAvLyB1c2Vk
IGJ5IDpudGgtKihvZGQvZXZlbikgYW5kIDpsYW5nCiAgICAgfCAnOicgRlVOQ1RJT04gSURFTlQg
JyknIHsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKTsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcio+KHAtPmNyZWF0ZUZs
b2F0aW5nTnRoU2VsZWN0b3IoKSk7CisgICAgICAgICQkID0gcC0+Y3JlYXRlRmxvYXRpbmdTZWxl
Y3RvcigpOwogICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzczsK
LSAgICAgICAgJCQtPm1fYXJndW1lbnQgPSAkMzsKKyAgICAgICAgJCQtPnNldEFyZ3VtZW50KCQz
KTsKICAgICAgICAgJDIubG93ZXIoKTsKICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsKICAgICAg
ICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgdHlwZSA9ICQkLT5wc2V1ZG9UeXBlKCk7CkBAIC0x
MTY3LDcgKzExNjMsNyBAQCBwc2V1ZG86CiAgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgJCQgPSBwLT5jcmVhdGVG
bG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+bV9tYXRjaCA9IENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzczsKLSAgICAgICAgICAgICQkLT5tX3NpbXBsZVNlbGVjdG9yID0gcC0+c2lu
a0Zsb2F0aW5nU2VsZWN0b3IoJDQpOworICAgICAgICAgICAgJCQtPnNldFNpbXBsZVNlbGVjdG9y
KHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQ0KSk7CiAgICAgICAgICAgICAkMi5sb3dlcigpOwog
ICAgICAgICAgICAgJCQtPm1fdmFsdWUgPSAkMjsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTTnRoU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU050aFNl
bGVjdG9yLmNwcAkocmV2aXNpb24gMzg4MzMpCisrKyBXZWJDb3JlL2Nzcy9DU1NOdGhTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTTnRoU2VsZWN0b3IuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRz
Ci1ib29sIENTU050aFNlbGVjdG9yOjpwYXJzZU50aCgpCi17Ci0gICAgaWYgKG1fcGFyc2VkTnRo
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIG1fYXIgPSBt
X2FyZ3VtZW50OwotICAgIAotICAgIGlmIChtX2FyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIG1fcGFyc2VkTnRoID0gdHJ1ZTsKLSAgICBtX2EgPSAwOwotICAg
IG1fYiA9IDA7Ci0gICAgaWYgKG1fYXIgPT0gIm9kZCIpIHsKLSAgICAgICAgbV9hID0gMjsKLSAg
ICAgICAgbV9iID0gMTsKLSAgICB9IGVsc2UgaWYgKG1fYXIgPT0gImV2ZW4iKSB7Ci0gICAgICAg
IG1fYSA9IDI7Ci0gICAgICAgIG1fYiA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IG4g
PSBtX2FyLmZpbmQoJ24nKTsKLSAgICAgICAgaWYgKG4gIT0gLTEpIHsKLSAgICAgICAgICAgIGlm
IChtX2FyWzBdID09ICctJykgewotICAgICAgICAgICAgICAgIGlmIChuID09IDEpCi0gICAgICAg
ICAgICAgICAgICAgIG1fYSA9IC0xOyAvLyAtbiA9PSAtMW4KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG1fYSA9IG1fYXIuc3Vic3RyaW5nKDAsIG4pLnRvSW50KCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFuKQotICAgICAgICAgICAgICAgIG1fYSA9IDE7IC8v
IG4gPT0gMW4KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2EgPSBtX2FyLnN1
YnN0cmluZygwLCBuKS50b0ludCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgcCA9
IG1fYXIuZmluZCgnKycsIG4pOwotICAgICAgICAgICAgaWYgKHAgIT0gLTEpCi0gICAgICAgICAg
ICAgICAgbV9iID0gbV9hci5zdWJzdHJpbmcocCArIDEsIG1fYXIubGVuZ3RoKCkgLSBwIC0gMSku
dG9JbnQoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHAgPSBtX2FyLmZp
bmQoJy0nLCBuKTsKLSAgICAgICAgICAgICAgICBtX2IgPSAtbV9hci5zdWJzdHJpbmcocCArIDEs
IG1fYXIubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX2IgPSBtX2FyLnRvSW50KCk7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgbnRoLWFyZ3Vt
ZW50cwotYm9vbCBDU1NOdGhTZWxlY3Rvcjo6bWF0Y2hOdGgoaW50IGNvdW50KQotewotICAgIGlm
ICghbV9hKQotICAgICAgICByZXR1cm4gY291bnQgPT0gbV9iOwotICAgIGVsc2UgaWYgKG1fYSA+
IDApIHsKLSAgICAgICAgaWYgKGNvdW50IDwgbV9iKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gKGNvdW50IC0gbV9iKSAlIG1fYSA9PSAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChjb3VudCA+IG1fYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIChtX2IgLSBjb3VudCkgJSAoLW1fYSkgPT0gMDsKLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU050aFNlbGVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTnRoU2VsZWN0b3IuaAkocmV2aXNpb24gMzg4
MzMpCisrKyBXZWJDb3JlL2Nzcy9DU1NOdGhTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFNtaXRoIChj
YXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDU1NOdGhTZWxlY3Rvcl9oCi0jZGVmaW5l
IENTU050aFNlbGVjdG9yX2gKLQotI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKLSNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyB0aGlzIGNs
YXNzIHJlcHJlc2VudHMgYSBzZWxlY3RvciB1c2luZyA6bnRoLWNoaWxkIGZvciBhIFN0eWxlUnVs
ZQotICAgIGNsYXNzIENTU050aFNlbGVjdG9yIDogcHVibGljIENTU1NlbGVjdG9yIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIENTU050aFNlbGVjdG9yKCkKLSAgICAgICAgICAgIDogbV9hKDApCi0g
ICAgICAgICAgICAsIG1fYigwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDU1NO
dGhTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKLSAgICAgICAgICAgIDogbV9h
KDApCi0gICAgICAgICAgICAsIG1fYigwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICB+Q1NTTnRoU2VsZWN0b3IoKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgcGFyc2VOdGgoKTsKLSAgICAgICAgYm9vbCBtYXRjaE50aChpbnQgY291bnQpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgaW50IG1fYTsKLSAgICAgICAgaW50IG1fYjsKLSAgICB9
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDU1NTZWxlY3Rvcl9oCklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDM4ODMzKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkNTU1JlZmxl
Y3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJDU1NOdGhTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NVbmljb2RlUmFu
Z2VWYWx1ZS5oIgpAQCAtNDM3NCwxMyArNDM3Myw2IEBAIENTU1NlbGVjdG9yKiBDU1NQYXJzZXI6
OmNyZWF0ZUZsb2F0aW5nU2UKICAgICBtX2Zsb2F0aW5nU2VsZWN0b3JzLmFkZChzZWxlY3Rvcik7
CiAgICAgcmV0dXJuIHNlbGVjdG9yOwogfQotICAgIAotQ1NTTnRoU2VsZWN0b3IqIENTU1BhcnNl
cjo6Y3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpCi17Ci0gICAgQ1NTTnRoU2VsZWN0b3IqIHNl
bGVjdG9yID0gbmV3IENTU050aFNlbGVjdG9yOwotICAgIG1fZmxvYXRpbmdTZWxlY3RvcnMuYWRk
KHNlbGVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3I7Ci19CiAKIENTU1NlbGVjdG9yKiBDU1NQ
YXJzZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCShyZXZpc2lvbiAzODgzMykKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBDU1NSdWxlOwogICAgIGNsYXNzIENTU1J1bGVMaXN0OwogICAgIGNsYXNzIENTU1NlbGVj
dG9yOwotICAgIGNsYXNzIENTU050aFNlbGVjdG9yOwogICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7
CiAgICAgY2xhc3MgQ1NTVmFsdWU7CiAgICAgY2xhc3MgQ1NTVmFsdWVMaXN0OwpAQCAtMTUzLDcg
KzE1Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHl5cGFyc2UoKTsKIAog
ICAgICAgICBDU1NTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwotICAgICAgICBD
U1NOdGhTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdOdGhTZWxlY3RvcigpOwogICAgICAgICBDU1NT
ZWxlY3Rvciogc2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NTU2VsZWN0b3IqKTsKIAogICAgICAgICBD
U1NQYXJzZXJWYWx1ZUxpc3QqIGNyZWF0ZUZsb2F0aW5nVmFsdWVMaXN0KCk7CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3IuY3BwCShyZXZpc2lvbiAzODgzMykKKysrIFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAgICAgMjAwMSBB
bmRyZWFzIFNjaGxhcGJhY2ggKHNjaGxwYmNoQGlhbS51bmliZS5jaCkKICAqICAgICAgICAgICAg
ICAgMjAwMS0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwu
Y29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNSwxNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAKKyNpbmNsdWRlICJ3dGYvQXNzZXJ0
aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCiB1bnNpZ25lZCBpbnQgQ1NTU2VsZWN0b3I6OnNwZWNpZmljaXR5KCkKIHsKQEAg
LTUyLDggKzU4LDggQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobV90YWdIaXN0b3J5KQotICAgICAg
ICBzICs9IG1fdGFnSGlzdG9yeS0+c3BlY2lmaWNpdHkoKTsKKyAgICBpZiAoQ1NTU2VsZWN0b3Iq
IHRhZ0hpc3RvcnkgPSB0aGlzLT50YWdIaXN0b3J5KCkpCisgICAgICAgIHMgKz0gdGFnSGlzdG9y
eS0+c3BlY2lmaWNpdHkoKTsKIAogICAgIC8vIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IG92ZXJmbG93
CiAgICAgcmV0dXJuIHMgJiAweGZmZmZmZjsKQEAgLTMyNCwxNCArMzMwLDE0IEBAIGJvb2wgQ1NT
U2VsZWN0b3I6Om9wZXJhdG9yPT0oY29uc3QgQ1NTU2UKICAgICBjb25zdCBDU1NTZWxlY3Rvciog
c2VsMiA9ICZvdGhlcjsKIAogICAgIHdoaWxlIChzZWwxICYmIHNlbDIpIHsKLSAgICAgICAgaWYg
KHNlbDEtPm1fdGFnICE9IHNlbDItPm1fdGFnIHx8IHNlbDEtPm1fYXR0ciAhPSBzZWwyLT5tX2F0
dHIgfHwKKyAgICAgICAgaWYgKHNlbDEtPm1fdGFnICE9IHNlbDItPm1fdGFnIHx8IHNlbDEtPmF0
dHJpYnV0ZSgpICE9IHNlbDItPmF0dHJpYnV0ZSgpIHx8CiAgICAgICAgICAgICAgc2VsMS0+cmVs
YXRpb24oKSAhPSBzZWwyLT5yZWxhdGlvbigpIHx8IHNlbDEtPm1fbWF0Y2ggIT0gc2VsMi0+bV9t
YXRjaCB8fAogICAgICAgICAgICAgIHNlbDEtPm1fdmFsdWUgIT0gc2VsMi0+bV92YWx1ZSB8fAog
ICAgICAgICAgICAgIHNlbDEtPnBzZXVkb1R5cGUoKSAhPSBzZWwyLT5wc2V1ZG9UeXBlKCkgfHwK
LSAgICAgICAgICAgICBzZWwxLT5tX2FyZ3VtZW50ICE9IHNlbDItPm1fYXJndW1lbnQpCisgICAg
ICAgICAgICAgc2VsMS0+YXJndW1lbnQoKSAhPSBzZWwyLT5hcmd1bWVudCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzZWwxID0gc2VsMS0+bV90YWdIaXN0b3J5OwotICAg
ICAgICBzZWwyID0gc2VsMi0+bV90YWdIaXN0b3J5OworICAgICAgICBzZWwxID0gc2VsMS0+dGFn
SGlzdG9yeSgpOworICAgICAgICBzZWwyID0gc2VsMi0+dGFnSGlzdG9yeSgpOwogICAgIH0KIAog
ICAgIGlmIChzZWwxIHx8IHNlbDIpCkBAIC0zNjUsMTEgKzM3MSwxMSBAQCBTdHJpbmcgQ1NTU2Vs
ZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICBzdHIgKz0gIjoiOwogICAg
ICAgICAgICAgc3RyICs9IGNzLT5tX3ZhbHVlOwogICAgICAgICAgICAgaWYgKGNzLT5wc2V1ZG9U
eXBlKCkgPT0gUHNldWRvTm90KSB7Ci0gICAgICAgICAgICAgICAgaWYgKENTU1NlbGVjdG9yKiBz
dWJTZWwgPSBjcy0+bV9zaW1wbGVTZWxlY3RvcikKKyAgICAgICAgICAgICAgICBpZiAoQ1NTU2Vs
ZWN0b3IqIHN1YlNlbCA9IGNzLT5zaW1wbGVTZWxlY3RvcigpKQogICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gc3ViU2VsLT5zZWxlY3RvclRleHQoKTsKICAgICAgICAgICAgICAgICBzdHIgKz0g
IikiOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjcy0+cHNldWRvVHlwZSgpID09IFBzZXVkb0xh
bmcpIHsKLSAgICAgICAgICAgICAgICBzdHIgKz0gY3MtPm1fYXJndW1lbnQ7CisgICAgICAgICAg
ICAgICAgc3RyICs9IGNzLT5hcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIHN0ciArPSAiKSI7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3MtPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKQEAgLTM3NywxMCArMzgzLDEwIEBAIFN0cmluZyBDU1NT
ZWxlY3Rvcjo6c2VsZWN0b3JUZXh0KCkgY29uc3QKICAgICAgICAgICAgIHN0ciArPSBjcy0+bV92
YWx1ZTsKICAgICAgICAgfSBlbHNlIGlmIChjcy0+aGFzQXR0cmlidXRlKCkpIHsKICAgICAgICAg
ICAgIHN0ciArPSAiWyI7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCA9
IGNzLT5tX2F0dHIucHJlZml4KCk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCA9IGNzLT5hdHRyaWJ1dGUoKS5wcmVmaXgoKTsKICAgICAgICAgICAgIGlmICghcHJlZml4
LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0ciArPSBwcmVmaXggKyAifCI7Ci0gICAgICAg
ICAgICBzdHIgKz0gY3MtPm1fYXR0ci5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIHN0ciArPSBj
cy0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5tX21h
dGNoKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhhY3Q6CiAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAiPSI7CkBAIC00MTMsMTMgKzQxOSwxMyBAQCBTdHJpbmcgQ1NT
U2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgc3RyICs9ICJc
Il0iOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChjcy0+cmVsYXRpb24o
KSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IgfHwgIWNzLT5tX3RhZ0hpc3RvcnkpCisgICAg
ICAgIGlmIChjcy0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IgfHwgIWNz
LT50YWdIaXN0b3J5KCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY3MgPSBjcy0+bV90
YWdIaXN0b3J5OworICAgICAgICBjcyA9IGNzLT50YWdIaXN0b3J5KCk7CiAgICAgfQogCi0gICAg
aWYgKGNzLT5tX3RhZ0hpc3RvcnkpIHsKLSAgICAgICAgU3RyaW5nIHRhZ0hpc3RvcnlUZXh0ID0g
Y3MtPm1fdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCk7CisgICAgaWYgKENTU1NlbGVjdG9yKiB0
YWdIaXN0b3J5ID0gY3MtPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICBTdHJpbmcgdGFnSGlzdG9y
eVRleHQgPSB0YWdIaXN0b3J5LT5zZWxlY3RvclRleHQoKTsKICAgICAgICAgaWYgKGNzLT5yZWxh
dGlvbigpID09IENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudCkKICAgICAgICAgICAgIHN0ciA9
IHRhZ0hpc3RvcnlUZXh0ICsgIiArICIgKyBzdHI7CiAgICAgICAgIGVsc2UgaWYgKGNzLT5yZWxh
dGlvbigpID09IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50KQpAQCAtNDMzLDUgKzQzOSwx
MTcgQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQoKSBjb25zdAogCiAgICAgcmV0
dXJuIHN0cjsKIH0KKyAgICAKK3ZvaWQgQ1NTU2VsZWN0b3I6OnNldFRhZ0hpc3RvcnkoQ1NTU2Vs
ZWN0b3IqIHRhZ0hpc3RvcnkpIAoreyAKKyAgICBpZiAobV9oYXNSYXJlRGF0YSkgCisgICAgICAg
IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3RhZ0hpc3Rvcnkuc2V0KHRhZ0hpc3RvcnkpOyAKKyAgICBl
bHNlIAorICAgICAgICBtX2RhdGEubV90YWdIaXN0b3J5ID0gdGFnSGlzdG9yeTsgCit9CisKK2Nv
bnN0IFF1YWxpZmllZE5hbWUmIENTU1NlbGVjdG9yOjphdHRyaWJ1dGUoKSBjb25zdAoreyAKKyAg
ICBzd2l0Y2ggKG1fbWF0Y2gpIHsKKyAgICBjYXNlIElkOgorICAgICAgICByZXR1cm4gaWRBdHRy
OworICAgIGNhc2UgQ2xhc3M6CisgICAgICAgIHJldHVybiBjbGFzc0F0dHI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9h
dHRyaWJ1dGUgOiBhbnlRTmFtZSgpOworICAgIH0KK30KKwordm9pZCBDU1NTZWxlY3Rvcjo6c2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSAKK3sgCisgICAgY3JlYXRlUmFy
ZURhdGEoKTsgCisgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXR0cmlidXRlID0gdmFsdWU7IAor
fQorICAgIAordm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkgCit7IAorICAgIGNyZWF0ZVJhcmVEYXRhKCk7IAorICAgIG1fZGF0YS5tX3JhcmVE
YXRhLT5tX2FyZ3VtZW50ID0gdmFsdWU7IAorfQorCit2b2lkIENTU1NlbGVjdG9yOjpzZXRTaW1w
bGVTZWxlY3RvcihDU1NTZWxlY3RvciogdmFsdWUpCit7CisgICAgY3JlYXRlUmFyZURhdGEoKTsg
CisgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fc2ltcGxlU2VsZWN0b3Iuc2V0KHZhbHVlKTsgCit9
CisKK2Jvb2wgQ1NTU2VsZWN0b3I6OnBhcnNlTnRoKCkKK3sKKyAgICBpZiAoIW1faGFzUmFyZURh
dGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9wYXJzZWROdGgpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIG1fcGFyc2VkTnRoID0gbV9kYXRhLm1fcmFyZURhdGEtPnBhcnNl
TnRoKCk7CisgICAgcmV0dXJuIG1fcGFyc2VkTnRoOworfQorCitib29sIENTU1NlbGVjdG9yOjpt
YXRjaE50aChpbnQgY291bnQpCit7CisgICAgQVNTRVJUKG1faGFzUmFyZURhdGEpOworICAgIHJl
dHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bWF0Y2hOdGgoY291bnQpOworfQogCisvLyBhIGhlbHBl
ciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRzCitib29sIENTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6cGFyc2VOdGgoKQoreyAgICAKKyAgICBjb25zdCBTdHJpbmcmIGFyZ3VtZW50ID0g
bV9hcmd1bWVudDsKKyAgICAKKyAgICBpZiAoYXJndW1lbnQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9hID0gMDsKKyAgICBtX2IgPSAwOworICAgIGlmIChh
cmd1bWVudCA9PSAib2RkIikgeworICAgICAgICBtX2EgPSAyOworICAgICAgICBtX2IgPSAxOwor
ICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgPT0gImV2ZW4iKSB7CisgICAgICAgIG1fYSA9IDI7Cisg
ICAgICAgIG1fYiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG4gPSBhcmd1bWVudC5m
aW5kKCduJyk7CisgICAgICAgIGlmIChuICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoYXJndW1l
bnRbMF0gPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9hID0gLTE7IC8vIC1uID09IC0xbgorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9hID0gYXJndW1lbnQuc3Vic3RyaW5nKDAsIG4pLnRvSW50KCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFuKQorICAgICAgICAgICAgICAgIG1fYSA9IDE7IC8v
IG4gPT0gMW4KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2EgPSBhcmd1bWVu
dC5zdWJzdHJpbmcoMCwgbikudG9JbnQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50
IHAgPSBhcmd1bWVudC5maW5kKCcrJywgbik7CisgICAgICAgICAgICBpZiAocCAhPSAtMSkKKyAg
ICAgICAgICAgICAgICBtX2IgPSBhcmd1bWVudC5zdWJzdHJpbmcocCArIDEsIGFyZ3VtZW50Lmxl
bmd0aCgpIC0gcCAtIDEpLnRvSW50KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBwID0gYXJndW1lbnQuZmluZCgnLScsIG4pOworICAgICAgICAgICAgICAgIG1fYiA9IC1h
cmd1bWVudC5zdWJzdHJpbmcocCArIDEsIGFyZ3VtZW50Lmxlbmd0aCgpIC0gcCAtIDEpLnRvSW50
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9iID0gYXJn
dW1lbnQudG9JbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIGEgaGVscGVy
IGZ1bmN0aW9uIGZvciBjaGVja2luZyBudGgtYXJndW1lbnRzCitib29sIENTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6bWF0Y2hOdGgoaW50IGNvdW50KQoreworICAgIGlmICghbV9hKQorICAgICAgICBy
ZXR1cm4gY291bnQgPT0gbV9iOworICAgIGVsc2UgaWYgKG1fYSA+IDApIHsKKyAgICAgICAgaWYg
KGNvdW50IDwgbV9iKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
KGNvdW50IC0gbV9iKSAlIG1fYSA9PSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb3Vu
dCA+IG1fYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChtX2Ig
LSBjb3VudCkgJSAoLW1fYSkgPT0gMDsKKyAgICB9Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHJldmlzaW9uIDM4ODMzKQorKysgV2ViQ29yZS9jc3Mv
Q1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMzcgKzMyLDMzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NTZWxlY3RvciB7CiAgICAgcHVibGljOgogICAgICAg
ICBDU1NTZWxlY3RvcigpCi0gICAgICAgICAgICA6IG1fdGFnSGlzdG9yeSgwKQotICAgICAgICAg
ICAgLCBtX3NpbXBsZVNlbGVjdG9yKDApCi0gICAgICAgICAgICAsIG1fbmV4dFNlbGVjdG9yKDAp
Ci0gICAgICAgICAgICAsIG1fYXJndW1lbnQobnVsbEF0b20pCi0gICAgICAgICAgICAsIG1fYXR0
cihhbnlRTmFtZSgpKQorICAgICAgICAgICAgOiBtX25leHRTZWxlY3RvcigwKQogICAgICAgICAg
ICAgLCBtX3RhZyhhbnlRTmFtZSgpKQogICAgICAgICAgICAgLCBtX3JlbGF0aW9uKERlc2NlbmRh
bnQpCiAgICAgICAgICAgICAsIG1fbWF0Y2goTm9uZSkKICAgICAgICAgICAgICwgbV9wc2V1ZG9U
eXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAgICAgICwgbV9wYXJzZWROdGgoZmFsc2UpCisg
ICAgICAgICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIENTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQotICAgICAg
ICAgICAgOiBtX3RhZ0hpc3RvcnkoMCkKLSAgICAgICAgICAgICwgbV9zaW1wbGVTZWxlY3Rvcigw
KQotICAgICAgICAgICAgLCBtX25leHRTZWxlY3RvcigwKQotICAgICAgICAgICAgLCBtX2FyZ3Vt
ZW50KG51bGxBdG9tKQotICAgICAgICAgICAgLCBtX2F0dHIoYW55UU5hbWUoKSkKKyAgICAgICAg
ICAgIDogbV9uZXh0U2VsZWN0b3IoMCkKICAgICAgICAgICAgICwgbV90YWcocU5hbWUpCiAgICAg
ICAgICAgICAsIG1fcmVsYXRpb24oRGVzY2VuZGFudCkKICAgICAgICAgICAgICwgbV9tYXRjaChO
b25lKQogICAgICAgICAgICAgLCBtX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAg
ICAgICAgLCBtX3BhcnNlZE50aChmYWxzZSkKKyAgICAgICAgICAgICwgbV9oYXNSYXJlRGF0YShm
YWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgfkNTU1NlbGVjdG9yKCkKICAg
ICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1fdGFnSGlzdG9yeTsKLSAgICAgICAgICAgIGRl
bGV0ZSBtX3NpbXBsZVNlbGVjdG9yOworICAgICAgICAgICAgaWYgKG1faGFzUmFyZURhdGEpCisg
ICAgICAgICAgICAgICAgZGVsZXRlIG1fZGF0YS5tX3JhcmVEYXRhOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGRlbGV0ZSBtX2RhdGEubV90YWdIaXN0b3J5OwogICAgICAgICAg
ICAgZGVsZXRlIG1fbmV4dFNlbGVjdG9yOwogICAgICAgICB9CiAKQEAgLTE5MywzMCArMTg5LDc0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBleHRyYWN0UHNldWRvVHlw
ZSgpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBzZXVkb1R5cGU+KG1fcHNldWRv
VHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENTU1NlbGVjdG9yKiB0YWdIaXN0
b3J5KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5t
X3RhZ0hpc3RvcnkuZ2V0KCkgOiBtX2RhdGEubV90YWdIaXN0b3J5OyB9CisgICAgICAgIHZvaWQg
c2V0VGFnSGlzdG9yeShDU1NTZWxlY3RvciogdGFnSGlzdG9yeSk7CiAKICAgICAgICAgYm9vbCBo
YXNUYWcoKSBjb25zdCB7IHJldHVybiBtX3RhZyAhPSBhbnlRTmFtZSgpOyB9Ci0gICAgICAgIGJv
b2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyICE9IGFueVFOYW1lKCk7IH0K
KyAgICAgICAgYm9vbCBoYXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX21hdGNoID09IElk
IHx8IG1fbWF0Y2ggPT0gQ2xhc3MgfHwgKG1faGFzUmFyZURhdGEgJiYgbV9kYXRhLm1fcmFyZURh
dGEtPm1fYXR0cmlidXRlICE9IGFueVFOYW1lKCkpOyB9CisgICAgICAgIAorICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBhcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEu
bV9yYXJlRGF0YS0+bV9hcmd1bWVudCA6IG51bGxBdG9tOyB9CisgICAgICAgIENTU1NlbGVjdG9y
KiBzaW1wbGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEu
bV9yYXJlRGF0YS0+bV9zaW1wbGVTZWxlY3Rvci5nZXQoKSA6IDA7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBzZXRTaW1wbGVTZWxlY3RvcihDU1NTZWxlY3RvciogdmFsdWUpOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBwYXJzZU50aCgpOworICAgICAgICBib29sIG1hdGNoTnRoKGludCBjb3VudCk7
CiAKICAgICAgICAgUmVsYXRpb24gcmVsYXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxSZWxhdGlvbj4obV9yZWxhdGlvbik7IH0KIAogICAgICAgICBtdXRhYmxlIEF0b21pY1N0cmlu
ZyBtX3ZhbHVlOwotICAgICAgICBDU1NTZWxlY3RvciogbV90YWdIaXN0b3J5OwotICAgICAgICBD
U1NTZWxlY3RvciogbV9zaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBmb3IgOm5vdC4KICAgICAgICAg
Q1NTU2VsZWN0b3IqIG1fbmV4dFNlbGVjdG9yOyAvLyB1c2VkIGZvciAsLWNoYWluZWQgc2VsZWN0
b3JzCi0gICAgICAgIEF0b21pY1N0cmluZyBtX2FyZ3VtZW50OyAvLyBVc2VkIGZvciA6Y29udGFp
bnMsIDpsYW5nIGFuZCA6bnRoLSoKLQotICAgICAgICBRdWFsaWZpZWROYW1lIG1fYXR0cjsKICAg
ICAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZzsKIAogICAgICAgICB1bnNpZ25lZCBtX3JlbGF0aW9u
ICAgICAgICAgICA6IDM7IC8vIGVudW0gUmVsYXRpb24KICAgICAgICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX21hdGNoICAgICAgOiA0OyAvLyBlbnVtIE1hdGNoCiAgICAgICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9wc2V1ZG9UeXBlIDogODsgLy8gUHNldWRvVHlwZQogICAgICAgICAKLSAgICBwcm90ZWN0
ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX3BhcnNlZE50aCAgICAgICAgICAgICAg
OiAxOyAvLyB1c2VkIGluIENTU050aFNlbGVjdG9yCisgICAgICAgIGJvb2wgbV9oYXNSYXJlRGF0
YSAgICAgICAgICAgIDogMTsKIAotICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZXh0cmFjdFBz
ZXVkb1R5cGUoKSBjb25zdDsKKworICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgeworICAgICAgICAg
ICAgUmFyZURhdGEoQ1NTU2VsZWN0b3IqIHRhZ0hpc3RvcnkpCisgICAgICAgICAgICAgICAgOiBt
X3RhZ0hpc3RvcnkodGFnSGlzdG9yeSkKKyAgICAgICAgICAgICAgICAsIG1fc2ltcGxlU2VsZWN0
b3IoMCkKKyAgICAgICAgICAgICAgICAsIG1fYXR0cmlidXRlKGFueVFOYW1lKCkpCisgICAgICAg
ICAgICAgICAgLCBtX2FyZ3VtZW50KG51bGxBdG9tKQorICAgICAgICAgICAgICAgICwgbV9hKDAp
CisgICAgICAgICAgICAgICAgLCBtX2IoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBwYXJzZU50aCgpOworICAgICAgICAgICAgYm9vbCBtYXRjaE50
aChpbnQgY291bnQpOworCisgICAgICAgICAgICBPd25QdHI8Q1NTU2VsZWN0b3I+IG1fdGFnSGlz
dG9yeTsKKyAgICAgICAgICAgIE93blB0cjxDU1NTZWxlY3Rvcj4gbV9zaW1wbGVTZWxlY3Rvcjsg
Ly8gVXNlZCBmb3IgOm5vdC4KKyAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgbV9hdHRyaWJ1dGU7
IC8vIHVzZWQgZm9yIGF0dHJpYnV0ZSBzZWxlY3RvcgorICAgICAgICAgICAgQXRvbWljU3RyaW5n
IG1fYXJndW1lbnQ7IC8vIFVzZWQgZm9yIDpjb250YWlucywgOmxhbmcgYW5kIDpudGgtKgorICAg
ICAgICAgICAgaW50IG1fYTsgLy8gVXNlZCBmb3IgOm50aC0qCisgICAgICAgICAgICBpbnQgbV9i
OyAvLyBVc2VkIGZvciA6bnRoLSoKKyAgICAgICAgfTsKKworICAgICAgICB2b2lkIGNyZWF0ZVJh
cmVEYXRhKCkgeyAKKyAgICAgICAgICAgIGlmIChtX2hhc1JhcmVEYXRhKSAKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBtX2RhdGEubV9yYXJlRGF0YSA9IG5ldyBSYXJlRGF0
YShtX2RhdGEubV90YWdIaXN0b3J5KTsgCisgICAgICAgICAgICBtX2hhc1JhcmVEYXRhID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5pb24gRGF0YVVuaW9uIHsKKyAgICAg
ICAgICAgIERhdGFVbmlvbigpIDogbV90YWdIaXN0b3J5KDApIHsgfQorICAgICAgICAgICAgQ1NT
U2VsZWN0b3IqIG1fdGFnSGlzdG9yeTsKKyAgICAgICAgICAgIFJhcmVEYXRhKiBtX3JhcmVEYXRh
OworICAgICAgICB9IG1fZGF0YTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzg4MzMpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVs
ZS5oIgogI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgotI2luY2x1ZGUgIkNTU050aFNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCkBAIC0xNjM2LDcgKzE2MzUsNyBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0eWxlCiAgICAgQ1NTU2VsZWN0
b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsLT5yZWxhdGlvbigpOwogCiAgICAgLy8gUHJlcGFy
ZSBuZXh0IHNlbAotICAgIHNlbCA9IHNlbC0+bV90YWdIaXN0b3J5OworICAgIHNlbCA9IHNlbC0+
dGFnSGlzdG9yeSgpOwogICAgIGlmICghc2VsKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JNYXRj
aGVzOwogCkBAIC0xNzk4LDE5ICsxNzk3LDIxIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjoKIAogICAgICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCkKICAgICAgICAgICAgIHJldHVybiBlLT5oYXNJRCgpICYmIGUtPmdldElEQXR0cmlidXRl
KCkgPT0gc2VsLT5tX3ZhbHVlOworICAgICAgICAKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7CiAKICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0
aGUgY2FzZSB3ZXJlIGVsZW1lbnRTdHlsZSBpcyAwLgotICAgICAgICBpZiAoZWxlbWVudFN0eWxl
ICYmICghZS0+aXNTdHlsZWRFbGVtZW50KCkgfHwgKCFzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4oZSktPmlzTWFwcGVkQXR0cmlidXRlKHNlbC0+bV9hdHRyKSAmJiBzZWwtPm1fYXR0ciAhPSB0
eXBlQXR0ciAmJiBzZWwtPm1fYXR0ciAhPSByZWFkb25seUF0dHIpKSkgeworICAgICAgICBpZiAo
ZWxlbWVudFN0eWxlICYmICghZS0+aXNTdHlsZWRFbGVtZW50KCkgfHwgKCFzdGF0aWNfY2FzdDxT
dHlsZWRFbGVtZW50Kj4oZSktPmlzTWFwcGVkQXR0cmlidXRlKGF0dHIpICYmIGF0dHIgIT0gdHlw
ZUF0dHIgJiYgYXR0ciAhPSByZWFkb25seUF0dHIpKSkgewogICAgICAgICAgICAgZWxlbWVudFN0
eWxlLT5zZXRBZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKCk7IC8vIFNwZWNpYWwtY2FzZSB0
aGUgInR5cGUiIGFuZCAicmVhZG9ubHkiIGF0dHJpYnV0ZXMgc28gaW5wdXQgZm9ybSBjb250cm9s
cyBjYW4gc2hhcmUgc3R5bGUuCiAgICAgICAgICAgICBpZiAoc2VsZWN0b3JBdHRycykKLSAgICAg
ICAgICAgICAgICBzZWxlY3RvckF0dHJzLT5hZGQoc2VsLT5tX2F0dHIubG9jYWxOYW1lKCkuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RvckF0dHJzLT5hZGQoYXR0ci5sb2NhbE5hbWUo
KS5pbXBsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGUtPmdldEF0dHJpYnV0ZShzZWwtPm1fYXR0cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgIGlmICh2YWx1ZS5p
c051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0cmlidXRlIGlzIG5vdCBz
ZXQKIAotICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElzSFRNTCB8fCAh
aHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKHNlbC0+bV9hdHRyKTsKKyAgICAg
ICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1
dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShhdHRyKTsKIAogICAgICAgICBzd2l0Y2ggKHNlbC0+
bV9tYXRjaCkgewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKQEAgLTE4NzEsMTAg
KzE4NzIsMTAgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogICAg
ICAgICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlw
ZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKICAgICAgICAgICAgIC8vIGNoZWNrIHRo
ZSBzaW1wbGUgc2VsZWN0b3IKLSAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHN1YlNlbCA9
IHNlbC0+bV9zaW1wbGVTZWxlY3Rvcjsgc3ViU2VsOyBzdWJTZWwgPSBzdWJTZWwtPm1fdGFnSGlz
dG9yeSkgeworICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc3ViU2VsID0gc2VsLT5zaW1w
bGVTZWxlY3RvcigpOyBzdWJTZWw7IHN1YlNlbCA9IHN1YlNlbC0+dGFnSGlzdG9yeSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3
aHkgdGhpcyBpcyBhCiAgICAgICAgICAgICAgICAgLy8gcmVzdHJpY3Rpb24gaW4gQ1NTMywgYnV0
IGl0IGlzLCBzbyBsZXQncyBob25vciBpdC4KLSAgICAgICAgICAgICAgICBpZiAoc3ViU2VsLT5t
X3NpbXBsZVNlbGVjdG9yKQorICAgICAgICAgICAgICAgIGlmIChzdWJTZWwtPnNpbXBsZVNlbGVj
dG9yKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmICgh
Y2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIHNlbGVjdG9yQXR0cnMsIGR5bmFtaWNQc2V1ZG8s
IGlzQW5jZXN0b3IsIHRydWUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDc3LDcgKzIwNzgsNyBAQCBib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9O
dGhDaGlsZDogewotICAgICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Q1NTTnRoU2VsZWN0
b3IqPihzZWwpLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50
aCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoZS0+
cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7CkBAIC0yMTA0LDEzICsyMTA1LDEzIEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0
aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTTnRoU2VsZWN0b3IqPihz
ZWwpLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNo
TnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9mVHlwZTogewotICAgICAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8Q1NTTnRoU2VsZWN0b3IqPihzZWwpLT5wYXJzZU50aCgpKQor
ICAgICAgICAgICAgICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBhcmVu
dE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBjb3Vu
dCA9IDE7CkBAIC0yMTI4LDEzICsyMTI5LDEzIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU050
aFNlbGVjdG9yKj4oc2VsKS0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6
IHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PENTU050aFNlbGVjdG9yKj4oc2Vs
KS0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKGUtPnBhcmVudE5v
ZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBFbGVtZW50KiBwYXJlbnROb2RlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGUtPnBh
cmVudE5vZGUoKSk7CkBAIC0yMTUyLDEzICsyMTUzLDEzIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6U2VsZWN0b3JDaGVja2VyOjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsr
OwogICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU050
aFNlbGVjdG9yKj4oc2VsKS0+bWF0Y2hOdGgoY291bnQpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBl
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxDU1NOdGhTZWxlY3Rvcio+KHNl
bCktPnBhcnNlTnRoKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChlLT5wYXJlbnRO
b2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgRWxlbWVudCogcGFyZW50Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihlLT5w
YXJlbnROb2RlKCkpOwpAQCAtMjE3Nyw3ICsyMTc4LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7
CiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTTnRo
U2VsZWN0b3IqPihzZWwpLT5tYXRjaE50aChjb3VudCkpCisgICAgICAgICAgICAgICAgICAgIGlm
IChzZWwtPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyOTks
OSArMjMwMCwxMCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAK
ICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnBhcmVudCgpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8ICF2YWx1ZS5zdGFydHNXaXRo
KHNlbC0+bV9hcmd1bWVudCwgZmFsc2UpKQorICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJndW1lbnQgPSBzZWwtPmFyZ3VtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSB8fCAhdmFsdWUuc3RhcnRzV2l0aChhcmd1bWVudCwgZmFsc2UpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3Ro
KCkgIT0gc2VsLT5tX2FyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW3NlbC0+bV9hcmd1bWVudC5s
ZW5ndGgoKV0gIT0gJy0nKQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSAhPSBh
cmd1bWVudC5sZW5ndGgoKSAmJiB2YWx1ZVthcmd1bWVudC5sZW5ndGgoKV0gIT0gJy0nKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25721</attachid>
            <date>2008-12-03 13:24:08 -0800</date>
            <delta_ts>2008-12-03 14:26:54 -0800</delta_ts>
            <desc>Store CSSSelectors to an array instead of a linked list</desc>
            <filename>cssom-memory-selector-array.patch</filename>
            <type>text/plain</type>
            <size>28886</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODk1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDgtMTItMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3OQorICAgICAgICBNYWtl
IENTU09NIHVzZSBsZXNzIG1lbW9yeQorCisgICAgICAgIFJlZHVjZSBzaXplIG9mIHRoZSBDU1NT
ZWxlY3RvciBieSBvbmUgbW9yZSBwb2ludGVyIGJ5IHVzaW5nIGFuIGFycmF5CisgICAgICAgIGlu
c3RlYWQgb2YgYSBsaW5rZWQgbGlzdCB0byBzdG9yZSB0aGVtLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnk6
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmV1
c2FibGVTZWxlY3RvclZlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6Q1NTU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VsZWN0b3I6On5DU1NTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxl
Y3Rvcjo6aXNMYXN0SW5TZWxlY3Rvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0
b3I6OnNldExhc3RJblNlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OkNTU1N0eWxlUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVSdWxlOjpzZWxlY3RvclRleHQpOgorICAgICAgICAqIGNzcy9DU1NTdHls
ZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6YWRvcHRTZWxlY3RvclZl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yTGlzdCk6Cisg
ICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmZvckVhY2hTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZWxl
Y3Rvck5lZWRzTmFtZXNwYWNlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpx
dWVyeVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwp
OgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0
Lmg6CisKIDIwMDgtMTItMDMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg5NTcpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMw
Niw2ICs0MzA2LDggQEAKIAkJRTRBRkQwMEUwREFGMzM1NTAwRjVGNTVDIC8qIFNNSUxUaW1lQ29u
dGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEFGRDAwODBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCAqLzsgfTsKIAkJ
RTRBRkQwMEYwREFGMzM1NTAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDA5MERBRjMzNTQwMEY1
RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5jcHAgKi87IH07CiAJCUU0QUZEMDEwMERBRjMzNTUwMEY1
RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRBRkQwMEEwREFGMzM1NDAwRjVGNTVDIC8qIFNWR1NNSUxFbGVtZW50
LmggKi87IH07CisJCUU0QzE3ODlBMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMTc4
OTUwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5jcHAgKi87IH07CisJCUU0QzE3
ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAv
KiBDU1NTZWxlY3Rvckxpc3QuaCAqLzsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QzI3OTU2MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07
CiAJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggKi87IH07CiAJCUU0RDY4Nzc3MEVEN0FFM0QwMDZFQTk3OCAv
KiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZl
ck1hYy5jcHAgKi87IH07CkBAIC05MDA3LDYgKzkwMDksOCBAQAogCQlFNEI0MjM4MDBDQkZCNzND
MDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTE1lZGlhRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEI0MjM4NTBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQcm9ncmVzc0V2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvZ3Jlc3NFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBK
U1Byb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9n
cmVzc0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QzE3ODk1MEVFNjkw
MzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTU2VsZWN0b3JMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRl
ck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1l
ZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDRBQkUwMEQ3
NTQyRjAwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQcmVsb2FkU2Nhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzY5Niw2ICsxMzcwMCw4IEBACiAJCUY1MjNEMTg0MDJERTQyRTgwMTg2MzVD
QSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CUU0QzE3ODk1MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuY3BwICovLAorCQkJ
CUU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCAqLywKIAkJCQk0
Q0RFNTRFQzBFNTU3OTc4MDA4OUUyNkMgLyogd21sLmNzcyAqLywKIAkJCQlBODBFNkNEQTBBMTk4
OUNBMDA3RkI4QzUgLyogQ291bnRlci5oICovLAogCQkJCTkzMDcwNUM3MDlFMEM5NUYwMEIxN0ZF
NCAvKiBDb3VudGVyLmlkbCAqLywKQEAgLTE2NDQ5LDYgKzE2NDU1LDcgQEAKIAkJCQkwOEUxOTI1
NDBFREUwQzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDgwNEJGNkYwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDgxRDgxMzIwRUUwRTc0RDAwRDczNjg5IC8qIFdNTFRpbWVyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9y
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODM4Niw2ICsxODM5Myw3IEBACiAJCQkJMDhFMTky
NTMwRURFMEMzQTAwODdCNzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDgwNEJGNkUwRUUwOUMzQjAwMDZDMDAwIC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwODFEODEzMTBFRTBFNzREMDBENzM2ODkgLyogV01MVGltZXJFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QzE3ODlBMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NT
ZWxlY3Rvckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NHcmFt
bWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CShyZXZpc2lvbiAz
ODk1NykKKysrIFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIENTU1J1bGUqIHJ1bGU7
CiAgICAgQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0OwogICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcjsK
KyAgICBWZWN0b3I8Q1NTU2VsZWN0b3IqPiogc2VsZWN0b3JMaXN0OwogICAgIENTU1NlbGVjdG9y
OjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBNZWRpYUxpc3QqIG1lZGlhTGlzdDsKICAgICBNZWRp
YVF1ZXJ5KiBtZWRpYVF1ZXJ5OwpAQCAtMjI1LDcgKzIyNiw3IEBAIHN0YXRpYyBpbnQgY3NzeXls
ZXgoWVlTVFlQRSogeXlsdmFsLCB2b2kKICV0eXBlIDxzZWxlY3Rvcj4gc3BlY2lmaWVyX2xpc3QK
ICV0eXBlIDxzZWxlY3Rvcj4gc2ltcGxlX3NlbGVjdG9yCiAldHlwZSA8c2VsZWN0b3I+IHNlbGVj
dG9yCi0ldHlwZSA8c2VsZWN0b3I+IHNlbGVjdG9yX2xpc3QKKyV0eXBlIDxzZWxlY3Rvckxpc3Q+
IHNlbGVjdG9yX2xpc3QKICV0eXBlIDxzZWxlY3Rvcj4gc2VsZWN0b3Jfd2l0aF90cmFpbGluZ193
aGl0ZXNwYWNlCiAldHlwZSA8c2VsZWN0b3I+IGNsYXNzCiAldHlwZSA8c2VsZWN0b3I+IGF0dHJp
YgpAQCAtMzIwLDggKzMyMSwxMSBAQCB3ZWJraXRfbWVkaWFxdWVyeToKIAogd2Via2l0X3NlbGVj
dG9yOgogICAgIFdFQktJVF9TRUxFQ1RPUl9TWU0gJ3snIG1heWJlX3NwYWNlIHNlbGVjdG9yX2xp
c3QgJ30nIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKLSAgICAgICAgcC0+bV9mbG9hdGluZ1NlbGVjdG9yID0gcC0+c2lua0Zsb2F0aW5n
U2VsZWN0b3IoJDQpOworICAgICAgICBpZiAoJDQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciog
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgICAgICBpZiAocC0+
bV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yKQorICAgICAgICAgICAgICAgIHAtPm1fc2Vs
ZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3RvcigqJDQpOworICAg
ICAgICB9CiAgICAgfQogOwogCkBAIC03ODgsNyArNzkyLDEyIEBAIHJ1bGVzZXQ6CiAKIHNlbGVj
dG9yX2xpc3Q6CiAgICAgc2VsZWN0b3IgJXByZWMgVU5JTVBPUlRBTlRfVE9LIHsKLSAgICAgICAg
JCQgPSAkMTsKKyAgICAgICAgaWYgKCQxKSB7CisgICAgICAgICAgICBDU1NQYXJzZXIqIHAgPSBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICAgICAgJCQgPSBwLT5yZXVz
YWJsZVNlbGVjdG9yVmVjdG9yKCk7CisgICAgICAgICAgICAkJC0+c2hyaW5rKDApOworICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMSkpOworICAgICAgICB9
CiAgICAgfQogICAgIHwgc2VsZWN0b3JfbGlzdCAnLCcgbWF5YmVfc3BhY2Ugc2VsZWN0b3IgJXBy
ZWMgVU5JTVBPUlRBTlRfVE9LIHsKICAgICAgICAgaWYgKCQxICYmICQ0KSB7CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAJKHJldmlzaW9uIDM4OTU3KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw2IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wg
c3RyaWN0UGFyc2luZykKICAgICAsIG1fbWVkaWFRdWVyeSgwKQogICAgICwgbV92YWx1ZUxpc3Qo
MCkKICAgICAsIG1fcGFyc2VkUHJvcGVydGllcyhzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eSoqPihm
YXN0TWFsbG9jKDMyICogc2l6ZW9mKENTU1Byb3BlcnR5KikpKSkKLSAgICAsIG1fZmxvYXRpbmdT
ZWxlY3RvcigwKQogICAgICwgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKDApCiAgICAgLCBtX21heFBh
cnNlZFByb3BlcnRpZXMoMzIpCiAgICAgLCBtX2luUGFyc2VTaG9ydGhhbmQoMCkKQEAgLTMwNCwx
NyArMzAzLDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKENTU011dGFibGVTdHkKICAg
ICByZXR1cm4gKG1fbnVtUGFyc2VkUHJvcGVydGllcyAmJiBtX3BhcnNlZFByb3BlcnRpZXNbMF0t
Pm1faWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CiB9CiAKLXN0ZDo6YXV0b19wdHI8Q1NTU2VsZWN0
b3I+IENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1l
bnQqIGRvYykKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBEb2N1bWVudCogZG9jLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsgICAg
CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGR1bW15U3R5bGVTaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZShkb2MpOwogCiAgICAgbV9zdHlsZVNoZWV0ID0gZHVtbXlTdHlsZVNoZWV0Lmdl
dCgpOworICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxlY3Rvckxpc3Q7
CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2VsZWN0b3J7Iiwgc3RyaW5nLCAifSIpOwog
CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKLQotICAgIHJldHVybiBzdGQ6OmF1dG9fcHRyPENTU1Nl
bGVjdG9yPihtX2Zsb2F0aW5nU2VsZWN0b3IpOworICAgIAorICAgIG1fc2VsZWN0b3JMaXN0Rm9y
UGFyc2VTZWxlY3RvciA9IDA7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9u
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCkBAIC00NTI3LDEyICs0NTI3LDEyIEBAIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIENT
U1BhcnNlcjo6Y3JlYXQKICAgICByZXR1cm4gcnVsZVB0cjsKIH0KIAotQ1NTUnVsZSogQ1NTUGFy
c2VyOjpjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorQ1NTUnVsZSogQ1NT
UGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPENTU1NlbGVjdG9yKj4qIHNlbGVjdG9ycykK
IHsKICAgICBDU1NTdHlsZVJ1bGUqIHJlc3VsdCA9IDA7Ci0gICAgaWYgKHNlbGVjdG9yKSB7Cisg
ICAgaWYgKHNlbGVjdG9ycykgewogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVSdWxlPiBydWxlID0g
Q1NTU3R5bGVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKLSAgICAgICAgcnVsZS0+c2V0U2Vs
ZWN0b3Ioc2lua0Zsb2F0aW5nU2VsZWN0b3Ioc2VsZWN0b3IpKTsKKyAgICAgICAgcnVsZS0+YWRv
cHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9udEZhY2VP
bmx5VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7CiAgICAg
ICAgIHJ1bGUtPnNldERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUocnVsZS5nZXQoKSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMp
KTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAzODk1NykKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIK
KyNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMTYs
NyArMTE3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHBhcnNlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJWYWx1ZSosIGRvdWJsZSogY29sb3JWYWx1ZXMsIGJvb2wgcGFyc2VB
bHBoYSk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlQ29sb3Io
Q1NTUGFyc2VyVmFsdWUqID0gMCk7CiAgICAgICAgIGJvb2wgcGFyc2VDb2xvckZyb21WYWx1ZShD
U1NQYXJzZXJWYWx1ZSosIFJHQkEzMiYsIGJvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHN0ZDo6YXV0
b19wdHI8Q1NTU2VsZWN0b3I+IHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQq
IGRvYyA9IDApOworICAgICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnQqIGRvYywgQ1NTU2VsZWN0b3JMaXN0Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcGFy
c2VDb2xvcihjb25zdCBTdHJpbmcmLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpOwogCkBAIC0x
NjksNyArMTcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKiBjcmVhdGVLZXlmcmFtZXNSdWxlKCk7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0
ZU1lZGlhUnVsZShNZWRpYUxpc3QqLCBDU1NSdWxlTGlzdCopOwogICAgICAgICBDU1NSdWxlTGlz
dCogY3JlYXRlUnVsZUxpc3QoKTsKLSAgICAgICAgQ1NTUnVsZSogY3JlYXRlU3R5bGVSdWxlKENT
U1NlbGVjdG9yKik7CisgICAgICAgIENTU1J1bGUqIGNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8Q1NT
U2VsZWN0b3IqPiogc2VsZWN0b3JzKTsKICAgICAgICAgQ1NTUnVsZSogY3JlYXRlRm9udEZhY2VS
dWxlKCk7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZVZhcmlhYmxlc1J1bGUoTWVkaWFMaXN0Kiwg
Ym9vbCB2YXJpYWJsZXNLZXl3b3JkKTsKIApAQCAtMTg2LDYgKzE4Nyw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBjaGVja0ZvclZhcmlhYmxlcyhDU1NQYXJzZXJWYWx1ZUxp
c3QqKTsKICAgICAgICAgdm9pZCBhZGRVbnJlc29sdmVkUHJvcGVydHkoaW50IHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpOwogICAgICAgICAKKyAgICAgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4qIHJl
dXNhYmxlU2VsZWN0b3JWZWN0b3IoKSB7IHJldHVybiAmbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9y
OyB9CisgICAgICAgIAogICAgIHB1YmxpYzoKICAgICAgICAgYm9vbCBtX3N0cmljdDsKICAgICAg
ICAgYm9vbCBtX2ltcG9ydGFudDsKQEAgLTE5Niw3ICsxOTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIE1lZGlhUXVlcnkqIG1fbWVkaWFRdWVyeTsKICAgICAgICAgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBtX3ZhbHVlTGlzdDsKICAgICAgICAgQ1NTUHJvcGVydHkqKiBtX3BhcnNlZFBy
b3BlcnRpZXM7Ci0gICAgICAgIENTU1NlbGVjdG9yKiBtX2Zsb2F0aW5nU2VsZWN0b3I7CisgICAg
ICAgIENTU1NlbGVjdG9yTGlzdCogbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yOwogICAg
ICAgICBpbnQgbV9udW1QYXJzZWRQcm9wZXJ0aWVzOwogICAgICAgICBpbnQgbV9tYXhQYXJzZWRQ
cm9wZXJ0aWVzOwogCkBAIC0yNTAsNiArMjUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBNZWRpYVF1ZXJ5KiBtX2Zsb2F0aW5nTWVkaWFRdWVyeTsKICAgICAgICAgTWVkaWFRdWVy
eUV4cCogbV9mbG9hdGluZ01lZGlhUXVlcnlFeHA7CiAgICAgICAgIFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwKj4qIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5RXhwTGlzdDsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxDU1NTZWxlY3Rvcio+IG1fcmV1c2FibGVTZWxlY3RvclZlY3RvcjsKIAogICAgICAgICAv
LyBkZWZpbmVzIHVuaXRzIGFsbG93ZWQgZm9yIGEgY2VydGFpbiBwcm9wZXJ0eSwgdXNlZCBpbiBw
YXJzZVVuaXQKICAgICAgICAgZW51bSBVbml0cyB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWxl
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHJldmlzaW9u
IDM4OTU3KQorKysgV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMzAgKzI1LDMxIEBACiAjZGVmaW5lIENTU1NlbGVjdG9yX2gKIAogI2luY2x1ZGUgIlF1YWxp
ZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgLy8gdGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2VsZWN0b3IgZm9yIGEg
U3R5bGVSdWxlCi0gICAgY2xhc3MgQ1NTU2VsZWN0b3IgeworICAgIGNsYXNzIENTU1NlbGVjdG9y
IDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQ1NTU2VsZWN0b3IoKQotICAg
ICAgICAgICAgOiBtX25leHRTZWxlY3RvcigwKQotICAgICAgICAgICAgLCBtX3RhZyhhbnlRTmFt
ZSgpKQorICAgICAgICAgICAgOiBtX3RhZyhhbnlRTmFtZSgpKQogICAgICAgICAgICAgLCBtX3Jl
bGF0aW9uKERlc2NlbmRhbnQpCiAgICAgICAgICAgICAsIG1fbWF0Y2goTm9uZSkKICAgICAgICAg
ICAgICwgbV9wc2V1ZG9UeXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAgICAgICwgbV9wYXJz
ZWROdGgoZmFsc2UpCisgICAgICAgICAgICAsIG1faXNMYXN0SW5TZWxlY3Rvckxpc3QoZmFsc2Up
CiAgICAgICAgICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAg
fQogCiAgICAgICAgIENTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQotICAg
ICAgICAgICAgOiBtX25leHRTZWxlY3RvcigwKQotICAgICAgICAgICAgLCBtX3RhZyhxTmFtZSkK
KyAgICAgICAgICAgIDogbV90YWcocU5hbWUpCiAgICAgICAgICAgICAsIG1fcmVsYXRpb24oRGVz
Y2VuZGFudCkKICAgICAgICAgICAgICwgbV9tYXRjaChOb25lKQogICAgICAgICAgICAgLCBtX3Bz
ZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICAgICAgLCBtX3BhcnNlZE50aChmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9pc0xhc3RJblNlbGVjdG9yTGlzdChmYWxzZSkKICAgICAgICAg
ICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC01OSwx
OSArNjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgZGVsZXRlIG1f
ZGF0YS5tX3JhcmVEYXRhOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRlbGV0
ZSBtX2RhdGEubV90YWdIaXN0b3J5OwotICAgICAgICAgICAgZGVsZXRlIG1fbmV4dFNlbGVjdG9y
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBhcHBlbmQoQ1NTU2VsZWN0b3IqIG4pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENTU1NlbGVjdG9yKiBlbmQgPSB0aGlzOwotICAgICAgICAgICAg
d2hpbGUgKGVuZC0+bV9uZXh0U2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgZW5kID0gZW5kLT5t
X25leHRTZWxlY3RvcjsKLSAgICAgICAgICAgIGVuZC0+bV9uZXh0U2VsZWN0b3IgPSBuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHQoKSB7IHJldHVybiBtX25leHRTZWxl
Y3RvcjsgfQotCiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZS1jcmVhdGUgc2VsZWN0b3IgdGV4
dCBmcm9tIHNlbGVjdG9yJ3MgZGF0YQogICAgICAgICAgKi8KQEAgLTIwOSw4ICsxOTksMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVsYXRpb24+KG1fcmVsYXRpb24pOyB9CiAKKyAgICAgICAg
Ym9vbCBpc0xhc3RJblNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5TZWxl
Y3Rvckxpc3Q7IH0KKyAgICAgICAgdm9pZCBzZXRMYXN0SW5TZWxlY3Rvckxpc3QoKSB7IG1faXNM
YXN0SW5TZWxlY3Rvckxpc3QgPSB0cnVlOyB9CisKICAgICAgICAgbXV0YWJsZSBBdG9taWNTdHJp
bmcgbV92YWx1ZTsKLSAgICAgICAgQ1NTU2VsZWN0b3IqIG1fbmV4dFNlbGVjdG9yOyAvLyB1c2Vk
IGZvciAsLWNoYWluZWQgc2VsZWN0b3JzCiAgICAgICAgIFF1YWxpZmllZE5hbWUgbV90YWc7CiAK
ICAgICAgICAgdW5zaWduZWQgbV9yZWxhdGlvbiAgICAgICAgICAgOiAzOyAvLyBlbnVtIFJlbGF0
aW9uCkBAIC0yMTksNiArMjExLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBib29sIG1fcGFyc2VkTnRoICAgICAgICAgICAgICA6IDE7IC8v
IFVzZWQgZm9yIDpudGgtKiAKKyAgICAgICAgYm9vbCBtX2lzTGFzdEluU2VsZWN0b3JMaXN0ICAg
OiAxOwogICAgICAgICBib29sIG1faGFzUmFyZURhdGEgICAgICAgICAgICA6IDE7CiAKICAgICAg
ICAgdm9pZCBleHRyYWN0UHNldWRvVHlwZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NT
U2VsZWN0b3JMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxp
c3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ1NTU2Vs
ZWN0b3JMaXN0Ojp+Q1NTU2VsZWN0b3JMaXN0KCkgCit7CisgICAgZGVsZXRlU2VsZWN0b3JzKCk7
Cit9CisgICAgCit2b2lkIENTU1NlbGVjdG9yTGlzdDo6YWRvcHQoQ1NTU2VsZWN0b3JMaXN0JiBs
aXN0KQoreworICAgIGRlbGV0ZVNlbGVjdG9ycygpOworICAgIG1fc2VsZWN0b3JBcnJheSA9IGxp
c3QubV9zZWxlY3RvckFycmF5OworICAgIGxpc3QubV9zZWxlY3RvckFycmF5ID0gMDsKK30KKwor
dm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPENTU1NlbGVj
dG9yKj4mIHNlbGVjdG9yVmVjdG9yKQoreworICAgIGRlbGV0ZVNlbGVjdG9ycygpOworICAgIGNv
bnN0IHNpemVfdCBzaXplID0gc2VsZWN0b3JWZWN0b3Iuc2l6ZSgpOworICAgIGlmIChzaXplID09
IDEpIHsKKyAgICAgICAgbV9zZWxlY3RvckFycmF5ID0gc2VsZWN0b3JWZWN0b3JbMF07CisgICAg
ICAgIG1fc2VsZWN0b3JBcnJheS0+c2V0TGFzdEluU2VsZWN0b3JMaXN0KCk7CisgICAgICAgIHNl
bGVjdG9yVmVjdG9yLnNocmluaygwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Nl
bGVjdG9yQXJyYXkgPSByZWludGVycHJldF9jYXN0PENTU1NlbGVjdG9yKj4oZmFzdE1hbGxvYyhz
aXplb2YoQ1NTU2VsZWN0b3IpICogc2VsZWN0b3JWZWN0b3Iuc2l6ZSgpKSk7CisgICAgQVNTRVJU
KHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IG1lbWNweSgmbV9zZWxlY3RvckFycmF5W2ldLCBzZWxlY3RvclZlY3RvcltpXSwgc2l6ZW9mKENT
U1NlbGVjdG9yKSk7CisgICAgICAgIGZhc3RGcmVlKHNlbGVjdG9yVmVjdG9yW2ldKTsKKyAgICAg
ICAgQVNTRVJUKCFtX3NlbGVjdG9yQXJyYXlbaV0uaXNMYXN0SW5TZWxlY3Rvckxpc3QoKSk7Cisg
ICAgfQorICAgIG1fc2VsZWN0b3JBcnJheVtzaXplIC0gMV0uc2V0TGFzdEluU2VsZWN0b3JMaXN0
KCk7CisgICAgc2VsZWN0b3JWZWN0b3Iuc2hyaW5rKDApOworfQorCit2b2lkIENTU1NlbGVjdG9y
TGlzdDo6ZGVsZXRlU2VsZWN0b3JzKCkKK3sKKyAgICBpZiAoIW1fc2VsZWN0b3JBcnJheSkKKyAg
ICAgICAgcmV0dXJuOworICAgIENTU1NlbGVjdG9yKiBzID0gbV9zZWxlY3RvckFycmF5OworICAg
IHdoaWxlICgxKSB7CisgICAgICAgIGJvb2wgZG9uZSA9IHMtPmlzTGFzdEluU2VsZWN0b3JMaXN0
KCk7CisgICAgICAgIHMtPn5DU1NTZWxlY3RvcigpOworICAgICAgICBpZiAoZG9uZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICArK3M7CisgICAgfQorICAgIGZhc3RGcmVlKG1fc2VsZWN0
b3JBcnJheSk7IAorfQorCit9CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMxIEBACisjaWZuZGVmIENTU1NlbGVjdG9yTGlzdF9oCisjZGVmaW5lIENTU1NlbGVjdG9yTGlz
dF9oCisKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ1NTU2VsZWN0b3JM
aXN0IDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ1NTU2VsZWN0b3JMaXN0
KCkgOiBtX3NlbGVjdG9yQXJyYXkoMCkgeyB9CisgICAgICAgIH5DU1NTZWxlY3Rvckxpc3QoKTsK
KworICAgICAgICB2b2lkIGFkb3B0KENTU1NlbGVjdG9yTGlzdCYgbGlzdCk7CisgICAgICAgIHZv
aWQgYWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8Q1NTU2VsZWN0b3IqPiYgc2VsZWN0b3JWZWN0
b3IpOworICAgICAgICAKKyAgICAgICAgQ1NTU2VsZWN0b3IqIGZpcnN0KCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3RvckFycmF5ID8gbV9zZWxlY3RvckFycmF5IDogMDsgfQorICAgICAgICBzdGF0
aWMgQ1NTU2VsZWN0b3IqIG5leHQoQ1NTU2VsZWN0b3IqIHByZXZpb3VzKSB7IHJldHVybiBwcmV2
aW91cy0+aXNMYXN0SW5TZWxlY3Rvckxpc3QoKSA/IDAgOiBwcmV2aW91cyArIDE7IH0KKyAgICAg
ICAgYm9vbCBoYXNPbmVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JBcnJheSA/
IG1fc2VsZWN0b3JBcnJheS0+aXNMYXN0SW5TZWxlY3Rvckxpc3QoKSA6IGZhbHNlOyB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisKKyAgICAgICAgdm9pZCBkZWxldGVTZWxlY3RvcnMoKTsKKwor
ICAgICAgICAvLyBFbmQgb2YgdGhlIGFycmF5IGlzIGluZGljYXRlZCBieSBtX2lzTGFzdEluU2Vs
ZWN0b3JMaXN0IGJpdCBpbiB0aGUgbGFzdCBpdGVtLgorICAgICAgICBDU1NTZWxlY3RvciogbV9z
ZWxlY3RvckFycmF5OworICAgIH07CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5j
cHAJKHJldmlzaW9uIDM4OTU3KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENTU1N0
eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKICAgICA6IENTU1J1
bGUocGFyZW50KQotICAgICwgbV9zZWxlY3RvcigwKQogewogfQogCkBAIC0zNywyMSArMzYsMTcg
QEAgQ1NTU3R5bGVSdWxlOjp+Q1NTU3R5bGVSdWxlKCkKIHsKICAgICBpZiAobV9zdHlsZSkKICAg
ICAgICAgbV9zdHlsZS0+c2V0UGFyZW50KDApOwotICAgIGRlbGV0ZSBtX3NlbGVjdG9yOwogfQog
CiBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpzZWxlY3RvclRleHQoKSBjb25zdAogewotICAgIGlmICht
X3NlbGVjdG9yKSB7Ci0gICAgICAgIFN0cmluZyBzdHI7Ci0gICAgICAgIGZvciAoQ1NTU2VsZWN0
b3IqIHMgPSBtX3NlbGVjdG9yOyBzOyBzID0gcy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
cyAhPSBtX3NlbGVjdG9yKQotICAgICAgICAgICAgICAgIHN0ciArPSAiLCAiOwotICAgICAgICAg
ICAgc3RyICs9IHMtPnNlbGVjdG9yVGV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBz
dHI7CisgICAgU3RyaW5nIHN0cjsKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gc2VsZWN0b3JM
aXN0KCkuZmlyc3QoKTsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkgeworICAgICAg
ICBpZiAocyAhPSBzZWxlY3Rvckxpc3QoKS5maXJzdCgpKQorICAgICAgICAgICAgc3RyICs9ICIs
ICI7CisgICAgICAgIHN0ciArPSBzLT5zZWxlY3RvclRleHQoKTsKICAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBzdHI7CiB9CiAKIHZvaWQgQ1NTU3R5bGVSdWxlOjpzZXRT
ZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiAvKnNlbGVjdG9yVGV4dCovLCBFeGNlcHRpb25Db2Rl
JiAvKmVjKi8pCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkocmV2aXNpb24gMzg5NTcpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2Rl
ZmluZSBDU1NTdHlsZVJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNT
U1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCkBAIC00OSwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIC8vIE5vdCBw
YXJ0IG9mIHRoZSBDU1NPTQogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJp
bmcmLCBib29sID0gZmFsc2UpOwogCi0gICAgdm9pZCBzZXRTZWxlY3RvcihDU1NTZWxlY3Rvciog
c2VsZWN0b3IpIHsgbV9zZWxlY3RvciA9IHNlbGVjdG9yOyB9CisgICAgdm9pZCBhZG9wdFNlbGVj
dG9yVmVjdG9yKFZlY3RvcjxDU1NTZWxlY3Rvcio+JiBzZWxlY3RvcnMpIHsgbV9zZWxlY3Rvckxp
c3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXREZWNsYXJh
dGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CiAKLSAgICBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IoKSB7IHJldHVybiBtX3NlbGVjdG9yOyB9CisgICAgY29uc3QgQ1NT
U2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yTGlz
dDsgfQogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAKIHByaXZhdGU6CkBAIC02NCw3ICs2NSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gU1RZ
TEVfUlVMRTsgfQogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0
eWxlOwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOworICAgIENTU1NlbGVjdG9yTGlzdCBt
X3NlbGVjdG9yTGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzODk1NykKKysrIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCkBAIC0yNTc5LDcgKzI1ODAsNyBAQCB2b2lkIENTU1J1
bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0CiAgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9
IHNoZWV0LT5pdGVtKGkpOwogICAgICAgICBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkgewogICAg
ICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4o
aXRlbSk7Ci0gICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3Io
KTsgczsgcyA9IHMtPm5leHQoKSkKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBy
dWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0
KHMpKQogICAgICAgICAgICAgICAgIGFkZFJ1bGUocnVsZSwgcyk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKQEAgLTI1OTgsNyArMjU5OSw3IEBA
IHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3QKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkSXRlbS0+aXNTdHlsZVJ1bGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSXQgaXMgYSBTdHlsZVJ1bGUsIHNvIGFwcGVuZCBpdCB0byBvdXIgbGlzdAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVSdWxlKj4oY2hpbGRJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQ1NT
U2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3RvcigpOyBzOyBzID0gcy0+bmV4dCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJ1bGUtPnNlbGVjdG9yTGlz
dCgpLmZpcnN0KCk7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjaGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3Rvcikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBz
ZXQuCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMzg5NTcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNs
dWRlICJDU1NSdWxlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAi
Q1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKQEAgLTEyNzAs
OSArMTI3MSw5IEBAIHN0YXRpYyBib29sIGZvckVhY2hUYWdTZWxlY3RvcihGdW5jdG9yJiAKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci1zdGF0aWMgYm9vbCBmb3JFYWNoU2VsZWN0
b3IoRnVuY3RvciYgZnVuY3RvciwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQorc3RhdGljIGJvb2wg
Zm9yRWFjaFNlbGVjdG9yKEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0KQogewotICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rv
ci0+bmV4dCgpKSB7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxp
c3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNl
bGVjdG9yKSkgewogICAgICAgICBpZiAoZm9yRWFjaFRhZ1NlbGVjdG9yKGZ1bmN0b3IsIHNlbGVj
dG9yKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEyOTIsMTAgKzEyOTMs
MTAgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyBib29sIHNlbGVjdG9yTmVlZHNOYW1l
c3BhY2VSZXNvbHV0aW9uKENTU1NlbGVjdG9yKiBjdXJyZW50U2VsZWN0b3IpCitzdGF0aWMgYm9v
bCBzZWxlY3Rvck5lZWRzTmFtZXNwYWNlUmVzb2x1dGlvbihjb25zdCBDU1NTZWxlY3Rvckxpc3Qm
IHNlbGVjdG9yTGlzdCkKIHsKICAgICBTZWxlY3Rvck5lZWRzTmFtZXNwYWNlUmVzb2x1dGlvbkZ1
bmN0b3IgZnVuY3RvcjsKLSAgICByZXR1cm4gZm9yRWFjaFNlbGVjdG9yKGZ1bmN0b3IsIGN1cnJl
bnRTZWxlY3Rvcik7CisgICAgcmV0dXJuIGZvckVhY2hTZWxlY3RvcihmdW5jdG9yLCBzZWxlY3Rv
ckxpc3QpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoY29u
c3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTMwNywxNCArMTMw
OCwxNiBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAgICAgYm9v
bCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpOwogICAgIENTU1Bh
cnNlciBwKHN0cmljdFBhcnNpbmcpOwogCi0gICAgc3RkOjphdXRvX3B0cjxDU1NTZWxlY3Rvcj4g
cXVlcnlTZWxlY3RvciA9IHAucGFyc2VTZWxlY3RvcihzZWxlY3RvcnMsIGRvY3VtZW50KCkpOwot
ICAgIGlmICghcXVlcnlTZWxlY3Rvci5nZXQoKSkgeworICAgIENTU1NlbGVjdG9yTGlzdCBxdWVy
eVNlbGVjdG9yTGlzdDsKKyAgICBwLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JzLCBkb2N1bWVudCgp
LCBxdWVyeVNlbGVjdG9yTGlzdCk7CisKKyAgICBpZiAoIXF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0
KCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKICAgICAvLyB0aHJvdyBhIE5BTUVTUEFDRV9FUlIgaWYgdGhlIHNlbGVjdG9yIGluY2x1ZGVz
IGFueSBuYW1lc3BhY2UgcHJlZml4ZXMuCi0gICAgaWYgKHNlbGVjdG9yTmVlZHNOYW1lc3BhY2VS
ZXNvbHV0aW9uKHF1ZXJ5U2VsZWN0b3IuZ2V0KCkpKSB7CisgICAgaWYgKHNlbGVjdG9yTmVlZHNO
YW1lc3BhY2VSZXNvbHV0aW9uKHF1ZXJ5U2VsZWN0b3JMaXN0KSkgewogICAgICAgICBlYyA9IE5B
TUVTUEFDRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTEzMjIsMTAgKzEzMjUs
MTAgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKAogICAgIENTU1N0
eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQoKSwg
c3RyaWN0UGFyc2luZyk7CiAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYWxzbyBvcHRpbWl6ZSBm
b3IgdGhlIHRoZSBbaWQ9ImZvbyJdIGNhc2UKLSAgICBpZiAoc3RyaWN0UGFyc2luZyAmJiBxdWVy
eVNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCAmJiBpbkRvY3VtZW50KCkgJiYg
IXF1ZXJ5U2VsZWN0b3ItPm5leHQoKSkgewotICAgICAgICBBU1NFUlQocXVlcnlTZWxlY3Rvci0+
YXR0cmlidXRlKCkgPT0gaWRBdHRyKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3Vt
ZW50KCktPmdldEVsZW1lbnRCeUlkKHF1ZXJ5U2VsZWN0b3ItPm1fdmFsdWUpOwotICAgICAgICBp
ZiAoZWxlbWVudCAmJiAoaXNEb2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5pc0Rlc2NlbmRhbnRP
Zih0aGlzKSkgJiYgc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0b3IocXVlcnlTZWxlY3Rvci5n
ZXQoKSwgZWxlbWVudCkpCisgICAgaWYgKHN0cmljdFBhcnNpbmcgJiYgaW5Eb2N1bWVudCgpICYm
IHF1ZXJ5U2VsZWN0b3JMaXN0Lmhhc09uZVNlbGVjdG9yKCkgJiYgcXVlcnlTZWxlY3Rvckxpc3Qu
Zmlyc3QoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKKyAgICAgICAgQVNTRVJUKHF1
ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPmF0dHJpYnV0ZSgpID09IGlkQXR0cik7CisgICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChxdWVyeVNlbGVj
dG9yTGlzdC5maXJzdCgpLT5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgKGlzRG9j
dW1lbnROb2RlKCkgfHwgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YodGhpcykpICYmIHNlbGVjdG9y
Q2hlY2tlci5jaGVja1NlbGVjdG9yKHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCksIGVsZW1lbnQp
KQogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
QEAgLTEzMzQsNyArMTMzNyw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gTm9kZTo6cXVlcnlTZWxl
Y3RvcigKICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKHRoaXMpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAg
ICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0g
ICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHF1ZXJ5U2VsZWN0b3IuZ2V0
KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT5uZXh0KCkpIHsKKyAgICAgICAgICAg
IGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxlY3Rvckxpc3QuZmlyc3QoKTsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgewog
ICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxlY3Rv
ciwgZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAg
ICAgICAgfQpAQCAtMTM1MywyMCArMTM1NiwyMSBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2Rl
OjpxdWVyeVNlbGVjdG9yCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmlu
Q29tcGF0TW9kZSgpOwogICAgIENTU1BhcnNlciBwKHN0cmljdFBhcnNpbmcpOwogCi0gICAgc3Rk
OjphdXRvX3B0cjxDU1NTZWxlY3Rvcj4gcXVlcnlTZWxlY3RvciA9IHAucGFyc2VTZWxlY3Rvcihz
ZWxlY3RvcnMsIGRvY3VtZW50KCkpOworICAgIENTU1NlbGVjdG9yTGlzdCBxdWVyeVNlbGVjdG9y
TGlzdDsKKyAgICBwLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JzLCBkb2N1bWVudCgpLCBxdWVyeVNl
bGVjdG9yTGlzdCk7CiAKLSAgICBpZiAoIXF1ZXJ5U2VsZWN0b3IuZ2V0KCkpIHsKKyAgICBpZiAo
IXF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLyBUaHJvdyBhIE5BTUVTUEFDRV9FUlIg
aWYgdGhlIHNlbGVjdG9yIGluY2x1ZGVzIGFueSBuYW1lc3BhY2UgcHJlZml4ZXMuCi0gICAgaWYg
KHNlbGVjdG9yTmVlZHNOYW1lc3BhY2VSZXNvbHV0aW9uKHF1ZXJ5U2VsZWN0b3IuZ2V0KCkpKSB7
CisgICAgaWYgKHNlbGVjdG9yTmVlZHNOYW1lc3BhY2VSZXNvbHV0aW9uKHF1ZXJ5U2VsZWN0b3JM
aXN0KSkgewogICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVTZWxlY3Rvck5vZGVMaXN0KHRoaXMsIHF1ZXJ5U2Vs
ZWN0b3IuZ2V0KCkpOworICAgIHJldHVybiBjcmVhdGVTZWxlY3Rvck5vZGVMaXN0KHRoaXMsIHF1
ZXJ5U2VsZWN0b3JMaXN0KTsKIH0KIAogRG9jdW1lbnQgKk5vZGU6Om93bmVyRG9jdW1lbnQoKSBj
b25zdApJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDM4OTU3KQorKysg
V2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmgiCiAKICNpbmNsdWRlICJDU1NT
ZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKQEAgLTM5LDI1ICs0MCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLVBhc3NSZWZQdHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVj
dG9yTm9kZUxpc3QoTm9kZSogcm9vdE5vZGUsIENTU1NlbGVjdG9yKiBxdWVyeVNlbGVjdG9yKQor
UGFzc1JlZlB0cjxTdGF0aWNOb2RlTGlzdD4gY3JlYXRlU2VsZWN0b3JOb2RlTGlzdChOb2RlKiBy
b290Tm9kZSwgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBxdWVyeVNlbGVjdG9yTGlzdCkKIHsKICAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbm9kZXM7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
cm9vdE5vZGUtPmRvY3VtZW50KCk7Ci0gICAgQXRvbWljU3RyaW5nIHNlbGVjdG9yVmFsdWUgPSBx
dWVyeVNlbGVjdG9yLT5tX3ZhbHVlOworICAgIENTU1NlbGVjdG9yKiBvbmx5U2VsZWN0b3IgPSBx
dWVyeVNlbGVjdG9yTGlzdC5oYXNPbmVTZWxlY3RvcigpID8gcXVlcnlTZWxlY3Rvckxpc3QuZmly
c3QoKSA6IDA7CiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50LT5pbkNvbXBhdE1v
ZGUoKTsKIAogICAgIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpOwogCi0gICAgaWYgKHN0cmljdFBhcnNpbmcg
JiYgcXVlcnlTZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYgcm9vdE5vZGUt
PmluRG9jdW1lbnQoKSAmJiAhcXVlcnlTZWxlY3Rvci0+bmV4dCgpICYmICFkb2N1bWVudC0+Y29u
dGFpbnNNdWx0aXBsZUVsZW1lbnRzV2l0aElkKHNlbGVjdG9yVmFsdWUpKSB7Ci0gICAgICAgIEFT
U0VSVChxdWVyeVNlbGVjdG9yLT5hdHRyaWJ1dGUoKSA9PSBpZEF0dHIpOwotICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yVmFsdWUpOwot
ICAgICAgICBpZiAoZWxlbWVudCAmJiAocm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgZWxl
bWVudC0+aXNEZXNjZW5kYW50T2Yocm9vdE5vZGUpKSAmJiBzZWxlY3RvckNoZWNrZXIuY2hlY2tT
ZWxlY3RvcihxdWVyeVNlbGVjdG9yLCBlbGVtZW50KSkKKyAgICBpZiAoc3RyaWN0UGFyc2luZyAm
JiByb290Tm9kZS0+aW5Eb2N1bWVudCgpICYmIG9ubHlTZWxlY3RvciAmJiBvbmx5U2VsZWN0b3It
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFkb2N1bWVudC0+Y29udGFpbnNNdWx0aXBs
ZUVsZW1lbnRzV2l0aElkKG9ubHlTZWxlY3Rvci0+bV92YWx1ZSkpIHsKKyAgICAgICAgQVNTRVJU
KHF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCktPmF0dHJpYnV0ZSgpID09IGlkQXR0cik7CisgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQob25seVNlbGVj
dG9yLT5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgKHJvb3ROb2RlLT5pc0RvY3Vt
ZW50Tm9kZSgpIHx8IGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKHJvb3ROb2RlKSkgJiYgc2VsZWN0
b3JDaGVja2VyLmNoZWNrU2VsZWN0b3Iob25seVNlbGVjdG9yLCBlbGVtZW50KSkKICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChlbGVtZW50KTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKE5v
ZGUqIG4gPSByb290Tm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZShyb290Tm9kZSkpIHsKICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
OwotICAgICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxl
Y3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPm5leHQoKSkgeworICAgICAgICAg
ICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxlY3Rvckxpc3QuZmly
c3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9y
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrU2VsZWN0
b3Ioc2VsZWN0b3IsIGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQobik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUv
ZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rv
ck5vZGVMaXN0LmgJKHJldmlzaW9uIDM4OTU3KQorKysgV2ViQ29yZS9kb20vU2VsZWN0b3JOb2Rl
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIENTU1NlbGVjdG9yOworICAgIGNsYXNzIENTU1NlbGVjdG9yTGlz
dDsKIAotICAgIFBhc3NSZWZQdHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVjdG9yTm9kZUxp
c3QoTm9kZSogcm9vdE5vZGUsIENTU1NlbGVjdG9yKik7CisgICAgUGFzc1JlZlB0cjxTdGF0aWNO
b2RlTGlzdD4gY3JlYXRlU2VsZWN0b3JOb2RlTGlzdChOb2RlKiByb290Tm9kZSwgY29uc3QgQ1NT
U2VsZWN0b3JMaXN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25768</attachid>
            <date>2008-12-05 02:36:16 -0800</date>
            <delta_ts>2008-12-05 06:03:56 -0800</delta_ts>
            <desc>switch CSSMutableStyleDeclaration out from the DeprecatedValueList.</desc>
            <filename>cssom-memory-mutable-style-3.patch</filename>
            <type>text/plain</type>
            <size>43956</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTAyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMDgtMTItMDUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM3OQorICAgICAgICBNYWtl
IENTU09NIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICAKKyAgICAgICAgVXNlIHZlY3RvciBpbnN0
ZWFkIG9mIGEgZG91YmxlIGxpbmtlZCBsaXN0IGZvciBwcm9wZXJ0aWVzIGluIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLgorICAgICAgICAKKyAgICAgICAgVG91Z2h0IHNldHRlciBmdW5jdGlv
bnMgdG8gdXNlIGV4aXN0aW5nIHNsb3RzIHRvIGF2b2lkIG1lbW9yeSBtb3ZlcyBwbHVzIHNvbWUK
KyAgICAgICAgb3RoZXIgb3B0aW1pemF0aW9ucy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVNob3J0aGFuZFByb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFN0
cmluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRJbWFnZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0TGVuZ3RoUHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3Nz
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWVy
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6ZmluZFByb3BlcnR5V2l0aElkKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0
ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25Db25zdEl0ZXJhdG9yOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJh
dG9yOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJ
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yLS0pOgorICAgICAgICAqIGNzcy9DU1NQ
cm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHk6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6Oik6CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpyZXNvbHZlVmFyaWFibGVzRm9yRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMpOgorICAg
ICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUpOgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTdGF0ZSk6CisgICAg
ICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyk6CisgICAgICAg
ICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kU3RhcnRNYXJr
dXApOgorCiAyMDA4LTEyLTA1ICBKdW5nc2hpayBTaGluICA8anNoaW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzkwMjApCisrKyBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMyw3ICszLDcgQEAKIAlhcmNoaXZlVmVyc2lvbiA9IDE7CiAJY2xhc3NlcyA9IHsKIAl9Owot
CW9iamVjdFZlcnNpb24gPSA0NTsKKwlvYmplY3RWZXJzaW9uID0gNDI7CiAJb2JqZWN0cyA9IHsK
IAogLyogQmVnaW4gUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KQEAgLTIwNDIsNyArMjA0
Miw3IEBACiAJCUE4MEU2Q0ZDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NNZWRpYVJ1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDIwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVsZS5jcHAgKi87IH07CiAJCUE4MEU2Q0ZEMEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0QzMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250
RmFjZVJ1bGUuaCAqLzsgfTsKIAkJQTgwRTZDRkUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltYWdl
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgwRTZDRDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltYWdlVmFsdWUuY3BwICovOyB9OwotCQlB
ODBFNkNGRjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0Q1MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NQcm9wZXJ0eS5oICovOyB9OworCQlBODBFNkNGRjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0Q1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MEU2RDAwMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NQYWdlUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgwRTZDRDYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmggKi87
IH07CiAJCUE4MEU2RDAxMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbmhlcml0ZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDcwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU0luaGVyaXRlZFZhbHVlLmggKi87IH07CiAJCUE4MEU2RDAyMEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NJbml0aWFsVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDgwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U0luaXRpYWxWYWx1ZS5jcHAgKi87IH07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAzOTAyMCkKKysrIFdlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOSBA
QCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0CiAgICAgOiBtX25vZGUo
MCkKICAgICAsIG1fdmFyaWFibGVEZXBlbmRlbnRWYWx1ZUNvdW50KDApCiAgICAgLCBtX3N0cmlj
dFBhcnNpbmcoZmFsc2UpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pdGVyYXRvckNvdW50KDAp
CisjZW5kaWYKIHsKIH0KIApAQCAtNDksMTYgKzUyLDIzIEBAIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpDU1NNdXRhYmxlU3QKICAgICAsIG1fbm9kZSgwKQogICAgICwgbV92YXJpYWJsZURl
cGVuZGVudFZhbHVlQ291bnQoMCkKICAgICAsIG1fc3RyaWN0UGFyc2luZyghcGFyZW50IHx8IHBh
cmVudC0+dXNlU3RyaWN0UGFyc2luZygpKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faXRlcmF0
b3JDb3VudCgwKQorI2VuZGlmCiB7CiB9CiAKLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnQsIGNvbnN0IERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+JiB2YWx1ZXMsIHVuc2lnbmVkIHZhcmlhYmxlRGVwZW5k
ZW50VmFsdWVDb3VudCkKK0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4m
IHByb3BlcnRpZXMsIHVuc2lnbmVkIHZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCkKICAgICA6
IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KQotICAgICwgbV92YWx1ZXModmFsdWVzKQorICAg
ICwgbV9wcm9wZXJ0aWVzKHByb3BlcnRpZXMpCiAgICAgLCBtX25vZGUoMCkKICAgICAsIG1fdmFy
aWFibGVEZXBlbmRlbnRWYWx1ZUNvdW50KHZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCkKICAg
ICAsIG1fc3RyaWN0UGFyc2luZyghcGFyZW50IHx8IHBhcmVudC0+dXNlU3RyaWN0UGFyc2luZygp
KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faXRlcmF0b3JDb3VudCgwKQorI2VuZGlmCiB7Cisg
ICAgbV9wcm9wZXJ0aWVzLnNocmlua1RvRml0KCk7CiAgICAgLy8gRklYTUU6IFRoaXMgYWxsb3dz
IGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLgogfQogCkBAIC02NywxMCArNzcsMTQgQEAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdAogICAgICwgbV9ub2RlKDApCiAgICAgLCBt
X3ZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCgwKQogICAgICwgbV9zdHJpY3RQYXJzaW5nKCFw
YXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpCisjaWZuZGVmIE5ERUJVRworICAg
ICwgbV9pdGVyYXRvckNvdW50KDApCisjZW5kaWYKIHsKKyAgICBtX3Byb3BlcnRpZXMucmVzZXJ2
ZUNhcGFjaXR5KG51bVByb3BlcnRpZXMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJv
cGVydGllczsgKytpKSB7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAg
bV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgbV9wcm9wZXJ0aWVzLmFw
cGVuZCgqcHJvcGVydGllc1tpXSk7CiAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLT52YWx1ZSgp
LT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKICAgICAgICAgICAgIG1fdmFyaWFibGVEZXBl
bmRlbnRWYWx1ZUNvdW50Kys7CiAgICAgfQpAQCAtNzksOCArOTMsOSBAQCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0CiAKIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
JiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uJiBvdGhlcikKIHsKKyAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3VudCk7
CiAgICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1lIG5vZGUsIGp1c3QgbGVhdmUgdGhl
IGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92YWx1ZXMgPSBvdGhlci5tX3ZhbHVlczsKKyAg
ICBtX3Byb3BlcnRpZXMgPSBvdGhlci5tX3Byb3BlcnRpZXM7CiAgICAgbV9zdHJpY3RQYXJzaW5n
ID0gb3RoZXIubV9zdHJpY3RQYXJzaW5nOwogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTMyOCwx
MiArMzQzLDggQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRDbwogCiBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZh
bHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuZnJvbUxhc3Qo
KTsgaXQgIT0gZW5kOyAtLWl0KSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1f
aWQpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IDA7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kUHJv
cGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGl0ID09IG1fcHJvcGVydGllcy5l
bmQoKSA/IDAgOiBpdC0+dmFsdWUoKTsKIH0KIAogc3RydWN0IFByb3BlcnR5TG9uZ2hhbmQgewpA
QCAtNTA2LDEwICs1MTcsOCBAQCBzdGF0aWMgdm9pZCBpbml0U2hvcnRoYW5kTWFwKFNob3J0aGFu
ZE1hCiAgICAgI3VuZGVmIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZCiB9CiAKLVN0cmluZyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJv
b2wgbm90aWZ5Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jv
b2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpIAogewotICAgIGVjID0gMDsKLQogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU2hvcnRoYW5kTWFwLCBzaG9ydGhhbmRNYXAsICgpKTsKICAg
ICBpZiAoc2hvcnRoYW5kTWFwLmlzRW1wdHkoKSkKICAgICAgICAgaW5pdFNob3J0aGFuZE1hcChz
aG9ydGhhbmRNYXApOwpAQCAtNTE3LDI1ICs1MjYsMzUgQEAgU3RyaW5nIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdgogICAgIFByb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmQgPSBzaG9y
dGhhbmRNYXAuZ2V0KHByb3BlcnR5SUQpOwogICAgIGlmIChsb25naGFuZC5sZW5ndGgoKSkgewog
ICAgICAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25n
aGFuZC5sZW5ndGgoKSwgbm90aWZ5Q2hhbmdlZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwg
Ym9vbCByZXR1cm5UZXh0KQoreworICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKKworICAg
IGlmIChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkKSkg
ewogICAgICAgICAvLyBGSVhNRTogUmV0dXJuIGFuIGVxdWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4g
cG9zc2libGUuCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CisgICAKKyAgICBWZWN0
b3I8Q1NTUHJvcGVydHk+OjppdGVyYXRvciBpdCA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0
eUlEKTsKKyAgICBpZiAoaXQgPT0gbV9wcm9wZXJ0aWVzLmVuZCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgCisgICAgU3RyaW5nIHZhbHVlID0gcmV0dXJuVGV4dCA/ICgqaXQpLnZh
bHVlKCktPmNzc1RleHQoKSA6IFN0cmluZygpOwogCi0gICAgU3RyaW5nIHZhbHVlOworICAgIGlm
ICgoKml0KS52YWx1ZSgpLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkKKyAgICAgICAgbV92
YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQtLTsKIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmZyb21MYXN0KCk7IGl0ICE9IGVuZDsg
LS1pdCkgewotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5tX2lkKSB7Ci0gICAgICAg
ICAgICBpZiAocmV0dXJuVGV4dCkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVl
KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIGlmICgoKml0KS52YWx1ZSgpLT5pc1ZhcmlhYmxl
RGVwZW5kZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlRGVwZW5kZW50VmFs
dWVDb3VudC0tOwotICAgICAgICAgICAgbV92YWx1ZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgICAg
IGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIC8vIEEgbW9yZSBlZmZpY2llbnQg
cmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBlbXB0eQor
ICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZlY3RvciBncm93cyB0b28gYmlnLgor
ICAgIG1fcHJvcGVydGllcy5yZW1vdmUoaXQgLSBtX3Byb3BlcnRpZXMuYmVnaW4oKSk7CisKKyAg
ICBpZiAobm90aWZ5Q2hhbmdlZCkKKyAgICAgICAgc2V0Q2hhbmdlZCgpOwogCiAgICAgcmV0dXJu
IHZhbHVlOwogfQpAQCAtNTY1LDUzICs1ODQsNDMgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0Q2hhbgogCiBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdAogewotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNh
dGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCku
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS5pc0ltcG9ydGFudCgpOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGl0ID09IG1f
cHJvcGVydGllcy5lbmQoKSA/IDAgOiBpdC0+aXNJbXBvcnRhbnQoKTsKIH0KIAogaW50IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJ
RCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9w
ZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NT
UHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCpp
dCkuc2hvcnRoYW5kSUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3Bl
cnR5SUQpOworICAgIHJldHVybiBpdCA9PSBtX3Byb3BlcnRpZXMuZW5kKCkgPyAwIDogaXQtPnNo
b3J0aGFuZElEKCk7CiB9CiAKIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuaXNJbXBsaWNpdCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJRCk7CisgICAgcmV0dXJuIGl0ID09IG1fcHJv
cGVydGllcy5lbmQoKSA/IDAgOiBpdC0+aXNJbXBsaWNpdCgpOwogfQogCiB2b2lkIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUsIGVjKTsKKyAgICBl
YyA9IDA7CisgICAgc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1
ZSk7CiB9CiAKIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHJldHVybiByZW1v
dmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0cnVlLCB0cnVlLCBlYyk7CisgICAgZWMgPSAwOworICAg
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0cnVlLCB0cnVlKTsKIH0KIAotYm9v
bCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCiB7Ci0gICAgZWMgPSAwOworICAgIEFTU0VSVCghbV9p
dGVyYXRvckNvdW50KTsKIAogICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0
cmluZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAg
IC8vIFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCBy
ZXN1bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5n
ZWQsIGZhbHNlLCBlYyk7Ci0gICAgICAgIHJldHVybiBlYyA9PSAwOworICAgICAgICByZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSk7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3Bl
cnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0
LgpAQCAtNjIzLDE0ICs2MzIsMjggQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
c2V0UHJvcAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyOTY+LgogICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdlZCkKICAgICAgICAgc2V0
Q2hhbmdlZCgpOwotICAgIEFTU0VSVCghZWMpOworCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9Cisg
ICAgCit2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFs
KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCit7CisgICAg
QVNTRVJUKCFtX2l0ZXJhdG9yQ291bnQpOworCisgICAgaWYgKCFyZW1vdmVTaG9ydGhhbmRQcm9w
ZXJ0eShwcm9wZXJ0eS5pZCgpLCBmYWxzZSkpIHsKKyAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5
Pjo6aXRlcmF0b3IgaXQgPSBzbG90ID8gc2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0
eS5pZCgpKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fcHJvcGVydGllcy5lbmQoKSkgeworICAgICAg
ICAgICAgKCppdCkgPSBwcm9wZXJ0eTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKK30KIAogYm9vbCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKLSAgICByZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJv
cGVydHlJRCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUpLCBpbXBv
cnRhbnQpKTsKKyAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZSksIGltcG9ydGFudCk7CisgICAgc2V0UHJv
cGVydHlJbnRlcm5hbChwcm9wZXJ0eSk7CiAgICAgaWYgKG5vdGlmeUNoYW5nZWQpCiAgICAgICAg
IHNldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzOCwyMSArNjYxLDI1IEBAIGJv
b2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3AKIAogdm9pZCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6c2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSwgYm9vbCBp
bXBvcnRhbnQpCiB7Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0gICAgbV92YWx1
ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUsIHR5cGUpLCBpbXBvcnRhbnQpKTsKKyAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3Vu
dCk7CisKKyAgICBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpLCBpbXBvcnRhbnQpKTsKICAgICBz
ZXRDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldElt
YWdlUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGltcG9y
dGFudCkKIHsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5h
cHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKHVybCks
IGltcG9ydGFudCkpOworICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKKworICAgIHNldFBy
b3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgQ1NTSW1hZ2VWYWx1ZTo6Y3Jl
YXRlKHVybCksIGltcG9ydGFudCkpOwogICAgIHNldENoYW5nZWQoKTsKIH0KIAogdm9pZCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0
eWxlRGVjbGFyYXRpb24pCiB7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKKyAgICBBU1NFUlQoIW1f
aXRlcmF0b3JDb3VudCk7CisKKyAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKICAgICBDU1NQYXJz
ZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRp
b24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7CiAgICAgc2V0Q2hhbmdlZCgpOwpAQCAtNjYwLDEy
ICs2ODcsMTYgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZQogCiB2
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0
IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCiB7Cisg
ICAgQVNTRVJUKCFtX2l0ZXJhdG9yQ291bnQpOworICAgIAorICAgIG1fcHJvcGVydGllcy5yZXNl
cnZlQ2FwYWNpdHkobnVtUHJvcGVydGllcyk7CisgICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgLy8gT25seSBhZGQgcHJvcGVydGllcyB0
aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3VudGVycGFydCBwcmVzZW50CiAgICAgICAgIGlmICgh
Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0aWVzW2ldLT5pZCgpKSB8fCBwcm9wZXJ0aWVzW2ld
LT5pc0ltcG9ydGFudCgpKSB7CiAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVz
W2ldLT5pZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICBBU1NFUlQocHJvcGVydGllc1tpXSk7Ci0g
ICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOworICAgICAgICAgICAg
bV9wcm9wZXJ0aWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7CiAgICAgICAgICAgICBpZiAocHJv
cGVydGllc1tpXS0+dmFsdWUoKS0+aXNWYXJpYWJsZURlcGVuZGVudFZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQrKzsKICAgICAgICAgfQpAQCAt
Njc2LDEyICs3MDcsMTUgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFy
cwogCiB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0eShj
b25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkpCiB7Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHkuaWQoKSwgZmFsc2UpOwotICAgIG1fdmFsdWVzLmFwcGVuZChwcm9wZXJ0eSk7CisgICAgQVNT
RVJUKCFtX2l0ZXJhdG9yQ291bnQpOworCisgICAgc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0
eSk7CiB9CiAKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldExlbmd0aFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
Ym9vbCAvKm11bHRpTGVuZ3RoKi8pCiB7CisgICAgQVNTRVJUKCFtX2l0ZXJhdG9yQ291bnQpOwor
CiAgICAgYm9vbCBwYXJzZU1vZGUgPSB1c2VTdHJpY3RQYXJzaW5nKCk7CiAgICAgc2V0U3RyaWN0
UGFyc2luZyhmYWxzZSk7CiAgICAgc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9y
dGFudCk7CkBAIC02OTAsMTQgKzcyNCwxNCBAQCB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRMZW5nCiAKIHVuc2lnbmVkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5n
dGgoKSBjb25zdAogewotICAgIHJldHVybiBtX3ZhbHVlcy5jb3VudCgpOworICAgIHJldHVybiBt
X3Byb3BlcnRpZXMuc2l6ZSgpOwogfQogCiBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKIHsKLSAgICBpZiAoaSA+PSBtX3ZhbHVlcy5jb3Vu
dCgpKQorICAgIGlmIChpID49IG1fcHJvcGVydGllcy5zaXplKCkpCiAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4obV92YWx1ZXNbaV0uaWQoKSkpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3Rh
dGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4obV9wcm9wZXJ0aWVzW2ldLmlkKCkpKTsKIH0KIAogU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKQEAgLTcwNiw5
ICs3NDAsOSBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1RlCiAgICAg
CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9uWFByb3AgPSAwOwogICAgIGNvbnN0IENT
U1Byb3BlcnR5KiBwb3NpdGlvbllQcm9wID0gMDsKLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Byb3BlcnRpZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVy
dHk+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcHJvcGVydGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSAqaXQ7CiAgICAgICAg
IGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YKQogICAgICAg
ICAgICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOwpAQCAtNzQyLDggKzc3NiwxMCBAQCBTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1RlCiAKIHZvaWQgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKKyAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3VudCk7CisKICAgICBlYyA9IDA7Ci0g
ICAgbV92YWx1ZXMuY2xlYXIoKTsKKyAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKICAgICBDU1NQ
YXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFy
YXRpb24odGhpcywgdGV4dCk7CiAgICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFu
ZCBzZXQgZWMuCkBAIC03NTIsMTYgKzc4OCwxNyBAQCB2b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpzZXRDc3NUCiAKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om1lcmdl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNv
bmZsaWN0KQogewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3Bl
cnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gaXQgPSBvdGhlci0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7
Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgaWYgKCFhcmdPdmVycmlkZXNPbkNv
bmZsaWN0KQorICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKKyAgICAKKyAgICBWZWN0b3I8
Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci0+bV9wcm9wZXJ0aWVzLmVu
ZCgpOworICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBv
dGhlci0+bV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBW
ZWN0b3I8Q1NTUHJvcGVydHk+OjppdGVyYXRvciBvbGQgPSBmaW5kUHJvcGVydHlXaXRoSWQoaXQt
PmlkKCkpOworICAgICAgICBpZiAob2xkICE9IG1fcHJvcGVydGllcy5lbmQoKSkgeworICAgICAg
ICAgICAgaWYgKCFhcmdPdmVycmlkZXNPbkNvbmZsaWN0ICYmIG9sZC0+dmFsdWUoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5
LmlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZChwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBzZXRQcm9wZXJ0eUludGVybmFsKCppdCwgb2xkKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKCppdCk7CiAgICAgfQogICAgIC8vIEZJ
WE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYg
c29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCiAgICAgLy8gYSBub3Rp
ZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBv
ZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KQEAgLTgwMywxNCArODQwLDMyIEBAIHZv
aWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUIKIAogdm9pZCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKLSAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ld
KTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoQ1NT
UHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3VudCk7CisgICAgCisgICAg
aWYgKG1fcHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBvZnRlbiB1c2VkIHdpdGggc3RhdGljIHNldHMgYW5kIGluIHRoYXQg
Y2FzZSBjb25zdHJ1Y3RpbmcgdGhlIGhhc2ggcmVwZWF0ZWRseSBpcyBwcmV0dHkgcG9pbnRsZXNz
LgorICAgIEhhc2hTZXQ8dW5zaWduZWQ+IHRvUmVtb3ZlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtpXSk7CisgICAg
CisgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBuZXdQcm9wZXJ0aWVzOworICAgIG5ld1Byb3BlcnRp
ZXMucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkpOworICAgIAorICAgIFZlY3Rv
cjxDU1NQcm9wZXJ0eT46Oml0ZXJhdG9yIGVuZCA9IG1fcHJvcGVydGllcy5lbmQoKTsKKyAgICBm
b3IgKFZlY3RvcjxDU1NQcm9wZXJ0eT46Oml0ZXJhdG9yIGl0ID0gbV9wcm9wZXJ0aWVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBOb3QgcXVpdGUgc3VyZSBpZiB0aGUg
aXNJbXBvcnRhbnQgdGVzdCBpcyBuZWVkZWQgYnV0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5nIGJl
aGF2aW9yLgorICAgICAgICBpZiAoIWl0LT5pc0ltcG9ydGFudCgpKSB7CisgICAgICAgICAgICBp
ZiAodG9SZW1vdmUuY29udGFpbnMoaXQtPmlkKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CisgICAgICAgIG5ld1Byb3BlcnRpZXMuYXBwZW5kKCppdCk7CiAgICAgfQor
CisgICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVz
LnNpemUoKTsKKyAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0aWVzOworICAgIAogICAgIGlm
IChjaGFuZ2VkICYmIG5vdGlmeUNoYW5nZWQpCiAgICAgICAgIHNldENoYW5nZWQoKTsKIH0KQEAg
LTgyMiw3ICs4NzcsNDAgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
QwogCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBtX3ZhbHVlcywgbV92YXJpYWJsZURlcGVuZGVu
dFZhbHVlQ291bnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKDAsIG1fcHJvcGVydGllcywgbV92YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQp
KTsKK30KKworVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJRCkgY29uc3QK
K3sgICAgCisgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBt
X3Byb3BlcnRpZXMuYmVnaW4oKTsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Byb3BlcnRpZXMuZW5kKCk7CisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuIGVuZDsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGVuZDsKKyAgICBkbyB7CisgICAgICAgIC0taXQ7CisgICAgICAgIGlmIChwcm9wZXJ0
eUlEID09ICgqaXQpLm1faWQpCisgICAgICAgICAgICByZXR1cm4gaXQ7CisgICAgfSB3aGlsZSAo
aXQgIT0gYmVnaW4pOworCisgICAgcmV0dXJuIGVuZDsKK30KKworVmVjdG9yPENTU1Byb3BlcnR5
Pjo6aXRlcmF0b3IgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmZpbmRQcm9wZXJ0eVdpdGhJ
ZChpbnQgcHJvcGVydHlJRCkKK3sgICAgCisgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6aXRlcmF0
b3IgYmVnaW4gPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+
OjppdGVyYXRvciBlbmQgPSBtX3Byb3BlcnRpZXMuZW5kKCk7CisgICAgaWYgKGJlZ2luID09IGVu
ZCkKKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+OjppdGVyYXRv
ciBpdCA9IGVuZDsKKyAgICBkbyB7CisgICAgICAgIC0taXQ7CisgICAgICAgIGlmIChwcm9wZXJ0
eUlEID09ICgqaXQpLm1faWQpCisgICAgICAgICAgICByZXR1cm4gaXQ7CisgICAgfSB3aGlsZSAo
aXQgIT0gYmVnaW4pOworICAgIAorICAgIHJldHVybiBlbmQ7CiB9CiAKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
CShyZXZpc2lvbiAzOTAyMCkKKysrIFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsyMywzNSBAQAogCiAjaW5jbHVkZSAiQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5j
bHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBOb2RlOworICAg
IAorY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wsIENTU1Byb3BlcnR5KiBjdXJyZW50KTsKKyAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKTsKKyAgICB+Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yKCk7CisgICAgCisgICAgY29uc3QgQ1NTUHJvcGVydHkm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX2N1cnJlbnQ7IH0KKyAgICBjb25zdCBDU1NQ
cm9wZXJ0eSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudDsgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0
SXRlcmF0b3ImIG8pIHsgQVNTRVJUKG1fZGVjbCA9PSBvLm1fZGVjbCk7IHJldHVybiBtX2N1cnJl
bnQgIT0gby5tX2N1cnJlbnQ7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKSB7IEFTU0VSVChtX2RlY2wgPT0gby5t
X2RlY2wpOyByZXR1cm4gbV9jdXJyZW50ID09IG8ubV9jdXJyZW50OyB9CisgICAgCisgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKTsKKyAgICAKKyAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yLS0oKTsKKwor
cHJpdmF0ZToKKyAgICBjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbV9kZWNsOwor
ICAgIENTU1Byb3BlcnR5KiBtX2N1cnJlbnQ7Cit9OwogCiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKIHB1YmxpYzoKQEAgLTQ1
LDEyICs2NywxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUsIHByb3BlcnRpZXMsIG51bVBy
b3BlcnRpZXMpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5
PiYgcHJvcGVydGllcywgdW5zaWduZWQgdmFyaWFibGVEZXBlbmRlbnRWYWx1ZUNvdW50KQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjcmVhdGUoY29u
c3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcywgdW5zaWduZWQgdmFyaWFibGVEZXBl
bmRlbnRWYWx1ZUNvdW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBwcm9wZXJ0aWVzLCB2YXJpYWJsZURlcGVuZGVudFZh
bHVlQ291bnQpKTsKICAgICB9CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgb3Bl
cmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJik7CisgICAgCisgICAgdHlw
ZWRlZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9y
KHRoaXMsIG1fcHJvcGVydGllcy5iZWdpbigpKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIG1fcHJvcGVydGllcy5lbmQoKSk7IH0KIAog
ICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KIApAQCAtNzMs
MjIgKzEwMCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2YWx1ZXNJdGVyYXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQogICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFu
Z2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9
IHRydWUpCi0gICAgeyAKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgcmV0dXJu
IHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5vdGlmeUNoYW5nZWQs
IGVjKTsKLSAgICB9CisgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2Vk
ID0gdHJ1ZSk7CiAKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJv
b2wgbm90aWZ5Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkID0g
dHJ1ZSkKLSAgICB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIHJlbW92ZVBy
b3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQsIGZhbHNlLCBlYyk7Ci0gICAgfQorICAg
IFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2Vk
ID0gdHJ1ZSwgYm9vbCByZXR1cm5UZXh0ID0gZmFsc2UpOwogIAogICAgIC8vIHNldExlbmd0aFBy
b3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9yIGNvbnZlcnNpb24g
b2YgSFRNTCBhdHRyaWJ1dGVzLikKICAgICB2b2lkIHNldExlbmd0aFByb3BlcnR5KGludCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBtdWx0aUxl
bmd0aCA9IGZhbHNlKTsKQEAgLTEyMCw3ICsxMzUsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0
PENTU1Byb3BlcnR5PiYsIHVuc2lnbmVkIHZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCk7Cisg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3Qg
VmVjdG9yPENTU1Byb3BlcnR5PiYsIHVuc2lnbmVkIHZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3Vu
dCk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwg
Y29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKIAogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUo
KTsKQEAgLTEzMSwxMiArMTQ2LDcxIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGdldENvbW1vblZh
bHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7CiAgICAgU3RyaW5n
IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHVuc2lnbmVk
IG51bWJlcikgY29uc3Q7CiAgICAgU3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0
aWVzKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoY29uc3QgQ1NT
UHJvcGVydHkmLCBDU1NQcm9wZXJ0eSogc2xvdCA9IDApOworICAgIGJvb2wgcmVtb3ZlU2hvcnRo
YW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CisgICAgCisg
ICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgZmluZFByb3BlcnR5V2l0aElk
KGludCBwcm9wZXJ0eUlkKSBjb25zdDsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+OjppdGVyYXRv
ciBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpOwogIAotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFsdWVzOworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4g
bV9wcm9wZXJ0aWVzOwogICAgIE5vZGUqIG1fbm9kZTsKLSAgICB1bnNpZ25lZCBtX3ZhcmlhYmxl
RGVwZW5kZW50VmFsdWVDb3VudCA6IDMxOworICAgIHVuc2lnbmVkIG1fdmFyaWFibGVEZXBlbmRl
bnRWYWx1ZUNvdW50IDogMjQ7CiAgICAgYm9vbCBtX3N0cmljdFBhcnNpbmcgOiAxOworI2lmbmRl
ZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX2l0ZXJhdG9yQ291bnQgOiA0OworI2VuZGlmCisKKyAg
ICBmcmllbmQgY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOwog
fTsKKyAgICAKK2lubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogZGVjbCwgQ1NTUHJvcGVydHkqIGN1cnJlbnQpIAorOiBtX2RlY2wo
ZGVjbCkKKywgbV9jdXJyZW50KGN1cnJlbnQpCit7IAorI2lmbmRlZiBOREVCVUcKKyAgICBjb25z
dF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVyYXRvckNv
dW50Kys7IAorI2VuZGlmCit9CisKK2lubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNv
bnN0SXRlcmF0b3I6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcihjb25z
dCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG8pCis6IG1fZGVjbChv
Lm1fZGVjbCkKKywgbV9jdXJyZW50KG8ubV9jdXJyZW50KQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBjb25zdF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVy
YXRvckNvdW50Kys7IAorI2VuZGlmCit9CisKK2lubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkNvbnN0SXRlcmF0b3I6On5DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0
b3IoKSAKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgY29uc3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudC0tOworI2VuZGlmCit9CisKK2lu
bGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgbykKK3sKKyAgICBtX2RlY2wgPSBvLm1fZGVj
bDsKKyAgICBtX2N1cnJlbnQgPSBvLm1fY3VycmVudDsKKyNpZm5kZWYgTkRFQlVHCisgICAgY29u
c3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JD
b3VudCsrOyAKKyNlbmRpZgorICAgIHJldHVybiAqdGhpczsKK30KKyAgICAKK2lubGluZSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpIAoreyAKKyAgICBBU1NFUlQobV9jdXJy
ZW50ICE9IGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPihtX2RlY2wpLT5t
X3Byb3BlcnRpZXMuZW5kKCkpOworICAgICsrbV9jdXJyZW50OworICAgIHJldHVybiAqdGhpczsg
Cit9CisKK2lubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3ItLSgpIAoreyAK
KyAgICAtLW1fY3VycmVudDsgCisgICAgcmV0dXJuICp0aGlzOyAKK30KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgJKHJldmlzaW9uIDM5MDIwKQorKysgV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faWQgPSBvdGhlci5tX2lkOwogICAgICAgICBtX3Nob3J0aGFuZElEID0g
b3RoZXIubV9zaG9ydGhhbmRJRDsKICAgICAgICAgbV9pbXBvcnRhbnQgPSBvdGhlci5tX2ltcG9y
dGFudDsKKyAgICAgICAgbV9pbXBsaWNpdCA9IG90aGVyLm1faW1wbGljaXQ7CiAgICAgICAgIG1f
dmFsdWUgPSBvdGhlci5tX3ZhbHVlOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAt
NzIsNCArNzMsOCBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNw
YWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkNT
U1Byb3BlcnR5PiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKK30KKwogI2VuZGlmIC8v
IENTU1Byb3BlcnR5X2gKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZp
c2lvbiAzOTAyMCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsMjIgKzEyNCwyNiBAQCB2b2lkIENTU1N0eWxlRGVjbGFyYXRpb246
OmRpZmYoQ1NTTXV0YWJsCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPGludD4gcHJvcGVydGllczsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0KHN0eWxlLT52YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsK
LSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9PSBw
cm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkpKQotICAgICAgICAgICAgcHJvcGVydGllcy5hcHBl
bmQocHJvcGVydHkuaWQoKSk7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwor
ICAgIHsKKyAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9w
ZXJ0eS5pZCgpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9
PSBwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkpKQorICAgICAgICAgICAgICAgIHByb3BlcnRp
ZXNUb1JlbW92ZS5hcHBlbmQocHJvcGVydHkuaWQoKSk7CisgICAgICAgIH0KICAgICB9CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0pOworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyBpKyspCisgICAgICAgIHN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOwogfQogCiBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0lu
U2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gbGlzdDsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHk+
IGxpc3Q7CisgICAgbGlzdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICB1bnNpZ25lZCB2
YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDM5MDIwKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3MCw4ICs1NzAsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnJl
c29sdmVWYXJpYWJsZXNGCiAgICAgLy8gTm93IGl0ZXJhdGUgb3ZlciB0aGUgcHJvcGVydGllcyBp
biB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24uICBBcyB3ZSByZXNvbHZlIHZhcmlhYmxlcyB3ZSds
bCBlbmQgdXAKICAgICAvLyBtdXRhdGluZyB0aGUgbmV3IGRlY2xhcmF0aW9uIChwb3NzaWJseSBl
eHBhbmRpbmcgc2hvcnRoYW5kcykuICBUaGUgbmV3IGRlY2xhcmF0aW9uIGhhcyBubyBtX25vZGUK
ICAgICAvLyB0aG91Z2gsIHNvIGl0IGNhbid0IG1pc3Rha2VubHkgY2FsbCBzZXRDaGFuZ2VkIG9u
IGFueXRoaW5nLgotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3Bl
cnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gaXQgPSBkZWNsLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGVj
bC0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBkZWNsLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgY29u
c3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSAqaXQ7CiAgICAgICAgIGlmICghY3VycmVudC52YWx1
ZSgpLT5pc1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoKSkgewogICAgICAgICAgICAgLy8gV2UgY2Fu
IGp1c3QgYWRkIHRoZSBwYXJzZWQgcHJvcGVydHkgZGlyZWN0bHkuCkBAIC0xMjU3LDggKzEyNTcs
OCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yCiAgICAgICAgICAg
ICB1cGRhdGVGb250KCk7CiAKICAgICAgICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3Bl
cnRpZXMgdG8gdGhlIGxpc3QKLSAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0
b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBrZi0+c3R5bGUoKS0+dmFsdWVzSXRlcmF0b3Io
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0ga2YtPnN0eWxlKCktPmVuZCgpOworICAgICAgICBmb3IgKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IGtmLT5zdHlsZSgp
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBsaXN0LmFkZFByb3BlcnR5
KCgqaXQpLmlkKCkpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5
bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRpbWVzCkBAIC0yNjU2LDggKzI2NTYsOCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb25zCiAKICAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7CiAgICAgICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBkZWNsID0gbV9tYXRjaGVkRGVjbHNbaV07Ci0gICAgICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgICAgIGZv
ciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gZGVj
bC0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBkZWNsLT5lbmQoKTsKKyAg
ICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBkZWNsLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5JiBjdXJyZW50ID0gKml0OwogICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHBy
aW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzCiAgICAgICAgICAgICBpZiAoaXNJ
bXBvcnRhbnQgPT0gY3VycmVudC5pc0ltcG9ydGFudCgpKSB7CkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJl
dmlzaW9uIDM5MDIwKQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmbmRlZiBFdmVudFRhcmdldF9oCiAjZGVmaW5lIEV2ZW50
VGFyZ2V0X2gKIAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM5MDIwKQorKysgV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDggKzEwNSw4IEBA
IHZvaWQgU3R5bGVDaGFuZ2U6OmluaXQoUGFzc1JlZlB0cjxDU1NTdHkKICAgICBTdHJpbmcgc3R5
bGVUZXh0KCIiKTsKIAogICAgIGJvb2wgYWRkZWREaXJlY3Rpb24gPSBmYWxzZTsKLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAo
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbXV0YWJs
ZVN0eWxlLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbXV0YWJsZVN0eWxlLT5l
bmQoKTsKKyAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG11dGFibGVTdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IGNvbnN0IENTU1Byb3BlcnR5ICpwcm9wZXJ0eSA9ICYqaXQ7CiAKICAgICAgICAgLy8gSWYgcG9z
aXRpb24gaXMgZW1wdHkgb3IgdGhlIHBvc2l0aW9uIHBhc3NlZCBpbiBhbHJlYWR5IGhhcyB0aGUg
CkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBTdHlsZUNoYW5nZTo6aW5pdChQYXNzUmVmUHRyPENT
U1N0eQogCiAgICAgICAgIGlmIChwcm9wZXJ0eS0+aWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KSB7CiAgICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIHNwZWNp
YWwtY2FzZSB0ZXh0IGRlY29yYXRpb25zCi0gICAgICAgICAgICBDU1NQcm9wZXJ0eSBhbHRlcmVk
UHJvcGVydHkgPSBDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBwcm9wZXJ0
eS0+dmFsdWUoKSwgcHJvcGVydHktPmlzSW1wb3J0YW50KCkpOworICAgICAgICAgICAgQ1NTUHJv
cGVydHkgYWx0ZXJlZFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHByb3BlcnR5
LT52YWx1ZSgpLCBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKSk7CiAgICAgICAgICAgICBzdHlsZVRl
eHQgKz0gYWx0ZXJlZFByb3BlcnR5LmNzc1RleHQoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBzdHlsZVRleHQgKz0gcHJvcGVydHktPmNzc1RleHQoKTsKQEAgLTkxMyw4ICs5MTMsOCBA
QCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAKIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAq
c3R5bGUsIEhUTUxFbGVtZW50ICplbGVtKQogewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICBmb3IgKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7CiAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFdlaWdodDoKICAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9j
YWxOYW1lKGJUYWcpKQpAQCAtOTQ3LDggKzk0Nyw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnJlbW92ZUhUTUxGb250U3QKICAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShmb250VGFnKSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENv
bnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gc3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewogICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNvbG9yOgogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxl
bSwgY29sb3JBdHRyKTsKQEAgLTk5Miw4ICs5OTIsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDU1NTdHlsZShDCiAgICAgaWYgKCFkZWNsKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAg
IGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0g
c3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Cisg
ICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGludCBwcm9wZXJ0eUlE
ID0gKCppdCkuaWQoKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGRlY2wtPmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiAocHJv
cGVydHlJRCAhPSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UgfHwgIWlzVGFiU3Bhbk5vZGUoZWxlbSkp
KSB7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMzkwMjApCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc1LDggKzc3NSw4IEBAIGJvb2wgRWRp
dG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1MKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG11dGFibGVTdHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgpOwogICAg
IAogICAgIGJvb2wgbWF0Y2ggPSB0cnVlOwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtdXRhYmxlU3R5bGUtPnZhbHVlc0l0ZXJhdG9y
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtdXRhYmxlU3R5bGUtPmVuZCgpOworICAgIGZvciAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbXV0YWJsZVN0eWxlLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaW50IHByb3BlcnR5SUQgPSAoKml0
KS5pZCgpOwogICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG11dGFibGVTdHlsZS0+Z2V0
UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKSwgc2VsZWN0aW9uU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUocHJvcGVydHlJRCkpKSB7CiAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOwpAQCAtNzk1LDgg
Kzc5NSw4IEBAIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1MKIAogc3Rh
dGljIHZvaWQgdXBkYXRlU3RhdGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlc2lyZWRT
dHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlLCBib29sJiBh
dFN0YXJ0LCBUcmlTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IGRlc2lyZWRTdHlsZS0+dmFsdWVzSXRlcmF0
b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRlc2lyZWRTdHlsZS0+ZW5kKCk7CisgICAgZm9yIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkZXNpcmVkU3R5bGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpbnQgcHJvcGVydHlJRCA9ICgq
aXQpLmlkKCk7CiAgICAgICAgIFN0cmluZyBkZXNpcmVkUHJvcGVydHkgPSBkZXNpcmVkU3R5bGUt
PmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7CiAgICAgICAgIFN0cmluZyBjb21wdXRlZFBy
b3BlcnR5ID0gY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNp
b24gMzkwMjApCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01ODAsOCArNTgwLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlU3R5bAogICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHBhcmVudFN0eWxlID0gY29tcHV0ZWRTdHlsZShjb250ZXh0LT5wYXJlbnROb2RlKCkp
LT5jb3B5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHBhcmVudFN0eWxlLT5kaWZm
KGJsb2NrcXVvdGVTdHlsZS5nZXQoKSk7CiAKLSAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdENv
bnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICAgICAgZm9yIChEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBibG9ja3F1b3RlU3R5bGUtPnZh
bHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYmxvY2txdW90ZVN0eWxlLT5lbmQo
KTsKKyAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBibG9ja3F1b3RlU3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gKml0OwogICAgICAgICAgICAg
c291cmNlRG9jdW1lbnRTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHkuaWQoKSk7CiAgICAg
ICAgIH0gICAgICAgIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDM5MDIwKQorKysgV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCwxNyArNDg0LDE5
IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2gKICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHls
ZUZvckVsZW1lbnQgPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGZyb21Db21wdXRlZFN0eWxlID0g
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGVuZDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0
b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
U1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NW
YWx1ZSogdmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHByb3BlcnR5IHZhbHVlLCBpZiBpdCdzIGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZs
ZWN0IHRoZSBhY3R1YWwgY29tcHV0ZWQgdmFsdWUuICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7IiBp
biBxdWlya3Ntb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJl
IG90aGVycyBsaWtlIHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTE5NTEyMz4gU2xhc2hkb3Qg
Y29weS9wYXN0ZSBmaWRlbGl0eSBwcm9ibGVtCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxD
U1NWYWx1ZT4gY29tcHV0ZWRQcm9wZXJ0eVZhbHVlID0gY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQt
PmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NT
UHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVy
YXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gcHJvcGVydHkudmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJvcGVydHkgdmFsdWUsIGlm
IGl0J3MgYSBwZXJjZW50YWdlLCBtYXkgbm90IHJlZmxlY3QgdGhlIGFjdHVhbCBjb21wdXRlZCB2
YWx1ZS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBzdHls
ZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7IiBpbiBxdWlya3Ntb2RlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlkZWxp
dHkgcHJvYmxlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Y3NzVmFs
dWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19QUklNSVRJVkVfVkFMVUUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFs
dWU+IGNvbXB1dGVkUHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVkU3R5bGVGb3JFbGVtZW50LT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3BlcnR5VmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPm1lcmdlKGZyb21Db21wdXRlZFN0eWxl
LmdldCgpKTsK
</data>
<flag name="review"
          id="12058"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>