<?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>26001</bug_id>
          
          <creation_ts>2009-05-24 23:42:07 -0700</creation_ts>
          <short_desc>Change callers of String::adopt() to String::createUninitialized()</short_desc>
          <delta_ts>2009-05-29 15:44:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Moore">davemoore</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>darin</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123009</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2009-05-24 23:42:07 -0700</bug_when>
    <thetext>Bug https://bugs.webkit.org/show_bug.cgi?id=25779 introduced the new String::createUninitialized() which allows a caller to allocate a string with an inline buffer and write directly into it. Many of the callers of String::adopt() would do better to call this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123012</commentid>
    <comment_count>1</comment_count>
      <attachid>30642</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2009-05-24 23:47:19 -0700</bug_when>
    <thetext>Created attachment 30642
Fx

This patch changes many of the uses of adopt() to createUninitialized(). Most
are just straight-forward wins. A couple are places where we walk through a
list of nodes and extract the strings from them. These used to build up the
string incrementally, appending to a buffer. Now I walk through the list twice,
the first to discover the total length and the second to write the string into
the inline buffer. I think it&apos;s worth the second navigation to keep everything
in one malloc node.

In places where the logic was somewhat complicated as to the creation of the to
be adopted buffer I left it as it was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123020</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-25 00:42:39 -0700</bug_when>
    <thetext>Yay thanks for filing as a separate bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123075</commentid>
    <comment_count>3</comment_count>
      <attachid>30642</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-25 13:33:05 -0700</bug_when>
    <thetext>Comment on attachment 30642
Fx

Thanks for taking this on!

When there&apos;s a single patch with some obviously-right parts and other more-debatable parts, I highly recommend getting the obviously-right part reviewed and landed separately first.

&gt; +        WARNING: NO TEST CASES ADDED OR CHANGED

If you don&apos;t think a patch requires new test cases, then please remove this line before posting the patch for review.

&gt; +    int resultLength = 0;

I think unsigned would be better than int. Maybe size_t, but I guess we just use unsigned for String at this point.

&gt;      for (Node* c = e-&gt;firstChild(); c; c = c-&gt;nextSibling())
&gt;          if (c-&gt;nodeType() == Node::TEXT_NODE || c-&gt;nodeType() == Node::CDATA_SECTION_NODE || c-&gt;nodeType() == Node::COMMENT_NODE)
&gt; -            append(text, c-&gt;nodeValue());
&gt; +            resultLength += c-&gt;nodeValue().length();

Brace style was not matching WebKit style guide in the old version of this code. The for statement should have braces.

&gt; +    String result = String::createUninitialized(resultLength, text);

I don&apos;t think result is the best name for this. It&apos;s the string that will be used to create a stylesheet. Not a function result. Maybe combinedText or sheetText or text.

&gt; +            UChar* data;
&gt; +            PassRefPtr&lt;StringImpl&gt; newImpl = 
&gt; +                StringImpl::createUninitialized(m_impl-&gt;length() + str.length(), data);
&gt; +            memcpy(data, m_impl-&gt;characters(), m_impl-&gt;length() * sizeof(UChar));
&gt; +            memcpy(data + m_impl-&gt;length(), str.characters(), str.length() * sizeof(UChar));
&gt; +            m_impl = newImpl;

This should use RefPtr and release, not PassRefPtr -- we don&apos;t use PassRefPtr for local variables. Please read http://webkit.org/coding/RefPtr.html for details. Same comment in the many other places PassRefPtr is used.

&gt; -    data.resize(realLength);
&gt; -    Unicode::toLower(data.characters(), realLength, m_data, m_length, &amp;error);
&gt; +        return newImpl;
&gt; +    newImpl = createUninitialized(realLength, data);
&gt; +    Unicode::toLower(data, realLength, m_data, m_length, &amp;error);

This new implementation requires a complete new buffer if the lowercase is even slightly longer. The old one at least allowed the common case where realloc could get the original space to work without a new allocation. I guess the new way is probably OK since this case is so unusual, but it would be interesting to know if we could someone retain the resize optimization.

review- because of the PassRefPtr issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123082</commentid>
    <comment_count>4</comment_count>
      <attachid>30660</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2009-05-25 15:28:48 -0700</bug_when>
    <thetext>Created attachment 30660
Fix

Resolved objections</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123139</commentid>
    <comment_count>5</comment_count>
      <attachid>30660</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-26 09:12:30 -0700</bug_when>
    <thetext>Comment on attachment 30660
Fix

&gt; Index: ChangeLog
&gt; ===================================================================
&gt; --- ChangeLog	(revision 44135)
&gt; +++ ChangeLog	(working copy)
&gt; @@ -1,3 +1,31 @@
&gt; +2009-05-25  David Moore  &lt;davemoore@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

There&apos;s no comment here. Need to cite the bug number and URL and say what you&apos;re doing and why. Event better is to have a per-function comment explaining what was done to each function.

&gt; +        int dataLength = data.length();

Should be unsigned.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123406</commentid>
    <comment_count>6</comment_count>
      <attachid>30737</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2009-05-28 07:50:15 -0700</bug_when>
    <thetext>Created attachment 30737
Fix

Fixed minor objections</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123422</commentid>
    <comment_count>7</comment_count>
      <attachid>30737</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-28 09:18:19 -0700</bug_when>
    <thetext>Comment on attachment 30737
Fix

&gt; +        if (c-&gt;nodeType() == Node::TEXT_NODE || c-&gt;nodeType() == Node::CDATA_SECTION_NODE || c-&gt;nodeType() == Node::COMMENT_NODE) {

Since nodeType() is a virtual function, it&apos;s too bad we&apos;re calling it three times on each non-textual node.

&gt; +            int nodeLength = nodeValue.length();

Should be unsigned, not int.

&gt; +        int dataLength = data.length();

Should be unsigned, not int.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123512</commentid>
    <comment_count>8</comment_count>
      <attachid>30762</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2009-05-28 19:11:57 -0700</bug_when>
    <thetext>Created attachment 30762
Fix

Hopefully this resolves the remaining nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123565</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-29 11:02:28 -0700</bug_when>
    <thetext>Assign to levin for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123631</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-29 15:44:51 -0700</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/44279.
and then fixed the windows build failure in http://trac.webkit.org/changeset/44281.
 </thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30642</attachid>
            <date>2009-05-24 23:47:19 -0700</date>
            <delta_ts>2009-05-25 15:28:48 -0700</delta_ts>
            <desc>Fx</desc>
            <filename>26001.patch</filename>
            <type>text/plain</type>
            <size>23032</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTIx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMDktMDUt
MjQgIERhdmlkIE1vb3JlICA8ZGF2ZW1vb3JlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjYwMDEKKworICAgICAgICBDaGFuZ2VzIHRvIHVzZSB0aGUgbmV3
CisgICAgICAgIFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZCgpIGluIHBsYWNlIG9mIAorICAg
ICAgICBTdHJpbmc6OmFkb3B0KCkgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisKKyAgICAgICAgV0FS
TklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBkb20vU3R5
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6cHJvY2Vzcyk6
CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6d2hvbGVU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Omluc2VydCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnRydW5jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6cmVtb3ZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpsb3dlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp1cHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzZWN1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6Zm9sZENhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmVw
bGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENvZGVjTGF0aW4xOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dENvZGVjVXNlckRlZmluZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjVXNlckRlZmluZWQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0xhbmd1
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsZUluZm8pOgorCiAyMDA5LTA1LTI0ICBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogZG9tL1N0eWxlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL1N0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ0MTE4KQor
KysgZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEzICs2MSwyNSBA
QCB2b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50KiBlKQogICAgIGlmICghZSB8fCAh
ZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8VUNoYXI+IHRl
eHQ7Ci0KKyAgICBpbnQgcmVzdWx0TGVuZ3RoID0gMDsKICAgICBmb3IgKE5vZGUqIGMgPSBlLT5m
aXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAgICAgICBpZiAoYy0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCi0g
ICAgICAgICAgICBhcHBlbmQodGV4dCwgYy0+bm9kZVZhbHVlKCkpOworICAgICAgICAgICAgcmVz
dWx0TGVuZ3RoICs9IGMtPm5vZGVWYWx1ZSgpLmxlbmd0aCgpOworICAgIFVDaGFyKiB0ZXh0Owor
ICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVzdWx0TGVu
Z3RoLCB0ZXh0KTsKKworICAgIFVDaGFyKiBwID0gdGV4dDsKKyAgICBmb3IgKE5vZGUqIGMgPSBl
LT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChj
LT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IE5vZGU6
OkNEQVRBX1NFQ1RJT05fTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RSkgeworICAgICAgICAgICAgU3RyaW5nIG5vZGVWYWx1ZSA9IGMtPm5vZGVWYWx1ZSgpOworICAg
ICAgICAgICAgaW50IG5vZGVMZW5ndGggPSBub2RlVmFsdWUubGVuZ3RoKCk7CisgICAgICAgICAg
ICBtZW1jcHkocCwgbm9kZVZhbHVlLmNoYXJhY3RlcnMoKSwgbm9kZUxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICAgICAgcCArPSBub2RlTGVuZ3RoOworICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChwID09IHRleHQgKyByZXN1bHRMZW5ndGgpOwogCi0gICAgY3JlYXRlU2hlZXQo
ZSwgU3RyaW5nOjphZG9wdCh0ZXh0KSk7CisgICAgY3JlYXRlU2hlZXQoZSwgcmVzdWx0KTsKIH0K
IAogdm9pZCBTdHlsZUVsZW1lbnQ6OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIGUsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKSW5kZXg6IGRvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vVGV4dC5jcHAJ
KHJldmlzaW9uIDQ0MTE4KQorKysgZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
MTcgKzEyNSwzMCBAQCBTdHJpbmcgVGV4dDo6d2hvbGVUZXh0KCkgY29uc3QKICAgICBjb25zdCBU
ZXh0KiBzdGFydFRleHQgPSBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUodGhpcyk7
CiAgICAgY29uc3QgVGV4dCogZW5kVGV4dCA9IGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5v
ZGUodGhpcyk7CiAKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKICAgICBOb2RlKiBvbmVQYXN0
RW5kVGV4dCA9IGVuZFRleHQtPm5leHRTaWJsaW5nKCk7CisgICAgaW50IHJlc3VsdExlbmd0aCA9
IDA7CiAgICAgZm9yIChjb25zdCBOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IG9uZVBhc3RFbmRU
ZXh0OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW4tPmlzVGV4dE5vZGUo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb25zdCBUZXh0KiB0ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOwogICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEgPSB0LT5k
YXRhKCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGEubGVu
Z3RoKCkpOworICAgICAgICByZXN1bHRMZW5ndGggKz0gZGF0YS5sZW5ndGgoKTsKICAgICB9Cisg
ICAgVUNoYXIqIHJlc3VsdERhdGE7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRl
VW5pbml0aWFsaXplZChyZXN1bHRMZW5ndGgsIHJlc3VsdERhdGEpOworICAgIFVDaGFyKiBwID0g
cmVzdWx0RGF0YTsKKyAgICBmb3IgKGNvbnN0IE5vZGUqIG4gPSBzdGFydFRleHQ7IG4gIT0gb25l
UGFzdEVuZFRleHQ7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghbi0+aXNU
ZXh0Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IFRleHQqIHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obik7CisgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0
YSA9IHQtPmRhdGEoKTsKKyAgICAgICAgaW50IGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCgpOwor
ICAgICAgICBtZW1jcHkocCwgZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGFMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICAgICAgcCArPSBkYXRhTGVuZ3RoOworICAgIH0KKyAgICBBU1NFUlQocCA9
PSByZXN1bHREYXRhICsgcmVzdWx0TGVuZ3RoKTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxUZXh0PiBUZXh0
OjpyZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgRXhjZXB0aW9uQ29kZSYp
CkluZGV4OiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
dGV4dC9TdHJpbmcuY3BwCShyZXZpc2lvbiA0NDExOCkKKysrIHBsYXRmb3JtL3RleHQvU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDEyIEBAIHZvaWQgU3RyaW5nOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdHIpCiAgICAgLy8gY2FsbCB0byBmYXN0TWFsbG9jIGV2ZXJ5IHNp
bmdsZSB0aW1lLgogICAgIGlmIChzdHIubV9pbXBsKSB7CiAgICAgICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobV9pbXBsLT5sZW5ndGgoKSArIHN0ci5s
ZW5ndGgoKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9pbXBs
LT5jaGFyYWN0ZXJzKCksIG1faW1wbC0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICAg
ICAgICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsgbV9pbXBsLT5sZW5ndGgoKSwgc3Ry
LmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgICAg
ICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICAgICAgVUNoYXIq
IGRhdGE7CisgICAgICAgICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAg
ICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1faW1wbC0+bGVu
Z3RoKCkgKyBzdHIubGVuZ3RoKCksIGRhdGEpOworICAgICAgICAgICAgbWVtY3B5KGRhdGEsIG1f
aW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgICAgICAgICBtZW1jcHkoZGF0YSArIG1faW1wbC0+bGVuZ3RoKCksIHN0ci5jaGFyYWN0ZXJz
KCksIHN0ci5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbV9pbXBsID0g
bmV3SW1wbDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2ltcGwgPSBzdHIubV9pbXBs
OwogICAgIH0KQEAgLTEwMSwxMCArMTAzLDEyIEBAIHZvaWQgU3RyaW5nOjphcHBlbmQoY2hhciBj
KQogICAgIC8vIG9uZSBTdHJpbmcgaXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBsLCBidXQg
ZXZlbiB0aGVuIGl0J3MgZ29pbmcgdG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBmYXN0TWFs
bG9jIGV2ZXJ5IHNpbmdsZSB0aW1lLgogICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgU3RyaW5n
QnVmZmVyIGJ1ZmZlcihtX2ltcGwtPmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNweShidWZm
ZXIuY2hhcmFjdGVycygpLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcikpOwotICAgICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwot
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICBVQ2hh
ciogZGF0YTsKKyAgICAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAg
ICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1faW1wbC0+bGVuZ3RoKCkg
KyAxLCBkYXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIG1faW1wbC0+Y2hhcmFjdGVycygpLCBt
X2ltcGwtPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGRhdGFbbV9pbXBsLT5s
ZW5ndGgoKV0gPSBjOworICAgICAgICBtX2ltcGwgPSBuZXdJbXBsOwogICAgIH0gZWxzZQogICAg
ICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoJmMsIDEpOwogfQpAQCAtMTE2LDEwICsx
MjAsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgIC8vIG9uZSBTdHJpbmcg
aXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBsLCBidXQgZXZlbiB0aGVuIGl0J3MgZ29pbmcg
dG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBmYXN0TWFsbG9jIGV2ZXJ5IHNpbmdsZSB0aW1l
LgogICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihtX2ltcGwt
Pmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBtX2lt
cGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOwotICAg
ICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwotICAgICAgICBtX2ltcGwgPSBTdHJp
bmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICBVQ2hhciogZGF0YTsKKyAgICAgICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgICAgICBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKG1faW1wbC0+bGVuZ3RoKCkgKyAxLCBkYXRhKTsKKyAgICAgICAg
bWVtY3B5KGRhdGEsIG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIGRhdGFbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOworICAgICAg
ICBtX2ltcGwgPSBuZXdJbXBsOwogICAgIH0gZWxzZQogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJ
bXBsOjpjcmVhdGUoJmMsIDEpOwogfQpAQCAtMTcwLDEwICsxNzYsMTIgQEAgdm9pZCBTdHJpbmc6
OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdAogICAgICAgICByZXR1cm47CiAKICAgICBBU1NF
UlQoY2hhcmFjdGVyc1RvQXBwZW5kKTsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgp
ICsgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBjaGFy
YWN0ZXJzKCksIGxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5j
aGFyYWN0ZXJzKCkgKyBsZW5ndGgoKSwgY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVu
ZCAqIHNpemVvZihVQ2hhcikpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZl
cik7CisgICAgVUNoYXIqIGRhdGE7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gCisgICAgICAgIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBs
ZW5ndGhUb0FwcGVuZCwgZGF0YSk7CisgICAgbWVtY3B5KGRhdGEsIGNoYXJhY3RlcnMoKSwgbGVu
Z3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0YSArIGxlbmd0aCgpLCBjaGFy
YWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbV9p
bXBsID0gbmV3SW1wbDsKIH0KIAogdm9pZCBTdHJpbmc6Omluc2VydChjb25zdCBVQ2hhciogY2hh
cmFjdGVyc1RvSW5zZXJ0LCB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCwgdW5zaWduZWQgcG9zaXRp
b24pCkBAIC0xODksMTEgKzE5NywxMyBAQCB2b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFVDaGFy
KiBjaGFyYWN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9JbnNl
cnQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCk7
Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24g
KiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0
aW9uLCBjaGFyYWN0ZXJzVG9JbnNlcnQsIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7
Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5z
ZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgKGxlbmd0aCgpIC0gcG9zaXRpb24pICogc2l6
ZW9mKFVDaGFyKSk7Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKKyAg
ICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAg
ICAgICAgU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSArIGxlbmd0aFRv
SW5zZXJ0LCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAq
IHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24sIGNoYXJhY3RlcnNU
b0luc2VydCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0
YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCAo
bGVuZ3RoKCkgLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtX2ltcGwgPSBuZXdJ
bXBsOwogfQogCiBVQ2hhciBTdHJpbmc6Om9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKQEAg
LTIyMSw5ICsyMzEsMTAgQEAgdm9pZCBTdHJpbmc6OnRydW5jYXRlKHVuc2lnbmVkIHBvc2l0aW9u
KQogewogICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFN0cmluZ0J1ZmZlciBidWZmZXIocG9zaXRpb24pOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFj
dGVycygpLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbV9p
bXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRp
YWxpemVkKHBvc2l0aW9uLCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycygpLCBw
b3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAgIG1faW1wbCA9IG5ld0ltcGw7CiB9CiAKIHZv
aWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIGludCBsZW5ndGhUb1JlbW92ZSkK
QEAgLTIzNCwxMSArMjQ1LDEzIEBAIHZvaWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9zaXRp
b24sIGkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVu
Z3RoVG9SZW1vdmUpID4gbGVuZ3RoKCkgLSBwb3NpdGlvbikKICAgICAgICAgbGVuZ3RoVG9SZW1v
dmUgPSBsZW5ndGgoKSAtIHBvc2l0aW9uOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3Ro
KCkgLSBsZW5ndGhUb1JlbW92ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNo
YXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVy
LmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0
aFRvUmVtb3ZlLAorICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
bmV3SW1wbCA9IAorICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCgpIC0gbGVuZ3RoVG9SZW1vdmUsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJz
KCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlv
biwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlbW92ZSwKICAgICAgICAgKGxl
bmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUgLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgIG1faW1wbCA9IG5ld0lt
cGw7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVk
IGxlbikgY29uc3QKSW5kZXg6IHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkocmV2aXNpb24gNDQxMTgp
CisrKyBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw5ICs3OSwxMCBAQCBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcoKSBjb25zdAogICAg
IGlmIChjb3VudCA9PSAxKQogICAgICAgICByZXR1cm4gbV9zdHJpbmdzWzBdOwogCi0gICAgU3Ry
aW5nQnVmZmVyIGJ1ZmZlcihtX3RvdGFsTGVuZ3RoKTsKKyAgICBVQ2hhciogYnVmZmVyOworICAg
IFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV90b3RhbExlbmd0
aCwgYnVmZmVyKTsKIAotICAgIFVDaGFyKiBwID0gYnVmZmVyLmNoYXJhY3RlcnMoKTsKKyAgICBV
Q2hhciogcCA9IGJ1ZmZlcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBtX3N0cmluZ3NbaV0uaW1wbCgpOwog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOyAKQEAgLTg5LDkgKzkw
LDkgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcCAr
PSBsZW5ndGg7CiAgICAgfQogCi0gICAgQVNTRVJUKHAgPT0gbV90b3RhbExlbmd0aCArIGJ1ZmZl
ci5jaGFyYWN0ZXJzKCkpOworICAgIEFTU0VSVChwID09IG1fdG90YWxMZW5ndGggKyBidWZmZXIp
OwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiB9CkluZGV4OiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDQ0MTE4KQorKysgcGxh
dGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw4
IEBAIGJvb2wgU3RyaW5nSW1wbDo6aXNMb3dlcigpCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6bG93ZXIoKQogewotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsK
KyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBpbnQzMl90IGxlbmd0aCA9
IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUg
YWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KQEAgLTI3NSwyMyArMjc2LDI0IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIKICAgICAgICAgZGF0YVtpXSA9IHRv
QVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAg
cmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERv
IGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBV
bmljb2RlOjp0b0xvd2VyKGRhdGEuY2hhcmFjdGVycygpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5n
dGgsICZlcnJvcik7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9Mb3dlcihk
YXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAm
JiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwotICAg
IGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOwotICAgIFVuaWNvZGU6OnRvTG93ZXIoZGF0YS5jaGFy
YWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAg
IHJldHVybiBuZXdJbXBsOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxM
ZW5ndGgsIGRhdGEpOworICAgIFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwgcmVhbExlbmd0aCwgbV9k
YXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0
aGlzOwotICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAog
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCiB7Ci0gICAgU3RyaW5n
QnVmZmVyIGRhdGEobV9sZW5ndGgpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEp
OwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKICAgICAvLyBEbyBhIGZhc3RlciBs
b29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgpAQCAt
MzAyLDMyICszMDQsMzQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBl
cgogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSVVwcGVyKGMpOwogICAgIH0KICAgICBpZiAoIShv
cmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgICAgIHJldHVy
biBuZXdJbXBsOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2Vz
IHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29sIGVycm9yOwotICAg
IGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YS5jaGFyYWN0ZXJzKCks
IGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5n
dGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVy
cm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gYWRvcHQoZGF0YSk7Ci0gICAgZGF0YS5yZXNpemUocmVhbExlbmd0aCk7Ci0gICAgVW5p
Y29kZTo6dG9VcHBlcihkYXRhLmNoYXJhY3RlcnMoKSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xl
bmd0aCwgJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7CisgICAgVW5pY29kZTo6dG9VcHBl
cihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChl
cnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAg
IHJldHVybiBuZXdJbXBsOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OnNlY3VyZShVQ2hhciBhQ2hhcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAg
U3RyaW5nQnVmZmVyIGRhdGEobGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBk
YXRhKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIGRhdGFbaV0gPSBhQ2hhcjsKLSAgICByZXR1cm4g
YWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogewotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1f
bGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBpbnQzMl90
IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNh
c2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KQEAgLTMzOCwxOCArMzQyLDE4
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZEMKICAgICAgICAgZGF0
YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkK
LSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAog
ICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUg
bm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxM
ZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLmNoYXJhY3RlcnMoKSwgbGVuZ3RoLCBtX2Rh
dGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6
OmZvbGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBp
ZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7Ci0gICAgZGF0YS5yZXNpemUocmVhbExlbmd0aCk7Ci0gICAgVW5pY29kZTo6Zm9sZENh
c2UoZGF0YS5jaGFyYWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJv
cik7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOworICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJl
YWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKGVycm9yKQogICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5l
d0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXBXaGl0
ZVNwYWNlKCkKQEAgLTcyNywxNCArNzMxLDE2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGEKICAgICBpZiAoaSA9PSBtX2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRo
aXM7CiAKLSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CisgICAgVUNoYXIqIGRhdGE7
CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChtX2xlbmd0aCwgZGF0YSk7CisKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRD
KQogICAgICAgICAgICAgY2ggPSBuZXdDOwogICAgICAgICBkYXRhW2ldID0gY2g7CiAgICAgfQot
ICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAogUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKHVuc2lnbmVkIHBvc2l0aW9uLCB1
bnNpZ25lZCBsZW5ndGhUb1JlcGxhY2UsIFN0cmluZ0ltcGwqIHN0cikKQEAgLTc0NCwxMyArNzUw
LDE1IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICB1bnNp
Z25lZCBsZW5ndGhUb0luc2VydCA9IHN0ciA/IHN0ci0+bGVuZ3RoKCkgOiAwOwogICAgIGlmICgh
bGVuZ3RoVG9SZXBsYWNlICYmICFsZW5ndGhUb0luc2VydCkKICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxl
bmd0aFRvSW5zZXJ0KTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVy
cygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICBjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOwor
ICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7
CiAgICAgaWYgKHN0cikKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3Np
dGlvbiwgc3RyLT5jaGFyYWN0ZXJzKCksIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7
Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5z
ZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAg
bWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5jaGFyYWN0ZXJzKCksIGxlbmd0aFRvSW5zZXJ0
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRv
SW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKICAgICAg
ICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKFVDaGFy
KSk7Ci0gICAgcmV0dXJuIGFkb3B0KGJ1ZmZlcik7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJu
LCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkKQEAgLTc3Miw4ICs3ODAsMTAgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIGlmICghbWF0Y2hDb3VudCkKICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCi0gICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgg
LSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGgpKTsKLSAgICAKKyAgICBV
Q2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAgICAg
ICAgY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCAtIG1hdGNoQ291bnQgKyAobWF0Y2hDb3Vu
dCAqIHJlcFN0ckxlbmd0aCksIGRhdGEpOworCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0
YQogICAgIGludCBzcmNTZWdtZW50RW5kOwogICAgIGludCBzcmNTZWdtZW50TGVuZ3RoOwpAQCAt
NzgyLDE5ICs3OTIsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBs
YQogICAgIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2Vn
bWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVu
dEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygp
ICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwog
ICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRh
dGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJM
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQs
IHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAg
ICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICBzcmNTZWdtZW50U3RhcnQg
PSBzcmNTZWdtZW50RW5kICsgMTsKICAgICB9CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9s
ZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsg
ZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3Jj
U2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBB
U1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRh
dGEubGVuZ3RoKCkpKTsKKyAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9
PSBzdGF0aWNfY2FzdDxpbnQ+KG5ld0ltcGwtPmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4gYWRv
cHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiBy
ZXBsYWNlbWVudCkKQEAgLTgyMCw3ICs4MzAsOSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKCFtYXRjaENvdW50KQogICAgICAgICByZXR1cm4gdGhp
czsKICAgICAKLSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCArIG1hdGNoQ291bnQgKiAo
cmVwU3RyTGVuZ3RoIC0gcGF0dGVybkxlbmd0aCkpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICBjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoICsgbWF0Y2hDb3VudCAqIChyZXBTdHJMZW5ndGggLSBwYXR0ZXJuTGVuZ3Ro
KSwgZGF0YSk7CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBz
cmNTZWdtZW50RW5kOwpAQCAtODMwLDE5ICs4NDIsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZp
bmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdtZW50
TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5
KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQs
IHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEg
KyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAq
IHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsK
LSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVu
dC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5
KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAg
ICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgcGF0dGVybkxlbmd0aDsKICAgICB9
CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0g
ICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdt
ZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHko
ZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVu
dExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEubGVuZ3RoKCkpKTsKKyAgICBBU1NFUlQo
ZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KG5ld0ltcGwt
Pmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0lt
cGw7CiB9CiAKIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogYSwgU3RyaW5nSW1wbCogYikKSW5kZXg6
IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHJldmlzaW9uIDQ0MTE4KQorKysgcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDgg
QEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29kZWNzKFRleAogCiBTdHJpbmcgVGV4
dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJv
b2wsIGJvb2wsIGJvb2wmKQogewotICAgIFN0cmluZ0J1ZmZlciBjaGFyYWN0ZXJzKGxlbmd0aCk7
CisgICAgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMpOwogCiAgICAgLy8gQ29udmVydCB0
aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBj
aGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCiAgICAgdW5zaWduZWQgY2hhciBvcmVkID0g
MDsKQEAgLTEzMCw3ICsxMzEsNyBAQCBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29u
c3QgY2hhCiAgICAgfQogCiAgICAgaWYgKCEob3JlZCAmIDB4ODApKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChjaGFyYWN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAg
IC8vIENvbnZlcnQgdGhlIHNsaWdodGx5IHNsb3dlciB3YXkgd2hlbiB0aGVyZSBhcmUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewpAQCAtMTM4LDcgKzEzOSw3IEBAIFN0cmluZyBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZShjb25z
dCBjaGEKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRhYmxlW2NdOwogICAgIH0KIAotICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KGNoYXJhY3RlcnMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IHN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQpJ
bmRleDogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHJldmlzaW9uIDQ0MTE4
KQorKysgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDE0ICs1MSwxNSBAQCB2b2lkIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3Rl
ckNvZGVjCiAKIFN0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6ZGVjb2RlKGNvbnN0IGNoYXIq
IGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsKLSAgICBTdHJpbmdC
dWZmZXIgYnVmZmVyKGxlbmd0aCk7CisgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICBTdHJpbmcgcmVz
dWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgc2lnbmVkIGNo
YXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICBidWZmZXJbaV0gPSBjICYgMHhGN0ZGOwogICAgIH0K
IAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5n
KQpJbmRleDogcGxhdGZvcm0vd2luL0xhbmd1YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS93aW4vTGFuZ3VhZ2UuY3BwCShyZXZpc2lvbiA0NDExOCkKKysrIHBsYXRmb3JtL3dpbi9MYW5n
dWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxMiBAQCBzdGF0aWMgU3RyaW5n
IGxvY2FsZUluZm8oTENUWVBFIGxvY2FsZVR5CiAgICAgaW50IGxvY2FsZUNoYXJzID0gR2V0TG9j
YWxlSW5mbyhsYW5nSUQsIGxvY2FsZVR5cGUsIDAsIDApOwogICAgIGlmICghbG9jYWxlQ2hhcnMp
CiAgICAgICAgIHJldHVybiBmYWxsYmFjazsKKyAgICBVQ2hhciogbG9jYWxlTmFtZUJ1ZjsKKyAg
ICBTdHJpbmcgbG9jYWxlTmFtZSA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsb2NhbGVD
aGFycywgbG9jYWxlTmFtZUJ1Zik7CiAgICAgVmVjdG9yPFdDSEFSPiBsb2NhbGVOYW1lQnVmKGxv
Y2FsZUNoYXJzKTsKLSAgICBsb2NhbGVDaGFycyA9IEdldExvY2FsZUluZm8obGFuZ0lELCBsb2Nh
bGVUeXBlLCBsb2NhbGVOYW1lQnVmLmRhdGEoKSwgbG9jYWxlQ2hhcnMpOworICAgIGxvY2FsZUNo
YXJzID0gR2V0TG9jYWxlSW5mbyhsYW5nSUQsIGxvY2FsZVR5cGUsIGxvY2FsZU5hbWVCdWYsIGxv
Y2FsZUNoYXJzKTsKICAgICBpZiAoIWxvY2FsZUNoYXJzKQogICAgICAgICByZXR1cm4gZmFsbGJh
Y2s7Ci0gICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmc6OmFkb3B0KGxvY2FsZU5hbWVCdWYp
OwogICAgIGlmIChsb2NhbGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbGxiYWNr
OwogCg==
</data>
<flag name="review"
          id="15509"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30660</attachid>
            <date>2009-05-25 15:28:48 -0700</date>
            <delta_ts>2009-05-28 07:50:15 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>26001.patch</filename>
            <type>text/plain</type>
            <size>22895</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTM1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDktMDUt
MjUgIERhdmlkIE1vb3JlICA8ZGF2ZW1vb3JlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiBk
b20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Ojp3aG9sZVRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6
YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6aW5zZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZzo6dHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpyZW1v
dmUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6Omxvd2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnVwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZ0ltcGw6OnNlY3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpm
b2xkQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNMYXRpbjE6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNVc2VyRGVmaW5lZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVm
aW5lZDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTGFuZ3VhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bG9jYWxlSW5mbyk6CisKIDIwMDktMDUtMjUgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRl
eDogZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1N0eWxlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQ0MTM1KQorKysgZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDEzICs2MSwyNiBAQCB2b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhFbGVtZW50
KiBlKQogICAgIGlmICghZSB8fCAhZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBWZWN0b3I8VUNoYXI+IHRleHQ7Ci0KLSAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQorICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IDA7CisgICAgZm9yIChOb2RlKiBjID0gZS0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05P
REUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgYy0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCi0gICAgICAgICAgICBhcHBlbmQodGV4dCwg
Yy0+bm9kZVZhbHVlKCkpOworICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IGMtPm5vZGVWYWx1
ZSgpLmxlbmd0aCgpOworICAgIH0KKyAgICBVQ2hhciogdGV4dDsKKyAgICBTdHJpbmcgc2hlZXRU
ZXh0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlc3VsdExlbmd0aCwgdGV4dCk7CisK
KyAgICBVQ2hhciogcCA9IHRleHQ7CisgICAgZm9yIChOb2RlKiBjID0gZS0+Zmlyc3RDaGlsZCgp
OyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9O
X05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKKyAgICAgICAg
ICAgIFN0cmluZyBub2RlVmFsdWUgPSBjLT5ub2RlVmFsdWUoKTsKKyAgICAgICAgICAgIGludCBu
b2RlTGVuZ3RoID0gbm9kZVZhbHVlLmxlbmd0aCgpOworICAgICAgICAgICAgbWVtY3B5KHAsIG5v
ZGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG5vZGVMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAg
ICAgICAgIHAgKz0gbm9kZUxlbmd0aDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQocCA9
PSB0ZXh0ICsgcmVzdWx0TGVuZ3RoKTsKIAotICAgIGNyZWF0ZVNoZWV0KGUsIFN0cmluZzo6YWRv
cHQodGV4dCkpOworICAgIGNyZWF0ZVNoZWV0KGUsIHNoZWV0VGV4dCk7CiB9CiAKIHZvaWQgU3R5
bGVFbGVtZW50OjpjcmVhdGVTaGVldChFbGVtZW50KiBlLCBjb25zdCBTdHJpbmcmIHRleHQpCklu
ZGV4OiBkb20vVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1RleHQuY3BwCShyZXZpc2lvbiA0
NDEzNSkKKysrIGRvbS9UZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE3ICsxMjUsMzAg
QEAgU3RyaW5nIFRleHQ6Ondob2xlVGV4dCgpIGNvbnN0CiAgICAgY29uc3QgVGV4dCogc3RhcnRU
ZXh0ID0gZWFybGllc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwogICAgIGNvbnN0
IFRleHQqIGVuZFRleHQgPSBsYXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwog
Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CiAgICAgTm9kZSogb25lUGFzdEVuZFRleHQgPSBl
bmRUZXh0LT5uZXh0U2libGluZygpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CiAg
ICAgZm9yIChjb25zdCBOb2RlKiBuID0gc3RhcnRUZXh0OyBuICE9IG9uZVBhc3RFbmRUZXh0OyBu
ID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW4tPmlzVGV4dE5vZGUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb25zdCBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVGV4dCo+KG4pOwogICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEgPSB0LT5kYXRhKCk7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGEubGVuZ3RoKCkp
OworICAgICAgICByZXN1bHRMZW5ndGggKz0gZGF0YS5sZW5ndGgoKTsKICAgICB9CisgICAgVUNo
YXIqIHJlc3VsdERhdGE7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0
aWFsaXplZChyZXN1bHRMZW5ndGgsIHJlc3VsdERhdGEpOworICAgIFVDaGFyKiBwID0gcmVzdWx0
RGF0YTsKKyAgICBmb3IgKGNvbnN0IE5vZGUqIG4gPSBzdGFydFRleHQ7IG4gIT0gb25lUGFzdEVu
ZFRleHQ7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghbi0+aXNUZXh0Tm9k
ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IFRleHQqIHQgPSBzdGF0
aWNfY2FzdDxjb25zdCBUZXh0Kj4obik7CisgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSA9IHQt
PmRhdGEoKTsKKyAgICAgICAgaW50IGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCgpOworICAgICAg
ICBtZW1jcHkocCwgZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGFMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKKyAgICAgICAgcCArPSBkYXRhTGVuZ3RoOworICAgIH0KKyAgICBBU1NFUlQocCA9PSByZXN1
bHREYXRhICsgcmVzdWx0TGVuZ3RoKTsKIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpyZXBs
YWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgRXhjZXB0aW9uQ29kZSYpCkluZGV4
OiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9T
dHJpbmcuY3BwCShyZXZpc2lvbiA0NDEzNSkKKysrIHBsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsMTAgKzg1LDEyIEBAIHZvaWQgU3RyaW5nOjphcHBlbmQoY29u
c3QgU3RyaW5nJiBzdHIpCiAgICAgLy8gY2FsbCB0byBmYXN0TWFsbG9jIGV2ZXJ5IHNpbmdsZSB0
aW1lLgogICAgIGlmIChzdHIubV9pbXBsKSB7CiAgICAgICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobV9pbXBsLT5sZW5ndGgoKSArIHN0ci5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5jaGFy
YWN0ZXJzKCksIG1faW1wbC0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgICAg
IG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsgbV9pbXBsLT5sZW5ndGgoKSwgc3RyLmNoYXJh
Y3RlcnMoKSwgc3RyLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgICAgICBtX2lt
cGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICAgICAgVUNoYXIqIGRhdGE7
CisgICAgICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICAgICAg
ICAgIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9pbXBsLT5sZW5ndGgoKSArIHN0
ci5sZW5ndGgoKSwgZGF0YSk7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSwgbV9pbXBsLT5jaGFy
YWN0ZXJzKCksIG1faW1wbC0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAg
IG1lbWNweShkYXRhICsgbV9pbXBsLT5sZW5ndGgoKSwgc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICBtX2ltcGwgPSBuZXdJbXBsLnJl
bGVhc2UoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2ltcGwgPSBzdHIubV9pbXBs
OwogICAgIH0KQEAgLTEwMSwxMCArMTAzLDEyIEBAIHZvaWQgU3RyaW5nOjphcHBlbmQoY2hhciBj
KQogICAgIC8vIG9uZSBTdHJpbmcgaXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBsLCBidXQg
ZXZlbiB0aGVuIGl0J3MgZ29pbmcgdG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBmYXN0TWFs
bG9jIGV2ZXJ5IHNpbmdsZSB0aW1lLgogICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgU3RyaW5n
QnVmZmVyIGJ1ZmZlcihtX2ltcGwtPmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNweShidWZm
ZXIuY2hhcmFjdGVycygpLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcikpOwotICAgICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwot
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICBVQ2hh
ciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAgICAgICAg
ICAgIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9pbXBsLT5sZW5ndGgoKSArIDEs
IGRhdGEpOworICAgICAgICBtZW1jcHkoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzKCksIG1faW1w
bC0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZGF0YVttX2ltcGwtPmxlbmd0
aCgpXSA9IGM7CisgICAgICAgIG1faW1wbCA9IG5ld0ltcGwucmVsZWFzZSgpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoJmMsIDEpOwogfQpAQCAtMTE2
LDEwICsxMjAsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChVQ2hhciBjKQogICAgIC8vIG9uZSBT
dHJpbmcgaXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBsLCBidXQgZXZlbiB0aGVuIGl0J3Mg
Z29pbmcgdG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBmYXN0TWFsbG9jIGV2ZXJ5IHNpbmds
ZSB0aW1lLgogICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciht
X2ltcGwtPmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygp
LCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwotICAgICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgICAgICBVQ2hhciogZGF0YTsKKyAgICAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAgICAgICAgICAgIFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9pbXBsLT5sZW5ndGgoKSArIDEsIGRhdGEpOworICAgICAg
ICBtZW1jcHkoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzKCksIG1faW1wbC0+bGVuZ3RoKCkgKiBz
aXplb2YoVUNoYXIpKTsKKyAgICAgICAgZGF0YVttX2ltcGwtPmxlbmd0aCgpXSA9IGM7CisgICAg
ICAgIG1faW1wbCA9IG5ld0ltcGwucmVsZWFzZSgpOwogICAgIH0gZWxzZQogICAgICAgICBtX2lt
cGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoJmMsIDEpOwogfQpAQCAtMTcwLDEwICsxNzYsMTIgQEAg
dm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdAogICAgICAgICByZXR1cm47
CiAKICAgICBBU1NFUlQoY2hhcmFjdGVyc1RvQXBwZW5kKTsKLSAgICBTdHJpbmdCdWZmZXIgYnVm
ZmVyKGxlbmd0aCgpICsgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFj
dGVycygpLCBjaGFyYWN0ZXJzKCksIGxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVt
Y3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBsZW5ndGgoKSwgY2hhcmFjdGVyc1RvQXBwZW5kLCBs
ZW5ndGhUb0FwcGVuZCAqIHNpemVvZihVQ2hhcikpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6
OmFkb3B0KGJ1ZmZlcik7CisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSAKKyAgICAgICAgU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgoKSArIGxlbmd0aFRvQXBwZW5kLCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVy
cygpLCBsZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShkYXRhICsgbGVuZ3Ro
KCksIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQgKiBzaXplb2YoVUNoYXIpKTsK
KyAgICBtX2ltcGwgPSBuZXdJbXBsLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBTdHJpbmc6Omluc2Vy
dChjb25zdCBVQ2hhciogY2hhcmFjdGVyc1RvSW5zZXJ0LCB1bnNpZ25lZCBsZW5ndGhUb0luc2Vy
dCwgdW5zaWduZWQgcG9zaXRpb24pCkBAIC0xODksMTEgKzE5NywxMyBAQCB2b2lkIFN0cmluZzo6
aW5zZXJ0KGNvbnN0IFVDaGFyKiBjaGFyYWN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChjaGFyYWN0ZXJzVG9JbnNlcnQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKCkg
KyBsZW5ndGhUb0luc2VydCk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJh
Y3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNo
YXJhY3RlcnMoKSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzVG9JbnNlcnQsIGxlbmd0aFRvSW5zZXJ0
ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3Np
dGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgKGxlbmd0aCgp
IC0gcG9zaXRpb24pICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6
YWRvcHQoYnVmZmVyKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bmV3SW1wbCA9IAorICAgICAgU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgo
KSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycygp
LCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24s
IGNoYXJhY3RlcnNUb0luc2VydCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKKyAg
ICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSAr
IHBvc2l0aW9uLCAobGVuZ3RoKCkgLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBt
X2ltcGwgPSBuZXdJbXBsLnJlbGVhc2UoKTsKIH0KIAogVUNoYXIgU3RyaW5nOjpvcGVyYXRvcltd
KHVuc2lnbmVkIGkpIGNvbnN0CkBAIC0yMjEsOSArMjMxLDEwIEBAIHZvaWQgU3RyaW5nOjp0cnVu
Y2F0ZSh1bnNpZ25lZCBwb3NpdGlvbikKIHsKICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKHBvc2l0aW9uKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNp
emVvZihVQ2hhcikpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7Cisg
ICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBTdHJpbmdJ
bXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHBvc2l0aW9uLCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0
YSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAgIG1faW1wbCA9
IG5ld0ltcGwucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0cmluZzo6cmVtb3ZlKHVuc2lnbmVkIHBv
c2l0aW9uLCBpbnQgbGVuZ3RoVG9SZW1vdmUpCkBAIC0yMzQsMTEgKzI0NSwxMyBAQCB2b2lkIFN0
cmluZzo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCBpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFRvUmVtb3ZlKSA+IGxlbmd0aCgpIC0gcG9z
aXRpb24pCiAgICAgICAgIGxlbmd0aFRvUmVtb3ZlID0gbGVuZ3RoKCkgLSBwb3NpdGlvbjsKLSAg
ICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUpOwotICAgIG1l
bWNweShidWZmZXIuY2hhcmFjdGVycygpLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9m
KFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgY2hh
cmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlbW92ZSwKKyAgICBVQ2hhciogZGF0YTsK
KyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUsIGRhdGEpOworICAg
IG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5n
dGhUb1JlbW92ZSwKICAgICAgICAgKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUgLSBwb3NpdGlv
bikgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZm
ZXIpOworICAgIG1faW1wbCA9IG5ld0ltcGwucmVsZWFzZSgpOwogfQogCiBTdHJpbmcgU3RyaW5n
OjpzdWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4pIGNvbnN0CkluZGV4OiBwbGF0
Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDQ0MTM1KQorKysgcGxhdGZvcm0vdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOSArNzksMTAgQEAgU3RyaW5nIFN0
cmluZ0J1aWxkZXI6OnRvU3RyaW5nKCkgY29uc3QKICAgICBpZiAoY291bnQgPT0gMSkKICAgICAg
ICAgcmV0dXJuIG1fc3RyaW5nc1swXTsKIAotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobV90b3Rh
bExlbmd0aCk7CisgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5n
OjpjcmVhdGVVbmluaXRpYWxpemVkKG1fdG90YWxMZW5ndGgsIGJ1ZmZlcik7CiAKLSAgICBVQ2hh
ciogcCA9IGJ1ZmZlci5jaGFyYWN0ZXJzKCk7CisgICAgVUNoYXIqIHAgPSBidWZmZXI7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgU3RyaW5nSW1w
bCogc3RyaW5nID0gbV9zdHJpbmdzW2ldLmltcGwoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nLT5sZW5ndGgoKTsgCkBAIC04OSw5ICs5MCw5IEBAIFN0cmluZyBTdHJpbmdCdWls
ZGVyOjp0b1N0cmluZygpIGNvbnN0CiAgICAgICAgIHAgKz0gbGVuZ3RoOwogICAgIH0KIAotICAg
IEFTU0VSVChwID09IG1fdG90YWxMZW5ndGggKyBidWZmZXIuY2hhcmFjdGVycygpKTsKKyAgICBB
U1NFUlQocCA9PSBtX3RvdGFsTGVuZ3RoICsgYnVmZmVyKTsKIAotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KGJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfQpJbmRleDogcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuY3BwCShyZXZpc2lvbiA0NDEzNSkKKysrIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsOCBAQCBib29sIFN0cmluZ0ltcGw6Omlz
TG93ZXIoKQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyKCkKIHsK
LSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CisgICAgVUNoYXIqIGRhdGE7CisgICAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xl
bmd0aCwgZGF0YSk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAogICAgIC8vIERv
IGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUg
QVNDSUkuCkBAIC0yNzUsMjMgKzI3NiwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6Omxvd2VyCiAgICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgfQog
ICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAg
ICAgICAgcmV0dXJuIG5ld0ltcGw7CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlv
biBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wg
ZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9Mb3dlcihkYXRhLmNo
YXJhY3RlcnMoKSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMy
X3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1f
bGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgp
Ci0gICAgICAgIHJldHVybiBhZG9wdChkYXRhKTsKLSAgICBkYXRhLnJlc2l6ZShyZWFsTGVuZ3Ro
KTsKLSAgICBVbmljb2RlOjp0b0xvd2VyKGRhdGEuY2hhcmFjdGVycygpLCByZWFsTGVuZ3RoLCBt
X2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKKyAgICBu
ZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKKyAgICBVbmlj
b2RlOjp0b0xvd2VyKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7
CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6dXBwZXIoKQogewotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsK
KyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBpbnQzMl90IGxlbmd0aCA9
IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUg
YWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KQEAgLTMwMiwzMiArMzA0LDM0IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dXBwZXIKICAgICAgICAgZGF0YVtpXSA9IHRv
QVNDSUlVcHBlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAg
cmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERv
IGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBV
bmljb2RlOjp0b1VwcGVyKGRhdGEuY2hhcmFjdGVycygpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5n
dGgsICZlcnJvcik7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcihk
YXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAm
JiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwotICAg
IGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOwotICAgIFVuaWNvZGU6OnRvVXBwZXIoZGF0YS5jaGFy
YWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAg
IHJldHVybiBuZXdJbXBsOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxM
ZW5ndGgsIGRhdGEpOworICAgIFVuaWNvZGU6OnRvVXBwZXIoZGF0YSwgcmVhbExlbmd0aCwgbV9k
YXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0
aGlzOwotICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAog
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzZWN1cmUoVUNoYXIgYUNoYXIpCiB7
Ci0gICAgaW50IGxlbmd0aCA9IG1fbGVuZ3RoOwotICAgIFN0cmluZ0J1ZmZlciBkYXRhKGxlbmd0
aCk7CisgICAgVUNoYXIqIGRhdGE7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisgICAgaW50MzJfdCBsZW5n
dGggPSBtX2xlbmd0aDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAg
ICAgICBkYXRhW2ldID0gYUNoYXI7Ci0gICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVy
biBuZXdJbXBsOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRD
YXNlKCkKIHsKLSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CisgICAgVUNoYXIqIGRh
dGE7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFs
aXplZChtX2xlbmd0aCwgZGF0YSk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAog
ICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFj
dGVycyBhcmUgQVNDSUkuCkBAIC0zMzgsMTggKzM0MiwxOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmZvbGRDCiAgICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7
CiAgICAgfQogICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiBhZG9wdChk
YXRhKTsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBs
ZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgog
ICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6Zm9sZENh
c2UoZGF0YS5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsK
KyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCBsZW5ndGgs
IG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3Ro
ID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwotICAgIGRhdGEucmVzaXpl
KHJlYWxMZW5ndGgpOwotICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEuY2hhcmFjdGVycygpLCBy
ZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICByZXR1cm4gbmV3
SW1wbDsKKyAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRh
KTsKKyAgICBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVu
Z3RoLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
cmV0dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgpCkBAIC03MjcsMTQgKzcz
MSwxNiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYg
KGkgPT0gbV9sZW5ndGgpCiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgU3RyaW5nQnVmZmVy
IGRhdGEobV9sZW5ndGgpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOworCiAg
ICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7CiAgICAgICAgIFVDaGFyIGNoID0g
bV9kYXRhW2ldOwogICAgICAgICBpZiAoY2ggPT0gb2xkQykKICAgICAgICAgICAgIGNoID0gbmV3
QzsKICAgICAgICAgZGF0YVtpXSA9IGNoOwogICAgIH0KLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7
CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6cmVwbGFjZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoVG9SZXBsYWNl
LCBTdHJpbmdJbXBsKiBzdHIpCkBAIC03NDQsMTMgKzc1MCwxNSBAQCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBz
dHIgPyBzdHItPmxlbmd0aCgpIDogMDsKICAgICBpZiAoIWxlbmd0aFRvUmVwbGFjZSAmJiAhbGVu
Z3RoVG9JbnNlcnQpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIFN0cmluZ0J1ZmZlciBidWZm
ZXIobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0luc2VydCk7Ci0gICAgbWVt
Y3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSAKKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRv
UmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKKyAgICBtZW1jcHkoZGF0YSwgY2hhcmFj
dGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwogICAgIGlmIChzdHIpCi0gICAgICAg
IG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsgcG9zaXRpb24sIHN0ci0+Y2hhcmFjdGVycygp
LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNweShidWZmZXIuY2hh
cmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9z
aXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCisgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24s
IHN0ci0+Y2hhcmFjdGVycygpLCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOworICAg
IG1lbWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsg
cG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCiAgICAgICAgIChsZW5ndGgoKSAtIHBvc2l0aW9u
IC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihVQ2hhcikpOwotICAgIHJldHVybiBhZG9wdChi
dWZmZXIpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1l
bnQpCkBAIC03NzIsOCArNzgwLDEwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6cmVwbGEKICAgICBpZiAoIW1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAg
IAotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoIC0gbWF0Y2hDb3VudCArIChtYXRjaENv
dW50ICogcmVwU3RyTGVuZ3RoKSk7Ci0gICAgCisgICAgVUNoYXIqIGRhdGE7CisgICAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGgpLCBkYXRh
KTsKKwogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBpbnQgc3JjU2VnbWVudEVu
ZDsKICAgICBpbnQgc3JjU2VnbWVudExlbmd0aDsKQEAgLTc4MiwxOSArNzkyLDE5IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICAKICAgICB3aGlsZSAoKHNy
Y1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpID49IDApIHsKICAg
ICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7
Ci0gICAgICAgIG1lbWNweShkYXRhLmNoYXJhY3RlcnMoKSArIGRzdE9mZnNldCwgbV9kYXRhICsg
c3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNy
Y1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHNy
Y1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIG1lbWNweShkYXRhLmNoYXJhY3RlcnMoKSArIGRzdE9m
ZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCBy
ZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0
ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAg
ICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0
OwotICAgIG1lbWNweShkYXRhLmNoYXJhY3RlcnMoKSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3Jj
U2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVt
Y3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVu
dExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCi0gICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1Nl
Z21lbnRMZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLmxlbmd0aCgpKSk7CisgICAgQVNT
RVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihuZXdJ
bXBsLT5sZW5ndGgoKSkpOwogCi0gICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVybiBu
ZXdJbXBsOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2Uo
U3RyaW5nSW1wbCogcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbnQpCkBAIC04MjAsNyAr
ODMwLDkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIGlm
ICghbWF0Y2hDb3VudCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCi0gICAgU3RyaW5nQnVm
ZmVyIGRhdGEobV9sZW5ndGggKyBtYXRjaENvdW50ICogKHJlcFN0ckxlbmd0aCAtIHBhdHRlcm5M
ZW5ndGgpKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSAKKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCArIG1hdGNoQ291
bnQgKiAocmVwU3RyTGVuZ3RoIC0gcGF0dGVybkxlbmd0aCksIGRhdGEpOwogICAgIAogICAgIC8v
IENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBpbnQgc3JjU2VnbWVudEVuZDsKQEAgLTgzMCwx
OSArODQyLDE5IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAg
ICAKICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRT
dGFydCkpID49IDApIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgICAgIG1lbWNweShkYXRhLmNoYXJhY3RlcnMoKSArIGRz
dE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAg
ICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIG1lbWNweShkYXRhLmNo
YXJhY3RlcnMoKSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBs
YWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAg
ZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3Jj
U2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0
aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhLmNoYXJhY3Rl
cnMoKSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwog
Ci0gICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gc3RhdGljX2Nhc3Q8
aW50PihkYXRhLmxlbmd0aCgpKSk7CisgICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRM
ZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihuZXdJbXBsLT5sZW5ndGgoKSkpOwogCi0gICAgcmV0
dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBib29sIGVxdWFsKFN0
cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCkluZGV4OiBwbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0xhdGluMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEu
Y3BwCShyZXZpc2lvbiA0NDEzNSkKKysrIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw4IEBAIHZvaWQgVGV4dENvZGVjTGF0aW4x
OjpyZWdpc3RlckNvZGVjcyhUZXgKIAogU3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNv
bnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sJikKIHsKLSAg
ICBTdHJpbmdCdWZmZXIgY2hhcmFjdGVycyhsZW5ndGgpOworICAgIFVDaGFyKiBjaGFyYWN0ZXJz
OworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBjaGFyYWN0ZXJzKTsKIAogICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyBhIGZhc3Qgd2F5IGFu
ZCBzaW11bHRhbmVvdXNseSBkbyBhbiBlZmZpY2llbnQgY2hlY2sgdG8gc2VlIGlmIGl0J3MgYWxs
IEFTQ0lJLgogICAgIHVuc2lnbmVkIGNoYXIgb3JlZCA9IDA7CkBAIC0xMzAsNyArMTMxLDcgQEAg
U3RyaW5nIFRleHRDb2RlY0xhdGluMTo6ZGVjb2RlKGNvbnN0IGNoYQogICAgIH0KIAogICAgIGlm
ICghKG9yZWQgJiAweDgwKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoY2hhcmFjdGVy
cyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBDb252ZXJ0IHRoZSBzbGlnaHRs
eSBzbG93ZXIgd2F5IHdoZW4gdGhlcmUgYXJlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTEzOCw3ICsxMzksNyBAQCBT
dHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhCiAgICAgICAgIGNoYXJhY3Rl
cnNbaV0gPSB0YWJsZVtjXTsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChjaGFy
YWN0ZXJzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgQ1N0cmluZyBlbmNvZGVD
b21wbGV4V2luZG93c0xhdGluMShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKSW5kZXg6IHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjVXNlckRlZmluZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVXNlckRlZmluZWQuY3BwCShyZXZpc2lvbiA0NDEzNSkKKysrIHBsYXRmb3JtL3RleHQvVGV4
dENvZGVjVXNlckRlZmluZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTUgQEAg
dm9pZCBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlYwogCiBTdHJpbmcgVGV4dENv
ZGVjVXNlckRlZmluZWQ6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwg
Ym9vbCwgYm9vbCwgYm9vbCYpCiB7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgpOwor
ICAgIFVDaGFyKiBidWZmZXI7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHNpZ25lZCBjaGFyIGMgPSBieXRlc1tpXTsKICAgICAg
ICAgYnVmZmVyW2ldID0gYyAmIDB4RjdGRjsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjph
ZG9wdChidWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIGVu
Y29kZUNvbXBsZXhVc2VyRGVmaW5lZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKSW5kZXg6IHBsYXRmb3JtL3dpbi9M
YW5ndWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vd2luL0xhbmd1YWdlLmNwcAkocmV2
aXNpb24gNDQxMzUpCisrKyBwbGF0Zm9ybS93aW4vTGFuZ3VhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMSArMzcsMTIgQEAgc3RhdGljIFN0cmluZyBsb2NhbGVJbmZvKExDVFlQRSBsb2Nh
bGVUeQogICAgIGludCBsb2NhbGVDaGFycyA9IEdldExvY2FsZUluZm8obGFuZ0lELCBsb2NhbGVU
eXBlLCAwLCAwKTsKICAgICBpZiAoIWxvY2FsZUNoYXJzKQogICAgICAgICByZXR1cm4gZmFsbGJh
Y2s7CisgICAgVUNoYXIqIGxvY2FsZU5hbWVCdWY7CisgICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBT
dHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobG9jYWxlQ2hhcnMsIGxvY2FsZU5hbWVCdWYpOwog
ICAgIFZlY3RvcjxXQ0hBUj4gbG9jYWxlTmFtZUJ1Zihsb2NhbGVDaGFycyk7Ci0gICAgbG9jYWxl
Q2hhcnMgPSBHZXRMb2NhbGVJbmZvKGxhbmdJRCwgbG9jYWxlVHlwZSwgbG9jYWxlTmFtZUJ1Zi5k
YXRhKCksIGxvY2FsZUNoYXJzKTsKKyAgICBsb2NhbGVDaGFycyA9IEdldExvY2FsZUluZm8obGFu
Z0lELCBsb2NhbGVUeXBlLCBsb2NhbGVOYW1lQnVmLCBsb2NhbGVDaGFycyk7CiAgICAgaWYgKCFs
b2NhbGVDaGFycykKICAgICAgICAgcmV0dXJuIGZhbGxiYWNrOwotICAgIFN0cmluZyBsb2NhbGVO
YW1lID0gU3RyaW5nOjphZG9wdChsb2NhbGVOYW1lQnVmKTsKICAgICBpZiAobG9jYWxlTmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxsYmFjazsKIAo=
</data>
<flag name="review"
          id="15522"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30737</attachid>
            <date>2009-05-28 07:50:15 -0700</date>
            <delta_ts>2009-05-28 19:11:57 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>26001.patch</filename>
            <type>text/plain</type>
            <size>23518</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MjI2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMDktMDUt
MjggIERhdmlkIE1vb3JlICA8ZGF2ZW1vb3JlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgbWFueSBvZiB0aGUgdXNl
cyBvZiBTdHJpbmc6OmFkb3B0KCkgdG8gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKCkuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHRob3NlIHN0cmluZ3MgdG8gdXNlIGFuIGlubGluZWQgYnVmZmVy
IGZvciB0aGVpciBjaGFyYWN0ZXJzLgorCisgICAgICAgICogZG9tL1N0eWxlRWxlbWVudC5jcHA6
CisgICAgICAgIExvb3Agb3ZlciBub2RlcyB0byBwcmVjb21wdXRlIGxlbmd0aCBvZiBzdHJpbmcg
YW5kIHRoZW4gCisgICAgICAgIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIGludG8gdGhlIGFsbG9jYXRl
ZCBpbmxpbmUgYnVmZmVyCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6OnByb2Nlc3Mp
OgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgTG9vcCBvdmVyIG5vZGVzIHRvIHBy
ZWNvbXB1dGUgbGVuZ3RoIG9mIHN0cmluZyBhbmQgdGhlbiAKKyAgICAgICAgd3JpdGUgdGhlIGNo
YXJhY3RlcnMgaW50byB0aGUgYWxsb2NhdGVkIGlubGluZSBidWZmZXIKKyAgICAgICAgKFdlYkNv
cmU6OlRleHQ6Ondob2xlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Ojpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9T
dHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjphcHBlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjp0cnVu
Y2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnJlbW92ZSk6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0J1
aWxkZXI6OnRvU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6bG93ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nSW1wbDo6dXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6c2Vj
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmZvbGRDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
VGV4dENvZGVjTGF0aW4xLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0xhdGluMTo6
ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VzZXJEZWZpbmVkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNvZGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9MYW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsb2Nh
bGVJbmZvKToKKwogMjAwOS0wNS0yOCAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBk
b20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vU3R5bGVFbGVtZW50LmNwcAko
cmV2aXNpb24gNDQyMTIpCisrKyBkb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsMTMgKzYxLDI2IEBAIHZvaWQgU3R5bGVFbGVtZW50Ojpwcm9jZXNzKEVsZW1lbnQqIGUp
CiAgICAgaWYgKCFlIHx8ICFlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxVQ2hhcj4gdGV4dDsKLQotICAgIGZvciAoTm9kZSogYyA9IGUtPmZpcnN0Q2hpbGQo
KTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0g
MDsKKyAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8
fCBjLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fCBjLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkKLSAgICAgICAgICAgIGFwcGVuZCh0ZXh0LCBjLT5u
b2RlVmFsdWUoKSk7CisgICAgICAgICAgICByZXN1bHRMZW5ndGggKz0gYy0+bm9kZVZhbHVlKCku
bGVuZ3RoKCk7CisgICAgfQorICAgIFVDaGFyKiB0ZXh0OworICAgIFN0cmluZyBzaGVldFRleHQg
PSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVzdWx0TGVuZ3RoLCB0ZXh0KTsKKworICAg
IFVDaGFyKiBwID0gdGV4dDsKKyAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7
IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09IE5v
ZGU6OlRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9E
RSB8fCBjLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgeworICAgICAgICAgICAg
U3RyaW5nIG5vZGVWYWx1ZSA9IGMtPm5vZGVWYWx1ZSgpOworICAgICAgICAgICAgaW50IG5vZGVM
ZW5ndGggPSBub2RlVmFsdWUubGVuZ3RoKCk7CisgICAgICAgICAgICBtZW1jcHkocCwgbm9kZVZh
bHVlLmNoYXJhY3RlcnMoKSwgbm9kZUxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAg
ICAgcCArPSBub2RlTGVuZ3RoOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChwID09IHRl
eHQgKyByZXN1bHRMZW5ndGgpOwogCi0gICAgY3JlYXRlU2hlZXQoZSwgU3RyaW5nOjphZG9wdCh0
ZXh0KSk7CisgICAgY3JlYXRlU2hlZXQoZSwgc2hlZXRUZXh0KTsKIH0KIAogdm9pZCBTdHlsZUVs
ZW1lbnQ6OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKSW5kZXg6
IGRvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vVGV4dC5jcHAJKHJldmlzaW9uIDQ0MjI2
KQorKysgZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTcgKzEyNSwzMCBAQCBT
dHJpbmcgVGV4dDo6d2hvbGVUZXh0KCkgY29uc3QKICAgICBjb25zdCBUZXh0KiBzdGFydFRleHQg
PSBlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUodGhpcyk7CiAgICAgY29uc3QgVGV4
dCogZW5kVGV4dCA9IGxhdGVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUodGhpcyk7CiAKLSAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKICAgICBOb2RlKiBvbmVQYXN0RW5kVGV4dCA9IGVuZFRl
eHQtPm5leHRTaWJsaW5nKCk7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKICAgICBm
b3IgKGNvbnN0IE5vZGUqIG4gPSBzdGFydFRleHQ7IG4gIT0gb25lUGFzdEVuZFRleHQ7IG4gPSBu
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghbi0+aXNUZXh0Tm9kZSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGNvbnN0IFRleHQqIHQgPSBzdGF0aWNfY2FzdDxjb25z
dCBUZXh0Kj4obik7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSA9IHQtPmRhdGEoKTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChkYXRhLmNoYXJhY3RlcnMoKSwgZGF0YS5sZW5ndGgoKSk7Cisg
ICAgICAgIHJlc3VsdExlbmd0aCArPSBkYXRhLmxlbmd0aCgpOwogICAgIH0KKyAgICBVQ2hhciog
cmVzdWx0RGF0YTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxp
emVkKHJlc3VsdExlbmd0aCwgcmVzdWx0RGF0YSk7CisgICAgVUNoYXIqIHAgPSByZXN1bHREYXRh
OworICAgIGZvciAoY29uc3QgTm9kZSogbiA9IHN0YXJ0VGV4dDsgbiAhPSBvbmVQYXN0RW5kVGV4
dDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29uc3QgVGV4dCogdCA9IHN0YXRpY19j
YXN0PGNvbnN0IFRleHQqPihuKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhID0gdC0+ZGF0
YSgpOworICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CisgICAgICAgIG1l
bWNweShwLCBkYXRhLmNoYXJhY3RlcnMoKSwgZGF0YUxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
ICAgICAgICBwICs9IGRhdGFMZW5ndGg7CisgICAgfQorICAgIEFTU0VSVChwID09IHJlc3VsdERh
dGEgKyByZXN1bHRMZW5ndGgpOwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnJlcGxhY2VX
aG9sZVRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBFeGNlcHRpb25Db2RlJikKSW5kZXg6IHBs
YXRmb3JtL3RleHQvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS90ZXh0L1N0cmlu
Zy5jcHAJKHJldmlzaW9uIDQ0MjEyKQorKysgcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSwxMCArODUsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBT
dHJpbmcmIHN0cikKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZlcnkgc2luZ2xlIHRpbWUu
CiAgICAgaWYgKHN0ci5tX2ltcGwpIHsKICAgICAgICAgaWYgKG1faW1wbCkgewotICAgICAgICAg
ICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihtX2ltcGwtPmxlbmd0aCgpICsgc3RyLmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBtX2ltcGwtPmNoYXJhY3Rl
cnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICAgICAgbWVt
Y3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX2ltcGwtPmxlbmd0aCgpLCBzdHIuY2hhcmFjdGVy
cygpLCBzdHIubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgICAgIG1faW1wbCA9
IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgICAgICBVQ2hhciogZGF0YTsKKyAg
ICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgICAgICAgICAg
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgc3RyLmxl
bmd0aCgpLCBkYXRhKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLCBtX2ltcGwtPmNoYXJhY3Rl
cnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbWVt
Y3B5KGRhdGEgKyBtX2ltcGwtPmxlbmd0aCgpLCBzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3Ro
KCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIG1faW1wbCA9IG5ld0ltcGwucmVsZWFz
ZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7CiAg
ICAgfQpAQCAtMTAxLDEwICsxMDMsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjaGFyIGMpCiAg
ICAgLy8gb25lIFN0cmluZyBpcyBwb2ludGluZyBhdCB0aGlzIFN0cmluZ0ltcGwsIGJ1dCBldmVu
IHRoZW4gaXQncyBnb2luZyB0byByZXF1aXJlIGEKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2Mg
ZXZlcnkgc2luZ2xlIHRpbWUuCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBTdHJpbmdCdWZm
ZXIgYnVmZmVyKG1faW1wbC0+bGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5j
aGFyYWN0ZXJzKCksIG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGJ1ZmZlclttX2ltcGwtPmxlbmd0aCgpXSA9IGM7Ci0gICAg
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIFVDaGFyKiBk
YXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICAgICAg
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgMSwgZGF0
YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBkYXRhW21faW1wbC0+bGVuZ3RoKCld
ID0gYzsKKyAgICAgICAgbV9pbXBsID0gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSk7CiB9CkBAIC0xMTYsMTAg
KzEyMCwxMiBAQCB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgLy8gb25lIFN0cmlu
ZyBpcyBwb2ludGluZyBhdCB0aGlzIFN0cmluZ0ltcGwsIGJ1dCBldmVuIHRoZW4gaXQncyBnb2lu
ZyB0byByZXF1aXJlIGEKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZlcnkgc2luZ2xlIHRp
bWUuCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKG1faW1w
bC0+bGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIG1f
aW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0g
ICAgICAgIGJ1ZmZlclttX2ltcGwtPmxlbmd0aCgpXSA9IGM7Ci0gICAgICAgIG1faW1wbCA9IFN0
cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIFVDaGFyKiBkYXRhOworICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgMSwgZGF0YSk7CisgICAgICAgIG1l
bWNweShkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVv
ZihVQ2hhcikpOworICAgICAgICBkYXRhW21faW1wbC0+bGVuZ3RoKCldID0gYzsKKyAgICAgICAg
bV9pbXBsID0gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1faW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSk7CiB9CkBAIC0xNzAsMTAgKzE3NiwxMiBAQCB2b2lk
IFN0cmluZzo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0CiAgICAgICAgIHJldHVybjsKIAog
ICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9BcHBlbmQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIo
bGVuZ3RoKCkgKyBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJz
KCksIGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHko
YnVmZmVyLmNoYXJhY3RlcnMoKSArIGxlbmd0aCgpLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0
aFRvQXBwZW5kICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRv
cHQoYnVmZmVyKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3
SW1wbCA9IAorICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgp
ICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCks
IGxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBsZW5ndGgoKSwg
Y2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCAqIHNpemVvZihVQ2hhcikpOworICAg
IG1faW1wbCA9IG5ld0ltcGwucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0cmluZzo6aW5zZXJ0KGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzVG9JbnNlcnQsIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0LCB1
bnNpZ25lZCBwb3NpdGlvbikKQEAgLTE4OSwxMSArMTk3LDEzIEBAIHZvaWQgU3RyaW5nOjppbnNl
cnQoY29uc3QgVUNoYXIqIGNoYXJhY3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGNo
YXJhY3RlcnNUb0luc2VydCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSArIGxl
bmd0aFRvSW5zZXJ0KTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVy
cygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFj
dGVycygpICsgcG9zaXRpb24sIGNoYXJhY3RlcnNUb0luc2VydCwgbGVuZ3RoVG9JbnNlcnQgKiBz
aXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9u
ICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCAobGVuZ3RoKCkgLSBw
b3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9w
dChidWZmZXIpOworICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gCisgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpICsg
bGVuZ3RoVG9JbnNlcnQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBv
c2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgY2hh
cmFjdGVyc1RvSW5zZXJ0LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOworICAgIG1l
bWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9z
aXRpb24sIChsZW5ndGgoKSAtIHBvc2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1faW1w
bCA9IG5ld0ltcGwucmVsZWFzZSgpOwogfQogCiBVQ2hhciBTdHJpbmc6Om9wZXJhdG9yW10odW5z
aWduZWQgaSkgY29uc3QKQEAgLTIyMSw5ICsyMzEsMTAgQEAgdm9pZCBTdHJpbmc6OnRydW5jYXRl
KHVuc2lnbmVkIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIocG9zaXRpb24pOwotICAgIG1l
bWNweShidWZmZXIuY2hhcmFjdGVycygpLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9m
KFVDaGFyKSk7Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKKyAgICBV
Q2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocG9zaXRpb24sIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBj
aGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbV9pbXBsID0gbmV3
SW1wbC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9zaXRp
b24sIGludCBsZW5ndGhUb1JlbW92ZSkKQEAgLTIzNCwxMSArMjQ1LDEzIEBAIHZvaWQgU3RyaW5n
OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIGkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoVG9SZW1vdmUpID4gbGVuZ3RoKCkgLSBwb3NpdGlv
bikKICAgICAgICAgbGVuZ3RoVG9SZW1vdmUgPSBsZW5ndGgoKSAtIHBvc2l0aW9uOwotICAgIFN0
cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSk7Ci0gICAgbWVtY3B5
KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNo
YXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCBjaGFyYWN0
ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVtb3ZlLAorICAgIFVDaGFyKiBkYXRhOworICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgIFN0cmluZ0ltcGw6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSwgZGF0YSk7CisgICAgbWVt
Y3B5KGRhdGEsIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBt
ZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRv
UmVtb3ZlLAogICAgICAgICAobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSAtIHBvc2l0aW9uKSAq
IHNpemVvZihVQ2hhcikpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7
CisgICAgbV9pbXBsID0gbmV3SW1wbC5yZWxlYXNlKCk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN1
YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbikgY29uc3QKSW5kZXg6IHBsYXRmb3Jt
L3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAkocmV2aXNpb24gNDQyMTIpCisrKyBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw5ICs3OSwxMCBAQCBTdHJpbmcgU3RyaW5n
QnVpbGRlcjo6dG9TdHJpbmcoKSBjb25zdAogICAgIGlmIChjb3VudCA9PSAxKQogICAgICAgICBy
ZXR1cm4gbV9zdHJpbmdzWzBdOwogCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihtX3RvdGFsTGVu
Z3RoKTsKKyAgICBVQ2hhciogYnVmZmVyOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobV90b3RhbExlbmd0aCwgYnVmZmVyKTsKIAotICAgIFVDaGFyKiBw
ID0gYnVmZmVyLmNoYXJhY3RlcnMoKTsKKyAgICBVQ2hhciogcCA9IGJ1ZmZlcjsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmcgPSBtX3N0cmluZ3NbaV0uaW1wbCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHJpbmctPmxlbmd0aCgpOyAKQEAgLTg5LDkgKzkwLDkgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6
OnRvU3RyaW5nKCkgY29uc3QKICAgICAgICAgcCArPSBsZW5ndGg7CiAgICAgfQogCi0gICAgQVNT
RVJUKHAgPT0gbV90b3RhbExlbmd0aCArIGJ1ZmZlci5jaGFyYWN0ZXJzKCkpOworICAgIEFTU0VS
VChwID09IG1fdG90YWxMZW5ndGggKyBidWZmZXIpOwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQoYnVmZmVyKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CkluZGV4OiBwbGF0Zm9ybS90
ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5jcHAJKHJldmlzaW9uIDQ0MjEyKQorKysgcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw4IEBAIGJvb2wgU3RyaW5nSW1wbDo6aXNMb3dl
cigpCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogewotICAg
IFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3Ro
LCBkYXRhKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBm
YXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJ
SS4KQEAgLTI3NSwyMyArMjc2LDI0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6bG93ZXIKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAg
aWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZv
ciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJv
cjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEuY2hhcmFj
dGVycygpLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50MzJfdCBy
ZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5n
dGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwotICAgIGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOwot
ICAgIFVuaWNvZGU6OnRvTG93ZXIoZGF0YS5jaGFyYWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1fZGF0
YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIG5ld0lt
cGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOworICAgIFVuaWNvZGU6
OnRvTG93ZXIoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIHJldHVybiBhZG9wdChkYXRh
KTsKKyAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjp1cHBlcigpCiB7Ci0gICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOworICAg
IFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9s
ZW5ndGg7CiAKICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwg
dGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgpAQCAtMzAyLDMyICszMDQsMzQgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcgogICAgICAgICBkYXRhW2ldID0gdG9BU0NJ
SVVwcGVyKGMpOwogICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1
cm4gYWRvcHQoZGF0YSk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogCiAgICAgLy8gRG8gYSBz
bG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hh
cmFjdGVycy4KICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNv
ZGU6OnRvVXBwZXIoZGF0YS5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwg
JmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGEs
IGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJl
YWxMZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gYWRvcHQoZGF0YSk7Ci0gICAgZGF0
YS5yZXNpemUocmVhbExlbmd0aCk7Ci0gICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLmNoYXJhY3Rl
cnMoKSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgcmV0
dXJuIG5ld0ltcGw7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0
aCwgZGF0YSk7CisgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEs
IG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNlY3VyZShVQ2hhciBhQ2hhcikKIHsKLSAg
ICBpbnQgbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAgU3RyaW5nQnVmZmVyIGRhdGEobGVuZ3RoKTsK
KyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9
IG1fbGVuZ3RoOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAg
IGRhdGFbaV0gPSBhQ2hhcjsKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5l
d0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2Uo
KQogewotICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsK
KyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAg
Ly8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJz
IGFyZSBBU0NJSS4KQEAgLTMzOCwxOCArMzQyLDE4IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Zm9sZEMKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAg
ICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEp
OworICAgICAgICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVu
dGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAg
Ym9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShk
YXRhLmNoYXJhY3RlcnMoKSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAg
IGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9k
YXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0g
bGVuZ3RoKQotICAgICAgICByZXR1cm4gYWRvcHQoZGF0YSk7Ci0gICAgZGF0YS5yZXNpemUocmVh
bExlbmd0aCk7Ci0gICAgVW5pY29kZTo6Zm9sZENhc2UoZGF0YS5jaGFyYWN0ZXJzKCksIHJlYWxM
ZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIHJldHVybiBuZXdJbXBs
OworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwor
ICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgs
ICZlcnJvcik7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1
cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXBXaGl0ZVNwYWNlKCkKQEAgLTcyNywxNCArNzMxLDE2
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBpZiAoaSA9
PSBtX2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICBTdHJpbmdCdWZmZXIgZGF0
YShtX2xlbmd0aCk7CisgICAgVUNoYXIqIGRhdGE7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKICAgICBm
b3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgY2ggPSBtX2Rh
dGFbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwog
ICAgICAgICBkYXRhW2ldID0gY2g7CiAgICAgfQotICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAg
ICByZXR1cm4gbmV3SW1wbDsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpyZXBsYWNlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGhUb1JlcGxhY2UsIFN0
cmluZ0ltcGwqIHN0cikKQEAgLTc0NCwxMyArNzUwLDE1IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCA9IHN0ciA/
IHN0ci0+bGVuZ3RoKCkgOiAwOwogICAgIGlmICghbGVuZ3RoVG9SZXBsYWNlICYmICFsZW5ndGhU
b0luc2VydCkKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihs
ZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0KTsKLSAgICBtZW1jcHko
YnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hh
cikpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IAorICAgICAgICBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBs
YWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJz
KCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgaWYgKHN0cikKLSAgICAgICAgbWVt
Y3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgc3RyLT5jaGFyYWN0ZXJzKCksIGxl
bmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0
ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlv
biArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3Ry
LT5jaGFyYWN0ZXJzKCksIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVt
Y3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3Np
dGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBs
ZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgcmV0dXJuIGFkb3B0KGJ1ZmZl
cik7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkK
QEAgLTc3Miw4ICs3ODAsMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpy
ZXBsYQogICAgIGlmICghbWF0Y2hDb3VudCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCi0g
ICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQg
KiByZXBTdHJMZW5ndGgpKTsKLSAgICAKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IG5ld0ltcGwgPSAKKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChtX2xl
bmd0aCAtIG1hdGNoQ291bnQgKyAobWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aCksIGRhdGEpOwor
CiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50RW5kOwog
ICAgIGludCBzcmNTZWdtZW50TGVuZ3RoOwpAQCAtNzgyLDE5ICs3OTIsMTkgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIAogICAgIHdoaWxlICgoc3JjU2Vn
bWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAg
ICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAg
ICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNT
ZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2Vn
bWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2Vn
bWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0
LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAg
ICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0
ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVu
Z3RoOwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgMTsKICAgICB9
CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0g
ICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdt
ZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHko
ZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVu
dExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEubGVuZ3RoKCkpKTsKKyAgICBBU1NFUlQo
ZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KG5ld0ltcGwt
Pmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0lt
cGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJp
bmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkKQEAgLTgyMCw3ICs4MzAs
OSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKCFt
YXRjaENvdW50KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAKLSAgICBTdHJpbmdCdWZmZXIg
ZGF0YShtX2xlbmd0aCArIG1hdGNoQ291bnQgKiAocmVwU3RyTGVuZ3RoIC0gcGF0dGVybkxlbmd0
aCkpOworICAgIFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IAorICAgICAgICBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoICsgbWF0Y2hDb3VudCAq
IChyZXBTdHJMZW5ndGggLSBwYXR0ZXJuTGVuZ3RoKSwgZGF0YSk7CiAgICAgCiAgICAgLy8gQ29u
c3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50RW5kOwpAQCAtODMwLDE5ICs4
NDIsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIAog
ICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0
KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNy
Y1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zm
c2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1Nl
Z21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBk
c3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFj
dGVycygpICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2Vt
ZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RP
ZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdt
ZW50RW5kICsgcGF0dGVybkxlbmd0aDsKICAgICB9CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0g
bV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygp
ICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsg
c3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAg
ICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+
KGRhdGEubGVuZ3RoKCkpKTsKKyAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0
aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KG5ld0ltcGwtPmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4g
YWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIGJvb2wgZXF1YWwoU3RyaW5n
SW1wbCogYSwgU3RyaW5nSW1wbCogYikKSW5kZXg6IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0
aW4xLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJ
KHJldmlzaW9uIDQ0MjEyKQorKysgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDggQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJl
Z2lzdGVyQ29kZWNzKFRleAogCiBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3Qg
Y2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewotICAgIFN0
cmluZ0J1ZmZlciBjaGFyYWN0ZXJzKGxlbmd0aCk7CisgICAgVUNoYXIqIGNoYXJhY3RlcnM7Cisg
ICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNo
YXJhY3RlcnMpOwogCiAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNp
bXVsdGFuZW91c2x5IGRvIGFuIGVmZmljaWVudCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVND
SUkuCiAgICAgdW5zaWduZWQgY2hhciBvcmVkID0gMDsKQEAgLTEzMCw3ICsxMzEsNyBAQCBTdHJp
bmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhCiAgICAgfQogCiAgICAgaWYgKCEo
b3JlZCAmIDB4ODApKQotICAgICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChjaGFyYWN0ZXJzKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIENvbnZlcnQgdGhlIHNsaWdodGx5IHNs
b3dlciB3YXkgd2hlbiB0aGVyZSBhcmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTM4LDcgKzEzOSw3IEBAIFN0cmlu
ZyBUZXh0Q29kZWNMYXRpbjE6OmRlY29kZShjb25zdCBjaGEKICAgICAgICAgY2hhcmFjdGVyc1tp
XSA9IHRhYmxlW2NdOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGNoYXJhY3Rl
cnMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBs
ZXhXaW5kb3dzTGF0aW4xKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBV
bmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQpJbmRleDogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAJKHJldmlzaW9uIDQ0MjEyKQorKysgcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxNSBAQCB2b2lk
IFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjCiAKIFN0cmluZyBUZXh0Q29kZWNV
c2VyRGVmaW5lZDo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29s
LCBib29sLCBib29sJikKIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCk7CisgICAg
VUNoYXIqIGJ1ZmZlcjsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICBi
dWZmZXJbaV0gPSBjICYgMHhGN0ZGOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KGJ1ZmZlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIENTdHJpbmcgZW5jb2Rl
Q29tcGxleFVzZXJEZWZpbmVkKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
LCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQpJbmRleDogcGxhdGZvcm0vd2luL0xhbmd1
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS93aW4vTGFuZ3VhZ2UuY3BwCShyZXZpc2lv
biA0NDIxMikKKysrIHBsYXRmb3JtL3dpbi9MYW5ndWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDExICszNywxMiBAQCBzdGF0aWMgU3RyaW5nIGxvY2FsZUluZm8oTENUWVBFIGxvY2FsZVR5
CiAgICAgaW50IGxvY2FsZUNoYXJzID0gR2V0TG9jYWxlSW5mbyhsYW5nSUQsIGxvY2FsZVR5cGUs
IDAsIDApOwogICAgIGlmICghbG9jYWxlQ2hhcnMpCiAgICAgICAgIHJldHVybiBmYWxsYmFjazsK
KyAgICBVQ2hhciogbG9jYWxlTmFtZUJ1ZjsKKyAgICBTdHJpbmcgbG9jYWxlTmFtZSA9IFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZChsb2NhbGVDaGFycywgbG9jYWxlTmFtZUJ1Zik7CiAgICAg
VmVjdG9yPFdDSEFSPiBsb2NhbGVOYW1lQnVmKGxvY2FsZUNoYXJzKTsKLSAgICBsb2NhbGVDaGFy
cyA9IEdldExvY2FsZUluZm8obGFuZ0lELCBsb2NhbGVUeXBlLCBsb2NhbGVOYW1lQnVmLmRhdGEo
KSwgbG9jYWxlQ2hhcnMpOworICAgIGxvY2FsZUNoYXJzID0gR2V0TG9jYWxlSW5mbyhsYW5nSUQs
IGxvY2FsZVR5cGUsIGxvY2FsZU5hbWVCdWYsIGxvY2FsZUNoYXJzKTsKICAgICBpZiAoIWxvY2Fs
ZUNoYXJzKQogICAgICAgICByZXR1cm4gZmFsbGJhY2s7Ci0gICAgU3RyaW5nIGxvY2FsZU5hbWUg
PSBTdHJpbmc6OmFkb3B0KGxvY2FsZU5hbWVCdWYpOwogICAgIGlmIChsb2NhbGVOYW1lLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbGxiYWNrOwogCg==
</data>
<flag name="review"
          id="15586"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30762</attachid>
            <date>2009-05-28 19:11:57 -0700</date>
            <delta_ts>2009-05-29 10:02:46 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>26001.patch</filename>
            <type>text/plain</type>
            <size>23737</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MjYx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMDktMDUt
MjggIERhdmlkIE1vb3JlICA8c2V0IEVNQUlMX0FERFJFU1MgZW52aXJvbm1lbnQgdmFyaWFibGU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdl
IG1hbnkgb2YgdGhlIHVzZXMgb2YgU3RyaW5nOjphZG9wdCgpIHRvIFN0cmluZzo6Y3JlYXRlVW5p
bml0aWFsaXplZCgpLgorICAgICAgICBUaGlzIGFsbG93cyB0aG9zZSBzdHJpbmdzIHRvIHVzZSBh
biBpbmxpbmVkIGJ1ZmZlciBmb3IgdGhlaXIgY2hhcmFjdGVycy4KKworICAgICAgICAqIGRvbS9T
dHlsZUVsZW1lbnQuY3BwOgorICAgICAgICBMb29wIG92ZXIgbm9kZXMgdG8gcHJlY29tcHV0ZSBs
ZW5ndGggb2Ygc3RyaW5nIGFuZCB0aGVuIAorICAgICAgICB3cml0ZSB0aGUgY2hhcmFjdGVycyBp
bnRvIHRoZSBhbGxvY2F0ZWQgaW5saW5lIGJ1ZmZlcgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVF
bGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAgKiBkb20vVGV4dC5jcHA6CisgICAgICAgIExvb3Ag
b3ZlciBub2RlcyB0byBwcmVjb21wdXRlIGxlbmd0aCBvZiBzdHJpbmcgYW5kIHRoZW4gCisgICAg
ICAgIHdyaXRlIHRoZSBjaGFyYWN0ZXJzIGludG8gdGhlIGFsbG9jYXRlZCBpbmxpbmUgYnVmZmVy
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Ojp3aG9sZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZzo6dHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpyZW1vdmUp
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjp0b1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6Omxvd2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnVwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0ltcGw6OnNlY3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmb2xk
Q2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29kZWNMYXRpbjE6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5l
ZDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vTGFuZ3VhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bG9jYWxlSW5mbyk6CisKIDIwMDktMDUtMjggIERtaXRyeSBUaXRvdiAgPGRp
bWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292
LgpJbmRleDogZG9tL1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1N0eWxlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ0MjYxKQorKysgZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDEzICs2MSwyOCBAQCB2b2lkIFN0eWxlRWxlbWVudDo6cHJvY2VzcyhF
bGVtZW50KiBlKQogICAgIGlmICghZSB8fCAhZS0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWZWN0b3I8VUNoYXI+IHRleHQ7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3Ro
ID0gMDsKKyAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIE5vZGU6Ok5vZGVUeXBlIG5vZGVUeXBlID0gYy0+bm9kZVR5
cGUoKTsKKyAgICAgICAgaWYgKG5vZGVUeXBlID09IE5vZGU6OlRFWFRfTk9ERSB8fCBub2RlVHlw
ZSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgbm9kZVR5cGUgPT0gTm9kZTo6Q09NTUVO
VF9OT0RFKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IGMtPm5vZGVWYWx1ZSgpLmxlbmd0
aCgpOworICAgIH0KKyAgICBVQ2hhciogdGV4dDsKKyAgICBTdHJpbmcgc2hlZXRUZXh0ID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlc3VsdExlbmd0aCwgdGV4dCk7CiAKLSAgICBmb3Ig
KE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAg
ICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpD
T01NRU5UX05PREUpCi0gICAgICAgICAgICBhcHBlbmQodGV4dCwgYy0+bm9kZVZhbHVlKCkpOwor
ICAgIFVDaGFyKiBwID0gdGV4dDsKKyAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7
IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIE5vZGU6Ok5vZGVUeXBlIG5vZGVU
eXBlID0gYy0+bm9kZVR5cGUoKTsKKyAgICAgICAgaWYgKG5vZGVUeXBlID09IE5vZGU6OlRFWFRf
Tk9ERSB8fCBub2RlVHlwZSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgbm9kZVR5cGUg
PT0gTm9kZTo6Q09NTUVOVF9OT0RFKSB7CisgICAgICAgICAgICBTdHJpbmcgbm9kZVZhbHVlID0g
Yy0+bm9kZVZhbHVlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBub2RlTGVuZ3RoID0gbm9kZVZh
bHVlLmxlbmd0aCgpOworICAgICAgICAgICAgbWVtY3B5KHAsIG5vZGVWYWx1ZS5jaGFyYWN0ZXJz
KCksIG5vZGVMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIHAgKz0gbm9kZUxl
bmd0aDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQocCA9PSB0ZXh0ICsgcmVzdWx0TGVu
Z3RoKTsKIAotICAgIGNyZWF0ZVNoZWV0KGUsIFN0cmluZzo6YWRvcHQodGV4dCkpOworICAgIGNy
ZWF0ZVNoZWV0KGUsIHNoZWV0VGV4dCk7CiB9CiAKIHZvaWQgU3R5bGVFbGVtZW50OjpjcmVhdGVT
aGVldChFbGVtZW50KiBlLCBjb25zdCBTdHJpbmcmIHRleHQpCkluZGV4OiBkb20vVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZG9tL1RleHQuY3BwCShyZXZpc2lvbiA0NDI2MSkKKysrIGRvbS9UZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE3ICsxMjUsMzAgQEAgU3RyaW5nIFRleHQ6Ondo
b2xlVGV4dCgpIGNvbnN0CiAgICAgY29uc3QgVGV4dCogc3RhcnRUZXh0ID0gZWFybGllc3RMb2dp
Y2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwogICAgIGNvbnN0IFRleHQqIGVuZFRleHQgPSBs
YXRlc3RMb2dpY2FsbHlBZGphY2VudFRleHROb2RlKHRoaXMpOwogCi0gICAgVmVjdG9yPFVDaGFy
PiByZXN1bHQ7CiAgICAgTm9kZSogb25lUGFzdEVuZFRleHQgPSBlbmRUZXh0LT5uZXh0U2libGlu
ZygpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CiAgICAgZm9yIChjb25zdCBOb2Rl
KiBuID0gc3RhcnRUZXh0OyBuICE9IG9uZVBhc3RFbmRUZXh0OyBuID0gbi0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICBpZiAoIW4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBjb25zdCBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG4pOwog
ICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEgPSB0LT5kYXRhKCk7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCksIGRhdGEubGVuZ3RoKCkpOworICAgICAgICByZXN1bHRM
ZW5ndGggKz0gZGF0YS5sZW5ndGgoKTsKICAgICB9CisgICAgVUNoYXIqIHJlc3VsdERhdGE7Cisg
ICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXN1bHRMZW5n
dGgsIHJlc3VsdERhdGEpOworICAgIFVDaGFyKiBwID0gcmVzdWx0RGF0YTsKKyAgICBmb3IgKGNv
bnN0IE5vZGUqIG4gPSBzdGFydFRleHQ7IG4gIT0gb25lUGFzdEVuZFRleHQ7IG4gPSBuLT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmICghbi0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGNvbnN0IFRleHQqIHQgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0
Kj4obik7CisgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSA9IHQtPmRhdGEoKTsKKyAgICAgICAg
dW5zaWduZWQgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CisgICAgICAgIG1lbWNweShwLCBk
YXRhLmNoYXJhY3RlcnMoKSwgZGF0YUxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBw
ICs9IGRhdGFMZW5ndGg7CisgICAgfQorICAgIEFTU0VSVChwID09IHJlc3VsdERhdGEgKyByZXN1
bHRMZW5ndGgpOwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnJlcGxhY2VXaG9sZVRleHQo
Y29uc3QgU3RyaW5nJiBuZXdUZXh0LCBFeGNlcHRpb25Db2RlJikKSW5kZXg6IHBsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHJl
dmlzaW9uIDQ0MjYxKQorKysgcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxMCArODUsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN0
cikKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZlcnkgc2luZ2xlIHRpbWUuCiAgICAgaWYg
KHN0ci5tX2ltcGwpIHsKICAgICAgICAgaWYgKG1faW1wbCkgewotICAgICAgICAgICAgU3RyaW5n
QnVmZmVyIGJ1ZmZlcihtX2ltcGwtPmxlbmd0aCgpICsgc3RyLmxlbmd0aCgpKTsKLSAgICAgICAg
ICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9p
bXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZl
ci5jaGFyYWN0ZXJzKCkgKyBtX2ltcGwtPmxlbmd0aCgpLCBzdHIuY2hhcmFjdGVycygpLCBzdHIu
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICAgICAgICAgIG1faW1wbCA9IFN0cmluZ0lt
cGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgICAgICBVQ2hhciogZGF0YTsKKyAgICAgICAgICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgICAgICAgICAgU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgc3RyLmxlbmd0aCgpLCBk
YXRhKTsKKyAgICAgICAgICAgIG1lbWNweShkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9p
bXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbWVtY3B5KGRhdGEg
KyBtX2ltcGwtPmxlbmd0aCgpLCBzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpKTsKKyAgICAgICAgICAgIG1faW1wbCA9IG5ld0ltcGwucmVsZWFzZSgpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7CiAgICAgfQpAQCAt
MTAxLDEwICsxMDMsMTIgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjaGFyIGMpCiAgICAgLy8gb25l
IFN0cmluZyBpcyBwb2ludGluZyBhdCB0aGlzIFN0cmluZ0ltcGwsIGJ1dCBldmVuIHRoZW4gaXQn
cyBnb2luZyB0byByZXF1aXJlIGEKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZlcnkgc2lu
Z2xlIHRpbWUuCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVy
KG1faW1wbC0+bGVuZ3RoKCkgKyAxKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJz
KCksIG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KSk7Ci0gICAgICAgIGJ1ZmZlclttX2ltcGwtPmxlbmd0aCgpXSA9IGM7Ci0gICAgICAgIG1faW1w
bCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIFVDaGFyKiBkYXRhOworICAg
ICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICAgICAgU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgMSwgZGF0YSk7CisgICAg
ICAgIG1lbWNweShkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcikpOworICAgICAgICBkYXRhW21faW1wbC0+bGVuZ3RoKCldID0gYzsKKyAg
ICAgICAgbV9pbXBsID0gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
aW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgmYywgMSk7CiB9CkBAIC0xMTYsMTAgKzEyMCwxMiBA
QCB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgLy8gb25lIFN0cmluZyBpcyBwb2lu
dGluZyBhdCB0aGlzIFN0cmluZ0ltcGwsIGJ1dCBldmVuIHRoZW4gaXQncyBnb2luZyB0byByZXF1
aXJlIGEKICAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZlcnkgc2luZ2xlIHRpbWUuCiAgICAg
aWYgKG1faW1wbCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKG1faW1wbC0+bGVuZ3Ro
KCkgKyAxKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIG1faW1wbC0+Y2hh
cmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIGJ1
ZmZlclttX2ltcGwtPmxlbmd0aCgpXSA9IGM7Ci0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6
OmFkb3B0KGJ1ZmZlcik7CisgICAgICAgIFVDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gbmV3SW1wbCA9IAorICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChtX2ltcGwtPmxlbmd0aCgpICsgMSwgZGF0YSk7CisgICAgICAgIG1lbWNweShkYXRh
LCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OworICAgICAgICBkYXRhW21faW1wbC0+bGVuZ3RoKCldID0gYzsKKyAgICAgICAgbV9pbXBsID0g
bmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1faW1wbCA9IFN0cmluZ0lt
cGw6OmNyZWF0ZSgmYywgMSk7CiB9CkBAIC0xNzAsMTAgKzE3NiwxMiBAQCB2b2lkIFN0cmluZzo6
YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChjaGFyYWN0ZXJzVG9BcHBlbmQpOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKCkg
KyBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJh
Y3RlcnMoKSwgbGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNo
YXJhY3RlcnMoKSArIGxlbmd0aCgpLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5k
ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVy
KTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAor
ICAgICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpICsgbGVuZ3Ro
VG9BcHBlbmQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIGxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBsZW5ndGgoKSwgY2hhcmFjdGVy
c1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCAqIHNpemVvZihVQ2hhcikpOworICAgIG1faW1wbCA9
IG5ld0ltcGwucmVsZWFzZSgpOwogfQogCiB2b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzVG9JbnNlcnQsIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0LCB1bnNpZ25lZCBw
b3NpdGlvbikKQEAgLTE4OSwxMSArMTk3LDEzIEBAIHZvaWQgU3RyaW5nOjppbnNlcnQoY29uc3Qg
VUNoYXIqIGNoYXJhY3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGNoYXJhY3RlcnNU
b0luc2VydCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSArIGxlbmd0aFRvSW5z
ZXJ0KTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVycygpLCBwb3Np
dGlvbiAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsg
cG9zaXRpb24sIGNoYXJhY3RlcnNUb0luc2VydCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNo
YXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3Ro
VG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCAobGVuZ3RoKCkgLSBwb3NpdGlvbikg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIp
OworICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gCisg
ICAgICBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpICsgbGVuZ3RoVG9J
bnNlcnQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICog
c2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgY2hhcmFjdGVyc1Rv
SW5zZXJ0LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShkYXRh
ICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9zaXRpb24sIChs
ZW5ndGgoKSAtIHBvc2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1faW1wbCA9IG5ld0lt
cGwucmVsZWFzZSgpOwogfQogCiBVQ2hhciBTdHJpbmc6Om9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QKQEAgLTIyMSw5ICsyMzEsMTAgQEAgdm9pZCBTdHJpbmc6OnRydW5jYXRlKHVuc2lnbmVk
IHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIocG9zaXRpb24pOwotICAgIG1lbWNweShidWZm
ZXIuY2hhcmFjdGVycygpLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7
Ci0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKKyAgICBVQ2hhciogZGF0
YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQocG9zaXRpb24sIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJz
KCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbV9pbXBsID0gbmV3SW1wbC5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgU3RyaW5nOjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24sIGludCBs
ZW5ndGhUb1JlbW92ZSkKQEAgLTIzNCwxMSArMjQ1LDEzIEBAIHZvaWQgU3RyaW5nOjpyZW1vdmUo
dW5zaWduZWQgcG9zaXRpb24sIGkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obGVuZ3RoVG9SZW1vdmUpID4gbGVuZ3RoKCkgLSBwb3NpdGlvbikKICAgICAg
ICAgbGVuZ3RoVG9SZW1vdmUgPSBsZW5ndGgoKSAtIHBvc2l0aW9uOwotICAgIFN0cmluZ0J1ZmZl
ciBidWZmZXIobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5j
aGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzKCkgKyBw
b3NpdGlvbiArIGxlbmd0aFRvUmVtb3ZlLAorICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gCisgICAgICAgIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSwgZGF0YSk7CisgICAgbWVtY3B5KGRhdGEs
IGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0
YSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVtb3ZlLAog
ICAgICAgICAobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSAtIHBvc2l0aW9uKSAqIHNpemVvZihV
Q2hhcikpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KGJ1ZmZlcik7CisgICAgbV9p
bXBsID0gbmV3SW1wbC5yZWxlYXNlKCk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1
bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbikgY29uc3QKSW5kZXg6IHBsYXRmb3JtL3RleHQvU3Ry
aW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVy
LmNwcAkocmV2aXNpb24gNDQyNjEpCisrKyBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw5ICs3OSwxMCBAQCBTdHJpbmcgU3RyaW5nQnVpbGRlcjo6
dG9TdHJpbmcoKSBjb25zdAogICAgIGlmIChjb3VudCA9PSAxKQogICAgICAgICByZXR1cm4gbV9z
dHJpbmdzWzBdOwogCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihtX3RvdGFsTGVuZ3RoKTsKKyAg
ICBVQ2hhciogYnVmZmVyOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobV90b3RhbExlbmd0aCwgYnVmZmVyKTsKIAotICAgIFVDaGFyKiBwID0gYnVmZmVy
LmNoYXJhY3RlcnMoKTsKKyAgICBVQ2hhciogcCA9IGJ1ZmZlcjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBt
X3N0cmluZ3NbaV0uaW1wbCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxl
bmd0aCgpOyAKQEAgLTg5LDkgKzkwLDkgQEAgU3RyaW5nIFN0cmluZ0J1aWxkZXI6OnRvU3RyaW5n
KCkgY29uc3QKICAgICAgICAgcCArPSBsZW5ndGg7CiAgICAgfQogCi0gICAgQVNTRVJUKHAgPT0g
bV90b3RhbExlbmd0aCArIGJ1ZmZlci5jaGFyYWN0ZXJzKCkpOworICAgIEFTU0VSVChwID09IG1f
dG90YWxMZW5ndGggKyBidWZmZXIpOwogCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVy
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CkluZGV4OiBwbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJl
dmlzaW9uIDQ0MjYxKQorKysgcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY0LDcgKzI2NCw4IEBAIGJvb2wgU3RyaW5nSW1wbDo6aXNMb3dlcigpCiAKIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIoKQogewotICAgIFN0cmluZ0J1
ZmZlciBkYXRhKG1fbGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsK
ICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9v
cCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KQEAgLTI3
NSwyMyArMjc2LDI0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6bG93ZXIK
ICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3Jl
ZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAgICByZXR1cm4g
bmV3SW1wbDsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0
aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEuY2hhcmFjdGVycygpLCBs
ZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50MzJfdCByZWFsTGVuZ3Ro
ID0gVW5pY29kZTo6dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJv
cik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGFkb3B0KGRhdGEpOwotICAgIGRhdGEucmVzaXplKHJlYWxMZW5ndGgpOwotICAgIFVuaWNv
ZGU6OnRvTG93ZXIoZGF0YS5jaGFyYWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5n
dGgsICZlcnJvcik7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOworICAgIFVuaWNvZGU6OnRvTG93ZXIo
ZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJy
b3IpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAgICBy
ZXR1cm4gbmV3SW1wbDsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1
cHBlcigpCiB7Ci0gICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOworICAgIFVDaGFyKiBk
YXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobV9sZW5ndGgsIGRhdGEpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAK
ICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJh
Y3RlcnMgYXJlIEFTQ0lJLgpAQCAtMzAyLDMyICszMDQsMzQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjp1cHBlcgogICAgICAgICBkYXRhW2ldID0gdG9BU0NJSVVwcGVyKGMp
OwogICAgIH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1w
bGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4K
ICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBw
ZXIoZGF0YS5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsK
KyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGEsIGxlbmd0aCwg
bV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGgg
PT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gYWRvcHQoZGF0YSk7Ci0gICAgZGF0YS5yZXNpemUo
cmVhbExlbmd0aCk7Ci0gICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLmNoYXJhY3RlcnMoKSwgcmVh
bExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG5ld0lt
cGw7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7
CisgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3Ro
LCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgcmV0
dXJuIGFkb3B0KGRhdGEpOworICAgIHJldHVybiBuZXdJbXBsOwogfQogCiBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNlY3VyZShVQ2hhciBhQ2hhcikKIHsKLSAgICBpbnQgbGVu
Z3RoID0gbV9sZW5ndGg7Ci0gICAgU3RyaW5nQnVmZmVyIGRhdGEobGVuZ3RoKTsKKyAgICBVQ2hh
ciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3Ro
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIGRhdGFbaV0g
PSBhQ2hhcjsKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9
CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogewotICAg
IFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3Ro
LCBkYXRhKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCiAgICAgLy8gRG8gYSBm
YXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJ
SS4KQEAgLTMzOCwxOCArMzQyLDE4IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6Zm9sZEMKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CiAgICAg
aWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOworICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZv
ciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJv
cjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3Qg
cmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xl
bmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQot
ICAgICAgICByZXR1cm4gYWRvcHQoZGF0YSk7Ci0gICAgZGF0YS5yZXNpemUocmVhbExlbmd0aCk7
Ci0gICAgVW5pY29kZTo6Zm9sZENhc2UoZGF0YS5jaGFyYWN0ZXJzKCksIHJlYWxMZW5ndGgsIG1f
ZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOworICAgIFVuaWNv
ZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7
CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6c3RyaXBXaGl0ZVNwYWNlKCkKQEAgLTcyNywxNCArNzMxLDE2IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBpZiAoaSA9PSBtX2xlbmd0
aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKLSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0
aCk7CisgICAgVUNoYXIqIGRhdGE7CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKICAgICBmb3IgKGkgPSAw
OyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CiAg
ICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwogICAgICAgICBk
YXRhW2ldID0gY2g7CiAgICAgfQotICAgIHJldHVybiBhZG9wdChkYXRhKTsKKyAgICByZXR1cm4g
bmV3SW1wbDsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNl
KHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGhUb1JlcGxhY2UsIFN0cmluZ0ltcGwq
IHN0cikKQEAgLTc0NCwxMyArNzUwLDE1IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6cmVwbGEKICAgICB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCA9IHN0ciA/IHN0ci0+bGVu
Z3RoKCkgOiAwOwogICAgIGlmICghbGVuZ3RoVG9SZXBsYWNlICYmICFsZW5ndGhUb0luc2VydCkK
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSAt
IGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0KTsKLSAgICBtZW1jcHkoYnVmZmVyLmNo
YXJhY3RlcnMoKSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAg
IFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAg
ICAgICBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVu
Z3RoVG9JbnNlcnQsIGRhdGEpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0
aW9uICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgaWYgKHN0cikKLSAgICAgICAgbWVtY3B5KGJ1ZmZl
ci5jaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgc3RyLT5jaGFyYWN0ZXJzKCksIGxlbmd0aFRvSW5z
ZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBw
b3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0
aFRvUmVwbGFjZSwKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5jaGFyYWN0
ZXJzKCksIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGRhdGEg
KyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxl
bmd0aFRvUmVwbGFjZSwKICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1Jl
cGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgcmV0dXJuIGFkb3B0KGJ1ZmZlcik7CisgICAg
cmV0dXJuIG5ld0ltcGw7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkKQEAgLTc3Miw4
ICs3ODAsMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAg
IGlmICghbWF0Y2hDb3VudCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCi0gICAgU3RyaW5n
QnVmZmVyIGRhdGEobV9sZW5ndGggLSBtYXRjaENvdW50ICsgKG1hdGNoQ291bnQgKiByZXBTdHJM
ZW5ndGgpKTsKLSAgICAKKyAgICBVQ2hhciogZGF0YTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IG5ld0ltcGwgPSAKKyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCAtIG1h
dGNoQ291bnQgKyAobWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aCksIGRhdGEpOworCiAgICAgLy8g
Q29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50RW5kOwogICAgIGludCBz
cmNTZWdtZW50TGVuZ3RoOwpAQCAtNzgyLDE5ICs3OTIsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIAogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9
IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgPj0gMCkgewogICAgICAgICBzcmNTZWdt
ZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVt
Y3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3Rh
cnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0
aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0
aDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCByZXBsYWNl
bWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVt
Y3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAq
IHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwogICAg
ICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgMTsKICAgICB9CiAKICAgICBz
cmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5
KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQs
IHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0YSArIGRz
dE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CiAKLSAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9
PSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEubGVuZ3RoKCkpKTsKKyAgICBBU1NFUlQoZHN0T2Zmc2V0
ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KG5ld0ltcGwtPmxlbmd0aCgp
KSk7CiAKLSAgICByZXR1cm4gYWRvcHQoZGF0YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBw
YXR0ZXJuLCBTdHJpbmdJbXBsKiByZXBsYWNlbWVudCkKQEAgLTgyMCw3ICs4MzAsOSBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKCFtYXRjaENvdW50
KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAKLSAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xl
bmd0aCArIG1hdGNoQ291bnQgKiAocmVwU3RyTGVuZ3RoIC0gcGF0dGVybkxlbmd0aCkpOworICAg
IFVDaGFyKiBkYXRhOworICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IAorICAg
ICAgICBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoICsgbWF0Y2hDb3VudCAqIChyZXBTdHJM
ZW5ndGggLSBwYXR0ZXJuTGVuZ3RoKSwgZGF0YSk7CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IHRo
ZSBuZXcgZGF0YQogICAgIGludCBzcmNTZWdtZW50RW5kOwpAQCAtODMwLDE5ICs4NDIsMTkgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIAogICAgIHdoaWxl
ICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgPj0gMCkg
ewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRT
dGFydDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zmc2V0LCBtX2Rh
dGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsK
KyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFy
dCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQg
Kz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsg
ZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2Rh
dGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0g
cmVwU3RyTGVuZ3RoOwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsg
cGF0dGVybkxlbmd0aDsKICAgICB9CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGgg
LSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5KGRhdGEuY2hhcmFjdGVycygpICsgZHN0T2Zm
c2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVu
dFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBBU1NFUlQo
ZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEubGVu
Z3RoKCkpKTsKKyAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBzdGF0
aWNfY2FzdDxpbnQ+KG5ld0ltcGwtPmxlbmd0aCgpKSk7CiAKLSAgICByZXR1cm4gYWRvcHQoZGF0
YSk7CisgICAgcmV0dXJuIG5ld0ltcGw7CiB9CiAKIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogYSwg
U3RyaW5nSW1wbCogYikKSW5kZXg6IHBsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAJKHJldmlzaW9u
IDQ0MjYxKQorKysgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTksNyArMTE5LDggQEAgdm9pZCBUZXh0Q29kZWNMYXRpbjE6OnJlZ2lzdGVyQ29k
ZWNzKFRleAogCiBTdHJpbmcgVGV4dENvZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhciogYnl0
ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wsIGJvb2wsIGJvb2wmKQogewotICAgIFN0cmluZ0J1ZmZl
ciBjaGFyYWN0ZXJzKGxlbmd0aCk7CisgICAgVUNoYXIqIGNoYXJhY3RlcnM7CisgICAgU3RyaW5n
IHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMp
OwogCiAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIGEgZmFzdCB3YXkgYW5kIHNpbXVsdGFuZW91
c2x5IGRvIGFuIGVmZmljaWVudCBjaGVjayB0byBzZWUgaWYgaXQncyBhbGwgQVNDSUkuCiAgICAg
dW5zaWduZWQgY2hhciBvcmVkID0gMDsKQEAgLTEzMCw3ICsxMzEsNyBAQCBTdHJpbmcgVGV4dENv
ZGVjTGF0aW4xOjpkZWNvZGUoY29uc3QgY2hhCiAgICAgfQogCiAgICAgaWYgKCEob3JlZCAmIDB4
ODApKQotICAgICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChjaGFyYWN0ZXJzKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIENvbnZlcnQgdGhlIHNsaWdodGx5IHNsb3dlciB3YXkg
d2hlbiB0aGVyZSBhcmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtMTM4LDcgKzEzOSw3IEBAIFN0cmluZyBUZXh0Q29k
ZWNMYXRpbjE6OmRlY29kZShjb25zdCBjaGEKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHRhYmxl
W2NdOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGNoYXJhY3RlcnMpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhXaW5kb3dz
TGF0aW4xKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJs
ZUhhbmRsaW5nIGhhbmRsaW5nKQpJbmRleDogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5l
ZC5jcHAJKHJldmlzaW9uIDQ0MjYxKQorKysgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVm
aW5lZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxNSBAQCB2b2lkIFRleHRDb2Rl
Y1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjCiAKIFN0cmluZyBUZXh0Q29kZWNVc2VyRGVmaW5l
ZDo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBi
b29sJikKIHsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCk7CisgICAgVUNoYXIqIGJ1
ZmZlcjsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOwogICAgICAgICBidWZmZXJbaV0g
PSBjICYgMHhGN0ZGOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIENTdHJpbmcgZW5jb2RlQ29tcGxleFVz
ZXJEZWZpbmVkKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nIGhhbmRsaW5nKQpJbmRleDogcGxhdGZvcm0vd2luL0xhbmd1YWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS93aW4vTGFuZ3VhZ2UuY3BwCShyZXZpc2lvbiA0NDI2MSkK
KysrIHBsYXRmb3JtL3dpbi9MYW5ndWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICsz
NywxMiBAQCBzdGF0aWMgU3RyaW5nIGxvY2FsZUluZm8oTENUWVBFIGxvY2FsZVR5CiAgICAgaW50
IGxvY2FsZUNoYXJzID0gR2V0TG9jYWxlSW5mbyhsYW5nSUQsIGxvY2FsZVR5cGUsIDAsIDApOwog
ICAgIGlmICghbG9jYWxlQ2hhcnMpCiAgICAgICAgIHJldHVybiBmYWxsYmFjazsKKyAgICBVQ2hh
ciogbG9jYWxlTmFtZUJ1ZjsKKyAgICBTdHJpbmcgbG9jYWxlTmFtZSA9IFN0cmluZzo6Y3JlYXRl
VW5pbml0aWFsaXplZChsb2NhbGVDaGFycywgbG9jYWxlTmFtZUJ1Zik7CiAgICAgVmVjdG9yPFdD
SEFSPiBsb2NhbGVOYW1lQnVmKGxvY2FsZUNoYXJzKTsKLSAgICBsb2NhbGVDaGFycyA9IEdldExv
Y2FsZUluZm8obGFuZ0lELCBsb2NhbGVUeXBlLCBsb2NhbGVOYW1lQnVmLmRhdGEoKSwgbG9jYWxl
Q2hhcnMpOworICAgIGxvY2FsZUNoYXJzID0gR2V0TG9jYWxlSW5mbyhsYW5nSUQsIGxvY2FsZVR5
cGUsIGxvY2FsZU5hbWVCdWYsIGxvY2FsZUNoYXJzKTsKICAgICBpZiAoIWxvY2FsZUNoYXJzKQog
ICAgICAgICByZXR1cm4gZmFsbGJhY2s7Ci0gICAgU3RyaW5nIGxvY2FsZU5hbWUgPSBTdHJpbmc6
OmFkb3B0KGxvY2FsZU5hbWVCdWYpOwogICAgIGlmIChsb2NhbGVOYW1lLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbGxiYWNrOwogCg==
</data>
<flag name="review"
          id="15605"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>