<?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>8009</bug_id>
          
          <creation_ts>2006-03-27 02:55:29 -0800</creation_ts>
          <short_desc>Drag DeprecatedString 3 steps closer to its grave...</short_desc>
          <delta_ts>2006-03-28 11:04:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>37652</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 02:55:29 -0800</bug_when>
    <thetext>This patch replaces a whole bunch more DeprecatedString with String.  It does this by adding String::number() and String::sprintf().

This also fixes a windows bug found in DeprecatedString::sprintf when moving to String::sprintf()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37653</commentid>
    <comment_count>1</comment_count>
      <attachid>7329</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 02:56:21 -0800</bug_when>
    <thetext>Created attachment 7329
Replace a bunch more DeprecatedString with String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37711</commentid>
    <comment_count>2</comment_count>
      <attachid>7329</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-27 17:19:02 -0800</bug_when>
    <thetext>Comment on attachment 7329
Replace a bunch more DeprecatedString with String

Why the limit of 2048 on buffer size of sprintf on WIN_OS?

+    Vector&lt;char&gt; buffer;

Should use Vector&lt;char, 256&gt; for better performance here.

I think that String&apos;s sprintf should return a String instead of being a function that mutates an existing string. Maybe it should be a free function called StringPrintF or StringFormat?

Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37715</commentid>
    <comment_count>3</comment_count>
      <attachid>7343</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 20:01:28 -0800</bug_when>
    <thetext>Created attachment 7343
Bigger patch, ultra slow however.

So I ended up making a couple more mods to my local tree, which I now regret.  Those mods are in this patch.  The previous patch had two crashers, which I later discovered and have since fixed.  This patch however changes QTextStream over to use String instead of DeprecatedString, and in the process unveils how absolutely awful StringImpl::append() is.  StringImpl::append() allocates a new buffer of the appropriate size eery time.  DeprecatedString::append() woudl allocate a buffer which was sometimes larger than necessary to amortize the cost of the malloc over several append calls.  String is going to need to have something similar.  I expect that Vector already has some of this logic.  I wonder how well it could work to have StringImpl just hold a Vector&lt;QChar&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37716</commentid>
    <comment_count>4</comment_count>
      <attachid>7344</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 20:02:51 -0800</bug_when>
    <thetext>Created attachment 7344
Bigger patch, ultra slow however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37740</commentid>
    <comment_count>5</comment_count>
      <attachid>7350</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 23:31:23 -0800</bug_when>
    <thetext>Created attachment 7350
Addresses darin&apos;s comments.

This patch fixes a couple crashers in the first patch, and addresses darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37741</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 23:34:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 7329 [edit])
&gt; Why the limit of 2048 on buffer size of sprintf on WIN_OS?

As far as I can tell I need an arbitrary limit to prevent infinite looping.  vsnprintf always returns -1, no matter what the error.
 
&gt; +    Vector&lt;char&gt; buffer;
&gt; 
&gt; Should use Vector&lt;char, 256&gt; for better performance here.

I don&apos;t see that to be true.  Vector&lt;char&gt; makes an empty buffer.  The very next line I call buffer.resize(result + 1); so I don&apos;t see why I would want to allocate a 256 char buffer just to throw it away.  But maybe I&apos;m missing something simple here.

&gt; I think that String&apos;s sprintf should return a String instead of being a
&gt; function that mutates an existing string. Maybe it should be a free function
&gt; called StringPrintF or StringFormat?

I changed it to be a static function.  That seems to work just as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37742</commentid>
    <comment_count>7</comment_count>
      <attachid>7351</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-03-27 23:39:25 -0800</bug_when>
    <thetext>Created attachment 7351
Addresses darin&apos;s comments.

Wrong patch before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37784</commentid>
    <comment_count>8</comment_count>
      <attachid>7351</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-28 10:16:22 -0800</bug_when>
    <thetext>Comment on attachment 7351
Addresses darin&apos;s comments.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7329</attachid>
            <date>2006-03-27 02:56:21 -0800</date>
            <delta_ts>2006-03-27 23:31:23 -0800</delta_ts>
            <desc>Replace a bunch more DeprecatedString with String</desc>
            <filename>deprecated.patch</filename>
            <type>text/plain</type>
            <size>90939</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCShyZXZpc2lvbiAxMzQ4MikKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODA5LDEwICsxODA5LDEwIEBAIEpTVmFsdWUgKkpTSFRNTEVs
ZW1lbnQ6OmFuY2hvckdldHRlcihFeGUKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQog
ICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSArICI6IiAr
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5wYXRo
KCkpOwotICAgICAgICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0
cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRl
ZFN0cmluZygpKS5wb3J0KCkpKTsKICAgICAgICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAg
IHJldHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5w
cm90b2NvbCgpKyI6Iik7CiAgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAgICAgICByZXR1
cm4ganNTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkucXVlcnko
KSk7CiAgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
YW5jaG9yLm5hbWUoKSk7CkBAIC0xOTM2LDEwICsxOTM2LDEwIEBAIEpTVmFsdWUgKkpTSFRNTEVs
ZW1lbnQ6OmFyZWFHZXR0ZXIoRXhlY1MKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQog
ICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSArICI6IiAr
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcmVhUGF0aE5hbWU6ICAgICAgICByZXR1
cm4ganNTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnBhdGgoKSk7
Ci0gICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSku
cG9ydCgpKSk7CisgICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKFN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5w
b3J0KCkpKTsKICAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4ganNTdHJp
bmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
ICAgICAgICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4ganNTdHJpbmcoS1VSTChh
cmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnF1ZXJ5KCkpOwogICAgICAgICBjYXNlIEFy
ZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CkluZGV4
OiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pz
X3dpbmRvdy5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMywxMCArMTIyMywxMCBAQCBib29sIFdpbmRvdzo6aXNT
YWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAgICAgICAgIHByaW50ZigiVW5zYWZlIEphdmFTY3Jp
cHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVS
TCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1l
bnQtPlVSTCgpLmxhdGluMSgpLCBvcmlnaW5Eb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwogICAg
IH0KLSAgICBEZXByZWNhdGVkU3RyaW5nIG1lc3NhZ2U7CisgICAgU3RyaW5nIG1lc3NhZ2U7CiAg
ICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBm
cmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0
Y2guXG4iLCAKICAgICAgICAgICAgICAgICAgIHRhcmdldERvY3VtZW50LT5VUkwoKS5sYXRpbjEo
KSwgb3JpZ2luRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpKTsKLSAgICB0YXJnZXRQYXJ0LT5hZGRN
ZXNzYWdlVG9Db25zb2xlKFN0cmluZyhtZXNzYWdlKSwgMSwgU3RyaW5nKCkpOyAvL2ZpeG1lOiBw
cm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNldXJsCisgICAgdGFyZ2V0UGFydC0+
YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCAxLCBTdHJpbmcoKSk7IC8vZml4bWU6IHByb3Zp
ZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2V1cmwKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTEyODUsMTAgKzEyODUsMTAgQEAgYm9vbCBXaW5kb3c6OmlzU2FmZVNjcmlwdChFeGVj
U3RhdGUgKmV4ZQogICAgICAgcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFj
Y2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11
c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICB0aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgp
LCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwogICB9Ci0gIERlcHJlY2F0ZWRTdHJpbmcg
bWVzc2FnZTsKKyAgU3RyaW5nIG1lc3NhZ2U7CiAgIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEph
dmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3
aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgICAgICB0
aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpLCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkp
OwotICBtX2ZyYW1lLT5hZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyhtZXNzYWdlKSwgMSwgU3Ry
aW5nKCkpOworICBtX2ZyYW1lLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFN0cmlu
ZygpKTsKICAgCiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIwNzgsNyArMjA3OCw3IEBAIEpTVmFs
dWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgICAvLyBCbGVoLgogICAgIFVT
dHJpbmcgc3RyID0gdXJsLmhvc3QoKTsKICAgICBpZiAodXJsLnBvcnQoKSkKLSAgICAgICAgICAg
IHN0ciArPSAiOiIgKyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgpKTsK
KyAgICAgICAgc3RyICs9ICI6IiArIFN0cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSk7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKHN0cik7CiAgIH0KICAgY2FzZSBIb3N0bmFtZToKQEAgLTIwOTEs
NyArMjA5MSw3IEBAIEpTVmFsdWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAg
Y2FzZSBQYXRobmFtZToKICAgICByZXR1cm4ganNTdHJpbmcodXJsLnBhdGgoKS5pc0VtcHR5KCkg
PyAiLyIgOiB1cmwucGF0aCgpKTsKICAgY2FzZSBQb3J0OgotICAgIHJldHVybiBqc1N0cmluZyh1
cmwucG9ydCgpID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSkgOiAi
Iik7CisgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcigoaW50
KXVybC5wb3J0KCkpIDogIiIpOwogICBjYXNlIFByb3RvY29sOgogICAgIHJldHVybiBqc1N0cmlu
Zyh1cmwucHJvdG9jb2woKSArICI6Iik7CiAgIGNhc2UgU2VhcmNoOgpJbmRleDogcGxhdGZvcm0v
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TdHJpbmcuY3BwCShyZXZpc2lvbiAx
MzQ4MikKKysrIHBsYXRmb3JtL1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8a2pzL2lkZW50
aWZpZXIuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIApAQCAtMjA5LDYgKzIxMCw3MiBAQCBEZXByZWNhdGVkU3RyaW5nIFN0cmluZzo6ZGVw
cmVjYXRlZFN0cmluCiAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcobV9pbXBsLT5zLCBtX2lt
cGwtPmwpOwogfQogCitTdHJpbmcmIFN0cmluZzo6c3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsK
KworI2lmIFBMQVRGT1JNKFdJTl9PUykKKyAgICAvLyBXaW5kb3dzIHZzcHJpbnRmIGRvZXMgbm90
IHJldHVybiB0aGUgZXhwZWN0ZWQgc2l6ZSBvbiBvdmVyZmxvdworICAgIC8vIFNvIHdlIGp1c3Qg
aGF2ZSB0byBrZWVwIGxvb3BpbmcgdW50aWwgb3VyIHZzcHJpbnRmIGNhbGwgd29ya3MhCisgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOworICAgIGRvIHsK
KyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZl
ci5zaXplKCkgKiAyKTsKKyAgICAgICAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7CisgICAgfSB3aGlsZSAocmVzdWx0IDwgMCAm
JiAoYnVmZmVyLnNpemUoKSAqIDIpIDwgMjA0OCk7CisgICAgaWYgKHJlc3VsdCA8PSAwKSB7Cisg
ICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtdHB5KCk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgdW5zaWduZWQgbGVuID0gcmVzdWx0OworI2Vsc2UKKyAgICAvLyBEbyB0
aGUgZm9ybWF0IG9uY2UgdG8gZ2V0IHRoZSBsZW5ndGguCisgICAgY2hhciBjaDsKKyAgICBpbnQg
cmVzdWx0ID0gdnNucHJpbnRmKCZjaCwgMSwgZm9ybWF0LCBhcmdzKTsKKyAgICBpZiAocmVzdWx0
IDw9IDApIHsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKyAgICB1bnNpZ25lZCBsZW4gPSByZXN1bHQ7CisgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKHJlc3VsdCk7CisgICAgCisgICAg
Ly8gTm93IGRvIHRoZSBmb3JtYXR0aW5nIGFnYWluLCBndWFyYW50ZWVkIHRvIGZpdC4KKyAgICB2
c25wcmludGYoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgZm9ybWF0LCBhcmdzKTsKKyNl
bmRpZgorICAgIAorICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKGJ1ZmZlci5kYXRhKCksIGxl
bik7CisgICAgCisgICAgcmV0dXJuICp0aGlzOworfQorCitTdHJpbmcgU3RyaW5nOjpudW1iZXIo
aW50IG4pCit7CisgICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIiVkIiwgbik7Cit9CisKK1N0
cmluZyBTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBuKQoreworICAgIHJldHVybiBTdHJpbmcoKS5z
cHJpbnRmKCIldSIsIG4pOworfQorCitTdHJpbmcgU3RyaW5nOjpudW1iZXIobG9uZyBuKQorewor
ICAgIHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCIlbGQiLCBuKTsKK30KKworU3RyaW5nIFN0cmlu
Zzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCkuc3ByaW50
ZigiJWx1Iiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6Om51bWJlcihkb3VibGUgbikKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiJS42bGciLCBuKTsKK30KKwogaW50IFN0cmluZzo6
dG9JbnQoYm9vbCogb2spIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpIHsKSW5kZXg6IHBsYXRm
b3JtL21hYy9LZXlFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvS2V5RXZl
bnRNYWMubW0JKHJldmlzaW9uIDEzNDgyKQorKysgcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgc3RhdGljIFN0cmluZyBrZXlJZGVu
dGlmaWVyRm9yS2V5RXZlbnQoTgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2Ug
c29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIHZlbmRvci1hcmVhIFVuaWNvZGUgdmFsdWVzIGZvciB0
aGUgYWJvdmUga2V5cy4KICAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3QgZmFsbCB0aHJvdWdo
IHRvIHRoZSBkZWZhdWx0LgogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmcoKS5zcHJpbnRmKCJVKyUwNlgiLCB0b3VwcGVyKGMpKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJVKyUwNlgiLCB0b3VwcGVyKGMpKTsKICAgICB9
CiB9CiAKSW5kZXg6IHBsYXRmb3JtL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vQ29s
b3IuaAkocmV2aXNpb24gMTM0ODIpCisrKyBwbGF0Zm9ybS9Db2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgc3RydWN0IENHQ29sb3IgKkNHQ29sb3JSZWY7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU3RyaW5nOworCiB0eXBlZGVmIHVuc2lnbmVk
IGludCBSR0JBMzI7ICAgICAgICAgICAgICAgICAgICAgIC8vIFJHQkEgcXVhZHJ1cGxldAogCiBS
R0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKQEAgLTUxLDEwICs1MywxMCBAQCBw
dWJsaWM6CiAgICAgQ29sb3IoUkdCQTMyIGNvbCkgOiBjb2xvcihjb2wpLCB2YWxpZCh0cnVlKSB7
IH0KICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKSA6IGNvbG9yKG1ha2VSR0IociwgZywg
YikpLCB2YWxpZCh0cnVlKSB7IH0KICAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSkgOiBjb2xvcihtYWtlUkdCQShyLCBnLCBiLCBhKSksIHZhbGlkKHRydWUpIHsgfQotICAgIGV4
cGxpY2l0IENvbG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJik7CisgICAgZXhwbGljaXQgQ29s
b3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwogICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IGNo
YXIgKik7CiAgICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgU3Ry
aW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWVkQ29sb3IoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdmFsaWQ7IH0K
SW5kZXg6IHBsYXRmb3JtL0F0b21pY1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0F0
b21pY1N0cmluZy5oCShyZXZpc2lvbiAxMzQ4MikKKysrIHBsYXRmb3JtL0F0b21pY1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGVuZHNX
aXRoKGNvbnN0IEF0b21pY1N0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29u
c3QKICAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGgocy5kb21TdHJpbmcoKSwgY2Fz
ZVNlbnNpdGl2ZSk7IH0KICAgICAKLSAgICBpbnQgdG9JbnQoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy50b0ludCgpOyB9CisgICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcudG9JbnQob2spOyB9CiAgICAgYm9vbCBwZXJjZW50YWdlKGludCYgcCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcucGVyY2VudGFnZShwKTsgfQogICAgIExlbmd0aCogdG9MZW5n
dGhBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9MZW5ndGhBcnJheShs
ZW4pOyB9CiAgICAgTGVuZ3RoKiB0b0Nvb3Jkc0FycmF5KGludCYgbGVuKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy50b0Nvb3Jkc0FycmF5KGxlbik7IH0KSW5kZXg6IHBsYXRmb3JtL0RlcHJlY2F0
ZWRTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgJKHJl
dmlzaW9uIDEzNDgyKQorKysgcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00ODgsMjMgKzQ4OCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0b1VJbnQoYm9v
bCAqb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBkb3VibGUgdG9Eb3VibGUoYm9v
bCAqb2sgPSAwKSBjb25zdDsKIAotICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG51bWJlcihp
bnQpOwotICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG51bWJlcih1bnNpZ25lZCk7Ci0gICAg
c3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbnVtYmVyKGxvbmcpOwotICAgIHN0YXRpYyBEZXByZWNh
dGVkU3RyaW5nIG51bWJlcih1bnNpZ25lZCBsb25nKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBudW1iZXIoZG91YmxlKTsKLQogICAgIGJvb2wgZmluZEFyZyhpbnQmIHBvcywgaW50JiBs
ZW4pIGNvbnN0OwogICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJiwgaW50IHdpZHRoPTApIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJn
KHNob3J0LCBpbnQgd2lkdGg9MCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcodW5z
aWduZWQgc2hvcnQsIGludCB3aWR0aD0wKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFy
ZyhpbnQsIGludCB3aWR0aD0wKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyh1bnNp
Z25lZCwgaW50IHdpZHRoPTApIGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKGxvbmcs
IGludCB3aWR0aD0wKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyh1bnNpZ25lZCBs
b25nLCBpbnQgd2lkdGg9MCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcoZG91Ymxl
LCBpbnQgd2lkdGg9MCkgY29uc3Q7Ci0KICAgICBEZXByZWNhdGVkU3RyaW5nIGxlZnQodW5zaWdu
ZWQpIGNvbnN0OwogICAgIERlcHJlY2F0ZWRTdHJpbmcgcmlnaHQodW5zaWduZWQpIGNvbnN0Owog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbWlkKHVuc2lnbmVkLCB1bnNpZ25lZCBsZW49MHhmZmZmZmZm
ZikgY29uc3Q7CkBAIC01MTgsMjAgKzUwMyw2IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkU3Ry
aW5nICZzZXRVbmljb2RlKGNvbnN0IFFDaGFyICosIHVuc2lnbmVkKTsKICAgICBEZXByZWNhdGVk
U3RyaW5nICZzZXRMYXRpbjEoY29uc3QgY2hhciAqLCBpbnQgbGVuPS0xKTsKIAotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgJnNldE51bShzaG9ydCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TnVt
KHVuc2lnbmVkIHNob3J0KTsKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0oaW50KTsKLSAg
ICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0odW5zaWduZWQpOwotICAgIERlcHJlY2F0ZWRTdHJp
bmcgJnNldE51bShsb25nKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0odW5zaWduZWQg
bG9uZyk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TnVtKGRvdWJsZSk7Ci0KLSAgICBEZXBy
ZWNhdGVkU3RyaW5nICZzcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKSAKLSNpZiBfX0dOVUNfXwot
ICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQotI2VuZGlmCi0gICAg
OwotCiAgICAgRGVwcmVjYXRlZFN0cmluZyAmYXBwZW5kKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcg
Jik7CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmYXBwZW5kKFFDaGFyKTsKICAgICBEZXByZWNhdGVk
U3RyaW5nICZhcHBlbmQoY2hhcik7CkluZGV4OiBwbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBwbGF0Zm9ybS9LVVJM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgS1VSTDo6c2V0UG9y
dCh1bnNpZ25lZCBzaG9ydCBpKQogICAgIGlmIChtX2lzVmFsaWQpIHsKICAgICAgICAgYm9vbCBj
b2xvbk5lZWRlZCA9IHBvcnRFbmRQb3MgPT0gaG9zdEVuZFBvczsKICAgICAgICAgaW50IHBvcnRT
dGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7Ci0gICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9ydFN0YXJ0KSAr
IChjb2xvbk5lZWRlZCA/ICI6IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoaSkgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOworICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIG5ld1VSTCA9IHVybFN0cmluZy5sZWZ0KHBvcnRTdGFydCkgKyAoY29sb25O
ZWVkZWQgPyAiOiIgOiBEZXByZWNhdGVkU3RyaW5nKCkpICsgU3RyaW5nOjpudW1iZXIoaSkuZGVw
cmVjYXRlZFN0cmluZygpICsgdXJsU3RyaW5nLm1pZChwb3J0RW5kUG9zKTsKICAgICAgICAgcGFy
c2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwogICAgIH0KIH0KQEAgLTY5MCw5ICs2OTAsOCBA
QCB2b2lkIEtVUkw6OnNldFBhdGgoY29uc3QgRGVwcmVjYXRlZFN0cmluCiAKIERlcHJlY2F0ZWRT
dHJpbmcgS1VSTDo6cHJldHR5VVJMKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgewor
ICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gdXJsU3RyaW5nOwotICAgIH0KIAog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0ID0gcHJvdG9jb2woKSArICI6IjsKIApAQCAtNzA2
LDIwICs3MDUsMTggQEAgRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAog
ICAgICAgICBhdXRob3JpdHkgKz0gaG9zdCgpOwogICAgICAgICBpZiAocG9ydCgpICE9IDApIHsK
ICAgICAgICAgICAgIGF1dGhvcml0eSArPSAiOiI7Ci0gICAgICAgICAgICBhdXRob3JpdHkgKz0g
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHBvcnQoKSk7CisgICAgICAgICAgICBhdXRob3JpdHkg
Kz0gU3RyaW5nOjpudW1iZXIocG9ydCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoIWF1dGhvcml0eS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWF1dGhv
cml0eS5pc0VtcHR5KCkpCiAgICAgICAgIHJlc3VsdCArPSAiLy8iICsgYXV0aG9yaXR5OwotICAg
IH0KIAogICAgIHJlc3VsdCArPSBwYXRoKCk7CiAgICAgcmVzdWx0ICs9IHF1ZXJ5KCk7CiAKLSAg
ICBpZiAoZnJhZ21lbnRFbmRQb3MgIT0gcXVlcnlFbmRQb3MpIHsKKyAgICBpZiAoZnJhZ21lbnRF
bmRQb3MgIT0gcXVlcnlFbmRQb3MpCiAgICAgICAgIHJlc3VsdCArPSAiIyIgKyByZWYoKTsKLSAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogcGxhdGZvcm0vUGxhdGZvcm1TdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiAx
MzQ4MikKKysrIHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDYgKzk2LDE4IEBAIHB1YmxpYzoKIAogICAgIFFDaGFyICp1bmljb2RlKCkgY29uc3Q7CiAgICAg
RGVwcmVjYXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKCkgY29uc3Q7CisgICAgCisgICAgc3Rh
dGljIFN0cmluZyBudW1iZXIoaW50KTsKKyAgICBzdGF0aWMgU3RyaW5nIG51bWJlcih1bnNpZ25l
ZCk7CisgICAgc3RhdGljIFN0cmluZyBudW1iZXIobG9uZyk7CisgICAgc3RhdGljIFN0cmluZyBu
dW1iZXIodW5zaWduZWQgbG9uZyk7CisgICAgc3RhdGljIFN0cmluZyBudW1iZXIoZG91YmxlKTsK
KyAgICAKKyAgICBTdHJpbmcmIHNwcmludGYoY29uc3QgY2hhciAqLCAuLi4pCisjaWYgX19HTlVD
X18KKyAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKKyNlbmRpZgor
ICAgIDsKIAogICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0OwogICAgIExlbmd0aCog
dG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3Q7CkluZGV4OiBwbGF0Zm9ybS9EZXByZWNhdGVk
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAko
cmV2aXNpb24gMTM0ODIpCisrKyBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEzLDQ3ICs1MTMsNiBAQCBRQ2hhciAqS1dRU3RyaW5nRGF0YTo6bWFrZVVu
aWNvZGUoKQogICAgIHJldHVybiBfdW5pY29kZTsKIH0KIAotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBEZXByZWNhdGVkU3RyaW5nCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotRGVwcmVjYXRl
ZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaW50IG4pCi17Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyBxczsKLSAgICBxcy5zZXROdW0obik7Ci0gICAgcmV0dXJuIHFzOwotfQotCi1EZXBy
ZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBuKQotewotICAg
IERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVtKG4pOwotICAgIHJldHVybiBxczsK
LX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobG9uZyBuKQot
ewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVtKG4pOwotICAgIHJldHVy
biBxczsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodW5z
aWduZWQgbG9uZyBuKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVt
KG4pOwotICAgIHJldHVybiBxczsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoZG91YmxlIG4pCi17Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBxczsKLSAgICBx
cy5zZXROdW0obik7Ci0gICAgcmV0dXJuIHFzOwotfQotCiBpbmxpbmUgdm9pZCBEZXByZWNhdGVk
U3RyaW5nOjpkZXRhY2hJZkludGVybmFsKCkKIHsKICAgICBLV1FTdHJpbmdEYXRhICpvbGREYXRh
ID0gKmRhdGFIYW5kbGU7CkBAIC0xNDg5LDczICsxNDQ4LDYgQEAgYm9vbCBEZXByZWNhdGVkU3Ry
aW5nOjpmaW5kQXJnKGludCYgcG9zLAogICAgIHJldHVybiBsb3dlc3QgIT0gMDsKIH0KIAotRGVw
cmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcoY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyAmYSwgaW50IGZpZWxkd2lkdGgpIGNvbnN0Ci17Ci0gICAgaW50IHBvcywgbGVuOwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgciA9ICp0aGlzOwotCi0gICAgaWYgKCAhZmluZEFyZyggcG9zLCBsZW4g
KSApIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB0ZXh0IGF0IGxlYXN0IGFwcGVhcnMgU09N
RVdIRVJFCi0gICAgICAgIHIgKz0gJyAnOwotICAgICAgICBwb3MgPSByLmRhdGFIYW5kbGVbMF0t
Pl9sZW5ndGg7Ci0gICAgICAgIGxlbiA9IDA7Ci0gICAgfQotCi0gICAgci5yZXBsYWNlKCBwb3Ms
IGxlbiwgYSApOwotICAgIGlmICggZmllbGR3aWR0aCA8IDAgKSB7Ci0gICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgczsKLSAgICAgICAgd2hpbGUgKCAodW5zaWduZWQpLWZpZWxkd2lkdGggPiBhLmRh
dGFIYW5kbGVbMF0tPl9sZW5ndGggKSB7Ci0gICAgICAgICAgICBzICs9ICcgJzsKLSAgICAgICAg
ICAgIGZpZWxkd2lkdGgrKzsKLSAgICAgICAgfQotICAgICAgICByLmluc2VydCggcG9zICsgYS5k
YXRhSGFuZGxlWzBdLT5fbGVuZ3RoLCBzICk7Ci0gICAgfSBlbHNlIGlmICggZmllbGR3aWR0aCAp
IHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOwotICAgICAgICB3aGlsZSAoICh1bnNpZ25l
ZClmaWVsZHdpZHRoID4gYS5kYXRhSGFuZGxlWzBdLT5fbGVuZ3RoICkgewotICAgICAgICAgICAg
cyArPSAnICc7Ci0gICAgICAgICAgICBmaWVsZHdpZHRoLS07Ci0gICAgICAgIH0KLSAgICAgICAg
ci5pbnNlcnQoIHBvcywgcyApOwotICAgIH0KLQotICAgIHJldHVybiByOwotfQotCi1EZXByZWNh
dGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmFyZyhzaG9ydCByZXBsYWNlbWVudCwgaW50IHdp
ZHRoKSBjb25zdAotewotICAgIHJldHVybiBhcmcobnVtYmVyKChpbnQpcmVwbGFjZW1lbnQpLCB3
aWR0aCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6YXJnKHVuc2ln
bmVkIHNob3J0IHJlcGxhY2VtZW50LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFy
ZyhudW1iZXIoKHVuc2lnbmVkKXJlcGxhY2VtZW50KSwgd2lkdGgpOwotfQotCi1EZXByZWNhdGVk
U3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmFyZyhpbnQgcmVwbGFjZW1lbnQsIGludCB3aWR0aCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gYXJnKG51bWJlcihyZXBsYWNlbWVudCksIHdpZHRoKTsKLX0K
LQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcodW5zaWduZWQgcmVwbGFj
ZW1lbnQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJnKG51bWJlcihyZXBsYWNl
bWVudCksIHdpZHRoKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjph
cmcobG9uZyByZXBsYWNlbWVudCwgaW50IHdpZHRoKSBjb25zdAotewotICAgIHJldHVybiBhcmco
bnVtYmVyKHJlcGxhY2VtZW50KSwgd2lkdGgpOwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJl
Y2F0ZWRTdHJpbmc6OmFyZyh1bnNpZ25lZCBsb25nIHJlcGxhY2VtZW50LCBpbnQgd2lkdGgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGFyZyhudW1iZXIocmVwbGFjZW1lbnQpLCB3aWR0aCk7Ci19Ci0K
LURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6YXJnKGRvdWJsZSByZXBsYWNlbWVu
dCwgaW50IHdpZHRoKSBjb25zdAotewotICAgIHJldHVybiBhcmcobnVtYmVyKHJlcGxhY2VtZW50
KSwgd2lkdGgpOwotfQotCiBEZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmxlZnQo
dW5zaWduZWQgbGVuKSBjb25zdAogeyByZXR1cm4gbWlkKDAsIGxlbik7IH0KIApAQCAtMTgxOSw3
OSArMTcxMSw2IEBAIERlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNldEwKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6
OnNldE51bShzaG9ydCBuKQotewotICAgIHJldHVybiBzcHJpbnRmKCIlZCIsIG4pOwotfQotCi1E
ZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzZXROdW0odW5zaWduZWQgc2hvcnQg
bikKLXsKLSAgICByZXR1cm4gc3ByaW50ZigiJXUiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmlu
ZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0TnVtKGludCBuKQotewotICAgIHJldHVybiBzcHJpbnRm
KCIlZCIsIG4pOwotfQotCi1EZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzZXRO
dW0odW5zaWduZWQgbikKLXsKLSAgICByZXR1cm4gc3ByaW50ZigiJXUiLCBuKTsKLX0KLQotRGVw
cmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0TnVtKGxvbmcgbikKLXsKLSAgICBy
ZXR1cm4gc3ByaW50ZigiJWxkIiwgbik7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0
ZWRTdHJpbmc6OnNldE51bSh1bnNpZ25lZCBsb25nIG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYo
IiVsdSIsIG4pOwotfQotCi1EZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzZXRO
dW0oZG91YmxlIG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYoIiUuNmxnIiwgbik7Ci19Ci0KLURl
cHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNwcmludGYoY29uc3QgY2hhciAqZm9y
bWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1h
dCk7Ci0gICAgCi0gICAgLy8gRG8gdGhlIGZvcm1hdCBvbmNlIHRvIGdldCB0aGUgbGVuZ3RoLgot
ICAgIGNoYXIgY2g7Ci0gICAgaW50IHJlc3VsdCA9IHZzbnByaW50ZigmY2gsIDEsIGZvcm1hdCwg
YXJncyk7Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBlbXB0eSBzdHJpbmcgY2FzZSB0byBzaW1w
bGlmeSB0aGUgY29kZSBiZWxvdy4KLSAgICBpZiAocmVzdWx0IDw9IDApIHsgLy8gUE9TSVggcmV0
dXJucyAwIGluIGVycm9yOyBXaW5kb3dzIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIuCi0gICAg
ICAgIHNldFVuaWNvZGUoMCwgMCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAg
dW5zaWduZWQgbGVuID0gcmVzdWx0OwotICAgIAotICAgIC8vIEFycmFuZ2UgZm9yIHN0b3JhZ2Ug
Zm9yIHRoZSByZXN1bHRpbmcgc3RyaW5nLgotICAgIGRldGFjaEFuZERpc2NhcmRDaGFyYWN0ZXJz
KCk7Ci0gICAgaWYgKGxlbiA+PSBkYXRhSGFuZGxlWzBdLT5fbWF4QXNjaWkgfHwgZGF0YUhhbmRs
ZVswXS0+cmVmQ291bnQgIT0gMSB8fCAhZGF0YUhhbmRsZVswXS0+X2lzQXNjaWlWYWxpZCkgewot
ICAgICAgICAvLyBGcmVlIG91ciBoYW5kbGUgaWYgaXQgaXNuJ3QgdGhlIHNoYXJlZCBudWxsIGhh
bmRsZSwgYW5kIGlmIG5vLW9uZSBlbHNlIGlzIHVzaW5nIGl0LgotICAgICAgICBib29sIG5lZWRU
b0ZyZWVIYW5kbGUgPSBkYXRhSGFuZGxlICE9IHNoYXJlZF9udWxsX2hhbmRsZSAmJiBkYXRhSGFu
ZGxlWzBdLT5yZWZDb3VudCA9PSAxOwotICAgICAgICBkZXJlZigpOwotICAgICAgICBpZiAobmVl
ZFRvRnJlZUhhbmRsZSkKLSAgICAgICAgICAgIGZyZWVIYW5kbGUoZGF0YUhhbmRsZSk7Ci0gICAg
ICAgIGRhdGFIYW5kbGUgPSBhbGxvY2F0ZUhhbmRsZSgpOwotICAgICAgICAqZGF0YUhhbmRsZSA9
IG5ldyBLV1FTdHJpbmdEYXRhKChjaGFyICopMCwgbGVuKTsKLSAgICAgICAgZGF0YUhhbmRsZVsw
XS0+X2lzSGVhcEFsbG9jYXRlZCA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGF0YUhhbmRs
ZVswXS0+X2xlbmd0aCA9IGxlbjsKLSAgICAgICAgZGF0YUhhbmRsZVswXS0+X2lzVW5pY29kZVZh
bGlkID0gMDsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZvcm1hdHRpbmcgYWdhaW4sIGd1
YXJhbnRlZWQgdG8gZml0LgotICAgIHZzcHJpbnRmKGNvbnN0X2Nhc3Q8Y2hhcio+KGFzY2lpKCkp
LCBmb3JtYXQsIGFyZ3MpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCiBEZXByZWNhdGVkU3Ry
aW5nICZEZXByZWNhdGVkU3RyaW5nOjpwcmVwZW5kKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnFz
KQogewogICAgIHJldHVybiBpbnNlcnQoMCwgcXMpOwpJbmRleDogcGxhdGZvcm0vQ29sb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0NvbG9yLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBw
bGF0Zm9ybS9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJDb2xvci5oIgogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiAv
LyBUdXJuIG9mZiBpbmxpbmluZyB0byBhdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjLgpAQCAt
MTA2LDkgKzEwNyw5IEBAIENvbG9yOjpDb2xvcihjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0K
IAotRGVwcmVjYXRlZFN0cmluZyBDb2xvcjo6bmFtZSgpIGNvbnN0CitTdHJpbmcgQ29sb3I6Om5h
bWUoKSBjb25zdAogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgbmFtZTsKKyAgICBTdHJpbmcgbmFt
ZTsKICAgICBpZiAoYWxwaGEoKSA8IDB4RkYpCiAgICAgICAgIG5hbWUuc3ByaW50ZigiIyUwMlgl
MDJYJTAyWCUwMlgiLCByZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsKICAgICBlbHNl
CkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mv
b2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxMzQ4MikKKysrIGJpbmRpbmdzL29iamMvRE9NSFRN
TC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3OCw4ICsxNDc4LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRDb2xzOihpbnQpY29scwogewotICAg
IFN0cmluZyB2YWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29scykpOwotICAgIFtzZWxm
IF90ZXh0QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoY29sc0F0dHIsIHZhbHVlKTsKKyAgICBb
c2VsZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKGNvbHNBdHRyLCBTdHJpbmc6Om51
bWJlcihjb2xzKSk7CiB9CiAKIC0gKEJPT0wpZGlzYWJsZWQKQEAgLTE1MTksOCArMTUxOCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0Um93czoo
aW50KXJvd3MKIHsKLSAgICBTdHJpbmcgdmFsdWUoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHJv
d3MpKTsKLSAgICBbc2VsZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKHJvd3NBdHRy
LCB2YWx1ZSk7CisgICAgW3NlbGYgX3RleHRBcmVhRWxlbWVudF0tPnNldEF0dHJpYnV0ZShyb3dz
QXR0ciwgU3RyaW5nOjpudW1iZXIocm93cykpOwogfQogCiAtIChpbnQpdGFiSW5kZXgKQEAgLTE3
NzcsOCArMTc3NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0U3RhcnQ6KGludClzdGFydAogewotICAgIFN0cmluZyB2YWx1ZShEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIoc3RhcnQpKTsKLSAgICBbc2VsZiBfb0xpc3RFbGVtZW50XS0+c2V0QXR0
cmlidXRlKHN0YXJ0QXR0ciwgdmFsdWUpOworICAgIFtzZWxmIF9vTGlzdEVsZW1lbnRdLT5zZXRB
dHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkpOwogfQogCiAtIChOU1N0
cmluZyAqKXR5cGUKQEAgLTE5NjksOCArMTk2Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aAogewotICAgIFN0cmlu
ZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci0gICAgW3NlbGYgX3By
ZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF9w
cmVFbGVtZW50XS0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lkdGgp
KTsKIH0KIAogQGVuZApAQCAtMjM1Nyw4ICsyMzUzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIZWlnaHQ6KGludCloZWlnaHQKIHsKLSAgICBT
dHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihoZWlnaHQpKTsKLSAgICBbc2Vs
ZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHN0cmluZyk7CisgICAg
W3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51
bWJlcihoZWlnaHQpKTsKIH0KIAogLSAoaW50KWhzcGFjZQpAQCAtMjM2OCw4ICsyMzYzLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIc3BhY2U6
KGludCloc3BhY2UKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihoc3BhY2UpKTsKLSAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFj
ZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZSho
c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKIH0KIAogLSAoQk9PTClpc01hcApA
QCAtMjQyNCw4ICsyNDE4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsK
IAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2UKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKLSAgICBbc2VsZiBfaW1hZ2VFbGVtZW50
XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2ltYWdlRWxl
bWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsK
IH0KIAogLSAoaW50KXdpZHRoCkBAIC0yNDM1LDggKzI0MjgsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsKLSAg
ICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOwotICAgIFtz
ZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBzdHJpbmcpOworICAg
IFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51
bWJlcih3aWR0aCkpOwogfQogCiBAZW5kCkBAIC0yNTU3LDggKzI1NDksNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhzcGFjZTooaW50KWhzcGFj
ZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhzcGFjZSkp
OwotICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIHN0
cmluZyk7CisgICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0
ciwgU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopbmFtZQpAQCAt
MjU4OCw4ICsyNTc5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAog
LSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYkluZGV4CiB7Ci0gICAgU3RyaW5nIHN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKLSAgICBbc2VsZiBfb2JqZWN0RWxl
bWVudF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX29i
amVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0
YWJJbmRleCkpOwogfQogCiAtIChOU1N0cmluZyAqKXR5cGUKQEAgLTI2MTksOCArMjYwOSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0VnNwYWNl
OihpbnQpdnNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIodnNwYWNlKSk7Ci0gICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodnNw
YWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0
ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKIH0KIAogLSAoTlNTdHJpbmcg
Kil3aWR0aApAQCAtMjc2OSw4ICsyNzU4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhU
TUxOYW1lczsKIAogLSAodm9pZClzZXRIc3BhY2U6KGludCloc3BhY2UKIHsKLSAgICBTdHJpbmcg
c3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKLSAgICBbc2VsZiBfYXBw
bGV0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBzdHJpbmcpOworICAgIFtzZWxm
IF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVy
KGhzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAgLTI4MDAsOCArMjc4OCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0VnNwYWNl
OihpbnQpdnNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIodnNwYWNlKSk7Ci0gICAgW3NlbGYgX2FwcGxldEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodnNw
YWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfYXBwbGV0RWxlbWVudF0tPnNldEF0dHJpYnV0
ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKIH0KIAogLSAoTlNTdHJpbmcg
Kil3aWR0aApAQCAtMjkyNiw4ICsyOTEzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhU
TUxOYW1lczsKIAogLSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYkluZGV4CiB7Ci0gICAgU3Ry
aW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKLSAgICBbc2Vs
ZiBfYXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBzdHJpbmcpOworICAg
IFtzZWxmIF9hcmVhRWxlbWVudF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6
bnVtYmVyKHRhYkluZGV4KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdGFyZ2V0CkBAIC0zMzcyLDgg
KzMzNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lk
KXNldFNwYW46KGludClzcGFuCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIoc3BhbikpOwotICAgIFtzZWxmIF90YWJsZUNvbEVsZW1lbnRdLT5zZXRBdHRyaWJ1
dGUoc3BhbkF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3RhYmxlQ29sRWxlbWVudF0tPnNldEF0
dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIoc3BhbikpOwogfQogCiAtIChOU1N0cmlu
ZyAqKXZBbGlnbgpAQCAtMzU2Miw4ICszNTQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6
OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRDb2xTcGFuOihpbnQpY29sU3BhbgogewotICAgIFN0
cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGNvbFNwYW4pKTsKLSAgICBbc2Vs
ZiBfdGFibGVDZWxsRWxlbWVudF0tPnNldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciwgc3RyaW5nKTsK
KyAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciwg
U3RyaW5nOjpudW1iZXIoY29sU3BhbikpOwogfQogCiAtIChOU1N0cmluZyAqKWhlYWRlcnMKQEAg
LTM2MDMsOCArMzU4Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAK
IC0gKHZvaWQpc2V0Um93U3BhbjooaW50KXJvd1NwYW4KIHsKLSAgICBTdHJpbmcgc3RyaW5nKERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihyb3dTcGFuKSk7Ci0gICAgW3NlbGYgX3RhYmxlQ2VsbEVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3Rh
YmxlQ2VsbEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIFN0cmluZzo6bnVtYmVy
KHJvd1NwYW4pKTsKIH0KIAogLSAoTlNTdHJpbmcgKilzY29wZQpAQCAtMzkyNiw4ICszOTA5LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIZWln
aHQ6KGludCloZWlnaHQKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihoZWlnaHQpKTsKLSAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhl
aWdodEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2VtYmVkRWxlbWVudF0tPnNldEF0dHJpYnV0
ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcihoZWlnaHQpKTsKIH0KIAogLSAoTlNTdHJpbmcg
KiluYW1lCkBAIC0zOTY3LDggKzM5NDksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRN
TE5hbWVzOwogCiAtICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsKLSAgICBTdHJpbmcgc3Ry
aW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOwotICAgIFtzZWxmIF9lbWJlZEVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF9lbWJl
ZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih3aWR0aCkp
OwogfQogCiBAZW5kCkluZGV4OiBodG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysgaHRtbC9odG1sX2Jh
c2VpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDE2ICsxNjYsMTAgQEAgdm9pZCBIVE1M
Qm9keUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQogICAgIC8vIEZJWE1FOiBwZXJoYXBzIHRo
aXMgY29kZSBzaG91bGQgYmUgaW4gYXR0YWNoKCkgaW5zdGVhZCBvZiBoZXJlCiAKICAgICBGcmFt
ZVZpZXcgKncgPSBnZXREb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgaWYgKHcgJiYgdy0+bWFyZ2lu
V2lkdGgoKSAhPSAtMSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHM7Ci0gICAgICAgIHMu
c3ByaW50ZigiJWQiLCB3LT5tYXJnaW5XaWR0aCgpKTsKLSAgICAgICAgc2V0QXR0cmlidXRlKG1h
cmdpbndpZHRoQXR0ciwgcyk7Ci0gICAgfQotICAgIGlmICh3ICYmIHctPm1hcmdpbkhlaWdodCgp
ICE9IC0xKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgczsKLSAgICAgICAgcy5zcHJpbnRm
KCIlZCIsIHctPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgc2V0QXR0cmlidXRlKG1hcmdpbmhl
aWdodEF0dHIsIHMpOwotICAgIH0KKyAgICBpZiAodyAmJiB3LT5tYXJnaW5XaWR0aCgpICE9IC0x
KQorICAgICAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih3
LT5tYXJnaW5XaWR0aCgpKSk7CisgICAgaWYgKHcgJiYgdy0+bWFyZ2luSGVpZ2h0KCkgIT0gLTEp
CisgICAgICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih3
LT5tYXJnaW5IZWlnaHQoKSkpOwogCiAgICAgaWYgKHcpCiAgICAgICAgIHctPnNjaGVkdWxlUmVs
YXlvdXQoKTsKSW5kZXg6IGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvaHRtbF9pbWFnZWltcGwuY3BwCShyZXZpc2lvbiAxMzQ4MikKKysrIGh0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgaW50IEhUTUxJbWFn
ZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUAogICAgIGlmICghcmVuZGVyZXIoKSkgewogICAg
ICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2
YWx1ZQogICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgd2lkdGggPSBnZXRBdHRyaWJ1dGUo
d2lkdGhBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IHdp
ZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoJm9rKTsKICAgICAgICAgaWYgKG9r
KQogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwogICAgICAgICAKQEAgLTI4Myw3ICsyODMsNyBA
QCBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlCiAgICAgaWYgKCFyZW5k
ZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4
cGxpY2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGludCBoZWlnaHQg
PSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikuZGVwcmVjYXRlZFN0cmluZygpLnRvSW50KCZvayk7
CisgICAgICAgIGludCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9r
KTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKICAgICAgICAg
CkBAIC0zNDQsMTIgKzM0NCwxMiBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6Ym9yZGVyKCkgY29u
c3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRCb3JkZXIoaW50IHZhbHVlKQogewotICAg
IHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsdWUp
KTsKKyAgICBzZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsK
IH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQoaW50IHZhbHVlKQogewotICAg
IHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsdWUp
KTsKKyAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsK
IH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0CkBAIC0zNjAsNyArMzYw
LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0SHNwYWNlKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUoaHNw
YWNlQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmli
dXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIGJvb2wgSFRNTElt
YWdlRWxlbWVudDo6aXNNYXAoKSBjb25zdApAQCAtNDExLDEyICs0MTEsMTIgQEAgaW50IEhUTUxJ
bWFnZUVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0
VnNwYWNlKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIs
IFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0
V2lkdGgoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0
cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp4KCkgY29u
c3QKQEAgLTY5Myw3ICs2OTMsNyBAQCBpbnQgSFRNTEFyZWFFbGVtZW50Ojp0YWJJbmRleCgpIGNv
bnN0CiAKIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCiB7
Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1i
ZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KCkgY29u
c3QKSW5kZXg6IGh0bWwvRm9ybURhdGFMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9Gb3JtRGF0
YUxpc3QuaAkocmV2aXNpb24gMTM0ODIpCisrKyBodG1sL0Zvcm1EYXRhTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZERhdGEoY29u
c3QgU3RyaW5nICZrZXksIGNvbnN0IERlcHJlY2F0ZWRDU3RyaW5nICZ2YWx1ZSkKICAgICAgICAg
eyBhcHBlbmRTdHJpbmcoa2V5LmRlcHJlY2F0ZWRTdHJpbmcoKSk7IGFwcGVuZFN0cmluZyh2YWx1
ZSk7IH0KICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nICZrZXksIGludCB2YWx1ZSkK
LSAgICAgICAgeyBhcHBlbmRTdHJpbmcoa2V5LmRlcHJlY2F0ZWRTdHJpbmcoKSk7IGFwcGVuZFN0
cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsdWUpKTsgfQorICAgICAgICB7IGFwcGVu
ZFN0cmluZyhrZXkuZGVwcmVjYXRlZFN0cmluZygpKTsgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVt
YmVyKHZhbHVlKS5kZXByZWNhdGVkU3RyaW5nKCkpOyB9CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNv
bnN0IFN0cmluZyAma2V5LCBjb25zdCBTdHJpbmcgJmZpbGVuYW1lKTsKIAogICAgIERlcHJlY2F0
ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEZvcm1EYXRhTGlzdEl0ZW0+IGJlZ2luKCkgY29uc3QK
SW5kZXg6IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc0LDEyICsxMjc0LDEyIEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRNYXhMZW5ndGgoaW50IF9tYXhMZW5ndGgpCiB7Ci0gICAgc2V0QXR0cmlidXRlKG1heGxlbmd0
aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihfbWF4TGVuZ3RoKSk7CisgICAgc2V0QXR0
cmlidXRlKG1heGxlbmd0aEF0dHIsIFN0cmluZzo6bnVtYmVyKF9tYXhMZW5ndGgpKTsKIH0KIAog
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVkIF9zaXplKQogewotICAgIHNl
dEF0dHJpYnV0ZShzaXplQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKF9zaXplKSk7Cisg
ICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6Om51bWJlcihfc2l6ZSkpOwogfQogCiBT
dHJpbmcgSFRNTElucHV0RWxlbWVudDo6c3JjKCkgY29uc3QKSW5kZXg6IGh0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM0ODIpCisrKyBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjgsMTIgKzI2OCwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnNldEFjY2Vzc0tleShjCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Q29scyhpbnQg
Y29scykKIHsKLSAgICBzZXRBdHRyaWJ1dGUoY29sc0F0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihjb2xzKSk7CisgICAgc2V0QXR0cmlidXRlKGNvbHNBdHRyLCBTdHJpbmc6Om51bWJlcihj
b2xzKSk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Um93cyhpbnQgcm93cykK
IHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c0F0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihy
b3dzKSk7CisgICAgc2V0QXR0cmlidXRlKHJvd3NBdHRyLCBTdHJpbmc6Om51bWJlcihyb3dzKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODIp
CisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDcg
KzQ2NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE11bHRpcGxlKGJvb2wKIAogdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZShpbnQgc2l6ZSkKIHsKLSAgICBzZXRBdHRyaWJ1
dGUoc2l6ZUF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihzaXplKSk7CisgICAgc2V0QXR0
cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6Om51bWJlcihzaXplKSk7CiB9CiAgICAgCiB9IC8vIG5h
bWVzcGFjZQpJbmRleDogaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBodG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxNyArMTUwLDE0IEBAIHZvaWQgSFRN
TEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKIAogICAgICAgICBpZiAoZXZ0LT50YXJn
ZXQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7CiAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50
KiBpbWcgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oIGV2dC0+dGFyZ2V0KCkgKTsK
LSAgICAgICAgICAgIGlmICggaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSApCi0gICAgICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSkgewogICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OlJlbmRlckltYWdlICpyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
UmVuZGVySW1hZ2UgKj4oaW1nLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZihyICYm
IGUpCi0gICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyICYmIGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgaW50IGFic3gsIGFic3k7CiAgICAgICAgICAgICAgICAgICAgIHIt
PmFic29sdXRlUG9zaXRpb24oYWJzeCwgYWJzeSk7CiAgICAgICAgICAgICAgICAgICAgIGludCB4
KGUtPmNsaWVudFgoKSAtIGFic3gpLCB5KGUtPmNsaWVudFkoKSAtIGFic3kpOwotICAgICAgICAg
ICAgICAgICAgICB1cmwgKz0gRGVwcmVjYXRlZFN0cmluZygiPyUxLCUyIikuYXJnKCB4ICkuYXJn
KCB5ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICB1cmwgKz0gU3RyaW5nKCkuc3ByaW50ZigiPyVkLCVkIiwgeCwgeSkuZGVw
cmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgSFRN
TEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMzAzLDcgKzMwMCw3IEBAIGludCBIVE1MQW5jaG9yRWxlbWVudDo6dGFiSW5k
ZXgoKSBjb25zdAogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRUYWJJbmRleChpbnQgdGFi
SW5kZXgpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3Ry
aW5nOjpudW1iZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojp0
YXJnZXQoKSBjb25zdApJbmRleDogaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ4
MikKKysrIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMCw3ICszMDAsNyBAQCBpbnQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6dGFiSW5kZXgoKSBj
CiAKIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQog
ewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVy
KHZhbHVlKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogaHRtbC9odG1sX2Jsb2Nr
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHJldmlzaW9u
IDEzNDgyKQorKysgaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxIUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAg
ICAgICAgIGlmIChzaXplIDw9IDEpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBTdHJpbmcoIjAiKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSkpOworICAgICAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KQEAgLTMyMCw3ICszMjAsNyBAQCBpbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QK
IAogdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQogewotICAgIHNldEF0
dHJpYnV0ZSh3aWR0aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOworICAg
IHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIGJv
b2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBjb25zdApJbmRleDogaHRtbC9odG1sX29iamVjdGlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkocmV2aXNpb24g
MTM0ODIpCisrKyBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MDUsNyArMTAwNSw3IEBAIGludCBIVE1MT2JqZWN0RWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAog
CiB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCiB7Ci0g
ICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHRh
YkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIo
dGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojp0eXBlKCkgY29uc3QK
SW5kZXg6IGh0bWwvaHRtbF9saXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBodG1sL2h0bWxfbGlzdGltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50Ojpz
ZXRDb21wYWN0KGJvb2wgYgogCiB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBz
dGFydCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpu
dW1iZXIoc3RhcnQpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJl
cihzdGFydCkpOwogfQogCiBTdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0CkBA
IC0yMzYsNyArMjM2LDcgQEAgaW50IEhUTUxMSUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIAogdm9p
ZCBIVE1MTElFbGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRl
KHZhbHVlQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0
cmlidXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpJbmRleDogaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysgaHRtbC9odG1sX3Rh
YmxlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw4ICszOTcsNyBAQCB2b2lkIEhUTUxU
YWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBib3JkZXI9MTsKICNl
bmRpZgogICAgICAgICAgICAgbV9ub0JvcmRlciA9ICFib3JkZXI7Ci0gICAgICAgICAgICBTdHJp
bmcgdiA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciggYm9yZGVyICk7Ci0gICAgICAgICAgICBh
ZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCB2ICk7CisgICAgICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBTdHJpbmc6Om51bWJl
cihib3JkZXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJn
Y29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9V
TkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwpAQCAtMTE0Nyw3ICsxMTQ2LDcgQEAgdm9pZCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6c2V0Q2hPZmYoY29ucwogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpzZXRDb2xTcGFuKGludCBuKQogewotICAgIHNldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciwg
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG4pKTsKKyAgICBzZXRBdHRyaWJ1dGUoY29sc3BhbkF0
dHIsIFN0cmluZzo6bnVtYmVyKG4pKTsKIH0KIAogU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50
OjpoZWFkZXJzKCkgY29uc3QKQEAgLTExODIsNyArMTE4MSw3IEBAIHZvaWQgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OnNldE5vV3JhcChib28KIAogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0
Um93U3BhbihpbnQgbikKIHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihuKSk7CisgICAgc2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBTdHJp
bmc6Om51bWJlcihuKSk7CiB9CiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2NvcGUo
KSBjb25zdApAQCAtMTI3OCw3ICsxMjc3LDcgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50Ojpz
ZXRDaE9mZihjb25zdAogCiB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFNwYW4oaW50IG4p
CiB7Ci0gICAgc2V0QXR0cmlidXRlKHNwYW5BdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIo
bikpOworICAgIHNldEF0dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwogfQog
CiBTdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29uc3QKSW5kZXg6IHJlbmRl
cmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjcsMTMgKzUyNywxMyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNh
bGNNaW5NYXhXaWR0aCgpCiAgICAgY2FzZSBERUNJTUFMX0xFQURJTkdfWkVSTzoKICAgICAgICAg
Ly8gIyMjIHVuc3VwcG9ydGVkLCB3ZSB1c2UgZGVjaW1hbCBpbnN0ZWFkCiAgICAgY2FzZSBMREVD
SU1BTDoKLSAgICAgICAgbV9pdGVtLnNwcmludGYoICIlZCIsIG1fbGlzdEl0ZW0tPnZhbHVlKCkg
KTsKKyAgICAgICAgbV9pdGVtID0gU3RyaW5nKCkuc3ByaW50ZigiJWQiLCBtX2xpc3RJdGVtLT52
YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTE9X
RVJfUk9NQU46Ci0gICAgICAgIG1faXRlbSA9IHRvUm9tYW4oIG1fbGlzdEl0ZW0tPnZhbHVlKCks
IGZhbHNlICk7CisgICAgICAgIG1faXRlbSA9IHRvUm9tYW4obV9saXN0SXRlbS0+dmFsdWUoKSwg
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFVQUEVSX1JPTUFOOgotICAgICAgICBt
X2l0ZW0gPSB0b1JvbWFuKCBtX2xpc3RJdGVtLT52YWx1ZSgpLCB0cnVlICk7CisgICAgICAgIG1f
aXRlbSA9IHRvUm9tYW4obV9saXN0SXRlbS0+dmFsdWUoKSwgdHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTE9XRVJfR1JFRUs6CiAgICAgIHsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJf
Zm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkocmV2aXNp
b24gMTM0ODIpCisrKyByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTE2LDcgKzExMTYsNyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAgICAg
ICAgdmFsID0gKGludCkodmFsICsgMC41KTsKIAotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbCkpOworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoU3Ry
aW5nOjpudW1iZXIodmFsKSk7CiAKICAgICBRU2xpZGVyKiBzbGlkZXIgPSAoUVNsaWRlciopd2lk
Z2V0KCk7CiAgICAgIApAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnZh
bHVlQ2hhbmdlZChXaWRnZXQqKQogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UocHJlY2lzaW9u
LCAiZmxvYXQiKSkKICAgICAgICAgdmFsID0gKGludCkodmFsICsgMC41KTsKIAotICAgIGVsZW1l
bnQoKS0+c2V0VmFsdWUoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbCkpOworICAgIGVsZW1l
bnQoKS0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodmFsKSk7CiAgICAgCiAgICAgLy8gRmlyZSB0
aGUgImlucHV0IiBET00gZXZlbnQuCiAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChp
bnB1dEV2ZW50LCB0cnVlLCBmYWxzZSk7CkluZGV4OiBkb20vUG9zaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGRvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysgZG9tL1Bvc2l0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDEyICs2ODksMTIgQEAgdm9pZCBQb3NpdGlvbjo6
Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYgogewogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgCi0g
ICAgaWYgKGlzTnVsbCgpKSB7CisgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXN1bHQgPSAi
PG51bGw+IjsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAgICAgICBjaGFyIHNbMTAyNF07
CiAgICAgICAgIHJlc3VsdCArPSAib2Zmc2V0ICI7Ci0gICAgICAgIHJlc3VsdCArPSBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIobV9vZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpu
dW1iZXIobV9vZmZzZXQpOwogICAgICAgICByZXN1bHQgKz0gIiBvZiAiOwogICAgICAgICBtX25v
ZGUtPmZvcm1hdEZvckRlYnVnZ2VyKHMsIHNpemVvZihzKSk7CiAgICAgICAgIHJlc3VsdCArPSBz
OwpJbmRleDogZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TdHlsZWRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBkb20vU3R5bGVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyNiwxNSArMzI2LDE1IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRk
Q1NTTGVuZ3RoKE1hcHBlZEEKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IoTWFwcGVk
QXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmYykKIHsKICAgICAvLyB0aGlz
IGlzIHRoZSBvbmx5IGNhc2Ugbm8gY29sb3IgZ2V0cyBhcHBsaWVkIGluIElFLgotICAgIGlmICgg
IWMubGVuZ3RoKCkgKQorICAgIGlmICghYy5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFhdHRyLT5kZWNsKCkpIGNyZWF0ZU1hcHBlZERlY2woYXR0cik7CiAgICAgCi0gICAg
aWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGMsIGZhbHNlKSApCisgICAgaWYgKGF0
dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGMsIGZhbHNlKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgY29sb3IgPSBjLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICBTdHJpbmcgY29sb3IgPSBjOwogICAgIC8vIG5vdCBzb21ldGhpbmcgdGhhdCBmaXRzIHRo
ZSBzcGVjcy4KICAgICAKICAgICAvLyB3ZSdyZSBlbXVsYXRpbmcgSUVzIGNvbG9yIHBhcnNlciBo
ZXJlLiBJdCBtYXBzIHRyYW5zcGFyZW50IHRvIGJsYWNrLCBvdGhlcndpc2UgaXQgdHJpZXMgdG8g
YnVpbGQgYSByZ2IgdmFsdWUKQEAgLTM1MiwzMCArMzUyLDMwIEBAIHZvaWQgU3R5bGVkRWxlbWVu
dDo6YWRkQ1NTQ29sb3IoTWFwcGVkQXQKICAgICAvLyB1c2VkIGFzIGEgbm9ybWFsaXphdGlvbiBw
b2ludCB0byBub3JtYWxpemUgdG8gdmFsdWVzIGJldHdlZW4gMAogICAgIC8vIGFuZCAyNTUuCiAg
ICAgCi0gICAgaWYgKCBjb2xvci5sb3dlcigpICE9ICJ0cmFuc3BhcmVudCIgKSB7Ci0gICAgICAg
IGlmICggY29sb3JbMF0gPT0gJyMnICkKLSAgICAgICAgICAgIGNvbG9yLnJlbW92ZSggMCwgIDEg
KTsKKyAgICBpZiAoY29sb3IubG93ZXIoKSAhPSAidHJhbnNwYXJlbnQiKSB7CisgICAgICAgIGlm
IChjb2xvclswXSA9PSAnIycpCisgICAgICAgICAgICBjb2xvci5yZW1vdmUoMCwgIDEpOwogICAg
ICAgICBpbnQgYmFzaWNMZW5ndGggPSAoY29sb3IubGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAg
IGlmICggYmFzaWNMZW5ndGggPiAxICkgeworICAgICAgICBpZiAoYmFzaWNMZW5ndGggPiAxKSB7
CiAgICAgICAgICAgICAvLyBJRSBpZ25vcmVzIGNvbG9ycyB3aXRoIHRocmVlIGRpZ2l0cyBvciBs
ZXNzCiAgICAgICAgICAgICBpbnQgY29sb3JzWzNdID0geyAwLCAwLCAwIH07CiAgICAgICAgICAg
ICBpbnQgY29tcG9uZW50ID0gMDsKICAgICAgICAgICAgIGludCBwb3MgPSAwOwogICAgICAgICAg
ICAgaW50IG1heERpZ2l0ID0gYmFzaWNMZW5ndGgtMTsKLSAgICAgICAgICAgIHdoaWxlICggY29t
cG9uZW50IDwgMyApIHsKKyAgICAgICAgICAgIHdoaWxlIChjb21wb25lbnQgPCAzKSB7CiAgICAg
ICAgICAgICAgICAgLy8gc2VhcmNoIGZvcndhcmQgZm9yIGRpZ2l0cyBpbiB0aGUgc3RyaW5nCiAg
ICAgICAgICAgICAgICAgaW50IG51bURpZ2l0cyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KCBwb3MgPCAoaW50KWNvbG9yLmxlbmd0aCgpICYmIG51bURpZ2l0cyA8IGJhc2ljTGVuZ3RoICkg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgaGV4ID0gdG9IZXgoIGNvbG9yW3Bvc10gKTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdp
dHMgPCBiYXNpY0xlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaGV4ID0gdG9IZXgo
Y29sb3JbcG9zXSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdID0gKGNv
bG9yc1tjb21wb25lbnRdIDw8IDQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGhleCA+IDAg
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoZXggPiAwKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvcnNbY29tcG9uZW50XSArPSBoZXg7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtYXhEaWdpdCA9IGtNaW4oIG1heERpZ2l0LCBudW1EaWdpdHMgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1heERpZ2l0ID0ga01pbihtYXhEaWdpdCwgbnVtRGlnaXRzKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBudW1EaWdpdHMrKzsKICAgICAgICAg
ICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdo
aWxlICggbnVtRGlnaXRzKysgPCBiYXNpY0xlbmd0aCApCisgICAgICAgICAgICAgICAgd2hpbGUg
KG51bURpZ2l0cysrIDwgYmFzaWNMZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tj
b21wb25lbnRdIDw8PSA0OwogICAgICAgICAgICAgICAgIGNvbXBvbmVudCsrOwogICAgICAgICAg
ICAgfQpAQCAtMzg2LDEwICszODYsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NDb2xv
cihNYXBwZWRBdAogICAgICAgICAgICAgY29sb3JzWzBdID4+PSA0Km1heERpZ2l0OwogICAgICAg
ICAgICAgY29sb3JzWzFdID4+PSA0Km1heERpZ2l0OwogICAgICAgICAgICAgY29sb3JzWzJdID4+
PSA0Km1heERpZ2l0OwotICAgICAgICAgICAgLy8gYXNzZXJ0KCBjb2xvcnNbMF0gPCAweDEwMCAm
JiBjb2xvcnNbMV0gPCAweDEwMCAmJiBjb2xvcnNbMl0gPCAweDEwMCApOworICAgICAgICAgICAg
Ly8gYXNzZXJ0KGNvbG9yc1swXSA8IDB4MTAwICYmIGNvbG9yc1sxXSA8IDB4MTAwICYmIGNvbG9y
c1syXSA8IDB4MTAwKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3Iuc3ByaW50Zigi
IyUwMnglMDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0gKTsKLSAgICAg
ICAgICAgIGlmICggYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgU3RyaW5nKGNvbG9yKSwg
ZmFsc2UpICkKKyAgICAgICAgICAgIGNvbG9yLnNwcmludGYoIiMlMDJ4JTAyeCUwMngiLCBjb2xv
cnNbMF0sIGNvbG9yc1sxXSwgY29sb3JzWzJdKTsKKyAgICAgICAgICAgIGlmIChhdHRyLT5kZWNs
KCktPnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IGRvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBkb20vUmFuZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjk2LDE4ICsxMjk2LDE3IEBAIHZvaWQgUmFuZ2U6OmZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIgKmJ1ZmYKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFN0cmluZyBzOwogICAgIAot
ICAgIGlmICghbV9zdGFydENvbnRhaW5lciB8fCAhbV9lbmRDb250YWluZXIpIHsKKyAgICBpZiAo
IW1fc3RhcnRDb250YWluZXIgfHwgIW1fZW5kQ29udGFpbmVyKQogICAgICAgICByZXN1bHQgPSAi
PGVtcHR5PiI7Ci0gICAgfQogICAgIGVsc2UgewogICAgICAgICBjaGFyIHNbRm9ybWF0QnVmZmVy
U2l6ZV07CiAgICAgICAgIHJlc3VsdCArPSAiZnJvbSBvZmZzZXQgIjsKLSAgICAgICAgcmVzdWx0
ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmVz
dWx0ICs9IFN0cmluZzo6bnVtYmVyKG1fc3RhcnRPZmZzZXQpOwogICAgICAgICByZXN1bHQgKz0g
IiBvZiAiOwogICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBG
b3JtYXRCdWZmZXJTaXplKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAgICAgIHJlc3VsdCAr
PSAiIHRvIG9mZnNldCAiOwotICAgICAgICByZXN1bHQgKz0gRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKG1fZW5kT2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZzo6bnVtYmVyKG1fZW5k
T2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAgICAgICAgbV9lbmRDb250YWlu
ZXItPmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZlclNpemUpOwogICAgICAgICByZXN1
bHQgKz0gczsKSW5kZXg6IGRvbS94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20v
eG1sX3Rva2VuaXplci5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysgZG9tL3htbF90b2tlbml6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsMTUgKzUzNiwxNSBAQCB2b2lkIFhNTFRva2VuaXpl
cjo6ZXJyb3IoRXJyb3JUeXBlIHR5cGUsCiAKICAgICBpZiAodHlwZSA9PSBmYXRhbCB8fCAobV9l
cnJvckNvdW50IDwgbWF4RXJyb3JzICYmIG1fbGFzdEVycm9yTGluZSAhPSBsaW5lTnVtYmVyKCkg
JiYgbV9sYXN0RXJyb3JDb2x1bW4gIT0gY29sdW1uTnVtYmVyKCkpKSB7CiAKLSAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyBmb3JtYXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdDsKICAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIHdhcm5pbmc6Ci0gICAgICAgICAg
ICAgICAgZm9ybWF0ID0gRGVwcmVjYXRlZFN0cmluZygid2FybmluZyBvbiBsaW5lICUyIGF0IGNv
bHVtbiAlMzogJTEiKTsKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSAid2FybmluZyBvbiBsaW5l
ICUyIGF0IGNvbHVtbiAlMzogJXMiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBmYXRhbDoKICAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKICAgICAgICAg
ICAgIGNhc2Ugbm9uRmF0YWw6Ci0gICAgICAgICAgICAgICAgZm9ybWF0ID0gRGVwcmVjYXRlZFN0
cmluZygiZXJyb3Igb24gbGluZSAlMiBhdCBjb2x1bW4gJTM6ICUxIik7CisgICAgICAgICAgICAg
ICAgZm9ybWF0ID0gImVycm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlcyI7CiAgICAgICAg
IH0KIAogI2lmIFdJTjMyCkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVy
cm9yKEVycm9yVHlwZSB0eXBlLAogICAgICAgICBjaGFyICptOwogICAgICAgICB2YXNwcmludGYo
Jm0sIG1lc3NhZ2UsIGFyZ3MpOwogI2VuZGlmCi0gICAgICAgIG1fZXJyb3JNZXNzYWdlcyArPSBm
b3JtYXQuYXJnKG0pLmFyZyhsaW5lTnVtYmVyKCkpLmFyZyhjb2x1bW5OdW1iZXIoKSk7CisgICAg
ICAgIG1fZXJyb3JNZXNzYWdlcyArPSBTdHJpbmcoKS5zcHJpbnRmKGZvcm1hdCwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSwgbSk7CiAjaWYgIVdJTjMyCiAgICAgICAgIGZyZWUobSk7CiAj
ZW5kaWYKSW5kZXg6IGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzQ4MikKKysrIGVkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsOSArNTExLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgICAgICAgICAg
Y3VycmVudEZvbnRTaXplID0gY29tcHV0ZWRGb250U2l6ZShub2RlKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9IGRlc2lyZWRGb250U2l6ZSkgewotICAgICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyBkZXNpcmVkRm9udFNpemVTdHJpbmcgPSBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKTsKLSAgICAgICAgICAgIGRlc2lyZWRGb250U2l6
ZVN0cmluZyArPSAicHgiOwotICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQcm9wZXJ0
eShDU1NfUFJPUF9GT05UX1NJWkUsIGRlc2lyZWRGb250U2l6ZVN0cmluZywgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgICAgIGlubGluZVN0eWxlRGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRk9O
VF9TSVpFLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUpICsgInB4IiwgZmFsc2UsIGZh
bHNlKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbSwgc3R5bGVBdHRyLCBpbmxp
bmVTdHlsZURlY2wtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlubGluZVN0
eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCkgewpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IENoYW5nZUxvZwkocmV2aXNpb24gMTM0ODcpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxODggQEAKKzIwMDYtMDMtMjcgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVwbGFjZSBhIHdob2xlIGJ1bmNoIG1vcmUgRGVwcmVjYXRlZFN0cmluZyB3aXRoIFN0cmluZy4K
KworICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRN
TFRleHRBcmVhRWxlbWVudCBzZXRDb2xzOl0pOgorICAgICAgICAoLVtET01IVE1MVGV4dEFyZWFF
bGVtZW50IHNldFJvd3M6XSk6CisgICAgICAgICgtW0RPTUhUTUxPTGlzdEVsZW1lbnQgc2V0U3Rh
cnQ6XSk6CisgICAgICAgICgtW0RPTUhUTUxQcmVFbGVtZW50IHNldFdpZHRoOl0pOgorICAgICAg
ICAoLVtET01IVE1MSW1hZ2VFbGVtZW50IHNldEhlaWdodDpdKToKKyAgICAgICAgKC1bRE9NSFRN
TEltYWdlRWxlbWVudCBzZXRIc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1l
bnQgc2V0VnNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MSW1hZ2VFbGVtZW50IHNldFdpZHRo
Ol0pOgorICAgICAgICAoLVtET01IVE1MT2JqZWN0RWxlbWVudCBzZXRIc3BhY2U6XSk6CisgICAg
ICAgICgtW0RPTUhUTUxPYmplY3RFbGVtZW50IHNldFRhYkluZGV4Ol0pOgorICAgICAgICAoLVtE
T01IVE1MT2JqZWN0RWxlbWVudCBzZXRWc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxBcHBs
ZXRFbGVtZW50IHNldEhzcGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRNTEFwcGxldEVsZW1lbnQg
c2V0VnNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MQXJlYUVsZW1lbnQgc2V0VGFiSW5kZXg6
XSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUNvbEVsZW1lbnQgc2V0U3BhbjpdKToKKyAgICAg
ICAgKC1bRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgc2V0Q29sU3BhbjpdKToKKyAgICAgICAgKC1b
RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgc2V0Um93U3BhbjpdKToKKyAgICAgICAgKC1bRE9NSFRN
TEVtYmVkRWxlbWVudCBzZXRIZWlnaHQ6XSk6CisgICAgICAgICgtW0RPTUhUTUxFbWJlZEVsZW1l
bnQgc2V0V2lkdGg6XSk6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpudW1iZXJBc1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgor
ICAgICAgICAqIGNzcy9jc3NfdmFsdWVpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
aW1pdGl2ZVZhbHVlOjpjc3NUZXh0KToKKyAgICAgICAgKiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZSk6CisgICAgICAg
ICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpmb3JtYXRG
b3JEZWJ1Z2dlcik6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IpOgorICAg
ICAgICAqIGRvbS94bWxfdG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
aXplcjo6ZXJyb3IpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5
bGVDaGFuZ2UpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEpOgorICAgICAgICAqIGh0bWwvSFRNTEdlbmVy
aWNGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50OjpzZXRUYWJJbmRleCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldE1heExlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKToKKyAgICAgICAgKiBodG1s
L0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRTaXplKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Q29scyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRSb3dzKToKKyAgICAgICAgKiBodG1s
L2h0bWxfYmFzZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogaHRtbC9odG1sX2Jsb2NraW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSFJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgpOgorICAgICAgICAq
IGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEJvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0SHNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OnNldFZzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50OjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnNl
dFRhYkluZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxfaW5saW5laW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6c2V0VGFiSW5kZXgpOgorICAgICAgICAq
IGh0bWwvaHRtbF9saXN0aW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT0xpc3RFbGVt
ZW50OjpzZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50OjpzZXRWYWx1
ZSk6CisgICAgICAgICogaHRtbC9odG1sX29iamVjdGltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnNldFRhYkluZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxf
dGFibGVpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50
OjpzZXRDb2xTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Ojpz
ZXRSb3dTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFNw
YW4pOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpK
U0hUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU0hUTUxFbGVtZW50
OjphcmVhR2V0dGVyKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwOgorICAg
ICAgICAoS0pTOjpXaW5kb3c6OmlzU2FmZVNjcmlwdCk6CisgICAgICAgIChLSlM6OkxvY2F0aW9u
OjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKiBrc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdBbmdsZS5jcHA6CisgICAgICAgIChTVkdBbmdsZTo6c2V0VmFsdWVBc1N0cmluZyk6Cisg
ICAgICAgIChTVkdBbmdsZTo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0FuZ2xlLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcDoKKyAgICAgICAgKFNW
R0NvbG9yOjpzZXRSR0JDb2xvcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHA6
CisgICAgICAgIChTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAoU1ZHTGVu
Z3RoOjp2YWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmg6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWc6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNl
Zzo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdBcmNSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY1JlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnQ2xvc2VQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ2xv
c2VQYXRoOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdDbG9zZVBhdGg6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fi
czo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpwYXRoU2Vn
VHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6dG9TdHJpbmcpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnBhdGhT
ZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjp0b1N0cmluZyk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdMaW5ldG9BYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6dG9TdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OnBhdGhTZWdUeXBl
QXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxS
ZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnBh
dGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhdGhTZWdNb3ZldG8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9B
YnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01v
dmV0b0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTW92
ZXRvUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFNWR1BvbHlFbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDaGFuZ2UpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1Njcmlw
dEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIpOgorICAgICAg
ICAqIGt3cS9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKHF1b3RlQW5kRXNjYXBlTm9u
UHJpbnRhYmxlcyk6CisgICAgICAgIChub2RlUG9zaXRpb24pOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnN1Ym1pdEZvcm0pOgorICAgICAgICAq
IHBsYXRmb3JtL0F0b21pY1N0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5n
Ojp0b0ludCk6CisgICAgICAgICogcGxhdGZvcm0vQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6Om5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0NvbG9yLmg6CisgICAgICAgICog
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vRGVwcmVj
YXRlZFN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoS1VS
TDo6c2V0UG9ydCk6CisgICAgICAgIChLVVJMOjpwcmV0dHlVUkwpOgorICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZzo6c3ByaW50Zik6CisgICAgICAgIChXZWJDb3JlOjpTdHJp
bmc6Om51bWJlcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvcktleUV2ZW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1
cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OnZhbHVl
Q2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNhbGNNaW5NYXhXaWR0aCk6CisKIDIwMDYtMDMt
MjcgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBm
aXg6CkluZGV4OiBjc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzcGFyc2Vy
LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBjc3MvY3NzcGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwNywxMSArMjEwNywxMCBAQCBDU1NQcmltaXRpdmVWYWx1ZSAqQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yCiBDU1NQcmltaXRpdmVWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJzZUNvbG9yRnJvbVZh
bHVlKFZhbHVlKiB2YWx1ZSkKIHsKICAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsK
LSAgICBpZiAoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUiAmJgotICAgICAgICB2YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUg
PCAxMDAwMDAwLikgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cjsKKyAgICBpZiAoIXN0
cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2
YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgeworICAgICAg
ICBTdHJpbmcgc3RyOwogICAgICAgICBzdHIuc3ByaW50ZigiJTA2ZCIsIChpbnQpKHZhbHVlLT5m
VmFsdWUrLjUpKTsKLSAgICAgICAgaWYgKCFDU1NQYXJzZXI6OnBhcnNlQ29sb3Ioc3RyLCBjKSkK
KyAgICAgICAgaWYgKCFDU1NQYXJzZXI6OnBhcnNlQ29sb3Ioc3RyLmRlcHJlY2F0ZWRTdHJpbmco
KSwgYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IgfHwKICAgICAgICAgICAgICAgICB2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8CkluZGV4OiBjc3Mv
Y3NzX3ZhbHVlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL2Nzc192YWx1ZWltcGwuY3BwCShy
ZXZpc2lvbiAxMzQ4MikKKysrIGNzcy9jc3NfdmFsdWVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTM4LDU1ICs5MzgsNTUgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkg
Y29ucwogICAgICAgICAgICAgLy8gIyMjCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NfTlVNQkVSOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6
Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICIlIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAiJSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAg
ICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0i
OworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJlbSI7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfRVhTOgotICAgICAgICAgICAg
dGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOworICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJleCI7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUFg6Ci0gICAgICAgICAgICB0ZXh0ID0g
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJweCI7CisgICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB4IjsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENTU19DTToKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImNtIjsKKyAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiY20iOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTX01NOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJp
bmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibW0iOworICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtbSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NfSU46Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICJpbiI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgImluIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU19QVDoKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92
YWx1ZS5udW0pICsgInB0IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAicHQiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BD
OgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAicGMiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJwYyI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfREVHOgotICAg
ICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
ZGVnIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
ZGVnIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19SQUQ6Ci0gICAgICAg
ICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQi
OworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQi
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAg
ICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJncmFkIjsK
KyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAgICB0
ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtcyI7CisgICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19TOgotICAgICAgICAgICAgdGV4dCA9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicyI7CisgICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInMiOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTX0haOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOworICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJoeiI7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NfS0haOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU19ESU1FTlNJT046CiAgICAgICAgICAgICAvLyAjIyMKQEAgLTEwMjEsMTEgKzEw
MjEsMTEgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAg
ICAgICAgICAgIHRleHQgPSAicmdiYSgiOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHRleHQgPSAicmdiKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcihjb2xvci5yZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4
dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29sb3IuYmx1ZSgpKTsKKyAgICAgICAgICAg
IHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IucmVkKCkpICsgIiwgIjsKKyAgICAgICAgICAg
IHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOworICAgICAgICAg
ICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5ibHVlKCkpOwogICAgICAgICAgICAgaWYg
KGNvbG9yLmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcigoZmxvYXQpY29sb3IuYWxwaGEoKSAvIDB4RkYpOworICAg
ICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIFN0cmluZzo6bnVtYmVyKChmbG9hdCljb2xvci5h
bHBoYSgpIC8gMHhGRik7CiAgICAgICAgICAgICB0ZXh0ICs9ICIpIjsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkluZGV4OiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMTM0ODIpCisrKyBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk3LDEwICsyOTcsMTAgQEAgdm9pZCBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OnNldENzcwogfQogCiAvLyBEaXNwbGF5IGludGVnZXJzIGluIGludGVnZXIgZm9y
bWF0IGluc3RlYWQgb2YgIjEuMCIuCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXJBc1N0
cmluZyhkb3VibGUgbikKK3N0YXRpYyBTdHJpbmcgbnVtYmVyQXNTdHJpbmcoZG91YmxlIG4pCiB7
CiAgICAgbG9uZyBpID0gc3RhdGljX2Nhc3Q8bG9uZz4obik7Ci0gICAgcmV0dXJuIGkgPT0gbiA/
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpKSA6IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihu
KTsKKyAgICByZXR1cm4gaSA9PSBuID8gU3RyaW5nOjpudW1iZXIoaSkgOiBTdHJpbmc6Om51bWJl
cihuKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdApAQCAtMzkxLDEw
ICszOTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxfU0VQQVJBVEUpOwog
ICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkc6CiAgICAgewotICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHN0cmluZyhudW1iZXJBc1N0cmluZyhzdHlsZS0+aG9yaXpvbnRhbEJvcmRlclNw
YWNpbmcoKSkgKyAKLSAgICAgICAgICAgICJweCAiICsgCi0gICAgICAgICAgICBudW1iZXJBc1N0
cmluZyhzdHlsZS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCkpICsKLSAgICAgICAgICAgICJweCIp
OworICAgICAgICBTdHJpbmcgc3RyaW5nKG51bWJlckFzU3RyaW5nKHN0eWxlLT5ob3Jpem9udGFs
Qm9yZGVyU3BhY2luZygpKSArICJweCAiICsgbnVtYmVyQXNTdHJpbmcoc3R5bGUtPnZlcnRpY2Fs
Qm9yZGVyU3BhY2luZygpKSArICJweCIpOwogICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIH0KICAg
ICBjYXNlIENTU19QUk9QX19LSFRNTF9CT1JERVJfSE9SSVpPTlRBTF9TUEFDSU5HOgpJbmRleDog
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCShyZXZpc2lvbiAxMzQ4MikKKysrIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUo
KSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOyB9Ci0gICAgICAgIHZp
cnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5l
dyBTdHJpbmdJbXBsKCJDIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiQyAl
MSAlMiAlMyAlNCAlNSAlNiIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feDIpLmFyZyhtX3ky
KS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlw
ZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkMiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiQyAlLjZsZyAlLjZs
ZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDEsIG1feTEsIG1feDIsIG1feTIsIG1feCwg
bV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3VibGUgeCgp
IGNvbnN0OwpAQCAtNzIsOCArNzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0
dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19D
VUJJQ19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0
dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoImMiKTsgfQotICAgICAgICB2aXJ0
dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVk
U3RyaW5nOjpmcm9tTGF0aW4xKCJjICUxICUyICUzICU0ICU1ICU2IikuYXJnKG1feDEpLmFyZyht
X3kxKS5hcmcobV94MikuYXJnKG1feTIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiYyI7IH0K
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KS5zcHJpbnRmKCJjICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MSwg
bV95MSwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJs
ZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQW5nbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmdsZS5jcHAJKHJldmlzaW9uIDEzNDgy
KQorKysga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYs
OSBAQCBmbG9hdCBTVkdBbmdsZTo6dmFsdWVJblNwZWNpZmllZFVuaXRzKCkgCiAgICAgcmV0dXJu
IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzOwogfQogCi12b2lkIFNWR0FuZ2xlOjpzZXRWYWx1ZUFz
U3RyaW5nKFN0cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcpCit2b2lkIFNWR0FuZ2xlOjpzZXRWYWx1
ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBtX3ZhbHVlQXNTdHJpbmcgPSBTdHJp
bmcodmFsdWVBc1N0cmluZyk7CisgICAgbV92YWx1ZUFzU3RyaW5nID0gczsKIAogICAgIGJvb2wg
Yk9LOwogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gbV92YWx1ZUFzU3RyaW5nLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgmYk9LKTsKQEAgLTEwNiw5ICsxMDYsOSBAQCB2b2lkIFNW
R0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltCiAgICAgY2FsY3VsYXRlKCk7CiB9CiAK
LVN0cmluZ0ltcGwgKlNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK1N0cmluZyBTVkdB
bmdsZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgbV92YWx1ZUFzU3RyaW5nID0gRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKKyAgICBtX3Zh
bHVlQXNTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAK
ICAgICBzd2l0Y2gobV91bml0VHlwZSkgewogICAgICAgICBjYXNlIFNWR19BTkdMRVRZUEVfVU5T
UEVDSUZJRUQ6CkBAIC0xMjMsNyArMTIzLDcgQEAgU3RyaW5nSW1wbCAqU1ZHQW5nbGU6OnZhbHVl
QXNTdHJpbmcoKSBjbwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIHJldHVy
biBtX3ZhbHVlQXNTdHJpbmcuaW1wbCgpOworICAgIHJldHVybiBtX3ZhbHVlQXNTdHJpbmc7CiB9
CiAKIHZvaWQgU1ZHQW5nbGU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdQYXRoU2VnTGluZXRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5l
dG8uaAkocmV2aXNpb24gMTM0ODIpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9BYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fQUJT
OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJMIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXBy
ZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMSgiTCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiTCI7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5z
cHJpbnRmKCJMICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRY
KGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9SZWwoKTsK
IAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gUEFUSFNFR19MSU5FVE9fUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAq
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJsIik7
IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgibCAlMSAlMiIpLmFyZyhtX3gpLmFy
ZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiAibCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJsICUuNmxnICUuNmxnIiwgbV94LCBtX3kp
OyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29u
c3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAkocmV2aXNpb24g
MTM0ODIpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0
dWFsIH5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicygpOwogCiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVU
T19IT1JJWk9OVEFMX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiSCIpOyB9Ci0gICAg
ICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIkggJTEiKS5hcmcobV94KTsgfQorICAgICAgICB2
aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkgiOyB9
CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
KCkuc3ByaW50ZigiSCAlLjZsZyIsIG1feCk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91Ymxl
KTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwo
KTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3Qg
eyByZXR1cm4gUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUw7IH0KLSAgICAgICAgdmlydHVh
bCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0
cmluZ0ltcGwoImgiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJoICUxIiku
YXJnKG1feCk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigp
IGNvbnN0IHsgcmV0dXJuICJoIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoImggJS42bGciLCBtX3gpOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGVu
Z3RoLmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDEzICsxMDksMTIgQEAgZmxvYXQgU1ZHTGVuZ3RoOjp2YWx1ZUlu
U3BlY2lmaWVkVW5pdHMoKQogICAgIHJldHVybiBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0czsKIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotdm9pZCBT
VkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1wbCogcykKK3ZvaWQgU1ZHTGVuZ3Ro
OjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBTdHJpbmcgdmFsdWVB
c1N0cmluZyhzKTsKLSAgICBpZih2YWx1ZUFzU3RyaW5nLmlzRW1wdHkoKSkKKyAgICBpZihzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZUFz
UVN0cmluZyA9IHZhbHVlQXNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0
ZWRTdHJpbmcgdmFsdWVBc1FTdHJpbmcgPSBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgIGRv
dWJsZSBjb252ZXJ0ZWROdW1iZXIgPSAwOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gdmFsdWVB
c1FTdHJpbmcubGF0aW4xKCk7CkBAIC0xNTQsOSArMTUzLDkgQEAgdm9pZCBTVkdMZW5ndGg6OnNl
dFZhbHVlQXNTdHJpbmcoU3RyaW5nSQogICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAKLVN0cmluZ0lt
cGwgKlNWR0xlbmd0aDo6dmFsdWVBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgU1ZHTGVuZ3RoOjp2
YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKSArIFVuaXRUZXh0W21f
dW5pdFR5cGVdKTsKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZUluU3BlY2lmaWVk
VW5pdHMpICsgVW5pdFRleHRbbV91bml0VHlwZV07CiB9CiAKIHZvaWQgU1ZHTGVuZ3RoOjpuZXdW
YWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUlu
U3BlY2lmaWVkVW5pdHMpCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoLmgJKHJldmlzaW9uIDEzNDgyKQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKCk7
CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOyB9Ci0gICAgICAgIHZpcnR1
YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBT
dHJpbmdJbXBsKCJTIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiUyAlMSAl
MiAlMyAlNCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJT
IjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0
cmluZygpLnNwcmludGYoIlMgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gyLCBtX3kyLCBt
X3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91Ymxl
IHgoKSBjb25zdDsKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCgpOwogCiAgICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VH
X0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwg
KnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgicyIp
OyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInMgJTEgJTIgJTMgJTQiKS5hcmco
bV94MikuYXJnKG1feTIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAicyI7IH0KKyAgICAgICAg
dmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRm
KCJzICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CiAK
ICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAkocmV2aXNpb24gMTM0ODIp
CisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5T
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fUVVB
RFJBVElDX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiUSIpOyB9Ci0gICAgICAgIHZp
cnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmc6OmZyb21MYXRpbjEoIlEgJTEgJTIgJTMgJTQiKS5hcmcobV94MSkuYXJnKG1feTEp
LmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBl
QXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiUSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJRICUuNmxnICUuNmxn
ICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBz
ZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC02NCw4ICs2NCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOyB9Ci0gICAg
ICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG5ldyBTdHJpbmdJbXBsKCJxIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MSgicSAlMSAlMiAlMyAlNCIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feCkuYXJnKG1feSk7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsg
cmV0dXJuICJxIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpLnNwcmludGYoInEgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gx
LCBtX3kxLCBtX3gsIG1feSk7IH0KICAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAg
ICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMzQ4MikKKysrIGtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQo
RG9jCiAgICAgICAgICAgICBzdmdEb2N1bWVudC0+ZGlzcGF0Y2hSZWN1cnNpdmVFdmVudChldmVu
dC5nZXQoKSwgc3ZnRG9jdW1lbnQtPmxhc3RDaGlsZCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUg
IiA8PCAobGluZW5vICE9IC0xID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGxpbmVubykgOiBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC0+dG9T
dHJpbmcoZXhlYykuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CisgICAgICAgIGtkRGVidWco
KSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUgIiA8PCAobGlu
ZW5vICE9IC0xID8gU3RyaW5nOjpudW1iZXIobGluZW5vKSA6IERlcHJlY2F0ZWRTdHJpbmc6OmZy
b21MYXRpbjEoIk4vQSIpKSAgPDwgIiAiIDw8IGV4VmFsLT50b1N0cmluZyhleGVjKS5kZXByZWNh
dGVkU3RyaW5nKCkgPDwgZW5kbDsKICAgICB9CiAgICAgZWxzZSBpZihjb21wLmNvbXBsVHlwZSgp
ID09IEtKUzo6UmV0dXJuVmFsdWUpCiAgICAgICAgIGtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVs
ZW1lbnRdIFJldHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGVjbWFFbmdp
bmUtPmdsb2JhbEV4ZWMoKSkuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0FyYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2Vn
QXJjLmgJKHJldmlzaW9uIDEzNDgyKQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2
aXJ0dWFsIH5TVkdQYXRoU2VnQXJjQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQVJDX0FCUzsgfQotICAg
ICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBuZXcgU3RyaW5nSW1wbCgiQSIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoIkEgJTEgJTIgJTMgJTQgJTUgJTYgJTciKS5hcmcobV9yMSkuYXJnKG1fcjIpLmFyZyhtX2Fu
Z2xlKS5hcmcobV9sYXJnZUFyY0ZsYWcpLmFyZyhtX3N3ZWVwRmxhZykuYXJnKG1feCkuYXJnKG1f
eSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0
IHsgcmV0dXJuICJBIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42
bGcgJS42bGciLCBtX3IxLCBtX3IyLCBtX2FuZ2xlLCBtX2xhcmdlQXJjRmxhZywgbV9zd2VlcEZs
YWcsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUgeCk7CiAgICAgICAg
IGRvdWJsZSB4KCkgY29uc3Q7CkBAIC03Nyw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdBcmNSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19BUkNfUkVM
OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJhIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXBy
ZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMSgiYSAlMSAlMiAlMyAlNCAlNSAlNiAlNyIpLmFyZyhtX3IxKS5hcmcobV9yMiku
YXJnKG1fYW5nbGUpLmFyZyhtX2xhcmdlQXJjRmxhZykuYXJnKG1fc3dlZXBGbGFnKS5hcmcobV94
KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVy
KCkgY29uc3QgeyByZXR1cm4gImEiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiYSAlLjZsZyAlLjZsZyAlLjZsZyAl
ZCAlZCAlLjZsZyAlLjZsZyIsIG1fcjEsIG1fcjIsIG1fYW5nbGUsIG1fbGFyZ2VBcmNGbGFnLCBt
X3N3ZWVwRmxhZywgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSB4KTsK
ICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92
ZXRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaAkocmV2aXNp
b24gMTM0ODIpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNW
R1BhdGhTZWdNb3ZldG9BYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBh
dGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19NT1ZFVE9fQUJTOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJNIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
TSAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiTSI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJNICUu
NmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAg
ICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdNb3ZldG9SZWwoKTsKIAogICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNF
R19NT1ZFVE9fUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVB
c0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJtIik7IH0KLSAgICAgICAg
dmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMSgibSAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVy
biAibSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKS5zcHJpbnRmKCJtICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAg
ICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdQYXRoU2VnQ2xvc2VQYXRoLmgJKHJldmlzaW9uIDEzNDgyKQorKysga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdDbG9zZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ2xvc2VQYXRoKCk7CiAKICAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFBBVEhTRUdfQ0xPU0VQQVRIOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNl
Z1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJaIik7IH0KLSAg
ICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
IloiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25z
dCB7IHJldHVybiAiWiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiAiWiI7IH0KICAgICB9OwogfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0xlbmd0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gMTM0ODIp
CisrKyBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRz
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0IHZh
bHVlSW5TcGVjaWZpZWRVbml0cyk7CiAKLSAgICAgICAgU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmlu
ZygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFs
dWVBc1N0cmluZyk7CisgICAgICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgICAgICB2b2lk
IG5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZh
bHVlSW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5p
dHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCShyZXZpc2lvbiAxMzQ4MikK
KysrIGtzdmcyL3N2Zy9TVkdDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw0MyArMjE4
LDM4IEBAIHZvaWQgU1ZHQ29sb3I6OnNldFJHQkNvbG9yKFN0cmluZ0ltcGwgKnIKIHsKICAgICBt
X3JnYkNvbG9yID0gcmdiQ29sb3I7CiAKLSAgICBpZihtX3JnYkNvbG9yLmlzTnVsbCgpKQorICAg
IGlmIChtX3JnYkNvbG9yLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBEZXByZWNh
dGVkU3RyaW5nIHBhcnNlID0gbV9yZ2JDb2xvci5kZXByZWNhdGVkU3RyaW5nKCkuc3RyaXBXaGl0
ZVNwYWNlKCk7Ci0gICAgaWYocGFyc2Uuc3RhcnRzV2l0aCgicmdiKCIpKQotICAgIHsKKyAgICBp
ZiAocGFyc2Uuc3RhcnRzV2l0aCgicmdiKCIpKSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmdM
aXN0IGNvbG9ycyA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnLCcsIHBhcnNlKTsKICAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyByID0gY29sb3JzWzBdLnJpZ2h0KChjb2xvcnNbMF0ubGVu
Z3RoKCkgLSA0KSk7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZyA9IGNvbG9yc1sxXTsKICAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBiID0gY29sb3JzWzJdLmxlZnQoKGNvbG9yc1syXS5sZW5n
dGgoKSAtIDEpKTsKICAgICAKLSAgICAgICAgaWYoci5jb250YWlucygiJSIpKSB7CisgICAgICAg
IGlmIChyLmNvbnRhaW5zKCIlIikpIHsKICAgICAgICAgICAgIHIgPSByLmxlZnQoci5sZW5ndGgo
KSAtIDEpOwotICAgICAgICAgICAgciA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpbnQoKGRv
dWJsZSgyNTUgKiByLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7CisgICAgICAgICAgICByID0gU3Ry
aW5nOjpudW1iZXIoaW50KChkb3VibGUoMjU1ICogci50b0RvdWJsZSgpKSAvIDEwMC4wKSkpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKGcuY29udGFpbnMoIiUi
KSkKLSAgICAgICAgeworICAgICAgICBpZiAoZy5jb250YWlucygiJSIpKSB7CiAgICAgICAgICAg
ICBnID0gZy5sZWZ0KGcubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgICAgIGcgPSBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIoaW50KChkb3VibGUoMjU1ICogZy50b0RvdWJsZSgpKSAvIDEwMC4wKSkp
OworICAgICAgICAgICAgZyA9IFN0cmluZzo6bnVtYmVyKGludCgoZG91YmxlKDI1NSAqIGcudG9E
b3VibGUoKSkgLyAxMDAuMCkpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIH0KICAgICAK
LSAgICAgICAgaWYoYi5jb250YWlucygiJSIpKQotICAgICAgICB7CisgICAgICAgIGlmIChiLmNv
bnRhaW5zKCIlIikpIHsKICAgICAgICAgICAgIGIgPSBiLmxlZnQoYi5sZW5ndGgoKSAtIDEpOwot
ICAgICAgICAgICAgYiA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUg
KiBiLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7CisgICAgICAgICAgICBiID0gU3RyaW5nOjpudW1i
ZXIoaW50KChkb3VibGUoMjU1ICogYi50b0RvdWJsZSgpKSAvIDEwMC4wKSkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fcUNvbG9yID0gQ29sb3Ioci50b0ludCgp
LCBnLnRvSW50KCksIGIudG9JbnQoKSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7CisgICAgfSBl
bHNlIHsKICAgICAgICAgU3RyaW5nIGNvbG9yTmFtZSA9IG1fcmdiQ29sb3IubG93ZXIoKTsKLSAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZyBuYW1lID0gY29sb3JOYW1lLmRlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2xvck5hbWU7CiAvLyAgICAgICAgaW50IGNvbCA9
IFdlYkNvcmU6OmdldFZhbHVlSUQobmFtZS5hc2NpaSgpLCBuYW1lLmxlbmd0aCgpKTsKIC8vICAg
ICAgICBpZihjb2wgPT0gMCkKLSAgICAgICAgICAgIG1fcUNvbG9yID0gQ29sb3IobmFtZSk7Cisg
ICAgICAgICAgICBtX3FDb2xvciA9IENvbG9yKG5hbWUuZGVwcmVjYXRlZFN0cmluZygpKTsKIC8v
ICAgICAgICBlbHNlCiAvLyAgICAgICAgICAgIG1fcUNvbG9yID0gY21hcFtjb2wgLSBTVkdDU1Nf
VkFMX0FMSUNFQkxVRV07CiAgICAgfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuZ2xlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDEzNDgyKQorKysga3N2ZzIv
c3ZnL1NWR0FuZ2xlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdm9pZCBzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHMoZmxvYXQgdmFs
dWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRz
KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltcGwgKnZh
bHVlQXNTdHJpbmcpOwotICAgICAgICBTdHJpbmdJbXBsICp2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICAgICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgICAgICB2b2lkIG5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZp
ZWRVbml0cyk7CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5oCShyZXZpc2lvbiAxMzQ4MikKKysrIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpZiBTVkdf
U1VQUE9SVAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCi0jaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlICJrc3ZnLmgiCiAKQEAgLTQw
LDggKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNl
ZygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25z
dCB7IHJldHVybiBQQVRIU0VHX1VOS05PV047IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBs
ICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIiIp
OyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIiIpOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAg
ICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICIiOyB9CiAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKm1fY29udGV4dDsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBrc3ZnMi9zdmcvU1ZH
UG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgU1ZH
UG9seUVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUNoYW4KICAgICBpbnQgbGVuID0gcG9pbnRzKCkt
Pm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAg
ICAgICAgIFNWR1BvaW50ICpwID0gcG9pbnRzKCktPmdldEl0ZW0oaSk7Ci0gICAgICAgIF9wb2lu
dHMgKz0gRGVwcmVjYXRlZFN0cmluZygiJTEgJTIgIikuYXJnKHAtPngoKSkuYXJnKHAtPnkoKSk7
CisgICAgICAgIF9wb2ludHMgKz0gU3RyaW5nKCkuc3ByaW50ZigiJS42bGcgJS42bGcgIiwgcC0+
eCgpLCBwLT55KCkpOwogICAgIH0KIAogICAgIFN0cmluZyBwKCJwb2ludHMiKTsKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCShyZXZpc2lvbiAx
MzQ4MikKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKCk7CiAKICAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBB
VEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0
cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5n
SW1wbCgiVCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIlQgJTEgJTIiKS5h
cmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFz
TGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIlQiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiVCAlLjZsZyAlLjZsZyIs
IG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3Vi
bGUgeCgpIGNvbnN0OwpAQCAtNTYsOCArNTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAg
ICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCgpOwogCiAgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQ
QVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw7IH0KLSAgICAgICAgdmlydHVhbCBT
dHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmlu
Z0ltcGwoInQiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmco
KSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJ0ICUxICUyIiku
YXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVB
c0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJ0IjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0
b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoInQgJS42bGcgJS42bGci
LCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91
YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJKHJl
dmlzaW9uIDEzNDgyKQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWx+U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKCk7CiAKICAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElO
RVRPX1ZFUlRJQ0FMX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiViIpOyB9Ci0gICAg
ICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIlYgJTEiKS5hcmcobV95KTsgfQorICAgICAgICB2
aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIlYiOyB9
CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
KCkuc3ByaW50ZigiViAlLjZsZyIsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFkoZG91Ymxl
KTsKICAgICAgICAgZG91YmxlIHkoKSBjb25zdDsKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKCk7
CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIFBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0
cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5n
SW1wbCgidiIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInYgJTEiKS5hcmco
bV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29u
c3QgeyByZXR1cm4gInYiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigidiAlLjZsZyIsIG1feSk7IH0KIAogICAgICAg
ICB2b2lkIHNldFkoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHkoKSBjb25zdDsKSW5kZXg6IGtz
dmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTggKzExMSwxNyBAQCB2b2lkIFNWR1VzZUVsZW1l
bnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCktPnZhbHVl
KCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3cgPSB3aWR0aCgp
LT5iYXNlVmFsKCktPnZhbHVlKCksIF9oID0gaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
ICAgICAKLSAgICBTdHJpbmcgd1N0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihfdyk7
Ci0gICAgU3RyaW5nIGhTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoX2gpOworICAg
IFN0cmluZyB3U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoX3cpOworICAgIFN0cmluZyBoU3RyaW5n
ID0gU3RyaW5nOjpudW1iZXIoX2gpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyB0cmFucyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInRy
YW5zbGF0ZSglMSwgJTIpIikuYXJnKF94KS5hcmcoX3kpOwotICAgIGlmKHRhcmdldC0+aGFzVGFn
TmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkKLSAgICB7CisgICAgU3RyaW5nIHRyYW5zID0gU3Ry
aW5nKCkuc3ByaW50ZigidHJhbnNsYXRlKCVmLCAlZikiLCBfeCwgX3kpOworICAgIGlmKHRhcmdl
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkgewogICAgICAgICBSZWZQdHI8U1ZH
RWxlbWVudD4gZHVtbXkgPSBuZXcgU1ZHU1ZHRWxlbWVudChTVkdOYW1lczo6c3ZnVGFnLCBnZXRE
b2N1bWVudCgpKTsKLSAgICAgICAgaWYoX3cgPiAwKQotICAgICAgICAgICAgZHVtbXktPnNldEF0
dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3U3RyaW5nLmltcGwoKSk7Ci0gICAgICAgIGlm
KF9oID4gMCkKLSAgICAgICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIsIGhTdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgaWYgKF93ID4gMCkKKyAgICAgICAgICAg
IGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZyk7CisgICAg
ICAgIGlmIChfaCA+IDApCisgICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVz
OjpoZWlnaHRBdHRyLCBoU3RyaW5nKTsKICAgICAgICAgCiAgICAgICAgIFNWR1N5bWJvbEVsZW1l
bnQgKnN5bWJvbCA9IHN0YXRpY19jYXN0PFNWR1N5bWJvbEVsZW1lbnQgKj4odGFyZ2V0KTsKICAg
ICAgICAgaWYgKHN5bWJvbC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsK
QEAgLTEzMiwyOCArMTMxLDI0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigp
CiAgICAgICAgIHRhcmdldC0+Y2xvbmVDaGlsZE5vZGVzKGR1bW15LmdldCgpKTsKIAogICAgICAg
ICBSZWZQdHI8U1ZHRWxlbWVudD4gZHVtbXkyID0gbmV3IFNWR0R1bW15RWxlbWVudChTVkdOYW1l
czo6Z1RhZywgZ2V0RG9jdW1lbnQoKSk7Ci0gICAgICAgIGR1bW15Mi0+c2V0QXR0cmlidXRlKFNW
R05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBTdHJpbmcodHJhbnMpKTsKKyAgICAgICAgZHVtbXkyLT5z
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5zKTsKICAgICAgICAgCiAg
ICAgICAgIGFwcGVuZENoaWxkKGR1bW15MiwgZWMpOwogICAgICAgICBkdW1teTItPmFwcGVuZENo
aWxkKGR1bW15LCBlYyk7Ci0gICAgfQotICAgIGVsc2UgaWYodGFyZ2V0LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpzdmdUYWcpKQotICAgIHsKKyAgICB9IGVsc2UgaWYodGFyZ2V0LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpzdmdUYWcpKSB7CiAgICAgICAgIFJlZlB0cjxTVkdEdW1teUVsZW1lbnQ+IGR1
bW15ID0gbmV3IFNWR0R1bW15RWxlbWVudChTVkdOYW1lczo6Z1RhZywgZ2V0RG9jdW1lbnQoKSk7
Ci0gICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIFN0
cmluZyh0cmFucykpOworICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFu
c2Zvcm1BdHRyLCB0cmFucyk7CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8U1ZHRWxlbWVudD4g
cm9vdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LT5jbG9uZU5vZGUo
dHJ1ZSkpOwogICAgICAgICBpZihoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0g
ICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmlu
Zy5pbXBsKCkpOworICAgICAgICAgICAgcm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0
aEF0dHIsIHdTdHJpbmcpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIHJvb3QtPnNl
dEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZyk7CiAgICAgICAgICAgICAK
ICAgICAgICAgYXBwZW5kQ2hpbGQoZHVtbXksIGVjKTsKICAgICAgICAgZHVtbXktPmFwcGVuZENo
aWxkKHJvb3QucmVsZWFzZSgpLCBlYyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7CisgICAgfSBl
bHNlIHsKICAgICAgICAgUmVmUHRyPFNWR0R1bW15RWxlbWVudD4gZHVtbXkgPSBuZXcgU1ZHRHVt
bXlFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBnZXREb2N1bWVudCgpKTsKICAgICAgICAgZHVtbXkt
PnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgdHJhbnMpOwogICAgICAgICAK
SW5kZXg6IGtzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL2Nz
cy9TVkdDU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzQ4MikKKysrIGtzdmcyL2Nzcy9TVkdDU1NQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsOSArMzQ1LDkgQEAgQ1NTVmFsdWUgKkNT
U1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiAgICAgS0RPTUNTU1ZhbHVlICp2YWx1ZSA9IHZhbHVl
TGlzdC0+Y3VycmVudCgpOwogICAgIGlmKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYKICAgICAgICB2YWx1ZS0+ZlZhbHVlID49IDAuICYm
IHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0
cjsKKyAgICAgICAgU3RyaW5nIHN0cjsKICAgICAgICAgc3RyLnNwcmludGYoIiUwNmQiLCAoaW50
KSh2YWx1ZS0+ZlZhbHVlKy41KSk7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHX1BB
SU5UVFlQRV9SR0JDT0xPUiwgMCwgbmV3IFN0cmluZ0ltcGwoc3RyKSk7CisgICAgICAgIHJldHVy
biBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgMCwgc3RyLmltcGwoKSk7CiAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNP
TE9SKSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSAiIyIgKyBkb21TdHJpbmcodmFsdWUtPnN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwg
MCwgc3RyLmltcGwoKSk7CkBAIC0zNzksOSArMzc5LDggQEAgQ1NTVmFsdWUgKkNTU1BhcnNlcjo6
cGFyc2VTVkdQYWludCgpCiAgICAgICAgIHIgPSBrTWF4KDAsIGtNaW4oMjU1LCByKSk7CiAgICAg
ICAgIGcgPSBrTWF4KDAsIGtNaW4oMjU1LCBnKSk7CiAgICAgICAgIGIgPSBrTWF4KDAsIGtNaW4o
MjU1LCBiKSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwotICAgICAgICBzdHIuc3By
aW50ZigicmdiKCVkLCAlZCwgJWQpIiwgciwgZywgYik7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZH
UGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgMCwgbmV3IFN0cmluZ0ltcGwoc3RyKSk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVfUkdCQ09M
T1IsIDAsIFN0cmluZygpLnNwcmludGYoInJnYiglZCwgJWQsICVkKSIsIHIsIGcsIGIpLmltcGwo
KSk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zOTIsMTIgKzM5MSw5
IEBAIENTU1ZhbHVlICpDU1NQYXJzZXI6OnBhcnNlU1ZHUGFpbnQoKQogQ1NTVmFsdWUgKkNTU1Bh
cnNlcjo6cGFyc2VTVkdDb2xvcigpCiB7CiAgICAgS0RPTUNTU1ZhbHVlICp2YWx1ZSA9IHZhbHVl
TGlzdC0+Y3VycmVudCgpOwotICAgIGlmKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYKLSAgICAgICB2YWx1ZS0+ZlZhbHVlID49IDAuICYm
IHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0
cjsKLSAgICAgICAgc3RyLnNwcmludGYoIiUwNmQiLCAoaW50KSh2YWx1ZS0+ZlZhbHVlKy41KSk7
Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IobmV3IFN0cmluZ0ltcGwoc3RyKSk7Ci0gICAg
fSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9S
KSB7CisgICAgaWYgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIgJiYgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZhbHVlIDwgMTAw
MDAwMC4pCisgICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoU3RyaW5nKCkuc3ByaW50ZigiJTA2
ZCIsIChpbnQpKHZhbHVlLT5mVmFsdWUrLjUpKS5pbXBsKCkpOworICAgIGVsc2UgaWYgKHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpIHsKICAgICAgICAgU3Ry
aW5nIHN0ciA9ICIjIiArIGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKICAgICAgICAgcmV0dXJu
IG5ldyBTVkdDb2xvcihzdHIuaW1wbCgpKTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKQpAQCAtNDI1LDkgKzQyMSw4IEBA
IENTU1ZhbHVlICpDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IoKQogICAgICAgICByID0ga01heCgw
LCBrTWluKDI1NSwgcikpOwogICAgICAgICBnID0ga01heCgwLCBrTWluKDI1NSwgZykpOwogICAg
ICAgICBiID0ga01heCgwLCBrTWluKDI1NSwgYikpOwotICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHN0cjsKLSAgICAgICAgc3RyLnNwcmludGYoInJnYiglZCwgJWQsICVkKSIsIHIsIGcsIGIpOwot
ICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKG5ldyBTdHJpbmdJbXBsKHN0cikpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihTdHJpbmcoKS5zcHJpbnRmKCJyZ2IoJWQs
ICVkLCAlZCkiLCByLCBnLCBiKS5pbXBsKCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJl
dHVybiAwOwpJbmRleDoga3dxL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3
cS9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTM0ODIpCisrKyBrd3EvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw4ICsyMjcsOCBAQCBzdGF0aWMgUVRl
eHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlCiAKIHN0YXRpYyBTdHJpbmcgcXVvdGVBbmRF
c2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHJlc3VsdDsKLSAgICByZXN1bHQgKz0gJyInOworICAgIFN0cmluZyByZXN1bHQ7CisgICAg
cmVzdWx0ICs9IFFDaGFyKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxl
bmd0aCgpOyArK2kpIHsKICAgICAgICAgUUNoYXIgYyA9IHNbaV07CiAgICAgICAgIGlmIChjID09
ICdcXCcpCkBAIC0yMzYsMTkgKzIzNiwxNiBAQCBzdGF0aWMgU3RyaW5nIHF1b3RlQW5kRXNjYXBl
Tm9uUHJpbnRhYmxlCiAgICAgICAgIGVsc2UgaWYgKGMgPT0gJyInKQogICAgICAgICAgICAgcmVz
dWx0ICs9ICJcXFwiIjsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IGMudW5pY29kZSgp
ID09IDB4MDBBMCkKLSAgICAgICAgICAgIHJlc3VsdCArPSAnICc7CisgICAgICAgICAgICByZXN1
bHQgKz0gUUNoYXIoJyAnKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCB1ID0gYy51bmljb2RlKCk7CiAgICAgICAgICAgICBpZiAodSA+PSAweDIwICYmIHUgPCAw
eDdGKQogICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBoZXg7Ci0gICAgICAgICAgICAgICAgaGV4
LnNwcmludGYoIlxceHslWH0iLCB1KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gaGV4Owot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBTdHJpbmcoKS5zcHJpbnRmKCJcXHh7JVh9IiwgdSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
cmVzdWx0ICs9ICciJzsKKyAgICByZXN1bHQgKz0gUUNoYXIoJyInKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0zODEsOSArMzc4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoUVRl
eHRTdHJlYW0gJnRzLAogICAgIH0KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBv
c2l0aW9uKE5vZGUgKm5vZGUpCitzdGF0aWMgU3RyaW5nIG5vZGVQb3NpdGlvbihOb2RlICpub2Rl
KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyByZXN1bHQ7CiAK
ICAgICBOb2RlICpwOwogICAgIGZvciAoTm9kZSAqbiA9IG5vZGU7IG47IG4gPSBwKSB7CkBAIC0z
OTEsNyArMzg4LDcgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZAog
ICAgICAgICBpZiAobiAhPSBub2RlKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAg
ICAgICAgaWYgKHApCi0gICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIobi0+bm9kZUluZGV4KCkpICsgIiB7IiArIGdldFRhZ05hbWUobikgKyAi
fSI7CisgICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBTdHJpbmc6Om51bWJlcihuLT5u
b2RlSW5kZXgoKSkgKyAiIHsiICsgZ2V0VGFnTmFtZShuKSArICJ9IjsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0ICs9ICJkb2N1bWVudCI7CiAgICAgfQpJbmRleDogcGFnZS9GcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzNDgyKQorKysg
cGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTksMTEgKzE1MTksMTAgQEAgdm9p
ZCBGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBjaGFyICphY3RpbwogICAgICAgICAgdG1wYm9keS5y
ZXBsYWNlKCcrJywgJyAnKTsKICAgICAgICAgIHRtcGJvZHkgPSBLVVJMOjpkZWNvZGVfc3RyaW5n
KHRtcGJvZHkpOyAgLy8gRGVjb2RlIHRoZSByZXN0IG9mIGl0CiAgICAgICAgICBib2R5RW5jID0g
S1VSTDo6ZW5jb2RlX3N0cmluZyh0bXBib2R5KTsgIC8vIFJlY29kZSBmb3IgdGhlIFVSTAotICAg
ICAgfSBlbHNlIHsKKyAgICAgIH0gZWxzZQogICAgICAgICAgYm9keUVuYyA9IEtVUkw6OmVuY29k
ZV9zdHJpbmcoZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkpOwotICAgICAgfQogCi0gICAgICBu
dnBzLmFwcGVuZChEZXByZWNhdGVkU3RyaW5nKCJib2R5PSUxIikuYXJnKGJvZHlFbmMpKTsKKyAg
ICAgIG52cHMuYXBwZW5kKFN0cmluZygpLnNwcmludGYoImJvZHk9JXMiLCBib2R5RW5jLmxhdGlu
MSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgICAgcSA9IG52cHMuam9pbigiJiIpOwogICAg
ICAgdS5zZXRRdWVyeShxKTsKICAgfSAK
</data>
<flag name="review"
          id="1956"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7343</attachid>
            <date>2006-03-27 20:01:28 -0800</date>
            <delta_ts>2006-03-27 20:02:51 -0800</delta_ts>
            <desc>Bigger patch, ultra slow however.</desc>
            <filename>new.patch</filename>
            <type>text/plain</type>
            <size>146141</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzNDg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDYtMDMtMjUgIEVyaWMgU2VpZGVsICA8ZXNl
aWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvUGx1Zy1pbnMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvZG9tL1dpbmRvdy9QbHVnLWlucy5odG1sOgorICAgICAgICAqIGZhc3QvZG9tL3By
b3RvdHlwZS1jaGFpbi1leHBlY3RlZC50eHQ6CisKIDIwMDYtMDMtMjMgIEVyaWMgU2VpZGVsICA8
ZXNlaWRlbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgbWpzLgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L1BsdWctaW5zLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L1BsdWctaW5zLmh0bWwJKHJldmlzaW9uIDEzNDg3KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L1BsdWctaW5zLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDkgQEAKICAgICA8Ym9keT4KICAgICAgICAgPGRpdiBpZD0ibWFyZ2lu
cyI+CiAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCI+
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CiAKICAgICAgICAgICAgICAgICAvLyBMb2NhbGl6ZXJzOiBUcmFuc2xhdGUgdGhlIHRp
dGxlIGFib3ZlLCBhbmQgdGhlc2Ugc2l4IHN0cmluZ3MsIGFuZCBsZWF2ZSB0aGUgcmVzdCBvZiB0
aGUgZmlsZSBpbnRhY3QuCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9QbHVn
LWlucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L1BsdWctaW5zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTM0ODcpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvUGx1Zy1pbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM1ICsxLDUgQEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJDYW52
YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAg
UmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkg
e0JPRFl9IGF0ICg4LDM5KSBzaXplIDc4NHg1MjIgW2NvbG9yPSM1NTU1NTVdCi0gICAgICBSZW5k
ZXJCbG9jayB7RElWfSBhdCAoMzksMCkgc2l6ZSA3MDZ4MTIzCi0gICAgICAgIFJlbmRlckJsb2Nr
IHtESVZ9IGF0ICgwLDApIHNpemUgNzA2eDIyIFtjb2xvcj0jMDAwMDAwXQotICAgICAgICAgIFJl
bmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgNjl4MjIKLSAgICAgICAgICAgIHRleHQgcnVu
IGF0ICgwLDApIHdpZHRoIDY5OiAidGVzdG5hbWUiCi0gICAgICAgIFJlbmRlckJsb2NrIHtCTE9D
S1FVT1RFfSBhdCAoNDAsMzgpIHNpemUgNjI2eDE4Ci0gICAgICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAyNjV4MTgKLSAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDI2NTogInRlc3RkZXNjcmlwdGlvbiBceHsyMDE0fSBmcm9tIGZpbGUgXHh7MjAxQ310ZXN0
ZmlsZW5hbWVceHsyMDFEfS4iCi0gICAgICAgIFJlbmRlclRhYmxlIHtUQUJMRX0gYXQgKDAsNzIp
IHNpemUgNzA2eDUxIFtjb2xvcj0jMjIyMjIyXSBbYmdjb2xvcj0jRjVGNUY1XSBbYm9yZGVyOiAo
MXB4IHNvbGlkICMyMjIyMjIpXQotICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiB7VEhFQUR9
IGF0ICgxLDEpIHNpemUgMHgyNAotICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAo
MCwwKSBzaXplIDB4MAotICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1RIfSBhdCAoMCww
KSBzaXplIDIxMngyNCBbYmdjb2xvcj0jQ0NDQ0NDXSBbcj0wIGM9MCBycz0xIGNzPTFdCi0gICAg
ICAgICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDYzLDMpIHNpemUgODZ4MTgKLSAgICAg
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg2MywzKSB3aWR0aCA4NjogIk1JTUUgVHlwZSIKLSAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtUSH0gYXQgKDIxMiwwKSBzaXplIDM1MngyNCBb
Ymdjb2xvcj0jQ0NDQ0NDXSBbYm9yZGVyOiBub25lICgxcHggc29saWQgI0FBQUFBQSldIFtyPTAg
Yz0xIHJzPTEgY3M9MV0KLSAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTM3
LDMpIHNpemUgNzh4MTgKLSAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgxMzcsMykgd2lk
dGggNzg6ICJEZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtUSH0g
YXQgKDU2NCwwKSBzaXplIDE0MHgyNCBbYmdjb2xvcj0jQ0NDQ0NDXSBbYm9yZGVyOiBub25lICgx
cHggc29saWQgI0FBQUFBQSldIFtyPTAgYz0yIHJzPTEgY3M9MV0KLSAgICAgICAgICAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMzQsMykgc2l6ZSA3M3gxOAotICAgICAgICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDM0LDMpIHdpZHRoIDczOiAiRXh0ZW5zaW9ucyIKLSAgICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24ge1RCT0RZfSBhdCAoMSwyNSkgc2l6ZSAweDI1Ci0gICAgICAgICAgICBS
ZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDApIHNpemUgMHgwCi0gICAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCB7VER9IGF0ICgwLDApIHNpemUgMjEyeDI1IFtib3JkZXI6ICgxcHggc29saWQg
I0FBQUFBQSkgbm9uZV0gW3I9MCBjPTAgcnM9MSBjcz0xXQotICAgICAgICAgICAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICgzLDQpIHNpemUgNDh4MTgKLSAgICAgICAgICAgICAgICAgIHRleHQg
cnVuIGF0ICgzLDQpIHdpZHRoIDQ4OiAidGVzdHR5cGUiCi0gICAgICAgICAgICAgIFJlbmRlclRh
YmxlQ2VsbCB7VER9IGF0ICgyMTIsMCkgc2l6ZSAzNTJ4MjUgW2JvcmRlcjogKDFweCBzb2xpZCAj
QUFBQUFBKSBub25lICgxcHggc29saWQgI0FBQUFBQSldIFtyPTAgYz0xIHJzPTEgY3M9MV0KLSAg
ICAgICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoNCw0KSBzaXplIDkweDE4Ci0gICAg
ICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNCw0KSB3aWR0aCA5MDogInRlc3RkZXNjcmlwdGlv
biIKLSAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDU2NCwwKSBzaXplIDE0
MHgyNSBbYm9yZGVyOiAoMXB4IHNvbGlkICNBQUFBQUEpIG5vbmUgKDFweCBzb2xpZCAjQUFBQUFB
KV0gW3I9MCBjPTIgcnM9MSBjcz0xXQotICAgICAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgzNSw0KSBzaXplIDcweDE4Ci0gICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMzUs
NCkgd2lkdGggNzA6ICJ0ZXN0c3VmZml4ZXMiCit0ZXN0bmFtZQordGVzdGRlc2NyaXB0aW9uIOKA
lCBmcm9tIGZpbGUg4oCcdGVzdGZpbGVuYW1l4oCdLgorTUlNRSBUeXBlCURlc2NyaXB0aW9uCUV4
dGVuc2lvbnMKK3Rlc3R0eXBlCXRlc3RkZXNjcmlwdGlvbgl0ZXN0c3VmZml4ZXMKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWNoYWluLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtY2hhaW4tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxMzQ4NykKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1jaGFp
bi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgTk9URTogVGhp
cyB0ZXN0IHdpbGwgc3RhcnQgZmFpbGluZyBpZiB5bwogCiBbb2JqZWN0IERPTUV2ZW50XQogCi1b
b2JqZWN0IERPTVVJRXZlbnRdCitbb2JqZWN0IEpTVUlFdmVudF0KIAogLS0tLS0gW29iamVjdCBN
b3VzZUV2ZW50XSAoNCBwcm90b3R5cGVzKSAtLS0tLQogCkBAIC0zOCw5ICszOCw5IEBAIE5PVEU6
IFRoaXMgdGVzdCB3aWxsIHN0YXJ0IGZhaWxpbmcgaWYgeW8KIAogW29iamVjdCBET01FdmVudF0K
IAotW29iamVjdCBET01VSUV2ZW50XQorW29iamVjdCBKU1VJRXZlbnRdCiAKLVtvYmplY3QgRE9N
TW91c2VFdmVudF0KK1tvYmplY3QgSlNNb3VzZUV2ZW50XQogCiAtLS0tLSBbb2JqZWN0IEtleWJv
YXJkRXZlbnRdICg0IHByb3RvdHlwZXMpIC0tLS0tCiAKQEAgLTQ4LDggKzQ4LDggQEAgTk9URTog
VGhpcyB0ZXN0IHdpbGwgc3RhcnQgZmFpbGluZyBpZiB5bwogCiBbb2JqZWN0IERPTUV2ZW50XQog
Ci1bb2JqZWN0IERPTVVJRXZlbnRdCitbb2JqZWN0IEpTVUlFdmVudF0KIAotW29iamVjdCBET01L
ZXlib2FyZEV2ZW50XQorW29iamVjdCBKU0tleWJvYXJkRXZlbnRdCiAKIApJbmRleDogV2ViS2l0
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5SZXByZXNlbnRhdGlvbi5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUmVwcmVzZW50YXRpb24ubQkocmV2aXNp
b24gMTM0ODcpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblJlcHJlc2VudGF0
aW9uLm0JKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMSArMTMwLDEwIEBACiAgICAgICAgICAgICBf
ZGF0YUxlbmd0aFJlY2VpdmVkID0gMDsKICAgICAgICAgICAgIFtzZWxmIHJlY2VpdmVkRGF0YTpk
YXRhIHdpdGhEYXRhU291cmNlOl9kYXRhU291cmNlXTsKICAgICAgICAgICAgIGlmICghW19kYXRh
U291cmNlIGlzTG9hZGluZ10pIHsKLSAgICAgICAgICAgICAgICBpZiAoX2Vycm9yKSB7CisgICAg
ICAgICAgICAgICAgaWYgKF9lcnJvcikKICAgICAgICAgICAgICAgICAgICAgW3NlbGYgcmVjZWl2
ZWRFcnJvcjpfZXJyb3Igd2l0aERhdGFTb3VyY2U6X2RhdGFTb3VyY2VdOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBb
c2VsZiBmaW5pc2hlZExvYWRpbmdXaXRoRGF0YVNvdXJjZTpfZGF0YVNvdXJjZV07Ci0gICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViS2l0
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9uIDEzNDg3KQorKysg
V2ViS2l0L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkK
QEAgLTczLDEzICs3MywxMiBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVu
Y3RpCiAgICAgRlNSZWYgZnJlZjsKICAgICBPU0VyciBlcnI7CiAgICAgCi0gICAgaWYgKGlzQnVu
ZGxlKSB7CisgICAgaWYgKGlzQnVuZGxlKQogICAgICAgICByZXR1cm4gQ0ZCdW5kbGVPcGVuQnVu
ZGxlUmVzb3VyY2VNYXAoY2ZCdW5kbGUpOwotICAgIH0gZWxzZSB7CisgICAgZWxzZSB7CiAgICAg
ICAgIGVyciA9IEZTUGF0aE1ha2VSZWYoKGNvbnN0IFVJbnQ4ICopW3BhdGggZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uXSwgJmZyZWYsIE5VTEwpOwotICAgICAgICBpZiAoZXJyICE9IG5vRXJyKSB7
CisgICAgICAgIGlmIChlcnIgIT0gbm9FcnIpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBGU09wZW5SZXNGaWxlKCZmcmVmLCBmc1Jk
UGVybSk7CiAgICAgfQpAQCAtODcsMTEgKzg2LDEwIEBAIHN0YXRpYyBUcmFuc2l0aW9uVmVjdG9y
IHRWZWN0b3JGb3JGdW5jdGkKIAogLSAodm9pZCljbG9zZVJlc291cmNlRmlsZTooU0ludDE2KXJl
c1JlZgogewotICAgIGlmIChpc0J1bmRsZSkgeworICAgIGlmIChpc0J1bmRsZSkKICAgICAgICAg
Q0ZCdW5kbGVDbG9zZUJ1bmRsZVJlc291cmNlTWFwKGNmQnVuZGxlLCByZXNSZWYpOwotICAgIH0g
ZWxzZSB7CisgICAgZWxzZQogICAgICAgICBDbG9zZVJlc0ZpbGUocmVzUmVmKTsKLSAgICB9CiB9
CiAKIC0gKE5TU3RyaW5nICopc3RyaW5nRm9yU3RyaW5nTGlzdElEOihTSW50MTYpc3RyaW5nTGlz
dElEIGFuZEluZGV4OihTSW50MTYpaW5kZXgKQEAgLTEwMiwxNCArMTAwLDEyIEBAIHN0YXRpYyBU
cmFuc2l0aW9uVmVjdG9yIHRWZWN0b3JGb3JGdW5jdGkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICB9CiAgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopKnN0cmluZ0hhbmRs
ZTsKLSAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgaWYgKCFwKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIH0KICAgICAKICAgICAvLyBDaGVjayB0aGUgaW5kZXggYWdhaW5zdCB0aGUgbGVuZ3Ro
IG9mIHRoZSBzdHJpbmcgbGlzdCwgdGhlbiBza2lwIHRoZSBsZW5ndGguCi0gICAgaWYgKGluZGV4
IDwgMSB8fCBpbmRleCA+ICooU0ludDE2ICopcCkgeworICAgIGlmIChpbmRleCA8IDEgfHwgaW5k
ZXggPiAqKFNJbnQxNiAqKXApCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQogICAgIHAgKz0g
c2l6ZW9mKFNJbnQxNik7CiAgICAgCiAgICAgLy8gU2tpcCBhbnkgc3RyaW5ncyB0aGF0IGNvbWUg
YmVmb3JlIHRoZSBvbmUgd2UgYXJlIGxvb2tpbmcgZm9yLgpAQCAtMTIzLDE5ICsxMTksMTYgQEAg
c3RhdGljIFRyYW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQogLSAoQk9PTClnZXRQbHVn
aW5JbmZvRnJvbVJlc291cmNlcwogewogICAgIFNJbnQxNiByZXNSZWYgPSBbc2VsZiBvcGVuUmVz
b3VyY2VGaWxlXTsKLSAgICBpZiAocmVzUmVmID09IC0xKSB7CisgICAgaWYgKHJlc1JlZiA9PSAt
MSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KICAgICAKICAgICBVc2VSZXNGaWxlKHJlc1Jl
Zik7Ci0gICAgaWYgKFJlc0Vycm9yKCkgIT0gbm9FcnIpIHsKKyAgICBpZiAoUmVzRXJyb3IoKSAh
PSBub0VycikKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KIAogICAgIE5TU3RyaW5nICpNSU1F
LCAqZXh0ZW5zaW9uc0xpc3QsICpkZXNjcmlwdGlvbjsKICAgICBOU0FycmF5ICpleHRlbnNpb25z
OwotICAgIE5TUmFuZ2UgcjsKLSAgICB1aW50IGk7CisgICAgdW5zaWduZWQgaTsKICAgICAKICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpNSU1FVG9FeHRlbnNpb25zRGljdGlvbmFyeSA9IFtOU011
dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKk1J
TUVUb0Rlc2NyaXB0aW9uRGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25h
cnldOwpAQCAtMTQzLDMzICsxMzYsMjMgQEAgc3RhdGljIFRyYW5zaXRpb25WZWN0b3IgdFZlY3Rv
ckZvckZ1bmN0aQogICAgIGZvciAoaT0xOyAxOyBpKz0yKSB7CiAgICAgICAgIE1JTUUgPSBbW3Nl
bGYgc3RyaW5nRm9yU3RyaW5nTGlzdElEOk1JTUVMaXN0U3RyaW5nU3RyaW5nTnVtYmVyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZEluZGV4OmldIGxvd2VyY2FzZVN0cmlu
Z107Ci0gICAgICAgIGlmICghTUlNRSkgeworICAgICAgICBpZiAoIU1JTUUpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBdm9pZCBtaW1lIHR5cGVz
IHdpdGggc2VtaS1jb2xvbnMgYmVjYXVzZSBLSlMgY2FuJ3QgcHJvcGVybHkgcGFyc2UgdGhlbSB1
c2luZyBLV1FLQ29uZmlnQmFzZQotICAgICAgICByID0gW01JTUUgcmFuZ2VPZlN0cmluZzpAIjsi
XTsKLSAgICAgICAgaWYgKHIubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KIAotICAgICAgICBleHRlbnNpb25zTGlzdCA9IFtbc2VsZiBzdHJpbmdGb3JTdHJp
bmdMaXN0SUQ6TUlNRUxpc3RTdHJpbmdTdHJpbmdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZEluZGV4OmkrMV0gbG93ZXJjYXNlU3RyaW5nXTsK
KyAgICAgICAgZXh0ZW5zaW9uc0xpc3QgPSBbW3NlbGYgc3RyaW5nRm9yU3RyaW5nTGlzdElEOk1J
TUVMaXN0U3RyaW5nU3RyaW5nTnVtYmVyIGFuZEluZGV4OmkrMV0gbG93ZXJjYXNlU3RyaW5nXTsK
ICAgICAgICAgaWYgKGV4dGVuc2lvbnNMaXN0KSB7CiAgICAgICAgICAgICBleHRlbnNpb25zID0g
W2V4dGVuc2lvbnNMaXN0IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiwiXTsKICAgICAg
ICAgICAgIFtNSU1FVG9FeHRlbnNpb25zRGljdGlvbmFyeSBzZXRPYmplY3Q6ZXh0ZW5zaW9ucyBm
b3JLZXk6TUlNRV07Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgLy8gRFJNIGFuZCBXTVAgY2xhaW0gTUlNRXMgd2l0aG91dCBleHRlbnNpb25zLiBVc2UgYSBA
IiIgZXh0ZW5zaW9uIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgIFtNSU1FVG9FeHRlbnNpb25z
RGljdGlvbmFyeSBzZXRPYmplY3Q6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OkAiIl0gZm9yS2V5
Ok1JTUVdOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkZXNjcmlwdGlvbiA9IFtzZWxm
IHN0cmluZ0ZvclN0cmluZ0xpc3RJRDpNSU1FRGVzY3JpcHRpb25TdHJpbmdOdW1iZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kSW5kZXg6W01JTUVUb0V4dGVu
c2lvbnNEaWN0aW9uYXJ5IGNvdW50XV07Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbikgeworICAg
ICAgICBpZiAoZGVzY3JpcHRpb24pCiAgICAgICAgICAgICBbTUlNRVRvRGVzY3JpcHRpb25EaWN0
aW9uYXJ5IHNldE9iamVjdDpkZXNjcmlwdGlvbiBmb3JLZXk6TUlNRV07Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFtNSU1FVG9EZXNjcmlwdGlvbkRpY3Rpb25h
cnkgc2V0T2JqZWN0OkAiIiBmb3JLZXk6TUlNRV07Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBb
c2VsZiBzZXRNSU1FVG9EZXNjcmlwdGlvbkRpY3Rpb25hcnk6TUlNRVRvRGVzY3JpcHRpb25EaWN0
aW9uYXJ5XTsKQEAgLTE3OCwxNiArMTYxLDE0IEBAIHN0YXRpYyBUcmFuc2l0aW9uVmVjdG9yIHRW
ZWN0b3JGb3JGdW5jdGkKICAgICBOU1N0cmluZyAqZmlsZW5hbWUgPSBbc2VsZiBmaWxlbmFtZV07
CiAgICAgCiAgICAgZGVzY3JpcHRpb24gPSBbc2VsZiBzdHJpbmdGb3JTdHJpbmdMaXN0SUQ6UGx1
Z2luTmFtZU9yRGVzY3JpcHRpb25TdHJpbmdOdW1iZXIgYW5kSW5kZXg6MV07Ci0gICAgaWYgKCFk
ZXNjcmlwdGlvbikgeworICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgICAgIGRlc2NyaXB0aW9u
ID0gZmlsZW5hbWU7Ci0gICAgfQogICAgIFtzZWxmIHNldFBsdWdpbkRlc2NyaXB0aW9uOmRlc2Ny
aXB0aW9uXTsKICAgICAKICAgICAKICAgICBOU1N0cmluZyAqdGhlTmFtZSA9IFtzZWxmIHN0cmlu
Z0ZvclN0cmluZ0xpc3RJRDpQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmluZ051bWJlciBhbmRJ
bmRleDoyXTsKLSAgICBpZiAoIXRoZU5hbWUpIHsKKyAgICBpZiAoIXRoZU5hbWUpCiAgICAgICAg
IHRoZU5hbWUgPSBmaWxlbmFtZTsKLSAgICB9CiAgICAgW3NlbGYgc2V0TmFtZTp0aGVOYW1lXTsK
ICAgICAKICAgICBbc2VsZiBjbG9zZVJlc291cmNlRmlsZTpyZXNSZWZdOwpAQCAtMTk1LDcgKzE3
Niw3IEBAIHN0YXRpYyBUcmFuc2l0aW9uVmVjdG9yIHRWZWN0b3JGb3JGdW5jdGkKICAgICByZXR1
cm4gWUVTOwogfQogCi0tIGluaXRXaXRoUGF0aDooTlNTdHJpbmcgKilwbHVnaW5QYXRoCistIChp
ZClpbml0V2l0aFBhdGg6KE5TU3RyaW5nICopcGx1Z2luUGF0aAogewogICAgIFtzdXBlciBpbml0
V2l0aFBhdGg6cGx1Z2luUGF0aF07CiAKQEAgLTI1OSwxMSArMjQwLDEwIEBAIHN0YXRpYyBUcmFu
c2l0aW9uVmVjdG9yIHRWZWN0b3JGb3JGdW5jdGkKIAogLSAoV2ViRXhlY3V0YWJsZVR5cGUpZXhl
Y3V0YWJsZVR5cGUKIHsKLSAgICBpZiAoaXNDRk0pIHsKKyAgICBpZiAoaXNDRk0pCiAgICAgICAg
IHJldHVybiBXZWJDRk1FeGVjdXRhYmxlVHlwZTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIFdlYk1hY2hPRXhlY3V0YWJsZVR5cGU7Ci0gICAgfQogfQogCiAtIChCT09M
KWlzTG9hZGVkCkBAIC0yNzMsMjIgKzI1MywxOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0
VmVjdG9yRm9yRnVuY3RpCiAKIC0gKHZvaWQpdW5sb2FkV2l0aG91dFNodXRkb3duCiB7Ci0gICAg
aWYgKCFpc0xvYWRlZCkgeworICAgIGlmICghaXNMb2FkZWQpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAKLSAgICBpZiAocmVzb3VyY2VSZWYgIT0gLTEpIHsKKyAgICBpZiAocmVzb3VyY2VSZWYg
IT0gLTEpCiAgICAgICAgIFtzZWxmIGNsb3NlUmVzb3VyY2VGaWxlOnJlc291cmNlUmVmXTsKLSAg
ICB9CiAKLSAgICBpZiAoaXNCdW5kbGUpIHsKKyAgICBpZiAoaXNCdW5kbGUpCiAgICAgICAgIENG
QnVuZGxlVW5sb2FkRXhlY3V0YWJsZShjZkJ1bmRsZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNl
CiAjaWYgIV9fTFA2NF9fCiAgICAgICAgIC8vIENGTSBpcyBub3Qgc3VwcG9ydGVkIGluIDY0LWJp
dAogICAgICAgICBXZWJDbG9zZUNvbm5lY3Rpb24oJmNvbm5JRCk7CiAjZW5kaWYKLSAgICB9CiAK
ICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBVbmxvYWRlZCIpOwogICAgIGlzTG9hZGVkID0gTk87
CkBAIC0zMjEsMTQgKzI5OCwxMiBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9y
RnVuY3RpCiAjZW5kaWYKICAgICBMT0coUGx1Z2lucywgIiVmIExvYWQgdGltaW5nIHN0YXJ0ZWQg
Zm9yOiAlQCIsIHN0YXJ0LCBbc2VsZiBuYW1lXSk7CiAKLSAgICBpZiAoaXNMb2FkZWQpIHsKKyAg
ICBpZiAoaXNMb2FkZWQpCiAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQogICAgIAogICAgIGlm
IChpc0J1bmRsZSkgewotICAgICAgICBpZiAoIUNGQnVuZGxlTG9hZEV4ZWN1dGFibGUoY2ZCdW5k
bGUpKSB7CisgICAgICAgIGlmICghQ0ZCdW5kbGVMb2FkRXhlY3V0YWJsZShjZkJ1bmRsZSkpCiAg
ICAgICAgICAgICBnb3RvIGFib3J0OwotICAgICAgICB9CiAjaWYgIUxPR19ESVNBQkxFRAogICAg
ICAgICBDRkFic29sdXRlVGltZSBjdXJyZW50VGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVu
dCgpOwogICAgICAgICBDRkFic29sdXRlVGltZSBkdXJhdGlvbiA9IGN1cnJlbnRUaW1lIC0gc3Rh
cnQ7CkBAIC0zMzgsMTYgKzMxMywxNCBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9y
Rm9yRnVuY3RpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNDRk0pIHsKICAgICAgICAgICAgIHBs
dWdpbk1haW5GdW5jID0gKE1haW5GdW5jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9y
TmFtZShjZkJ1bmRsZSwgQ0ZTVFIoIm1haW4iKSApOwotICAgICAgICAgICAgaWYgKCFwbHVnaW5N
YWluRnVuYykgeworICAgICAgICAgICAgaWYgKCFwbHVnaW5NYWluRnVuYykKICAgICAgICAgICAg
ICAgICBnb3RvIGFib3J0OwotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilDRkJ1bmRsZUdldEZ1
bmN0aW9uUG9pbnRlckZvck5hbWUoY2ZCdW5kbGUsIENGU1RSKCJOUF9Jbml0aWFsaXplIikpOwog
ICAgICAgICAgICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRy
KUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShjZkJ1bmRsZSwgQ0ZTVFIoIk5QX0dl
dEVudHJ5UG9pbnRzIikpOwogICAgICAgICAgICAgTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93
blByb2NQdHIpQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKGNmQnVuZGxlLCBDRlNU
UigiTlBfU2h1dGRvd24iKSk7Ci0gICAgICAgICAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5Q
X0dldEVudHJ5UG9pbnRzIHx8ICFOUFBfU2h1dGRvd24pIHsKKyAgICAgICAgICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIU5QUF9TaHV0ZG93bikKICAgICAg
ICAgICAgICAgICBnb3RvIGFib3J0OwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICNpZiBfX0xQNjRfXwpAQCAtNDQ4LDE3ICs0MjEsMTUgQEAgc3RhdGljIFRyYW5zaXRp
b25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQogICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIHNo
dXRkb3duRnVuY3Rpb247CiAgICAgICAgIG5wRXJyID0gcGx1Z2luTWFpbkZ1bmMoJmJyb3dzZXJG
dW5jcywgJnBsdWdpbkZ1bmNzLCAmc2h1dGRvd25GdW5jdGlvbik7CiAgICAgICAgIE5QUF9TaHV0
ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKWZ1bmN0aW9uUG9pbnRlckZvclRWZWN0b3IoKFRy
YW5zaXRpb25WZWN0b3Ipc2h1dGRvd25GdW5jdGlvbik7Ci0gICAgICAgIGlmICghaXNCdW5kbGUp
IHsKKyAgICAgICAgaWYgKCFpc0J1bmRsZSkKICAgICAgICAgICAgIC8vIERvbid0IGZyZWUgcGx1
Z2luTWFpbkZ1bmMgaWYgd2UgZ290IGl0IGZyb20gYSBidW5kbGUgYmVjYXVzZSBpdCBpcyBvd25l
ZCBieSBDRkJ1bmRsZSBpbiB0aGF0IGNhc2UuCiAgICAgICAgICAgICBmcmVlKHBsdWdpbk1haW5G
dW5jKTsKLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgMzI3
MDU3Ni4gVGhlIFJlYWxQbGF5ZXIgcGx1Zy1pbiBmYWlscyB0byBsb2FkIGlmIGl0cyBwcmVmZXJl
bmNlIGZpbGUgaXMgb3V0IG9mIGRhdGUuCiAgICAgICAgIC8vIExhdW5jaCB0aGUgUmVhbFBsYXll
ciBhcHBsaWNhdGlvbiB0byByZWZyZXNoIHRoZSBmaWxlLgogICAgICAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgICAgIGlmIChucEVyciA9PSBOUEVSUl9NT0RVTEVf
TE9BRF9GQUlMRURfRVJST1IgJiYgW1tzZWxmIGZpbGVuYW1lXSBpc0VxdWFsVG9TdHJpbmc6UmVh
bFBsYXllclBsdWdpbkZpbGVuYW1lXSkgeworICAgICAgICAgICAgaWYgKG5wRXJyID09IE5QRVJS
X01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAmJiBbW3NlbGYgZmlsZW5hbWVdIGlzRXF1YWxUb1N0
cmluZzpSZWFsUGxheWVyUGx1Z2luRmlsZW5hbWVdKQogICAgICAgICAgICAgICAgIFtzZWxmIGxh
dW5jaFJlYWxQbGF5ZXJdOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBhYm9ydDsK
ICAgICAgICAgfQogI2lmICFMT0dfRElTQUJMRUQKQEAgLTQ4Nyw3ICs0NTgsNyBAQCBzdGF0aWMg
VHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAKICAgICAgICAgLy8gTGl2ZUNvbm5l
Y3Qgc3VwcG9ydAogICAgICAgICBOUFBfR2V0SmF2YUNsYXNzID0gKE5QUF9HZXRKYXZhQ2xhc3NQ
cm9jUHRyKWZ1bmN0aW9uUG9pbnRlckZvclRWZWN0b3IoKFRyYW5zaXRpb25WZWN0b3IpcGx1Z2lu
RnVuY3MuamF2YUNsYXNzKTsKLSAgICAgICAgaWYgKE5QUF9HZXRKYXZhQ2xhc3MpeworICAgICAg
ICBpZiAoTlBQX0dldEphdmFDbGFzcykgewogICAgICAgICAgICAgTE9HKExpdmVDb25uZWN0LCAi
JUA6ICBDRk0gZW50cnkgcG9pbnQgZm9yIE5QUF9HZXRKYXZhQ2xhc3MgPSAlcCIsIFtzZWxmIG5h
bWVdLCBOUFBfR2V0SmF2YUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIExP
RyhMaXZlQ29ubmVjdCwgIiVAOiAgbm8gZW50cnkgcG9pbnQgZm9yIE5QUF9HZXRKYXZhQ2xhc3Mi
LCBbc2VsZiBuYW1lXSk7CkBAIC01NDEsOSArNTEyLDggQEAgc3RhdGljIFRyYW5zaXRpb25WZWN0
b3IgdFZlY3RvckZvckZ1bmN0aQogI2VuZGlmCiAgICAgICAgIExPRyhQbHVnaW5zLCAiJWYgTlBf
SW5pdGlhbGl6ZSB0aW1pbmcgc3RhcnRlZCIsIGluaXRpYWxpemVTdGFydCk7CiAgICAgICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmYnJvd3NlckZ1bmNzKTsKLSAgICAgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikK
ICAgICAgICAgICAgIGdvdG8gYWJvcnQ7Ci0gICAgICAgIH0KICNpZiAhTE9HX0RJU0FCTEVECiAg
ICAgICAgIENGQWJzb2x1dGVUaW1lIGN1cnJlbnRUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCk7CiAgICAgICAgIENGQWJzb2x1dGVUaW1lIGR1cmF0aW9uID0gY3VycmVudFRpbWUgLSBp
bml0aWFsaXplU3RhcnQ7CkBAIC01NTEsOSArNTIxLDggQEAgc3RhdGljIFRyYW5zaXRpb25WZWN0
b3IgdFZlY3RvckZvckZ1bmN0aQogICAgICAgICBMT0coUGx1Z2lucywgIiVmIE5QX0luaXRpYWxp
emUgdG9vayAlZiBzZWNvbmRzIiwgY3VycmVudFRpbWUsIGR1cmF0aW9uKTsKIAogICAgICAgICBu
cEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZwbHVnaW5GdW5jcyk7Ci0gICAgICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikgeworICAgICAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCiAgICAgICAgICAgICBnb3RvIGFib3J0OwotICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBwbHVnaW5TaXplID0gcGx1Z2luRnVuY3Muc2l6ZTsKICAgICAgICAgcGx1Z2luVmVyc2lvbiA9
IHBsdWdpbkZ1bmNzLnZlcnNpb247CkBAIC01OTYsOSArNTY1LDggQEAgYWJvcnQ6CiAgICAgCiAt
ICh2b2lkKXVubG9hZAogewotICAgIGlmICghaXNMb2FkZWQpIHsKKyAgICBpZiAoIWlzTG9hZGVk
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIAogICAgIExPRyhQbHVnaW5zLCAiVW5sb2Fk
aW5nICVALi4uIiwgbmFtZSk7CiAKSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VQbHVnaW5Q
YWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2th
Z2UubQkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFj
a2FnZS5tCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5ICs1NSw4IEBACiB7CiAgICAgV2ViQmFzZVBs
dWdpblBhY2thZ2UgKnBsdWdpblBhY2thZ2UgPSBbW1dlYlBsdWdpblBhY2thZ2UgYWxsb2NdIGlu
aXRXaXRoUGF0aDpwbHVnaW5QYXRoXTsKIAotICAgIGlmICghcGx1Z2luUGFja2FnZSkgeworICAg
IGlmICghcGx1Z2luUGFja2FnZSkKICAgICAgICAgcGx1Z2luUGFja2FnZSA9IFtbV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlIGFsbG9jXSBpbml0V2l0aFBhdGg6cGx1Z2luUGF0aF07Ci0gICAgfQog
CiAgICAgcmV0dXJuIFtwbHVnaW5QYWNrYWdlIGF1dG9yZWxlYXNlXTsKIH0KQEAgLTc1LDE2ICs3
NCwxNCBAQAogICAgIE9TU3RhdHVzIGVycjsKIAogICAgIGVyciA9IEZTUGF0aE1ha2VSZWYoKGNv
bnN0IFVJbnQ4ICopW3RoZVBhdGggZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSwgJmZyZWYsIE5V
TEwpOwotICAgIGlmIChlcnIgIT0gbm9FcnIpIHsKKyAgICBpZiAoZXJyICE9IG5vRXJyKQogICAg
ICAgICByZXR1cm4gbmV3UGF0aDsKLSAgICB9CiAKICAgICBCb29sZWFuIHRhcmdldElzRm9sZGVy
OwogICAgIEJvb2xlYW4gd2FzQWxpYXNlZDsKICAgICBlcnIgPSBGU1Jlc29sdmVBbGlhc0ZpbGVX
aXRoTW91bnRGbGFncygmZnJlZiwgVFJVRSwgJnRhcmdldElzRm9sZGVyLCAmd2FzQWxpYXNlZCwg
a1Jlc29sdmVBbGlhc0ZpbGVOb1VJKTsKLSAgICBpZiAoZXJyICE9IG5vRXJyKSB7CisgICAgaWYg
KGVyciAhPSBub0VycikKICAgICAgICAgcmV0dXJuIG5ld1BhdGg7Ci0gICAgfQogCiAgICAgaWYg
KHdhc0FsaWFzZWQpIHsKICAgICAgICAgQ0ZVUkxSZWYgVVJMID0gQ0ZVUkxDcmVhdGVGcm9tRlNS
ZWYoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmZyZWYpOwpAQCAtOTUsOSArOTIsOSBAQAogICAgIHJl
dHVybiBuZXdQYXRoOwogfQogCi0tIGluaXRXaXRoUGF0aDooTlNTdHJpbmcgKilwbHVnaW5QYXRo
CistIChpZClpbml0V2l0aFBhdGg6KE5TU3RyaW5nICopcGx1Z2luUGF0aAogewotICAgIFtzdXBl
ciBpbml0XTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGV4dGVuc2lvblRvTUlNRSA9
IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgcGF0aCA9IFtbc2VsZiBw
YXRoQnlSZXNvbHZpbmdTeW1saW5rc0FuZEFsaWFzZXNJblBhdGg6cGx1Z2luUGF0aF0gcmV0YWlu
XTsKICAgICBidW5kbGUgPSBbW05TQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBhdGg6cGF0aF07CkBA
IC0xMDgsMTUgKzEwNSwxMyBAQAogCiAtIChCT09MKWdldFBsdWdpbkluZm9Gcm9tQnVuZGxlQW5k
TUlNRURpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKU1JTUVUeXBlcwogewotICAgIGlmICghYnVu
ZGxlKSB7CisgICAgaWYgKCFidW5kbGUpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICB9CiAgICAg
CiAgICAgaWYgKCFNSU1FVHlwZXMpIHsKICAgICAgICAgTUlNRVR5cGVzID0gW2J1bmRsZSBvYmpl
Y3RGb3JJbmZvRGljdGlvbmFyeUtleTpXZWJQbHVnaW5NSU1FVHlwZXNLZXldOwotICAgICAgICBp
ZiAoIU1JTUVUeXBlcykgeworICAgICAgICBpZiAoIU1JTUVUeXBlcykKICAgICAgICAgICAgIHJl
dHVybiBOTzsKLSAgICAgICAgfQogICAgIH0KIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKk1J
TUVUb0V4dGVuc2lvbnNEaWN0aW9uYXJ5ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFy
eV07CkBAIC0xMzEsMjMgKzEyNiwyMCBAQAogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IENv
bnNpZGVyIHN0b3JpbmcgZGlzYWJsZWQgTUlNRSB0eXBlcy4KICAgICAgICAgTlNOdW1iZXIgKmlz
RW5hYmxlZCA9IFtNSU1FRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViUGx1Z2luVHlwZUVuYWJs
ZWRLZXldOwotICAgICAgICBpZiAoaXNFbmFibGVkICYmIFtpc0VuYWJsZWQgYm9vbFZhbHVlXSA9
PSBOTykgeworICAgICAgICBpZiAoaXNFbmFibGVkICYmIFtpc0VuYWJsZWQgYm9vbFZhbHVlXSA9
PSBOTykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAKICAgICAgICAgZXh0ZW5z
aW9ucyA9IFtbTUlNRURpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYlBsdWdpbkV4dGVuc2lvbnNL
ZXldIF93ZWJfbG93ZXJjYXNlU3RyaW5nc107Ci0gICAgICAgIGlmIChbZXh0ZW5zaW9ucyBjb3Vu
dF0gPT0gMCkgeworICAgICAgICBpZiAoW2V4dGVuc2lvbnMgY291bnRdID09IDApCiAgICAgICAg
ICAgICBleHRlbnNpb25zID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OkAiIl07Ci0gICAgICAg
IH0KIAogICAgICAgICBNSU1FID0gW01JTUUgbG93ZXJjYXNlU3RyaW5nXTsKIAogICAgICAgICBb
TUlNRVRvRXh0ZW5zaW9uc0RpY3Rpb25hcnkgc2V0T2JqZWN0OmV4dGVuc2lvbnMgZm9yS2V5Ok1J
TUVdOwogCiAgICAgICAgIGRlc2NyaXB0aW9uID0gW01JTUVEaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpXZWJQbHVnaW5UeXBlRGVzY3JpcHRpb25LZXldOwotICAgICAgICBpZiAoIWRlc2NyaXB0aW9u
KSB7CisgICAgICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9
IEAiIjsKLSAgICAgICAgfQogCiAgICAgICAgIFtNSU1FVG9EZXNjcmlwdGlvbkRpY3Rpb25hcnkg
c2V0T2JqZWN0OmRlc2NyaXB0aW9uIGZvcktleTpNSU1FXTsKICAgICB9CkBAIC0xNTgsMTUgKzE1
MCwxMyBAQAogICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IFtzZWxmIGZpbGVuYW1lXTsKIAogICAg
IE5TU3RyaW5nICp0aGVOYW1lID0gW2J1bmRsZSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleTpX
ZWJQbHVnaW5OYW1lS2V5XTsKLSAgICBpZiAoIXRoZU5hbWUpIHsKKyAgICBpZiAoIXRoZU5hbWUp
CiAgICAgICAgIHRoZU5hbWUgPSBmaWxlbmFtZTsKLSAgICB9CiAgICAgW3NlbGYgc2V0TmFtZTp0
aGVOYW1lXTsKIAogICAgIGRlc2NyaXB0aW9uID0gW2J1bmRsZSBvYmplY3RGb3JJbmZvRGljdGlv
bmFyeUtleTpXZWJQbHVnaW5EZXNjcmlwdGlvbktleV07Ci0gICAgaWYgKCFkZXNjcmlwdGlvbikg
eworICAgIGlmICghZGVzY3JpcHRpb24pCiAgICAgICAgIGRlc2NyaXB0aW9uID0gZmlsZW5hbWU7
Ci0gICAgfQogICAgIFtzZWxmIHNldFBsdWdpbkRlc2NyaXB0aW9uOmRlc2NyaXB0aW9uXTsKIAog
ICAgIHJldHVybiBZRVM7CkBAIC0xNzQsOSArMTY0LDggQEAKIAogLSAoTlNEaWN0aW9uYXJ5ICop
cExpc3RGb3JQYXRoOihOU1N0cmluZyAqKXBMaXN0UGF0aCBjcmVhdGVGaWxlOihCT09MKWNyZWF0
ZUZpbGUKIHsKLSAgICBpZiAoY3JlYXRlRmlsZSAmJiBbc2VsZiBsb2FkXSAmJiBCUF9DcmVhdGVQ
bHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcykgeworICAgIGlmIChjcmVhdGVGaWxlICYmIFtzZWxm
IGxvYWRdICYmIEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKQogICAgICAgICBC
UF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcygpOwotICAgIH0KICAgICAKICAgICBO
U0RpY3Rpb25hcnkgKnBMaXN0ID0gbmlsOwogICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhDb250ZW50c09mRmlsZTpwTGlzdFBhdGhdOwpAQCAtMTkyLDkgKzE4MSw4IEBACiAKIC0g
KEJPT0wpZ2V0UGx1Z2luSW5mb0Zyb21QTGlzdHMKIHsKLSAgICBpZiAoIWJ1bmRsZSkgeworICAg
IGlmICghYnVuZGxlKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgfQogICAgIAogICAgIE5TRGlj
dGlvbmFyeSAqTUlNRVR5cGVzID0gbmlsOwogICAgIE5TU3RyaW5nICpwTGlzdEZpbGVuYW1lID0g
W2J1bmRsZSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleTpXZWJQbHVnaW5NSU1FVHlwZXNGaWxl
bmFtZUtleV07CkBAIC0yMDYsMTQgKzE5NCwxMiBAQAogICAgICAgICBpZiAocExpc3QpIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBwbGlzdCBpc24ndCBsb2NhbGl6ZWQsIGhhdmUgdGhlIHBsdWct
aW4gcmVjcmVhdGUgaXQgaW4gdGhlIHByZWZlcnJlZCBsYW5ndWFnZS4KICAgICAgICAgICAgIE5T
U3RyaW5nICpsb2NhbGl6YXRpb25OYW1lID0gW3BMaXN0IG9iamVjdEZvcktleTpXZWJQbHVnaW5M
b2NhbGl6YXRpb25OYW1lS2V5XTsKLSAgICAgICAgICAgIGlmICghW2xvY2FsaXphdGlvbk5hbWUg
aXNFcXVhbFRvU3RyaW5nOltbc2VsZiBjbGFzc10gcHJlZmVycmVkTG9jYWxpemF0aW9uTmFtZV1d
KSB7CisgICAgICAgICAgICBpZiAoIVtsb2NhbGl6YXRpb25OYW1lIGlzRXF1YWxUb1N0cmluZzpb
W3NlbGYgY2xhc3NdIHByZWZlcnJlZExvY2FsaXphdGlvbk5hbWVdXSkKICAgICAgICAgICAgICAg
ICBwTGlzdCA9IFtzZWxmIHBMaXN0Rm9yUGF0aDpwTGlzdFBhdGggY3JlYXRlRmlsZTpZRVNdOwot
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTUlNRVR5cGVzID0gW3BMaXN0IG9iamVjdEZvcktl
eTpXZWJQbHVnaW5NSU1FVHlwZXNLZXldOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIC8vIFBsaXN0IGRvZXNuJ3QgZXhpc3QsIGFzayB0aGUgcGx1Zy1pbiB0
byBjcmVhdGUgaXQuCiAgICAgICAgICAgICBNSU1FVHlwZXMgPSBbW3NlbGYgcExpc3RGb3JQYXRo
OnBMaXN0UGF0aCBjcmVhdGVGaWxlOllFU10gb2JqZWN0Rm9yS2V5OldlYlBsdWdpbk1JTUVUeXBl
c0tleV07Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gUGFzcyB0aGUgTUlNRSBkaWN0
aW9uYXJ5IHRvIHRoZSBzdXBlcmNsYXNzIHRvIHBhcnNlIGl0LgpAQCAtMjI3LDkgKzIxMyw4IEBA
CiAKIC0gKEJPT0wpbG9hZAogewotICAgIGlmIChpc0xvYWRlZCAmJiBidW5kbGUgIT0gbmlsICYm
IEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzID09IE5VTEwpIHsKKyAgICBpZiAo
aXNMb2FkZWQgJiYgYnVuZGxlICYmICFCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNl
cykKICAgICAgICAgQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMgPSAoQlBfQ3Jl
YXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Q
b2ludGVyRm9yTmFtZShjZkJ1bmRsZSwgQ0ZTVFIoIkJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1By
ZWZlcmVuY2VzIikpOwotICAgIH0KICAgICByZXR1cm4gaXNMb2FkZWQ7CiB9CiAKQEAgLTM2Miw5
ICszNDcsOCBAQAogICAgICAgICBleHRlbnNpb25FbnVtZXJhdG9yID0gW2V4dGVuc2lvbnMgb2Jq
ZWN0RW51bWVyYXRvcl07CiAKICAgICAgICAgd2hpbGUgKChleHRlbnNpb24gPSBbZXh0ZW5zaW9u
RW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgICAgICBpZiAoIVtleHRl
bnNpb24gaXNFcXVhbFRvU3RyaW5nOkAiIl0pIHsKKyAgICAgICAgICAgIGlmICghW2V4dGVuc2lv
biBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKICAgICAgICAgICAgICAgICBbZXh0ZW5zaW9uVG9NSU1F
IHNldE9iamVjdDpNSU1FIGZvcktleTpleHRlbnNpb25dOwotICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtNDExLDEyICszOTUsMTAgQEAKICAgICAgICAgY29uc3QgTlhBcmNo
SW5mbyAqbG9jYWxBcmNoID0gTlhHZXRMb2NhbEFyY2hJbmZvKCk7CiAgICAgICAgIGlmIChsb2Nh
bEFyY2ggIT0gTlVMTCkgewogICAgICAgICAgICAgc3RydWN0IG1hY2hfaGVhZGVyICpoZWFkZXIg
PSAoc3RydWN0IG1hY2hfaGVhZGVyICopW2RhdGEgYnl0ZXNdOwotICAgICAgICAgICAgaWYgKGhl
YWRlci0+bWFnaWMgPT0gTUhfTUFHSUMpIHsKKyAgICAgICAgICAgIGlmIChoZWFkZXItPm1hZ2lj
ID09IE1IX01BR0lDKQogICAgICAgICAgICAgICAgIHJldHVybiAoaGVhZGVyLT5jcHV0eXBlID09
IGxvY2FsQXJjaC0+Y3B1dHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGVh
ZGVyLT5tYWdpYyA9PSBNSF9DSUdBTSkgeworICAgICAgICAgICAgaWYgKGhlYWRlci0+bWFnaWMg
PT0gTUhfQ0lHQU0pCiAgICAgICAgICAgICAgICAgcmV0dXJuICgoY3B1X3R5cGVfdCkgT1NTd2Fw
SW50MzIoaGVhZGVyLT5jcHV0eXBlKSA9PSBsb2NhbEFyY2gtPmNwdXR5cGUpOwotICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBZRVM7CkBAIC00MzMsOSArNDE1LDgg
QEAKICAgICBOU1N0cmluZyAqc3RyaW5nOwogCiAgICAgd2hpbGUgKChzdHJpbmcgPSBbc3RyaW5n
cyBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIGlmIChbc3RyaW5nIGlzS2luZE9mQ2xh
c3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKKyAgICAgICAgaWYgKFtzdHJpbmcgaXNLaW5kT2ZDbGFz
czpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgICAgIFtsb3dlcmNhc2VTdHJpbmdzIGFkZE9i
amVjdDpbc3RyaW5nIGxvd2VyY2FzZVN0cmluZ11dOwotICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIGxvd2VyY2FzZVN0cmluZ3M7CkluZGV4OiBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL25wYXBpLm0JKHJldmlzaW9uIDEzNDg3KQorKysg
V2ViS2l0L1BsdWdpbnMvbnBhcGkubQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDExIEBA
IFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXdGb3IKIAogdm9pZCogTlBOX01l
bUFsbG9jKHVpbnQzMiBzaXplKQogewotICAgIC8vTE9HKFBsdWdpbnMsICJOUE5fTWVtQWxsb2Mi
KTsKICAgICByZXR1cm4gbWFsbG9jKHNpemUpOwogfQogCiB2b2lkIE5QTl9NZW1GcmVlKHZvaWQq
IHB0cikKIHsKLSAgICAvL0xPRyhQbHVnaW5zLCAiTlBOX01lbUZyZWUiKTsKICAgICBmcmVlKHB0
cik7CiB9CiAKQEAgLTcxLDExICs2OSwxMCBAQCBOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0
cmVhbSogc3RyZWFtCiAvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5k
IFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlckFnZW50
IHdpdGggYSBOVUxMIGluc3RhbmNlLgogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKIHsKLSAgICBpZiAoaW5zdGFuY2UgJiYgaW5z
dGFuY2UtPm5kYXRhKSB7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLT5uZGF0YSkKICAg
ICAgICAgcmV0dXJuIChXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopaW5zdGFuY2UtPm5kYXRh
OwotICAgIH0gZWxzZSB7CisgICAgZWxzZQogICAgICAgICByZXR1cm4gW1dlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcgY3VycmVudFBsdWdpblZpZXddOwotICAgIH0KIH0KIAogTlBFcnJvciBOUE5f
R2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCkluZGV4OiBXZWJLaXQvUGx1Z2lucy9XZWJQbHVnaW5E
YXRhYmFzZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNl
Lm0JKHJldmlzaW9uIDEzNDg3KQorKysgV2ViS2l0L1BsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2Uu
bQkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOCBAQCBzdGF0aWMgV2ViUGx1Z2luRGF0YWJh
c2UgKmRhdGFiYXNlID0gbmlsCiAKICsgKFdlYlBsdWdpbkRhdGFiYXNlICopaW5zdGFsbGVkUGx1
Z2lucyAKIHsKLSAgICBpZiAoIWRhdGFiYXNlKSB7CisgICAgaWYgKCFkYXRhYmFzZSkKICAgICAg
ICAgZGF0YWJhc2UgPSBbW1dlYlBsdWdpbkRhdGFiYXNlIGFsbG9jXSBpbml0XTsKLSAgICB9CiAg
ICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCkBAIC02MywxOSArNjIsMTYgQEAgc3RhdGljIFdlYlBs
dWdpbkRhdGFiYXNlICpkYXRhYmFzZSA9IG5pbAogICAgIHdoaWxlICgocGx1Z2luID0gW3BsdWdp
bkVudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgewogICAgICAgICBpZiAoW1tbcGx1Z2lu
IHBlcmZvcm1TZWxlY3RvcjplbnVtZXJhdG9yU2VsZWN0b3JdIGFsbE9iamVjdHNdIGNvbnRhaW5z
T2JqZWN0OmtleV0pIHsKICAgICAgICAgICAgIGlmIChbcGx1Z2luIGlzS2luZE9mQ2xhc3M6W1dl
YlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgewotICAgICAgICAgICAgICAgIGlmICh3ZWJQbHVnaW4g
PT0gbmlsKSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWJQbHVnaW4pCiAgICAgICAgICAgICAg
ICAgICAgIHdlYlBsdWdpbiA9IHBsdWdpbjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgaWYoW3BsdWdpbiBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UgY2xhc3NdXSkgewogICAgICAgICAgICAgICAgIFdlYkV4ZWN1dGFibGVUeXBlIGV4ZWN1dGFi
bGVUeXBlID0gWyhXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW4gZXhlY3V0YWJsZVR5
cGVdOwogICAgICAgICAgICAgICAgIGlmIChleGVjdXRhYmxlVHlwZSA9PSBXZWJDRk1FeGVjdXRh
YmxlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZNUGx1Z2luID09IG5pbCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIUNGTVBsdWdpbikKICAgICAgICAgICAgICAgICAgICAg
ICAgIENGTVBsdWdpbiA9IHBsdWdpbjsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZXhlY3V0YWJsZVR5cGUgPT0gV2ViTWFjaE9FeGVjdXRhYmxlVHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobWFjaG9QbHVnaW4gPT0gbmlsKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbWFjaG9QbHVnaW4pCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYWNob1BsdWdpbiA9IHBsdWdpbjsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTg3LDE5ICs4MywxOCBAQCBzdGF0aWMgV2ViUGx1Z2lu
RGF0YWJhc2UgKmRhdGFiYXNlID0gbmlsCiAKICAgICAvLyBBbGxvdyBvdGhlciBwbHVnLWlucyB0
byB3aW4gb3ZlciBRVCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBwbHVnLWlu
IHRoYXQgY2FuIGhhbmRsZSBhIHR5cGUKICAgICAvLyB0aGF0IHRoZSBRVCBwbHVnLWluIGNhbiBo
YW5kbGUsIHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCi0gICAgaWYgKHdl
YlBsdWdpbiAmJiAhW3dlYlBsdWdpbiBpc1F1aWNrVGltZVBsdWdJbl0pIHsKKyAgICBpZiAod2Vi
UGx1Z2luICYmICFbd2ViUGx1Z2luIGlzUXVpY2tUaW1lUGx1Z0luXSkKICAgICAgICAgcmV0dXJu
IHdlYlBsdWdpbjsKLSAgICB9IGVsc2UgaWYgKG1hY2hvUGx1Z2luICYmICFbbWFjaG9QbHVnaW4g
aXNRdWlja1RpbWVQbHVnSW5dKSB7CisgICAgZWxzZSBpZiAobWFjaG9QbHVnaW4gJiYgIVttYWNo
b1BsdWdpbiBpc1F1aWNrVGltZVBsdWdJbl0pCiAgICAgICAgIHJldHVybiBtYWNob1BsdWdpbjsK
LSAgICB9IGVsc2UgaWYgKENGTVBsdWdpbiAmJiAhW0NGTVBsdWdpbiBpc1F1aWNrVGltZVBsdWdJ
bl0pIHsKKyAgICBlbHNlIGlmIChDRk1QbHVnaW4gJiYgIVtDRk1QbHVnaW4gaXNRdWlja1RpbWVQ
bHVnSW5dKQogICAgICAgICByZXR1cm4gQ0ZNUGx1Z2luOwotICAgIH0gZWxzZSBpZiAod2ViUGx1
Z2luKSB7CisgICAgZWxzZSBpZiAod2ViUGx1Z2luKQogICAgICAgICByZXR1cm4gd2ViUGx1Z2lu
OwotICAgIH0gZWxzZSBpZiAobWFjaG9QbHVnaW4pIHsKKyAgICBlbHNlIGlmIChtYWNob1BsdWdp
bikKICAgICAgICAgcmV0dXJuIG1hY2hvUGx1Z2luOwotICAgIH0gZWxzZSBpZiAoQ0ZNUGx1Z2lu
KSB7CisgICAgZWxzZSBpZiAoQ0ZNUGx1Z2luKQogICAgICAgICByZXR1cm4gQ0ZNUGx1Z2luOwot
ICAgIH0KICAgICByZXR1cm4gbmlsOwogfQogCkBAIC0xMTgsOSArMTEzLDggQEAgc3RhdGljIFdl
YlBsdWdpbkRhdGFiYXNlICpkYXRhYmFzZSA9IG5pbAogICAgICAgICAvLyBhbmQgZmluZCB0aGUg
YSBwbHVnLWluIGZyb20gdGhlIE1JTUUgdHlwZS4gVGhpcyBpcyBkb25lIGluIGNhc2UgdGhlIHBs
dWctaW4gaGFzIG5vdCBmdWxseSBzcGVjaWZpZWQKICAgICAgICAgLy8gYW4gZXh0ZW5zaW9uIDwt
PiBNSU1FIHR5cGUgbWFwcGluZy4KICAgICAgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gV0tHZXRN
SU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgICAgICBpZiAoW01JTUVUeXBlIGxl
bmd0aF0gPiAwKSB7CisgICAgICAgIGlmIChbTUlNRVR5cGUgbGVuZ3RoXSA+IDApCiAgICAgICAg
ICAgICBwbHVnaW4gPSBbc2VsZiBwbHVnaW5Gb3JNSU1FVHlwZTpNSU1FVHlwZV07Ci0gICAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIHBsdWdpbjsKIH0KQEAgLTE0OSw5ICsxNDMsOCBAQCBzdGF0
aWMgTlNBcnJheSAqcGx1Z2luTG9jYXRpb25zKHZvaWQpCiAgICAgLy8gVGhlIHB1cnBvc2UgaXMg
dG8gYWxsb3cgbm9uLWFkbWluIHVzZXJzIHRvIHVwZGF0ZSB0aGVpciBwbHVnLWlucy4KICAgICBO
U011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
W2V4dGVuc2lvblBsdWdJblBhdGhzIGNvdW50XSArIDNdOwogICAgIAotICAgIGlmIChleHRlbnNp
b25QbHVnSW5QYXRocykgeworICAgIGlmIChleHRlbnNpb25QbHVnSW5QYXRocykKICAgICAgICAg
W2FycmF5IGFkZE9iamVjdHNGcm9tQXJyYXk6ZXh0ZW5zaW9uUGx1Z0luUGF0aHNdOwotICAgIH0K
ICAgICAKICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU0hvbWVEaXJlY3RvcnkoKSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJMaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIl1dOwogICAg
IFthcnJheSBhZGRPYmplY3Q6QCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyJdOwpAQCAtMTYw
LDE1ICsxNTMsMTEgQEAgc3RhdGljIE5TQXJyYXkgKnBsdWdpbkxvY2F0aW9ucyh2b2lkKQogICAg
IHJldHVybiBhcnJheTsKIH0KIAotLSBpbml0CistIChpZClpbml0CiB7CiAgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoc2VsZiA9PSBuaWwpIHsKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICB9CiAgICAgW3NlbGYgcmVmcmVzaF07CiAgICAgcmV0dXJuIHNlbGY7Ci0gICAgCiB9CiAg
ICAgCiAtICh2b2lkKXJlZnJlc2gKQEAgLTIyNyw5ICsyMTYsOCBAQCBzdGF0aWMgTlNBcnJheSAq
cGx1Z2luTG9jYXRpb25zKHZvaWQpCiAgICAgTlNTdHJpbmcgKk1JTUVUeXBlOwogICAgIHdoaWxl
ICgoTUlNRVR5cGUgPSBba2V5RW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7CiAgICAg
ICAgIENsYXNzIGNsYXNzID0gW01JTUVUb1ZpZXdDbGFzcyBvYmplY3RGb3JLZXk6TUlNRVR5cGVd
OwotICAgICAgICBpZiAoY2xhc3MgPT0gW1dlYk5ldHNjYXBlUGx1Z2luRG9jdW1lbnRWaWV3IGNs
YXNzXSB8fCBjbGFzcyA9PSBbV2ViUGx1Z2luRG9jdW1lbnRWaWV3IGNsYXNzXSkgeworICAgICAg
ICBpZiAoY2xhc3MgPT0gW1dlYk5ldHNjYXBlUGx1Z2luRG9jdW1lbnRWaWV3IGNsYXNzXSB8fCBj
bGFzcyA9PSBbV2ViUGx1Z2luRG9jdW1lbnRWaWV3IGNsYXNzXSkKICAgICAgICAgICAgIFtXZWJW
aWV3IF91bnJlZ2lzdGVyVmlld0NsYXNzQW5kUmVwcmVzZW50YXRpb25DbGFzc0Zvck1JTUVUeXBl
Ok1JTUVUeXBlXTsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBCdWlsZCBhIGxpc3Qg
b2YgTUlNRSB0eXBlcy4KQEAgLTI0NCwyMiArMjMyLDE5IEBAIHN0YXRpYyBOU0FycmF5ICpwbHVn
aW5Mb2NhdGlvbnModm9pZCkKICAgICBOU0VudW1lcmF0b3IgKk1JTUVFbnVtZXJhdG9yID0gW1tN
SU1FVHlwZXMgYWxsT2JqZWN0c10gb2JqZWN0RW51bWVyYXRvcl07CiAgICAgW01JTUVUeXBlcyBy
ZWxlYXNlXTsKICAgICB3aGlsZSAoKE1JTUVUeXBlID0gW01JTUVFbnVtZXJhdG9yIG5leHRPYmpl
Y3RdKSAhPSBuaWwpIHsKLSAgICAgICAgaWYgKFtXZWJWaWV3IGNhblNob3dNSU1FVHlwZUFzSFRN
TDpNSU1FVHlwZV0pIHsKKyAgICAgICAgaWYgKFtXZWJWaWV3IGNhblNob3dNSU1FVHlwZUFzSFRN
TDpNSU1FVHlwZV0pCiAgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBwbHVnLWlucyB0byBvdmVy
cmlkZSBvdXIgY29yZSBIVE1MIHR5cGVzLgogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KICAgICAgICAgcGx1Z2luID0gW3NlbGYgcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdOwot
ICAgICAgICBpZiAoW3BsdWdpbiBpc0phdmFQbHVnSW5dKSB7CisgICAgICAgIGlmIChbcGx1Z2lu
IGlzSmF2YVBsdWdJbl0pCiAgICAgICAgICAgICAvLyBEb24ndCByZWdpc3RlciB0aGUgSmF2YSBw
bHVnLWluIGZvciBhIGRvY3VtZW50IHZpZXcgc2luY2UgSmF2YSBmaWxlcyBzaG91bGQgYmUgZG93
bmxvYWRlZCB3aGVuIG5vdCBlbWJlZGRlZC4KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChbcGx1Z2luIGlzUXVpY2tUaW1lUGx1Z0luXSAmJiBbW1dlYkZyYW1l
VmlldyBfdmlld1R5cGVzQWxsb3dJbWFnZVR5cGVPbWlzc2lvbjpOT10gb2JqZWN0Rm9yS2V5Ok1J
TUVUeXBlXSAhPSBuaWwpIHsKKyAgICAgICAgaWYgKFtwbHVnaW4gaXNRdWlja1RpbWVQbHVnSW5d
ICYmIFtbV2ViRnJhbWVWaWV3IF92aWV3VHlwZXNBbGxvd0ltYWdlVHlwZU9taXNzaW9uOk5PXSBv
YmplY3RGb3JLZXk6TUlNRVR5cGVdKQogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIFFU
IHBsdWctaW4gdG8gb3ZlcnJpZGUgYW55IHR5cGVzIGJlY2F1c2UgaXQgY2xhaW1zIG1hbnkgdGhh
dCB3ZSBjYW4gaGFuZGxlIG91cnNlbHZlcy4KICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChbcGx1Z2luIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZSBjbGFzc11dKSB7CisgICAgICAgIGlmIChbcGx1Z2luIGlzS2luZE9mQ2xhc3M6W1dl
Yk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKQogICAgICAgICAgICAgW1dlYlZpZXcgcmVn
aXN0ZXJWaWV3Q2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luRG9jdW1lbnRWaWV3IGNsYXNzXSByZXBy
ZXNlbnRhdGlvbkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblJlcHJlc2VudGF0aW9uIGNsYXNzXSBm
b3JNSU1FVHlwZTpNSU1FVHlwZV07Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKFtwbHVnaW4gaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2Fn
ZSBjbGFzc11dKTsKICAgICAgICAgICAgIFtXZWJWaWV3IHJlZ2lzdGVyVmlld0NsYXNzOltXZWJQ
bHVnaW5Eb2N1bWVudFZpZXcgY2xhc3NdIHJlcHJlc2VudGF0aW9uQ2xhc3M6W1dlYlBsdWdpbkRv
Y3VtZW50VmlldyBjbGFzc10gZm9yTUlNRVR5cGU6TUlNRVR5cGVdOwogICAgICAgICB9CkluZGV4
OiBXZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYlZpZXcv
V2ViVmlldy5tCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYktpdC9XZWJWaWV3L1dlYlZpZXcubQko
d29ya2luZyBjb3B5KQpAQCAtMTYxMSwxMiArMTYxMSwxMiBAQCBOU011dGFibGVEaWN0aW9uYXJ5
ICpjb3VudEludm9jYXRpb25zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVj
dDpbc2VsZiBwcmVmZXJlbmNlc11dOwogfQogCi0tIGluaXRXaXRoRnJhbWU6KE5TUmVjdClmCist
IChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZgogewogICAgIHJldHVybiBbc2VsZiBpbml0V2l0
aEZyYW1lOmYgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6bmlsXTsKIH0KIAotLSBpbml0V2l0aEZy
YW1lOihOU1JlY3QpZiBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIGdyb3VwTmFtZToo
TlNTdHJpbmcgKilncm91cE5hbWU7CistIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZiBmcmFt
ZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIGdyb3VwTmFtZTooTlNTdHJpbmcgKilncm91cE5h
bWU7CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZdOwogICAgIGlmICghc2Vs
ZikKSW5kZXg6IFdlYktpdC9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvV2ViVmlldy9XZWJEYXRhU291cmNlLm0JKHJldmlzaW9uIDEzNDg3KQorKysgV2ViS2l0
L1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM5LDEyICsxMDM5
LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICAvLyBP
bmNlIGEgZnJhbWUgaGFzIGxvYWRlZCwgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY29uc2lkZXIgc3Vi
cmVzb3VyY2VzLAogICAgIC8vIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNvbnNpZGVyIHN1YmZyYW1l
cy4KICAgICBpZiAoW1tzZWxmIHdlYkZyYW1lXSBfc3RhdGVdICE9IFdlYkZyYW1lU3RhdGVDb21w
bGV0ZSkgewotICAgICAgICBpZiAoIV9wcml2YXRlLT5wcmltYXJ5TG9hZENvbXBsZXRlICYmIF9w
cml2YXRlLT5sb2FkaW5nKSB7CisgICAgICAgIGlmICghX3ByaXZhdGUtPnByaW1hcnlMb2FkQ29t
cGxldGUgJiYgX3ByaXZhdGUtPmxvYWRpbmcpCiAgICAgICAgICAgICByZXR1cm4gWUVTOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChbX3ByaXZhdGUtPnN1YnJlc291cmNlTG9hZGVycyBjb3VudF0p
IHsKKyAgICAgICAgaWYgKFtfcHJpdmF0ZS0+c3VicmVzb3VyY2VMb2FkZXJzIGNvdW50XSkKICAg
ICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKCFbW1tzZWxmIHdl
YkZyYW1lXSBfYnJpZGdlXSBkb25lUHJvY2Vzc2luZ0RhdGFdKQogICAgICAgICAgICAgcmV0dXJu
IFlFUzsKICAgICB9CkluZGV4OiBXZWJLaXQvV2ViVmlldy9XZWJGcmFtZS5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lLm0JKHJldmlzaW9uIDEzNDg3KQorKysgV2ViS2l0
L1dlYlZpZXcvV2ViRnJhbWUubQkod29ya2luZyBjb3B5KQpAQCAtMjMzMCw4ICsyMzMwLDcgQEAg
c3RhdGljIENGQWJzb2x1dGVUaW1lIF90aW1lT2ZMYXN0Q29tcGxldAogICAgIEFTU0VSVChbc2Vs
ZiB3ZWJWaWV3XSAhPSBuaWwpOwogCiAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgdmlldyBtdXN0
IGJlIG5vbi1uaWwsIHRoaXMgaXMgdWx0aW1hdGVseSBkdWUKLSAgICAvLyB0byBLREUgcGFyc2Vy
IHJlcXVpcmluZyBhIEtIVE1MVmlldy4gIE9uY2Ugd2Ugc2V0dGxlIG9uIGEgZmluYWwKLSAgICAv
LyBLREUgZHJvcCB3ZSBzaG91bGQgZml4IHRoaXMgZGVwZW5kZW5jeS4KKyAgICAvLyB0byBwYXJz
ZXIgcmVxdWlyaW5nIGEgRnJhbWVWaWV3LiAgV2Ugc2hvdWxkIGZpeCB0aGlzIGRlcGVuZGVuY3ku
CiAKICAgICBBU1NFUlQoW3NlbGYgZnJhbWVWaWV3XSAhPSBuaWwpOwogCkBAIC0yNzQ3LDIwICsy
NzQ2LDExIEBAIHN0YXRpYyBDRkFic29sdXRlVGltZSBfdGltZU9mTGFzdENvbXBsZXQKIAogLSAo
Qk9PTClfc3ViZnJhbWVJc0xvYWRpbmcKIHsKLSAgICAvLyBQdXQgaW4gdGhlIGF1dG8tcmVsZWFz
ZSBwb29sIGJlY2F1c2UgaXQncyBjb21tb24gdG8gY2FsbCB0aGlzIGZyb20gYSBydW4gbG9vcCBz
b3VyY2UsCi0gICAgLy8gYW5kIHRoZW4gdGhlIGVudGlyZSBsaXN0IG9mIGZyYW1lcyBsYXN0cyB1
bnRpbCB0aGUgbmV4dCBhdXRvcmVsZWFzZS4KLSAgICAvLyBGSVhNRTogaXMgdGhpcyByZWFsbHkg
c3RpbGwgdHJ1ZT8gd2UgdXNlIF9maXJzdENoaWxkRnJhbWUvX25leHRTaWJsaW5nRnJhbWUgbm93
IAotICAgIC8vIHdoaWNoIGRvZXMgbm90IG1ha2UgYSBjb3B5LgotICAgIE5TQXV0b3JlbGVhc2VQ
b29sICpwb29sID0gW05TQXV0b3JlbGVhc2VQb29sIG5ld107Ci0KLSAgICBXZWJGcmFtZSAqZnJh
bWU7Ci0gICAgZm9yIChmcmFtZSA9IFtzZWxmIF9maXJzdENoaWxkRnJhbWVdOyBmcmFtZTsgZnJh
bWUgPSBbZnJhbWUgX25leHRTaWJsaW5nRnJhbWVdKQorICAgIC8vIEl0J3MgbW9zdCBsaWtlbHkg
dGhhdCB0aGUgbGFzdCBhZGRlZCBmcmFtZSBpcyB0aGUgbGFzdCB0byBsb2FkIHNvIHdlIHdhbGsg
YmFja3dhcmRzLgorICAgIGZvciAoV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2xhc3RDaGlsZEZy
YW1lXTsgZnJhbWU7IGZyYW1lID0gW2ZyYW1lIF9wcmV2aW91c1NpYmxpbmdGcmFtZV0pCiAgICAg
ICAgIGlmIChbW2ZyYW1lIGRhdGFTb3VyY2VdIGlzTG9hZGluZ10gfHwgW1tmcmFtZSBwcm92aXNp
b25hbERhdGFTb3VyY2VdIGlzTG9hZGluZ10pCi0gICAgICAgICAgICBicmVhazsKLQotICAgIFtw
b29sIGRyYWluXTsKLSAgICAKLSAgICByZXR1cm4gZnJhbWUgIT0gbmlsOworICAgICAgICAgICAg
cmV0dXJuIFlFUzsKKyAgICByZXR1cm4gTk87CiB9CiAKIEBlbmQKSW5kZXg6IFdlYkNvcmUva2h0
bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tq
c19odG1sLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0
bWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODA5LDEwICsxODA5LDEwIEBAIEpTVmFsdWUgKkpT
SFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGUKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgp
PT0wKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSAr
ICI6IiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1
cmwucG9ydCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAg
ICAgIHJldHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygp
KS5wYXRoKCkpOwotICAgICAgICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVj
YXRlZFN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAg
ICAgIHJldHVybiBqc1N0cmluZyhTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVw
cmVjYXRlZFN0cmluZygpKS5wb3J0KCkpKTsKICAgICAgICAgY2FzZSBBbmNob3JQcm90b2NvbDog
ICAgICAgIHJldHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmlu
ZygpKS5wcm90b2NvbCgpKyI6Iik7CiAgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSku
cXVlcnkoKSk7CiAgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoYW5jaG9yLm5hbWUoKSk7CkBAIC0xOTM2LDEwICsxOTM2LDEwIEBAIEpTVmFsdWUgKkpT
SFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIoRXhlY1MKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgp
PT0wKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSAr
ICI6IiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1
cmwucG9ydCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcmVhUGF0aE5hbWU6ICAgICAg
ICByZXR1cm4ganNTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnBh
dGgoKSk7Ci0gICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLmRlcHJlY2F0ZWRTdHJp
bmcoKSkucG9ydCgpKSk7CisgICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKFN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuZGVwcmVjYXRlZFN0cmlu
ZygpKS5wb3J0KCkpKTsKICAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4g
anNTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnByb3RvY29sKCkr
IjoiKTsKICAgICAgICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4ganNTdHJpbmco
S1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnF1ZXJ5KCkpOwogICAgICAgICBj
YXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYXJlYS5ub0hyZWYoKSk7
CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyMywx
MCArMTIyMywxMCBAQCBib29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAg
ICAgICAgIHByaW50ZigiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUg
d2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxu
IiwgCiAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpLCBvcmlnaW5E
b2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwogICAgIH0KLSAgICBEZXByZWNhdGVkU3RyaW5nIG1l
c3NhZ2U7CisgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNhZmUg
SmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1l
IHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICAgICAg
IHRhcmdldERvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSwgb3JpZ2luRG9jdW1lbnQtPlVSTCgpLmxh
dGluMSgpKTsKLSAgICB0YXJnZXRQYXJ0LT5hZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyhtZXNz
YWdlKSwgMSwgU3RyaW5nKCkpOyAvL2ZpeG1lOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBh
bmQgc291cmNldXJsCisgICAgdGFyZ2V0UGFydC0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdl
LCAxLCBTdHJpbmcoKSk7IC8vZml4bWU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBz
b3VyY2V1cmwKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEyODUsMTAgKzEyODUsMTAgQEAg
Ym9vbCBXaW5kb3c6OmlzU2FmZVNjcmlwdChFeGVjU3RhdGUgKmV4ZQogICAgICAgcHJpbnRmKCJV
bnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9t
IGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAg
ICB0aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpLCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4x
KCkpOwogICB9Ci0gIERlcHJlY2F0ZWRTdHJpbmcgbWVzc2FnZTsKKyAgU3RyaW5nIG1lc3NhZ2U7
CiAgIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3Mg
ZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1h
dGNoLlxuIiwgCiAgICAgICAgICAgICAgICAgICB0aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgp
LCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwotICBtX2ZyYW1lLT5hZGRNZXNzYWdlVG9D
b25zb2xlKFN0cmluZyhtZXNzYWdlKSwgMSwgU3RyaW5nKCkpOworICBtX2ZyYW1lLT5hZGRNZXNz
YWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFN0cmluZygpKTsKICAgCiAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTIwNzgsNyArMjA3OCw3IEBAIEpTVmFsdWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWMKICAgICAvLyBCbGVoLgogICAgIFVTdHJpbmcgc3RyID0gdXJsLmhvc3QoKTsKICAg
ICBpZiAodXJsLnBvcnQoKSkKLSAgICAgICAgICAgIHN0ciArPSAiOiIgKyBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgpKTsKKyAgICAgICAgc3RyICs9ICI6IiArIFN0cmlu
Zzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSk7CiAgICAgcmV0dXJuIGpzU3RyaW5nKHN0cik7CiAg
IH0KICAgY2FzZSBIb3N0bmFtZToKQEAgLTIwOTEsNyArMjA5MSw3IEBAIEpTVmFsdWUgKkxvY2F0
aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgY2FzZSBQYXRobmFtZToKICAgICByZXR1cm4g
anNTdHJpbmcodXJsLnBhdGgoKS5pc0VtcHR5KCkgPyAiLyIgOiB1cmwucGF0aCgpKTsKICAgY2Fz
ZSBQb3J0OgotICAgIHJldHVybiBqc1N0cmluZyh1cmwucG9ydCgpID8gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSkgOiAiIik7CisgICAgcmV0dXJuIGpzU3RyaW5nKHVy
bC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcigoaW50KXVybC5wb3J0KCkpIDogIiIpOwogICBjYXNl
IFByb3RvY29sOgogICAgIHJldHVybiBqc1N0cmluZyh1cmwucHJvdG9jb2woKSArICI6Iik7CiAg
IGNhc2UgU2VhcmNoOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8a2pzL2lkZW50aWZp
ZXIuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIApAQCAtMjA5LDYgKzIxMCw3MyBAQCBEZXByZWNhdGVkU3RyaW5nIFN0cmluZzo6ZGVwcmVj
YXRlZFN0cmluCiAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcobV9pbXBsLT5zLCBtX2ltcGwt
PmwpOwogfQogCitTdHJpbmcmIFN0cmluZzo6c3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4u
LikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwor
I2lmIFBMQVRGT1JNKFdJTl9PUykKKyAgICAvLyBXaW5kb3dzIHZzcHJpbnRmIGRvZXMgbm90IHJl
dHVybiB0aGUgZXhwZWN0ZWQgc2l6ZSBvbiBvdmVyZmxvdworICAgIC8vIFNvIHdlIGp1c3QgaGF2
ZSB0byBrZWVwIGxvb3BpbmcgdW50aWwgb3VyIHZzcHJpbnRmIGNhbGwgd29ya3MhCisgICAgaW50
IHJlc3VsdCA9IDA7CisgICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOworICAgIGRvIHsKKyAg
ICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlci5z
aXplKCkgKiAyKTsKKyAgICAgICAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCksIGJ1
ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7CisgICAgfSB3aGlsZSAocmVzdWx0IDwgMCAmJiAo
YnVmZmVyLnNpemUoKSAqIDIpIDwgMjA0OCk7CisgICAgaWYgKHJlc3VsdCA8PSAwKSB7CisgICAg
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtdHB5KCk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgdW5zaWduZWQgbGVuID0gcmVzdWx0OworI2Vsc2UKKyAgICAvLyBEbyB0aGUg
Zm9ybWF0IG9uY2UgdG8gZ2V0IHRoZSBsZW5ndGguCisgICAgY2hhciBjaDsKKyAgICBpbnQgcmVz
dWx0ID0gdnNucHJpbnRmKCZjaCwgMSwgZm9ybWF0LCBhcmdzKTsKKyAgICBpZiAocmVzdWx0IDw9
IDApIHsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKyAgICB1bnNpZ25lZCBsZW4gPSByZXN1bHQ7CisgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKGxlbiArIDEpOworICAgIAorICAgIC8v
IE5vdyBkbyB0aGUgZm9ybWF0dGluZyBhZ2FpbiwgZ3VhcmFudGVlZCB0byBmaXQuCisgICAgdnNu
cHJpbnRmKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7CisjZW5k
aWYKKyAgICB2YV9lbmQoYXJncyk7CisgICAgCisgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwo
YnVmZmVyLmRhdGEoKSwgbGVuKTsKKyAgICAKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1N0cmlu
ZyBTdHJpbmc6Om51bWJlcihpbnQgbikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCkuc3ByaW50Zigi
JWQiLCBuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIG4pCit7CisgICAg
cmV0dXJuIFN0cmluZygpLnNwcmludGYoIiV1Iiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6Om51
bWJlcihsb25nIG4pCit7CisgICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIiVsZCIsIG4pOwor
fQorCitTdHJpbmcgU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbG9uZyBuKQoreworICAgIHJldHVy
biBTdHJpbmcoKS5zcHJpbnRmKCIlbHUiLCBuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVtYmVy
KGRvdWJsZSBuKQoreworICAgIHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCIlLjZsZyIsIG4pOwor
fQorCiBpbnQgU3RyaW5nOjp0b0ludChib29sKiBvaykgY29uc3QKIHsKICAgICBpZiAoIW1faW1w
bCkgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW0JKHJldmlzaW9uIDEzNDg3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMxOCw3ICszMTgsNyBAQCBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVu
dChOCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgb3RoZXIg
dGhhbiB0aGUgdmVuZG9yLWFyZWEgVW5pY29kZSB2YWx1ZXMgZm9yIHRoZSBhYm92ZSBrZXlzLgog
ICAgICAgICAgICAgLy8gRm9yIG5vdywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQu
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygp
LnNwcmludGYoIlUrJTA2WCIsIHRvdXBwZXIoYykpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpLnNwcmludGYoIlUrJTA2WCIsIHRvdXBwZXIoYykpOwogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29s
b3IuaAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0NvbG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvciAqQ0dDb2xv
clJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTdHJpbmc7CisKIHR5cGVkZWYg
dW5zaWduZWQgaW50IFJHQkEzMjsgICAgICAgICAgICAgICAgICAgICAgLy8gUkdCQSBxdWFkcnVw
bGV0CiAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwpAQCAtNTEsMTAgKzUz
LDEwIEBAIHB1YmxpYzoKICAgICBDb2xvcihSR0JBMzIgY29sKSA6IGNvbG9yKGNvbCksIHZhbGlk
KHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIDogY29sb3IobWFrZVJH
QihyLCBnLCBiKSksIHZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKSA6IGNvbG9yKG1ha2VSR0JBKHIsIGcsIGIsIGEpKSwgdmFsaWQodHJ1ZSkgeyB9
Ci0gICAgZXhwbGljaXQgQ29sb3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmKTsKKyAgICBleHBs
aWNpdCBDb2xvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAgICAgZXhwbGljaXQgQ29sb3Io
Y29uc3QgY2hhciAqKTsKICAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIG5hbWUoKSBjb25zdDsK
KyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZWRDb2xvcihjb25zdCBE
ZXByZWNhdGVkU3RyaW5nJik7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB2
YWxpZDsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0F0b21pY1N0cmluZy5oCShyZXZpc2lvbiAxMzQ4NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vQXRvbWljU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgQXRvbWljU3RyaW5nJiBz
LCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX3N0
cmluZy5lbmRzV2l0aChzLmRvbVN0cmluZygpLCBjYXNlU2Vuc2l0aXZlKTsgfQogICAgIAotICAg
IGludCB0b0ludCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KKyAgICBpbnQg
dG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0ludChvayk7IH0K
ICAgICBib29sIHBlcmNlbnRhZ2UoaW50JiBwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5wZXJj
ZW50YWdlKHApOyB9CiAgICAgTGVuZ3RoKiB0b0xlbmd0aEFycmF5KGludCYgbGVuKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy50b0xlbmd0aEFycmF5KGxlbik7IH0KICAgICBMZW5ndGgqIHRvQ29v
cmRzQXJyYXkoaW50JiBsZW4pIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvQ29vcmRzQXJyYXko
bGVuKTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEy
ICs3MSwxMiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIHN0cikKICAgICBp
bml0V2l0aENoYXIoc3RyLCBzdHJsZW4oc3RyKSk7CiB9CiAKLVN0cmluZ0ltcGw6OlN0cmluZ0lt
cGwoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBpbnQgbGVuKQorU3RyaW5nSW1wbDo6U3RyaW5n
SW1wbChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKIHsKICAgICBpbml0V2l0aENoYXIo
c3RyLCBsZW4pOwogfQogCi12b2lkIFN0cmluZ0ltcGw6OmluaXRXaXRoQ2hhcihjb25zdCBjaGFy
KiBzdHIsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIFN0cmluZ0ltcGw6OmluaXRXaXRoQ2hhcihj
b25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKIHsKICAgICBfaGFzaCA9IDA7CiAgICAgX2lu
VGFibGUgPSBmYWxzZTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBTdHJpbmdJbXBsOjppbml0V2l0
aENoYXIoY29uc3QgY2hhcgogICAgICAgICAqcHRyKysgPSAqc3RyKys7CiB9CiAKLXZvaWQgU3Ry
aW5nSW1wbDo6aW5pdFdpdGhRQ2hhcihjb25zdCBRQ2hhciogc3RyLCB1bnNpZ25lZCBpbnQgbGVu
KQordm9pZCBTdHJpbmdJbXBsOjppbml0V2l0aFFDaGFyKGNvbnN0IFFDaGFyKiBzdHIsIHVuc2ln
bmVkIGxlbikKIHsKICAgICBfaGFzaCA9IDA7CiAgICAgX2luVGFibGUgPSBmYWxzZTsKQEAgLTEx
Nyw4ICsxMTcsNyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB2b2lkIFN0cmluZ0ltcGw6
OmFwcGVuZChjb25zdCBTdHJpbmdJbXBsKiBzdHIpCiB7CiAgICAgYXNzZXJ0KCFfaW5UYWJsZSk7
Ci0gICAgaWYoc3RyICYmIHN0ci0+bCAhPSAwKQotICAgIHsKKyAgICBpZiAoc3RyICYmIHN0ci0+
bCAhPSAwKSB7CiAgICAgICAgIGludCBuZXdsZW4gPSBsK3N0ci0+bDsKICAgICAgICAgUUNoYXIq
IGMgPSBuZXdRQ2hhclZlY3RvcihuZXdsZW4pOwogICAgICAgICBtZW1jcHkoYywgcywgbCpzaXpl
b2YoUUNoYXIpKTsKQEAgLTE2Niw3ICsxNjUsNyBAQCB2b2lkIFN0cmluZ0ltcGw6OnJlbW92ZSh1
bnNpZ25lZCBwb3MsIGluCiAgICAgYXNzZXJ0KCFfaW5UYWJsZSk7CiAgICAgaWYgKGxlbiA8PSAw
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHBvcyA+PSBsICkKKyAgICBpZiAocG9zID49IGwp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoKHVuc2lnbmVkKWxlbiA+IGwgLSBwb3MpCiAgICAg
ICAgIGxlbiA9IGwgLSBwb3M7CkBAIC0xOTksNyArMTk4LDcgQEAgYm9vbCBTdHJpbmdJbXBsOjpj
b250YWluc09ubHlXaGl0ZXNwYWNlKAogICAgIHJldHVybiBjb250YWluc09ubHlXaGl0ZXNwYWNl
KDAsIGwpOwogfQogCi1ib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5z
aWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4pIGNvbnN0Citib29sIFN0cmluZ0ltcGw6
OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25z
dAogewogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjUsNyArMjI0LDcg
QEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c3Vic3RyaW5nKHVuc2lnbgogICAgIHJldHVybiBu
ZXcgU3RyaW5nSW1wbChzICsgcG9zLCBsZW4pOwogfQogCi1zdGF0aWMgTGVuZ3RoIHBhcnNlTGVu
Z3RoKGNvbnN0IFFDaGFyKiBzLCB1bnNpZ25lZCBpbnQgbCkKK3N0YXRpYyBMZW5ndGggcGFyc2VM
ZW5ndGgoY29uc3QgUUNoYXIqIHMsIHVuc2lnbmVkIGwpCiB7CiAgICAgaWYgKGwgPT0gMCkKICAg
ICAgICAgcmV0dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7CkBAIC0yODUsNyArMjg0LDcgQEAgTGVu
Z3RoKiBTdHJpbmdJbXBsOjp0b0Nvb3Jkc0FycmF5KGludCYgbAogewogICAgIFFDaGFyKiBzcGFj
aWZpZWQgPSBuZXdRQ2hhclZlY3RvcihsKTsKICAgICBRQ2hhciBzcGFjZSgnICcpOwotICAgIGZv
cih1bnNpZ25lZCBpbnQgaT0wOyBpIDwgbDsgaSsrKSB7CisgICAgZm9yKHVuc2lnbmVkIGk9MDsg
aSA8IGw7IGkrKykgewogICAgICAgICBRQ2hhciBjYyA9IHNbaV07CiAgICAgICAgIGlmIChjYyA+
ICc5JyB8fCAoY2MgPCAnMCcgJiYgY2MgIT0gJy0nICYmIGNjICE9ICcqJyAmJiBjYyAhPSAnLicp
KQogICAgICAgICAgICAgc3BhY2lmaWVkW2ldID0gc3BhY2U7CkBAIC0zNDEsNyArMzQwLDcgQEAg
TGVuZ3RoKiBTdHJpbmdJbXBsOjp0b0xlbmd0aEFycmF5KGludCYgbAogCiBib29sIFN0cmluZ0lt
cGw6OmlzTG93ZXIoKSBjb25zdAogewotICAgIHVuc2lnbmVkIGludCBpOworICAgIHVuc2lnbmVk
IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykKIAlpZiAoc1tpXS5sb3dlcigpICE9IHNb
aV0pCiAJICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Nyw3ICszNTYsNyBAQCBTdHJpbmdJbXBsKiBT
dHJpbmdJbXBsOjpsb3dlcigpIGNvbnN0CiAgICAgYy0+cyA9IG5ld1FDaGFyVmVjdG9yKGwpOwog
ICAgIGMtPmwgPSBsOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsOyBpKysp
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGw7IGkrKykKIAljLT5zW2ldID0gc1tpXS5s
b3dlcigpOwogCiAgICAgcmV0dXJuIGM7CkBAIC0zNzIsNyArMzcxLDcgQEAgU3RyaW5nSW1wbCog
U3RyaW5nSW1wbDo6dXBwZXIoKSBjb25zdAogICAgIGMtPnMgPSBuZXdRQ2hhclZlY3RvcihsKTsK
ICAgICBjLT5sID0gbDsKIAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbDsgaSsr
KQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsOyBpKyspCiAJYy0+c1tpXSA9IHNbaV0u
dXBwZXIoKTsKIAogICAgIHJldHVybiBjOwpAQCAtNTMyLDcgKzUzMSw3IEBAIGludCBTdHJpbmdJ
bXBsOjpmaW5kKGNvbnN0IGNoYXIqIGNocywgaW4KIAogaW50IFN0cmluZ0ltcGw6OmZpbmQoY29u
c3QgUUNoYXIgYywgaW50IHN0YXJ0KSBjb25zdAogewotICAgIHVuc2lnbmVkIGludCBpbmRleCA9
IHN0YXJ0OworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7CiAgICAgaWYgKGluZGV4ID49IGwg
KQogICAgICAgICByZXR1cm4gLTE7CiAgICAgd2hpbGUoaW5kZXggPCBsKSB7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDI5ICs0ODIs
MTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICYpIGNvbnN0OwogCi0gICAgc2hvcnQgdG9TaG9ydChib29sICpvayA9IDAsIGludCBiYXNlID0g
MTApIGNvbnN0OwogICAgIHVuc2lnbmVkIHNob3J0IHRvVVNob3J0KGJvb2wgKm9rID0gMCwgaW50
IGJhc2UgPSAxMCkgY29uc3Q7CiAgICAgaW50IHRvSW50KGJvb2wgKm9rID0gMCwgaW50IGJhc2Ug
PSAxMCkgY29uc3Q7CiAgICAgdW5zaWduZWQgdG9VSW50KGJvb2wgKm9rID0gMCwgaW50IGJhc2Ug
PSAxMCkgY29uc3Q7CiAgICAgZG91YmxlIHRvRG91YmxlKGJvb2wgKm9rID0gMCkgY29uc3Q7CiAK
LSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXIoaW50KTsKLSAgICBzdGF0aWMgRGVw
cmVjYXRlZFN0cmluZyBudW1iZXIodW5zaWduZWQpOwotICAgIHN0YXRpYyBEZXByZWNhdGVkU3Ry
aW5nIG51bWJlcihsb25nKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXIodW5z
aWduZWQgbG9uZyk7Ci0gICAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbnVtYmVyKGRvdWJsZSk7
Ci0KICAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKICAgICAKLSAg
ICBEZXByZWNhdGVkU3RyaW5nIGFyZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGludCB3aWR0
aD0wKSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyhzaG9ydCwgaW50IHdpZHRoPTAp
IGNvbnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKHVuc2lnbmVkIHNob3J0LCBpbnQgd2lk
dGg9MCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcoaW50LCBpbnQgd2lkdGg9MCkg
Y29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcodW5zaWduZWQsIGludCB3aWR0aD0wKSBj
b25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyhsb25nLCBpbnQgd2lkdGg9MCkgY29uc3Q7
Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcodW5zaWduZWQgbG9uZywgaW50IHdpZHRoPTApIGNv
bnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKGRvdWJsZSwgaW50IHdpZHRoPTApIGNvbnN0
OwotCiAgICAgRGVwcmVjYXRlZFN0cmluZyBsZWZ0KHVuc2lnbmVkKSBjb25zdDsKICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHJpZ2h0KHVuc2lnbmVkKSBjb25zdDsKICAgICBEZXByZWNhdGVkU3RyaW5n
IG1pZCh1bnNpZ25lZCwgdW5zaWduZWQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwpAQCAtNTE4LDIw
ICs1MDIsNiBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0VW5pY29kZShjb25z
dCBRQ2hhciAqLCB1bnNpZ25lZCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TGF0aW4xKGNv
bnN0IGNoYXIgKiwgaW50IGxlbj0tMSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0o
c2hvcnQpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgJnNldE51bSh1bnNpZ25lZCBzaG9ydCk7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TnVtKGludCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyAm
c2V0TnVtKHVuc2lnbmVkKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0obG9uZyk7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TnVtKHVuc2lnbmVkIGxvbmcpOwotICAgIERlcHJlY2F0
ZWRTdHJpbmcgJnNldE51bShkb3VibGUpOwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyAmc3ByaW50
Zihjb25zdCBjaGFyICosIC4uLikgCi0jaWYgX19HTlVDX18KLSAgICBfX2F0dHJpYnV0ZV9fICgo
Zm9ybWF0IChwcmludGYsIDIsIDMpKSkKLSNlbmRpZgotICAgIDsKLQogICAgIERlcHJlY2F0ZWRT
dHJpbmcgJmFwcGVuZChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwogICAgIERlcHJlY2F0ZWRT
dHJpbmcgJmFwcGVuZChRQ2hhcik7CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmYXBwZW5kKGNoYXIp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
S1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiwxNyArMzMyLDE2IEBAIEtVUkw6OktVUkwo
Y29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChhYnNvbHV0ZSkgeworICAgIGlmIChhYnNvbHV0ZSkKICAgICAgICAgcGFyc2Uoc3RyLCAoYWxs
QVNDSUkgJiYgIXN0cmlwcGVkU3RhcnQgJiYgKGNoYXJzVG9DaG9wT2ZmRW5kID09IDApKSA/ICZy
ZWwgOiAwKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAgICAgICAvLyBpZiB0aGUgYmFz
ZSBpcyBpbnZhbGlkLCBqdXN0IGFwcGVuZCB0aGUgcmVsYXRpdmUKICAgICAgICAgLy8gcG9ydGlv
bi4gVGhlIFJGQyBkb2VzIG5vdCBzcGVjaWZ5IHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlLgogICAg
ICAgICBpZiAoIWJhc2UubV9pc1ZhbGlkKSB7CiAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nICsgc3RyOwogICAgICAgICAgICAgcGFyc2UobmV3VVJM
LmFzY2lpKCksICZuZXdVUkwpOwotICAgICAgICAgICAgaWYgKHN0ckJ1ZmZlcikgeworICAgICAg
ICAgICAgaWYgKHN0ckJ1ZmZlcikKICAgICAgICAgICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIp
OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTQx
MCwxMiArNDA5LDEwIEBAIEtVUkw6OktVUkwoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmUK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoYmFzZVN0cmluZ0VuZCA9PSBi
YXNlU3RyaW5nU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbm8gcGF0aCBpbiBiYXNl
LCBhZGQgYSBwYXRoIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAhPSBiYXNlLnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAn
XDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIgIT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEgIT0gYmFzZS5wYXRoRW5kUG9zICYmICpzdHIgIT0g
J1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3RyICE9ICcjJykKICAgICAgICAgICAgICAgICAgICAg
ICAgICpidWZmZXJQb3MrKyA9ICcvJzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJlbW92aW5nRG90cyhidWZmZXJQb3MsIGJhc2VTdHJp
bmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAtIGJhc2VTdHJpbmdTdGFydCk7Ci0gICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVsU3RyaW5nU3RhcnQgPSBz
dHI7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5n
U3RhcnQ7CkBAIC00MjUsOSArNDIyLDggQEAgS1VSTDo6S1VSTChjb25zdCBLVVJMICZiYXNlLCBj
b25zdCBEZXByZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlZ21lbnRFbmRD
aGFyKHJlbFN0cmluZ1Bvc1sxXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
a2lwIG92ZXIgIi4iIHNlZ21lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJp
bmdQb3MgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9z
WzBdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQ
b3NbMF0gPT0gJy8nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQ
b3MrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJl
bFN0cmluZ1Bvc1sxXSA9PSAnLicgJiYgaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9z
WzJdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLi4iIHNl
Z21lbnQgYW5kIHJld2luZCB0aGUgbGFzdCBzZWdtZW50CkBAIC00MzUsMTIgKzQzMSwxMCBAQCBL
VVJMOjpLVVJMKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gIi4uIiBzZWdtZW50cyAtIHdlIGNob29zZSB0byBkcm9wIHRoZW0gc2lu
Y2Ugc29tZSB3ZWIgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbGll
cyBvbiB0aGlzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAy
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAn
LycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChidWZmZXJQb3MgPiBidWZmZXJQYXRoU3RhcnQgKyAxKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MtLTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclBvcyA+
IGJ1ZmZlclBhdGhTdGFydCArIDEgICYmIGJ1ZmZlclBvc1stMV0gIT0gJy8nKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTQ2NSw5ICs0NTksOCBAQCBLVVJMOjpLVVJMKGNvbnN0IEtVUkwgJmJh
c2UsIGNvbnN0IERlcHJlCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKHN0ckJ1ZmZl
cikgeworICAgIGlmIChzdHJCdWZmZXIpCiAgICAgICAgIGZhc3RGcmVlKHN0ckJ1ZmZlcik7Ci0g
ICAgfQogfQogCiBib29sIEtVUkw6Omhhc1BhdGgoKSBjb25zdApAQCAtNDc3LDE4ICs0NzAsMTYg
QEAgYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKIAogRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpw
cm90b2NvbCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKKyAgICBpZiAoIW1faXNW
YWxpZCkKICAgICAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICB9CiAKICAgICBy
ZXR1cm4gdXJsU3RyaW5nLmxlZnQoc2NoZW1lRW5kUG9zKTsKIH0KIAogRGVwcmVjYXRlZFN0cmlu
ZyBLVVJMOjpob3N0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNWYWxpZCkgeworICAgIGlmICgh
bV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KIAog
ICAgIGludCBzdGFydCA9IChwYXNzd29yZEVuZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dv
cmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyArIDE7CiAgICAgcmV0dXJuIGRlY29kZV9zdHJpbmco
dXJsU3RyaW5nLm1pZChzdGFydCwgaG9zdEVuZFBvcyAtIHN0YXJ0KSk7CkBAIC01OTQsNyArNTg1
LDcgQEAgdm9pZCBLVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCiAgICAgaWYgKG1faXNW
YWxpZCkgewogICAgICAgICBib29sIGNvbG9uTmVlZGVkID0gcG9ydEVuZFBvcyA9PSBob3N0RW5k
UG9zOwogICAgICAgICBpbnQgcG9ydFN0YXJ0ID0gKGNvbG9uTmVlZGVkID8gaG9zdEVuZFBvcyA6
IGhvc3RFbmRQb3MgKyAxKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxT
dHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVkID8gIjoiIDogRGVwcmVjYXRlZFN0
cmluZygpKSArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpKSArIHVybFN0cmluZy5taWQocG9y
dEVuZFBvcyk7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxl
ZnQocG9ydFN0YXJ0KSArIChjb2xvbk5lZWRlZCA/ICI6IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkg
KyBTdHJpbmc6Om51bWJlcihpKS5kZXByZWNhdGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlkKHBv
cnRFbmRQb3MpOwogICAgICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CiAgICAg
fQogfQpAQCAtNjkwLDkgKzY4MSw4IEBAIHZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBEZXByZWNh
dGVkU3RyaW4KIAogRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogewot
ICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVy
biB1cmxTdHJpbmc7Ci0gICAgfQogCiAgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQgPSBwcm90
b2NvbCgpICsgIjoiOwogCkBAIC03MDYsMjAgKzY5NiwxOCBAQCBEZXByZWNhdGVkU3RyaW5nIEtV
Ukw6OnByZXR0eVVSTCgpIGNvbnN0CiAgICAgICAgIGF1dGhvcml0eSArPSBob3N0KCk7CiAgICAg
ICAgIGlmIChwb3J0KCkgIT0gMCkgewogICAgICAgICAgICAgYXV0aG9yaXR5ICs9ICI6IjsKLSAg
ICAgICAgICAgIGF1dGhvcml0eSArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIocG9ydCgpKTsK
KyAgICAgICAgICAgIGF1dGhvcml0eSArPSBTdHJpbmc6Om51bWJlcihwb3J0KCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghYXV0aG9yaXR5LmlzRW1w
dHkoKSkgeworICAgIGlmICghYXV0aG9yaXR5LmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0ICs9
ICIvLyIgKyBhdXRob3JpdHk7Ci0gICAgfQogCiAgICAgcmVzdWx0ICs9IHBhdGgoKTsKICAgICBy
ZXN1bHQgKz0gcXVlcnkoKTsKIAotICAgIGlmIChmcmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBv
cykgeworICAgIGlmIChmcmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBvcykKICAgICAgICAgcmVz
dWx0ICs9ICIjIiArIHJlZigpOwotICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTgg
QEAgcHVibGljOgogCiAgICAgUUNoYXIgKnVuaWNvZGUoKSBjb25zdDsKICAgICBEZXByZWNhdGVk
U3RyaW5nIGRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgU3RyaW5n
IG51bWJlcihpbnQpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsKKyAgICBz
dGF0aWMgU3RyaW5nIG51bWJlcihsb25nKTsKKyAgICBzdGF0aWMgU3RyaW5nIG51bWJlcih1bnNp
Z25lZCBsb25nKTsKKyAgICBzdGF0aWMgU3RyaW5nIG51bWJlcihkb3VibGUpOworICAgIAorICAg
IFN0cmluZyYgc3ByaW50Zihjb25zdCBjaGFyICosIC4uLikKKyNpZiBfX0dOVUNfXworICAgIF9f
YXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorI2VuZGlmCisgICAgOwogCiAg
ICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3Q7CiAgICAgTGVuZ3RoKiB0b0xlbmd0aEFy
cmF5KGludCYgbGVuKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5n
LmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsOSArNDEyLDggQEAgdm9pZCBLV1FTdHJpbmdE
YXRhOjppbmNyZWFzZVVuaWNvZGVTaXplKAogICAgICAgICBpZiAoX2xlbmd0aCkKICAgICAgICAg
ICAgIG1lbWNweShuZXdVbmksIF91bmljb2RlLCBfbGVuZ3RoKnNpemVvZihRQ2hhcikpOwogICAg
ICAgICBfdW5pY29kZSA9IG5ld1VuaTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAg
ICBfdW5pY29kZSA9IFJFQUxMT0NfUUNIQVIoX3VuaWNvZGUsIG5ld1NpemUpOwotICAgIH0KICAg
ICAKICAgICBfbWF4VW5pY29kZSA9IG5ld1NpemU7CiAgICAgX2lzVW5pY29kZVZhbGlkID0gMTsK
QEAgLTUxMyw0NyArNTEyLDYgQEAgUUNoYXIgKktXUVN0cmluZ0RhdGE6Om1ha2VVbmljb2RlKCkK
ICAgICByZXR1cm4gX3VuaWNvZGU7CiB9CiAKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVw
cmVjYXRlZFN0cmluZwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLURlcHJlY2F0ZWRTdHJpbmcg
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGludCBuKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cXM7Ci0gICAgcXMuc2V0TnVtKG4pOwotICAgIHJldHVybiBxczsKLX0KLQotRGVwcmVjYXRlZFN0
cmluZyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbikKLXsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHFzOwotICAgIHFzLnNldE51bShuKTsKLSAgICByZXR1cm4gcXM7Ci19Ci0KLURl
cHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGxvbmcgbikKLXsKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHFzOwotICAgIHFzLnNldE51bShuKTsKLSAgICByZXR1cm4gcXM7Ci19
Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxv
bmcgbikKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHFzOwotICAgIHFzLnNldE51bShuKTsKLSAg
ICByZXR1cm4gcXM7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKGRvdWJsZSBuKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVt
KG4pOwotICAgIHJldHVybiBxczsKLX0KLQogaW5saW5lIHZvaWQgRGVwcmVjYXRlZFN0cmluZzo6
ZGV0YWNoSWZJbnRlcm5hbCgpCiB7CiAgICAgS1dRU3RyaW5nRGF0YSAqb2xkRGF0YSA9ICpkYXRh
SGFuZGxlOwpAQCAtMTMzNCwxOCArMTI5Miw2IEBAIHZvaWQgRGVwcmVjYXRlZFN0cmluZzo6Y29w
eUxhdGluMShjaGFyICoKICAgICAgICAgKmJ1ZmZlcisrID0gKnVjKys7CiB9CiAKLXNob3J0IERl
cHJlY2F0ZWRTdHJpbmc6OnRvU2hvcnQoYm9vbCAqb2ssIGludCBiYXNlKSBjb25zdAotewotICAg
IGludCB2ID0gdG9JbnQob2ssIGJhc2UpOwotICAgIHNob3J0IHN2ID0gdjsKLSAgICBpZiAoc3Yg
IT0gdikgewotICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzdjsKLX0KLQogdW5zaWduZWQgc2hvcnQg
RGVwcmVjYXRlZFN0cmluZzo6dG9VU2hvcnQoYm9vbCAqb2ssIGludCBiYXNlKSBjb25zdAogewog
ICAgIHVuc2lnbmVkIHYgPSB0b1VJbnQob2ssIGJhc2UpOwpAQCAtMTQ4OSw3MyArMTQzNSw2IEBA
IGJvb2wgRGVwcmVjYXRlZFN0cmluZzo6ZmluZEFyZyhpbnQmIHBvcywKICAgICByZXR1cm4gbG93
ZXN0ICE9IDA7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6YXJnKGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcgJmEsIGludCBmaWVsZHdpZHRoKSBjb25zdAotewotICAgIGlu
dCBwb3MsIGxlbjsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHIgPSAqdGhpczsKLQotICAgIGlmICgg
IWZpbmRBcmcoIHBvcywgbGVuICkgKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGV4dCBh
dCBsZWFzdCBhcHBlYXJzIFNPTUVXSEVSRQotICAgICAgICByICs9ICcgJzsKLSAgICAgICAgcG9z
ID0gci5kYXRhSGFuZGxlWzBdLT5fbGVuZ3RoOwotICAgICAgICBsZW4gPSAwOwotICAgIH0KLQot
ICAgIHIucmVwbGFjZSggcG9zLCBsZW4sIGEgKTsKLSAgICBpZiAoIGZpZWxkd2lkdGggPCAwICkg
ewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHM7Ci0gICAgICAgIHdoaWxlICggKHVuc2lnbmVk
KS1maWVsZHdpZHRoID4gYS5kYXRhSGFuZGxlWzBdLT5fbGVuZ3RoICkgewotICAgICAgICAgICAg
cyArPSAnICc7Ci0gICAgICAgICAgICBmaWVsZHdpZHRoKys7Ci0gICAgICAgIH0KLSAgICAgICAg
ci5pbnNlcnQoIHBvcyArIGEuZGF0YUhhbmRsZVswXS0+X2xlbmd0aCwgcyApOwotICAgIH0gZWxz
ZSBpZiAoIGZpZWxkd2lkdGggKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgczsKLSAgICAg
ICAgd2hpbGUgKCAodW5zaWduZWQpZmllbGR3aWR0aCA+IGEuZGF0YUhhbmRsZVswXS0+X2xlbmd0
aCApIHsKLSAgICAgICAgICAgIHMgKz0gJyAnOwotICAgICAgICAgICAgZmllbGR3aWR0aC0tOwot
ICAgICAgICB9Ci0gICAgICAgIHIuaW5zZXJ0KCBwb3MsIHMgKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcjsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcoc2hvcnQg
cmVwbGFjZW1lbnQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJnKG51bWJlcigo
aW50KXJlcGxhY2VtZW50KSwgd2lkdGgpOwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0
ZWRTdHJpbmc6OmFyZyh1bnNpZ25lZCBzaG9ydCByZXBsYWNlbWVudCwgaW50IHdpZHRoKSBjb25z
dAotewotICAgIHJldHVybiBhcmcobnVtYmVyKCh1bnNpZ25lZClyZXBsYWNlbWVudCksIHdpZHRo
KTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcoaW50IHJlcGxh
Y2VtZW50LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFyZyhudW1iZXIocmVwbGFj
ZW1lbnQpLCB3aWR0aCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6
YXJnKHVuc2lnbmVkIHJlcGxhY2VtZW50LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGFyZyhudW1iZXIocmVwbGFjZW1lbnQpLCB3aWR0aCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcg
RGVwcmVjYXRlZFN0cmluZzo6YXJnKGxvbmcgcmVwbGFjZW1lbnQsIGludCB3aWR0aCkgY29uc3QK
LXsKLSAgICByZXR1cm4gYXJnKG51bWJlcihyZXBsYWNlbWVudCksIHdpZHRoKTsKLX0KLQotRGVw
cmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcodW5zaWduZWQgbG9uZyByZXBsYWNl
bWVudCwgaW50IHdpZHRoKSBjb25zdAotewotICAgIHJldHVybiBhcmcobnVtYmVyKHJlcGxhY2Vt
ZW50KSwgd2lkdGgpOwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmFy
Zyhkb3VibGUgcmVwbGFjZW1lbnQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJn
KG51bWJlcihyZXBsYWNlbWVudCksIHdpZHRoKTsKLX0KLQogRGVwcmVjYXRlZFN0cmluZyBEZXBy
ZWNhdGVkU3RyaW5nOjpsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QKIHsgcmV0dXJuIG1pZCgwLCBs
ZW4pOyB9CiAKQEAgLTE4MTksNzkgKzE2OTgsNiBAQCBEZXByZWNhdGVkU3RyaW5nICZEZXByZWNh
dGVkU3RyaW5nOjpzZXRMCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1EZXByZWNhdGVkU3RyaW5n
ICZEZXByZWNhdGVkU3RyaW5nOjpzZXROdW0oc2hvcnQgbikKLXsKLSAgICByZXR1cm4gc3ByaW50
ZigiJWQiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0
TnVtKHVuc2lnbmVkIHNob3J0IG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYoIiV1Iiwgbik7Ci19
Ci0KLURlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNldE51bShpbnQgbikKLXsK
LSAgICByZXR1cm4gc3ByaW50ZigiJWQiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyAmRGVw
cmVjYXRlZFN0cmluZzo6c2V0TnVtKHVuc2lnbmVkIG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYo
IiV1Iiwgbik7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNldE51
bShsb25nIG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYoIiVsZCIsIG4pOwotfQotCi1EZXByZWNh
dGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzZXROdW0odW5zaWduZWQgbG9uZyBuKQotewot
ICAgIHJldHVybiBzcHJpbnRmKCIlbHUiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyAmRGVw
cmVjYXRlZFN0cmluZzo6c2V0TnVtKGRvdWJsZSBuKQotewotICAgIHJldHVybiBzcHJpbnRmKCIl
LjZsZyIsIG4pOwotfQotCi1EZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzcHJp
bnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2
YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIAotICAgIC8vIERvIHRoZSBmb3JtYXQgb25jZSB0
byBnZXQgdGhlIGxlbmd0aC4KLSAgICBjaGFyIGNoOwotICAgIGludCByZXN1bHQgPSB2c25wcmlu
dGYoJmNoLCAxLCBmb3JtYXQsIGFyZ3MpOwotICAgIAotICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkg
c3RyaW5nIGNhc2UgdG8gc2ltcGxpZnkgdGhlIGNvZGUgYmVsb3cuCi0gICAgaWYgKHJlc3VsdCA8
PSAwKSB7IC8vIFBPU0lYIHJldHVybnMgMCBpbiBlcnJvcjsgV2luZG93cyByZXR1cm5zIGEgbmVn
YXRpdmUgbnVtYmVyLgotICAgICAgICBzZXRVbmljb2RlKDAsIDApOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIGxlbiA9IHJlc3VsdDsKLSAgICAKLSAgICAvLyBB
cnJhbmdlIGZvciBzdG9yYWdlIGZvciB0aGUgcmVzdWx0aW5nIHN0cmluZy4KLSAgICBkZXRhY2hB
bmREaXNjYXJkQ2hhcmFjdGVycygpOwotICAgIGlmIChsZW4gPj0gZGF0YUhhbmRsZVswXS0+X21h
eEFzY2lpIHx8IGRhdGFIYW5kbGVbMF0tPnJlZkNvdW50ICE9IDEgfHwgIWRhdGFIYW5kbGVbMF0t
Pl9pc0FzY2lpVmFsaWQpIHsKLSAgICAgICAgLy8gRnJlZSBvdXIgaGFuZGxlIGlmIGl0IGlzbid0
IHRoZSBzaGFyZWQgbnVsbCBoYW5kbGUsIGFuZCBpZiBuby1vbmUgZWxzZSBpcyB1c2luZyBpdC4K
LSAgICAgICAgYm9vbCBuZWVkVG9GcmVlSGFuZGxlID0gZGF0YUhhbmRsZSAhPSBzaGFyZWRfbnVs
bF9oYW5kbGUgJiYgZGF0YUhhbmRsZVswXS0+cmVmQ291bnQgPT0gMTsKLSAgICAgICAgZGVyZWYo
KTsKLSAgICAgICAgaWYgKG5lZWRUb0ZyZWVIYW5kbGUpCi0gICAgICAgICAgICBmcmVlSGFuZGxl
KGRhdGFIYW5kbGUpOwotICAgICAgICBkYXRhSGFuZGxlID0gYWxsb2NhdGVIYW5kbGUoKTsKLSAg
ICAgICAgKmRhdGFIYW5kbGUgPSBuZXcgS1dRU3RyaW5nRGF0YSgoY2hhciAqKTAsIGxlbik7Ci0g
ICAgICAgIGRhdGFIYW5kbGVbMF0tPl9pc0hlYXBBbGxvY2F0ZWQgPSAxOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGRhdGFIYW5kbGVbMF0tPl9sZW5ndGggPSBsZW47Ci0gICAgICAgIGRhdGFIYW5k
bGVbMF0tPl9pc1VuaWNvZGVWYWxpZCA9IDA7Ci0gICAgfQotCi0gICAgLy8gTm93IGRvIHRoZSBm
b3JtYXR0aW5nIGFnYWluLCBndWFyYW50ZWVkIHRvIGZpdC4KLSAgICB2c3ByaW50Zihjb25zdF9j
YXN0PGNoYXIqPihhc2NpaSgpKSwgZm9ybWF0LCBhcmdzKTsKLQotICAgIHJldHVybiAqdGhpczsK
LX0KLQogRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cHJlcGVuZChjb25zdCBE
ZXByZWNhdGVkU3RyaW5nICZxcykKIHsKICAgICByZXR1cm4gaW5zZXJ0KDAsIHFzKTsKQEAgLTE5
NDUsMTggKzE3NTEsMTggQEAgRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6aW5z
ZQogICAgICAgICBRQ2hhciAqdGFyZ2V0Q2hhcnM7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1
cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZS4KLSAgICAgICAgc2V0TGVuZ3RoIChvcmlnaW5h
bExlbmd0aCArIGluc2VydExlbmd0aCk7CisgICAgICAgIHNldExlbmd0aChvcmlnaW5hbExlbmd0
aCArIGluc2VydExlbmd0aCk7CiAgICAgICAgIHRhcmdldENoYXJzID0gKFFDaGFyICopdW5pY29k
ZSgpOwogICAgICAgICAKICAgICAgICAgLy8gTW92ZSB0YWlsIHRvIG1ha2Ugc3BhY2UgZm9yIGlu
c2VydGVkIGNoYXJhY3RlcnMuCi0gICAgICAgIG1lbW1vdmUgKHRhcmdldENoYXJzKyhpbmRleCtp
bnNlcnRMZW5ndGgpLCB0YXJnZXRDaGFycytpbmRleCwgKG9yaWdpbmFsTGVuZ3RoLWluZGV4KSpz
aXplb2YoUUNoYXIpKTsKKyAgICAgICAgbWVtbW92ZSh0YXJnZXRDaGFycysoaW5kZXgraW5zZXJ0
TGVuZ3RoKSwgdGFyZ2V0Q2hhcnMraW5kZXgsIChvcmlnaW5hbExlbmd0aC1pbmRleCkqc2l6ZW9m
KFFDaGFyKSk7CiAKICAgICAgICAgLy8gSW5zZXJ0IGNoYXJhY3RlcnMuCiAgICAgICAgIHVuc2ln
bmVkIGkgPSBpbnNlcnRMZW5ndGg7CiAgICAgICAgIFFDaGFyICp0YXJnZXQgPSB0YXJnZXRDaGFy
cytpbmRleDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICAqdGFy
Z2V0KysgPSAqaW5zZXJ0Q2hhcnMrKzsgICAgICAgIAorICAgICAgICAgICAgKnRhcmdldCsrID0g
Kmluc2VydENoYXJzKys7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgRkFUQUwoImludmFsaWQg
Y2hhcmFjdGVyIGNhY2hlIik7CkBAIC0yMjk2LDE3ICsyMTAyLDE1IEBAIHZvaWQgRGVwcmVjYXRl
ZFN0cmluZzo6c2V0TGVuZ3RoKHVuc2lnbmUKICAgICBBU1NFUlQoZGF0YUhhbmRsZSAhPSBzaGFy
ZWRfbnVsbF9oYW5kbGUpOwogICAgIAogICAgIGlmIChkYXRhSGFuZGxlWzBdLT5faXNBc2NpaVZh
bGlkKXsKLSAgICAgICAgaWYgKG5ld0xlbisxID4gZGF0YUhhbmRsZVswXS0+X21heEFzY2lpKSB7
CisgICAgICAgIGlmIChuZXdMZW4rMSA+IGRhdGFIYW5kbGVbMF0tPl9tYXhBc2NpaSkKICAgICAg
ICAgICAgIGRhdGFIYW5kbGVbMF0tPmluY3JlYXNlQXNjaWlTaXplKG5ld0xlbisxKTsKLSAgICAg
ICAgfQogICAgICAgICAvLyBFbnN1cmUgbnVsbCB0ZXJtaW5hdGlvbiwgYWx0aG91Z2ggbmV3bHkg
YWxsb2NhdGVkCiAgICAgICAgIC8vIGJ5dGVzIGNvbnRhaW4gZ2FyYmFnZS4KICAgICAgICAgZGF0
YUhhbmRsZVswXS0+X2FzY2lpW25ld0xlbl0gPSAwOwogICAgIH0KICAgICBlbHNlIGlmIChkYXRh
SGFuZGxlWzBdLT5faXNVbmljb2RlVmFsaWQpewotICAgICAgICBpZiAobmV3TGVuID4gZGF0YUhh
bmRsZVswXS0+X21heFVuaWNvZGUpIHsKKyAgICAgICAgaWYgKG5ld0xlbiA+IGRhdGFIYW5kbGVb
MF0tPl9tYXhVbmljb2RlKQogICAgICAgICAgICAgZGF0YUhhbmRsZVswXS0+aW5jcmVhc2VVbmlj
b2RlU2l6ZShuZXdMZW4pOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgRkFU
QUwoImludmFsaWQgY2hhcmFjdGVyIGNhY2hlIik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbG9yLmNwcAkocmV2aXNp
b24gMTM0ODcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAKICNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxreG1s
Y29yZS9Bc3NlcnRpb25zLmg+CiAKIC8vIFR1cm4gb2ZmIGlubGluaW5nIHRvIGF2b2lkIHdhcm5p
bmcgd2l0aCBuZXdlciBnY2MuCkBAIC0xMDYsOSArMTA3LDkgQEAgQ29sb3I6OkNvbG9yKGNvbnN0
IGNoYXIgKm5hbWUpCiAgICAgfQogfQogCi1EZXByZWNhdGVkU3RyaW5nIENvbG9yOjpuYW1lKCkg
Y29uc3QKK1N0cmluZyBDb2xvcjo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmlu
ZyBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhbHBoYSgpIDwgMHhGRikKICAgICAg
ICAgbmFtZS5zcHJpbnRmKCIjJTAyWCUwMlglMDJYJTAyWCIsIHJlZCgpLCBncmVlbigpLCBibHVl
KCksIGFscGhhKCkpOwogICAgIGVsc2UKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01I
VE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShy
ZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDc4LDggKzE0NzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6
SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldENvbHM6KGludCljb2xzCiB7Ci0gICAgU3RyaW5nIHZh
bHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xzKSk7Ci0gICAgW3NlbGYgX3RleHRBcmVh
RWxlbWVudF0tPnNldEF0dHJpYnV0ZShjb2xzQXR0ciwgdmFsdWUpOworICAgIFtzZWxmIF90ZXh0
QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoY29sc0F0dHIsIFN0cmluZzo6bnVtYmVyKGNvbHMp
KTsKIH0KIAogLSAoQk9PTClkaXNhYmxlZApAQCAtMTUxOSw4ICsxNTE4LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRSb3dzOihpbnQpcm93cwog
ewotICAgIFN0cmluZyB2YWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIocm93cykpOwotICAg
IFtzZWxmIF90ZXh0QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c0F0dHIsIHZhbHVlKTsK
KyAgICBbc2VsZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKHJvd3NBdHRyLCBTdHJp
bmc6Om51bWJlcihyb3dzKSk7CiB9CiAKIC0gKGludCl0YWJJbmRleApAQCAtMTc3Nyw4ICsxNzc1
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRT
dGFydDooaW50KXN0YXJ0CiB7Ci0gICAgU3RyaW5nIHZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihzdGFydCkpOwotICAgIFtzZWxmIF9vTGlzdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoc3Rh
cnRBdHRyLCB2YWx1ZSk7CisgICAgW3NlbGYgX29MaXN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShz
dGFydEF0dHIsIFN0cmluZzo6bnVtYmVyKHN0YXJ0KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdHlw
ZQpAQCAtMTk2OSw4ICsxOTY2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1l
czsKIAogLSAodm9pZClzZXRXaWR0aDooaW50KXdpZHRoCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIod2lkdGgpKTsKLSAgICBbc2VsZiBfcHJlRWxlbWVudF0t
PnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3ByZUVsZW1lbnRd
LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih3aWR0aCkpOwogfQogCiBA
ZW5kCkBAIC0yMzU3LDggKzIzNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5h
bWVzOwogCiAtICh2b2lkKXNldEhlaWdodDooaW50KWhlaWdodAogewotICAgIFN0cmluZyBzdHJp
bmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwotICAgIFtzZWxmIF9pbWFnZUVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfaW1h
Z2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKGhlaWdo
dCkpOwogfQogCiAtIChpbnQpaHNwYWNlCkBAIC0yMzY4LDggKzIzNjMsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhzcGFjZTooaW50KWhzcGFj
ZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhzcGFjZSkp
OwotICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3Ry
aW5nKTsKKyAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIs
IFN0cmluZzo6bnVtYmVyKGhzcGFjZSkpOwogfQogCiAtIChCT09MKWlzTWFwCkBAIC0yNDI0LDgg
KzI0MTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lk
KXNldFZzcGFjZTooaW50KXZzcGFjZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKHZzcGFjZSkpOwotICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRy
aWJ1dGUodnNwYWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0
QXR0cmlidXRlKHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChp
bnQpd2lkdGgKQEAgLTI0MzUsOCArMjQyOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpI
VE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aAogewotICAgIFN0cmluZyBz
dHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci0gICAgW3NlbGYgX2ltYWdl
RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2lt
YWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRo
KSk7CiB9CiAKIEBlbmQKQEAgLTI1NTcsOCArMjU0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0SHNwYWNlOihpbnQpaHNwYWNlCiB7Ci0gICAg
U3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7Ci0gICAgW3Nl
bGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3RyaW5nKTsKKyAg
ICBbc2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBTdHJpbmc6
Om51bWJlcihoc3BhY2UpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiluYW1lCkBAIC0yNTg4LDggKzI1
NzksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNl
dFRhYkluZGV4OihpbnQpdGFiSW5kZXgKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwotICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0
QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfb2JqZWN0RWxlbWVu
dF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7
CiB9CiAKIC0gKE5TU3RyaW5nICopdHlwZQpAQCAtMjYxOSw4ICsyNjA5LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3Bh
Y2UKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2Up
KTsKLSAgICBbc2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBz
dHJpbmcpOworICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0
dHIsIFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKXdpZHRoCkBA
IC0yNzY5LDggKzI3NTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwog
CiAtICh2b2lkKXNldEhzcGFjZTooaW50KWhzcGFjZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKGhzcGFjZSkpOwotICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50
XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2FwcGxldEVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7
CiB9CiAKIC0gKE5TU3RyaW5nICopbmFtZQpAQCAtMjgwMCw4ICsyNzg4LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3Bh
Y2UKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2Up
KTsKLSAgICBbc2VsZiBfYXBwbGV0RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBz
dHJpbmcpOworICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0
dHIsIFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKXdpZHRoCkBA
IC0yOTI2LDggKzI5MTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwog
CiAtICh2b2lkKXNldFRhYkluZGV4OihpbnQpdGFiSW5kZXgKIHsKLSAgICBTdHJpbmcgc3RyaW5n
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwotICAgIFtzZWxmIF9hcmVhRWxl
bWVudF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2Fy
ZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIodGFi
SW5kZXgpKTsKIH0KIAogLSAoTlNTdHJpbmcgKil0YXJnZXQKQEAgLTMzNzIsOCArMzM1OCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0U3Bhbjoo
aW50KXNwYW4KIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihz
cGFuKSk7Ci0gICAgW3NlbGYgX3RhYmxlQ29sRWxlbWVudF0tPnNldEF0dHJpYnV0ZShzcGFuQXR0
ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfdGFibGVDb2xFbGVtZW50XS0+c2V0QXR0cmlidXRlKHNw
YW5BdHRyLCBTdHJpbmc6Om51bWJlcihzcGFuKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdkFsaWdu
CkBAIC0zNTYyLDggKzM1NDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVz
OwogCiAtICh2b2lkKXNldENvbFNwYW46KGludCljb2xTcGFuCiB7Ci0gICAgU3RyaW5nIHN0cmlu
ZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29sU3BhbikpOwotICAgIFtzZWxmIF90YWJsZUNl
bGxFbGVtZW50XS0+c2V0QXR0cmlidXRlKGNvbHNwYW5BdHRyLCBzdHJpbmcpOworICAgIFtzZWxm
IF90YWJsZUNlbGxFbGVtZW50XS0+c2V0QXR0cmlidXRlKGNvbHNwYW5BdHRyLCBTdHJpbmc6Om51
bWJlcihjb2xTcGFuKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopaGVhZGVycwpAQCAtMzYwMyw4ICsz
NTg3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClz
ZXRSb3dTcGFuOihpbnQpcm93U3BhbgogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKHJvd1NwYW4pKTsKLSAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfdGFibGVDZWxsRWxl
bWVudF0tPnNldEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIocm93U3Bhbikp
OwogfQogCiAtIChOU1N0cmluZyAqKXNjb3BlCkBAIC0zOTI2LDggKzM5MDksNyBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhlaWdodDooaW50KWhl
aWdodAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhlaWdo
dCkpOwotICAgIFtzZWxmIF9lbWJlZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwg
c3RyaW5nKTsKKyAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0
dHIsIFN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAg
LTM5NjcsOCArMzk0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAK
IC0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci0gICAgW3NlbGYgX2VtYmVkRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2VtYmVkRWxlbWVudF0t
PnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIEBl
bmQKSW5kZXg6IFdlYkNvcmUvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29y
ZS9odG1sL2h0bWxfYmFzZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMTYgKzE2Niwx
MCBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiAgICAgLy8gRklY
TUU6IHBlcmhhcHMgdGhpcyBjb2RlIHNob3VsZCBiZSBpbiBhdHRhY2goKSBpbnN0ZWFkIG9mIGhl
cmUKIAogICAgIEZyYW1lVmlldyAqdyA9IGdldERvY3VtZW50KCktPnZpZXcoKTsKLSAgICBpZiAo
dyAmJiB3LT5tYXJnaW5XaWR0aCgpICE9IC0xKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
czsKLSAgICAgICAgcy5zcHJpbnRmKCIlZCIsIHctPm1hcmdpbldpZHRoKCkpOwotICAgICAgICBz
ZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCBzKTsKLSAgICB9Ci0gICAgaWYgKHcgJiYgdy0+
bWFyZ2luSGVpZ2h0KCkgIT0gLTEpIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOwotICAg
ICAgICBzLnNwcmludGYoIiVkIiwgdy0+bWFyZ2luSGVpZ2h0KCkpOwotICAgICAgICBzZXRBdHRy
aWJ1dGUobWFyZ2luaGVpZ2h0QXR0ciwgcyk7Ci0gICAgfQorICAgIGlmICh3ICYmIHctPm1hcmdp
bldpZHRoKCkgIT0gLTEpCisgICAgICAgIHNldEF0dHJpYnV0ZShtYXJnaW53aWR0aEF0dHIsIFN0
cmluZzo6bnVtYmVyKHctPm1hcmdpbldpZHRoKCkpKTsKKyAgICBpZiAodyAmJiB3LT5tYXJnaW5I
ZWlnaHQoKSAhPSAtMSkKKyAgICAgICAgc2V0QXR0cmlidXRlKG1hcmdpbmhlaWdodEF0dHIsIFN0
cmluZzo6bnVtYmVyKHctPm1hcmdpbkhlaWdodCgpKSk7CiAKICAgICBpZiAodykKICAgICAgICAg
dy0+c2NoZWR1bGVSZWxheW91dCgpOwpJbmRleDogV2ViQ29yZS9odG1sL2h0bWxfaW1hZ2VpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCShyZXZp
c2lvbiAxMzQ4NykKKysrIFdlYkNvcmUvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9v
bCBpZ25vcmVQCiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBh
dHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wg
b2s7Ci0gICAgICAgIGludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0ludCgmb2spOworICAgICAgICBpbnQgd2lkdGggPSBnZXRBdHRyaWJ1dGUo
d2lkdGhBdHRyKS50b0ludCgmb2spOwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1
cm4gd2lkdGg7CiAgICAgICAgIApAQCAtMjgzLDcgKzI4Myw3IEBAIGludCBIVE1MSW1hZ2VFbGVt
ZW50OjpoZWlnaHQoYm9vbCBpZ25vcmUKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAg
Ly8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUK
ICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWln
aHRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IGhlaWdo
dCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgICAgICBpZiAob2sp
CiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAgICAgICAKQEAgLTM0NCwxMiArMzQ0LDEy
IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojpib3JkZXIoKSBjb25zdAogCiB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldEJvcmRlcihpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGJvcmRl
ckF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZShib3JkZXJBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldEhlaWdodChpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdo
dEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiBpbnQgSFRNTEltYWdl
RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKQEAgLTM2MCw3ICszNjAsNyBAQCBpbnQgSFRNTEltYWdl
RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIc3Bh
Y2UoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojppc01hcCgp
IGNvbnN0CkBAIC00MTEsMTIgKzQxMSwxMiBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6dnNwYWNl
KCkgY29uc3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRWc3BhY2UoaW50IHZhbHVlKQog
ewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIo
dmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRXaWR0aChpbnQgdmFsdWUpCiB7
Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZh
bHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUp
KTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6OngoKSBjb25zdApAQCAtNjkzLDcgKzY5Myw3
IEBAIGludCBIVE1MQXJlYUVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKIAogdm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
dGFiaW5kZXhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKKyAgICBz
ZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwogfQog
CiBTdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25zdApJbmRleDogV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuaAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kRGF0
YShjb25zdCBTdHJpbmcgJmtleSwgY29uc3QgRGVwcmVjYXRlZENTdHJpbmcgJnZhbHVlKQogICAg
ICAgICB7IGFwcGVuZFN0cmluZyhrZXkuZGVwcmVjYXRlZFN0cmluZygpKTsgYXBwZW5kU3RyaW5n
KHZhbHVlKTsgfQogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcgJmtleSwgaW50IHZh
bHVlKQotICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXkuZGVwcmVjYXRlZFN0cmluZygpKTsgYXBw
ZW5kU3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOyB9CisgICAgICAgIHsg
YXBwZW5kU3RyaW5nKGtleS5kZXByZWNhdGVkU3RyaW5nKCkpOyBhcHBlbmRTdHJpbmcoU3RyaW5n
OjpudW1iZXIodmFsdWUpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7IH0KICAgICB2b2lkIGFwcGVuZEZp
bGUoY29uc3QgU3RyaW5nICZrZXksIGNvbnN0IFN0cmluZyAmZmlsZW5hbWUpOwogCiAgICAgRGVw
cmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Rm9ybURhdGFMaXN0SXRlbT4gYmVnaW4oKSBj
b25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODcpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NzQsMTIgKzEyNzQsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBbHQoY29uc3QgU3Ry
aQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgX21heExlbmd0aCkK
IHsKLSAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKF9tYXhMZW5ndGgpKTsKKyAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgU3RyaW5n
OjpudW1iZXIoX21heExlbmd0aCkpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNp
emUodW5zaWduZWQgX3NpemUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoX3NpemUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0
cmluZzo6bnVtYmVyKF9zaXplKSk7CiB9CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpzcmMo
KSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24g
MTM0ODcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2OCwxMiArMjY4LDEyIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0
QWNjZXNzS2V5KGMKIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRDb2xzKGludCBjb2xz
KQogewotICAgIHNldEF0dHJpYnV0ZShjb2xzQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KGNvbHMpKTsKKyAgICBzZXRBdHRyaWJ1dGUoY29sc0F0dHIsIFN0cmluZzo6bnVtYmVyKGNvbHMp
KTsKIH0KIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRSb3dzKGludCByb3dzKQogewot
ICAgIHNldEF0dHJpYnV0ZShyb3dzQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHJvd3Mp
KTsKKyAgICBzZXRBdHRyaWJ1dGUocm93c0F0dHIsIFN0cmluZzo6bnVtYmVyKHJvd3MpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0
TXVsdGlwbGUoYm9vbAogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTaXplKGludCBzaXpl
KQogewotICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KHNpemUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVtYmVyKHNpemUp
KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNw
cAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUwLDE3ICsxNTAsMTQgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZAogCiAgICAgICAgIGlmIChldnQtPnRhcmdldCgpLT5oYXNUYWdO
YW1lKGltZ1RhZykpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltZyA9IHN0YXRp
Y19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPiggZXZ0LT50YXJnZXQoKSApOwotICAgICAgICAgICAg
aWYgKCBpbWcgJiYgaW1nLT5pc1NlcnZlck1hcCgpICkKLSAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChpbWcgJiYgaW1nLT5pc1NlcnZlck1hcCgpKSB7CiAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6UmVuZGVySW1hZ2UgKnIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSAq
PihpbWctPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGlmKHIgJiYgZSkKLSAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHIgJiYgZSkgewogICAgICAgICAgICAgICAg
ICAgICBpbnQgYWJzeCwgYWJzeTsKICAgICAgICAgICAgICAgICAgICAgci0+YWJzb2x1dGVQb3Np
dGlvbihhYnN4LCBhYnN5KTsKICAgICAgICAgICAgICAgICAgICAgaW50IHgoZS0+Y2xpZW50WCgp
IC0gYWJzeCksIHkoZS0+Y2xpZW50WSgpIC0gYWJzeSk7Ci0gICAgICAgICAgICAgICAgICAgIHVy
bCArPSBEZXByZWNhdGVkU3RyaW5nKCI/JTEsJTIiKS5hcmcoIHggKS5hcmcoIHkgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHVybCArPSBTdHJpbmcoKS5zcHJpbnRmKCI/JWQsJWQiLCB4LCB5KS5kZXByZWNhdGVkU3RyaW5n
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZXZ0LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldnQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0z
MDMsNyArMzAwLDcgQEAgaW50IEhUTUxBbmNob3JFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAK
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkKIHsKLSAg
ICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFi
SW5kZXgpKTsKKyAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0
YWJJbmRleCkpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzQ4NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDExICsyODEsMTAgQEAgRGVwcmVjYXRlZFN0cmluZyBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50OgogICAgICAgICBhc3NlcnQoc2VwMSA+PSAwKTsKICAgICAgICAgYXNzZXJ0
KHNlcDIgPj0gMCk7CiAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuYW1lQW5kVHlwZSA9IHN0
YXRlLmxlZnQoc2VwMik7CisgICAgICAgIFN0cmluZyBuYW1lQW5kVHlwZSA9IHN0YXRlLmxlZnQo
c2VwMik7CiAgICAgICAgIGlmIChlbmNOYW1lLmxlbmd0aCgpICsgdHlwZVN0ci5sZW5ndGgoKSAr
IDEgPT0gKHVuc2lnbmVkKXNlcDIKICAgICAgICAgICAgICYmIG5hbWVBbmRUeXBlLnN0YXJ0c1dp
dGgoZW5jTmFtZSkKLSAgICAgICAgICAgICYmIG5hbWVBbmRUeXBlLmVuZHNXaXRoKHR5cGVTdHIp
KQotICAgICAgICB7CisgICAgICAgICAgICAmJiBuYW1lQW5kVHlwZS5lbmRzV2l0aCh0eXBlU3Ry
KSkgewogICAgICAgICAgICAgc3RhdGVzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm4g
c3RhdGUubWlkKHNlcDIrMSk7CiAgICAgICAgIH0KQEAgLTMwMCw3ICsyOTksNyBAQCBpbnQgSFRN
TEdlbmVyaWNGb3JtRWxlbWVudDo6dGFiSW5kZXgoKSBjCiAKIHZvaWQgSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZSh0YWJp
bmRleEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJp
YnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAgICAgCiB9IC8v
IG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCShyZXZpc2lvbiAxMzQ4NykK
KysrIFdlYkNvcmUvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxIUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAg
ICAgICAgIGlmIChzaXplIDw9IDEpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBTdHJpbmcoIjAiKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSkpOworICAgICAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KQEAgLTMyMCw3ICszMjAsNyBAQCBpbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QK
IAogdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQogewotICAgIHNldEF0
dHJpYnV0ZSh3aWR0aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOworICAg
IHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIGJv
b2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL2h0bWxf
b2JqZWN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2h0bWxfb2JqZWN0aW1w
bC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9odG1sL2h0bWxfb2JqZWN0aW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIGludCBIVE1MT2JqZWN0RWxl
bWVudDo6dGFiSW5kZXgoKSBjb25zdAogCiB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRUYWJJ
bmRleChpbnQgdGFiSW5kZXgpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmlu
ZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxPYmpl
Y3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9odG1sX2xpc3RpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJKHJldmlz
aW9uIDEzNDg3KQorKysgV2ViQ29yZS9odG1sL2h0bWxfbGlzdGltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRDb21wYWN0
KGJvb2wgYgogCiB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFydCkKIHsK
LSAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc3Rh
cnQpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkp
OwogfQogCiBTdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0CkBAIC0yMzYsNyAr
MjM2LDcgQEAgaW50IEhUTUxMSUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBIVE1MTElF
bGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0
ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHZh
bHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpJbmRleDogV2ViQ29yZS9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNv
cmUvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw4ICszOTcs
NyBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAg
ICBib3JkZXI9MTsKICNlbmRpZgogICAgICAgICAgICAgbV9ub0JvcmRlciA9ICFib3JkZXI7Ci0g
ICAgICAgICAgICBTdHJpbmcgdiA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciggYm9yZGVyICk7
Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCB2
ICk7CisgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRI
LCBTdHJpbmc6Om51bWJlcihib3JkZXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGJnY29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENT
U19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwpAQCAtMTE0Nyw3ICsxMTQ2
LDcgQEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2hPZmYoY29ucwogCiB2b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xTcGFuKGludCBuKQogewotICAgIHNldEF0dHJpYnV0
ZShjb2xzcGFuQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG4pKTsKKyAgICBzZXRBdHRy
aWJ1dGUoY29sc3BhbkF0dHIsIFN0cmluZzo6bnVtYmVyKG4pKTsKIH0KIAogU3RyaW5nIEhUTUxU
YWJsZUNlbGxFbGVtZW50OjpoZWFkZXJzKCkgY29uc3QKQEAgLTExODIsNyArMTE4MSw3IEBAIHZv
aWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldE5vV3JhcChib28KIAogdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6c2V0Um93U3BhbihpbnQgbikKIHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c3Bh
bkF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihuKSk7CisgICAgc2V0QXR0cmlidXRlKHJv
d3NwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihuKSk7CiB9CiAKIFN0cmluZyBIVE1MVGFibGVDZWxs
RWxlbWVudDo6c2NvcGUoKSBjb25zdApAQCAtMTI3OCw3ICsxMjc3LDcgQEAgdm9pZCBIVE1MVGFi
bGVDb2xFbGVtZW50OjpzZXRDaE9mZihjb25zdAogCiB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6
OnNldFNwYW4oaW50IG4pCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNwYW5BdHRyLCBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIobikpOworICAgIHNldEF0dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpu
dW1iZXIobikpOwogfQogCiBTdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29u
c3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTM0ODcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTE1LDkgKzE1MTUsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZGlydHlMaW5lc0Zyb21DaGFuZ2Vk
CiAKICNpZm5kZWYgTkRFQlVHCiAKLURlcHJlY2F0ZWRTdHJpbmcgUmVuZGVyT2JqZWN0OjppbmZv
cm1hdGlvbigpIGNvbnN0CitTdHJpbmcgUmVuZGVyT2JqZWN0OjppbmZvcm1hdGlvbigpIGNvbnN0
CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7CisgICAgU3RyaW5nIHN0cjsKICAgICBRVGV4
dFN0cmVhbSB0cygmc3RyKTsKICAgICB0cyA8PCByZW5kZXJOYW1lKCkKICAgICAgICAgPDwgIigi
IDw8IChzdHlsZSgpID8gc3R5bGUoKS0+cmVmQ291bnQoKSA6IDApIDw8ICIpIgpAQCAtMTUzOCw3
ICsxNTM4LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aQogICAg
ICAgICAgICAgdHMgPDwgImFuY2hvciAiOwogICAgICAgICBpZiAoZWxlbWVudCgpLT5mb2N1c2Vk
KCkpCiAgICAgICAgICAgICB0cyA8PCAiZm9jdXMgIjsKLSAgICAgICAgdHMgPDwgIiA8IiA8PCAg
ZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCkgPDwgIj4iOworICAgICAg
ICB0cyA8PCAiIDwiIDw8ICBlbGVtZW50KCktPmxvY2FsTmFtZSgpIDw8ICI+IjsKICAgICAgICAg
dHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwgd2lkdGgoKSA8
PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIikiOwogICAgICAgICBpZiAoaXNUYWJsZUNlbGwoKSkgewog
ICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyVGFibGVDZWxsICo+KHRoaXMpOwpAQCAtMTU2Myw4ICsxNTYzLDcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OmR1bXAoUVRleHRTdHJlYW0gKnN0cgogICAgICpzdHJlYW0gPDwgZW5kbDsK
IAogICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUoIGNo
aWxkICE9IDAgKQotICAgIHsKKyAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgKnN0cmVhbSA8
PCBpbmQgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiOiAiOwogICAgICAgICBjaGlsZC0+ZHVt
cChzdHJlYW0saW5kKyIgICIpOwogICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsy
MTQsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJPYmplY3QiOyB9CiAjaWYgIU5ERUJVRwotICAg
IERlcHJlY2F0ZWRTdHJpbmcgaW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgaW5mb3Jt
YXRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChRVGV4dFN0cmVhbSAqc3RyZWFt
LCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlKCkg
Y29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc2hvd1RyZWUoY29uc3QgUmVuZGVyT2JqZWN0ICpybyk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDEz
ICs1MjcsMTMgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjYWxjTWluTWF4V2lkdGgoKQogICAg
IGNhc2UgREVDSU1BTF9MRUFESU5HX1pFUk86CiAgICAgICAgIC8vICMjIyB1bnN1cHBvcnRlZCwg
d2UgdXNlIGRlY2ltYWwgaW5zdGVhZAogICAgIGNhc2UgTERFQ0lNQUw6Ci0gICAgICAgIG1faXRl
bS5zcHJpbnRmKCAiJWQiLCBtX2xpc3RJdGVtLT52YWx1ZSgpICk7CisgICAgICAgIG1faXRlbSA9
IFN0cmluZygpLnNwcmludGYoIiVkIiwgbV9saXN0SXRlbS0+dmFsdWUoKSkuZGVwcmVjYXRlZFN0
cmluZygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExPV0VSX1JPTUFOOgotICAgICAgICBt
X2l0ZW0gPSB0b1JvbWFuKCBtX2xpc3RJdGVtLT52YWx1ZSgpLCBmYWxzZSApOworICAgICAgICBt
X2l0ZW0gPSB0b1JvbWFuKG1fbGlzdEl0ZW0tPnZhbHVlKCksIGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBVUFBFUl9ST01BTjoKLSAgICAgICAgbV9pdGVtID0gdG9Sb21hbiggbV9s
aXN0SXRlbS0+dmFsdWUoKSwgdHJ1ZSApOworICAgICAgICBtX2l0ZW0gPSB0b1JvbWFuKG1fbGlz
dEl0ZW0tPnZhbHVlKCksIHRydWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExPV0VSX0dS
RUVLOgogICAgICB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAx
MzQ4NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0IikpCiAg
ICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKLSAgICBlbGVtZW50KCktPnNldFZhbHVl
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWwpKTsKKyAgICBlbGVtZW50KCktPnNldFZhbHVl
KFN0cmluZzo6bnVtYmVyKHZhbCkpOwogCiAgICAgUVNsaWRlciogc2xpZGVyID0gKFFTbGlkZXIq
KXdpZGdldCgpOwogICAgICAKQEAgLTExMzgsNyArMTEzOCw3IEBAIHZvaWQgUmVuZGVyU2xpZGVy
Ojp2YWx1ZUNoYW5nZWQoV2lkZ2V0KikKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHByZWNp
c2lvbiwgImZsb2F0IikpCiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKLSAgICBl
bGVtZW50KCktPnNldFZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWwpKTsKKyAgICBl
bGVtZW50KCktPnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbCkpOwogICAgIAogICAgIC8vIEZp
cmUgdGhlICJpbnB1dCIgRE9NIGV2ZW50LgogICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZl
bnQoaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2UpOwpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMTM0
ODcpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4OSwx
MiArNjg5LDEyIEBAIHZvaWQgUG9zaXRpb246OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmIKIHsK
ICAgICBTdHJpbmcgcmVzdWx0OwogICAgIAotICAgIGlmIChpc051bGwoKSkgeworICAgIGlmIChp
c051bGwoKSkKICAgICAgICAgcmVzdWx0ID0gIjxudWxsPiI7Ci0gICAgfSBlbHNlIHsKKyAgICBl
bHNlIHsKICAgICAgICAgY2hhciBzWzEwMjRdOwogICAgICAgICByZXN1bHQgKz0gIm9mZnNldCAi
OwotICAgICAgICByZXN1bHQgKz0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KTsK
KyAgICAgICAgcmVzdWx0ICs9IFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KTsKICAgICAgICAgcmVz
dWx0ICs9ICIgb2YgIjsKICAgICAgICAgbV9ub2RlLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBzaXpl
b2YocykpOwogICAgICAgICByZXN1bHQgKz0gczsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjYsMTUgKzMyNiwxNiBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0xl
bmd0aChNYXBwZWRBCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKE1hcHBlZEF0dHJp
YnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJmMpCiB7CiAgICAgLy8gdGhpcyBpcyB0
aGUgb25seSBjYXNlIG5vIGNvbG9yIGdldHMgYXBwbGllZCBpbiBJRS4KLSAgICBpZiAoICFjLmxl
bmd0aCgpICkKKyAgICBpZiAoIWMubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghYXR0ci0+ZGVjbCgpKSBjcmVhdGVNYXBwZWREZWNsKGF0dHIpOworICAgIGlmICghYXR0ci0+
ZGVjbCgpKQorICAgICAgICBjcmVhdGVNYXBwZWREZWNsKGF0dHIpOwogICAgIAotICAgIGlmIChh
dHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjLCBmYWxzZSkgKQorICAgIGlmIChhdHRyLT5k
ZWNsKCktPnNldFByb3BlcnR5KGlkLCBjLCBmYWxzZSkpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBEZXByZWNhdGVkU3RyaW5nIGNvbG9yID0gYy5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAg
U3RyaW5nIGNvbG9yID0gYy5jb3B5KCk7CiAgICAgLy8gbm90IHNvbWV0aGluZyB0aGF0IGZpdHMg
dGhlIHNwZWNzLgogICAgIAogICAgIC8vIHdlJ3JlIGVtdWxhdGluZyBJRXMgY29sb3IgcGFyc2Vy
IGhlcmUuIEl0IG1hcHMgdHJhbnNwYXJlbnQgdG8gYmxhY2ssIG90aGVyd2lzZSBpdCB0cmllcyB0
byBidWlsZCBhIHJnYiB2YWx1ZQpAQCAtMzUyLDMwICszNTMsMzAgQEAgdm9pZCBTdHlsZWRFbGVt
ZW50OjphZGRDU1NDb2xvcihNYXBwZWRBdAogICAgIC8vIHVzZWQgYXMgYSBub3JtYWxpemF0aW9u
IHBvaW50IHRvIG5vcm1hbGl6ZSB0byB2YWx1ZXMgYmV0d2VlbiAwCiAgICAgLy8gYW5kIDI1NS4K
ICAgICAKLSAgICBpZiAoIGNvbG9yLmxvd2VyKCkgIT0gInRyYW5zcGFyZW50IiApIHsKLSAgICAg
ICAgaWYgKCBjb2xvclswXSA9PSAnIycgKQotICAgICAgICAgICAgY29sb3IucmVtb3ZlKCAwLCAg
MSApOworICAgIGlmIChjb2xvci5sb3dlcigpICE9ICJ0cmFuc3BhcmVudCIpIHsKKyAgICAgICAg
aWYgKGNvbG9yWzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbG9yLnJlbW92ZSgwLCAxKTsKICAg
ICAgICAgaW50IGJhc2ljTGVuZ3RoID0gKGNvbG9yLmxlbmd0aCgpICsgMikgLyAzOwotICAgICAg
ICBpZiAoIGJhc2ljTGVuZ3RoID4gMSApIHsKKyAgICAgICAgaWYgKGJhc2ljTGVuZ3RoID4gMSkg
ewogICAgICAgICAgICAgLy8gSUUgaWdub3JlcyBjb2xvcnMgd2l0aCB0aHJlZSBkaWdpdHMgb3Ig
bGVzcwogICAgICAgICAgICAgaW50IGNvbG9yc1szXSA9IHsgMCwgMCwgMCB9OwogICAgICAgICAg
ICAgaW50IGNvbXBvbmVudCA9IDA7CiAgICAgICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICAg
ICAgIGludCBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoLTE7Ci0gICAgICAgICAgICB3aGlsZSAoIGNv
bXBvbmVudCA8IDMgKSB7CisgICAgICAgICAgICB3aGlsZSAoY29tcG9uZW50IDwgMykgewogICAg
ICAgICAgICAgICAgIC8vIHNlYXJjaCBmb3J3YXJkIGZvciBkaWdpdHMgaW4gdGhlIHN0cmluZwog
ICAgICAgICAgICAgICAgIGludCBudW1EaWdpdHMgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxl
ICggcG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdpdHMgPCBiYXNpY0xlbmd0aCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGhleCA9IHRvSGV4KCBjb2xvcltwb3NdICk7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IChpbnQpY29sb3IubGVuZ3RoKCkgJiYgbnVtRGln
aXRzIDwgYmFzaWNMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGhleCA9IHRvSGV4
KGNvbG9yW3Bvc10pOwogICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29tcG9uZW50XSA9IChj
b2xvcnNbY29tcG9uZW50XSA8PCA0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBoZXggPiAw
ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGV4ID4gMCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gKz0gaGV4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4RGlnaXQgPSBrTWluKCBtYXhEaWdpdCwgbnVtRGlnaXRzICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhEaWdpdCA9IGtNaW4obWF4RGlnaXQsIG51bURpZ2l0cyk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbnVtRGlnaXRzKys7CiAgICAgICAg
ICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3
aGlsZSAoIG51bURpZ2l0cysrIDwgYmFzaWNMZW5ndGggKQorICAgICAgICAgICAgICAgIHdoaWxl
IChudW1EaWdpdHMrKyA8IGJhc2ljTGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBjb2xvcnNb
Y29tcG9uZW50XSA8PD0gNDsKICAgICAgICAgICAgICAgICBjb21wb25lbnQrKzsKICAgICAgICAg
ICAgIH0KQEAgLTM4NiwxMCArMzg3LDEwIEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29s
b3IoTWFwcGVkQXQKICAgICAgICAgICAgIGNvbG9yc1swXSA+Pj0gNCptYXhEaWdpdDsKICAgICAg
ICAgICAgIGNvbG9yc1sxXSA+Pj0gNCptYXhEaWdpdDsKICAgICAgICAgICAgIGNvbG9yc1syXSA+
Pj0gNCptYXhEaWdpdDsKLSAgICAgICAgICAgIC8vIGFzc2VydCggY29sb3JzWzBdIDwgMHgxMDAg
JiYgY29sb3JzWzFdIDwgMHgxMDAgJiYgY29sb3JzWzJdIDwgMHgxMDAgKTsKKyAgICAgICAgICAg
IC8vIGFzc2VydChjb2xvcnNbMF0gPCAweDEwMCAmJiBjb2xvcnNbMV0gPCAweDEwMCAmJiBjb2xv
cnNbMl0gPCAweDEwMCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbG9yLnNwcmludGYo
IiMlMDJ4JTAyeCUwMngiLCBjb2xvcnNbMF0sIGNvbG9yc1sxXSwgY29sb3JzWzJdICk7Ci0gICAg
ICAgICAgICBpZiAoIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIFN0cmluZyhjb2xvciks
IGZhbHNlKSApCisgICAgICAgICAgICBjb2xvci5zcHJpbnRmKCIjJTAyeCUwMnglMDJ4IiwgY29s
b3JzWzBdLCBjb2xvcnNbMV0sIGNvbG9yc1syXSk7CisgICAgICAgICAgICBpZiAoYXR0ci0+ZGVj
bCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3IsIGZhbHNlKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNv
cmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5NiwxOCArMTI5NiwxNyBAQCB2
b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpidWZmCiAgICAgU3RyaW5nIHJlc3Vs
dDsKICAgICBTdHJpbmcgczsKICAgICAKLSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIgfHwgIW1f
ZW5kQ29udGFpbmVyKSB7CisgICAgaWYgKCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENvbnRh
aW5lcikKICAgICAgICAgcmVzdWx0ID0gIjxlbXB0eT4iOwotICAgIH0KICAgICBlbHNlIHsKICAg
ICAgICAgY2hhciBzW0Zvcm1hdEJ1ZmZlclNpemVdOwogICAgICAgICByZXN1bHQgKz0gImZyb20g
b2Zmc2V0ICI7Ci0gICAgICAgIHJlc3VsdCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9z
dGFydE9mZnNldCk7CisgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zm
c2V0KTsKICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAgICAgICAgbV9zdGFydENvbnRhaW5l
ci0+Zm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7CiAgICAgICAgIHJlc3Vs
dCArPSBzOwogICAgICAgICByZXN1bHQgKz0gIiB0byBvZmZzZXQgIjsKLSAgICAgICAgcmVzdWx0
ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX2VuZE9mZnNldCk7CisgICAgICAgIHJlc3Vs
dCArPSBTdHJpbmc6Om51bWJlcihtX2VuZE9mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9m
ICI7CiAgICAgICAgIG1fZW5kQ29udGFpbmVyLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRC
dWZmZXJTaXplKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CkluZGV4OiBXZWJDb3JlL2RvbS94bWxf
dG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNw
cAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTM2LDE1ICs1MzYsMTUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVycm9y
KEVycm9yVHlwZSB0eXBlLAogCiAgICAgaWYgKHR5cGUgPT0gZmF0YWwgfHwgKG1fZXJyb3JDb3Vu
dCA8IG1heEVycm9ycyAmJiBtX2xhc3RFcnJvckxpbmUgIT0gbGluZU51bWJlcigpICYmIG1fbGFz
dEVycm9yQ29sdW1uICE9IGNvbHVtbk51bWJlcigpKSkgewogCi0gICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgZm9ybWF0OworICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQ7CiAgICAgICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAgICAgICAgIGZv
cm1hdCA9IERlcHJlY2F0ZWRTdHJpbmcoIndhcm5pbmcgb24gbGluZSAlMiBhdCBjb2x1bW4gJTM6
ICUxIik7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gIndhcm5pbmcgb24gbGluZSAlZCBhdCBj
b2x1bW4gJWQ6ICVzIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
ZmF0YWw6CiAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCiAgICAgICAgICAgICBjYXNl
IG5vbkZhdGFsOgotICAgICAgICAgICAgICAgIGZvcm1hdCA9IERlcHJlY2F0ZWRTdHJpbmcoImVy
cm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIpOworICAgICAgICAgICAgICAgIGZvcm1h
dCA9ICJlcnJvciBvbiBsaW5lICVkIGF0IGNvbHVtbiAlZDogJXMiOwogICAgICAgICB9CiAKICNp
ZiBXSU4zMgpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjplcnJvcihFcnJv
clR5cGUgdHlwZSwKICAgICAgICAgY2hhciAqbTsKICAgICAgICAgdmFzcHJpbnRmKCZtLCBtZXNz
YWdlLCBhcmdzKTsKICNlbmRpZgotICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gZm9ybWF0LmFy
ZyhtKS5hcmcobGluZU51bWJlcigpKS5hcmcoY29sdW1uTnVtYmVyKCkpOworICAgICAgICBtX2Vy
cm9yTWVzc2FnZXMgKz0gU3RyaW5nKCkuc3ByaW50Zihmb3JtYXQsIGxpbmVOdW1iZXIoKSwgY29s
dW1uTnVtYmVyKCksIG0pOwogI2lmICFXSU4zMgogICAgICAgICBmcmVlKG0pOwogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNDg3KQor
KysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTExLDkgKzUxMSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVG
b24KICAgICAgICAgICAgIGN1cnJlbnRGb250U2l6ZSA9IGNvbXB1dGVkRm9udFNpemUobm9kZSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBkZXNpcmVkRm9udFNp
emUpIHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZGVzaXJlZEZvbnRTaXplU3RyaW5n
ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6ZSk7Ci0gICAgICAgICAg
ICBkZXNpcmVkRm9udFNpemVTdHJpbmcgKz0gInB4IjsKLSAgICAgICAgICAgIGlubGluZVN0eWxl
RGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRk9OVF9TSVpFLCBkZXNpcmVkRm9udFNpemVTdHJp
bmcsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wtPnNldFByb3Bl
cnR5KENTU19QUk9QX0ZPTlRfU0laRSwgU3RyaW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKSAr
ICJweCIsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW0s
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApIHsKSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzQ4
NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg4IEBA
CisyMDA2LTAzLTI3ICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYSB3aG9sZSBi
dW5jaCBtb3JlIERlcHJlY2F0ZWRTdHJpbmcgd2l0aCBTdHJpbmcuCisKKyAgICAgICAgKiBiaW5k
aW5ncy9vYmpjL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQg
c2V0Q29sczpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRleHRBcmVhRWxlbWVudCBzZXRSb3dzOl0p
OgorICAgICAgICAoLVtET01IVE1MT0xpc3RFbGVtZW50IHNldFN0YXJ0Ol0pOgorICAgICAgICAo
LVtET01IVE1MUHJlRWxlbWVudCBzZXRXaWR0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTEltYWdl
RWxlbWVudCBzZXRIZWlnaHQ6XSk6CisgICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1lbnQgc2V0
SHNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MSW1hZ2VFbGVtZW50IHNldFZzcGFjZTpdKToK
KyAgICAgICAgKC1bRE9NSFRNTEltYWdlRWxlbWVudCBzZXRXaWR0aDpdKToKKyAgICAgICAgKC1b
RE9NSFRNTE9iamVjdEVsZW1lbnQgc2V0SHNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MT2Jq
ZWN0RWxlbWVudCBzZXRUYWJJbmRleDpdKToKKyAgICAgICAgKC1bRE9NSFRNTE9iamVjdEVsZW1l
bnQgc2V0VnNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MQXBwbGV0RWxlbWVudCBzZXRIc3Bh
Y2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxBcHBsZXRFbGVtZW50IHNldFZzcGFjZTpdKToKKyAg
ICAgICAgKC1bRE9NSFRNTEFyZWFFbGVtZW50IHNldFRhYkluZGV4Ol0pOgorICAgICAgICAoLVtE
T01IVE1MVGFibGVDb2xFbGVtZW50IHNldFNwYW46XSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50IHNldENvbFNwYW46XSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUNlbGxF
bGVtZW50IHNldFJvd1NwYW46XSk6CisgICAgICAgICgtW0RPTUhUTUxFbWJlZEVsZW1lbnQgc2V0
SGVpZ2h0Ol0pOgorICAgICAgICAoLVtET01IVE1MRW1iZWRFbGVtZW50IHNldFdpZHRoOl0pOgor
ICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bnVtYmVyQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvY3Nz
X3ZhbHVlaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3Nz
VGV4dCk6CisgICAgICAgICogY3NzL2Nzc3BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAg
ICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Zm9ybWF0Rm9y
RGVidWdnZXIpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKyAgICAgICAgKiBkb20veG1sX3Rv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVycm9yKToKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAg
ICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0
OjphcHBlbmREYXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgp
OgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpzZXRNYXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6c2V0U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldENvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6c2V0Um93cyk6CisgICAgICAgICogaHRtbC9odG1sX2Jhc2VpbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQpOgorICAgICAgICAqIGh0bWwvaHRtbF9ibG9ja2ltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEhSRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByZUVsZW1lbnQ6OnNldFdpZHRoKToKKyAgICAgICAgKiBodG1sL2h0bWxfaW1hZ2Vp
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6OnNldEhzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRWc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpzZXRUYWJJbmRleCk6CisgICAg
ICAgICogaHRtbC9odG1sX2lubGluZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFu
Y2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQ6OnNldFRhYkluZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxfbGlzdGlt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTExJRWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0
bWwvaHRtbF9vYmplY3RpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50OjpzZXRUYWJJbmRleCk6CisgICAgICAgICogaHRtbC9odG1sX3RhYmxlaW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3Bhbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3Bhbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRTcGFuKToKKyAgICAgICAgKiBr
aHRtbC9lY21hL2tqc19odG1sLmNwcDoKKyAgICAgICAgKEtKUzo6SlNIVE1MRWxlbWVudDo6YW5j
aG9yR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SlNIVE1MRWxlbWVudDo6YXJlYUdldHRlcik6Cisg
ICAgICAgICoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2luZG93
Ojppc1NhZmVTY3JpcHQpOgorICAgICAgICAoS0pTOjpMb2NhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eSk6CisgICAgICAgICoga3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNWR0NvbG9yKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwOgor
ICAgICAgICAoU1ZHQW5nbGU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAoU1ZHQW5nbGU6
OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmdsZS5oOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdDb2xvci5jcHA6CisgICAgICAgIChTVkdDb2xvcjo6c2V0UkdCQ29s
b3IpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMZW5ndGguY3BwOgorICAgICAgICAoU1ZHTGVu
Z3RoOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFNWR0xlbmd0aDo6dmFsdWVBc1N0cmlu
Zyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5oOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnOjpwYXRoU2VnVHlw
ZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWc6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0FyY0Ficzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnQXJjQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
QXJjUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdBcmNSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3Nl
UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0Nsb3NlUGF0aDo6cGF0aFNlZ1R5
cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ2xvc2VQYXRoOjp0b1N0
cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6dG9T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cGF0
aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1
YmljUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjp0b1N0cmlu
Zyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cGF0aFNlZ1R5
cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjp0
b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aFJlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdQYXRoU2VnTGluZXRvLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlu
ZXRvQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdMaW5ldG9BYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5l
dG9SZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNl
Z0xpbmV0b1JlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjp0b1N0cmluZyk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6dG9TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwYXRo
U2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbFJlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRv
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTW92ZXRvQWJzOjpwYXRoU2VnVHlwZUFz
TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9BYnM6OnRvU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9SZWw6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01vdmV0b1JlbDo6dG9TdHJpbmcp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdQ
b2x5RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdTY3JpcHRFbGVtZW50OjpleGVjdXRl
U2NyaXB0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAg
IChTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKToKKyAgICAgICAgKiBrd3EvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMpOgorICAg
ICAgICAobm9kZVBvc2l0aW9uKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpzdWJtaXRGb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9BdG9taWNT
dHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6dG9JbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpuYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0
ZWRTdHJpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKEtVUkw6OnNldFBvcnQpOgorICAg
ICAgICAoS1VSTDo6cHJldHR5VVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmlu
Zy5oOgorICAgICAgICAqIHBsYXRmb3JtL1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmc6OnNwcmludGYpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9LZXlFdmVudE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omtl
eUlkZW50aWZpZXJGb3JLZXlFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mb3Jt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp2YWx1ZUNoYW5nZWQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0TWFya2VyOjpjYWxjTWluTWF4V2lkdGgpOgorCiAyMDA2LTAzLTI3ICBNYWNpZWogU3RhY2hv
d2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4OgpJbmRleDogV2ViQ29y
ZS9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUvY3NzL2Nzc3BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDcsMTEgKzIxMDcsMTAgQEAgQ1NTUHJpbWl0aXZlVmFsdWUgKkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcgogQ1NTUHJpbWl0aXZlVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VDb2xv
ckZyb21WYWx1ZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNw
YXJlbnQ7Ci0gICAgaWYgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYKLSAgICAgICAgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+
ZlZhbHVlIDwgMTAwMDAwMC4pIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7CisgICAg
aWYgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIgJiYgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZhbHVlIDwgMTAwMDAwMC4pIHsK
KyAgICAgICAgU3RyaW5nIHN0cjsKICAgICAgICAgc3RyLnNwcmludGYoIiUwNmQiLCAoaW50KSh2
YWx1ZS0+ZlZhbHVlKy41KSk7Ci0gICAgICAgIGlmICghQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0
ciwgYykpCisgICAgICAgIGlmICghQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0ci5kZXByZWNhdGVk
U3RyaW5nKCksIGMpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SIHx8CiAgICAgICAgICAg
ICAgICAgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fApJbmRl
eDogV2ViQ29yZS9jc3MvY3NzX3ZhbHVlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvY3NzX3ZhbHVlaW1wbC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9jc3MvY3Nz
X3ZhbHVlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNiBAQCBTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByCiAgICAgICAgIHJldHVybiBnZXRTaG9y
dEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwogICAgIH0KICAgICB9Ci0gICAgLy9rZERlYnVn
KCkgPDwga19mdW5jaW5mbyA8PCAicHJvcGVydHkgbm90IGZvdW5kOiIgPDwgcHJvcGVydHlJRCA8
PCBlbmRsOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtOTM4LDU1ICs5MzcsNTUgQEAg
U3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgLy8g
IyMjCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgotICAgICAg
ICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSk7CisgICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0ID0g
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKKyAgICAgICAgICAg
IHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiJSI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0iOworICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJlbSI7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NfRVhTOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJp
bmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOworICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJleCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NfUFg6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICJweCI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgInB4IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU19DTToKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92
YWx1ZS5udW0pICsgImNtIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAiY20iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX01N
OgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAibW0iOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJtbSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfSU46Ci0gICAg
ICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJp
biI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImlu
IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19QVDoKLSAgICAgICAgICAg
IHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0IjsKKyAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHQiOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAgICAgdGV4dCA9
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOworICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwYyI7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfREVHOgotICAgICAgICAgICAgdGV4dCA9IERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKKyAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOworICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJncmFkIjsKKyAgICAgICAgICAgIHRleHQgPSBT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtcyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU19TOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAicyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgInMiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
X0haOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAiaHoiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICJoeiI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfS0haOgot
ICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAia2h6IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAia2h6IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19ESU1FTlNJT046
CiAgICAgICAgICAgICAvLyAjIyMKQEAgLTEwMjEsMTEgKzEwMjAsMTEgQEAgU3RyaW5nIENTU1By
aW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgICAgIHRleHQgPSAicmdi
YSgiOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRleHQgPSAicmdiKCI7Ci0g
ICAgICAgICAgICB0ZXh0ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xvci5yZWQoKSkg
KyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29s
b3IuZ3JlZW4oKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIoY29sb3IuYmx1ZSgpKTsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1i
ZXIoY29sb3IucmVkKCkpICsgIiwgIjsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1i
ZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOworICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51
bWJlcihjb2xvci5ibHVlKCkpOwogICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZG
KQotICAgICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cigoZmxvYXQpY29sb3IuYWxwaGEoKSAvIDB4RkYpOworICAgICAgICAgICAgICAgIHRleHQgKz0g
IiwgIiArIFN0cmluZzo6bnVtYmVyKChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7CiAgICAg
ICAgICAgICB0ZXh0ICs9ICIpIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9u
IDEzNDg3KQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjk3LDEwICsyOTcsMTAgQEAgdm9pZCBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OnNldENzcwogfQogCiAvLyBEaXNwbGF5IGludGVnZXJzIGluIGludGVnZXIg
Zm9ybWF0IGluc3RlYWQgb2YgIjEuMCIuCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXJB
c1N0cmluZyhkb3VibGUgbikKK3N0YXRpYyBTdHJpbmcgbnVtYmVyQXNTdHJpbmcoZG91YmxlIG4p
CiB7CiAgICAgbG9uZyBpID0gc3RhdGljX2Nhc3Q8bG9uZz4obik7Ci0gICAgcmV0dXJuIGkgPT0g
biA/IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpKSA6IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihuKTsKKyAgICByZXR1cm4gaSA9PSBuID8gU3RyaW5nOjpudW1iZXIoaSkgOiBTdHJpbmc6Om51
bWJlcihuKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdApAQCAtMzkx
LDEwICszOTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAg
ICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxfU0VQQVJBVEUp
OwogICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkc6CiAgICAgewotICAgICAgICBEZXBy
ZWNhdGVkU3RyaW5nIHN0cmluZyhudW1iZXJBc1N0cmluZyhzdHlsZS0+aG9yaXpvbnRhbEJvcmRl
clNwYWNpbmcoKSkgKyAKLSAgICAgICAgICAgICJweCAiICsgCi0gICAgICAgICAgICBudW1iZXJB
c1N0cmluZyhzdHlsZS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCkpICsKLSAgICAgICAgICAgICJw
eCIpOworICAgICAgICBTdHJpbmcgc3RyaW5nKG51bWJlckFzU3RyaW5nKHN0eWxlLT5ob3Jpem9u
dGFsQm9yZGVyU3BhY2luZygpKSArICJweCAiICsgbnVtYmVyQXNTdHJpbmcoc3R5bGUtPnZlcnRp
Y2FsQm9yZGVyU3BhY2luZygpKSArICJweCIpOwogICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1p
dGl2ZVZhbHVlKHN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIH0K
ICAgICBjYXNlIENTU19QUk9QX19LSFRNTF9CT1JERVJfSE9SSVpPTlRBTF9TUEFDSU5HOgpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAkocmV2aXNpb24g
MTM0ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicygpOwogCiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZF
VE9fQ1VCSUNfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVB
c0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJDIik7IH0KLSAgICAgICAg
dmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiQyAlMSAlMiAlMyAlNCAlNSAlNiIpLmFyZyhtX3gxKS5h
cmcobV95MSkuYXJnKG1feDIpLmFyZyhtX3kyKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkMi
OyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3Ry
aW5nKCkuc3ByaW50ZigiQyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1f
eDEsIG1feTEsIG1feDIsIG1feTIsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChk
b3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpAQCAtNzIsOCArNzIsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
KCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBT
dHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmlu
Z0ltcGwoImMiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmco
KSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJjICUxICUyICUz
ICU0ICU1ICU2IikuYXJnKG1feDEpLmFyZyhtX3kxKS5hcmcobV94MikuYXJnKG1feTIpLmFyZyht
X3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0
ZXIoKSBjb25zdCB7IHJldHVybiAiYyI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJjICUuNmxnICUuNmxnICUuNmxn
ICUuNmxnICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9
CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmdsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCBm
bG9hdCBTVkdBbmdsZTo6dmFsdWVJblNwZWNpZmllZFVuaXRzKCkgCiAgICAgcmV0dXJuIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzOwogfQogCi12b2lkIFNWR0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5n
KFN0cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcpCit2b2lkIFNWR0FuZ2xlOjpzZXRWYWx1ZUFzU3Ry
aW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBtX3ZhbHVlQXNTdHJpbmcgPSBTdHJpbmcodmFs
dWVBc1N0cmluZyk7CisgICAgbV92YWx1ZUFzU3RyaW5nID0gczsKIAogICAgIGJvb2wgYk9LOwog
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gbV92YWx1ZUFzU3RyaW5nLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgmYk9LKTsKQEAgLTEwNiw5ICsxMDYsOSBAQCB2b2lkIFNWR0FuZ2xl
OjpzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltCiAgICAgY2FsY3VsYXRlKCk7CiB9CiAKLVN0cmlu
Z0ltcGwgKlNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK1N0cmluZyBTVkdBbmdsZTo6
dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgbV92YWx1ZUFzU3RyaW5nID0gRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKKyAgICBtX3ZhbHVlQXNT
dHJpbmcgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAKICAgICBz
d2l0Y2gobV91bml0VHlwZSkgewogICAgICAgICBjYXNlIFNWR19BTkdMRVRZUEVfVU5TUEVDSUZJ
RUQ6CkBAIC0xMjMsNyArMTIzLDcgQEAgU3RyaW5nSW1wbCAqU1ZHQW5nbGU6OnZhbHVlQXNTdHJp
bmcoKSBjbwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIHJldHVybiBtX3Zh
bHVlQXNTdHJpbmcuaW1wbCgpOworICAgIHJldHVybiBtX3ZhbHVlQXNTdHJpbmc7CiB9CiAKIHZv
aWQgU1ZHQW5nbGU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQ
YXRoU2VnTGluZXRvLmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGF0aFNlZ0xpbmV0by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9BYnMoKTsKIAogICAg
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4g
UEFUSFNFR19MSU5FVE9fQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNl
Z1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJMIik7IH0KLSAg
ICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiTCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kp
OyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7
IHJldHVybiAiTCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7
IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJMICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAK
ICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBA
IC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1Bh
dGhTZWdMaW5ldG9SZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhT
ZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fUkVMOyB9Ci0gICAgICAgIHZp
cnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5l
dyBTdHJpbmdJbXBsKCJsIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgibCAl
MSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhT
ZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAibCI7IH0KKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJsICUuNmxn
ICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAg
ICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEFicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQg
cGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FC
UzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiSCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVw
cmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6
OmZyb21MYXRpbjEoIkggJTEiKS5hcmcobV94KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkgiOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiSCAl
LjZsZyIsIG1feCk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91
YmxlIHgoKSBjb25zdDsKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAg
ICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoKTsKIAogICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNF
R19MSU5FVE9fSE9SSVpPTlRBTF9SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoImgiKTsg
fQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJoICUxIikuYXJnKG1feCk7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
ICJoIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZygpLnNwcmludGYoImggJS42bGciLCBtX3gpOyB9CiAKICAgICAgICAgdm9pZCBzZXRY
KGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xl
bmd0aC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3Ro
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEzICsxMDksMTIgQEAgZmxvYXQgU1ZHTGVuZ3Ro
Ojp2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKQogICAgIHJldHVybiBtX3ZhbHVlSW5TcGVjaWZpZWRV
bml0czsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
IAotdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1wbCogcykKK3ZvaWQg
U1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBTdHJp
bmcgdmFsdWVBc1N0cmluZyhzKTsKLSAgICBpZih2YWx1ZUFzU3RyaW5nLmlzRW1wdHkoKSkKKyAg
ICBpZihzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmlu
ZyB2YWx1ZUFzUVN0cmluZyA9IHZhbHVlQXNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpOworICAg
IERlcHJlY2F0ZWRTdHJpbmcgdmFsdWVBc1FTdHJpbmcgPSBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
IAogICAgIGRvdWJsZSBjb252ZXJ0ZWROdW1iZXIgPSAwOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0
ID0gdmFsdWVBc1FTdHJpbmcubGF0aW4xKCk7CkBAIC0xMjMsMjcgKzEyMiwyNiBAQCB2b2lkIFNW
R0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJCiAgICAgbV92YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBjb252ZXJ0ZWROdW1iZXI7CiAKICAgICB1bnNpZ25lZCBpbnQgZGlmZiA9IGVuZCAt
IHN0YXJ0OwotICAgIGlmKGRpZmYgPCB2YWx1ZUFzUVN0cmluZy5sZW5ndGgoKSkKLSAgICB7Ci0g
ICAgICAgIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBF
X1BYXSkpCisgICAgaWYgKGRpZmYgPCB2YWx1ZUFzUVN0cmluZy5sZW5ndGgoKSkgeworICAgICAg
ICBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9QWF0pKQogICAgICAgICAg
ICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX1BYOwotICAgICAgICBlbHNlIGlmKHZhbHVl
QXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0NNXSkpCisgICAgICAg
IGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfQ01dKSkKICAgICAg
ICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9DTTsKLSAgICAgICAgZWxzZSBpZih2
YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9QQ10pKQorICAg
ICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BDXSkpCiAg
ICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfUEM7Ci0gICAgICAgIGVsc2Ug
aWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfTU1dKSkK
KyAgICAgICAgZWxzZSBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9NTV0p
KQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX01NOwotICAgICAgICBl
bHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0lO
XSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVf
SU5dKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9JTjsKLSAgICAg
ICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQ
RV9QVF0pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhU
WVBFX1BUXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfUFQ7Ci0g
ICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5H
VEhUWVBFX1BFUkNFTlRBR0VdKSkKKyAgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRl
eHRbU1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRV0pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9
IFNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0U7Ci0gICAgICAgIGVsc2UgaWYodmFsdWVBc1FTdHJp
bmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRU1TXSkpCisgICAgICAgIGVsc2Ug
aWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRU1TXSkpCiAgICAgICAgICAg
ICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfRU1TOwotICAgICAgICBlbHNlIGlmKHZhbHVl
QXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0VYU10pKQorICAgICAg
ICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0VYU10pKQogICAg
ICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX0VYUzsKLSAgICAgICAgZWxzZSBp
Zih2YWx1ZUFzUVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIGVsc2UgaWYgKHMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX05VTUJFUjsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX1VOS05PV047
CkBAIC0xNTQsOSArMTUyLDkgQEAgdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoU3Ry
aW5nSQogICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAKLVN0cmluZ0ltcGwgKlNWR0xlbmd0aDo6dmFs
dWVBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgU1ZHTGVuZ3RoOjp2YWx1ZUFzU3RyaW5nKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKSArIFVuaXRUZXh0W21fdW5pdFR5cGVdKTsKKyAgICBy
ZXR1cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMpICsgVW5pdFRleHRb
bV91bml0VHlwZV07CiB9CiAKIHZvaWQgU1ZHTGVuZ3RoOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRz
KHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aC5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
QWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJTIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
UyAlMSAlMiAlMyAlNCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0K
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0
dXJuICJTIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIFN0cmluZygpLnNwcmludGYoIlMgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gyLCBt
X3kyLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAg
ZG91YmxlIHgoKSBjb25zdDsKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCgpOwogCiAgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQ
QVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmlu
Z0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1w
bCgicyIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInMgJTEgJTIgJTMgJTQi
KS5hcmcobV94MikuYXJnKG1feTIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAicyI7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5z
cHJpbnRmKCJzICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MiwgbV95MiwgbV94LCBtX3kp
OyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljLmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fi
cygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25z
dCB7IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUzsgfQotICAgICAgICB2aXJ0
dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcg
U3RyaW5nSW1wbCgiUSIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIlEgJTEg
JTIgJTMgJTQiKS5hcmcobV94MSkuYXJnKG1feTEpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAi
USI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKS5zcHJpbnRmKCJRICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwg
bV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJs
ZSB4KCkgY29uc3Q7CkBAIC02NCw4ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKCk7CiAKICAgICAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdf
Q1VSVkVUT19RVUFEUkFUSUNfUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJxIik7IH0K
LSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgicSAlMSAlMiAlMyAlNCIpLmFyZyhtX3gx
KS5hcmcobV95MSkuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJxIjsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoInEg
JS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gxLCBtX3kxLCBtX3gsIG1feSk7IH0KICAKICAg
ICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODcpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTksNyArOTksNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoRG9j
CiAgICAgICAgICAgICBzdmdEb2N1bWVudC0+ZGlzcGF0Y2hSZWN1cnNpdmVFdmVudChldmVudC5n
ZXQoKSwgc3ZnRG9jdW1lbnQtPmxhc3RDaGlsZCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGtk
RGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUgIiA8
PCAobGluZW5vICE9IC0xID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGxpbmVubykgOiBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC0+dG9TdHJp
bmcoZXhlYykuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CisgICAgICAgIGtkRGVidWcoKSA8
PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUgIiA8PCAobGluZW5v
ICE9IC0xID8gU3RyaW5nOjpudW1iZXIobGluZW5vKSA6IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21M
YXRpbjEoIk4vQSIpKSAgPDwgIiAiIDw8IGV4VmFsLT50b1N0cmluZyhleGVjKS5kZXByZWNhdGVk
U3RyaW5nKCkgPDwgZW5kbDsKICAgICB9CiAgICAgZWxzZSBpZihjb21wLmNvbXBsVHlwZSgpID09
IEtKUzo6UmV0dXJuVmFsdWUpCiAgICAgICAgIGtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1l
bnRdIFJldHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGVjbWFFbmdpbmUt
Pmdsb2JhbEV4ZWMoKSkuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUGF0aFNlZ0FyYy5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdBcmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQXJjQWJzKCk7CiAKICAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBB
VEhTRUdfQVJDX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBl
QXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiQSIpOyB9Ci0gICAgICAg
IHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJl
Y2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIkEgJTEgJTIgJTMgJTQgJTUgJTYgJTciKS5hcmcobV9y
MSkuYXJnKG1fcjIpLmFyZyhtX2FuZ2xlKS5hcmcobV9sYXJnZUFyY0ZsYWcpLmFyZyhtX3N3ZWVw
RmxhZykuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNl
Z1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJBIjsgfQorICAgICAgICB2aXJ0dWFsIFN0
cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIkEgJS42bGcg
JS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGciLCBtX3IxLCBtX3IyLCBtX2FuZ2xlLCBtX2xh
cmdlQXJjRmxhZywgbV9zd2VlcEZsYWcsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0
WChkb3VibGUgeCk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC03Nyw4ICs3Nyw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdBcmNSZWwoKTsK
IAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gUEFUSFNFR19BUkNfUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJhIik7IH0K
LSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiYSAlMSAlMiAlMyAlNCAlNSAlNiAlNyIp
LmFyZyhtX3IxKS5hcmcobV9yMikuYXJnKG1fYW5nbGUpLmFyZyhtX2xhcmdlQXJjRmxhZykuYXJn
KG1fc3dlZXBGbGFnKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmlu
ZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gImEiOyB9CisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50Zigi
YSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyIsIG1fcjEsIG1fcjIsIG1fYW5n
bGUsIG1fbGFyZ2VBcmNGbGFnLCBtX3N3ZWVwRmxhZywgbV94LCBtX3kpOyB9CiAKICAgICAgICAg
dm9pZCBzZXRYKGRvdWJsZSB4KTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdNb3Zl
dG9BYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gUEFUSFNFR19NT1ZFVE9fQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3Ry
aW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJ
bXBsKCJNIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiTSAlMSAlMiIpLmFy
ZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiTSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJNICUuNmxnICUuNmxnIiwg
bV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJs
ZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdNb3ZldG9SZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19NT1ZFVE9fUkVM
OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJtIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXBy
ZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMSgibSAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAibSI7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5z
cHJpbnRmKCJtICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRY
KGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdQYXRoU2VnQ2xvc2VQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BhdGhTZWdDbG9zZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ2xvc2VQ
YXRoKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFBBVEhTRUdfQ0xPU0VQQVRIOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
SW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBs
KCJaIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIloiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNM
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiWiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdCB7IHJldHVybiAiWiI7IH0KICAgICB9OwogfTsKIApJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHTGVuZ3RoLmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVu
Z3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICAgICAgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7
CiAKLSAgICAgICAgU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZygpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZyk7CisgICAgICAg
IFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VmFsdWVBc1N0
cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgICAgICB2b2lkIG5ld1ZhbHVlU3BlY2lmaWVkVW5p
dHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7
CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5p
dFR5cGUpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24g
MTM0ODcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDE1ICs1NCwxNCBAQCB2b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikgewotICAgICAgICBp
Zih2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkuZW5kc1dpdGgoIiUiKSkKKyAgICAgICAgaWYodmFs
dWUuZW5kc1dpdGgoIiUiKSkKICAgICAgICAgICAgIG9mZnNldCgpLT5zZXRCYXNlVmFsKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKS5sZWZ0KHZhbHVlLmxlbmd0aCgpIC0gMSkudG9Eb3VibGUoKSAv
IDEwMC4pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogCi0gICAgaWYo
IW93bmVyRG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGF0dGFjaGVkKCkpCi0gICAgeworICAgIGlm
ICghb3duZXJEb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgYXR0YWNoZWQoKSkgewogICAgICAgICBy
ZWNhbGNTdHlsZShGb3JjZSk7CiAgICAgICAgIAogICAgICAgICBTVkdTdHlsZWRFbGVtZW50ICpw
YXJlbnRTdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50ICo+KHBhcmVudE5vZGUo
KSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDQzICsyMTgs
MzggQEAgdm9pZCBTVkdDb2xvcjo6c2V0UkdCQ29sb3IoU3RyaW5nSW1wbCAqcgogewogICAgIG1f
cmdiQ29sb3IgPSByZ2JDb2xvcjsKIAotICAgIGlmKG1fcmdiQ29sb3IuaXNOdWxsKCkpCisgICAg
aWYgKG1fcmdiQ29sb3IuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlcHJlY2F0
ZWRTdHJpbmcgcGFyc2UgPSBtX3JnYkNvbG9yLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKLSAgICBpZihwYXJzZS5zdGFydHNXaXRoKCJyZ2IoIikpCi0gICAgeworICAgIGlm
IChwYXJzZS5zdGFydHNXaXRoKCJyZ2IoIikpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xp
c3QgY29sb3JzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcsJywgcGFyc2UpOwogICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIHIgPSBjb2xvcnNbMF0ucmlnaHQoKGNvbG9yc1swXS5sZW5n
dGgoKSAtIDQpKTsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBnID0gY29sb3JzWzFdOwogICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIGIgPSBjb2xvcnNbMl0ubGVmdCgoY29sb3JzWzJdLmxlbmd0
aCgpIC0gMSkpOwogICAgIAotICAgICAgICBpZihyLmNvbnRhaW5zKCIlIikpIHsKKyAgICAgICAg
aWYgKHIuY29udGFpbnMoIiUiKSkgewogICAgICAgICAgICAgciA9IHIubGVmdChyLmxlbmd0aCgp
IC0gMSk7Ci0gICAgICAgICAgICByID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGludCgoZG91
YmxlKDI1NSAqIHIudG9Eb3VibGUoKSkgLyAxMDAuMCkpKTsKKyAgICAgICAgICAgIHIgPSBTdHJp
bmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUgKiByLnRvRG91YmxlKCkpIC8gMTAwLjApKSkuZGVw
cmVjYXRlZFN0cmluZygpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYoZy5jb250YWlucygiJSIp
KQotICAgICAgICB7CisgICAgICAgIGlmIChnLmNvbnRhaW5zKCIlIikpIHsKICAgICAgICAgICAg
IGcgPSBnLmxlZnQoZy5sZW5ndGgoKSAtIDEpOwotICAgICAgICAgICAgZyA9IERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUgKiBnLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7
CisgICAgICAgICAgICBnID0gU3RyaW5nOjpudW1iZXIoaW50KChkb3VibGUoMjU1ICogZy50b0Rv
dWJsZSgpKSAvIDEwMC4wKSkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgfQogICAgIAot
ICAgICAgICBpZihiLmNvbnRhaW5zKCIlIikpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGIuY29u
dGFpbnMoIiUiKSkgewogICAgICAgICAgICAgYiA9IGIubGVmdChiLmxlbmd0aCgpIC0gMSk7Ci0g
ICAgICAgICAgICBiID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGludCgoZG91YmxlKDI1NSAq
IGIudG9Eb3VibGUoKSkgLyAxMDAuMCkpKTsKKyAgICAgICAgICAgIGIgPSBTdHJpbmc6Om51bWJl
cihpbnQoKGRvdWJsZSgyNTUgKiBiLnRvRG91YmxlKCkpIC8gMTAwLjApKSkuZGVwcmVjYXRlZFN0
cmluZygpOwogICAgICAgICB9CiAKICAgICAgICAgbV9xQ29sb3IgPSBDb2xvcihyLnRvSW50KCks
IGcudG9JbnQoKSwgYi50b0ludCgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKKyAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgY29sb3JOYW1lID0gbV9yZ2JDb2xvci5sb3dlcigpOwotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIG5hbWUgPSBjb2xvck5hbWUuZGVwcmVjYXRlZFN0cmluZygp
OworICAgICAgICBTdHJpbmcgbmFtZSA9IGNvbG9yTmFtZTsKIC8vICAgICAgICBpbnQgY29sID0g
V2ViQ29yZTo6Z2V0VmFsdWVJRChuYW1lLmFzY2lpKCksIG5hbWUubGVuZ3RoKCkpOwogLy8gICAg
ICAgIGlmKGNvbCA9PSAwKQotICAgICAgICAgICAgbV9xQ29sb3IgPSBDb2xvcihuYW1lKTsKKyAg
ICAgICAgICAgIG1fcUNvbG9yID0gQ29sb3IobmFtZS5kZXByZWNhdGVkU3RyaW5nKCkpOwogLy8g
ICAgICAgIGVsc2UKIC8vICAgICAgICAgICAgbV9xQ29sb3IgPSBjbWFwW2NvbCAtIFNWR0NTU19W
QUxfQUxJQ0VCTFVFXTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmdsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDEz
NDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2b2lkIHNldFZhbHVlSW5T
cGVjaWZpZWRVbml0cyhmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogICAgICAgICBmbG9h
dCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldFZhbHVl
QXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZyk7Ci0gICAgICAgIFN0cmluZ0ltcGwg
KnZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworICAgICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgbmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSwgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgdm9pZCBjb252ZXJ0VG9T
cGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdQYXRoU2VnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGF0aFNlZy5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhT
ZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmIFNWR19TVVBQT1JUCiAK
ICNpbmNsdWRlICJTaGFyZWQuaCIKLSNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgImtzdmcuaCIKIApAQCAtNDAsOCArNDAsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnKCk7CiAKICAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFBBVEhTRUdfVU5LTk9XTjsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiIik7IH0KLSAgICAg
ICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiIik7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KIAogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqbV9jb250ZXh0OwpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2
LDcgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbgogICAgIGludCBs
ZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKICAgICAgICAgU1ZHUG9pbnQgKnAgPSBwb2ludHMoKS0+Z2V0SXRlbShpKTsK
LSAgICAgICAgX3BvaW50cyArPSBEZXByZWNhdGVkU3RyaW5nKCIlMSAlMiAiKS5hcmcocC0+eCgp
KS5hcmcocC0+eSgpKTsKKyAgICAgICAgX3BvaW50cyArPSBTdHJpbmcoKS5zcHJpbnRmKCIlLjZs
ZyAlLjZsZyAiLCBwLT54KCksIHAtPnkoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHAoInBvaW50
cyIpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aC5oCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX1FVQURS
QVRJQ19TTU9PVEhfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5
cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJUIik7IH0KLSAgICAg
ICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiVCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9
CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiAiVCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBTdHJpbmcoKS5zcHJpbnRmKCJUICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01
Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFE
UkFUSUNfU01PT1RIX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgidCIpOyB9Ci0gICAg
ICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInQgJTEgJTIiKS5hcmcobV94KS5hcmcobV95KTsg
fQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gInQiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigidCAlLjZsZyAlLjZsZyIsIG1feCwgbV95KTsgfQogCiAg
ICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJKHJldmlz
aW9uIDEzNDg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbH5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMoKTsKIAogICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNF
R19MSU5FVE9fVkVSVElDQUxfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJWIik7IH0K
LSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiViAlMSIpLmFyZyhtX3kpOyB9CisgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAi
ViI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKS5zcHJpbnRmKCJWICUuNmxnIiwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WShk
b3VibGUpOwogICAgICAgICBkb3VibGUgeSgpIGNvbnN0OwpAQCAtNTIsOCArNTIsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxS
ZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29u
c3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOyB9Ci0gICAgICAgIHZpcnR1
YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBT
dHJpbmdJbXBsKCJ2Iik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgidiAlMSIp
LmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIo
KSBjb25zdCB7IHJldHVybiAidiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmco
KSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJ2ICUuNmxnIiwgbV95KTsgfQogCiAg
ICAgICAgIHZvaWQgc2V0WShkb3VibGUpOwogICAgICAgICBkb3VibGUgeSgpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwx
OCArMTExLDE3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiAgICAgZmxv
YXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKICAgICBmbG9hdCBfdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2ggPSBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIAotICAgIFN0cmluZyB3U3RyaW5nID0g
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKF93KTsKLSAgICBTdHJpbmcgaFN0cmluZyA9IERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihfaCk7CisgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJpbmc6Om51
bWJlcihfdyk7CisgICAgU3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7CiAgICAg
CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHRyYW5zID0gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgidHJhbnNsYXRlKCUxLCAlMikiKS5hcmcoX3gpLmFy
ZyhfeSk7Ci0gICAgaWYodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1ib2xUYWcpKQot
ICAgIHsKKyAgICBTdHJpbmcgdHJhbnMgPSBTdHJpbmcoKS5zcHJpbnRmKCJ0cmFuc2xhdGUoJWYs
ICVmKSIsIF94LCBfeSk7CisgICAgaWYodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1i
b2xUYWcpKSB7CiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBkdW1teSA9IG5ldyBTVkdTVkdF
bGVtZW50KFNWR05hbWVzOjpzdmdUYWcsIGdldERvY3VtZW50KCkpOwotICAgICAgICBpZihfdyA+
IDApCi0gICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIs
IHdTdHJpbmcuaW1wbCgpKTsKLSAgICAgICAgaWYoX2ggPiAwKQotICAgICAgICAgICAgZHVtbXkt
PnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZy5pbXBsKCkpOworICAg
ICAgICBpZiAoX3cgPiAwKQorICAgICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1l
czo6d2lkdGhBdHRyLCB3U3RyaW5nKTsKKyAgICAgICAgaWYgKF9oID4gMCkKKyAgICAgICAgICAg
IGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcpOwogICAg
ICAgICAKICAgICAgICAgU1ZHU3ltYm9sRWxlbWVudCAqc3ltYm9sID0gc3RhdGljX2Nhc3Q8U1ZH
U3ltYm9sRWxlbWVudCAqPih0YXJnZXQpOwogICAgICAgICBpZiAoc3ltYm9sLT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewpAQCAtMTMyLDI4ICsxMzEsMjQgQEAgdm9pZCBT
VkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKICAgICAgICAgdGFyZ2V0LT5jbG9uZUNoaWxk
Tm9kZXMoZHVtbXkuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBkdW1teTIg
PSBuZXcgU1ZHRHVtbXlFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBnZXREb2N1bWVudCgpKTsKLSAg
ICAgICAgZHVtbXkyLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIFN0cmlu
Zyh0cmFucykpOworICAgICAgICBkdW1teTItPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNm
b3JtQXR0ciwgdHJhbnMpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kQ2hpbGQoZHVtbXkyLCBl
Yyk7CiAgICAgICAgIGR1bW15Mi0+YXBwZW5kQ2hpbGQoZHVtbXksIGVjKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCi0gICAgeworICAg
IH0gZWxzZSBpZih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKICAgICAg
ICAgUmVmUHRyPFNWR0R1bW15RWxlbWVudD4gZHVtbXkgPSBuZXcgU1ZHRHVtbXlFbGVtZW50KFNW
R05hbWVzOjpnVGFnLCBnZXREb2N1bWVudCgpKTsKLSAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0
ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgU3RyaW5nKHRyYW5zKSk7CisgICAgICAgIGR1bW15
LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5zKTsKICAgICAgICAg
CiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiByb290ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxT
VkdFbGVtZW50Pih0YXJnZXQtPmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgIGlmKGhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgICAgIHJvb3QtPnNldEF0dHJpYnV0
ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3U3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICByb290
LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZyk7CiAgICAgICAgICAg
ICAKICAgICAgICAgaWYoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAg
ICAgICAgIHJvb3QtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZy5p
bXBsKCkpOworICAgICAgICAgICAgcm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRB
dHRyLCBoU3RyaW5nKTsKICAgICAgICAgICAgIAogICAgICAgICBhcHBlbmRDaGlsZChkdW1teSwg
ZWMpOwogICAgICAgICBkdW1teS0+YXBwZW5kQ2hpbGQocm9vdC5yZWxlYXNlKCksIGVjKTsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKKyAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8U1ZHRHVt
bXlFbGVtZW50PiBkdW1teSA9IG5ldyBTVkdEdW1teUVsZW1lbnQoU1ZHTmFtZXM6OmdUYWcsIGdl
dERvY3VtZW50KCkpOwogICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFu
c2Zvcm1BdHRyLCB0cmFucyk7CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9rc3ZnMi9jc3MvU1ZH
Q1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL2Nzcy9TVkdDU1NQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIFdlYkNvcmUva3N2ZzIvY3NzL1NWR0NTU1BhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw5ICszNDUsOSBAQCBDU1NWYWx1ZSAqQ1NTUGFy
c2VyOjpwYXJzZVNWR1BhaW50KCkKICAgICBLRE9NQ1NTVmFsdWUgKnZhbHVlID0gdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgaWYoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJgogICAgICAgIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFs
dWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwor
ICAgICAgICBTdHJpbmcgc3RyOwogICAgICAgICBzdHIuc3ByaW50ZigiJTA2ZCIsIChpbnQpKHZh
bHVlLT5mVmFsdWUrLjUpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRU
WVBFX1JHQkNPTE9SLCAwLCBuZXcgU3RyaW5nSW1wbChzdHIpKTsKKyAgICAgICAgcmV0dXJuIG5l
dyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBzdHIuaW1wbCgpKTsKICAgICB9
IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1Ip
IHsKICAgICAgICAgU3RyaW5nIHN0ciA9ICIjIiArIGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsK
ICAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBz
dHIuaW1wbCgpKTsKQEAgLTM3OSw5ICszNzksOCBAQCBDU1NWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJz
ZVNWR1BhaW50KCkKICAgICAgICAgciA9IGtNYXgoMCwga01pbigyNTUsIHIpKTsKICAgICAgICAg
ZyA9IGtNYXgoMCwga01pbigyNTUsIGcpKTsKICAgICAgICAgYiA9IGtNYXgoMCwga01pbigyNTUs
IGIpKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7Ci0gICAgICAgIHN0ci5zcHJpbnRm
KCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWlu
dChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBuZXcgU3RyaW5nSW1wbChzdHIpKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwg
MCwgU3RyaW5nKCkuc3ByaW50ZigicmdiKCVkLCAlZCwgJWQpIiwgciwgZywgYikuaW1wbCgpKTsK
ICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MiwxMiArMzkxLDkgQEAg
Q1NTVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiBDU1NWYWx1ZSAqQ1NTUGFyc2Vy
OjpwYXJzZVNWR0NvbG9yKCkKIHsKICAgICBLRE9NQ1NTVmFsdWUgKnZhbHVlID0gdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgaWYoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJgotICAgICAgIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFs
dWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwot
ICAgICAgICBzdHIuc3ByaW50ZigiJTA2ZCIsIChpbnQpKHZhbHVlLT5mVmFsdWUrLjUpKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihuZXcgU3RyaW5nSW1wbChzdHIpKTsKLSAgICB9IGVs
c2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpIHsK
KyAgICBpZiAoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUiAmJiB2YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAw
LikKKyAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihTdHJpbmcoKS5zcHJpbnRmKCIlMDZkIiwg
KGludCkodmFsdWUtPmZWYWx1ZSsuNSkpLmltcGwoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUikgewogICAgICAgICBTdHJpbmcg
c3RyID0gIiMiICsgZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpOwogICAgICAgICByZXR1cm4gbmV3
IFNWR0NvbG9yKHN0ci5pbXBsKCkpOwogICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCAoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTikpCkBAIC00MjUsOSArNDIxLDggQEAgQ1NT
VmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdDb2xvcigpCiAgICAgICAgIHIgPSBrTWF4KDAsIGtN
aW4oMjU1LCByKSk7CiAgICAgICAgIGcgPSBrTWF4KDAsIGtNaW4oMjU1LCBnKSk7CiAgICAgICAg
IGIgPSBrTWF4KDAsIGtNaW4oMjU1LCBiKSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3Ry
OwotICAgICAgICBzdHIuc3ByaW50ZigicmdiKCVkLCAlZCwgJWQpIiwgciwgZywgYik7Ci0gICAg
ICAgIHJldHVybiBuZXcgU1ZHQ29sb3IobmV3IFN0cmluZ0ltcGwoc3RyKSk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKFN0cmluZygpLnNwcmludGYoInJnYiglZCwgJWQs
ICVkKSIsIHIsIGcsIGIpLmltcGwoKSk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmV0dXJu
IDA7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlz
aW9uIDEzNDg3KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtIChOU1N0cmluZyAqKXJlbmRlclRyZWVBc0V4dGVybmFs
UmVwcmVzZW50YXRpb24KIHsKLSAgICByZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX2Zy
YW1lLT5yZW5kZXJlcigpKS5nZXROU1N0cmluZygpOworICAgIHJldHVybiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKG1fZnJhbWUtPnJlbmRlcmVyKCkpOwogfQogCiAtICh2b2lkKXNldFNlbGVjdGlv
bkZyb21Ob25lCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBX
ZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNzMgKzI5
LDYwIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBjb25zdCBzaXplX3QgaW50ZWdlck9yUG9p
bnRlckFzU3RyaW5nQnVmZmVyU2l6ZSA9IDEwMDsgLy8gbGFyZ2UgZW5vdWdoIGZvciBhbnkgaW50
ZWdlciBvciBwb2ludGVyIGluIHN0cmluZyBmb3JtYXQsIGluY2x1ZGluZyB0cmFpbGluZyBudWxs
IGNoYXJhY3RlcgogY29uc3QgY2hhciAqcHJlY2lzaW9uRm9ybWF0c1tdID0geyAiJS4wZiIsICIl
LjFmIiwgIiUuMmYiLCAiJS4zZiIsICIlLjRmIiwgIiUuNWYiICIlLjZmIn07IAogY29uc3QgaW50
IG1heFByZWNpc2lvbiA9IDY7IC8vIG11c3QgbWF0Y2ggdG8gcHJlY2lzaW9uRm9ybWF0cwogY29u
c3QgaW50IGRlZmF1bHRQcmVjaXNpb24gPSA2OyAvLyBtYXRjaGVzIHF0IGFuZCBzcHJpbnRmKC4u
LCAiJWYiLCAuLi4pIGJlaGF2aW91cgogCi1RVGV4dFN0cmVhbTo6UVRleHRTdHJlYW0oY29uc3Qg
RGVwcmVjYXRlZEJ5dGVBcnJheSYgYmEpCi0gICAgOiBtX2hhc0J5dGVBcnJheSh0cnVlKSwgbV9i
eXRlQXJyYXkoYmEpLCBtX3N0cmluZygwKSwgbV9wcmVjaXNpb24oZGVmYXVsdFByZWNpc2lvbikK
LXsKLX0KLQotUVRleHRTdHJlYW06OlFUZXh0U3RyZWFtKERlcHJlY2F0ZWRTdHJpbmcqIHMpCi0g
ICAgOiBtX2hhc0J5dGVBcnJheShmYWxzZSksIG1fc3RyaW5nKHMpLCBtX3ByZWNpc2lvbihkZWZh
dWx0UHJlY2lzaW9uKQorUVRleHRTdHJlYW06OlFUZXh0U3RyZWFtKFN0cmluZyogcykKKyAgICA6
IG1fc3RyaW5nKHMpLCBtX3ByZWNpc2lvbihkZWZhdWx0UHJlY2lzaW9uKQogeworICAgIEFTU0VS
VChzKTsKIH0KIAogUVRleHRTdHJlYW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNoYXIgYykK
IHsKLSAgICBpZiAobV9oYXNCeXRlQXJyYXkpIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9
IG1fYnl0ZUFycmF5LnNpemUoKTsKLSAgICAgICAgbV9ieXRlQXJyYXkucmVzaXplKG9sZFNpemUg
KyAxKTsKLSAgICAgICAgbV9ieXRlQXJyYXlbb2xkU2l6ZV0gPSBjOwotICAgIH0KLSAgICBpZiAo
bV9zdHJpbmcpCi0gICAgICAgIG1fc3RyaW5nLT5hcHBlbmQoUUNoYXIoYykpOworICAgICptX3N0
cmluZyArPSBRQ2hhcihjKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFtJiBR
VGV4dFN0cmVhbTo6b3BlcmF0b3I8PChzaG9ydCBpKQogewotICAgIGNoYXIgYnVmZmVyW2ludGVn
ZXJPclBvaW50ZXJBc1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQi
LCBpKTsKLSAgICByZXR1cm4gKnRoaXMgPDwgYnVmZmVyOworICAgIAorICAgICptX3N0cmluZyAr
PSBTdHJpbmc6Om51bWJlcihpKTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFt
JiBRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBpKQogewotICAgIGNoYXIg
YnVmZmVyW2ludGVnZXJPclBvaW50ZXJBc1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYo
YnVmZmVyLCAiJXUiLCBpKTsKLSAgICByZXR1cm4gKnRoaXMgPDwgYnVmZmVyOworICAgICptX3N0
cmluZyArPSBTdHJpbmc6Om51bWJlcihpKTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0
U3RyZWFtJiBRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChpbnQgaSkKIHsKLSAgICBjaGFyIGJ1ZmZl
cltpbnRlZ2VyT3JQb2ludGVyQXNTdHJpbmdCdWZmZXJTaXplXTsKLSAgICBzcHJpbnRmKGJ1ZmZl
ciwgIiVkIiwgaSk7Ci0gICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcg
Kz0gU3RyaW5nOjpudW1iZXIoaSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVh
bSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwodW5zaWduZWQgaSkKIHsKLSAgICBjaGFyIGJ1ZmZl
cltpbnRlZ2VyT3JQb2ludGVyQXNTdHJpbmdCdWZmZXJTaXplXTsKLSAgICBzcHJpbnRmKGJ1ZmZl
ciwgIiV1IiwgaSk7Ci0gICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcg
Kz0gU3RyaW5nOjpudW1iZXIoaSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVh
bSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwobG9uZyBpKQogewotICAgIGNoYXIgYnVmZmVyW2lu
dGVnZXJPclBvaW50ZXJBc1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAi
JWxkIiwgaSk7Ci0gICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcgKz0g
U3RyaW5nOjpudW1iZXIoaSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVhbSYg
UVRleHRTdHJlYW06Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBpKQogewotICAgIGNoYXIgYnVm
ZmVyW2ludGVnZXJPclBvaW50ZXJBc1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVm
ZmVyLCAiJWx1IiwgaSk7Ci0gICAgcmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJp
bmcgKz0gU3RyaW5nOjpudW1iZXIoaSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0
cmVhbSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwoZmxvYXQgZikKQEAgLTExNCwzOSArMTAxLDI2
IEBAIFFUZXh0U3RyZWFtJiBRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PChkb3UKIAogUVRleHRTdHJl
YW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IGNoYXIqIHMpCiB7Ci0gICAgaWYgKG1f
aGFzQnl0ZUFycmF5KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihzKTsKLSAg
ICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fYnl0ZUFycmF5LnNpemUoKTsKLSAgICAgICAgbV9i
eXRlQXJyYXkucmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOwotICAgICAgICBtZW1jcHkobV9ieXRl
QXJyYXkuZGF0YSgpICsgb2xkU2l6ZSwgcywgbGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKG1fc3Ry
aW5nKQotICAgICAgICBtX3N0cmluZy0+YXBwZW5kKHMpOworICAgICptX3N0cmluZyArPSBzOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIAogUVRleHRTdHJlYW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRv
cjw8KGNvbnN0IERlcHJlY2F0ZWRDU3RyaW5nJiBxY3MpCiB7Ci0gICAgY29uc3QgY2hhciAqcyA9
IHFjczsKKyAgICBjb25zdCBjaGFyKiBzID0gcWNzOwogICAgIHJldHVybiAqdGhpcyA8PCBzOwog
fQogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgcykKIHsKLSAgICBpZiAobV9oYXNCeXRlQXJyYXkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gcy5sZW5ndGgoKTsKLSAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fYnl0
ZUFycmF5LnNpemUoKTsKLSAgICAgICAgbV9ieXRlQXJyYXkucmVzaXplKG9sZFNpemUgKyBsZW5n
dGgpOwotICAgICAgICBtZW1jcHkobV9ieXRlQXJyYXkuZGF0YSgpICsgb2xkU2l6ZSwgcy5sYXRp
bjEoKSwgbGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKG1fc3RyaW5nKQotICAgICAgICBtX3N0cmlu
Zy0+YXBwZW5kKHMpOworICAgICptX3N0cmluZyArPSBzOwogICAgIHJldHVybiAqdGhpczsKIH0K
IAogUVRleHRTdHJlYW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgcykKIHsKLSAgICByZXR1cm4gKCp0aGlzKSA8PCBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICAqbV9zdHJpbmcgKz0gczsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFt
JiBRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PCh2b2lkKiBwKQpJbmRleDogV2ViQ29yZS9rd3EvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3EvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rd3EvUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw4ICsyMjcsOCBAQCBzdGF0aWMgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlCiAKIHN0YXRpYyBTdHJpbmcgcXVvdGVBbmRFc2NhcGVO
b25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJl
c3VsdDsKLSAgICByZXN1bHQgKz0gJyInOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgcmVzdWx0
ICs9IFFDaGFyKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBzLmxlbmd0aCgp
OyArK2kpIHsKICAgICAgICAgUUNoYXIgYyA9IHNbaV07CiAgICAgICAgIGlmIChjID09ICdcXCcp
CkBAIC0yMzYsMTkgKzIzNiwxNiBAQCBzdGF0aWMgU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJp
bnRhYmxlCiAgICAgICAgIGVsc2UgaWYgKGMgPT0gJyInKQogICAgICAgICAgICAgcmVzdWx0ICs9
ICJcXFwiIjsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IGMudW5pY29kZSgpID09IDB4
MDBBMCkKLSAgICAgICAgICAgIHJlc3VsdCArPSAnICc7CisgICAgICAgICAgICByZXN1bHQgKz0g
UUNoYXIoJyAnKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB1
ID0gYy51bmljb2RlKCk7CiAgICAgICAgICAgICBpZiAodSA+PSAweDIwICYmIHUgPCAweDdGKQog
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBoZXg7Ci0gICAgICAgICAgICAgICAgaGV4LnNwcmlu
dGYoIlxceHslWH0iLCB1KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gaGV4OwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBTdHJp
bmcoKS5zcHJpbnRmKCJcXHh7JVh9IiwgdSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmVzdWx0
ICs9ICciJzsKKyAgICByZXN1bHQgKz0gUUNoYXIoJyInKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0zODEsOSArMzc4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoUVRleHRTdHJl
YW0gJnRzLAogICAgIH0KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9u
KE5vZGUgKm5vZGUpCitzdGF0aWMgU3RyaW5nIG5vZGVQb3NpdGlvbihOb2RlICpub2RlKQogewot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyByZXN1bHQ7CiAKICAgICBO
b2RlICpwOwogICAgIGZvciAoTm9kZSAqbiA9IG5vZGU7IG47IG4gPSBwKSB7CkBAIC0zOTEsNyAr
Mzg4LDcgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZAogICAgICAg
ICBpZiAobiAhPSBub2RlKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAgICAgICAg
aWYgKHApCi0gICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIobi0+bm9kZUluZGV4KCkpICsgIiB7IiArIGdldFRhZ05hbWUobikgKyAifSI7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBTdHJpbmc6Om51bWJlcihuLT5ub2RlSW5k
ZXgoKSkgKyAiIHsiICsgZ2V0VGFnTmFtZShuKSArICJ9IjsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmVzdWx0ICs9ICJkb2N1bWVudCI7CiAgICAgfQpAQCAtNDIyLDExICs0MTksMTEgQEAg
c3RhdGljIHZvaWQgd3JpdGVTZWxlY3Rpb24oUVRleHRTdHJlYW0gJgogICAgIH0KIH0KIAotRGVw
cmVjYXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRlck9iamVjdCogbykKK1N0
cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRlck9iamVjdCogbykKIHsKICAgICBKU0Vk
aXRvcjo6c2V0U3VwcG9ydHNQYXN0ZUNvbW1hbmQodHJ1ZSk7CiAKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHM7CisgICAgU3RyaW5nIHM7CiAgICAgaWYgKG8pIHsKICAgICAgICAgUVRleHRTdHJlYW0g
dHMoJnMpOwogI2lmIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3EvS1dRVGV4dFN0cmVhbS5oCShyZXZpc2lvbiAx
MzQ4NykKKysrIFdlYkNvcmUva3dxL0tXUVRleHRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsNiBAQAogI2lmbmRlZiBRVGV4dFN0cmVhbV9ICiAjZGVmaW5lIFFUZXh0U3RyZWFt
X0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgotCiBjbGFzcyBEZXByZWNhdGVkQ1N0
cmluZzsKIGNsYXNzIFFDaGFyOwogY2xhc3MgRGVwcmVjYXRlZFN0cmluZzsKQEAgLTQzLDggKzQx
LDcgQEAgUVRleHRTdHJlYW0gJmVuZGwoUVRleHRTdHJlYW0mIHN0cmVhbSk7CiAKIGNsYXNzIFFU
ZXh0U3RyZWFtIHsKIHB1YmxpYzoKLSAgICBRVGV4dFN0cmVhbShjb25zdCBEZXByZWNhdGVkQnl0
ZUFycmF5Jik7Ci0gICAgUVRleHRTdHJlYW0oRGVwcmVjYXRlZFN0cmluZyopOworICAgIFFUZXh0
U3RyZWFtKFdlYkNvcmU6OlN0cmluZyopOwogCiAgICAgUVRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
Y2hhcik7CiAgICAgUVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgUUNoYXImKTsKQEAgLTY4
LDkgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBRVGV4dFN0cmVhbShjb25zdCBRVGV4dFN0cmVhbSYp
OwogICAgIFFUZXh0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgUVRleHRTdHJlYW0mKTsKIAotICAg
IGJvb2wgbV9oYXNCeXRlQXJyYXk7Ci0gICAgRGVwcmVjYXRlZEJ5dGVBcnJheSBtX2J5dGVBcnJh
eTsKLSAgICBEZXByZWNhdGVkU3RyaW5nKiBtX3N0cmluZzsKKyAgICBXZWJDb3JlOjpTdHJpbmcq
IG1fc3RyaW5nOwogICAgIGludCBtX3ByZWNpc2lvbjsKIH07CiAKSW5kZXg6IFdlYkNvcmUva3dx
L1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2t3cS9SZW5kZXJUcmVl
QXNUZXh0LmgJKHJldmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9rd3EvUmVuZGVyVHJlZUFzVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNSArMjUsMTUgQEAKIAogI2lmZGVmIF9fY3BsdXNw
bHVzCiAKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiS1dRVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OworICAgIGNsYXNzIFN0cmluZzsKIH0KIAotRGVwcmVj
YXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OlJlbmRlck9iamVjdCAq
KTsKK1dlYkNvcmU6OlN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OlJlbmRl
ck9iamVjdCAqKTsKIHZvaWQgd3JpdGUoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBXZWJDb3JlOjpS
ZW5kZXJPYmplY3QgJm8sIGludCBpbmRlbnQgPSAwKTsKIAogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJl
dmlzaW9uIDEzNDg3KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUxOSwxMSArMTUxOSwxMCBAQCB2b2lkIEZyYW1lOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIg
KmFjdGlvCiAgICAgICAgICB0bXBib2R5LnJlcGxhY2UoJysnLCAnICcpOwogICAgICAgICAgdG1w
Ym9keSA9IEtVUkw6OmRlY29kZV9zdHJpbmcodG1wYm9keSk7ICAvLyBEZWNvZGUgdGhlIHJlc3Qg
b2YgaXQKICAgICAgICAgIGJvZHlFbmMgPSBLVVJMOjplbmNvZGVfc3RyaW5nKHRtcGJvZHkpOyAg
Ly8gUmVjb2RlIGZvciB0aGUgVVJMCi0gICAgICB9IGVsc2UgeworICAgICAgfSBlbHNlCiAgICAg
ICAgICBib2R5RW5jID0gS1VSTDo6ZW5jb2RlX3N0cmluZyhmb3JtRGF0YS5mbGF0dGVuVG9TdHJp
bmcoKSk7Ci0gICAgICB9CiAKLSAgICAgIG52cHMuYXBwZW5kKERlcHJlY2F0ZWRTdHJpbmcoImJv
ZHk9JTEiKS5hcmcoYm9keUVuYykpOworICAgICAgbnZwcy5hcHBlbmQoU3RyaW5nKCkuc3ByaW50
ZigiYm9keT0lcyIsIGJvZHlFbmMubGF0aW4xKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAg
ICBxID0gbnZwcy5qb2luKCImIik7CiAgICAgICB1LnNldFF1ZXJ5KHEpOwogICB9IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7344</attachid>
            <date>2006-03-27 20:02:51 -0800</date>
            <delta_ts>2006-03-27 23:31:23 -0800</delta_ts>
            <desc>Bigger patch, ultra slow however.</desc>
            <filename>new.patch</filename>
            <type>text/plain</type>
            <size>112508</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODA5LDEwICsxODA5LDEwIEBAIEpTVmFsdWUgKkpTSFRNTEVs
ZW1lbnQ6OmFuY2hvckdldHRlcihFeGUKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQog
ICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSArICI6IiAr
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5wYXRo
KCkpOwotICAgICAgICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0
cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRl
ZFN0cmluZygpKS5wb3J0KCkpKTsKICAgICAgICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAg
IHJldHVybiBqc1N0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5w
cm90b2NvbCgpKyI6Iik7CiAgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAgICAgICByZXR1
cm4ganNTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSkucXVlcnko
KSk7CiAgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4ganNTdHJpbmco
YW5jaG9yLm5hbWUoKSk7CkBAIC0xOTM2LDEwICsxOTM2LDEwIEBAIEpTVmFsdWUgKkpTSFRNTEVs
ZW1lbnQ6OmFyZWFHZXR0ZXIoRXhlY1MKICAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQog
ICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyh1cmwuaG9zdCgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodXJsLmhvc3QoKSArICI6IiAr
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcmVhUGF0aE5hbWU6ICAgICAgICByZXR1
cm4ganNTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnBhdGgoKSk7
Ci0gICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSku
cG9ydCgpKSk7CisgICAgICAgIGNhc2UgQXJlYVBvcnQ6ICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKFN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKS5w
b3J0KCkpKTsKICAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4ganNTdHJp
bmcoS1VSTChhcmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
ICAgICAgICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4ganNTdHJpbmcoS1VSTChh
cmVhLmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCkpLnF1ZXJ5KCkpOwogICAgICAgICBjYXNlIEFy
ZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CkluZGV4
OiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pz
X3dpbmRvdy5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMywxMCArMTIyMywxMCBAQCBib29sIFdpbmRvdzo6aXNT
YWZlU2NyaXB0KGNvbnN0IFNjcmlwdEluCiAgICAgICAgIHByaW50ZigiVW5zYWZlIEphdmFTY3Jp
cHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVS
TCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1l
bnQtPlVSTCgpLmxhdGluMSgpLCBvcmlnaW5Eb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwogICAg
IH0KLSAgICBEZXByZWNhdGVkU3RyaW5nIG1lc3NhZ2U7CisgICAgU3RyaW5nIG1lc3NhZ2U7CiAg
ICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBm
cmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0
Y2guXG4iLCAKICAgICAgICAgICAgICAgICAgIHRhcmdldERvY3VtZW50LT5VUkwoKS5sYXRpbjEo
KSwgb3JpZ2luRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpKTsKLSAgICB0YXJnZXRQYXJ0LT5hZGRN
ZXNzYWdlVG9Db25zb2xlKFN0cmluZyhtZXNzYWdlKSwgMSwgU3RyaW5nKCkpOyAvL2ZpeG1lOiBw
cm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNldXJsCisgICAgdGFyZ2V0UGFydC0+
YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCAxLCBTdHJpbmcoKSk7IC8vZml4bWU6IHByb3Zp
ZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2V1cmwKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTEyODUsMTAgKzEyODUsMTAgQEAgYm9vbCBXaW5kb3c6OmlzU2FmZVNjcmlwdChFeGVj
U3RhdGUgKmV4ZQogICAgICAgcHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFj
Y2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11
c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICB0aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgp
LCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwogICB9Ci0gIERlcHJlY2F0ZWRTdHJpbmcg
bWVzc2FnZTsKKyAgU3RyaW5nIG1lc3NhZ2U7CiAgIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEph
dmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3
aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgICAgICB0
aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpLCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkp
OwotICBtX2ZyYW1lLT5hZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyhtZXNzYWdlKSwgMSwgU3Ry
aW5nKCkpOworICBtX2ZyYW1lLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFN0cmlu
ZygpKTsKICAgCiAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIwNzgsNyArMjA3OCw3IEBAIEpTVmFs
dWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgICAvLyBCbGVoLgogICAgIFVT
dHJpbmcgc3RyID0gdXJsLmhvc3QoKTsKICAgICBpZiAodXJsLnBvcnQoKSkKLSAgICAgICAgICAg
IHN0ciArPSAiOiIgKyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgpKTsK
KyAgICAgICAgc3RyICs9ICI6IiArIFN0cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSk7CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKHN0cik7CiAgIH0KICAgY2FzZSBIb3N0bmFtZToKQEAgLTIwOTEs
NyArMjA5MSw3IEBAIEpTVmFsdWUgKkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAg
Y2FzZSBQYXRobmFtZToKICAgICByZXR1cm4ganNTdHJpbmcodXJsLnBhdGgoKS5pc0VtcHR5KCkg
PyAiLyIgOiB1cmwucGF0aCgpKTsKICAgY2FzZSBQb3J0OgotICAgIHJldHVybiBqc1N0cmluZyh1
cmwucG9ydCgpID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSkgOiAi
Iik7CisgICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcigoaW50
KXVybC5wb3J0KCkpIDogIiIpOwogICBjYXNlIFByb3RvY29sOgogICAgIHJldHVybiBqc1N0cmlu
Zyh1cmwucHJvdG9jb2woKSArICI6Iik7CiAgIGNhc2UgU2VhcmNoOgpJbmRleDogcGxhdGZvcm0v
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TdHJpbmcuY3BwCShyZXZpc2lvbiAx
MzQ4NykKKysrIHBsYXRmb3JtL1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSA8a2pzL2lkZW50
aWZpZXIuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIApAQCAtMjA5LDYgKzIxMCw3MyBAQCBEZXByZWNhdGVkU3RyaW5nIFN0cmluZzo6ZGVw
cmVjYXRlZFN0cmluCiAgICAgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcobV9pbXBsLT5zLCBtX2lt
cGwtPmwpOwogfQogCitTdHJpbmcmIFN0cmluZzo6c3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsK
KworI2lmIFBMQVRGT1JNKFdJTl9PUykKKyAgICAvLyBXaW5kb3dzIHZzcHJpbnRmIGRvZXMgbm90
IHJldHVybiB0aGUgZXhwZWN0ZWQgc2l6ZSBvbiBvdmVyZmxvdworICAgIC8vIFNvIHdlIGp1c3Qg
aGF2ZSB0byBrZWVwIGxvb3BpbmcgdW50aWwgb3VyIHZzcHJpbnRmIGNhbGwgd29ya3MhCisgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOworICAgIGRvIHsK
KyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZl
ci5zaXplKCkgKiAyKTsKKyAgICAgICAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7CisgICAgfSB3aGlsZSAocmVzdWx0IDwgMCAm
JiAoYnVmZmVyLnNpemUoKSAqIDIpIDwgMjA0OCk7CisgICAgaWYgKHJlc3VsdCA8PSAwKSB7Cisg
ICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtdHB5KCk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisgICAgdW5zaWduZWQgbGVuID0gcmVzdWx0OworI2Vsc2UKKyAgICAvLyBEbyB0
aGUgZm9ybWF0IG9uY2UgdG8gZ2V0IHRoZSBsZW5ndGguCisgICAgY2hhciBjaDsKKyAgICBpbnQg
cmVzdWx0ID0gdnNucHJpbnRmKCZjaCwgMSwgZm9ybWF0LCBhcmdzKTsKKyAgICBpZiAocmVzdWx0
IDw9IDApIHsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKyAgICB1bnNpZ25lZCBsZW4gPSByZXN1bHQ7CisgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKGxlbiArIDEpOworICAgIAorICAg
IC8vIE5vdyBkbyB0aGUgZm9ybWF0dGluZyBhZ2FpbiwgZ3VhcmFudGVlZCB0byBmaXQuCisgICAg
dnNucHJpbnRmKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7Cisj
ZW5kaWYKKyAgICB2YV9lbmQoYXJncyk7CisgICAgCisgICAgbV9pbXBsID0gbmV3IFN0cmluZ0lt
cGwoYnVmZmVyLmRhdGEoKSwgbGVuKTsKKyAgICAKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1N0
cmluZyBTdHJpbmc6Om51bWJlcihpbnQgbikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCkuc3ByaW50
ZigiJWQiLCBuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIG4pCit7Cisg
ICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIiV1Iiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6
Om51bWJlcihsb25nIG4pCit7CisgICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIiVsZCIsIG4p
OworfQorCitTdHJpbmcgU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbG9uZyBuKQoreworICAgIHJl
dHVybiBTdHJpbmcoKS5zcHJpbnRmKCIlbHUiLCBuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVt
YmVyKGRvdWJsZSBuKQoreworICAgIHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCIlLjZsZyIsIG4p
OworfQorCiBpbnQgU3RyaW5nOjp0b0ludChib29sKiBvaykgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCkgewpJbmRleDogcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBsYXRmb3JtL21hYy9LZXlFdmVudE1hYy5tbQkocmV2aXNpb24gMTM0ODcpCisrKyBwbGF0Zm9y
bS9tYWMvS2V5RXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsNyBAQCBz
dGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChOCiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgdmVuZG9yLWFyZWEg
VW5pY29kZSB2YWx1ZXMgZm9yIHRoZSBhYm92ZSBrZXlzLgogICAgICAgICAgICAgLy8gRm9yIG5v
dywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQuCiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpLnNwcmludGYoIlUrJTA2WCIsIHRv
dXBwZXIoYykpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIlUrJTA2WCIs
IHRvdXBwZXIoYykpOwogICAgIH0KIH0KIApJbmRleDogcGxhdGZvcm0vQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9Db2xvci5oCShyZXZpc2lvbiAxMzQ4NykKKysrIHBsYXRmb3JtL0Nv
bG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dD
b2xvciAqQ0dDb2xvclJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTdHJpbmc7
CisKIHR5cGVkZWYgdW5zaWduZWQgaW50IFJHQkEzMjsgICAgICAgICAgICAgICAgICAgICAgLy8g
UkdCQSBxdWFkcnVwbGV0CiAKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOwpA
QCAtNTEsMTAgKzUzLDEwIEBAIHB1YmxpYzoKICAgICBDb2xvcihSR0JBMzIgY29sKSA6IGNvbG9y
KGNvbCksIHZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpIDog
Y29sb3IobWFrZVJHQihyLCBnLCBiKSksIHZhbGlkKHRydWUpIHsgfQogICAgIENvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKSA6IGNvbG9yKG1ha2VSR0JBKHIsIGcsIGIsIGEpKSwgdmFs
aWQodHJ1ZSkgeyB9Ci0gICAgZXhwbGljaXQgQ29sb3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
KTsKKyAgICBleHBsaWNpdCBDb2xvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAgICAgZXhw
bGljaXQgQ29sb3IoY29uc3QgY2hhciAqKTsKICAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIG5h
bWUoKSBjb25zdDsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZWRD
b2xvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiB2YWxpZDsgfQpJbmRleDogcGxhdGZvcm0vQXRvbWljU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vQXRvbWljU3RyaW5nLmgJKHJldmlzaW9uIDEzNDg3KQorKysgcGxh
dGZvcm0vQXRvbWljU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgQXRvbWljU3RyaW5nJiBzLCBib29sIGNhc2VT
ZW5zaXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5lbmRzV2l0
aChzLmRvbVN0cmluZygpLCBjYXNlU2Vuc2l0aXZlKTsgfQogICAgIAotICAgIGludCB0b0ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KCk7IH0KKyAgICBpbnQgdG9JbnQoYm9vbCog
b2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0ludChvayk7IH0KICAgICBib29sIHBl
cmNlbnRhZ2UoaW50JiBwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5wZXJjZW50YWdlKHApOyB9
CiAgICAgTGVuZ3RoKiB0b0xlbmd0aEFycmF5KGludCYgbGVuKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy50b0xlbmd0aEFycmF5KGxlbik7IH0KICAgICBMZW5ndGgqIHRvQ29vcmRzQXJyYXkoaW50
JiBsZW4pIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvQ29vcmRzQXJyYXkobGVuKTsgfQpJbmRl
eDogcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vU3RyaW5n
SW1wbC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgcGxhdGZvcm0vU3RyaW5nSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDEyICs3MSwxMiBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNv
bnN0IGNoYXIqIHN0cikKICAgICBpbml0V2l0aENoYXIoc3RyLCBzdHJsZW4oc3RyKSk7CiB9CiAK
LVN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBpbnQgbGVu
KQorU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikK
IHsKICAgICBpbml0V2l0aENoYXIoc3RyLCBsZW4pOwogfQogCi12b2lkIFN0cmluZ0ltcGw6Omlu
aXRXaXRoQ2hhcihjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIFN0cmlu
Z0ltcGw6OmluaXRXaXRoQ2hhcihjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKIHsKICAg
ICBfaGFzaCA9IDA7CiAgICAgX2luVGFibGUgPSBmYWxzZTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBTdHJpbmdJbXBsOjppbml0V2l0aENoYXIoY29uc3QgY2hhcgogICAgICAgICAqcHRyKysgPSAq
c3RyKys7CiB9CiAKLXZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhRQ2hhcihjb25zdCBRQ2hhciog
c3RyLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBTdHJpbmdJbXBsOjppbml0V2l0aFFDaGFyKGNv
bnN0IFFDaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKIHsKICAgICBfaGFzaCA9IDA7CiAgICAgX2lu
VGFibGUgPSBmYWxzZTsKQEAgLTExNyw4ICsxMTcsNyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1w
bCgpCiB2b2lkIFN0cmluZ0ltcGw6OmFwcGVuZChjb25zdCBTdHJpbmdJbXBsKiBzdHIpCiB7CiAg
ICAgYXNzZXJ0KCFfaW5UYWJsZSk7Ci0gICAgaWYoc3RyICYmIHN0ci0+bCAhPSAwKQotICAgIHsK
KyAgICBpZiAoc3RyICYmIHN0ci0+bCAhPSAwKSB7CiAgICAgICAgIGludCBuZXdsZW4gPSBsK3N0
ci0+bDsKICAgICAgICAgUUNoYXIqIGMgPSBuZXdRQ2hhclZlY3RvcihuZXdsZW4pOwogICAgICAg
ICBtZW1jcHkoYywgcywgbCpzaXplb2YoUUNoYXIpKTsKQEAgLTE2Niw3ICsxNjUsNyBAQCB2b2lk
IFN0cmluZ0ltcGw6OnJlbW92ZSh1bnNpZ25lZCBwb3MsIGluCiAgICAgYXNzZXJ0KCFfaW5UYWJs
ZSk7CiAgICAgaWYgKGxlbiA8PSAwKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHBvcyA+PSBs
ICkKKyAgICBpZiAocG9zID49IGwpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoKHVuc2lnbmVk
KWxlbiA+IGwgLSBwb3MpCiAgICAgICAgIGxlbiA9IGwgLSBwb3M7CkBAIC0xOTksNyArMTk4LDcg
QEAgYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKAogICAgIHJldHVybiBj
b250YWluc09ubHlXaGl0ZXNwYWNlKDAsIGwpOwogfQogCi1ib29sIFN0cmluZ0ltcGw6OmNvbnRh
aW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4pIGNv
bnN0Citib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuKSBjb25zdAogewogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yMjUsNyArMjI0LDcgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6c3Vic3RyaW5n
KHVuc2lnbgogICAgIHJldHVybiBuZXcgU3RyaW5nSW1wbChzICsgcG9zLCBsZW4pOwogfQogCi1z
dGF0aWMgTGVuZ3RoIHBhcnNlTGVuZ3RoKGNvbnN0IFFDaGFyKiBzLCB1bnNpZ25lZCBpbnQgbCkK
K3N0YXRpYyBMZW5ndGggcGFyc2VMZW5ndGgoY29uc3QgUUNoYXIqIHMsIHVuc2lnbmVkIGwpCiB7
CiAgICAgaWYgKGwgPT0gMCkKICAgICAgICAgcmV0dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7CkBA
IC0yODUsNyArMjg0LDcgQEAgTGVuZ3RoKiBTdHJpbmdJbXBsOjp0b0Nvb3Jkc0FycmF5KGludCYg
bAogewogICAgIFFDaGFyKiBzcGFjaWZpZWQgPSBuZXdRQ2hhclZlY3RvcihsKTsKICAgICBRQ2hh
ciBzcGFjZSgnICcpOwotICAgIGZvcih1bnNpZ25lZCBpbnQgaT0wOyBpIDwgbDsgaSsrKSB7Cisg
ICAgZm9yKHVuc2lnbmVkIGk9MDsgaSA8IGw7IGkrKykgewogICAgICAgICBRQ2hhciBjYyA9IHNb
aV07CiAgICAgICAgIGlmIChjYyA+ICc5JyB8fCAoY2MgPCAnMCcgJiYgY2MgIT0gJy0nICYmIGNj
ICE9ICcqJyAmJiBjYyAhPSAnLicpKQogICAgICAgICAgICAgc3BhY2lmaWVkW2ldID0gc3BhY2U7
CkBAIC0zNDEsNyArMzQwLDcgQEAgTGVuZ3RoKiBTdHJpbmdJbXBsOjp0b0xlbmd0aEFycmF5KGlu
dCYgbAogCiBib29sIFN0cmluZ0ltcGw6OmlzTG93ZXIoKSBjb25zdAogewotICAgIHVuc2lnbmVk
IGludCBpOworICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykKIAlp
ZiAoc1tpXS5sb3dlcigpICE9IHNbaV0pCiAJICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Nyw3ICsz
NTYsNyBAQCBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpsb3dlcigpIGNvbnN0CiAgICAgYy0+cyA9
IG5ld1FDaGFyVmVjdG9yKGwpOwogICAgIGMtPmwgPSBsOwogCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBsOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGw7IGkr
KykKIAljLT5zW2ldID0gc1tpXS5sb3dlcigpOwogCiAgICAgcmV0dXJuIGM7CkBAIC0zNzIsNyAr
MzcxLDcgQEAgU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6dXBwZXIoKSBjb25zdAogICAgIGMtPnMg
PSBuZXdRQ2hhclZlY3RvcihsKTsKICAgICBjLT5sID0gbDsKIAotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbDsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsOyBp
KyspCiAJYy0+c1tpXSA9IHNbaV0udXBwZXIoKTsKIAogICAgIHJldHVybiBjOwpAQCAtNTMyLDcg
KzUzMSw3IEBAIGludCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIGNocywgaW4KIAogaW50
IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgUUNoYXIgYywgaW50IHN0YXJ0KSBjb25zdAogewotICAg
IHVuc2lnbmVkIGludCBpbmRleCA9IHN0YXJ0OworICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhcnQ7
CiAgICAgaWYgKGluZGV4ID49IGwgKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgd2hpbGUoaW5k
ZXggPCBsKSB7CkluZGV4OiBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCShyZXZpc2lvbiAxMzQ4NykKKysrIHBsYXRm
b3JtL0RlcHJlY2F0ZWRTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDI5ICs0ODIsMTMg
QEAgcHVibGljOgogCiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYp
IGNvbnN0OwogCi0gICAgc2hvcnQgdG9TaG9ydChib29sICpvayA9IDAsIGludCBiYXNlID0gMTAp
IGNvbnN0OwogICAgIHVuc2lnbmVkIHNob3J0IHRvVVNob3J0KGJvb2wgKm9rID0gMCwgaW50IGJh
c2UgPSAxMCkgY29uc3Q7CiAgICAgaW50IHRvSW50KGJvb2wgKm9rID0gMCwgaW50IGJhc2UgPSAx
MCkgY29uc3Q7CiAgICAgdW5zaWduZWQgdG9VSW50KGJvb2wgKm9rID0gMCwgaW50IGJhc2UgPSAx
MCkgY29uc3Q7CiAgICAgZG91YmxlIHRvRG91YmxlKGJvb2wgKm9rID0gMCkgY29uc3Q7CiAKLSAg
ICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXIoaW50KTsKLSAgICBzdGF0aWMgRGVwcmVj
YXRlZFN0cmluZyBudW1iZXIodW5zaWduZWQpOwotICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5n
IG51bWJlcihsb25nKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXIodW5zaWdu
ZWQgbG9uZyk7Ci0gICAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbnVtYmVyKGRvdWJsZSk7Ci0K
ICAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKICAgICAKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIGFyZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICYsIGludCB3aWR0aD0w
KSBjb25zdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyhzaG9ydCwgaW50IHdpZHRoPTApIGNv
bnN0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKHVuc2lnbmVkIHNob3J0LCBpbnQgd2lkdGg9
MCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcoaW50LCBpbnQgd2lkdGg9MCkgY29u
c3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBhcmcodW5zaWduZWQsIGludCB3aWR0aD0wKSBjb25z
dDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGFyZyhsb25nLCBpbnQgd2lkdGg9MCkgY29uc3Q7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyBhcmcodW5zaWduZWQgbG9uZywgaW50IHdpZHRoPTApIGNvbnN0
OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgYXJnKGRvdWJsZSwgaW50IHdpZHRoPTApIGNvbnN0Owot
CiAgICAgRGVwcmVjYXRlZFN0cmluZyBsZWZ0KHVuc2lnbmVkKSBjb25zdDsKICAgICBEZXByZWNh
dGVkU3RyaW5nIHJpZ2h0KHVuc2lnbmVkKSBjb25zdDsKICAgICBEZXByZWNhdGVkU3RyaW5nIG1p
ZCh1bnNpZ25lZCwgdW5zaWduZWQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwpAQCAtNTE4LDIwICs1
MDIsNiBAQCBwdWJsaWM6CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0VW5pY29kZShjb25zdCBR
Q2hhciAqLCB1bnNpZ25lZCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0TGF0aW4xKGNvbnN0
IGNoYXIgKiwgaW50IGxlbj0tMSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0oc2hv
cnQpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcgJnNldE51bSh1bnNpZ25lZCBzaG9ydCk7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyAmc2V0TnVtKGludCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyAmc2V0
TnVtKHVuc2lnbmVkKTsKLSAgICBEZXByZWNhdGVkU3RyaW5nICZzZXROdW0obG9uZyk7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyAmc2V0TnVtKHVuc2lnbmVkIGxvbmcpOwotICAgIERlcHJlY2F0ZWRT
dHJpbmcgJnNldE51bShkb3VibGUpOwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyAmc3ByaW50Zihj
b25zdCBjaGFyICosIC4uLikgCi0jaWYgX19HTlVDX18KLSAgICBfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDIsIDMpKSkKLSNlbmRpZgotICAgIDsKLQogICAgIERlcHJlY2F0ZWRTdHJp
bmcgJmFwcGVuZChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwogICAgIERlcHJlY2F0ZWRTdHJp
bmcgJmFwcGVuZChRQ2hhcik7CiAgICAgRGVwcmVjYXRlZFN0cmluZyAmYXBwZW5kKGNoYXIpOwpJ
bmRleDogcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vS1VSTC5jcHAJ
KHJldmlzaW9uIDEzNDg3KQorKysgcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzMiwxNyArMzMyLDE2IEBAIEtVUkw6OktVUkwoY29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVw
cmUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhYnNvbHV0ZSkgeworICAgIGlmIChhYnNv
bHV0ZSkKICAgICAgICAgcGFyc2Uoc3RyLCAoYWxsQVNDSUkgJiYgIXN0cmlwcGVkU3RhcnQgJiYg
KGNoYXJzVG9DaG9wT2ZmRW5kID09IDApKSA/ICZyZWwgOiAwKTsKLSAgICB9IGVsc2UgeworICAg
IGVsc2UgewogICAgICAgICAvLyBpZiB0aGUgYmFzZSBpcyBpbnZhbGlkLCBqdXN0IGFwcGVuZCB0
aGUgcmVsYXRpdmUKICAgICAgICAgLy8gcG9ydGlvbi4gVGhlIFJGQyBkb2VzIG5vdCBzcGVjaWZ5
IHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlLgogICAgICAgICBpZiAoIWJhc2UubV9pc1ZhbGlkKSB7
CiAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nICsg
c3RyOwogICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotICAgICAg
ICAgICAgaWYgKHN0ckJ1ZmZlcikgeworICAgICAgICAgICAgaWYgKHN0ckJ1ZmZlcikKICAgICAg
ICAgICAgICAgICBmYXN0RnJlZShzdHJCdWZmZXIpOwotICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTQxMCwxMiArNDA5LDEwIEBAIEtVUkw6OktVUkwo
Y29uc3QgS1VSTCAmYmFzZSwgY29uc3QgRGVwcmUKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoYmFzZVN0cmluZ0VuZCA9PSBiYXNlU3RyaW5nU3RhcnQpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gbm8gcGF0aCBpbiBiYXNlLCBhZGQgYSBwYXRoIHNlcGFyYXRvciBpZiBu
ZWNlc3NhcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2Uuc2NoZW1lRW5kUG9zICsgMSAh
PSBiYXNlLnBhdGhFbmRQb3MgJiYgKnN0ciAhPSAnXDAnICYmICpzdHIgIT0gJz8nICYmICpzdHIg
IT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLnNjaGVtZUVuZFBvcyArIDEg
IT0gYmFzZS5wYXRoRW5kUG9zICYmICpzdHIgIT0gJ1wwJyAmJiAqc3RyICE9ICc/JyAmJiAqc3Ry
ICE9ICcjJykKICAgICAgICAgICAgICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJl
bW92aW5nRG90cyhidWZmZXJQb3MsIGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAt
IGJhc2VTdHJpbmdTdGFydCk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqcmVsU3RyaW5nU3RhcnQgPSBzdHI7CiAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcmVsU3RyaW5nUG9zID0gcmVsU3RyaW5nU3RhcnQ7CkBAIC00MjUsOSArNDIyLDggQEAg
S1VSTDo6S1VSTChjb25zdCBLVVJMICZiYXNlLCBjb25zdCBEZXByZQogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzUGF0aFNlZ21lbnRFbmRDaGFyKHJlbFN0cmluZ1Bvc1sxXSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgIi4iIHNlZ21lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MgKz0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmVsU3RyaW5nUG9zWzBdID09ICcvJykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWxTdHJpbmdQb3MrKzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbFN0cmluZ1Bvc1sxXSA9PSAnLicgJiYgaXNQ
YXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzJdKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNraXAgb3ZlciAiLi4iIHNlZ21lbnQgYW5kIHJld2luZCB0aGUgbGFzdCBz
ZWdtZW50CkBAIC00MzUsMTIgKzQzMSwxMCBAQCBLVVJMOjpLVVJMKGNvbnN0IEtVUkwgJmJhc2Us
IGNvbnN0IERlcHJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIi4uIiBzZWdtZW50
cyAtIHdlIGNob29zZSB0byBkcm9wIHRoZW0gc2luY2Ugc29tZSB3ZWIgY29udGVudAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbGllcyBvbiB0aGlzLgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbFN0cmluZ1BvcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0
YXJ0ICsgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJQb3MgPiBi
dWZmZXJQYXRoU3RhcnQgKyAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJQb3MtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEgICYmIGJ1
ZmZlclBvc1stMV0gIT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1
ZmZlclBvcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ2NSw5ICs0NTks
OCBAQCBLVVJMOjpLVVJMKGNvbnN0IEtVUkwgJmJhc2UsIGNvbnN0IERlcHJlCiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgaWYgKHN0ckJ1ZmZlcikgeworICAgIGlmIChzdHJCdWZmZXIpCiAg
ICAgICAgIGZhc3RGcmVlKHN0ckJ1ZmZlcik7Ci0gICAgfQogfQogCiBib29sIEtVUkw6Omhhc1Bh
dGgoKSBjb25zdApAQCAtNDc3LDE4ICs0NzAsMTYgQEAgYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29u
c3QKIAogRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpwcm90b2NvbCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2lzVmFsaWQpIHsKKyAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIERlcHJl
Y2F0ZWRTdHJpbmcoKTsKLSAgICB9CiAKICAgICByZXR1cm4gdXJsU3RyaW5nLmxlZnQoc2NoZW1l
RW5kUG9zKTsKIH0KIAogRGVwcmVjYXRlZFN0cmluZyBLVVJMOjpob3N0KCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1faXNWYWxpZCkgeworICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZygpOwotICAgIH0KIAogICAgIGludCBzdGFydCA9IChwYXNzd29yZEVu
ZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyAr
IDE7CiAgICAgcmV0dXJuIGRlY29kZV9zdHJpbmcodXJsU3RyaW5nLm1pZChzdGFydCwgaG9zdEVu
ZFBvcyAtIHN0YXJ0KSk7CkBAIC01OTQsNyArNTg1LDcgQEAgdm9pZCBLVVJMOjpzZXRQb3J0KHVu
c2lnbmVkIHNob3J0IGkpCiAgICAgaWYgKG1faXNWYWxpZCkgewogICAgICAgICBib29sIGNvbG9u
TmVlZGVkID0gcG9ydEVuZFBvcyA9PSBob3N0RW5kUG9zOwogICAgICAgICBpbnQgcG9ydFN0YXJ0
ID0gKGNvbG9uTmVlZGVkID8gaG9zdEVuZFBvcyA6IGhvc3RFbmRQb3MgKyAxKTsKLSAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNv
bG9uTmVlZGVkID8gIjoiIDogRGVwcmVjYXRlZFN0cmluZygpKSArIERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcihpKSArIHVybFN0cmluZy5taWQocG9ydEVuZFBvcyk7CisgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocG9ydFN0YXJ0KSArIChjb2xvbk5lZWRl
ZCA/ICI6IiA6IERlcHJlY2F0ZWRTdHJpbmcoKSkgKyBTdHJpbmc6Om51bWJlcihpKS5kZXByZWNh
dGVkU3RyaW5nKCkgKyB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MpOwogICAgICAgICBwYXJzZShu
ZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CiAgICAgfQogfQpAQCAtNjkwLDkgKzY4MSw4IEBAIHZv
aWQgS1VSTDo6c2V0UGF0aChjb25zdCBEZXByZWNhdGVkU3RyaW4KIAogRGVwcmVjYXRlZFN0cmlu
ZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25zdAogewotICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAg
aWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybiB1cmxTdHJpbmc7Ci0gICAgfQogCiAgICAg
RGVwcmVjYXRlZFN0cmluZyByZXN1bHQgPSBwcm90b2NvbCgpICsgIjoiOwogCkBAIC03MDYsMjAg
KzY5NiwxOCBAQCBEZXByZWNhdGVkU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0CiAgICAg
ICAgIGF1dGhvcml0eSArPSBob3N0KCk7CiAgICAgICAgIGlmIChwb3J0KCkgIT0gMCkgewogICAg
ICAgICAgICAgYXV0aG9yaXR5ICs9ICI6IjsKLSAgICAgICAgICAgIGF1dGhvcml0eSArPSBEZXBy
ZWNhdGVkU3RyaW5nOjpudW1iZXIocG9ydCgpKTsKKyAgICAgICAgICAgIGF1dGhvcml0eSArPSBT
dHJpbmc6Om51bWJlcihwb3J0KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICghYXV0aG9yaXR5LmlzRW1wdHkoKSkgeworICAgIGlmICghYXV0aG9yaXR5
LmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0ICs9ICIvLyIgKyBhdXRob3JpdHk7Ci0gICAgfQog
CiAgICAgcmVzdWx0ICs9IHBhdGgoKTsKICAgICByZXN1bHQgKz0gcXVlcnkoKTsKIAotICAgIGlm
IChmcmFnbWVudEVuZFBvcyAhPSBxdWVyeUVuZFBvcykgeworICAgIGlmIChmcmFnbWVudEVuZFBv
cyAhPSBxdWVyeUVuZFBvcykKICAgICAgICAgcmVzdWx0ICs9ICIjIiArIHJlZigpOwotICAgIH0K
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgJKHJldmlzaW9uIDEzNDg3
KQorKysgcGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiAr
OTYsMTggQEAgcHVibGljOgogCiAgICAgUUNoYXIgKnVuaWNvZGUoKSBjb25zdDsKICAgICBEZXBy
ZWNhdGVkU3RyaW5nIGRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMg
U3RyaW5nIG51bWJlcihpbnQpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsK
KyAgICBzdGF0aWMgU3RyaW5nIG51bWJlcihsb25nKTsKKyAgICBzdGF0aWMgU3RyaW5nIG51bWJl
cih1bnNpZ25lZCBsb25nKTsKKyAgICBzdGF0aWMgU3RyaW5nIG51bWJlcihkb3VibGUpOworICAg
IAorICAgIFN0cmluZyYgc3ByaW50Zihjb25zdCBjaGFyICosIC4uLikKKyNpZiBfX0dOVUNfXwor
ICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorI2VuZGlmCisgICAg
OwogCiAgICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3Q7CiAgICAgTGVuZ3RoKiB0b0xl
bmd0aEFycmF5KGludCYgbGVuKSBjb25zdDsKSW5kZXg6IHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCShyZXZp
c2lvbiAxMzQ4NykKKysrIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MTIsOSArNDEyLDggQEAgdm9pZCBLV1FTdHJpbmdEYXRhOjppbmNyZWFzZVVuaWNv
ZGVTaXplKAogICAgICAgICBpZiAoX2xlbmd0aCkKICAgICAgICAgICAgIG1lbWNweShuZXdVbmks
IF91bmljb2RlLCBfbGVuZ3RoKnNpemVvZihRQ2hhcikpOwogICAgICAgICBfdW5pY29kZSA9IG5l
d1VuaTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICBfdW5pY29kZSA9IFJFQUxM
T0NfUUNIQVIoX3VuaWNvZGUsIG5ld1NpemUpOwotICAgIH0KICAgICAKICAgICBfbWF4VW5pY29k
ZSA9IG5ld1NpemU7CiAgICAgX2lzVW5pY29kZVZhbGlkID0gMTsKQEAgLTUxMyw0NyArNTEyLDYg
QEAgUUNoYXIgKktXUVN0cmluZ0RhdGE6Om1ha2VVbmljb2RlKCkKICAgICByZXR1cm4gX3VuaWNv
ZGU7CiB9CiAKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGVwcmVjYXRlZFN0cmluZwotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKGludCBuKQotewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVt
KG4pOwotICAgIHJldHVybiBxczsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIodW5zaWduZWQgbikKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHFzOwotICAg
IHFzLnNldE51bShuKTsKLSAgICByZXR1cm4gcXM7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKGxvbmcgbikKLXsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHFz
OwotICAgIHFzLnNldE51bShuKTsKLSAgICByZXR1cm4gcXM7Ci19Ci0KLURlcHJlY2F0ZWRTdHJp
bmcgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcgbikKLXsKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIHFzOwotICAgIHFzLnNldE51bShuKTsKLSAgICByZXR1cm4gcXM7Ci19Ci0K
LURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGRvdWJsZSBuKQotewot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcXM7Ci0gICAgcXMuc2V0TnVtKG4pOwotICAgIHJldHVybiBx
czsKLX0KLQogaW5saW5lIHZvaWQgRGVwcmVjYXRlZFN0cmluZzo6ZGV0YWNoSWZJbnRlcm5hbCgp
CiB7CiAgICAgS1dRU3RyaW5nRGF0YSAqb2xkRGF0YSA9ICpkYXRhSGFuZGxlOwpAQCAtMTMzNCwx
OCArMTI5Miw2IEBAIHZvaWQgRGVwcmVjYXRlZFN0cmluZzo6Y29weUxhdGluMShjaGFyICoKICAg
ICAgICAgKmJ1ZmZlcisrID0gKnVjKys7CiB9CiAKLXNob3J0IERlcHJlY2F0ZWRTdHJpbmc6OnRv
U2hvcnQoYm9vbCAqb2ssIGludCBiYXNlKSBjb25zdAotewotICAgIGludCB2ID0gdG9JbnQob2ss
IGJhc2UpOwotICAgIHNob3J0IHN2ID0gdjsKLSAgICBpZiAoc3YgIT0gdikgewotICAgICAgICBp
ZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiBzdjsKLX0KLQogdW5zaWduZWQgc2hvcnQgRGVwcmVjYXRlZFN0cmluZzo6
dG9VU2hvcnQoYm9vbCAqb2ssIGludCBiYXNlKSBjb25zdAogewogICAgIHVuc2lnbmVkIHYgPSB0
b1VJbnQob2ssIGJhc2UpOwpAQCAtMTQ4OSw3MyArMTQzNSw2IEBAIGJvb2wgRGVwcmVjYXRlZFN0
cmluZzo6ZmluZEFyZyhpbnQmIHBvcywKICAgICByZXR1cm4gbG93ZXN0ICE9IDA7CiB9CiAKLURl
cHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6YXJnKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJmEsIGludCBmaWVsZHdpZHRoKSBjb25zdAotewotICAgIGludCBwb3MsIGxlbjsKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHIgPSAqdGhpczsKLQotICAgIGlmICggIWZpbmRBcmcoIHBvcywgbGVu
ICkgKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGV4dCBhdCBsZWFzdCBhcHBlYXJzIFNP
TUVXSEVSRQotICAgICAgICByICs9ICcgJzsKLSAgICAgICAgcG9zID0gci5kYXRhSGFuZGxlWzBd
LT5fbGVuZ3RoOwotICAgICAgICBsZW4gPSAwOwotICAgIH0KLQotICAgIHIucmVwbGFjZSggcG9z
LCBsZW4sIGEgKTsKLSAgICBpZiAoIGZpZWxkd2lkdGggPCAwICkgewotICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHM7Ci0gICAgICAgIHdoaWxlICggKHVuc2lnbmVkKS1maWVsZHdpZHRoID4gYS5k
YXRhSGFuZGxlWzBdLT5fbGVuZ3RoICkgewotICAgICAgICAgICAgcyArPSAnICc7Ci0gICAgICAg
ICAgICBmaWVsZHdpZHRoKys7Ci0gICAgICAgIH0KLSAgICAgICAgci5pbnNlcnQoIHBvcyArIGEu
ZGF0YUhhbmRsZVswXS0+X2xlbmd0aCwgcyApOwotICAgIH0gZWxzZSBpZiAoIGZpZWxkd2lkdGgg
KSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgczsKLSAgICAgICAgd2hpbGUgKCAodW5zaWdu
ZWQpZmllbGR3aWR0aCA+IGEuZGF0YUhhbmRsZVswXS0+X2xlbmd0aCApIHsKLSAgICAgICAgICAg
IHMgKz0gJyAnOwotICAgICAgICAgICAgZmllbGR3aWR0aC0tOwotICAgICAgICB9Ci0gICAgICAg
IHIuaW5zZXJ0KCBwb3MsIHMgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcjsKLX0KLQotRGVwcmVj
YXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcoc2hvcnQgcmVwbGFjZW1lbnQsIGludCB3
aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJnKG51bWJlcigoaW50KXJlcGxhY2VtZW50KSwg
d2lkdGgpOwotfQotCi1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmFyZyh1bnNp
Z25lZCBzaG9ydCByZXBsYWNlbWVudCwgaW50IHdpZHRoKSBjb25zdAotewotICAgIHJldHVybiBh
cmcobnVtYmVyKCh1bnNpZ25lZClyZXBsYWNlbWVudCksIHdpZHRoKTsKLX0KLQotRGVwcmVjYXRl
ZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjphcmcoaW50IHJlcGxhY2VtZW50LCBpbnQgd2lkdGgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFyZyhudW1iZXIocmVwbGFjZW1lbnQpLCB3aWR0aCk7Ci19
Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6YXJnKHVuc2lnbmVkIHJlcGxh
Y2VtZW50LCBpbnQgd2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFyZyhudW1iZXIocmVwbGFj
ZW1lbnQpLCB3aWR0aCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgRGVwcmVjYXRlZFN0cmluZzo6
YXJnKGxvbmcgcmVwbGFjZW1lbnQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJn
KG51bWJlcihyZXBsYWNlbWVudCksIHdpZHRoKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyBEZXBy
ZWNhdGVkU3RyaW5nOjphcmcodW5zaWduZWQgbG9uZyByZXBsYWNlbWVudCwgaW50IHdpZHRoKSBj
b25zdAotewotICAgIHJldHVybiBhcmcobnVtYmVyKHJlcGxhY2VtZW50KSwgd2lkdGgpOwotfQot
Ci1EZXByZWNhdGVkU3RyaW5nIERlcHJlY2F0ZWRTdHJpbmc6OmFyZyhkb3VibGUgcmVwbGFjZW1l
bnQsIGludCB3aWR0aCkgY29uc3QKLXsKLSAgICByZXR1cm4gYXJnKG51bWJlcihyZXBsYWNlbWVu
dCksIHdpZHRoKTsKLX0KLQogRGVwcmVjYXRlZFN0cmluZyBEZXByZWNhdGVkU3RyaW5nOjpsZWZ0
KHVuc2lnbmVkIGxlbikgY29uc3QKIHsgcmV0dXJuIG1pZCgwLCBsZW4pOyB9CiAKQEAgLTE4MTks
NzkgKzE2OTgsNiBAQCBEZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzZXRMCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi1EZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5n
OjpzZXROdW0oc2hvcnQgbikKLXsKLSAgICByZXR1cm4gc3ByaW50ZigiJWQiLCBuKTsKLX0KLQot
RGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0TnVtKHVuc2lnbmVkIHNob3J0
IG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYoIiV1Iiwgbik7Ci19Ci0KLURlcHJlY2F0ZWRTdHJp
bmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNldE51bShpbnQgbikKLXsKLSAgICByZXR1cm4gc3ByaW50
ZigiJWQiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0
TnVtKHVuc2lnbmVkIG4pCi17Ci0gICAgcmV0dXJuIHNwcmludGYoIiV1Iiwgbik7Ci19Ci0KLURl
cHJlY2F0ZWRTdHJpbmcgJkRlcHJlY2F0ZWRTdHJpbmc6OnNldE51bShsb25nIG4pCi17Ci0gICAg
cmV0dXJuIHNwcmludGYoIiVsZCIsIG4pOwotfQotCi1EZXByZWNhdGVkU3RyaW5nICZEZXByZWNh
dGVkU3RyaW5nOjpzZXROdW0odW5zaWduZWQgbG9uZyBuKQotewotICAgIHJldHVybiBzcHJpbnRm
KCIlbHUiLCBuKTsKLX0KLQotRGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6c2V0
TnVtKGRvdWJsZSBuKQotewotICAgIHJldHVybiBzcHJpbnRmKCIlLjZsZyIsIG4pOwotfQotCi1E
ZXByZWNhdGVkU3RyaW5nICZEZXByZWNhdGVkU3RyaW5nOjpzcHJpbnRmKGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdzLCBmb3Jt
YXQpOwotICAgIAotICAgIC8vIERvIHRoZSBmb3JtYXQgb25jZSB0byBnZXQgdGhlIGxlbmd0aC4K
LSAgICBjaGFyIGNoOwotICAgIGludCByZXN1bHQgPSB2c25wcmludGYoJmNoLCAxLCBmb3JtYXQs
IGFyZ3MpOwotICAgIAotICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkgc3RyaW5nIGNhc2UgdG8gc2lt
cGxpZnkgdGhlIGNvZGUgYmVsb3cuCi0gICAgaWYgKHJlc3VsdCA8PSAwKSB7IC8vIFBPU0lYIHJl
dHVybnMgMCBpbiBlcnJvcjsgV2luZG93cyByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLgotICAg
ICAgICBzZXRVbmljb2RlKDAsIDApOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IHVuc2lnbmVkIGxlbiA9IHJlc3VsdDsKLSAgICAKLSAgICAvLyBBcnJhbmdlIGZvciBzdG9yYWdl
IGZvciB0aGUgcmVzdWx0aW5nIHN0cmluZy4KLSAgICBkZXRhY2hBbmREaXNjYXJkQ2hhcmFjdGVy
cygpOwotICAgIGlmIChsZW4gPj0gZGF0YUhhbmRsZVswXS0+X21heEFzY2lpIHx8IGRhdGFIYW5k
bGVbMF0tPnJlZkNvdW50ICE9IDEgfHwgIWRhdGFIYW5kbGVbMF0tPl9pc0FzY2lpVmFsaWQpIHsK
LSAgICAgICAgLy8gRnJlZSBvdXIgaGFuZGxlIGlmIGl0IGlzbid0IHRoZSBzaGFyZWQgbnVsbCBo
YW5kbGUsIGFuZCBpZiBuby1vbmUgZWxzZSBpcyB1c2luZyBpdC4KLSAgICAgICAgYm9vbCBuZWVk
VG9GcmVlSGFuZGxlID0gZGF0YUhhbmRsZSAhPSBzaGFyZWRfbnVsbF9oYW5kbGUgJiYgZGF0YUhh
bmRsZVswXS0+cmVmQ291bnQgPT0gMTsKLSAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgaWYgKG5l
ZWRUb0ZyZWVIYW5kbGUpCi0gICAgICAgICAgICBmcmVlSGFuZGxlKGRhdGFIYW5kbGUpOwotICAg
ICAgICBkYXRhSGFuZGxlID0gYWxsb2NhdGVIYW5kbGUoKTsKLSAgICAgICAgKmRhdGFIYW5kbGUg
PSBuZXcgS1dRU3RyaW5nRGF0YSgoY2hhciAqKTAsIGxlbik7Ci0gICAgICAgIGRhdGFIYW5kbGVb
MF0tPl9pc0hlYXBBbGxvY2F0ZWQgPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRhdGFIYW5k
bGVbMF0tPl9sZW5ndGggPSBsZW47Ci0gICAgICAgIGRhdGFIYW5kbGVbMF0tPl9pc1VuaWNvZGVW
YWxpZCA9IDA7Ci0gICAgfQotCi0gICAgLy8gTm93IGRvIHRoZSBmb3JtYXR0aW5nIGFnYWluLCBn
dWFyYW50ZWVkIHRvIGZpdC4KLSAgICB2c3ByaW50Zihjb25zdF9jYXN0PGNoYXIqPihhc2NpaSgp
KSwgZm9ybWF0LCBhcmdzKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQogRGVwcmVjYXRlZFN0
cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6cHJlcGVuZChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZx
cykKIHsKICAgICByZXR1cm4gaW5zZXJ0KDAsIHFzKTsKQEAgLTE5NDUsMTggKzE3NTEsMTggQEAg
RGVwcmVjYXRlZFN0cmluZyAmRGVwcmVjYXRlZFN0cmluZzo6aW5zZQogICAgICAgICBRQ2hhciAq
dGFyZ2V0Q2hhcnM7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVu
b3VnaCBzcGFjZS4KLSAgICAgICAgc2V0TGVuZ3RoIChvcmlnaW5hbExlbmd0aCArIGluc2VydExl
bmd0aCk7CisgICAgICAgIHNldExlbmd0aChvcmlnaW5hbExlbmd0aCArIGluc2VydExlbmd0aCk7
CiAgICAgICAgIHRhcmdldENoYXJzID0gKFFDaGFyICopdW5pY29kZSgpOwogICAgICAgICAKICAg
ICAgICAgLy8gTW92ZSB0YWlsIHRvIG1ha2Ugc3BhY2UgZm9yIGluc2VydGVkIGNoYXJhY3RlcnMu
Ci0gICAgICAgIG1lbW1vdmUgKHRhcmdldENoYXJzKyhpbmRleCtpbnNlcnRMZW5ndGgpLCB0YXJn
ZXRDaGFycytpbmRleCwgKG9yaWdpbmFsTGVuZ3RoLWluZGV4KSpzaXplb2YoUUNoYXIpKTsKKyAg
ICAgICAgbWVtbW92ZSh0YXJnZXRDaGFycysoaW5kZXgraW5zZXJ0TGVuZ3RoKSwgdGFyZ2V0Q2hh
cnMraW5kZXgsIChvcmlnaW5hbExlbmd0aC1pbmRleCkqc2l6ZW9mKFFDaGFyKSk7CiAKICAgICAg
ICAgLy8gSW5zZXJ0IGNoYXJhY3RlcnMuCiAgICAgICAgIHVuc2lnbmVkIGkgPSBpbnNlcnRMZW5n
dGg7CiAgICAgICAgIFFDaGFyICp0YXJnZXQgPSB0YXJnZXRDaGFycytpbmRleDsKICAgICAgICAg
CiAgICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICAqdGFyZ2V0KysgPSAqaW5zZXJ0Q2hh
cnMrKzsgICAgICAgIAorICAgICAgICAgICAgKnRhcmdldCsrID0gKmluc2VydENoYXJzKys7CiAg
ICAgfQogICAgIGVsc2UKICAgICAgICAgRkFUQUwoImludmFsaWQgY2hhcmFjdGVyIGNhY2hlIik7
CkBAIC0yMjk2LDE3ICsyMTAyLDE1IEBAIHZvaWQgRGVwcmVjYXRlZFN0cmluZzo6c2V0TGVuZ3Ro
KHVuc2lnbmUKICAgICBBU1NFUlQoZGF0YUhhbmRsZSAhPSBzaGFyZWRfbnVsbF9oYW5kbGUpOwog
ICAgIAogICAgIGlmIChkYXRhSGFuZGxlWzBdLT5faXNBc2NpaVZhbGlkKXsKLSAgICAgICAgaWYg
KG5ld0xlbisxID4gZGF0YUhhbmRsZVswXS0+X21heEFzY2lpKSB7CisgICAgICAgIGlmIChuZXdM
ZW4rMSA+IGRhdGFIYW5kbGVbMF0tPl9tYXhBc2NpaSkKICAgICAgICAgICAgIGRhdGFIYW5kbGVb
MF0tPmluY3JlYXNlQXNjaWlTaXplKG5ld0xlbisxKTsKLSAgICAgICAgfQogICAgICAgICAvLyBF
bnN1cmUgbnVsbCB0ZXJtaW5hdGlvbiwgYWx0aG91Z2ggbmV3bHkgYWxsb2NhdGVkCiAgICAgICAg
IC8vIGJ5dGVzIGNvbnRhaW4gZ2FyYmFnZS4KICAgICAgICAgZGF0YUhhbmRsZVswXS0+X2FzY2lp
W25ld0xlbl0gPSAwOwogICAgIH0KICAgICBlbHNlIGlmIChkYXRhSGFuZGxlWzBdLT5faXNVbmlj
b2RlVmFsaWQpewotICAgICAgICBpZiAobmV3TGVuID4gZGF0YUhhbmRsZVswXS0+X21heFVuaWNv
ZGUpIHsKKyAgICAgICAgaWYgKG5ld0xlbiA+IGRhdGFIYW5kbGVbMF0tPl9tYXhVbmljb2RlKQog
ICAgICAgICAgICAgZGF0YUhhbmRsZVswXS0+aW5jcmVhc2VVbmljb2RlU2l6ZShuZXdMZW4pOwot
ICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgRkFUQUwoImludmFsaWQgY2hhcmFj
dGVyIGNhY2hlIik7CkluZGV4OiBwbGF0Zm9ybS9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxh
dGZvcm0vQ29sb3IuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIHBsYXRmb3JtL0NvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAKICNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKIC8vIFR1cm4gb2ZmIGlubGluaW5n
IHRvIGF2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MuCkBAIC0xMDYsOSArMTA3LDkgQEAgQ29s
b3I6OkNvbG9yKGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogfQogCi1EZXByZWNhdGVkU3RyaW5n
IENvbG9yOjpuYW1lKCkgY29uc3QKK1N0cmluZyBDb2xvcjo6bmFtZSgpIGNvbnN0CiB7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhbHBoYSgp
IDwgMHhGRikKICAgICAgICAgbmFtZS5zcHJpbnRmKCIjJTAyWCUwMlglMDJYJTAyWCIsIHJlZCgp
LCBncmVlbigpLCBibHVlKCksIGFscGhhKCkpOwogICAgIGVsc2UKSW5kZXg6IGJpbmRpbmdzL29i
amMvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJl
dmlzaW9uIDEzNDg3KQorKysgYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDc4LDggKzE0NzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVz
OwogCiAtICh2b2lkKXNldENvbHM6KGludCljb2xzCiB7Ci0gICAgU3RyaW5nIHZhbHVlKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihjb2xzKSk7Ci0gICAgW3NlbGYgX3RleHRBcmVhRWxlbWVudF0t
PnNldEF0dHJpYnV0ZShjb2xzQXR0ciwgdmFsdWUpOworICAgIFtzZWxmIF90ZXh0QXJlYUVsZW1l
bnRdLT5zZXRBdHRyaWJ1dGUoY29sc0F0dHIsIFN0cmluZzo6bnVtYmVyKGNvbHMpKTsKIH0KIAog
LSAoQk9PTClkaXNhYmxlZApAQCAtMTUxOSw4ICsxNTE4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRSb3dzOihpbnQpcm93cwogewotICAgIFN0
cmluZyB2YWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIocm93cykpOwotICAgIFtzZWxmIF90
ZXh0QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c0F0dHIsIHZhbHVlKTsKKyAgICBbc2Vs
ZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKHJvd3NBdHRyLCBTdHJpbmc6Om51bWJl
cihyb3dzKSk7CiB9CiAKIC0gKGludCl0YWJJbmRleApAQCAtMTc3Nyw4ICsxNzc1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRTdGFydDooaW50
KXN0YXJ0CiB7Ci0gICAgU3RyaW5nIHZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihzdGFy
dCkpOwotICAgIFtzZWxmIF9vTGlzdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCB2
YWx1ZSk7CisgICAgW3NlbGYgX29MaXN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShzdGFydEF0dHIs
IFN0cmluZzo6bnVtYmVyKHN0YXJ0KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdHlwZQpAQCAtMTk2
OSw4ICsxOTY2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAo
dm9pZClzZXRXaWR0aDooaW50KXdpZHRoCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIod2lkdGgpKTsKLSAgICBbc2VsZiBfcHJlRWxlbWVudF0tPnNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3ByZUVsZW1lbnRdLT5zZXRBdHRy
aWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih3aWR0aCkpOwogfQogCiBAZW5kCkBAIC0y
MzU3LDggKzIzNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAt
ICh2b2lkKXNldEhlaWdodDooaW50KWhlaWdodAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwotICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5z
ZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfaW1hZ2VFbGVtZW50
XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwogfQog
CiAtIChpbnQpaHNwYWNlCkBAIC0yMzY4LDggKzIzNjMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhzcGFjZTooaW50KWhzcGFjZQogewotICAg
IFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhzcGFjZSkpOwotICAgIFtz
ZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3RyaW5nKTsKKyAg
ICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6
bnVtYmVyKGhzcGFjZSkpOwogfQogCiAtIChCT09MKWlzTWFwCkBAIC0yNDI0LDggKzI0MTgsNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFZzcGFj
ZTooaW50KXZzcGFjZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKHZzcGFjZSkpOwotICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodnNw
YWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRl
KHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChpbnQpd2lkdGgK
QEAgLTI0MzUsOCArMjQyOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7
CiAKIC0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0aAogewotICAgIFN0cmluZyBzdHJpbmcoRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Ci0gICAgW3NlbGYgX2ltYWdlRWxlbWVudF0t
PnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2ltYWdlRWxlbWVu
dF0tPnNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAK
IEBlbmQKQEAgLTI1NTcsOCArMjU0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CiAKIC0gKHZvaWQpc2V0SHNwYWNlOihpbnQpaHNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0
cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7Ci0gICAgW3NlbGYgX29iamVj
dEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBf
b2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlciho
c3BhY2UpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiluYW1lCkBAIC0yNTg4LDggKzI1NzksNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFRhYkluZGV4
OihpbnQpdGFiSW5kZXgKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcih0YWJJbmRleCkpOwotICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRl
KHRhYmluZGV4QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0
dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CiB9CiAKIC0g
KE5TU3RyaW5nICopdHlwZQpAQCAtMjYxOSw4ICsyNjA5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2UKIHsKLSAg
ICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKLSAgICBb
c2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBzdHJpbmcpOwor
ICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIFN0cmlu
Zzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKXdpZHRoCkBAIC0yNzY5LDgg
KzI3NTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lk
KXNldEhzcGFjZTooaW50KWhzcGFjZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKGhzcGFjZSkpOwotICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0
cmlidXRlKGhzcGFjZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2FwcGxldEVsZW1lbnRdLT5z
ZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7CiB9CiAKIC0g
KE5TU3RyaW5nICopbmFtZQpAQCAtMjgwMCw4ICsyNzg4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2UKIHsKLSAg
ICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKLSAgICBb
c2VsZiBfYXBwbGV0RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBzdHJpbmcpOwor
ICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIFN0cmlu
Zzo6bnVtYmVyKHZzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKXdpZHRoCkBAIC0yOTI2LDgg
KzI5MTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lk
KXNldFRhYkluZGV4OihpbnQpdGFiSW5kZXgKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwotICAgIFtzZWxmIF9hcmVhRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2FyZWFFbGVtZW50
XS0+c2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsK
IH0KIAogLSAoTlNTdHJpbmcgKil0YXJnZXQKQEAgLTMzNzIsOCArMzM1OCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0U3BhbjooaW50KXNwYW4K
IHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihzcGFuKSk7Ci0g
ICAgW3NlbGYgX3RhYmxlQ29sRWxlbWVudF0tPnNldEF0dHJpYnV0ZShzcGFuQXR0ciwgc3RyaW5n
KTsKKyAgICBbc2VsZiBfdGFibGVDb2xFbGVtZW50XS0+c2V0QXR0cmlidXRlKHNwYW5BdHRyLCBT
dHJpbmc6Om51bWJlcihzcGFuKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdkFsaWduCkBAIC0zNTYy
LDggKzM1NDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2
b2lkKXNldENvbFNwYW46KGludCljb2xTcGFuCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoY29sU3BhbikpOwotICAgIFtzZWxmIF90YWJsZUNlbGxFbGVtZW50
XS0+c2V0QXR0cmlidXRlKGNvbHNwYW5BdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF90YWJsZUNl
bGxFbGVtZW50XS0+c2V0QXR0cmlidXRlKGNvbHNwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihjb2xT
cGFuKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopaGVhZGVycwpAQCAtMzYwMyw4ICszNTg3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRSb3dTcGFu
OihpbnQpcm93U3BhbgogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKHJvd1NwYW4pKTsKLSAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNldEF0dHJpYnV0
ZShyb3dzcGFuQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIocm93U3BhbikpOwogfQogCiAt
IChOU1N0cmluZyAqKXNjb3BlCkBAIC0zOTI2LDggKzM5MDksNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhlaWdodDooaW50KWhlaWdodAogewot
ICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGhlaWdodCkpOwotICAg
IFtzZWxmIF9lbWJlZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgc3RyaW5nKTsK
KyAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmlu
Zzo6bnVtYmVyKGhlaWdodCkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAgLTM5NjcsOCAr
Mzk0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQp
c2V0V2lkdGg6KGludCl3aWR0aAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHdpZHRoKSk7Ci0gICAgW3NlbGYgX2VtYmVkRWxlbWVudF0tPnNldEF0dHJpYnV0
ZSh3aWR0aEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2VtYmVkRWxlbWVudF0tPnNldEF0dHJp
YnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIEBlbmQKSW5kZXg6
IGh0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2Jhc2VpbXBs
LmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBodG1sL2h0bWxfYmFzZWltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjYsMTYgKzE2NiwxMCBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lCiAgICAgLy8gRklYTUU6IHBlcmhhcHMgdGhpcyBjb2RlIHNob3VsZCBiZSBp
biBhdHRhY2goKSBpbnN0ZWFkIG9mIGhlcmUKIAogICAgIEZyYW1lVmlldyAqdyA9IGdldERvY3Vt
ZW50KCktPnZpZXcoKTsKLSAgICBpZiAodyAmJiB3LT5tYXJnaW5XaWR0aCgpICE9IC0xKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgczsKLSAgICAgICAgcy5zcHJpbnRmKCIlZCIsIHctPm1h
cmdpbldpZHRoKCkpOwotICAgICAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCBzKTsK
LSAgICB9Ci0gICAgaWYgKHcgJiYgdy0+bWFyZ2luSGVpZ2h0KCkgIT0gLTEpIHsKLSAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyBzOwotICAgICAgICBzLnNwcmludGYoIiVkIiwgdy0+bWFyZ2luSGVp
Z2h0KCkpOwotICAgICAgICBzZXRBdHRyaWJ1dGUobWFyZ2luaGVpZ2h0QXR0ciwgcyk7Ci0gICAg
fQorICAgIGlmICh3ICYmIHctPm1hcmdpbldpZHRoKCkgIT0gLTEpCisgICAgICAgIHNldEF0dHJp
YnV0ZShtYXJnaW53aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHctPm1hcmdpbldpZHRoKCkpKTsK
KyAgICBpZiAodyAmJiB3LT5tYXJnaW5IZWlnaHQoKSAhPSAtMSkKKyAgICAgICAgc2V0QXR0cmli
dXRlKG1hcmdpbmhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHctPm1hcmdpbkhlaWdodCgpKSk7
CiAKICAgICBpZiAodykKICAgICAgICAgdy0+c2NoZWR1bGVSZWxheW91dCgpOwpJbmRleDogaHRt
bC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2ltYWdlaW1wbC5j
cHAJKHJldmlzaW9uIDEzNDg3KQorKysgaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6d2lkdGgoYm9v
bCBpZ25vcmVQCiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBh
dHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wg
b2s7Ci0gICAgICAgIGludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0ludCgmb2spOworICAgICAgICBpbnQgd2lkdGggPSBnZXRBdHRyaWJ1dGUo
d2lkdGhBdHRyKS50b0ludCgmb2spOwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1
cm4gd2lkdGg7CiAgICAgICAgIApAQCAtMjgzLDcgKzI4Myw3IEBAIGludCBIVE1MSW1hZ2VFbGVt
ZW50OjpoZWlnaHQoYm9vbCBpZ25vcmUKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAg
Ly8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUK
ICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWln
aHRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IGhlaWdo
dCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgICAgICBpZiAob2sp
CiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogICAgICAgICAKQEAgLTM0NCwxMiArMzQ0LDEy
IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojpib3JkZXIoKSBjb25zdAogCiB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldEJvcmRlcihpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGJvcmRl
ckF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZShib3JkZXJBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldEhlaWdodChpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdo
dEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiBpbnQgSFRNTEltYWdl
RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKQEAgLTM2MCw3ICszNjAsNyBAQCBpbnQgSFRNTEltYWdl
RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIc3Bh
Y2UoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojppc01hcCgp
IGNvbnN0CkBAIC00MTEsMTIgKzQxMSwxMiBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6dnNwYWNl
KCkgY29uc3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRWc3BhY2UoaW50IHZhbHVlKQog
ewotICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIo
dmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRXaWR0aChpbnQgdmFsdWUpCiB7
Ci0gICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZh
bHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUp
KTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6OngoKSBjb25zdApAQCAtNjkzLDcgKzY5Myw3
IEBAIGludCBIVE1MQXJlYUVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKIAogdm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
dGFiaW5kZXhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKKyAgICBz
ZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwogfQog
CiBTdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25zdApJbmRleDogaHRtbC9Gb3Jt
RGF0YUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0Zvcm1EYXRhTGlzdC5oCShyZXZpc2lvbiAx
MzQ4NykKKysrIGh0bWwvRm9ybURhdGFMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcgJmtleSwgY29u
c3QgRGVwcmVjYXRlZENTdHJpbmcgJnZhbHVlKQogICAgICAgICB7IGFwcGVuZFN0cmluZyhrZXku
ZGVwcmVjYXRlZFN0cmluZygpKTsgYXBwZW5kU3RyaW5nKHZhbHVlKTsgfQogICAgIHZvaWQgYXBw
ZW5kRGF0YShjb25zdCBTdHJpbmcgJmtleSwgaW50IHZhbHVlKQotICAgICAgICB7IGFwcGVuZFN0
cmluZyhrZXkuZGVwcmVjYXRlZFN0cmluZygpKTsgYXBwZW5kU3RyaW5nKERlcHJlY2F0ZWRTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOyB9CisgICAgICAgIHsgYXBwZW5kU3RyaW5nKGtleS5kZXByZWNh
dGVkU3RyaW5nKCkpOyBhcHBlbmRTdHJpbmcoU3RyaW5nOjpudW1iZXIodmFsdWUpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7IH0KICAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nICZrZXksIGNv
bnN0IFN0cmluZyAmZmlsZW5hbWUpOwogCiAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8Rm9ybURhdGFMaXN0SXRlbT4gYmVnaW4oKSBjb25zdApJbmRleDogaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzQ4NykKKysrIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNzQsMTIgKzEyNzQsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBbHQo
Y29uc3QgU3RyaQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgX21h
eExlbmd0aCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKF9tYXhMZW5ndGgpKTsKKyAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0
ciwgU3RyaW5nOjpudW1iZXIoX21heExlbmd0aCkpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFNpemUodW5zaWduZWQgX3NpemUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRy
LCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoX3NpemUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc2l6
ZUF0dHIsIFN0cmluZzo6bnVtYmVyKF9zaXplKSk7CiB9CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVt
ZW50OjpzcmMoKSBjb25zdApJbmRleDogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ4NykK
KysrIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCwx
MiArMjY4LDEyIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0QWNjZXNzS2V5KGMKIAog
dm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRDb2xzKGludCBjb2xzKQogewotICAgIHNldEF0
dHJpYnV0ZShjb2xzQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGNvbHMpKTsKKyAgICBz
ZXRBdHRyaWJ1dGUoY29sc0F0dHIsIFN0cmluZzo6bnVtYmVyKGNvbHMpKTsKIH0KIAogdm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpzZXRSb3dzKGludCByb3dzKQogewotICAgIHNldEF0dHJpYnV0
ZShyb3dzQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHJvd3MpKTsKKyAgICBzZXRBdHRy
aWJ1dGUocm93c0F0dHIsIFN0cmluZzo6bnVtYmVyKHJvd3MpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UKSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGh0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2V0TXVsdGlwbGUoYm9vbAogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpzZXRTaXplKGludCBzaXplKQogewotICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKHNpemUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0
cmluZzo6bnVtYmVyKHNpemUpKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBodG1s
L2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDE3ICsxNTAsMTQgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZAogCiAgICAgICAgIGlmIChldnQtPnRhcmdldCgpLT5oYXNUYWdOYW1lKGlt
Z1RhZykpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltZyA9IHN0YXRpY19jYXN0
PEhUTUxJbWFnZUVsZW1lbnQqPiggZXZ0LT50YXJnZXQoKSApOwotICAgICAgICAgICAgaWYgKCBp
bWcgJiYgaW1nLT5pc1NlcnZlck1hcCgpICkKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChpbWcgJiYgaW1nLT5pc1NlcnZlck1hcCgpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
UmVuZGVySW1hZ2UgKnIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSZW5kZXJJbWFnZSAqPihpbWct
PnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGlmKHIgJiYgZSkKLSAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKHIgJiYgZSkgewogICAgICAgICAgICAgICAgICAgICBp
bnQgYWJzeCwgYWJzeTsKICAgICAgICAgICAgICAgICAgICAgci0+YWJzb2x1dGVQb3NpdGlvbihh
YnN4LCBhYnN5KTsKICAgICAgICAgICAgICAgICAgICAgaW50IHgoZS0+Y2xpZW50WCgpIC0gYWJz
eCksIHkoZS0+Y2xpZW50WSgpIC0gYWJzeSk7Ci0gICAgICAgICAgICAgICAgICAgIHVybCArPSBE
ZXByZWNhdGVkU3RyaW5nKCI/JTEsJTIiKS5hcmcoIHggKS5hcmcoIHkgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVybCAr
PSBTdHJpbmcoKS5zcHJpbnRmKCI/JWQsJWQiLCB4LCB5KS5kZXByZWNhdGVkU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldnQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDMsNyAr
MzAwLDcgQEAgaW50IEhUTUxBbmNob3JFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAKIHZvaWQg
SFRNTEFuY2hvckVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkKIHsKLSAgICBzZXRB
dHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgp
KTsKKyAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRl
eCkpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkluZGV4
OiBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRN
TEdlbmVyaWNGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgaHRtbC9IVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDExICsyODEsMTAgQEAg
RGVwcmVjYXRlZFN0cmluZyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OgogICAgICAgICBhc3NlcnQo
c2VwMSA+PSAwKTsKICAgICAgICAgYXNzZXJ0KHNlcDIgPj0gMCk7CiAKLSAgICAgICAgRGVwcmVj
YXRlZFN0cmluZyBuYW1lQW5kVHlwZSA9IHN0YXRlLmxlZnQoc2VwMik7CisgICAgICAgIFN0cmlu
ZyBuYW1lQW5kVHlwZSA9IHN0YXRlLmxlZnQoc2VwMik7CiAgICAgICAgIGlmIChlbmNOYW1lLmxl
bmd0aCgpICsgdHlwZVN0ci5sZW5ndGgoKSArIDEgPT0gKHVuc2lnbmVkKXNlcDIKICAgICAgICAg
ICAgICYmIG5hbWVBbmRUeXBlLnN0YXJ0c1dpdGgoZW5jTmFtZSkKLSAgICAgICAgICAgICYmIG5h
bWVBbmRUeXBlLmVuZHNXaXRoKHR5cGVTdHIpKQotICAgICAgICB7CisgICAgICAgICAgICAmJiBu
YW1lQW5kVHlwZS5lbmRzV2l0aCh0eXBlU3RyKSkgewogICAgICAgICAgICAgc3RhdGVzLnJlbW92
ZShpdCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGUubWlkKHNlcDIrMSk7CiAgICAgICAgIH0K
QEAgLTMwMCw3ICsyOTksNyBAQCBpbnQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6dGFiSW5kZXgo
KSBjCiAKIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVl
KQogewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVt
YmVyKHZhbHVlKSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogaHRtbC9odG1sX2Js
b2NraW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHJldmlz
aW9uIDEzNDg3KQorKysgaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxIUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
CiAgICAgICAgIGlmIChzaXplIDw9IDEpCiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBTdHJpbmcoIjAiKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmlu
ZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSkpOworICAgICAgICAgICAgYWRkQ1NT
TGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgU3RyaW5nOjpudW1iZXIoc2l6ZS0yKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBpbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29u
c3QKIAogdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgoaW50IHdpZHRoKQogewotICAgIHNl
dEF0dHJpYnV0ZSh3aWR0aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOwor
ICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAK
IGJvb2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBjb25zdApJbmRleDogaHRtbC9odG1sX29iamVj
dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkocmV2aXNp
b24gMTM0ODcpCisrKyBodG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMDUsNyArMTAwNSw3IEBAIGludCBIVE1MT2JqZWN0RWxlbWVudDo6dGFiSW5kZXgoKSBjb25z
dAogCiB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCiB7
Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1i
ZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojp0eXBlKCkgY29u
c3QKSW5kZXg6IGh0bWwvaHRtbF9saXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1s
X2xpc3RpbXBsLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBodG1sL2h0bWxfbGlzdGltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50
OjpzZXRDb21wYWN0KGJvb2wgYgogCiB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGlu
dCBzdGFydCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIoc3RhcnQpKTsKKyAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51
bWJlcihzdGFydCkpOwogfQogCiBTdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0
CkBAIC0yMzYsNyArMjM2LDcgQEAgaW50IEhUTUxMSUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIAog
dm9pZCBIVE1MTElFbGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmli
dXRlKHZhbHVlQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0
QXR0cmlidXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpJbmRleDogaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgaHRtbC9odG1s
X3RhYmxlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw4ICszOTcsNyBAQCB2b2lkIEhU
TUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBib3JkZXI9MTsK
ICNlbmRpZgogICAgICAgICAgICAgbV9ub0JvcmRlciA9ICFib3JkZXI7Ci0gICAgICAgICAgICBT
dHJpbmcgdiA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciggYm9yZGVyICk7Ci0gICAgICAgICAg
ICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCB2ICk7CisgICAgICAg
ICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBTdHJpbmc6Om51
bWJlcihib3JkZXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGJnY29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tH
Uk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwpAQCAtMTE0Nyw3ICsxMTQ2LDcgQEAgdm9pZCBI
VE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2hPZmYoY29ucwogCiB2b2lkIEhUTUxUYWJsZUNlbGxF
bGVtZW50OjpzZXRDb2xTcGFuKGludCBuKQogewotICAgIHNldEF0dHJpYnV0ZShjb2xzcGFuQXR0
ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG4pKTsKKyAgICBzZXRBdHRyaWJ1dGUoY29sc3Bh
bkF0dHIsIFN0cmluZzo6bnVtYmVyKG4pKTsKIH0KIAogU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpoZWFkZXJzKCkgY29uc3QKQEAgLTExODIsNyArMTE4MSw3IEBAIHZvaWQgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OnNldE5vV3JhcChib28KIAogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6
c2V0Um93U3BhbihpbnQgbikKIHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihuKSk7CisgICAgc2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBT
dHJpbmc6Om51bWJlcihuKSk7CiB9CiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2Nv
cGUoKSBjb25zdApAQCAtMTI3OCw3ICsxMjc3LDcgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50
OjpzZXRDaE9mZihjb25zdAogCiB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFNwYW4oaW50
IG4pCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNwYW5BdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIobikpOworICAgIHNldEF0dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwog
fQogCiBTdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29uc3QKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTE1LDkgKzE1MTUsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZGlydHlMaW5lc0Zyb21DaGFuZ2VkCiAKICNpZm5kZWYgTkRFQlVHCiAKLURlcHJlY2F0ZWRTdHJp
bmcgUmVuZGVyT2JqZWN0OjppbmZvcm1hdGlvbigpIGNvbnN0CitTdHJpbmcgUmVuZGVyT2JqZWN0
OjppbmZvcm1hdGlvbigpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7CisgICAg
U3RyaW5nIHN0cjsKICAgICBRVGV4dFN0cmVhbSB0cygmc3RyKTsKICAgICB0cyA8PCByZW5kZXJO
YW1lKCkKICAgICAgICAgPDwgIigiIDw8IChzdHlsZSgpID8gc3R5bGUoKS0+cmVmQ291bnQoKSA6
IDApIDw8ICIpIgpAQCAtMTUzOCw3ICsxNTM4LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBSZW5kZXJP
YmplY3Q6OmluZm9ybWF0aQogICAgICAgICAgICAgdHMgPDwgImFuY2hvciAiOwogICAgICAgICBp
ZiAoZWxlbWVudCgpLT5mb2N1c2VkKCkpCiAgICAgICAgICAgICB0cyA8PCAiZm9jdXMgIjsKLSAg
ICAgICAgdHMgPDwgIiA8IiA8PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5kZXByZWNhdGVkU3Ry
aW5nKCkgPDwgIj4iOworICAgICAgICB0cyA8PCAiIDwiIDw8ICBlbGVtZW50KCktPmxvY2FsTmFt
ZSgpIDw8ICI+IjsKICAgICAgICAgdHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3Mo
KSA8PCAiLCIgPDwgd2lkdGgoKSA8PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIikiOwogICAgICAgICBp
ZiAoaXNUYWJsZUNlbGwoKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBj
ZWxsID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVDZWxsICo+KHRoaXMpOwpAQCAtMTU2
Myw4ICsxNTYzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmR1bXAoUVRleHRTdHJlYW0gKnN0cgog
ICAgICpzdHJlYW0gPDwgZW5kbDsKIAogICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENo
aWxkKCk7Ci0gICAgd2hpbGUoIGNoaWxkICE9IDAgKQotICAgIHsKKyAgICB3aGlsZSAoY2hpbGQp
IHsKICAgICAgICAgKnN0cmVhbSA8PCBpbmQgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiOiAi
OwogICAgICAgICBjaGlsZC0+ZHVtcChzdHJlYW0saW5kKyIgICIpOwogICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTM0ODcpCisr
KyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQs
NyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJPYmplY3QiOyB9CiAjaWYgIU5ERUJVRwotICAgIERl
cHJlY2F0ZWRTdHJpbmcgaW5mb3JtYXRpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgaW5mb3JtYXRp
b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChRVGV4dFN0cmVhbSAqc3RyZWFtLCBE
ZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlKCkgY29u
c3Q7CiAgICAgc3RhdGljIHZvaWQgc2hvd1RyZWUoY29uc3QgUmVuZGVyT2JqZWN0ICpybyk7Cklu
ZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9y
ZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDEzICs1MjcsMTMgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpjYWxjTWluTWF4V2lkdGgoKQogICAgIGNhc2UgREVDSU1BTF9MRUFESU5HX1pFUk86
CiAgICAgICAgIC8vICMjIyB1bnN1cHBvcnRlZCwgd2UgdXNlIGRlY2ltYWwgaW5zdGVhZAogICAg
IGNhc2UgTERFQ0lNQUw6Ci0gICAgICAgIG1faXRlbS5zcHJpbnRmKCAiJWQiLCBtX2xpc3RJdGVt
LT52YWx1ZSgpICk7CisgICAgICAgIG1faXRlbSA9IFN0cmluZygpLnNwcmludGYoIiVkIiwgbV9s
aXN0SXRlbS0+dmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIExPV0VSX1JPTUFOOgotICAgICAgICBtX2l0ZW0gPSB0b1JvbWFuKCBtX2xpc3RJdGVt
LT52YWx1ZSgpLCBmYWxzZSApOworICAgICAgICBtX2l0ZW0gPSB0b1JvbWFuKG1fbGlzdEl0ZW0t
PnZhbHVlKCksIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVUFBFUl9ST01BTjoK
LSAgICAgICAgbV9pdGVtID0gdG9Sb21hbiggbV9saXN0SXRlbS0+dmFsdWUoKSwgdHJ1ZSApOwor
ICAgICAgICBtX2l0ZW0gPSB0b1JvbWFuKG1fbGlzdEl0ZW0tPnZhbHVlKCksIHRydWUpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIExPV0VSX0dSRUVLOgogICAgICB7CkluZGV4OiByZW5kZXJp
bmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAJKHJldmlzaW9uIDEzNDg3KQorKysgcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZy
b21FbGVtZW50KCkKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKHByZWNpc2lvbiwgImZsb2F0
IikpCiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAKLSAgICBlbGVtZW50KCktPnNl
dFZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWwpKTsKKyAgICBlbGVtZW50KCktPnNl
dFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbCkpOwogCiAgICAgUVNsaWRlciogc2xpZGVyID0gKFFT
bGlkZXIqKXdpZGdldCgpOwogICAgICAKQEAgLTExMzgsNyArMTEzOCw3IEBAIHZvaWQgUmVuZGVy
U2xpZGVyOjp2YWx1ZUNoYW5nZWQoV2lkZ2V0KikKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNl
KHByZWNpc2lvbiwgImZsb2F0IikpCiAgICAgICAgIHZhbCA9IChpbnQpKHZhbCArIDAuNSk7CiAK
LSAgICBlbGVtZW50KCktPnNldFZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWwpKTsK
KyAgICBlbGVtZW50KCktPnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbCkpOwogICAgIAogICAg
IC8vIEZpcmUgdGhlICJpbnB1dCIgRE9NIGV2ZW50LgogICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hI
VE1MRXZlbnQoaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2UpOwpJbmRleDogZG9tL1Bvc2l0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGRv
bS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4OSwxMiArNjg5LDEyIEBAIHZvaWQg
UG9zaXRpb246OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmIKIHsKICAgICBTdHJpbmcgcmVzdWx0
OwogICAgIAotICAgIGlmIChpc051bGwoKSkgeworICAgIGlmIChpc051bGwoKSkKICAgICAgICAg
cmVzdWx0ID0gIjxudWxsPiI7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlIHsKICAgICAgICAgY2hh
ciBzWzEwMjRdOwogICAgICAgICByZXN1bHQgKz0gIm9mZnNldCAiOwotICAgICAgICByZXN1bHQg
Kz0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0ICs9
IFN0cmluZzo6bnVtYmVyKG1fb2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAg
ICAgICAgbV9ub2RlLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBzaXplb2YocykpOwogICAgICAgICBy
ZXN1bHQgKz0gczsKSW5kZXg6IGRvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBk
b20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgZG9tL1N0eWxlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsMTUgKzMyNiwxNiBAQCB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmFkZENTU0xlbmd0aChNYXBwZWRBCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0Nv
bG9yKE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJmMpCiB7CiAg
ICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIG5vIGNvbG9yIGdldHMgYXBwbGllZCBpbiBJRS4K
LSAgICBpZiAoICFjLmxlbmd0aCgpICkKKyAgICBpZiAoIWMubGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghYXR0ci0+ZGVjbCgpKSBjcmVhdGVNYXBwZWREZWNsKGF0dHIpOwor
ICAgIGlmICghYXR0ci0+ZGVjbCgpKQorICAgICAgICBjcmVhdGVNYXBwZWREZWNsKGF0dHIpOwog
ICAgIAotICAgIGlmIChhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjLCBmYWxzZSkgKQor
ICAgIGlmIChhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjLCBmYWxzZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBEZXByZWNhdGVkU3RyaW5nIGNvbG9yID0gYy5kZXByZWNhdGVk
U3RyaW5nKCk7CisgICAgU3RyaW5nIGNvbG9yID0gYy5jb3B5KCk7CiAgICAgLy8gbm90IHNvbWV0
aGluZyB0aGF0IGZpdHMgdGhlIHNwZWNzLgogICAgIAogICAgIC8vIHdlJ3JlIGVtdWxhdGluZyBJ
RXMgY29sb3IgcGFyc2VyIGhlcmUuIEl0IG1hcHMgdHJhbnNwYXJlbnQgdG8gYmxhY2ssIG90aGVy
d2lzZSBpdCB0cmllcyB0byBidWlsZCBhIHJnYiB2YWx1ZQpAQCAtMzUyLDMwICszNTMsMzAgQEAg
dm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihNYXBwZWRBdAogICAgIC8vIHVzZWQgYXMg
YSBub3JtYWxpemF0aW9uIHBvaW50IHRvIG5vcm1hbGl6ZSB0byB2YWx1ZXMgYmV0d2VlbiAwCiAg
ICAgLy8gYW5kIDI1NS4KICAgICAKLSAgICBpZiAoIGNvbG9yLmxvd2VyKCkgIT0gInRyYW5zcGFy
ZW50IiApIHsKLSAgICAgICAgaWYgKCBjb2xvclswXSA9PSAnIycgKQotICAgICAgICAgICAgY29s
b3IucmVtb3ZlKCAwLCAgMSApOworICAgIGlmIChjb2xvci5sb3dlcigpICE9ICJ0cmFuc3BhcmVu
dCIpIHsKKyAgICAgICAgaWYgKGNvbG9yWzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbG9yLnJl
bW92ZSgwLCAxKTsKICAgICAgICAgaW50IGJhc2ljTGVuZ3RoID0gKGNvbG9yLmxlbmd0aCgpICsg
MikgLyAzOwotICAgICAgICBpZiAoIGJhc2ljTGVuZ3RoID4gMSApIHsKKyAgICAgICAgaWYgKGJh
c2ljTGVuZ3RoID4gMSkgewogICAgICAgICAgICAgLy8gSUUgaWdub3JlcyBjb2xvcnMgd2l0aCB0
aHJlZSBkaWdpdHMgb3IgbGVzcwogICAgICAgICAgICAgaW50IGNvbG9yc1szXSA9IHsgMCwgMCwg
MCB9OwogICAgICAgICAgICAgaW50IGNvbXBvbmVudCA9IDA7CiAgICAgICAgICAgICBpbnQgcG9z
ID0gMDsKICAgICAgICAgICAgIGludCBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoLTE7Ci0gICAgICAg
ICAgICB3aGlsZSAoIGNvbXBvbmVudCA8IDMgKSB7CisgICAgICAgICAgICB3aGlsZSAoY29tcG9u
ZW50IDwgMykgewogICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmb3J3YXJkIGZvciBkaWdpdHMg
aW4gdGhlIHN0cmluZwogICAgICAgICAgICAgICAgIGludCBudW1EaWdpdHMgPSAwOwotICAgICAg
ICAgICAgICAgIHdoaWxlICggcG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdpdHMg
PCBiYXNpY0xlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGhleCA9IHRvSGV4KCBj
b2xvcltwb3NdICk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IChpbnQpY29sb3IubGVu
Z3RoKCkgJiYgbnVtRGlnaXRzIDwgYmFzaWNMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW50IGhleCA9IHRvSGV4KGNvbG9yW3Bvc10pOwogICAgICAgICAgICAgICAgICAgICBjb2xvcnNb
Y29tcG9uZW50XSA9IChjb2xvcnNbY29tcG9uZW50XSA8PCA0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCBoZXggPiAwICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGV4ID4gMCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gKz0gaGV4OwotICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4RGlnaXQgPSBrTWluKCBtYXhEaWdpdCwgbnVtRGlnaXRzICk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhEaWdpdCA9IGtNaW4obWF4RGlnaXQsIG51bURp
Z2l0cyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbnVtRGln
aXRzKys7CiAgICAgICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB3aGlsZSAoIG51bURpZ2l0cysrIDwgYmFzaWNMZW5ndGggKQorICAgICAg
ICAgICAgICAgIHdoaWxlIChudW1EaWdpdHMrKyA8IGJhc2ljTGVuZ3RoKQogICAgICAgICAgICAg
ICAgICAgICBjb2xvcnNbY29tcG9uZW50XSA8PD0gNDsKICAgICAgICAgICAgICAgICBjb21wb25l
bnQrKzsKICAgICAgICAgICAgIH0KQEAgLTM4NiwxMCArMzg3LDEwIEBAIHZvaWQgU3R5bGVkRWxl
bWVudDo6YWRkQ1NTQ29sb3IoTWFwcGVkQXQKICAgICAgICAgICAgIGNvbG9yc1swXSA+Pj0gNCpt
YXhEaWdpdDsKICAgICAgICAgICAgIGNvbG9yc1sxXSA+Pj0gNCptYXhEaWdpdDsKICAgICAgICAg
ICAgIGNvbG9yc1syXSA+Pj0gNCptYXhEaWdpdDsKLSAgICAgICAgICAgIC8vIGFzc2VydCggY29s
b3JzWzBdIDwgMHgxMDAgJiYgY29sb3JzWzFdIDwgMHgxMDAgJiYgY29sb3JzWzJdIDwgMHgxMDAg
KTsKKyAgICAgICAgICAgIC8vIGFzc2VydChjb2xvcnNbMF0gPCAweDEwMCAmJiBjb2xvcnNbMV0g
PCAweDEwMCAmJiBjb2xvcnNbMl0gPCAweDEwMCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGNvbG9yLnNwcmludGYoIiMlMDJ4JTAyeCUwMngiLCBjb2xvcnNbMF0sIGNvbG9yc1sxXSwgY29s
b3JzWzJdICk7Ci0gICAgICAgICAgICBpZiAoIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQs
IFN0cmluZyhjb2xvciksIGZhbHNlKSApCisgICAgICAgICAgICBjb2xvci5zcHJpbnRmKCIjJTAy
eCUwMnglMDJ4IiwgY29sb3JzWzBdLCBjb2xvcnNbMV0sIGNvbG9yc1syXSk7CisgICAgICAgICAg
ICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3IsIGZhbHNlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBkb20vUmFuZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgZG9tL1Jh
bmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5NiwxOCArMTI5NiwxNyBAQCB2b2lkIFJhbmdl
Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpidWZmCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBT
dHJpbmcgczsKICAgICAKLSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIgfHwgIW1fZW5kQ29udGFp
bmVyKSB7CisgICAgaWYgKCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENvbnRhaW5lcikKICAg
ICAgICAgcmVzdWx0ID0gIjxlbXB0eT4iOwotICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2hh
ciBzW0Zvcm1hdEJ1ZmZlclNpemVdOwogICAgICAgICByZXN1bHQgKz0gImZyb20gb2Zmc2V0ICI7
Ci0gICAgICAgIHJlc3VsdCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9zdGFydE9mZnNl
dCk7CisgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zmc2V0KTsKICAg
ICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKICAgICAgICAgbV9zdGFydENvbnRhaW5lci0+Zm9ybWF0
Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwog
ICAgICAgICByZXN1bHQgKz0gIiB0byBvZmZzZXQgIjsKLSAgICAgICAgcmVzdWx0ICs9IERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihtX2VuZE9mZnNldCk7CisgICAgICAgIHJlc3VsdCArPSBTdHJp
bmc6Om51bWJlcihtX2VuZE9mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7CiAgICAg
ICAgIG1fZW5kQ29udGFpbmVyLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXpl
KTsKICAgICAgICAgcmVzdWx0ICs9IHM7CkluZGV4OiBkb20veG1sX3Rva2VuaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZG9tL3htbF90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGRv
bS94bWxfdG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDE1ICs1MzYsMTUgQEAg
dm9pZCBYTUxUb2tlbml6ZXI6OmVycm9yKEVycm9yVHlwZSB0eXBlLAogCiAgICAgaWYgKHR5cGUg
PT0gZmF0YWwgfHwgKG1fZXJyb3JDb3VudCA8IG1heEVycm9ycyAmJiBtX2xhc3RFcnJvckxpbmUg
IT0gbGluZU51bWJlcigpICYmIG1fbGFzdEVycm9yQ29sdW1uICE9IGNvbHVtbk51bWJlcigpKSkg
ewogCi0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZm9ybWF0OworICAgICAgICBjb25zdCBjaGFy
KiBmb3JtYXQ7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSB3YXJu
aW5nOgotICAgICAgICAgICAgICAgIGZvcm1hdCA9IERlcHJlY2F0ZWRTdHJpbmcoIndhcm5pbmcg
b24gbGluZSAlMiBhdCBjb2x1bW4gJTM6ICUxIik7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0g
Indhcm5pbmcgb24gbGluZSAlZCBhdCBjb2x1bW4gJWQ6ICVzIjsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgZmF0YWw6CiAgICAgICAgICAgICAgICAgLy8gZmFsbCB0
aHJvdWdoCiAgICAgICAgICAgICBjYXNlIG5vbkZhdGFsOgotICAgICAgICAgICAgICAgIGZvcm1h
dCA9IERlcHJlY2F0ZWRTdHJpbmcoImVycm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIp
OworICAgICAgICAgICAgICAgIGZvcm1hdCA9ICJlcnJvciBvbiBsaW5lICVkIGF0IGNvbHVtbiAl
ZDogJXMiOwogICAgICAgICB9CiAKICNpZiBXSU4zMgpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQg
WE1MVG9rZW5pemVyOjplcnJvcihFcnJvclR5cGUgdHlwZSwKICAgICAgICAgY2hhciAqbTsKICAg
ICAgICAgdmFzcHJpbnRmKCZtLCBtZXNzYWdlLCBhcmdzKTsKICNlbmRpZgotICAgICAgICBtX2Vy
cm9yTWVzc2FnZXMgKz0gZm9ybWF0LmFyZyhtKS5hcmcobGluZU51bWJlcigpKS5hcmcoY29sdW1u
TnVtYmVyKCkpOworICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gU3RyaW5nKCkuc3ByaW50Zihm
b3JtYXQsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCksIG0pOwogI2lmICFXSU4zMgogICAg
ICAgICBmcmVlKG0pOwogI2VuZGlmCkluZGV4OiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24g
MTM0ODcpCisrKyBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTExLDkgKzUxMSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVG
b24KICAgICAgICAgICAgIGN1cnJlbnRGb250U2l6ZSA9IGNvbXB1dGVkRm9udFNpemUobm9kZSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBkZXNpcmVkRm9udFNp
emUpIHsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZGVzaXJlZEZvbnRTaXplU3RyaW5n
ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6ZSk7Ci0gICAgICAgICAg
ICBkZXNpcmVkRm9udFNpemVTdHJpbmcgKz0gInB4IjsKLSAgICAgICAgICAgIGlubGluZVN0eWxl
RGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRk9OVF9TSVpFLCBkZXNpcmVkRm9udFNpemVTdHJp
bmcsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wtPnNldFByb3Bl
cnR5KENTU19QUk9QX0ZPTlRfU0laRSwgU3RyaW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKSAr
ICJweCIsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW0s
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApIHsKSW5kZXg6IENoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDg3KQorKysgQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg4IEBACisyMDA2LTAzLTI3ICBFcmljIFNlaWRl
bCAgPGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgYSB3aG9sZSBidW5jaCBtb3JlIERlcHJlY2F0ZWRTdHJp
bmcgd2l0aCBTdHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW06Cisg
ICAgICAgICgtW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQgc2V0Q29sczpdKToKKyAgICAgICAgKC1b
RE9NSFRNTFRleHRBcmVhRWxlbWVudCBzZXRSb3dzOl0pOgorICAgICAgICAoLVtET01IVE1MT0xp
c3RFbGVtZW50IHNldFN0YXJ0Ol0pOgorICAgICAgICAoLVtET01IVE1MUHJlRWxlbWVudCBzZXRX
aWR0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTEltYWdlRWxlbWVudCBzZXRIZWlnaHQ6XSk6Cisg
ICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1lbnQgc2V0SHNwYWNlOl0pOgorICAgICAgICAoLVtE
T01IVE1MSW1hZ2VFbGVtZW50IHNldFZzcGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRNTEltYWdl
RWxlbWVudCBzZXRXaWR0aDpdKToKKyAgICAgICAgKC1bRE9NSFRNTE9iamVjdEVsZW1lbnQgc2V0
SHNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MT2JqZWN0RWxlbWVudCBzZXRUYWJJbmRleDpd
KToKKyAgICAgICAgKC1bRE9NSFRNTE9iamVjdEVsZW1lbnQgc2V0VnNwYWNlOl0pOgorICAgICAg
ICAoLVtET01IVE1MQXBwbGV0RWxlbWVudCBzZXRIc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhU
TUxBcHBsZXRFbGVtZW50IHNldFZzcGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRNTEFyZWFFbGVt
ZW50IHNldFRhYkluZGV4Ol0pOgorICAgICAgICAoLVtET01IVE1MVGFibGVDb2xFbGVtZW50IHNl
dFNwYW46XSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IHNldENvbFNwYW46
XSk6CisgICAgICAgICgtW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IHNldFJvd1NwYW46XSk6Cisg
ICAgICAgICgtW0RPTUhUTUxFbWJlZEVsZW1lbnQgc2V0SGVpZ2h0Ol0pOgorICAgICAgICAoLVtE
T01IVE1MRW1iZWRFbGVtZW50IHNldFdpZHRoOl0pOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyQXNTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvY3NzX3ZhbHVlaW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgICogY3NzL2Nz
c3BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9t
VmFsdWUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
b3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAgICAqIGRv
bS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFk
ZENTU0NvbG9yKToKKyAgICAgICAgKiBkb20veG1sX3Rva2VuaXplci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVycm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmREYXRhKToKKyAgICAgICAg
KiBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRN
YXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U2l6ZSk6
CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNl
dENvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Um93cyk6
CisgICAgICAgICogaHRtbC9odG1sX2Jhc2VpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvaHRt
bF9ibG9ja2ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEhSRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQ6OnNldFdp
ZHRoKToKKyAgICAgICAgKiBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEhzcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRWc3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFyZWFFbGVtZW50OjpzZXRUYWJJbmRleCk6CisgICAgICAgICogaHRtbC9odG1sX2lubGluZWlt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldFRhYklu
ZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxfbGlzdGltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExJ
RWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpzZXRUYWJJbmRleCk6CisgICAg
ICAgICogaHRtbC9odG1sX3RhYmxlaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVDZWxsRWxlbWVudDo6c2V0Um93U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVD
b2xFbGVtZW50OjpzZXRTcGFuKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19odG1sLmNwcDoK
KyAgICAgICAgKEtKUzo6SlNIVE1MRWxlbWVudDo6YW5jaG9yR2V0dGVyKToKKyAgICAgICAgKEtK
Uzo6SlNIVE1MRWxlbWVudDo6YXJlYUdldHRlcik6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2luZG93Ojppc1NhZmVTY3JpcHQpOgorICAgICAg
ICAoS0pTOjpMb2NhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgICoga3N2ZzIvY3Nz
L1NWR0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZH
UGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwOgorICAgICAgICAoU1ZHQW5nbGU6OnNldFZh
bHVlQXNTdHJpbmcpOgorICAgICAgICAoU1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdBbmdsZS5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDb2xvci5j
cHA6CisgICAgICAgIChTVkdDb2xvcjo6c2V0UkdCQ29sb3IpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdMZW5ndGguY3BwOgorICAgICAgICAoU1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKToK
KyAgICAgICAgKFNWR0xlbmd0aDo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0xlbmd0aC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWc6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0
aFNlZ0FyYy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6cGF0aFNlZ1R5
cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjQWJzOjp0b1N0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjpwYXRoU2VnVHlwZUFzTGV0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNSZWw6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0Nsb3NlUGF0aDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnQ2xvc2VQYXRoOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNBYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjp0b1N0cmluZyk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFi
czo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aFJlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6
OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6cGF0aFNlZ1R5cGVBc0xl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aFJlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvQWJzOjpwYXRoU2VnVHlwZUFzTGV0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9BYnM6OnRvU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9SZWw6OnBhdGhTZWdUeXBlQXNMZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6dG9TdHJpbmcpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6
OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
UmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6dG9TdHJpbmcpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnTW92ZXRvQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdNb3ZldG9BYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTZWdNb3ZldG9SZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFNlZ01vdmV0b1JlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdQb2x5RWxlbWVudDo6bm90aWZ5QXR0cmli
dXRlQ2hhbmdlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChTVkdTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdVc2VFbGVtZW50OjpjbG9zZVJl
bmRlcmVyKToKKyAgICAgICAgKiBrd3EvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChx
dW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMpOgorICAgICAgICAobm9kZVBvc2l0aW9uKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzdWJtaXRG
b3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkF0b21pY1N0cmluZzo6dG9JbnQpOgorICAgICAgICAqIHBsYXRmb3JtL0NvbG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpuYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Db2xv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNw
cDoKKyAgICAgICAgKEtVUkw6OnNldFBvcnQpOgorICAgICAgICAoS1VSTDo6cHJldHR5VVJMKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnNwcmludGYpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9LZXlF
dmVudE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JLZXlFdmVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfbGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpjYWxjTWluTWF4V2lk
dGgpOgorCiAyMDA2LTAzLTI3ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4OgpJbmRleDogY3NzL2Nzc3BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gY3NzL2Nzc3BhcnNlci5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysgY3NzL2Nzc3BhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDcsMTEgKzIxMDcsMTAgQEAgQ1NTUHJpbWl0aXZlVmFs
dWUgKkNTU1BhcnNlcjo6cGFyc2VDb2xvcgogQ1NTUHJpbWl0aXZlVmFsdWUgKkNTU1BhcnNlcjo6
cGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgUkdCQTMyIGMgPSBDb2xv
cjo6dHJhbnNwYXJlbnQ7Ci0gICAgaWYgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYKLSAgICAgICAgdmFsdWUtPmZWYWx1ZSA+PSAwLiAm
JiB2YWx1ZS0+ZlZhbHVlIDwgMTAwMDAwMC4pIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBz
dHI7CisgICAgaWYgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIgJiYgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZhbHVlIDwgMTAw
MDAwMC4pIHsKKyAgICAgICAgU3RyaW5nIHN0cjsKICAgICAgICAgc3RyLnNwcmludGYoIiUwNmQi
LCAoaW50KSh2YWx1ZS0+ZlZhbHVlKy41KSk7Ci0gICAgICAgIGlmICghQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKHN0ciwgYykpCisgICAgICAgIGlmICghQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHN0ci5k
ZXByZWNhdGVkU3RyaW5nKCksIGMpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNl
IGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SIHx8CiAg
ICAgICAgICAgICAgICAgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVO
VCB8fApJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3Nf
dmFsdWVpbXBsLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNiBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmdldFByCiAgICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJv
cGVydGllcywgMyApOwogICAgIH0KICAgICB9Ci0gICAgLy9rZERlYnVnKCkgPDwga19mdW5jaW5m
byA8PCAicHJvcGVydHkgbm90IGZvdW5kOiIgPDwgcHJvcGVydHlJRCA8PCBlbmRsOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIApAQCAtOTM4LDU1ICs5MzcsNTUgQEAgU3RyaW5nIENTU1ByaW1p
dGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgLy8gIyMjCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgotICAgICAgICAgICAgdGV4dCA9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSk7CisgICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiJSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAiZW0iOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJlbSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NfRVhTOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAiZXgiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUubnVtKSArICJleCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUFg6
Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJweCI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgInB4IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19DTToKLSAgICAg
ICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImNt
IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiY20i
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX01NOgotICAgICAgICAgICAg
dGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibW0iOworICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtbSI7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfSU46Ci0gICAgICAgICAgICB0ZXh0ID0g
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJpbiI7CisgICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImluIjsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENTU19QVDoKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0IjsKKyAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHQiOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJp
bmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOworICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwYyI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NfREVHOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJyYWQiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJyYWQiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJncmFkIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlciht
X3ZhbHVlLm51bSkgKyAiZ3JhZCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUubnVtKSArICJtcyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgIm1zIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19TOgot
ICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAicyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsg
InMiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0haOgotICAgICAgICAg
ICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOwor
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJoeiI7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfS0haOgotICAgICAgICAgICAgdGV4
dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKKyAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19ESU1FTlNJT046CiAgICAgICAgICAgICAv
LyAjIyMKQEAgLTEwMjEsMTEgKzEwMjAsMTEgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpj
c3NUZXh0KCkgY29ucwogICAgICAgICAgICAgICAgIHRleHQgPSAicmdiYSgiOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHRleHQgPSAicmdiKCI7Ci0gICAgICAgICAgICB0ZXh0
ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xvci5yZWQoKSkgKyAiLCAiOwotICAgICAg
ICAgICAgdGV4dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAi
LCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29sb3Iu
Ymx1ZSgpKTsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IucmVkKCkp
ICsgIiwgIjsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IuZ3JlZW4o
KSkgKyAiLCAiOworICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5ibHVl
KCkpOwogICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAg
ICAgIHRleHQgKz0gIiwgIiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcigoZmxvYXQpY29sb3Iu
YWxwaGEoKSAvIDB4RkYpOworICAgICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIFN0cmluZzo6
bnVtYmVyKChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7CiAgICAgICAgICAgICB0ZXh0ICs9
ICIpIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBjc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDEwICsyOTcsMTAgQEAgdm9p
ZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldENzcwogfQogCiAvLyBEaXNwbGF5IGlu
dGVnZXJzIGluIGludGVnZXIgZm9ybWF0IGluc3RlYWQgb2YgIjEuMCIuCi1zdGF0aWMgRGVwcmVj
YXRlZFN0cmluZyBudW1iZXJBc1N0cmluZyhkb3VibGUgbikKK3N0YXRpYyBTdHJpbmcgbnVtYmVy
QXNTdHJpbmcoZG91YmxlIG4pCiB7CiAgICAgbG9uZyBpID0gc3RhdGljX2Nhc3Q8bG9uZz4obik7
Ci0gICAgcmV0dXJuIGkgPT0gbiA/IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpKSA6IERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihuKTsKKyAgICByZXR1cm4gaSA9PSBuID8gU3RyaW5nOjpudW1i
ZXIoaSkgOiBTdHJpbmc6Om51bWJlcihuKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdApAQCAtMzkxLDEwICszOTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1ND
b21wdXRlZFN0eWxlRGVjCiAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KENTU19WQUxfU0VQQVJBVEUpOwogICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkc6CiAg
ICAgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZyhudW1iZXJBc1N0cmluZyhzdHls
ZS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSkgKyAKLSAgICAgICAgICAgICJweCAiICsgCi0g
ICAgICAgICAgICBudW1iZXJBc1N0cmluZyhzdHlsZS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCkp
ICsKLSAgICAgICAgICAgICJweCIpOworICAgICAgICBTdHJpbmcgc3RyaW5nKG51bWJlckFzU3Ry
aW5nKHN0eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygpKSArICJweCAiICsgbnVtYmVyQXNT
dHJpbmcoc3R5bGUtPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpKSArICJweCIpOwogICAgICAgICBy
ZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpOwogICAgIH0KICAgICBjYXNlIENTU19QUk9QX19LSFRNTF9CT1JERVJfSE9SSVpP
TlRBTF9TUEFDSU5HOgpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCShyZXZpc2lv
biAxMzQ4NykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fQ1VC
SUNfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRl
cigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJDIik7IH0KLSAgICAgICAgdmlydHVh
bCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMSgiQyAlMSAlMiAlMyAlNCAlNSAlNiIpLmFyZyhtX3gxKS5hcmcobV95
MSkuYXJnKG1feDIpLmFyZyhtX3kyKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkMiOyB9Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCku
c3ByaW50ZigiQyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDEsIG1f
eTEsIG1feDIsIG1feTIsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUp
OwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpAQCAtNzIsOCArNzIsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKCk7CiAK
ICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJ
bXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwo
ImMiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJjICUxICUyICUzICU0ICU1
ICU2IikuYXJnKG1feDEpLmFyZyhtX3kxKS5hcmcobV94MikuYXJnKG1feTIpLmFyZyhtX3gpLmFy
ZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiAiYyI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJjICUuNmxnICUuNmxnICUuNmxnICUuNmxn
ICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdBbmds
ZS5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsOSArODYsOSBAQCBmbG9hdCBTVkdBbmdsZTo6dmFsdWVJblNwZWNpZmll
ZFVuaXRzKCkgCiAgICAgcmV0dXJuIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzOwogfQogCi12b2lk
IFNWR0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcpCit2
b2lkIFNWR0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBt
X3ZhbHVlQXNTdHJpbmcgPSBTdHJpbmcodmFsdWVBc1N0cmluZyk7CisgICAgbV92YWx1ZUFzU3Ry
aW5nID0gczsKIAogICAgIGJvb2wgYk9LOwogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0g
bV92YWx1ZUFzU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgmYk9LKTsKQEAgLTEw
Niw5ICsxMDYsOSBAQCB2b2lkIFNWR0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltCiAg
ICAgY2FsY3VsYXRlKCk7CiB9CiAKLVN0cmluZ0ltcGwgKlNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5n
KCkgY29uc3QKK1N0cmluZyBTVkdBbmdsZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAg
bV92YWx1ZUFzU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNp
ZmllZFVuaXRzKTsKKyAgICBtX3ZhbHVlQXNTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
SW5TcGVjaWZpZWRVbml0cyk7CiAKICAgICBzd2l0Y2gobV91bml0VHlwZSkgewogICAgICAgICBj
YXNlIFNWR19BTkdMRVRZUEVfVU5TUEVDSUZJRUQ6CkBAIC0xMjMsNyArMTIzLDcgQEAgU3RyaW5n
SW1wbCAqU1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcoKSBjbwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIAotICAgIHJldHVybiBtX3ZhbHVlQXNTdHJpbmcuaW1wbCgpOworICAgIHJldHVy
biBtX3ZhbHVlQXNTdHJpbmc7CiB9CiAKIHZvaWQgU1ZHQW5nbGU6Om5ld1ZhbHVlU3BlY2lmaWVk
VW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0
cykKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uaAkocmV2aXNpb24gMTM0ODcpCisrKyBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0xpbmV0by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9BYnMoKTsKIAog
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1
cm4gUEFUSFNFR19MSU5FVE9fQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJMIik7IH0K
LSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiTCAlMSAlMiIpLmFyZyhtX3gpLmFyZyht
X3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25z
dCB7IHJldHVybiAiTCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJMICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9
CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7
CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNW
R1BhdGhTZWdMaW5ldG9SZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBh
dGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fUkVMOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJsIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
bCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAibCI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJsICUu
NmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAg
ICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWwuaAkocmV2aXNpb24gMTM0ODcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicygp
OwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7
IHJldHVybiBQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUzsgfQotICAgICAgICB2aXJ0dWFs
IFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3Ry
aW5nSW1wbCgiSCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIkggJTEiKS5h
cmcobV94KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkg
Y29uc3QgeyByZXR1cm4gIkgiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiSCAlLjZsZyIsIG1feCk7IH0KIAogICAg
ICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTUy
LDggKzUyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0
IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9S
RUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkg
Y29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoImgiKTsgfQotICAgICAgICB2aXJ0dWFsIERl
cHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5n
Ojpmcm9tTGF0aW4xKCJoICUxIikuYXJnKG1feCk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJoIjsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoImgg
JS42bGciLCBtX3gpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRv
dWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBrc3ZnMi9z
dmcvU1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEzICsxMDksMTIgQEAgZmxv
YXQgU1ZHTGVuZ3RoOjp2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKQogICAgIHJldHVybiBtX3ZhbHVl
SW5TcGVjaWZpZWRVbml0czsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKIAotdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1w
bCogcykKK3ZvaWQgU1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgcykK
IHsKLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZyhzKTsKLSAgICBpZih2YWx1ZUFzU3RyaW5nLmlz
RW1wdHkoKSkKKyAgICBpZihzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVw
cmVjYXRlZFN0cmluZyB2YWx1ZUFzUVN0cmluZyA9IHZhbHVlQXNTdHJpbmcuZGVwcmVjYXRlZFN0
cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgdmFsdWVBc1FTdHJpbmcgPSBzLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKIAogICAgIGRvdWJsZSBjb252ZXJ0ZWROdW1iZXIgPSAwOwogICAgIGNvbnN0
IGNoYXIgKnN0YXJ0ID0gdmFsdWVBc1FTdHJpbmcubGF0aW4xKCk7CkBAIC0xMjMsMjcgKzEyMiwy
NiBAQCB2b2lkIFNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJCiAgICAgbV92YWx1
ZUluU3BlY2lmaWVkVW5pdHMgPSBjb252ZXJ0ZWROdW1iZXI7CiAKICAgICB1bnNpZ25lZCBpbnQg
ZGlmZiA9IGVuZCAtIHN0YXJ0OwotICAgIGlmKGRpZmYgPCB2YWx1ZUFzUVN0cmluZy5sZW5ndGgo
KSkKLSAgICB7Ci0gICAgICAgIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NW
R19MRU5HVEhUWVBFX1BYXSkpCisgICAgaWYgKGRpZmYgPCB2YWx1ZUFzUVN0cmluZy5sZW5ndGgo
KSkgeworICAgICAgICBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9QWF0p
KQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX1BYOwotICAgICAgICBl
bHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0NN
XSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVf
Q01dKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9DTTsKLSAgICAg
ICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQ
RV9QQ10pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhU
WVBFX1BDXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfUEM7Ci0g
ICAgICAgIGVsc2UgaWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdU
SFRZUEVfTU1dKSkKKyAgICAgICAgZWxzZSBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVO
R1RIVFlQRV9NTV0pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX01N
OwotICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19M
RU5HVEhUWVBFX0lOXSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZH
X0xFTkdUSFRZUEVfSU5dKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQ
RV9JTjsKLSAgICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4dFtT
VkdfTEVOR1RIVFlQRV9QVF0pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0
W1NWR19MRU5HVEhUWVBFX1BUXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdU
SFRZUEVfUFQ7Ci0gICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRU
ZXh0W1NWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0VdKSkKKyAgICAgICAgIGVsc2UgaWYgKHMuZW5k
c1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRV0pKQogICAgICAgICAgICAg
bV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0U7Ci0gICAgICAgIGVsc2UgaWYo
dmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRU1TXSkpCisg
ICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRU1TXSkp
CiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfRU1TOwotICAgICAgICBl
bHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0VY
U10pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBF
X0VYU10pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX0VYUzsKLSAg
ICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIGVsc2UgaWYg
KHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX05V
TUJFUjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhU
WVBFX1VOS05PV047CkBAIC0xNTQsOSArMTUyLDkgQEAgdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVl
QXNTdHJpbmcoU3RyaW5nSQogICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAKLVN0cmluZ0ltcGwgKlNW
R0xlbmd0aDo6dmFsdWVBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgU1ZHTGVuZ3RoOjp2YWx1ZUFz
U3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKSArIFVuaXRUZXh0W21fdW5pdFR5
cGVdKTsKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMp
ICsgVW5pdFRleHRbbV91bml0VHlwZV07CiB9CiAKIHZvaWQgU1ZHTGVuZ3RoOjpuZXdWYWx1ZVNw
ZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lm
aWVkVW5pdHMpCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgJ
KHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKCk7CiAKICAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3Ry
aW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJ
bXBsKCJTIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiUyAlMSAlMiAlMyAl
NCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmly
dHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJTIjsgfQor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygp
LnNwcmludGYoIlMgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gyLCBtX3kyLCBtX3gsIG1f
eSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBj
b25zdDsKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCgpOwogCiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZF
VE9fQ1VCSUNfU01PT1RIX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhT
ZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgicyIpOyB9Ci0g
ICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoInMgJTEgJTIgJTMgJTQiKS5hcmcobV94Miku
YXJnKG1feTIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAicyI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJzICUu
NmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CiAKICAgICAg
ICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAkocmV2aXNpb24gMTM0ODcpCisrKyBr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElD
X0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIo
KSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiUSIpOyB9Ci0gICAgICAgIHZpcnR1YWwg
RGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEoIlEgJTEgJTIgJTMgJTQiKS5hcmcobV94MSkuYXJnKG1feTEpLmFyZyht
X3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0
ZXIoKSBjb25zdCB7IHJldHVybiAiUSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJRICUuNmxnICUuNmxnICUuNmxn
ICUuNmxnIiwgbV94MSwgbV95MSwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRv
dWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC02NCw4ICs2NCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
UmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOyB9Ci0gICAgICAgIHZp
cnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5l
dyBTdHJpbmdJbXBsKCJxIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgicSAl
MSAlMiAlMyAlNCIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
ICJxIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZygpLnNwcmludGYoInEgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gxLCBtX3kx
LCBtX3gsIG1feSk7IH0KICAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRv
dWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ4
NykKKysrIGtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OmV4ZWN1dGVTY3JpcHQoRG9jCiAg
ICAgICAgICAgICBzdmdEb2N1bWVudC0+ZGlzcGF0Y2hSZWN1cnNpdmVFdmVudChldmVudC5nZXQo
KSwgc3ZnRG9jdW1lbnQtPmxhc3RDaGlsZCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGtkRGVi
dWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUgIiA8PCAo
bGluZW5vICE9IC0xID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGxpbmVubykgOiBEZXByZWNh
dGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC0+dG9TdHJpbmco
ZXhlYykuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CisgICAgICAgIGtkRGVidWcoKSA8PCAi
W1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxpbmUgIiA8PCAobGluZW5vICE9
IC0xID8gU3RyaW5nOjpudW1iZXIobGluZW5vKSA6IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoIk4vQSIpKSAgPDwgIiAiIDw8IGV4VmFsLT50b1N0cmluZyhleGVjKS5kZXByZWNhdGVkU3Ry
aW5nKCkgPDwgZW5kbDsKICAgICB9CiAgICAgZWxzZSBpZihjb21wLmNvbXBsVHlwZSgpID09IEtK
Uzo6UmV0dXJuVmFsdWUpCiAgICAgICAgIGtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRd
IFJldHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGVjbWFFbmdpbmUtPmds
b2JhbEV4ZWMoKSkuZGVwcmVjYXRlZFN0cmluZygpIDw8IGVuZGw7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0FyYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmgJ
KHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFs
IH5TVkdQYXRoU2VnQXJjQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBw
YXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQVJDX0FCUzsgfQotICAgICAgICB2
aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBu
ZXcgU3RyaW5nSW1wbCgiQSIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0
b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIkEg
JTEgJTIgJTMgJTQgJTUgJTYgJTciKS5hcmcobV9yMSkuYXJnKG1fcjIpLmFyZyhtX2FuZ2xlKS5h
cmcobV9sYXJnZUFyY0ZsYWcpLmFyZyhtX3N3ZWVwRmxhZykuYXJnKG1feCkuYXJnKG1feSk7IH0K
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0
dXJuICJBIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIFN0cmluZygpLnNwcmludGYoIkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42
bGciLCBtX3IxLCBtX3IyLCBtX2FuZ2xlLCBtX2xhcmdlQXJjRmxhZywgbV9zd2VlcEZsYWcsIG1f
eCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUgeCk7CiAgICAgICAgIGRvdWJs
ZSB4KCkgY29uc3Q7CkBAIC03Nyw4ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdBcmNSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19BUkNfUkVMOyB9Ci0g
ICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsg
cmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJhIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVk
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxh
dGluMSgiYSAlMSAlMiAlMyAlNCAlNSAlNiAlNyIpLmFyZyhtX3IxKS5hcmcobV9yMikuYXJnKG1f
YW5nbGUpLmFyZyhtX2xhcmdlQXJjRmxhZykuYXJnKG1fc3dlZXBGbGFnKS5hcmcobV94KS5hcmco
bV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29u
c3QgeyByZXR1cm4gImEiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiYSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAl
LjZsZyAlLjZsZyIsIG1fcjEsIG1fcjIsIG1fYW5nbGUsIG1fbGFyZ2VBcmNGbGFnLCBtX3N3ZWVw
RmxhZywgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSB4KTsKICAgICAg
ICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaAkocmV2aXNpb24gMTM0
ODcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhT
ZWdNb3ZldG9BYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdU
eXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19NT1ZFVE9fQUJTOyB9Ci0gICAgICAgIHZpcnR1
YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBT
dHJpbmdJbXBsKCJNIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiTSAlMSAl
MiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiTSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJNICUuNmxnICUu
NmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAg
IGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdNb3ZldG9SZWwoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19NT1ZF
VE9fUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRl
cigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJtIik7IH0KLSAgICAgICAgdmlydHVh
bCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMSgibSAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAibSI7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJp
bmcoKS5zcHJpbnRmKCJtICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9p
ZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ2xvc2VQYXRoLmgJKHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdD
bG9zZVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ2xvc2VQYXRoKCk7CiAKICAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhT
RUdfQ0xPU0VQQVRIOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVB
c0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJaIik7IH0KLSAgICAgICAg
dmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIloiOyB9
CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiAiWiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiWiI7IH0KICAgICB9OwogfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gMTM0ODcpCisrKyBr
c3ZnMi9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlSW5T
cGVjaWZpZWRVbml0cyk7CiAKLSAgICAgICAgU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZygpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFsdWVBc1N0
cmluZyk7CisgICAgICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgICAgICB2b2lkIG5ld1Zh
bHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5T
cGVjaWZpZWRVbml0cyk7CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5z
aWduZWQgc2hvcnQgdW5pdFR5cGUpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzQ4NykKKysrIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDE1ICs1NCwxNCBAQCB2b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikgewotICAgICAgICBpZih2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkuZW5kc1dpdGgoIiUiKSkKKyAgICAgICAgaWYodmFsdWUuZW5kc1dp
dGgoIiUiKSkKICAgICAgICAgICAgIG9mZnNldCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS5sZWZ0KHZhbHVlLmxlbmd0aCgpIC0gMSkudG9Eb3VibGUoKSAvIDEwMC4pOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIFNWR1N0eWxl
ZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogCi0gICAgaWYoIW93bmVyRG9j
dW1lbnQoKS0+cGFyc2luZygpICYmIGF0dGFjaGVkKCkpCi0gICAgeworICAgIGlmICghb3duZXJE
b2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgYXR0YWNoZWQoKSkgewogICAgICAgICByZWNhbGNTdHls
ZShGb3JjZSk7CiAgICAgICAgIAogICAgICAgICBTVkdTdHlsZWRFbGVtZW50ICpwYXJlbnRTdHls
ZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50ICo+KHBhcmVudE5vZGUoKSk7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDb2xv
ci5jcHAJKHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE4LDQzICsyMTgsMzggQEAgdm9pZCBTVkdDb2xvcjo6c2V0UkdCQ29sb3Io
U3RyaW5nSW1wbCAqcgogewogICAgIG1fcmdiQ29sb3IgPSByZ2JDb2xvcjsKIAotICAgIGlmKG1f
cmdiQ29sb3IuaXNOdWxsKCkpCisgICAgaWYgKG1fcmdiQ29sb3IuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFyc2UgPSBtX3JnYkNvbG9yLmRlcHJl
Y2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICBpZihwYXJzZS5zdGFydHNXaXRo
KCJyZ2IoIikpCi0gICAgeworICAgIGlmIChwYXJzZS5zdGFydHNXaXRoKCJyZ2IoIikpIHsKICAg
ICAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgY29sb3JzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6
OnNwbGl0KCcsJywgcGFyc2UpOwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHIgPSBjb2xvcnNb
MF0ucmlnaHQoKGNvbG9yc1swXS5sZW5ndGgoKSAtIDQpKTsKICAgICAgICAgRGVwcmVjYXRlZFN0
cmluZyBnID0gY29sb3JzWzFdOwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGIgPSBjb2xvcnNb
Ml0ubGVmdCgoY29sb3JzWzJdLmxlbmd0aCgpIC0gMSkpOwogICAgIAotICAgICAgICBpZihyLmNv
bnRhaW5zKCIlIikpIHsKKyAgICAgICAgaWYgKHIuY29udGFpbnMoIiUiKSkgewogICAgICAgICAg
ICAgciA9IHIubGVmdChyLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICByID0gRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKGludCgoZG91YmxlKDI1NSAqIHIudG9Eb3VibGUoKSkgLyAxMDAuMCkp
KTsKKyAgICAgICAgICAgIHIgPSBTdHJpbmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUgKiByLnRv
RG91YmxlKCkpIC8gMTAwLjApKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYoZy5jb250YWlucygiJSIpKQotICAgICAgICB7CisgICAgICAgIGlmIChnLmNvbnRh
aW5zKCIlIikpIHsKICAgICAgICAgICAgIGcgPSBnLmxlZnQoZy5sZW5ndGgoKSAtIDEpOwotICAg
ICAgICAgICAgZyA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUgKiBn
LnRvRG91YmxlKCkpIC8gMTAwLjApKSk7CisgICAgICAgICAgICBnID0gU3RyaW5nOjpudW1iZXIo
aW50KChkb3VibGUoMjU1ICogZy50b0RvdWJsZSgpKSAvIDEwMC4wKSkpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBpZihiLmNvbnRhaW5zKCIlIikpCi0gICAg
ICAgIHsKKyAgICAgICAgaWYgKGIuY29udGFpbnMoIiUiKSkgewogICAgICAgICAgICAgYiA9IGIu
bGVmdChiLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBiID0gRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKGludCgoZG91YmxlKDI1NSAqIGIudG9Eb3VibGUoKSkgLyAxMDAuMCkpKTsKKyAgICAg
ICAgICAgIGIgPSBTdHJpbmc6Om51bWJlcihpbnQoKGRvdWJsZSgyNTUgKiBiLnRvRG91YmxlKCkp
IC8gMTAwLjApKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB9CiAKICAgICAgICAgbV9x
Q29sb3IgPSBDb2xvcihyLnRvSW50KCksIGcudG9JbnQoKSwgYi50b0ludCgpKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKKyAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgY29sb3JOYW1lID0g
bV9yZ2JDb2xvci5sb3dlcigpOwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG5hbWUgPSBjb2xv
ck5hbWUuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNvbG9yTmFt
ZTsKIC8vICAgICAgICBpbnQgY29sID0gV2ViQ29yZTo6Z2V0VmFsdWVJRChuYW1lLmFzY2lpKCks
IG5hbWUubGVuZ3RoKCkpOwogLy8gICAgICAgIGlmKGNvbCA9PSAwKQotICAgICAgICAgICAgbV9x
Q29sb3IgPSBDb2xvcihuYW1lKTsKKyAgICAgICAgICAgIG1fcUNvbG9yID0gQ29sb3IobmFtZS5k
ZXByZWNhdGVkU3RyaW5nKCkpOwogLy8gICAgICAgIGVsc2UKIC8vICAgICAgICAgICAgbV9xQ29s
b3IgPSBjbWFwW2NvbCAtIFNWR0NTU19WQUxfQUxJQ0VCTFVFXTsKICAgICB9CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHQW5nbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5nbGUuaAkocmV2
aXNpb24gMTM0ODcpCisrKyBrc3ZnMi9zdmcvU1ZHQW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2b2lkIHNldFZhbHVlSW5T
cGVjaWZpZWRVbml0cyhmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogICAgICAgICBmbG9h
dCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldFZhbHVl
QXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZyk7Ci0gICAgICAgIFN0cmluZ0ltcGwg
KnZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworICAgICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgbmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSwgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgdm9pZCBjb252ZXJ0VG9T
cGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmgJKHJldmlz
aW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNyBAQAogI2lmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTaGFyZWQuaCIKLSNp
bmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2lu
Y2x1ZGUgImtzdmcuaCIKIApAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAg
ICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfVU5LTk9XTjsgfQotICAg
ICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBuZXcgU3RyaW5nSW1wbCgiIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MSgiIik7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuICIiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gIiI7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCAqbV9jb250ZXh0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzQ4NykKKysrIGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdQb2x5RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbgog
ICAgIGludCBsZW4gPSBwb2ludHMoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgU1ZHUG9pbnQgKnAgPSBwb2ludHMoKS0+Z2V0
SXRlbShpKTsKLSAgICAgICAgX3BvaW50cyArPSBEZXByZWNhdGVkU3RyaW5nKCIlMSAlMiAiKS5h
cmcocC0+eCgpKS5hcmcocC0+eSgpKTsKKyAgICAgICAgX3BvaW50cyArPSBTdHJpbmcoKS5zcHJp
bnRmKCIlLjZsZyAlLjZsZyAiLCBwLT54KCksIHAtPnkoKSk7CiAgICAgfQogCiAgICAgU3RyaW5n
IHAoInBvaW50cyIpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoLmgJKHJldmlzaW9uIDEzNDg3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdU
eXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJT
OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJUIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXBy
ZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMSgiVCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiVCI7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5z
cHJpbnRmKCJUICUuNmxnICUuNmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRY
KGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JF
TDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgidCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVw
cmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6
OmZyb21MYXRpbjEoInQgJTEgJTIiKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gInQiOyB9Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCku
c3ByaW50ZigidCAlLjZsZyAlLjZsZyIsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0
WChkb3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRo
U2VnTGluZXRvVmVydGljYWwuaAkocmV2aXNpb24gMTM0ODcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbH5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29u
c3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOyB9Ci0gICAgICAgIHZpcnR1
YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBT
dHJpbmdJbXBsKCJWIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiViAlMSIp
LmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIo
KSBjb25zdCB7IHJldHVybiAiViI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmco
KSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJWICUuNmxnIiwgbV95KTsgfQogCiAg
ICAgICAgIHZvaWQgc2V0WShkb3VibGUpOwogICAgICAgICBkb3VibGUgeSgpIGNvbnN0OwpAQCAt
NTIsOCArNTIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRo
U2VnTGluZXRvVmVydGljYWxSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0
IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVM
OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJ2Iik7IH0KLSAgICAgICAgdmlydHVhbCBEZXBy
ZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMSgidiAlMSIpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAidiI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJ2ICUu
NmxnIiwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WShkb3VibGUpOwogICAgICAgICBkb3Vi
bGUgeSgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBr
c3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxOCArMTEx
LDE3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiAgICAgZmxvYXQgX3gg
PSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
ICAgICBmbG9hdCBfdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2ggPSBoZWlnaHQo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIAotICAgIFN0cmluZyB3U3RyaW5nID0gRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKF93KTsKLSAgICBTdHJpbmcgaFN0cmluZyA9IERlcHJlY2F0ZWRT
dHJpbmc6Om51bWJlcihfaCk7CisgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihf
dyk7CisgICAgU3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7CiAgICAgCiAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHRyYW5zID0gRGVwcmVjYXRl
ZFN0cmluZzo6ZnJvbUxhdGluMSgidHJhbnNsYXRlKCUxLCAlMikiKS5hcmcoX3gpLmFyZyhfeSk7
Ci0gICAgaWYodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1ib2xUYWcpKQotICAgIHsK
KyAgICBTdHJpbmcgdHJhbnMgPSBTdHJpbmcoKS5zcHJpbnRmKCJ0cmFuc2xhdGUoJWYsICVmKSIs
IF94LCBfeSk7CisgICAgaWYodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzeW1ib2xUYWcp
KSB7CiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBkdW1teSA9IG5ldyBTVkdTVkdFbGVtZW50
KFNWR05hbWVzOjpzdmdUYWcsIGdldERvY3VtZW50KCkpOwotICAgICAgICBpZihfdyA+IDApCi0g
ICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIsIHdTdHJp
bmcuaW1wbCgpKTsKLSAgICAgICAgaWYoX2ggPiAwKQotICAgICAgICAgICAgZHVtbXktPnNldEF0
dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZy5pbXBsKCkpOworICAgICAgICBp
ZiAoX3cgPiAwKQorICAgICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lk
dGhBdHRyLCB3U3RyaW5nKTsKKyAgICAgICAgaWYgKF9oID4gMCkKKyAgICAgICAgICAgIGR1bW15
LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcpOwogICAgICAgICAK
ICAgICAgICAgU1ZHU3ltYm9sRWxlbWVudCAqc3ltYm9sID0gc3RhdGljX2Nhc3Q8U1ZHU3ltYm9s
RWxlbWVudCAqPih0YXJnZXQpOwogICAgICAgICBpZiAoc3ltYm9sLT5oYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKSkgewpAQCAtMTMyLDI4ICsxMzEsMjQgQEAgdm9pZCBTVkdVc2VF
bGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKICAgICAgICAgdGFyZ2V0LT5jbG9uZUNoaWxkTm9kZXMo
ZHVtbXkuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBkdW1teTIgPSBuZXcg
U1ZHRHVtbXlFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBnZXREb2N1bWVudCgpKTsKLSAgICAgICAg
ZHVtbXkyLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIFN0cmluZyh0cmFu
cykpOworICAgICAgICBkdW1teTItPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0
ciwgdHJhbnMpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kQ2hpbGQoZHVtbXkyLCBlYyk7CiAg
ICAgICAgIGR1bW15Mi0+YXBwZW5kQ2hpbGQoZHVtbXksIGVjKTsKLSAgICB9Ci0gICAgZWxzZSBp
Zih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCi0gICAgeworICAgIH0gZWxz
ZSBpZih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKICAgICAgICAgUmVm
UHRyPFNWR0R1bW15RWxlbWVudD4gZHVtbXkgPSBuZXcgU1ZHRHVtbXlFbGVtZW50KFNWR05hbWVz
OjpnVGFnLCBnZXREb2N1bWVudCgpKTsKLSAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdO
YW1lczo6dHJhbnNmb3JtQXR0ciwgU3RyaW5nKHRyYW5zKSk7CisgICAgICAgIGR1bW15LT5zZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5zKTsKICAgICAgICAgCiAgICAg
ICAgIFJlZlB0cjxTVkdFbGVtZW50PiByb290ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdFbGVt
ZW50Pih0YXJnZXQtPmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgIGlmKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgICAgIHJvb3QtPnNldEF0dHJpYnV0ZShTVkdO
YW1lczo6d2lkdGhBdHRyLCB3U3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICByb290LT5zZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgaWYoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAgICAg
IHJvb3QtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZy5pbXBsKCkp
OworICAgICAgICAgICAgcm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyLCBo
U3RyaW5nKTsKICAgICAgICAgICAgIAogICAgICAgICBhcHBlbmRDaGlsZChkdW1teSwgZWMpOwog
ICAgICAgICBkdW1teS0+YXBwZW5kQ2hpbGQocm9vdC5yZWxlYXNlKCksIGVjKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKKyAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8U1ZHRHVtbXlFbGVt
ZW50PiBkdW1teSA9IG5ldyBTVkdEdW1teUVsZW1lbnQoU1ZHTmFtZXM6OmdUYWcsIGdldERvY3Vt
ZW50KCkpOwogICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1B
dHRyLCB0cmFucyk7CiAgICAgICAgIApJbmRleDoga3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDEzNDg3
KQorKysga3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw5
ICszNDUsOSBAQCBDU1NWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKICAgICBLRE9N
Q1NTVmFsdWUgKnZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYoIXN0cmljdCAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJgogICAgICAg
IHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOworICAgICAgICBTdHJpbmcgc3RyOwogICAgICAgICBz
dHIuc3ByaW50ZigiJTA2ZCIsIChpbnQpKHZhbHVlLT5mVmFsdWUrLjUpKTsKLSAgICAgICAgcmV0
dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBuZXcgU3RyaW5nSW1w
bChzdHIpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNP
TE9SLCAwLCBzdHIuaW1wbCgpKTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpIHsKICAgICAgICAgU3RyaW5nIHN0ciA9ICIjIiAr
IGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsKICAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChT
VkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBzdHIuaW1wbCgpKTsKQEAgLTM3OSw5ICszNzksOCBA
QCBDU1NWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKICAgICAgICAgciA9IGtNYXgo
MCwga01pbigyNTUsIHIpKTsKICAgICAgICAgZyA9IGtNYXgoMCwga01pbigyNTUsIGcpKTsKICAg
ICAgICAgYiA9IGtNYXgoMCwga01pbigyNTUsIGIpKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmlu
ZyBzdHI7Ci0gICAgICAgIHN0ci5zcHJpbnRmKCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKTsK
LSAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBu
ZXcgU3RyaW5nSW1wbChzdHIpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBuZXcgU1ZHUGFp
bnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgMCwgU3RyaW5nKCkuc3ByaW50ZigicmdiKCVkLCAl
ZCwgJWQpIiwgciwgZywgYikuaW1wbCgpKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1
cm4gMDsKQEAgLTM5MiwxMiArMzkxLDkgQEAgQ1NTVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdQ
YWludCgpCiBDU1NWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKCkKIHsKICAgICBLRE9N
Q1NTVmFsdWUgKnZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYoIXN0cmljdCAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJgotICAgICAg
IHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwotICAgICAgICBzdHIuc3ByaW50ZigiJTA2ZCIsIChp
bnQpKHZhbHVlLT5mVmFsdWUrLjUpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihuZXcg
U3RyaW5nSW1wbChzdHIpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpIHsKKyAgICBpZiAoIXN0cmljdCAmJiB2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+ZlZhbHVlID49IDAu
ICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikKKyAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xv
cihTdHJpbmcoKS5zcHJpbnRmKCIlMDZkIiwgKGludCkodmFsdWUtPmZWYWx1ZSsuNSkpLmltcGwo
KSk7CisgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19S
R0JDT0xPUikgewogICAgICAgICBTdHJpbmcgc3RyID0gIiMiICsgZG9tU3RyaW5nKHZhbHVlLT5z
dHJpbmcpOwogICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKHN0ci5pbXBsKCkpOwogICAgIH0g
ZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCAo
IXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lP
TikpCkBAIC00MjUsOSArNDIxLDggQEAgQ1NTVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdDb2xv
cigpCiAgICAgICAgIHIgPSBrTWF4KDAsIGtNaW4oMjU1LCByKSk7CiAgICAgICAgIGcgPSBrTWF4
KDAsIGtNaW4oMjU1LCBnKSk7CiAgICAgICAgIGIgPSBrTWF4KDAsIGtNaW4oMjU1LCBiKSk7Ci0g
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwotICAgICAgICBzdHIuc3ByaW50ZigicmdiKCVk
LCAlZCwgJWQpIiwgciwgZywgYik7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IobmV3IFN0
cmluZ0ltcGwoc3RyKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKFN0
cmluZygpLnNwcmludGYoInJnYiglZCwgJWQsICVkKSIsIHIsIGcsIGIpLmltcGwoKSk7CiAgICAg
fQogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBicmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRn
ZS5tbQkocmV2aXNpb24gMTM0ODcpCisrKyBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTQ3Nyw3ICsxNDc3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxl
bWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtIChOU1N0cmluZyAqKXJlbmRlclRyZWVBc0V4dGVy
bmFsUmVwcmVzZW50YXRpb24KIHsKLSAgICByZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiht
X2ZyYW1lLT5yZW5kZXJlcigpKS5nZXROU1N0cmluZygpOworICAgIHJldHVybiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKG1fZnJhbWUtPnJlbmRlcmVyKCkpOwogfQogCiAtICh2b2lkKXNldFNlbGVj
dGlvbkZyb21Ob25lCkluZGV4OiBrd3EvS1dRVGV4dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3dxL0tXUVRleHRTdHJlYW0uY3BwCShyZXZpc2lvbiAxMzQ4NykKKysrIGt3cS9LV1FUZXh0U3Ry
ZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNzMgKzI5LDYwIEBACiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCiBjb25zdCBzaXplX3QgaW50ZWdlck9yUG9pbnRlckFzU3RyaW5nQnVmZmVyU2l6
ZSA9IDEwMDsgLy8gbGFyZ2UgZW5vdWdoIGZvciBhbnkgaW50ZWdlciBvciBwb2ludGVyIGluIHN0
cmluZyBmb3JtYXQsIGluY2x1ZGluZyB0cmFpbGluZyBudWxsIGNoYXJhY3RlcgogY29uc3QgY2hh
ciAqcHJlY2lzaW9uRm9ybWF0c1tdID0geyAiJS4wZiIsICIlLjFmIiwgIiUuMmYiLCAiJS4zZiIs
ICIlLjRmIiwgIiUuNWYiICIlLjZmIn07IAogY29uc3QgaW50IG1heFByZWNpc2lvbiA9IDY7IC8v
IG11c3QgbWF0Y2ggdG8gcHJlY2lzaW9uRm9ybWF0cwogY29uc3QgaW50IGRlZmF1bHRQcmVjaXNp
b24gPSA2OyAvLyBtYXRjaGVzIHF0IGFuZCBzcHJpbnRmKC4uLCAiJWYiLCAuLi4pIGJlaGF2aW91
cgogCi1RVGV4dFN0cmVhbTo6UVRleHRTdHJlYW0oY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYg
YmEpCi0gICAgOiBtX2hhc0J5dGVBcnJheSh0cnVlKSwgbV9ieXRlQXJyYXkoYmEpLCBtX3N0cmlu
ZygwKSwgbV9wcmVjaXNpb24oZGVmYXVsdFByZWNpc2lvbikKLXsKLX0KLQotUVRleHRTdHJlYW06
OlFUZXh0U3RyZWFtKERlcHJlY2F0ZWRTdHJpbmcqIHMpCi0gICAgOiBtX2hhc0J5dGVBcnJheShm
YWxzZSksIG1fc3RyaW5nKHMpLCBtX3ByZWNpc2lvbihkZWZhdWx0UHJlY2lzaW9uKQorUVRleHRT
dHJlYW06OlFUZXh0U3RyZWFtKFN0cmluZyogcykKKyAgICA6IG1fc3RyaW5nKHMpLCBtX3ByZWNp
c2lvbihkZWZhdWx0UHJlY2lzaW9uKQogeworICAgIEFTU0VSVChzKTsKIH0KIAogUVRleHRTdHJl
YW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNoYXIgYykKIHsKLSAgICBpZiAobV9oYXNCeXRl
QXJyYXkpIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fYnl0ZUFycmF5LnNpemUoKTsK
LSAgICAgICAgbV9ieXRlQXJyYXkucmVzaXplKG9sZFNpemUgKyAxKTsKLSAgICAgICAgbV9ieXRl
QXJyYXlbb2xkU2l6ZV0gPSBjOwotICAgIH0KLSAgICBpZiAobV9zdHJpbmcpCi0gICAgICAgIG1f
c3RyaW5nLT5hcHBlbmQoUUNoYXIoYykpOworICAgICptX3N0cmluZyArPSBRQ2hhcihjKTsKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFtJiBRVGV4dFN0cmVhbTo6b3BlcmF0b3I8
PChzaG9ydCBpKQogewotICAgIGNoYXIgYnVmZmVyW2ludGVnZXJPclBvaW50ZXJBc1N0cmluZ0J1
ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gKnRo
aXMgPDwgYnVmZmVyOworICAgIAorICAgICptX3N0cmluZyArPSBTdHJpbmc6Om51bWJlcihpKTsK
KyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFtJiBRVGV4dFN0cmVhbTo6b3BlcmF0
b3I8PCh1bnNpZ25lZCBzaG9ydCBpKQogewotICAgIGNoYXIgYnVmZmVyW2ludGVnZXJPclBvaW50
ZXJBc1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJXUiLCBpKTsKLSAg
ICByZXR1cm4gKnRoaXMgPDwgYnVmZmVyOworICAgICptX3N0cmluZyArPSBTdHJpbmc6Om51bWJl
cihpKTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFtJiBRVGV4dFN0cmVhbTo6
b3BlcmF0b3I8PChpbnQgaSkKIHsKLSAgICBjaGFyIGJ1ZmZlcltpbnRlZ2VyT3JQb2ludGVyQXNT
dHJpbmdCdWZmZXJTaXplXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiVkIiwgaSk7Ci0gICAgcmV0
dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoaSk7
CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJh
dG9yPDwodW5zaWduZWQgaSkKIHsKLSAgICBjaGFyIGJ1ZmZlcltpbnRlZ2VyT3JQb2ludGVyQXNT
dHJpbmdCdWZmZXJTaXplXTsKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgaSk7Ci0gICAgcmV0
dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoaSk7
CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJh
dG9yPDwobG9uZyBpKQogewotICAgIGNoYXIgYnVmZmVyW2ludGVnZXJPclBvaW50ZXJBc1N0cmlu
Z0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWxkIiwgaSk7Ci0gICAgcmV0dXJu
ICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIoaSk7Cisg
ICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJhdG9y
PDwodW5zaWduZWQgbG9uZyBpKQogewotICAgIGNoYXIgYnVmZmVyW2ludGVnZXJPclBvaW50ZXJB
c1N0cmluZ0J1ZmZlclNpemVdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWx1IiwgaSk7Ci0gICAg
cmV0dXJuICp0aGlzIDw8IGJ1ZmZlcjsKKyAgICAqbV9zdHJpbmcgKz0gU3RyaW5nOjpudW1iZXIo
aSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9w
ZXJhdG9yPDwoZmxvYXQgZikKQEAgLTExNCwzOSArMTAxLDI2IEBAIFFUZXh0U3RyZWFtJiBRVGV4
dFN0cmVhbTo6b3BlcmF0b3I8PChkb3UKIAogUVRleHRTdHJlYW0mIFFUZXh0U3RyZWFtOjpvcGVy
YXRvcjw8KGNvbnN0IGNoYXIqIHMpCiB7Ci0gICAgaWYgKG1faGFzQnl0ZUFycmF5KSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmxlbihzKTsKLSAgICAgICAgdW5zaWduZWQgb2xkU2l6
ZSA9IG1fYnl0ZUFycmF5LnNpemUoKTsKLSAgICAgICAgbV9ieXRlQXJyYXkucmVzaXplKG9sZFNp
emUgKyBsZW5ndGgpOwotICAgICAgICBtZW1jcHkobV9ieXRlQXJyYXkuZGF0YSgpICsgb2xkU2l6
ZSwgcywgbGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKG1fc3RyaW5nKQotICAgICAgICBtX3N0cmlu
Zy0+YXBwZW5kKHMpOworICAgICptX3N0cmluZyArPSBzOwogICAgIHJldHVybiAqdGhpczsKIH0K
IAogUVRleHRTdHJlYW0mIFFUZXh0U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IERlcHJlY2F0ZWRD
U3RyaW5nJiBxY3MpCiB7Ci0gICAgY29uc3QgY2hhciAqcyA9IHFjczsKKyAgICBjb25zdCBjaGFy
KiBzID0gcWNzOwogICAgIHJldHVybiAqdGhpcyA8PCBzOwogfQogCiBRVGV4dFN0cmVhbSYgUVRl
eHRTdHJlYW06Om9wZXJhdG9yPDwoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgcykKIHsKLSAgICBp
ZiAobV9oYXNCeXRlQXJyYXkpIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gcy5sZW5ndGgo
KTsKLSAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fYnl0ZUFycmF5LnNpemUoKTsKLSAgICAg
ICAgbV9ieXRlQXJyYXkucmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOwotICAgICAgICBtZW1jcHko
bV9ieXRlQXJyYXkuZGF0YSgpICsgb2xkU2l6ZSwgcy5sYXRpbjEoKSwgbGVuZ3RoKTsKLSAgICB9
Ci0gICAgaWYgKG1fc3RyaW5nKQotICAgICAgICBtX3N0cmluZy0+YXBwZW5kKHMpOworICAgICpt
X3N0cmluZyArPSBzOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogUVRleHRTdHJlYW0mIFFUZXh0
U3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcykKIHsKLSAgICByZXR1
cm4gKCp0aGlzKSA8PCBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAqbV9zdHJpbmcgKz0gczsK
KyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFFUZXh0U3RyZWFtJiBRVGV4dFN0cmVhbTo6b3BlcmF0
b3I8PCh2b2lkKiBwKQpJbmRleDoga3dxL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGt3cS9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTM0ODcpCisrKyBrd3EvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw4ICsyMjcsOCBAQCBzdGF0
aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlCiAKIHN0YXRpYyBTdHJpbmcgcXVv
dGVBbmRFc2NhcGVOb25QcmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHJlc3VsdDsKLSAgICByZXN1bHQgKz0gJyInOworICAgIFN0cmluZyByZXN1bHQ7
CisgICAgcmVzdWx0ICs9IFFDaGFyKCciJyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgUUNoYXIgYyA9IHNbaV07CiAgICAgICAgIGlm
IChjID09ICdcXCcpCkBAIC0yMzYsMTkgKzIzNiwxNiBAQCBzdGF0aWMgU3RyaW5nIHF1b3RlQW5k
RXNjYXBlTm9uUHJpbnRhYmxlCiAgICAgICAgIGVsc2UgaWYgKGMgPT0gJyInKQogICAgICAgICAg
ICAgcmVzdWx0ICs9ICJcXFwiIjsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXG4nIHx8IGMudW5p
Y29kZSgpID09IDB4MDBBMCkKLSAgICAgICAgICAgIHJlc3VsdCArPSAnICc7CisgICAgICAgICAg
ICByZXN1bHQgKz0gUUNoYXIoJyAnKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCB1ID0gYy51bmljb2RlKCk7CiAgICAgICAgICAgICBpZiAodSA+PSAweDIwICYm
IHUgPCAweDdGKQogICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBoZXg7Ci0gICAgICAgICAgICAg
ICAgaGV4LnNwcmludGYoIlxceHslWH0iLCB1KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0g
aGV4OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
c3VsdCArPSBTdHJpbmcoKS5zcHJpbnRmKCJcXHh7JVh9IiwgdSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmVzdWx0ICs9ICciJzsKKyAgICByZXN1bHQgKz0gUUNoYXIoJyInKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0zODEsOSArMzc4LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXll
cnMoUVRleHRTdHJlYW0gJnRzLAogICAgIH0KIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcg
bm9kZVBvc2l0aW9uKE5vZGUgKm5vZGUpCitzdGF0aWMgU3RyaW5nIG5vZGVQb3NpdGlvbihOb2Rl
ICpub2RlKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyByZXN1
bHQ7CiAKICAgICBOb2RlICpwOwogICAgIGZvciAoTm9kZSAqbiA9IG5vZGU7IG47IG4gPSBwKSB7
CkBAIC0zOTEsNyArMzg4LDcgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9u
KE5vZAogICAgICAgICBpZiAobiAhPSBub2RlKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgb2Yg
IjsKICAgICAgICAgaWYgKHApCi0gICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBEZXBy
ZWNhdGVkU3RyaW5nOjpudW1iZXIobi0+bm9kZUluZGV4KCkpICsgIiB7IiArIGdldFRhZ05hbWUo
bikgKyAifSI7CisgICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBTdHJpbmc6Om51bWJl
cihuLT5ub2RlSW5kZXgoKSkgKyAiIHsiICsgZ2V0VGFnTmFtZShuKSArICJ9IjsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ICs9ICJkb2N1bWVudCI7CiAgICAgfQpAQCAtNDIyLDEx
ICs0MTksMTEgQEAgc3RhdGljIHZvaWQgd3JpdGVTZWxlY3Rpb24oUVRleHRTdHJlYW0gJgogICAg
IH0KIH0KIAotRGVwcmVjYXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRlck9i
amVjdCogbykKK1N0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRlck9iamVjdCogbykK
IHsKICAgICBKU0VkaXRvcjo6c2V0U3VwcG9ydHNQYXN0ZUNvbW1hbmQodHJ1ZSk7CiAKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHM7CisgICAgU3RyaW5nIHM7CiAgICAgaWYgKG8pIHsKICAgICAgICAg
UVRleHRTdHJlYW0gdHMoJnMpOwogI2lmIFNWR19TVVBQT1JUCkluZGV4OiBrd3EvS1dRVGV4dFN0
cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FUZXh0U3RyZWFtLmgJKHJldmlzaW9uIDEzNDg3
KQorKysga3dxL0tXUVRleHRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBA
QAogI2lmbmRlZiBRVGV4dFN0cmVhbV9ICiAjZGVmaW5lIFFUZXh0U3RyZWFtX0gKIAotI2luY2x1
ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgotCiBjbGFzcyBEZXByZWNhdGVkQ1N0cmluZzsKIGNsYXNz
IFFDaGFyOwogY2xhc3MgRGVwcmVjYXRlZFN0cmluZzsKQEAgLTQzLDggKzQxLDcgQEAgUVRleHRT
dHJlYW0gJmVuZGwoUVRleHRTdHJlYW0mIHN0cmVhbSk7CiAKIGNsYXNzIFFUZXh0U3RyZWFtIHsK
IHB1YmxpYzoKLSAgICBRVGV4dFN0cmVhbShjb25zdCBEZXByZWNhdGVkQnl0ZUFycmF5Jik7Ci0g
ICAgUVRleHRTdHJlYW0oRGVwcmVjYXRlZFN0cmluZyopOworICAgIFFUZXh0U3RyZWFtKFdlYkNv
cmU6OlN0cmluZyopOwogCiAgICAgUVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY2hhcik7CiAgICAg
UVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgUUNoYXImKTsKQEAgLTY4LDkgKzY1LDcgQEAg
cHJpdmF0ZToKICAgICBRVGV4dFN0cmVhbShjb25zdCBRVGV4dFN0cmVhbSYpOwogICAgIFFUZXh0
U3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgUVRleHRTdHJlYW0mKTsKIAotICAgIGJvb2wgbV9oYXNC
eXRlQXJyYXk7Ci0gICAgRGVwcmVjYXRlZEJ5dGVBcnJheSBtX2J5dGVBcnJheTsKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nKiBtX3N0cmluZzsKKyAgICBXZWJDb3JlOjpTdHJpbmcqIG1fc3RyaW5nOwog
ICAgIGludCBtX3ByZWNpc2lvbjsKIH07CiAKSW5kZXg6IGt3cS9SZW5kZXJUcmVlQXNUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3dxL1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gMTM0ODcpCisr
KyBrd3EvUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNSArMjUsMTUg
QEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
CiAjaW5jbHVkZSAiS1dRVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OworICAgIGNsYXNz
IFN0cmluZzsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdl
YkNvcmU6OlJlbmRlck9iamVjdCAqKTsKK1dlYkNvcmU6OlN0cmluZyBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdlYkNvcmU6OlJlbmRlck9iamVjdCAqKTsKIHZvaWQgd3JpdGUoUVRleHRTdHJlYW0g
JnRzLCBjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3QgJm8sIGludCBpbmRlbnQgPSAwKTsKIAog
I2VuZGlmCkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNw
cAkocmV2aXNpb24gMTM0ODcpCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxOSwxMSArMTUxOSwxMCBAQCB2b2lkIEZyYW1lOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIgKmFj
dGlvCiAgICAgICAgICB0bXBib2R5LnJlcGxhY2UoJysnLCAnICcpOwogICAgICAgICAgdG1wYm9k
eSA9IEtVUkw6OmRlY29kZV9zdHJpbmcodG1wYm9keSk7ICAvLyBEZWNvZGUgdGhlIHJlc3Qgb2Yg
aXQKICAgICAgICAgIGJvZHlFbmMgPSBLVVJMOjplbmNvZGVfc3RyaW5nKHRtcGJvZHkpOyAgLy8g
UmVjb2RlIGZvciB0aGUgVVJMCi0gICAgICB9IGVsc2UgeworICAgICAgfSBlbHNlCiAgICAgICAg
ICBib2R5RW5jID0gS1VSTDo6ZW5jb2RlX3N0cmluZyhmb3JtRGF0YS5mbGF0dGVuVG9TdHJpbmco
KSk7Ci0gICAgICB9CiAKLSAgICAgIG52cHMuYXBwZW5kKERlcHJlY2F0ZWRTdHJpbmcoImJvZHk9
JTEiKS5hcmcoYm9keUVuYykpOworICAgICAgbnZwcy5hcHBlbmQoU3RyaW5nKCkuc3ByaW50Zigi
Ym9keT0lcyIsIGJvZHlFbmMubGF0aW4xKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgICBx
ID0gbnZwcy5qb2luKCImIik7CiAgICAgICB1LnNldFF1ZXJ5KHEpOwogICB9IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7350</attachid>
            <date>2006-03-27 23:31:23 -0800</date>
            <delta_ts>2006-03-27 23:39:25 -0800</delta_ts>
            <desc>Addresses darin&apos;s comments.</desc>
            <filename>better.patch</filename>
            <type>text/plain</type>
            <size>76605</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBraHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIzLDEwICsxMjIzLDEwIEBAIGJvb2wgV2luZG93
Ojppc1NhZmVTY3JpcHQoY29uc3QgU2NyaXB0SW4KICAgICAgICAgcHJpbnRmKCJVbnNhZmUgSmF2
YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZyYW1lIHdp
dGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICB0YXJnZXRE
b2N1bWVudC0+VVJMKCkubGF0aW4xKCksIG9yaWdpbkRvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSk7
CiAgICAgfQotICAgIERlcHJlY2F0ZWRTdHJpbmcgbWVzc2FnZTsKKyAgICBTdHJpbmcgbWVzc2Fn
ZTsKICAgICBtZXNzYWdlLnNwcmludGYoIlVuc2FmZSBKYXZhU2NyaXB0IGF0dGVtcHQgdG8gYWNj
ZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMuIERvbWFpbnMgbXVz
dCBtYXRjaC5cbiIsIAogICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPlVSTCgpLmxh
dGluMSgpLCBvcmlnaW5Eb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwotICAgIHRhcmdldFBhcnQt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5nKG1lc3NhZ2UpLCAxLCBTdHJpbmcoKSk7IC8vZml4
bWU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2V1cmwKKyAgICB0YXJnZXRQ
YXJ0LT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFN0cmluZygpKTsgLy9maXhtZTog
cHJvdmlkZSBhIHJlYWwgbGluZSBudW1iZXIgYW5kIHNvdXJjZXVybAogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTI4NSwxMCArMTI4NSwxMCBAQCBib29sIFdpbmRvdzo6aXNTYWZlU2NyaXB0
KEV4ZWNTdGF0ZSAqZXhlCiAgICAgICBwcmludGYoIlVuc2FmZSBKYXZhU2NyaXB0IGF0dGVtcHQg
dG8gYWNjZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMuIERvbWFp
bnMgbXVzdCBtYXRjaC5cbiIsIAogICAgICAgICAgICAgIHRoaXNEb2N1bWVudC0+VVJMKCkubGF0
aW4xKCksIGFjdERvY3VtZW50LT5VUkwoKS5sYXRpbjEoKSk7CiAgIH0KLSAgRGVwcmVjYXRlZFN0
cmluZyBtZXNzYWdlOworICBTdHJpbmcgbWVzc2FnZTsKICAgbWVzc2FnZS5zcHJpbnRmKCJVbnNh
ZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVSTCAlcyBmcm9tIGZy
YW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0Y2guXG4iLCAKICAgICAgICAgICAgICAg
ICAgIHRoaXNEb2N1bWVudC0+VVJMKCkubGF0aW4xKCksIGFjdERvY3VtZW50LT5VUkwoKS5sYXRp
bjEoKSk7Ci0gIG1fZnJhbWUtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5nKG1lc3NhZ2UpLCAx
LCBTdHJpbmcoKSk7CisgIG1fZnJhbWUtPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgMSwg
U3RyaW5nKCkpOwogICAKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjA3OCw3ICsyMDc4LDcgQEAg
SlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlYwogICAgIC8vIEJsZWguCiAg
ICAgVVN0cmluZyBzdHIgPSB1cmwuaG9zdCgpOwogICAgIGlmICh1cmwucG9ydCgpKQotICAgICAg
ICAgICAgc3RyICs9ICI6IiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcigoaW50KXVybC5wb3J0
KCkpOworICAgICAgICBzdHIgKz0gIjoiICsgU3RyaW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgp
KTsKICAgICByZXR1cm4ganNTdHJpbmcoc3RyKTsKICAgfQogICBjYXNlIEhvc3RuYW1lOgpAQCAt
MjA5MSw3ICsyMDkxLDcgQEAgSlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhl
YwogICBjYXNlIFBhdGhuYW1lOgogICAgIHJldHVybiBqc1N0cmluZyh1cmwucGF0aCgpLmlzRW1w
dHkoKSA/ICIvIiA6IHVybC5wYXRoKCkpOwogICBjYXNlIFBvcnQ6Ci0gICAgcmV0dXJuIGpzU3Ry
aW5nKHVybC5wb3J0KCkgPyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgp
KSA6ICIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcodXJsLnBvcnQoKSA/IFN0cmluZzo6bnVtYmVy
KChpbnQpdXJsLnBvcnQoKSkgOiAiIik7CiAgIGNhc2UgUHJvdG9jb2w6CiAgICAgcmV0dXJuIGpz
U3RyaW5nKHVybC5wcm90b2NvbCgpICsgIjoiKTsKICAgY2FzZSBTZWFyY2g6CkluZGV4OiBwbGF0
Zm9ybS9TdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1N0cmluZy5jcHAJKHJldmlz
aW9uIDEzNTI3KQorKysgcGxhdGZvcm0vU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlIDxranMv
aWRlbnRpZmllci5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCkBAIC0yMDksNiArMjEwLDc0IEBAIERlcHJlY2F0ZWRTdHJpbmcgU3RyaW5n
OjpkZXByZWNhdGVkU3RyaW4KICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZyhtX2ltcGwtPnVu
aWNvZGUoKSwgbV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAKK1N0cmluZyBTdHJpbmc6OnNwcmludGYo
Y29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0
YXJ0KGFyZ3MsIGZvcm1hdCk7CisKKyNpZiBQTEFURk9STShXSU5fT1MpCisgICAgLy8gV2luZG93
cyB2bnNwcmludGYgZG9lcyBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCBzaXplIG9uIG92ZXJmbG93
CisgICAgLy8gU28gd2UganVzdCBoYXZlIHRvIGtlZXAgbG9vcGluZyB1bnRpbCBvdXIgdnNwcmlu
dGYgY2FsbCB3b3JrcyEKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBWZWN0b3I8Y2hhciwgMjU2
PiBidWZmZXI7CisgICAgZG8geworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgICAg
IGJ1ZmZlci5yZXNpemUoYnVmZmVyLnNpemUoKSAqIDIpOworICAgICAgICByZXN1bHQgPSB2c25w
cmludGYoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgZm9ybWF0LCBhcmdzKTsKKyAgICAg
ICAgLy8gV2luZG93cyB2bnNwcmludGYgcmV0dXJucyAtMSBib3RoIGZvciBhbGwgZXJyb3JzLiAg
VGhlcmUgaXMgbm8KKyAgICAgICAgLy8gd2F5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5vdCBl
bm91Z2ggcm9vbSIgYW5kICJpbnZhbGlkIGZvcm1hdCIKKyAgICAgICAgLy8gd2UganVzdCBrZWVw
IHRyeWluZyB1bnRpbCB3ZSBoaXQgYW4gYXJiaXRyYXJ5IHNpemUgYW5kIHRoZW4gc3RvcC4KKyAg
ICB9IHdoaWxlIChyZXN1bHQgPCAwICYmIChidWZmZXIuc2l6ZSgpICogMikgPCAyMDQ4KTsKKyAg
ICBpZiAocmVzdWx0ID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOworICAgIGVsc2Ug
aWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB1bnNpZ25lZCBs
ZW4gPSByZXN1bHQ7CisjZWxzZQorICAgIC8vIERvIHRoZSBmb3JtYXQgb25jZSB0byBnZXQgdGhl
IGxlbmd0aC4KKyAgICBjaGFyIGNoOworICAgIGludCByZXN1bHQgPSB2c25wcmludGYoJmNoLCAx
LCBmb3JtYXQsIGFyZ3MpOworICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygiIik7CisgICAgZWxzZSBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHVuc2lnbmVkIGxlbiA9IHJlc3VsdDsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVy
OworICAgIGJ1ZmZlci5yZXNpemUobGVuICsgMSk7CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBm
b3JtYXR0aW5nIGFnYWluLCBndWFyYW50ZWVkIHRvIGZpdC4KKyAgICB2c25wcmludGYoYnVmZmVy
LmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgZm9ybWF0LCBhcmdzKTsKKyNlbmRpZgorICAgIHZhX2Vu
ZChhcmdzKTsKKyAgICAKKyAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwg
bGVuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVtYmVyKGludCBuKQoreworICAgIHJldHVybiBT
dHJpbmcoKS5zcHJpbnRmKCIlZCIsIG4pOworfQorCitTdHJpbmcgU3RyaW5nOjpudW1iZXIodW5z
aWduZWQgbikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiJXUiLCBuKTsKK30KKwor
U3RyaW5nIFN0cmluZzo6bnVtYmVyKGxvbmcgbikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCkuc3By
aW50ZigiJWxkIiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBsb25n
IG4pCit7CisgICAgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIiVsdSIsIG4pOworfQorCitTdHJp
bmcgU3RyaW5nOjpudW1iZXIoZG91YmxlIG4pCit7CisgICAgcmV0dXJuIFN0cmluZygpLnNwcmlu
dGYoIiUuNmxnIiwgbik7Cit9CisKIGludCBTdHJpbmc6OnRvSW50KGJvb2wqIG9rKSBjb25zdAog
ewogICAgIGlmICghbV9pbXBsKSB7CkluZGV4OiBwbGF0Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFjLm1tCShyZXZpc2lvbiAxMzUy
NykKKysrIHBsYXRmb3JtL21hYy9LZXlFdmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE4
LDcgKzMxOCw3IEBAIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvcktleUV2ZW50KE4KICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhlciB0aGFuIHRo
ZSB2ZW5kb3ItYXJlYSBVbmljb2RlIHZhbHVlcyBmb3IgdGhlIGFib3ZlIGtleXMuCiAgICAgICAg
ICAgICAvLyBGb3Igbm93LCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4KICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCkuc3ByaW50
ZigiVSslMDZYIiwgdG91cHBlcihjKSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCkuc3By
aW50ZigiVSslMDZYIiwgdG91cHBlcihjKSk7CiAgICAgfQogfQogCkluZGV4OiBwbGF0Zm9ybS9D
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0NvbG9yLmgJKHJldmlzaW9uIDEzNTI3KQor
KysgcGxhdGZvcm0vQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCB0eXBl
ZGVmIHN0cnVjdCBDR0NvbG9yICpDR0NvbG9yUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFN0cmluZzsKKwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgUkdCQTMyOyAgICAgICAgICAg
ICAgICAgICAgICAvLyBSR0JBIHF1YWRydXBsZXQKIAogUkdCQTMyIG1ha2VSR0IoaW50IHIsIGlu
dCBnLCBpbnQgYik7CkBAIC01MSwxMCArNTMsMTAgQEAgcHVibGljOgogICAgIENvbG9yKFJHQkEz
MiBjb2wpIDogY29sb3IoY29sKSwgdmFsaWQodHJ1ZSkgeyB9CiAgICAgQ29sb3IoaW50IHIsIGlu
dCBnLCBpbnQgYikgOiBjb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgdmFsaWQodHJ1ZSkgeyB9CiAg
ICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogY29sb3IobWFrZVJHQkEociwg
ZywgYiwgYSkpLCB2YWxpZCh0cnVlKSB7IH0KLSAgICBleHBsaWNpdCBDb2xvcihjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nICYpOworICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcmKTsKICAgICBleHBsaWNpdCBDb2xvcihjb25zdCBjaGFyICopOwogICAgIAotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXROYW1lZENvbG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKIAogICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHZhbGlkOyB9CkluZGV4OiBwbGF0Zm9ybS9BdG9taWNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24g
MTM1MjcpCisrKyBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NyArNzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBBdG9taWNTdHJpbmcm
IHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1f
c3RyaW5nLmVuZHNXaXRoKHMuZG9tU3RyaW5nKCksIGNhc2VTZW5zaXRpdmUpOyB9CiAgICAgCi0g
ICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9JbnQoKTsgfQorICAgIGlu
dCB0b0ludChib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KG9rKTsg
fQogICAgIGJvb2wgcGVyY2VudGFnZShpbnQmIHApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnBl
cmNlbnRhZ2UocCk7IH0KICAgICBMZW5ndGgqIHRvTGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLnRvTGVuZ3RoQXJyYXkobGVuKTsgfQogICAgIExlbmd0aCogdG9D
b29yZHNBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Db29yZHNBcnJh
eShsZW4pOyB9CkluZGV4OiBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
bGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0Zm9ybS9TdHJp
bmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTIgKzcxLDEyIEBAIFN0cmluZ0ltcGw6
OlN0cmluZ0ltcGwoY29uc3QgY2hhciogc3RyKQogICAgIGluaXRXaXRoQ2hhcihzdHIsIHN0cmxl
bihzdHIpKTsKIH0KIAotU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBzdHIsIHVu
c2lnbmVkIGludCBsZW4pCitTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIHN0ciwg
dW5zaWduZWQgbGVuKQogewogICAgIGluaXRXaXRoQ2hhcihzdHIsIGxlbik7CiB9CiAKLXZvaWQg
U3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgaW50IGxl
bikKK3ZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWdu
ZWQgbGVuKQogewogICAgIG1faGFzaCA9IDA7CiAgICAgbV9pblRhYmxlID0gZmFsc2U7CkBAIC05
Myw3ICs5Myw3IEBAIHZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIKICAg
ICAgICAgKnB0cisrID0gKnN0cisrOwogfQogCi12b2lkIFN0cmluZ0ltcGw6OmluaXRXaXRoUUNo
YXIoY29uc3QgUUNoYXIqIHN0ciwgdW5zaWduZWQgaW50IGxlbikKK3ZvaWQgU3RyaW5nSW1wbDo6
aW5pdFdpdGhRQ2hhcihjb25zdCBRQ2hhciogc3RyLCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgbV9o
YXNoID0gMDsKICAgICBtX2luVGFibGUgPSBmYWxzZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBib29s
IFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoCiAgICAgcmV0dXJuIGNvbnRhaW5z
T25seVdoaXRlc3BhY2UoMCwgbV9sZW5ndGgpOwogfQogCi1ib29sIFN0cmluZ0ltcGw6OmNvbnRh
aW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4pIGNv
bnN0Citib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuKSBjb25zdAogewogICAgIGlmICghbV9kYXRhKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0Zm9ybS9Q
bGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxOCBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0OwogICAgIERlcHJlY2F0ZWRTdHJp
bmcgZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyBTdHJpbmcgbnVt
YmVyKGludCk7CisgICAgc3RhdGljIFN0cmluZyBudW1iZXIodW5zaWduZWQpOworICAgIHN0YXRp
YyBTdHJpbmcgbnVtYmVyKGxvbmcpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVk
IGxvbmcpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKGRvdWJsZSk7CisgICAgCisgICAgc3Rh
dGljIFN0cmluZyBzcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKQorI2lmIF9fR05VQ19fCisgICAg
X19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCisjZW5kaWYKKyAgICA7CiAK
ICAgICBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdDsKICAgICBMZW5ndGgqIHRvTGVuZ3Ro
QXJyYXkoaW50JiBsZW4pIGNvbnN0OwpJbmRleDogcGxhdGZvcm0vQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL0NvbG9yLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0Zm9ybS9D
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDb2xv
ci5oIgogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiAvLyBUdXJuIG9m
ZiBpbmxpbmluZyB0byBhdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjLgpAQCAtMTA2LDkgKzEw
Nyw5IEBAIENvbG9yOjpDb2xvcihjb25zdCBjaGFyICpuYW1lKQogICAgIH0KIH0KIAotRGVwcmVj
YXRlZFN0cmluZyBDb2xvcjo6bmFtZSgpIGNvbnN0CitTdHJpbmcgQ29sb3I6Om5hbWUoKSBjb25z
dAogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgbmFtZTsKKyAgICBTdHJpbmcgbmFtZTsKICAgICBp
ZiAoYWxwaGEoKSA8IDB4RkYpCiAgICAgICAgIG5hbWUuc3ByaW50ZigiIyUwMlglMDJYJTAyWCUw
MlgiLCByZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsKICAgICBlbHNlCkluZGV4OiBi
aW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL29iamMv
RE9NSW50ZXJuYWwubW0JKHJldmlzaW9uIDEzNTI3KQorKysgYmluZGluZ3Mvb2JqYy9ET01JbnRl
cm5hbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE2ICsxMTgsMTQgQEAgU3RyaW5nOjpTdHJp
bmcoTlNTdHJpbmcgKnN0cikKICAgICBlbHNlIHsKICAgICAgICAgVW5pQ2hhciBmaXhlZFNpemVC
dWZmZXJbMTAyNF07CiAgICAgICAgIFVuaUNoYXIgKmJ1ZmZlcjsKLSAgICAgICAgaWYgKHNpemUg
PiBzdGF0aWNfY2FzdDxDRkluZGV4PihzaXplb2YoZml4ZWRTaXplQnVmZmVyKSAvIHNpemVvZihV
bmlDaGFyKSkpIHsKKyAgICAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDxDRkluZGV4PihzaXpl
b2YoZml4ZWRTaXplQnVmZmVyKSAvIHNpemVvZihVbmlDaGFyKSkpCiAgICAgICAgICAgICBidWZm
ZXIgPSBzdGF0aWNfY2FzdDxVbmlDaGFyICo+KGZhc3RNYWxsb2Moc2l6ZSAqIHNpemVvZihVbmlD
aGFyKSkpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBidWZm
ZXIgPSBmaXhlZFNpemVCdWZmZXI7Ci0gICAgICAgIH0KICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFy
YWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0ciksIENGUmFuZ2VNYWtlKDAs
IHNpemUpLCBidWZmZXIpOwogICAgICAgICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IFFDaGFyICo+KGJ1ZmZlciksICh1bnNpZ25lZClzaXplKTsKLSAgICAg
ICAgaWYgKGJ1ZmZlciAhPSBmaXhlZFNpemVCdWZmZXIpIHsKKyAgICAgICAgaWYgKGJ1ZmZlciAh
PSBmaXhlZFNpemVCdWZmZXIpCiAgICAgICAgICAgICBmYXN0RnJlZShidWZmZXIpOwotICAgICAg
ICB9CiAgICAgfQogfQogCkluZGV4OiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxMzUyNykKKysrIGJpbmRp
bmdzL29iamMvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ3OCw4ICsxNDc4LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRDb2xzOihp
bnQpY29scwogewotICAgIFN0cmluZyB2YWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29s
cykpOwotICAgIFtzZWxmIF90ZXh0QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoY29sc0F0dHIs
IHZhbHVlKTsKKyAgICBbc2VsZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0cmlidXRlKGNvbHNB
dHRyLCBTdHJpbmc6Om51bWJlcihjb2xzKSk7CiB9CiAKIC0gKEJPT0wpZGlzYWJsZWQKQEAgLTE1
MTksOCArMTUxOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0Um93czooaW50KXJvd3MKIHsKLSAgICBTdHJpbmcgdmFsdWUoRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKHJvd3MpKTsKLSAgICBbc2VsZiBfdGV4dEFyZWFFbGVtZW50XS0+c2V0QXR0
cmlidXRlKHJvd3NBdHRyLCB2YWx1ZSk7CisgICAgW3NlbGYgX3RleHRBcmVhRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZShyb3dzQXR0ciwgU3RyaW5nOjpudW1iZXIocm93cykpOwogfQogCiAtIChpbnQp
dGFiSW5kZXgKQEAgLTE3NzcsOCArMTc3NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpI
VE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0U3RhcnQ6KGludClzdGFydAogewotICAgIFN0cmluZyB2
YWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc3RhcnQpKTsKLSAgICBbc2VsZiBfb0xpc3RF
bGVtZW50XS0+c2V0QXR0cmlidXRlKHN0YXJ0QXR0ciwgdmFsdWUpOworICAgIFtzZWxmIF9vTGlz
dEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkp
OwogfQogCiAtIChOU1N0cmluZyAqKXR5cGUKQEAgLTE5NjksOCArMTk2Niw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0V2lkdGg6KGludCl3aWR0
aAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7
Ci0gICAgW3NlbGYgX3ByZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBzdHJpbmcp
OworICAgIFtzZWxmIF9wcmVFbGVtZW50XS0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5n
OjpudW1iZXIod2lkdGgpKTsKIH0KIAogQGVuZApAQCAtMjM1Nyw4ICsyMzUzLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIZWlnaHQ6KGludClo
ZWlnaHQKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihoZWln
aHQpKTsKLSAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIs
IHN0cmluZyk7CisgICAgW3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZShoZWlnaHRB
dHRyLCBTdHJpbmc6Om51bWJlcihoZWlnaHQpKTsKIH0KIAogLSAoaW50KWhzcGFjZQpAQCAtMjM2
OCw4ICsyMzYzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAo
dm9pZClzZXRIc3BhY2U6KGludCloc3BhY2UKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKLSAgICBbc2VsZiBfaW1hZ2VFbGVtZW50XS0+c2V0
QXR0cmlidXRlKGhzcGFjZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2ltYWdlRWxlbWVudF0t
PnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKIH0KIAog
LSAoQk9PTClpc01hcApAQCAtMjQyNCw4ICsyNDE4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRWc3BhY2U6KGludCl2c3BhY2UKIHsKLSAgICBT
dHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKLSAgICBbc2Vs
ZiBfaW1hZ2VFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHN0cmluZyk7CisgICAg
W3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51
bWJlcih2c3BhY2UpKTsKIH0KIAogLSAoaW50KXdpZHRoCkBAIC0yNDM1LDggKzI0MjgsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFdpZHRoOihp
bnQpd2lkdGgKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3
aWR0aCkpOwotICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRy
LCBzdHJpbmcpOworICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhB
dHRyLCBTdHJpbmc6Om51bWJlcih3aWR0aCkpOwogfQogCiBAZW5kCkBAIC0yNTU3LDggKzI1NDks
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldEhz
cGFjZTooaW50KWhzcGFjZQogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKGhzcGFjZSkpOwotICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRl
KGhzcGFjZUF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRy
aWJ1dGUoaHNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7CiB9CiAKIC0gKE5TU3Ry
aW5nICopbmFtZQpAQCAtMjU4OCw4ICsyNTc5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6
OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYkluZGV4CiB7Ci0gICAg
U3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKLSAgICBb
c2VsZiBfb2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIHN0cmluZyk7
CisgICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBT
dHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwogfQogCiAtIChOU1N0cmluZyAqKXR5cGUKQEAgLTI2
MTksOCArMjYwOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0VnNwYWNlOihpbnQpdnNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIodnNwYWNlKSk7Ci0gICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5z
ZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfb2JqZWN0RWxlbWVu
dF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKil3aWR0aApAQCAtMjc2OSw4ICsyNzU4LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIc3BhY2U6KGludCloc3BhY2UK
IHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsK
LSAgICBbc2VsZiBfYXBwbGV0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBzdHJp
bmcpOworICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIs
IFN0cmluZzo6bnVtYmVyKGhzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAgLTI4
MDAsOCArMjc4OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0VnNwYWNlOihpbnQpdnNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIodnNwYWNlKSk7Ci0gICAgW3NlbGYgX2FwcGxldEVsZW1lbnRdLT5z
ZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfYXBwbGV0RWxlbWVu
dF0tPnNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcih2c3BhY2UpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKil3aWR0aApAQCAtMjkyNiw4ICsyOTEzLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRUYWJJbmRleDooaW50KXRhYklu
ZGV4CiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodGFiSW5k
ZXgpKTsKLSAgICBbc2VsZiBfYXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRy
LCBzdHJpbmcpOworICAgIFtzZWxmIF9hcmVhRWxlbWVudF0tPnNldEF0dHJpYnV0ZSh0YWJpbmRl
eEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopdGFy
Z2V0CkBAIC0zMzcyLDggKzMzNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5h
bWVzOwogCiAtICh2b2lkKXNldFNwYW46KGludClzcGFuCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc3BhbikpOwotICAgIFtzZWxmIF90YWJsZUNvbEVsZW1l
bnRdLT5zZXRBdHRyaWJ1dGUoc3BhbkF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3RhYmxlQ29s
RWxlbWVudF0tPnNldEF0dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIoc3BhbikpOwog
fQogCiAtIChOU1N0cmluZyAqKXZBbGlnbgpAQCAtMzU2Miw4ICszNTQ3LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRDb2xTcGFuOihpbnQpY29s
U3BhbgogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGNvbFNw
YW4pKTsKLSAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNldEF0dHJpYnV0ZShjb2xzcGFu
QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfdGFibGVDZWxsRWxlbWVudF0tPnNldEF0dHJpYnV0
ZShjb2xzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIoY29sU3BhbikpOwogfQogCiAtIChOU1N0cmlu
ZyAqKWhlYWRlcnMKQEAgLTM2MDMsOCArMzU4Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0Um93U3BhbjooaW50KXJvd1NwYW4KIHsKLSAgICBT
dHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihyb3dTcGFuKSk7Ci0gICAgW3Nl
bGYgX3RhYmxlQ2VsbEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIHN0cmluZyk7
CisgICAgW3NlbGYgX3RhYmxlQ2VsbEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIs
IFN0cmluZzo6bnVtYmVyKHJvd1NwYW4pKTsKIH0KIAogLSAoTlNTdHJpbmcgKilzY29wZQpAQCAt
MzkyNiw4ICszOTA5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAog
LSAodm9pZClzZXRIZWlnaHQ6KGludCloZWlnaHQKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcihoZWlnaHQpKTsKLSAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+
c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX2VtYmVkRWxlbWVu
dF0tPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcihoZWlnaHQpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKiluYW1lCkBAIC0zOTY3LDggKzM5NDksNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsK
LSAgICBTdHJpbmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOwotICAg
IFtzZWxmIF9lbWJlZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBzdHJpbmcpOwor
ICAgIFtzZWxmIF9lbWJlZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6
Om51bWJlcih3aWR0aCkpOwogfQogCiBAZW5kCkluZGV4OiBodG1sL2h0bWxfYmFzZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHJldmlzaW9uIDEzNTI3KQor
KysgaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDE2ICsxNjYs
MTAgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQogICAgIC8vIEZJ
WE1FOiBwZXJoYXBzIHRoaXMgY29kZSBzaG91bGQgYmUgaW4gYXR0YWNoKCkgaW5zdGVhZCBvZiBo
ZXJlCiAKICAgICBGcmFtZVZpZXcgKncgPSBnZXREb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgaWYg
KHcgJiYgdy0+bWFyZ2luV2lkdGgoKSAhPSAtMSkgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHM7Ci0gICAgICAgIHMuc3ByaW50ZigiJWQiLCB3LT5tYXJnaW5XaWR0aCgpKTsKLSAgICAgICAg
c2V0QXR0cmlidXRlKG1hcmdpbndpZHRoQXR0ciwgcyk7Ci0gICAgfQotICAgIGlmICh3ICYmIHct
Pm1hcmdpbkhlaWdodCgpICE9IC0xKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgczsKLSAg
ICAgICAgcy5zcHJpbnRmKCIlZCIsIHctPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgc2V0QXR0
cmlidXRlKG1hcmdpbmhlaWdodEF0dHIsIHMpOwotICAgIH0KKyAgICBpZiAodyAmJiB3LT5tYXJn
aW5XaWR0aCgpICE9IC0xKQorICAgICAgICBzZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyLCBT
dHJpbmc6Om51bWJlcih3LT5tYXJnaW5XaWR0aCgpKSk7CisgICAgaWYgKHcgJiYgdy0+bWFyZ2lu
SGVpZ2h0KCkgIT0gLTEpCisgICAgICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRyLCBT
dHJpbmc6Om51bWJlcih3LT5tYXJnaW5IZWlnaHQoKSkpOwogCiAgICAgaWYgKHcpCiAgICAgICAg
IHctPnNjaGVkdWxlUmVsYXlvdXQoKTsKSW5kZXg6IGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwCShyZXZpc2lvbiAxMzUyNykKKysr
IGh0bWwvaHRtbF9pbWFnZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcg
QEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKGJvb2wgaWdub3JlUAogICAgIGlmICghcmVu
ZGVyZXIoKSkgewogICAgICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBl
eHBsaWNpdCBwaXhlbCB2YWx1ZQogICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgd2lkdGgg
PSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCkudG9JbnQoJm9rKTsK
KyAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoJm9rKTsK
ICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwogICAgICAgICAKQEAg
LTI4Myw3ICsyODMsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3Jl
CiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUg
Zmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wgb2s7Ci0gICAg
ICAgIGludCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikuZGVwcmVjYXRlZFN0cmlu
ZygpLnRvSW50KCZvayk7CisgICAgICAgIGludCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0
QXR0cikudG9JbnQoJm9rKTsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgcmV0dXJuIGhl
aWdodDsKICAgICAgICAgCkBAIC0zNDQsMTIgKzM0NCwxMiBAQCBpbnQgSFRNTEltYWdlRWxlbWVu
dDo6Ym9yZGVyKCkgY29uc3QKIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRCb3JkZXIoaW50
IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZShib3JkZXJBdHRyLCBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoYm9yZGVyQXR0ciwgU3RyaW5nOjpu
dW1iZXIodmFsdWUpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQoaW50
IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpu
dW1iZXIodmFsdWUpKTsKIH0KIAogaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0
CkBAIC0zNjAsNyArMzYwLDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmhzcGFjZSgpIGNvbnN0
CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SHNwYWNlKGludCB2YWx1ZSkKIHsKLSAgICBz
ZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7
CisgICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9
CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNNYXAoKSBjb25zdApAQCAtNDExLDEyICs0MTEs
MTIgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0VnNwYWNlKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUodnNw
YWNlQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmli
dXRlKHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2V0V2lkdGgoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZSh3aWR0
aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIGludCBIVE1MSW1hZ2VF
bGVtZW50Ojp4KCkgY29uc3QKQEAgLTY5Myw3ICs2OTMsNyBAQCBpbnQgSFRNTEFyZWFFbGVtZW50
Ojp0YWJJbmRleCgpIGNvbnN0CiAKIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRUYWJJbmRleChp
bnQgdGFiSW5kZXgpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0
ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVu
dDo6dGFyZ2V0KCkgY29uc3QKSW5kZXg6IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc0LDEyICsxMjc0
LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmkKIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRNYXhMZW5ndGgoaW50IF9tYXhMZW5ndGgpCiB7Ci0gICAgc2V0
QXR0cmlidXRlKG1heGxlbmd0aEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihfbWF4TGVu
Z3RoKSk7CisgICAgc2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIsIFN0cmluZzo6bnVtYmVyKF9t
YXhMZW5ndGgpKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKHVuc2lnbmVk
IF9zaXplKQogewotICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKF9zaXplKSk7CisgICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6Om51bWJl
cihfc2l6ZSkpOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6c3JjKCkgY29uc3QKSW5k
ZXg6IGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsMTIgKzI2OCwxMiBAQCB2b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudDo6c2V0Q29scyhpbnQgY29scykKIHsKLSAgICBzZXRBdHRyaWJ1dGUoY29sc0F0dHIsIERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xzKSk7CisgICAgc2V0QXR0cmlidXRlKGNvbHNBdHRy
LCBTdHJpbmc6Om51bWJlcihjb2xzKSk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6
c2V0Um93cyhpbnQgcm93cykKIHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c0F0dHIsIERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihyb3dzKSk7CisgICAgc2V0QXR0cmlidXRlKHJvd3NBdHRyLCBTdHJp
bmc6Om51bWJlcihyb3dzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE11
bHRpcGxlKGJvb2wKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZShpbnQgc2l6ZSkK
IHsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihz
aXplKSk7CisgICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCBTdHJpbmc6Om51bWJlcihzaXplKSk7
CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkocmV2aXNpb24gMTM1Mjcp
CisrKyBodG1sL2h0bWxfaW5saW5laW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICsz
MDMsNyBAQCBpbnQgSFRNTEFuY2hvckVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKIAogdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQogewotICAgIHNldEF0
dHJpYnV0ZSh0YWJpbmRleEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih0YWJJbmRleCkp
OworICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4
KSk7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKSW5kZXg6
IGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1M
R2VuZXJpY0Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL0hUTUxHZW5l
cmljRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTEgKzI4MSwxMCBAQCBE
ZXByZWNhdGVkU3RyaW5nIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQ6CiAgICAgICAgIGFzc2VydChz
ZXAxID49IDApOwogICAgICAgICBhc3NlcnQoc2VwMiA+PSAwKTsKIAotICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIG5hbWVBbmRUeXBlID0gc3RhdGUubGVmdChzZXAyKTsKKyAgICAgICAgU3RyaW5n
IG5hbWVBbmRUeXBlID0gc3RhdGUubGVmdChzZXAyKTsKICAgICAgICAgaWYgKGVuY05hbWUubGVu
Z3RoKCkgKyB0eXBlU3RyLmxlbmd0aCgpICsgMSA9PSAodW5zaWduZWQpc2VwMgogICAgICAgICAg
ICAgJiYgbmFtZUFuZFR5cGUuc3RhcnRzV2l0aChlbmNOYW1lKQotICAgICAgICAgICAgJiYgbmFt
ZUFuZFR5cGUuZW5kc1dpdGgodHlwZVN0cikpCi0gICAgICAgIHsKKyAgICAgICAgICAgICYmIG5h
bWVBbmRUeXBlLmVuZHNXaXRoKHR5cGVTdHIpKSB7CiAgICAgICAgICAgICBzdGF0ZXMucmVtb3Zl
KGl0KTsKICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5taWQoc2VwMisxKTsKICAgICAgICAgfQpA
QCAtMzAwLDcgKzI5OSw3IEBAIGludCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50Ojp0YWJJbmRleCgp
IGMKIAogdm9pZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpzZXRUYWJJbmRleChpbnQgdmFsdWUp
CiB7Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1i
ZXIodmFsdWUpKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBodG1sL2h0bWxfYmxv
Y2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkocmV2aXNp
b24gMTM1MjcpCisrKyBodG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY0LDcgKzE2NCw3IEBAIHZvaWQgSFRNTEhSRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUK
ICAgICAgICAgaWYgKHNpemUgPD0gMSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIs
IENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIFN0cmluZygiMCIpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwgU3RyaW5n
KERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihzaXplLTIpKSk7CisgICAgICAgICAgICBhZGRDU1NM
ZW5ndGgoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCBTdHJpbmc6Om51bWJlcihzaXplLTIpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpAQCAtMzIwLDcgKzMyMCw3IEBAIGludCBIVE1MUHJlRWxlbWVudDo6d2lkdGgoKSBjb25z
dAogCiB2b2lkIEhUTUxQcmVFbGVtZW50OjpzZXRXaWR0aChpbnQgd2lkdGgpCiB7Ci0gICAgc2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7Cisg
ICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lkdGgpKTsKIH0KIAog
Ym9vbCBIVE1MUHJlRWxlbWVudDo6d3JhcCgpIGNvbnN0CkluZGV4OiBodG1sL2h0bWxfb2JqZWN0
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX29iamVjdGltcGwuY3BwCShyZXZpc2lv
biAxMzUyNykKKysrIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwNSw3ICsxMDA1LDcgQEAgaW50IEhUTUxPYmplY3RFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0
CiAKIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldFRhYkluZGV4KGludCB0YWJJbmRleCkKIHsK
LSAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIo
dGFiSW5kZXgpKTsKKyAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJl
cih0YWJJbmRleCkpOwogfQogCiBTdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnR5cGUoKSBjb25z
dApJbmRleDogaHRtbC9odG1sX2xpc3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxf
bGlzdGltcGwuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGh0bWwvaHRtbF9saXN0aW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6
OnNldENvbXBhY3QoYm9vbCBiCiAKIHZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQoaW50
IHN0YXJ0KQogewotICAgIHNldEF0dHJpYnV0ZShzdGFydEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcihzdGFydCkpOworICAgIHNldEF0dHJpYnV0ZShzdGFydEF0dHIsIFN0cmluZzo6bnVt
YmVyKHN0YXJ0KSk7CiB9CiAKIFN0cmluZyBIVE1MT0xpc3RFbGVtZW50Ojp0eXBlKCkgY29uc3QK
QEAgLTIzNiw3ICsyMzYsNyBAQCBpbnQgSFRNTExJRWxlbWVudDo6dmFsdWUoKSBjb25zdAogCiB2
b2lkIEhUTUxMSUVsZW1lbnQ6OnNldFZhbHVlKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1
dGUodmFsdWVBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRB
dHRyaWJ1dGUodmFsdWVBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkluZGV4OiBodG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBodG1sL2h0bWxfdGFibGVpbXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL2h0bWxf
dGFibGVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDggKzM5Nyw3IEBAIHZvaWQgSFRN
TFRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgICAgIGJvcmRlcj0xOwog
I2VuZGlmCiAgICAgICAgICAgICBtX25vQm9yZGVyID0gIWJvcmRlcjsKLSAgICAgICAgICAgIFN0
cmluZyB2ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKCBib3JkZXIgKTsKLSAgICAgICAgICAg
IGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfV0lEVEgsIHYgKTsKKyAgICAgICAg
ICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9CT1JERVJfV0lEVEgsIFN0cmluZzo6bnVt
YmVyKGJvcmRlcikpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
Ymdjb2xvckF0dHIpIHsKICAgICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTX1BST1BfQkFDS0dS
T1VORF9DT0xPUiwgYXR0ci0+dmFsdWUoKSk7CkBAIC0xMTQ3LDcgKzExNDYsNyBAQCB2b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDaE9mZihjb25zCiAKIHZvaWQgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OnNldENvbFNwYW4oaW50IG4pCiB7Ci0gICAgc2V0QXR0cmlidXRlKGNvbHNwYW5BdHRy
LCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobikpOworICAgIHNldEF0dHJpYnV0ZShjb2xzcGFu
QXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwogfQogCiBTdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6OmhlYWRlcnMoKSBjb25zdApAQCAtMTE4Miw3ICsxMTgxLDcgQEAgdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6c2V0Tm9XcmFwKGJvbwogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpz
ZXRSb3dTcGFuKGludCBuKQogewotICAgIHNldEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKG4pKTsKKyAgICBzZXRBdHRyaWJ1dGUocm93c3BhbkF0dHIsIFN0
cmluZzo6bnVtYmVyKG4pKTsKIH0KIAogU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzY29w
ZSgpIGNvbnN0CkBAIC0xMjc4LDcgKzEyNzcsNyBAQCB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6
OnNldENoT2ZmKGNvbnN0CiAKIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6c2V0U3BhbihpbnQg
bikKIHsKLSAgICBzZXRBdHRyaWJ1dGUoc3BhbkF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihuKSk7CisgICAgc2V0QXR0cmlidXRlKHNwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihuKSk7CiB9
CiAKIFN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50Ojp2QWxpZ24oKSBjb25zdApJbmRleDogcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMTYsNyArMTExNiw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShwcmVjaXNpb24sICJm
bG9hdCIpKQogICAgICAgICB2YWwgPSAoaW50KSh2YWwgKyAwLjUpOwogCi0gICAgZWxlbWVudCgp
LT5zZXRWYWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFsKSk7CisgICAgZWxlbWVudCgp
LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2YWwpKTsKIAogICAgIFFTbGlkZXIqIHNsaWRlciA9
IChRU2xpZGVyKil3aWRnZXQoKTsKICAgICAgCkBAIC0xMTM4LDcgKzExMzgsNyBAQCB2b2lkIFJl
bmRlclNsaWRlcjo6dmFsdWVDaGFuZ2VkKFdpZGdldCopCiAgICAgaWYgKCFlcXVhbElnbm9yaW5n
Q2FzZShwcmVjaXNpb24sICJmbG9hdCIpKQogICAgICAgICB2YWwgPSAoaW50KSh2YWwgKyAwLjUp
OwogCi0gICAgZWxlbWVudCgpLT5zZXRWYWx1ZShEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIodmFs
KSk7CisgICAgZWxlbWVudCgpLT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2YWwpKTsKICAgICAK
ICAgICAvLyBGaXJlIHRoZSAiaW5wdXQiIERPTSBldmVudC4KICAgICBlbGVtZW50KCktPmRpc3Bh
dGNoSFRNTEV2ZW50KGlucHV0RXZlbnQsIHRydWUsIGZhbHNlKTsKSW5kZXg6IGRvbS9Qb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMTM1MjcpCisr
KyBkb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODksMTIgKzY4OSwxMiBAQCB2
b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpiCiB7CiAgICAgU3RyaW5nIHJl
c3VsdDsKICAgICAKLSAgICBpZiAoaXNOdWxsKCkpIHsKKyAgICBpZiAoaXNOdWxsKCkpCiAgICAg
ICAgIHJlc3VsdCA9ICI8bnVsbD4iOwotICAgIH0gZWxzZSB7CisgICAgZWxzZSB7CiAgICAgICAg
IGNoYXIgc1sxMDI0XTsKICAgICAgICAgcmVzdWx0ICs9ICJvZmZzZXQgIjsKLSAgICAgICAgcmVz
dWx0ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX29mZnNldCk7CisgICAgICAgIHJlc3Vs
dCArPSBTdHJpbmc6Om51bWJlcihtX29mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7
CiAgICAgICAgIG1fbm9kZS0+Zm9ybWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKICAgICAg
ICAgcmVzdWx0ICs9IHM7CkluZGV4OiBkb20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGRvbS9TdHlsZWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDE1ICszMjYsMTYgQEAgdm9pZCBTdHls
ZWRFbGVtZW50OjphZGRDU1NMZW5ndGgoTWFwcGVkQQogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRD
U1NDb2xvcihNYXBwZWRBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29uc3QgU3RyaW5nICZjKQog
ewogICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSBubyBjb2xvciBnZXRzIGFwcGxpZWQgaW4g
SUUuCi0gICAgaWYgKCAhYy5sZW5ndGgoKSApCisgICAgaWYgKCFjLmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWF0dHItPmRlY2woKSkgY3JlYXRlTWFwcGVkRGVjbChhdHRy
KTsKKyAgICBpZiAoIWF0dHItPmRlY2woKSkKKyAgICAgICAgY3JlYXRlTWFwcGVkRGVjbChhdHRy
KTsKICAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgYywgZmFsc2Up
ICkKKyAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgYywgZmFsc2UpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgRGVwcmVjYXRlZFN0cmluZyBjb2xvciA9IGMuZGVwcmVj
YXRlZFN0cmluZygpOworICAgIFN0cmluZyBjb2xvciA9IGMuY29weSgpOwogICAgIC8vIG5vdCBz
b21ldGhpbmcgdGhhdCBmaXRzIHRoZSBzcGVjcy4KICAgICAKICAgICAvLyB3ZSdyZSBlbXVsYXRp
bmcgSUVzIGNvbG9yIHBhcnNlciBoZXJlLiBJdCBtYXBzIHRyYW5zcGFyZW50IHRvIGJsYWNrLCBv
dGhlcndpc2UgaXQgdHJpZXMgdG8gYnVpbGQgYSByZ2IgdmFsdWUKQEAgLTM1MiwzMCArMzUzLDMw
IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IoTWFwcGVkQXQKICAgICAvLyB1c2Vk
IGFzIGEgbm9ybWFsaXphdGlvbiBwb2ludCB0byBub3JtYWxpemUgdG8gdmFsdWVzIGJldHdlZW4g
MAogICAgIC8vIGFuZCAyNTUuCiAgICAgCi0gICAgaWYgKCBjb2xvci5sb3dlcigpICE9ICJ0cmFu
c3BhcmVudCIgKSB7Ci0gICAgICAgIGlmICggY29sb3JbMF0gPT0gJyMnICkKLSAgICAgICAgICAg
IGNvbG9yLnJlbW92ZSggMCwgIDEgKTsKKyAgICBpZiAoY29sb3IubG93ZXIoKSAhPSAidHJhbnNw
YXJlbnQiKSB7CisgICAgICAgIGlmIChjb2xvclswXSA9PSAnIycpCisgICAgICAgICAgICBjb2xv
ci5yZW1vdmUoMCwgMSk7CiAgICAgICAgIGludCBiYXNpY0xlbmd0aCA9IChjb2xvci5sZW5ndGgo
KSArIDIpIC8gMzsKLSAgICAgICAgaWYgKCBiYXNpY0xlbmd0aCA+IDEgKSB7CisgICAgICAgIGlm
IChiYXNpY0xlbmd0aCA+IDEpIHsKICAgICAgICAgICAgIC8vIElFIGlnbm9yZXMgY29sb3JzIHdp
dGggdGhyZWUgZGlnaXRzIG9yIGxlc3MKICAgICAgICAgICAgIGludCBjb2xvcnNbM10gPSB7IDAs
IDAsIDAgfTsKICAgICAgICAgICAgIGludCBjb21wb25lbnQgPSAwOwogICAgICAgICAgICAgaW50
IHBvcyA9IDA7CiAgICAgICAgICAgICBpbnQgbWF4RGlnaXQgPSBiYXNpY0xlbmd0aC0xOwotICAg
ICAgICAgICAgd2hpbGUgKCBjb21wb25lbnQgPCAzICkgeworICAgICAgICAgICAgd2hpbGUgKGNv
bXBvbmVudCA8IDMpIHsKICAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZm9yd2FyZCBmb3IgZGln
aXRzIGluIHRoZSBzdHJpbmcKICAgICAgICAgICAgICAgICBpbnQgbnVtRGlnaXRzID0gMDsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoIHBvcyA8IChpbnQpY29sb3IubGVuZ3RoKCkgJiYgbnVtRGln
aXRzIDwgYmFzaWNMZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBoZXggPSB0b0hl
eCggY29sb3JbcG9zXSApOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCAoaW50KWNvbG9y
Lmxlbmd0aCgpICYmIG51bURpZ2l0cyA8IGJhc2ljTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgIGludCBoZXggPSB0b0hleChjb2xvcltwb3NdKTsKICAgICAgICAgICAgICAgICAgICAgY29s
b3JzW2NvbXBvbmVudF0gPSAoY29sb3JzW2NvbXBvbmVudF0gPDwgNCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICggaGV4ID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhleCA+IDAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdICs9IGhleDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1heERpZ2l0ID0ga01pbiggbWF4RGlnaXQsIG51bURpZ2l0
cyApOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGlnaXQgPSBrTWluKG1heERpZ2l0LCBu
dW1EaWdpdHMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG51
bURpZ2l0cysrOwogICAgICAgICAgICAgICAgICAgICBwb3MrKzsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBudW1EaWdpdHMrKyA8IGJhc2ljTGVuZ3RoICkKKyAg
ICAgICAgICAgICAgICB3aGlsZSAobnVtRGlnaXRzKysgPCBiYXNpY0xlbmd0aCkKICAgICAgICAg
ICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gPDw9IDQ7CiAgICAgICAgICAgICAgICAgY29t
cG9uZW50Kys7CiAgICAgICAgICAgICB9CkBAIC0zODYsMTAgKzM4NywxMCBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmFkZENTU0NvbG9yKE1hcHBlZEF0CiAgICAgICAgICAgICBjb2xvcnNbMF0gPj49
IDQqbWF4RGlnaXQ7CiAgICAgICAgICAgICBjb2xvcnNbMV0gPj49IDQqbWF4RGlnaXQ7CiAgICAg
ICAgICAgICBjb2xvcnNbMl0gPj49IDQqbWF4RGlnaXQ7Ci0gICAgICAgICAgICAvLyBhc3NlcnQo
IGNvbG9yc1swXSA8IDB4MTAwICYmIGNvbG9yc1sxXSA8IDB4MTAwICYmIGNvbG9yc1syXSA8IDB4
MTAwICk7CisgICAgICAgICAgICAvLyBhc3NlcnQoY29sb3JzWzBdIDwgMHgxMDAgJiYgY29sb3Jz
WzFdIDwgMHgxMDAgJiYgY29sb3JzWzJdIDwgMHgxMDApOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjb2xvci5zcHJpbnRmKCIjJTAyeCUwMnglMDJ4IiwgY29sb3JzWzBdLCBjb2xvcnNbMV0s
IGNvbG9yc1syXSApOwotICAgICAgICAgICAgaWYgKCBhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5
KGlkLCBTdHJpbmcoY29sb3IpLCBmYWxzZSkgKQorICAgICAgICAgICAgY29sb3Iuc3ByaW50Zigi
IyUwMnglMDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0pOworICAgICAg
ICAgICAgaWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogZG9tL1Jhbmdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGRv
bS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDIsMTggKzEzMDIsMTcgQEAgdm9pZCBS
YW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZgogICAgIFN0cmluZyByZXN1bHQ7CiAg
ICAgU3RyaW5nIHM7CiAgICAgCi0gICAgaWYgKCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENv
bnRhaW5lcikgeworICAgIGlmICghbV9zdGFydENvbnRhaW5lciB8fCAhbV9lbmRDb250YWluZXIp
CiAgICAgICAgIHJlc3VsdCA9ICI8ZW1wdHk+IjsKLSAgICB9CiAgICAgZWxzZSB7CiAgICAgICAg
IGNoYXIgc1tGb3JtYXRCdWZmZXJTaXplXTsKICAgICAgICAgcmVzdWx0ICs9ICJmcm9tIG9mZnNl
dCAiOwotICAgICAgICByZXN1bHQgKz0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fc3RhcnRP
ZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1iZXIobV9zdGFydE9mZnNldCk7
CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7CiAgICAgICAgIG1fc3RhcnRDb250YWluZXItPmZv
cm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZlclNpemUpOwogICAgICAgICByZXN1bHQgKz0g
czsKICAgICAgICAgcmVzdWx0ICs9ICIgdG8gb2Zmc2V0ICI7Ci0gICAgICAgIHJlc3VsdCArPSBE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9lbmRPZmZzZXQpOworICAgICAgICByZXN1bHQgKz0g
U3RyaW5nOjpudW1iZXIobV9lbmRPZmZzZXQpOwogICAgICAgICByZXN1bHQgKz0gIiBvZiAiOwog
ICAgICAgICBtX2VuZENvbnRhaW5lci0+Zm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVy
U2l6ZSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwpJbmRleDogZG9tL3htbF90b2tlbml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS94bWxfdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTM1MjcpCisr
KyBkb20veG1sX3Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiwxNSArNTM2LDE1
IEBAIHZvaWQgWE1MVG9rZW5pemVyOjplcnJvcihFcnJvclR5cGUgdHlwZSwKIAogICAgIGlmICh0
eXBlID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJyb3JM
aW5lICE9IGxpbmVOdW1iZXIoKSAmJiBtX2xhc3RFcnJvckNvbHVtbiAhPSBjb2x1bW5OdW1iZXIo
KSkpIHsKIAotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGZvcm1hdDsKKyAgICAgICAgY29uc3Qg
Y2hhciogZm9ybWF0OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
d2FybmluZzoKLSAgICAgICAgICAgICAgICBmb3JtYXQgPSBEZXByZWNhdGVkU3RyaW5nKCJ3YXJu
aW5nIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIpOworICAgICAgICAgICAgICAgIGZvcm1h
dCA9ICJ3YXJuaW5nIG9uIGxpbmUgJWQgYXQgY29sdW1uICVkOiAlcyI7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIGZhdGFsOgogICAgICAgICAgICAgICAgIC8vIGZh
bGwgdGhyb3VnaAogICAgICAgICAgICAgY2FzZSBub25GYXRhbDoKLSAgICAgICAgICAgICAgICBm
b3JtYXQgPSBEZXByZWNhdGVkU3RyaW5nKCJlcnJvciBvbiBsaW5lICUyIGF0IGNvbHVtbiAlMzog
JTEiKTsKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSAiZXJyb3Igb24gbGluZSAlZCBhdCBjb2x1
bW4gJWQ6ICVzIjsKICAgICAgICAgfQogCiAjaWYgV0lOMzIKQEAgLTU1NCw3ICs1NTQsNyBAQCB2
b2lkIFhNTFRva2VuaXplcjo6ZXJyb3IoRXJyb3JUeXBlIHR5cGUsCiAgICAgICAgIGNoYXIgKm07
CiAgICAgICAgIHZhc3ByaW50ZigmbSwgbWVzc2FnZSwgYXJncyk7CiAjZW5kaWYKLSAgICAgICAg
bV9lcnJvck1lc3NhZ2VzICs9IGZvcm1hdC5hcmcobSkuYXJnKGxpbmVOdW1iZXIoKSkuYXJnKGNv
bHVtbk51bWJlcigpKTsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2VzICs9IFN0cmluZygpLnNwcmlu
dGYoZm9ybWF0LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpLCBtKTsKICNpZiAhV0lOMzIK
ICAgICAgICAgZnJlZShtKTsKICNlbmRpZgpJbmRleDogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDEzNTI3KQorKysgZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxMSw5ICs1MTEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0
aXZlRm9uCiAgICAgICAgICAgICBjdXJyZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVzaXJlZEZv
bnRTaXplKSB7Ci0gICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGRlc2lyZWRGb250U2l6ZVN0
cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUpOwotICAgICAg
ICAgICAgZGVzaXJlZEZvbnRTaXplU3RyaW5nICs9ICJweCI7Ci0gICAgICAgICAgICBpbmxpbmVT
dHlsZURlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0ZPTlRfU0laRSwgZGVzaXJlZEZvbnRTaXpl
U3RyaW5nLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQ
cm9wZXJ0eShDU1NfUFJPUF9GT05UX1NJWkUsIFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6
ZSkgKyAicHgiLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtLCBzdHlsZUF0dHIsIGlubGluZVN0eWxlRGVjbC0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaW5saW5lU3R5bGVEZWNsLT5sZW5ndGgoKSA9PSAwKSB7CkluZGV4OiBDaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzUyNykKKysrIENoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDE3OSBAQAogMjAwNi0wMy0yNyAgRXJpYyBT
ZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIG1vcmUgRGVwcmVjYXRlZFN0cmluZyB3aXRoIFN0
cmluZy4KKyAgICAgICAgQWRkIFN0cmluZzo6c3ByaW50ZigpIGFuZCBTdHJpbmc6Om51bWJlcigp
CisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODAwOQorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tOgorICAgICAgICAoLVtE
T01IVE1MVGV4dEFyZWFFbGVtZW50IHNldENvbHM6XSk6CisgICAgICAgICgtW0RPTUhUTUxUZXh0
QXJlYUVsZW1lbnQgc2V0Um93czpdKToKKyAgICAgICAgKC1bRE9NSFRNTE9MaXN0RWxlbWVudCBz
ZXRTdGFydDpdKToKKyAgICAgICAgKC1bRE9NSFRNTFByZUVsZW1lbnQgc2V0V2lkdGg6XSk6Cisg
ICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1lbnQgc2V0SGVpZ2h0Ol0pOgorICAgICAgICAoLVtE
T01IVE1MSW1hZ2VFbGVtZW50IHNldEhzcGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRNTEltYWdl
RWxlbWVudCBzZXRWc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1lbnQgc2V0
V2lkdGg6XSk6CisgICAgICAgICgtW0RPTUhUTUxPYmplY3RFbGVtZW50IHNldEhzcGFjZTpdKToK
KyAgICAgICAgKC1bRE9NSFRNTE9iamVjdEVsZW1lbnQgc2V0VGFiSW5kZXg6XSk6CisgICAgICAg
ICgtW0RPTUhUTUxPYmplY3RFbGVtZW50IHNldFZzcGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRN
TEFwcGxldEVsZW1lbnQgc2V0SHNwYWNlOl0pOgorICAgICAgICAoLVtET01IVE1MQXBwbGV0RWxl
bWVudCBzZXRWc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxBcmVhRWxlbWVudCBzZXRUYWJJ
bmRleDpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRhYmxlQ29sRWxlbWVudCBzZXRTcGFuOl0pOgor
ICAgICAgICAoLVtET01IVE1MVGFibGVDZWxsRWxlbWVudCBzZXRDb2xTcGFuOl0pOgorICAgICAg
ICAoLVtET01IVE1MVGFibGVDZWxsRWxlbWVudCBzZXRSb3dTcGFuOl0pOgorICAgICAgICAoLVtE
T01IVE1MRW1iZWRFbGVtZW50IHNldEhlaWdodDpdKToKKyAgICAgICAgKC1bRE9NSFRNTEVtYmVk
RWxlbWVudCBzZXRXaWR0aDpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFs
Lm1tOgorICAgICAgICAoU3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyQXNTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvY3NzX3ZhbHVlaW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAg
ICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpmb3JtYXRG
b3JEZWJ1Z2dlcik6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IpOgorICAg
ICAgICAqIGRvbS94bWxfdG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
aXplcjo6ZXJyb3IpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5
bGVDaGFuZ2UpOgorICAgICAgICAqIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpmaW5kTWF0Y2hpbmdTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50OjpzZXRUYWJJbmRl
eCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldE1heExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzZXRTaXplKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTaXplKToK
KyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Q29scyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGV4dEFyZWFFbGVtZW50OjpzZXRSb3dzKToKKyAgICAgICAgKiBodG1sL2h0bWxfYmFzZWltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCk6CisgICAgICAgICogaHRtbC9odG1sX2Jsb2NraW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSFJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUHJlRWxlbWVudDo6c2V0V2lkdGgpOgorICAgICAgICAqIGh0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6c2V0SHNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6
OnNldFZzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnNldFRhYkluZGV4KToKKyAg
ICAgICAgKiBodG1sL2h0bWxfaW5saW5laW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6c2V0VGFiSW5kZXgpOgorICAgICAgICAqIGh0bWwvaHRtbF9saXN0aW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50OjpzZXRTdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50OjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRt
bC9odG1sX29iamVjdGltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQ6OnNldFRhYkluZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxfdGFibGVpbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xTcGFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRSb3dTcGFuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFNwYW4pOgorICAgICAgICAqIGto
dG1sL2VjbWEva2pzX3dpbmRvdy5jcHA6CisgICAgICAgIChLSlM6OldpbmRvdzo6aXNTYWZlU2Ny
aXB0KToKKyAgICAgICAgKEtKUzo6TG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAg
ICAqIGtzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNWR1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VT
VkdDb2xvcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcDoKKyAgICAgICAgKFNW
R0FuZ2xlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFNWR0FuZ2xlOjp2YWx1ZUFzU3Ry
aW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5nbGUuaDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHTGVuZ3RoLmNwcDoKKyAgICAgICAgKFNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyk6
CisgICAgICAgIChTVkdMZW5ndGg6OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdMZW5ndGguaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdBcmMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNBYnM6OnBhdGhTZWdU
eXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY0Ficzo6dG9TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0FyY1JlbDo6cGF0aFNlZ1R5cGVBc0xl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjUmVsOjp0b1N0cmluZyk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDbG9zZVBhdGguaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdDbG9zZVBhdGg6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0Nsb3NlUGF0aDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6dG9TdHJpbmcpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpwYXRoU2VnVHlwZUFz
TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnRvU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwYXRoU2VnVHlwZUFz
TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVs
Ojp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6dG9TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cGF0aFNlZ1R5cGVBc0xl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvQWJzOjp0b1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvUmVsOjpwYXRoU2VnVHlwZUFzTGV0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9SZWw6OnRvU3RyaW5nKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpwYXRoU2VnVHlwZUFz
TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJz
Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bFJlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbFJlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQ
YXRoU2VnTGluZXRvVmVydGljYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnRvU3RyaW5nKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0by5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ01vdmV0b0Ficzo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnTW92ZXRvQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnTW92ZXRvUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdNb3ZldG9SZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHUG9seUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHUG9seUVsZW1lbnQ6Om5vdGlmeUF0dHJp
YnV0ZUNoYW5nZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHVXNlRWxlbWVudDo6Y2xv
c2VSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vQXRvbWljU3RyaW5nLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OnRvSW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Db2xv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnNwcmlu
dGYpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6U3RyaW5n
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppbml0V2l0aENoYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5pdFdpdGhRQ2hhcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHJpbmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjprZXlJZGVudGlmaWVy
Rm9yS2V5RXZlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6dmFsdWVDaGFuZ2VkKToKKworMjAwNi0wMy0yNyAgRXJp
YyBTZWlkZWwgIDxlc2VpZGVsQGFwcGxlLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBtanMu
CiAKICAgICAgICAgR2l2ZSBTdHJpbmdJbXBsIGEgbGl0dGxlIHByaXZhY3kuCkluZGV4OiBjc3Mv
Y3NzX3ZhbHVlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL2Nzc192YWx1ZWltcGwuY3BwCShy
ZXZpc2lvbiAxMzUyNykKKysrIGNzcy9jc3NfdmFsdWVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjk2LDcgKzI5Niw2IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHIKICAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7CiAg
ICAgfQogICAgIH0KLSAgICAvL2tkRGVidWcoKSA8PCBrX2Z1bmNpbmZvIDw8ICJwcm9wZXJ0eSBu
b3QgZm91bmQ6IiA8PCBwcm9wZXJ0eUlEIDw8IGVuZGw7CiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCkBAIC05MzgsNTUgKzkzNyw1NSBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1Rl
eHQoKSBjb25zCiAgICAgICAgICAgICAvLyAjIyMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU19OVU1CRVI6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKG1fdmFsdWUubnVtKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlciht
X3ZhbHVlLm51bSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUEVSQ0VO
VEFHRToKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgIiUiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICIlIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19FTVM6Ci0g
ICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSAr
ICJlbSI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsg
ImVtIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19FWFM6Ci0gICAgICAg
ICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJleCI7
CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImV4IjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19QWDoKLSAgICAgICAgICAgIHRl
eHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB4IjsKKyAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiY20iOworICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJjbSI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfTU06Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtbSI7CisgICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1tIjsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU19JTjoKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgImluIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaW4iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAicHQiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJwdCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
U1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUubnVtKSArICJwYyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgInBjIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19ERUc6
Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJkZWciOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJkZWciOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1JBRDoKLSAg
ICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsg
InJhZCI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsg
InJhZCI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfR1JBRDoKLSAgICAg
ICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImdy
YWQiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJn
cmFkIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19NUzoKLSAgICAgICAg
ICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsK
KyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibXMiOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1M6Ci0gICAgICAgICAgICB0ZXh0
ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJzIjsKKyAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicyI7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfSFo6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJoeiI7CisgICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJraHoiOworICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJraHoiOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ1NTX0RJTUVOU0lPTjoKICAgICAgICAgICAgIC8vICMjIwpAQCAtMTAyMSwx
MSArMTAyMCwxMSBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zCiAg
ICAgICAgICAgICAgICAgdGV4dCA9ICJyZ2JhKCI7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgdGV4dCA9ICJyZ2IoIjsKLSAgICAgICAgICAgIHRleHQgKz0gRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKGNvbG9yLnJlZCgpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xvci5ncmVlbigpKSArICIsICI7Ci0gICAgICAgICAg
ICB0ZXh0ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xvci5ibHVlKCkpOworICAgICAg
ICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5yZWQoKSkgKyAiLCAiOworICAgICAg
ICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5ncmVlbigpKSArICIsICI7CisgICAg
ICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLmJsdWUoKSk7CiAgICAgICAgICAg
ICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4RkYpCi0gICAgICAgICAgICAgICAgdGV4dCArPSAiLCAi
ICsgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7
CisgICAgICAgICAgICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZsb2F0KWNv
bG9yLmFscGhhKCkgLyAweEZGKTsKICAgICAgICAgICAgIHRleHQgKz0gIikiOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CShyZXZpc2lvbiAxMzUyNykKKysrIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTAgKzI5NywxMCBAQCB2b2lkIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6c2V0Q3NzCiB9CiAKIC8vIERpc3BsYXkgaW50ZWdlcnMgaW4gaW50ZWdl
ciBmb3JtYXQgaW5zdGVhZCBvZiAiMS4wIi4KLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG51bWJl
ckFzU3RyaW5nKGRvdWJsZSBuKQorc3RhdGljIFN0cmluZyBudW1iZXJBc1N0cmluZyhkb3VibGUg
bikKIHsKICAgICBsb25nIGkgPSBzdGF0aWNfY2FzdDxsb25nPihuKTsKLSAgICByZXR1cm4gaSA9
PSBuID8gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGkpIDogRGVwcmVjYXRlZFN0cmluZzo6bnVt
YmVyKG4pOworICAgIHJldHVybiBpID09IG4gPyBTdHJpbmc6Om51bWJlcihpKSA6IFN0cmluZzo6
bnVtYmVyKG4pOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0CkBAIC0z
OTEsMTAgKzM5MSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMK
ICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTX1ZBTF9TRVBBUkFU
RSk7CiAgICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfU1BBQ0lORzoKICAgICB7Ci0gICAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgc3RyaW5nKG51bWJlckFzU3RyaW5nKHN0eWxlLT5ob3Jpem9udGFsQm9y
ZGVyU3BhY2luZygpKSArIAotICAgICAgICAgICAgInB4ICIgKyAKLSAgICAgICAgICAgIG51bWJl
ckFzU3RyaW5nKHN0eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSkgKwotICAgICAgICAgICAg
InB4Iik7CisgICAgICAgIFN0cmluZyBzdHJpbmcobnVtYmVyQXNTdHJpbmcoc3R5bGUtPmhvcml6
b250YWxCb3JkZXJTcGFjaW5nKCkpICsgInB4ICIgKyBudW1iZXJBc1N0cmluZyhzdHlsZS0+dmVy
dGljYWxCb3JkZXJTcGFjaW5nKCkpICsgInB4Iik7CiAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoc3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAg
fQogICAgIGNhc2UgQ1NTX1BST1BfX0tIVE1MX0JPUkRFUl9IT1JJWk9OVEFMX1NQQUNJTkc6Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJKHJldmlzaW9uIDEzNTI3KQorKysga3N2
ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCAr
MzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM7IH0KLSAgICAg
ICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1
cm4gbmV3IFN0cmluZ0ltcGwoIkMiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4x
KCJDICUxICUyICUzICU0ICU1ICU2IikuYXJnKG1feDEpLmFyZyhtX3kxKS5hcmcobV94MikuYXJn
KG1feTIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhT
ZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiQyI7IH0KKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJDICUuNmxn
ICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94MiwgbV95Miwg
bV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJs
ZSB4KCkgY29uc3Q7CkBAIC03Miw4ICs3Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJW
RVRPX0NVQklDX1JFTDsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBl
QXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiYyIpOyB9Ci0gICAgICAg
IHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJl
Y2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoImMgJTEgJTIgJTMgJTQgJTUgJTYiKS5hcmcobV94MSku
YXJnKG1feTEpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJj
IjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0
cmluZygpLnNwcmludGYoImMgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBt
X3gxLCBtX3kxLCBtX3gyLCBtX3kyLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgo
ZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdB
bmdsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAkocmV2aXNpb24g
MTM1MjcpCisrKyBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5
ICs4Niw5IEBAIGZsb2F0IFNWR0FuZ2xlOjp2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSAKICAgICBy
ZXR1cm4gbV92YWx1ZUluU3BlY2lmaWVkVW5pdHM7CiB9CiAKLXZvaWQgU1ZHQW5nbGU6OnNldFZh
bHVlQXNTdHJpbmcoU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZykKK3ZvaWQgU1ZHQW5nbGU6OnNl
dFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQogewotICAgIG1fdmFsdWVBc1N0cmluZyA9
IFN0cmluZyh2YWx1ZUFzU3RyaW5nKTsKKyAgICBtX3ZhbHVlQXNTdHJpbmcgPSBzOwogCiAgICAg
Ym9vbCBiT0s7CiAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBtX3ZhbHVlQXNTdHJpbmcu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCZiT0spOwpAQCAtMTA2LDkgKzEwNiw5IEBAIHZv
aWQgU1ZHQW5nbGU6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSW0KICAgICBjYWxjdWxhdGUoKTsK
IH0KIAotU3RyaW5nSW1wbCAqU1ZHQW5nbGU6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorU3RyaW5n
IFNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICBtX3ZhbHVlQXNTdHJpbmcg
PSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMpOworICAg
IG1fdmFsdWVBc1N0cmluZyA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
KTsKIAogICAgIHN3aXRjaChtX3VuaXRUeXBlKSB7CiAgICAgICAgIGNhc2UgU1ZHX0FOR0xFVFlQ
RV9VTlNQRUNJRklFRDoKQEAgLTEyMyw3ICsxMjMsNyBAQCBTdHJpbmdJbXBsICpTVkdBbmdsZTo6
dmFsdWVBc1N0cmluZygpIGNvCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIG1fdmFsdWVBc1N0cmluZy5pbXBsKCk7CisgICAgcmV0dXJuIG1fdmFsdWVBc1N0cmlu
ZzsKIH0KIAogdm9pZCBTVkdBbmdsZTo6bmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBz
aG9ydCB1bml0VHlwZSwgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKQpJbmRleDoga3N2ZzIv
c3ZnL1NWR1BhdGhTZWdMaW5ldG8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNl
Z0xpbmV0by5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0b0FicygpOwogCiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVU
T19BQlM7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVy
KCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIkwiKTsgfQotICAgICAgICB2aXJ0dWFs
IERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nOjpmcm9tTGF0aW4xKCJMICUxICUyIikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAg
dmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJMIjsg
fQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZygpLnNwcmludGYoIkwgJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lk
IHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTU2LDggKzU2LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpbmV0b1Jl
bCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25z
dCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJ
bXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwo
ImwiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJsICUxICUyIikuYXJnKG1f
eCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRl
cigpIGNvbnN0IHsgcmV0dXJuICJsIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoImwgJS42bGcgJS42bGciLCBtX3gs
IG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgo
KSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCShyZXZp
c2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzKCk7CiAKICAgICAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdf
TElORVRPX0hPUklaT05UQUxfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJIIik7IH0K
LSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiSCAlMSIpLmFyZyhtX3gpOyB9CisgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAi
SCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKS5zcHJpbnRmKCJIICUuNmxnIiwgbV94KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChk
b3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpAQCAtNTIsOCArNTIsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bFJlbCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBj
b25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTDsgfQotICAgICAgICB2
aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBu
ZXcgU3RyaW5nSW1wbCgiaCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0
b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoImgg
JTEiKS5hcmcobV94KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0
dGVyKCkgY29uc3QgeyByZXR1cm4gImgiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiaCAlLjZsZyIsIG1feCk7IH0K
IAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdMZW5ndGguY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdMZW5ndGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTMgKzEwOSwxMiBAQCBmbG9hdCBTVkdMZW5ndGg6OnZh
bHVlSW5TcGVjaWZpZWRVbml0cygpCiAgICAgcmV0dXJuIG1fdmFsdWVJblNwZWNpZmllZFVuaXRz
OwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCi12
b2lkIFNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJbXBsKiBzKQordm9pZCBTVkdM
ZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQogewotICAgIFN0cmluZyB2
YWx1ZUFzU3RyaW5nKHMpOwotICAgIGlmKHZhbHVlQXNTdHJpbmcuaXNFbXB0eSgpKQorICAgIGlm
KHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHZh
bHVlQXNRU3RyaW5nID0gdmFsdWVBc1N0cmluZy5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVw
cmVjYXRlZFN0cmluZyB2YWx1ZUFzUVN0cmluZyA9IHMuZGVwcmVjYXRlZFN0cmluZygpOwogCiAg
ICAgZG91YmxlIGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAgY29uc3QgY2hhciAqc3RhcnQgPSB2
YWx1ZUFzUVN0cmluZy5sYXRpbjEoKTsKQEAgLTEyMywyNyArMTIyLDI2IEBAIHZvaWQgU1ZHTGVu
Z3RoOjpzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0kKICAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0
cyA9IGNvbnZlcnRlZE51bWJlcjsKIAogICAgIHVuc2lnbmVkIGludCBkaWZmID0gZW5kIC0gc3Rh
cnQ7Ci0gICAgaWYoZGlmZiA8IHZhbHVlQXNRU3RyaW5nLmxlbmd0aCgpKQotICAgIHsKLSAgICAg
ICAgaWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfUFhd
KSkKKyAgICBpZiAoZGlmZiA8IHZhbHVlQXNRU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGlm
IChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BYXSkpCiAgICAgICAgICAgICBt
X3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfUFg7Ci0gICAgICAgIGVsc2UgaWYodmFsdWVBc1FT
dHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfQ01dKSkKKyAgICAgICAgZWxz
ZSBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9DTV0pKQogICAgICAgICAg
ICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX0NNOwotICAgICAgICBlbHNlIGlmKHZhbHVl
QXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BDXSkpCisgICAgICAg
IGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfUENdKSkKICAgICAg
ICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9QQzsKLSAgICAgICAgZWxzZSBpZih2
YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9NTV0pKQorICAg
ICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX01NXSkpCiAg
ICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfTU07Ci0gICAgICAgIGVsc2Ug
aWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfSU5dKSkK
KyAgICAgICAgZWxzZSBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9JTl0p
KQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX0lOOwotICAgICAgICBl
bHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BU
XSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVf
UFRdKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9QVDsKLSAgICAg
ICAgIGVsc2UgaWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRV0pKQorICAgICAgICAgZWxzZSBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtT
VkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZH
X0xFTkdUSFRZUEVfUEVSQ0VOVEFHRTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5l
bmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9FTVNdKSkKKyAgICAgICAgZWxzZSBpZiAo
cy5lbmRzV2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9FTVNdKSkKICAgICAgICAgICAgIG1f
dW5pdFR5cGUgPSBTVkdfTEVOR1RIVFlQRV9FTVM7Ci0gICAgICAgIGVsc2UgaWYodmFsdWVBc1FT
dHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRVhTXSkpCisgICAgICAgIGVs
c2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfRVhTXSkpCiAgICAgICAg
ICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfRVhTOwotICAgICAgICBlbHNlIGlmKHZh
bHVlQXNRU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgZWxzZSBpZiAocy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfTlVNQkVSOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVfVU5LTk9XTjsKQEAg
LTE1NCw5ICsxNTIsOSBAQCB2b2lkIFNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJ
CiAgICAgdXBkYXRlVmFsdWUoKTsKIH0KIAotU3RyaW5nSW1wbCAqU1ZHTGVuZ3RoOjp2YWx1ZUFz
U3RyaW5nKCkgY29uc3QKK1N0cmluZyBTVkdMZW5ndGg6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBuZXcgU3RyaW5nSW1wbChEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92
YWx1ZUluU3BlY2lmaWVkVW5pdHMpICsgVW5pdFRleHRbbV91bml0VHlwZV0pOworICAgIHJldHVy
biBTdHJpbmc6Om51bWJlcihtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cykgKyBVbml0VGV4dFttX3Vu
aXRUeXBlXTsKIH0KIAogdm9pZCBTVkdMZW5ndGg6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5z
aWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAkocmV2aXNpb24gMTM1Mjcp
CisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwg
flNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRP
X0NVQklDX1NNT09USF9BQlM7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2Vn
VHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIlMiKTsgfQotICAg
ICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJTICUxICUyICUzICU0IikuYXJnKG1feDIpLmFy
ZyhtX3kyKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRo
U2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIlMiOyB9CisgICAgICAgIHZpcnR1YWwg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiUyAlLjZs
ZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDIsIG1feTIsIG1feCwgbV95KTsgfQogCiAgICAgICAg
IHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpAQCAtNjQsOCAr
NjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBw
YXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhf
UkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigp
IGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJzIik7IH0KLSAgICAgICAgdmlydHVhbCBE
ZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
Zzo6ZnJvbUxhdGluMSgicyAlMSAlMiAlMyAlNCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1f
eCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRl
cigpIGNvbnN0IHsgcmV0dXJuICJzIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoInMgJS42bGcgJS42bGcgJS42bGcg
JS42bGciLCBtX3gyLCBtX3kyLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91
YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpYy5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJRIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
USAlMSAlMiAlMyAlNCIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feCkuYXJnKG1feSk7IH0K
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0
dXJuICJRIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIFN0cmluZygpLnNwcmludGYoIlEgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBtX3gxLCBt
X3kxLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAg
ZG91YmxlIHgoKSBjb25zdDsKQEAgLTY0LDggKzY0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoKTsKIAogICAgICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFU
SFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBs
ICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoInEi
KTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7
IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJxICUxICUyICUzICU0IikuYXJn
KG1feDEpLmFyZyhtX3kxKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0
cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gInEiOyB9CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50
ZigicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDEsIG1feTEsIG1feCwgbV95KTsgfQog
IAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR1BhdGhTZWdBcmMuaAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNl
Z0FyYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdBcmNBYnMoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19BUkNf
QUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigp
IGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJBIik7IH0KLSAgICAgICAgdmlydHVhbCBE
ZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
Zzo6ZnJvbUxhdGluMSgiQSAlMSAlMiAlMyAlNCAlNSAlNiAlNyIpLmFyZyhtX3IxKS5hcmcobV9y
MikuYXJnKG1fYW5nbGUpLmFyZyhtX2xhcmdlQXJjRmxhZykuYXJnKG1fc3dlZXBGbGFnKS5hcmco
bV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0
dGVyKCkgY29uc3QgeyByZXR1cm4gIkEiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCkuc3ByaW50ZigiQSAlLjZsZyAlLjZsZyAlLjZs
ZyAlZCAlZCAlLjZsZyAlLjZsZyIsIG1fcjEsIG1fcjIsIG1fYW5nbGUsIG1fbGFyZ2VBcmNGbGFn
LCBtX3N3ZWVwRmxhZywgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSB4
KTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTc3LDggKzc3LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0FyY1JlbCgpOwogCiAgICAgICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRI
U0VHX0FSQ19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFz
TGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoImEiKTsgfQotICAgICAgICB2
aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNh
dGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJhICUxICUyICUzICU0ICU1ICU2ICU3IikuYXJnKG1fcjEp
LmFyZyhtX3IyKS5hcmcobV9hbmdsZSkuYXJnKG1fbGFyZ2VBcmNGbGFnKS5hcmcobV9zd2VlcEZs
YWcpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdU
eXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiYSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJhICUuNmxnICUu
NmxnICUuNmxnICVkICVkICUuNmxnICUuNmxnIiwgbV9yMSwgbV9yMiwgbV9hbmdsZSwgbV9sYXJn
ZUFyY0ZsYWcsIG1fc3dlZXBGbGFnLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgo
ZG91YmxlIHgpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NW
R1BhdGhTZWdNb3ZldG8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ01vdmV0
by5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCB+U1ZHUGF0aFNlZ01vdmV0b0FicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX01PVkVUT19BQlM7
IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29u
c3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIk0iKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJl
Y2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpm
cm9tTGF0aW4xKCJNICUxICUyIikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJNIjsgfQorICAg
ICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNw
cmludGYoIk0gJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgo
ZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTU2LDggKzU2LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ01vdmV0b1JlbCgpOwog
CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBQQVRIU0VHX01PVkVUT19SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIm0iKTsg
fQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJtICUxICUyIikuYXJnKG1feCkuYXJn
KG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuICJtIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIm0gJS42bGcgJS42bGciLCBtX3gsIG1feSk7
IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25z
dDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ2xvc2VQYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdDbG9zZVBhdGguaAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3Zn
Mi9zdmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDbG9zZVBh
dGgoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29u
c3QgeyByZXR1cm4gUEFUSFNFR19DTE9TRVBBVEg7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJ
bXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwo
IloiKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25z
dCB7IHJldHVybiAiWiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xl
dHRlcigpIGNvbnN0IHsgcmV0dXJuICJaIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuICJaIjsgfQogICAgIH07CiB9OwogCkluZGV4OiBrc3ZnMi9z
dmcvU1ZHTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0xlbmd0aC5oCShyZXZp
c2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdMZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsOCArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBmbG9hdCB2YWx1ZUluU3Bl
Y2lmaWVkVW5pdHMoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRWYWx1ZUluU3BlY2lmaWVkVW5p
dHMoZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKIAotICAgICAgICBTdHJpbmdJbXBsICp2
YWx1ZUFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhTdHJp
bmdJbXBsICp2YWx1ZUFzU3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBj
b25zdDsKKyAgICAgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgICAgIHZvaWQgbmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSwgZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgdm9pZCBjb252ZXJ0VG9T
cGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsMTUgKzU0LDE0IEBAIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXQKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7Ci0g
ICAgICAgIGlmKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS5lbmRzV2l0aCgiJSIpKQorICAgICAg
ICBpZih2YWx1ZS5lbmRzV2l0aCgiJSIpKQogICAgICAgICAgICAgb2Zmc2V0KCktPnNldEJhc2VW
YWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0Rv
dWJsZSgpIC8gMTAwLik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG9mZnNldCgpLT5zZXRC
YXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAK
LSAgICBpZighb3duZXJEb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgYXR0YWNoZWQoKSkKLSAgICB7
CisgICAgaWYgKCFvd25lckRvY3VtZW50KCktPnBhcnNpbmcoKSAmJiBhdHRhY2hlZCgpKSB7CiAg
ICAgICAgIHJlY2FsY1N0eWxlKEZvcmNlKTsKICAgICAgICAgCiAgICAgICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKnBhcmVudFN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQgKj4ocGFy
ZW50Tm9kZSgpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmdsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdBbmdsZS5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdBbmds
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZvaWQgc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlSW5TcGVjaWZp
ZWRVbml0cyk7CiAgICAgICAgIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cygpIGNvbnN0Owog
Ci0gICAgICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJbXBsICp2YWx1ZUFzU3RyaW5n
KTsKLSAgICAgICAgU3RyaW5nSW1wbCAqdmFsdWVBc1N0cmluZygpIGNvbnN0OworICAgICAgICB2
b2lkIHNldFZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBuZXdWYWx1ZVNwZWNpZmllZFVuaXRz
KHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
ICAgICAgICB2b2lkIGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR1BhdGhTZWcuaAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNl
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaWYgU1ZHX1NVUFBPUlQKIAog
I2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSAia3N2Zy5oIgogCkBAIC00MCw4ICs0MCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWcoKTsKIAogICAg
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4g
UEFUSFNFR19VTktOT1dOOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5
cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCIiKTsgfQotICAgICAg
ICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCIiKTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiAiIjsgfQogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICptX2NvbnRleHQ7CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQb2x5
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50
Ojpub3RpZnlBdHRyaWJ1dGVDaGFuCiAgICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0
ZW1zKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICBTVkdQ
b2ludCAqcCA9IHBvaW50cygpLT5nZXRJdGVtKGkpOwotICAgICAgICBfcG9pbnRzICs9IERlcHJl
Y2F0ZWRTdHJpbmcoIiUxICUyICIpLmFyZyhwLT54KCkpLmFyZyhwLT55KCkpOworICAgICAgICBf
cG9pbnRzICs9IFN0cmluZygpLnNwcmludGYoIiUuNmxnICUuNmxnICIsIHAtPngoKSwgcC0+eSgp
KTsKICAgICB9CiAKICAgICBTdHJpbmcgcCgicG9pbnRzIik7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAkocmV2aXNpb24gMTM1MjcpCisrKyBr
c3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5T
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicygpOwogCiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NVUlZF
VE9fUVVBRFJBVElDX1NNT09USF9BQlM7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIlQiKTsg
fQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJUICUxICUyIikuYXJnKG1feCkuYXJn
KG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuICJUIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYoIlQgJS42bGcgJS42bGciLCBtX3gsIG1feSk7
IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25z
dDsKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJW
RVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAq
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJ0Iik7
IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgidCAlMSAlMiIpLmFyZyhtX3gpLmFy
ZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiAidCI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBTdHJpbmcoKS5zcHJpbnRmKCJ0ICUuNmxnICUuNmxnIiwgbV94LCBtX3kp
OyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29u
c3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCShyZXZpc2lvbiAxMzUy
NykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsflNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
c2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0xJTkVUT19WRVJUSUNB
TF9BQlM7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVy
KCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIlYiKTsgfQotICAgICAgICB2aXJ0dWFs
IERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3Ry
aW5nOjpmcm9tTGF0aW4xKCJWICUxIikuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJWIjsgfQorICAgICAgICB2
aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpLnNwcmludGYo
IlYgJS42bGciLCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRZKGRvdWJsZSk7CiAgICAgICAg
IGRvdWJsZSB5KCkgY29uc3Q7CkBAIC01Miw4ICs1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCgpOwogCiAgICAgICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRI
U0VHX0xJTkVUT19WRVJUSUNBTF9SRUw7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpw
YXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoInYiKTsg
fQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJ2ICUxIikuYXJnKG1feSk7IH0KKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
ICJ2IjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZygpLnNwcmludGYoInYgJS42bGciLCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRZ
KGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB5KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDE4ICsxMTEsMTcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9zZVJl
bmRlcmVyKCkKICAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHko
KS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF93ID0gd2lkdGgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpLCBfaCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgCi0gICAg
U3RyaW5nIHdTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoX3cpOwotICAgIFN0cmlu
ZyBoU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKF9oKTsKKyAgICBTdHJpbmcgd1N0
cmluZyA9IFN0cmluZzo6bnVtYmVyKF93KTsKKyAgICBTdHJpbmcgaFN0cmluZyA9IFN0cmluZzo6
bnVtYmVyKF9oKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIERlcHJlY2F0ZWRT
dHJpbmcgdHJhbnMgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJ0cmFuc2xhdGUoJTEs
ICUyKSIpLmFyZyhfeCkuYXJnKF95KTsKLSAgICBpZih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnN5bWJvbFRhZykpCi0gICAgeworICAgIFN0cmluZyB0cmFucyA9IFN0cmluZygpLnNwcmlu
dGYoInRyYW5zbGF0ZSglZiwgJWYpIiwgX3gsIF95KTsKKyAgICBpZih0YXJnZXQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpIHsKICAgICAgICAgUmVmUHRyPFNWR0VsZW1lbnQ+IGR1
bW15ID0gbmV3IFNWR1NWR0VsZW1lbnQoU1ZHTmFtZXM6OnN2Z1RhZywgZ2V0RG9jdW1lbnQoKSk7
Ci0gICAgICAgIGlmKF93ID4gMCkKLSAgICAgICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZy5pbXBsKCkpOwotICAgICAgICBpZihfaCA+IDApCi0g
ICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyLCBoU3Ry
aW5nLmltcGwoKSk7CisgICAgICAgIGlmIChfdyA+IDApCisgICAgICAgICAgICBkdW1teS0+c2V0
QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIsIHdTdHJpbmcpOworICAgICAgICBpZiAoX2gg
PiAwKQorICAgICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0
ciwgaFN0cmluZyk7CiAgICAgICAgIAogICAgICAgICBTVkdTeW1ib2xFbGVtZW50ICpzeW1ib2wg
PSBzdGF0aWNfY2FzdDxTVkdTeW1ib2xFbGVtZW50ICo+KHRhcmdldCk7CiAgICAgICAgIGlmIChz
eW1ib2wtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7CkBAIC0xMzIsMjgg
KzEzMSwyNCBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgICAgICB0
YXJnZXQtPmNsb25lQ2hpbGROb2RlcyhkdW1teS5nZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFNW
R0VsZW1lbnQ+IGR1bW15MiA9IG5ldyBTVkdEdW1teUVsZW1lbnQoU1ZHTmFtZXM6OmdUYWcsIGdl
dERvY3VtZW50KCkpOwotICAgICAgICBkdW1teTItPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJh
bnNmb3JtQXR0ciwgU3RyaW5nKHRyYW5zKSk7CisgICAgICAgIGR1bW15Mi0+c2V0QXR0cmlidXRl
KFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCB0cmFucyk7CiAgICAgICAgIAogICAgICAgICBhcHBl
bmRDaGlsZChkdW1teTIsIGVjKTsKICAgICAgICAgZHVtbXkyLT5hcHBlbmRDaGlsZChkdW1teSwg
ZWMpOwotICAgIH0KLSAgICBlbHNlIGlmKHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3Zn
VGFnKSkKLSAgICB7CisgICAgfSBlbHNlIGlmKHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6
c3ZnVGFnKSkgewogICAgICAgICBSZWZQdHI8U1ZHRHVtbXlFbGVtZW50PiBkdW1teSA9IG5ldyBT
VkdEdW1teUVsZW1lbnQoU1ZHTmFtZXM6OmdUYWcsIGdldERvY3VtZW50KCkpOwotICAgICAgICBk
dW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBTdHJpbmcodHJhbnMp
KTsKKyAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwg
dHJhbnMpOwogICAgICAgICAKICAgICAgICAgUmVmUHRyPFNWR0VsZW1lbnQ+IHJvb3QgPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldC0+Y2xvbmVOb2RlKHRydWUpKTsKICAg
ICAgICAgaWYoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICAgICAg
cm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIsIHdTdHJpbmcuaW1wbCgpKTsK
KyAgICAgICAgICAgIHJvb3QtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3U3Ry
aW5nKTsKICAgICAgICAgICAgIAogICAgICAgICBpZihoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Omhl
aWdodEF0dHIpKQotICAgICAgICAgICAgcm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjpoZWln
aHRBdHRyLCBoU3RyaW5nLmltcGwoKSk7CisgICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcpOwogICAgICAgICAgICAgCiAgICAgICAgIGFw
cGVuZENoaWxkKGR1bW15LCBlYyk7CiAgICAgICAgIGR1bW15LT5hcHBlbmRDaGlsZChyb290LnJl
bGVhc2UoKSwgZWMpOwotICAgIH0KLSAgICBlbHNlCi0gICAgeworICAgIH0gZWxzZSB7CiAgICAg
ICAgIFJlZlB0cjxTVkdEdW1teUVsZW1lbnQ+IGR1bW15ID0gbmV3IFNWR0R1bW15RWxlbWVudChT
VkdOYW1lczo6Z1RhZywgZ2V0RG9jdW1lbnQoKSk7CiAgICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5zKTsKICAgICAgICAgCkluZGV4OiBrc3Zn
Mi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9jc3MvU1ZHQ1NTUGFy
c2VyLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDkgKzM0NSw5IEBAIENTU1ZhbHVlICpDU1NQYXJzZXI6OnBh
cnNlU1ZHUGFpbnQoKQogICAgIEtET01DU1NWYWx1ZSAqdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKICAgICBpZighc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSICYmCiAgICAgICAgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZh
bHVlIDwgMTAwMDAwMC4pIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7CisgICAgICAg
IFN0cmluZyBzdHI7CiAgICAgICAgIHN0ci5zcHJpbnRmKCIlMDZkIiwgKGludCkodmFsdWUtPmZW
YWx1ZSsuNSkpOwotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVfUkdC
Q09MT1IsIDAsIG5ldyBTdHJpbmdJbXBsKHN0cikpOworICAgICAgICByZXR1cm4gbmV3IFNWR1Bh
aW50KFNWR19QQUlOVFRZUEVfUkdCQ09MT1IsIDAsIHN0ci5pbXBsKCkpOwogICAgIH0gZWxzZSBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUikgewogICAg
ICAgICBTdHJpbmcgc3RyID0gIiMiICsgZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpOwogICAgICAg
ICByZXR1cm4gbmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVfUkdCQ09MT1IsIDAsIHN0ci5pbXBs
KCkpOwpAQCAtMzc5LDkgKzM3OSw4IEBAIENTU1ZhbHVlICpDU1NQYXJzZXI6OnBhcnNlU1ZHUGFp
bnQoKQogICAgICAgICByID0ga01heCgwLCBrTWluKDI1NSwgcikpOwogICAgICAgICBnID0ga01h
eCgwLCBrTWluKDI1NSwgZykpOwogICAgICAgICBiID0ga01heCgwLCBrTWluKDI1NSwgYikpOwot
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cjsKLSAgICAgICAgc3RyLnNwcmludGYoInJnYigl
ZCwgJWQsICVkKSIsIHIsIGcsIGIpOwotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50KFNWR19Q
QUlOVFRZUEVfUkdCQ09MT1IsIDAsIG5ldyBTdHJpbmdJbXBsKHN0cikpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCAwLCBTdHJp
bmcoKS5zcHJpbnRmKCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKS5pbXBsKCkpOwogICAgIH0K
ICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzkyLDEyICszOTEsOSBAQCBDU1NWYWx1
ZSAqQ1NTUGFyc2VyOjpwYXJzZVNWR1BhaW50KCkKIENTU1ZhbHVlICpDU1NQYXJzZXI6OnBhcnNl
U1ZHQ29sb3IoKQogewogICAgIEtET01DU1NWYWx1ZSAqdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJl
bnQoKTsKLSAgICBpZighc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSICYmCi0gICAgICAgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZh
bHVlIDwgMTAwMDAwMC4pIHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7Ci0gICAgICAg
IHN0ci5zcHJpbnRmKCIlMDZkIiwgKGludCkodmFsdWUtPmZWYWx1ZSsuNSkpOwotICAgICAgICBy
ZXR1cm4gbmV3IFNWR0NvbG9yKG5ldyBTdHJpbmdJbXBsKHN0cikpOwotICAgIH0gZWxzZSBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUikgeworICAgIGlm
ICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
ICYmIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKQorICAg
ICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKFN0cmluZygpLnNwcmludGYoIiUwNmQiLCAoaW50KSh2
YWx1ZS0+ZlZhbHVlKy41KSkuaW1wbCgpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SKSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSAi
IyIgKyBkb21TdHJpbmcodmFsdWUtPnN0cmluZyk7CiAgICAgICAgIHJldHVybiBuZXcgU1ZHQ29s
b3Ioc3RyLmltcGwoKSk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UIHx8ICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkKQEAgLTQyNSw5ICs0MjEsOCBAQCBDU1NWYWx1ZSAq
Q1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKCkKICAgICAgICAgciA9IGtNYXgoMCwga01pbigyNTUs
IHIpKTsKICAgICAgICAgZyA9IGtNYXgoMCwga01pbigyNTUsIGcpKTsKICAgICAgICAgYiA9IGtN
YXgoMCwga01pbigyNTUsIGIpKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzdHI7Ci0gICAg
ICAgIHN0ci5zcHJpbnRmKCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKTsKLSAgICAgICAgcmV0
dXJuIG5ldyBTVkdDb2xvcihuZXcgU3RyaW5nSW1wbChzdHIpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBuZXcgU1ZHQ29sb3IoU3RyaW5nKCkuc3ByaW50ZigicmdiKCVkLCAlZCwgJWQpIiwg
ciwgZywgYikuaW1wbCgpKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7351</attachid>
            <date>2006-03-27 23:39:25 -0800</date>
            <delta_ts>2006-03-28 10:16:22 -0800</delta_ts>
            <desc>Addresses darin&apos;s comments.</desc>
            <filename>final.patch</filename>
            <type>text/plain</type>
            <size>77849</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBraHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIzLDEwICsxMjIzLDkgQEAgYm9vbCBXaW5kb3c6
OmlzU2FmZVNjcmlwdChjb25zdCBTY3JpcHRJbgogICAgICAgICBwcmludGYoIlVuc2FmZSBKYXZh
U2NyaXB0IGF0dGVtcHQgdG8gYWNjZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0
aCBVUkwgJXMuIERvbWFpbnMgbXVzdCBtYXRjaC5cbiIsIAogICAgICAgICAgICAgIHRhcmdldERv
Y3VtZW50LT5VUkwoKS5sYXRpbjEoKSwgb3JpZ2luRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpKTsK
ICAgICB9Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBtZXNzYWdlOwotICAgIG1lc3NhZ2Uuc3ByaW50
ZigiVW5zYWZlIEphdmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMg
ZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCisgICAgU3Ry
aW5nIG1lc3NhZ2UgPSBTdHJpbmc6OnNwcmludGYoIlVuc2FmZSBKYXZhU2NyaXB0IGF0dGVtcHQg
dG8gYWNjZXNzIGZyYW1lIHdpdGggVVJMICVzIGZyb20gZnJhbWUgd2l0aCBVUkwgJXMuIERvbWFp
bnMgbXVzdCBtYXRjaC5cbiIsIAogICAgICAgICAgICAgICAgICAgdGFyZ2V0RG9jdW1lbnQtPlVS
TCgpLmxhdGluMSgpLCBvcmlnaW5Eb2N1bWVudC0+VVJMKCkubGF0aW4xKCkpOwotICAgIHRhcmdl
dFBhcnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5nKG1lc3NhZ2UpLCAxLCBTdHJpbmcoKSk7
IC8vZml4bWU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2V1cmwKKyAgICB0
YXJnZXRQYXJ0LT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIDEsIFN0cmluZygpKTsgLy9m
aXhtZTogcHJvdmlkZSBhIHJlYWwgbGluZSBudW1iZXIgYW5kIHNvdXJjZXVybAogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMTI4NSwxMCArMTI4NCw5IEBAIGJvb2wgV2luZG93Ojppc1NhZmVT
Y3JpcHQoRXhlY1N0YXRlICpleGUKICAgICAgIHByaW50ZigiVW5zYWZlIEphdmFTY3JpcHQgYXR0
ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAlcy4g
RG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgdGhpc0RvY3VtZW50LT5VUkwo
KS5sYXRpbjEoKSwgYWN0RG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpKTsKICAgfQotICBEZXByZWNh
dGVkU3RyaW5nIG1lc3NhZ2U7Ci0gIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEphdmFTY3JpcHQg
YXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3aXRoIFVSTCAl
cy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCisgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpz
cHJpbnRmKCJVbnNhZmUgSmF2YVNjcmlwdCBhdHRlbXB0IHRvIGFjY2VzcyBmcmFtZSB3aXRoIFVS
TCAlcyBmcm9tIGZyYW1lIHdpdGggVVJMICVzLiBEb21haW5zIG11c3QgbWF0Y2guXG4iLCAKICAg
ICAgICAgICAgICAgICAgIHRoaXNEb2N1bWVudC0+VVJMKCkubGF0aW4xKCksIGFjdERvY3VtZW50
LT5VUkwoKS5sYXRpbjEoKSk7Ci0gIG1fZnJhbWUtPmFkZE1lc3NhZ2VUb0NvbnNvbGUoU3RyaW5n
KG1lc3NhZ2UpLCAxLCBTdHJpbmcoKSk7CisgIG1fZnJhbWUtPmFkZE1lc3NhZ2VUb0NvbnNvbGUo
bWVzc2FnZSwgMSwgU3RyaW5nKCkpOwogICAKICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjA3OCw3
ICsyMDc2LDcgQEAgSlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlYwogICAg
IC8vIEJsZWguCiAgICAgVVN0cmluZyBzdHIgPSB1cmwuaG9zdCgpOwogICAgIGlmICh1cmwucG9y
dCgpKQotICAgICAgICAgICAgc3RyICs9ICI6IiArIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcigo
aW50KXVybC5wb3J0KCkpOworICAgICAgICBzdHIgKz0gIjoiICsgU3RyaW5nOjpudW1iZXIoKGlu
dCl1cmwucG9ydCgpKTsKICAgICByZXR1cm4ganNTdHJpbmcoc3RyKTsKICAgfQogICBjYXNlIEhv
c3RuYW1lOgpAQCAtMjA5MSw3ICsyMDg5LDcgQEAgSlNWYWx1ZSAqTG9jYXRpb246OmdldFZhbHVl
UHJvcGVydHkoRXhlYwogICBjYXNlIFBhdGhuYW1lOgogICAgIHJldHVybiBqc1N0cmluZyh1cmwu
cGF0aCgpLmlzRW1wdHkoKSA/ICIvIiA6IHVybC5wYXRoKCkpOwogICBjYXNlIFBvcnQ6Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKHVybC5wb3J0KCkgPyBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoKGlu
dCl1cmwucG9ydCgpKSA6ICIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcodXJsLnBvcnQoKSA/IFN0
cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSkgOiAiIik7CiAgIGNhc2UgUHJvdG9jb2w6CiAg
ICAgcmV0dXJuIGpzU3RyaW5nKHVybC5wcm90b2NvbCgpICsgIjoiKTsKICAgY2FzZSBTZWFyY2g6
CkluZGV4OiBwbGF0Zm9ybS9TdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1N0cmlu
Zy5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgcGxhdGZvcm0vU3RyaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNp
bmNsdWRlIDxranMvaWRlbnRpZmllci5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCkBAIC0yMDksNiArMjEwLDc0IEBAIERlcHJlY2F0ZWRT
dHJpbmcgU3RyaW5nOjpkZXByZWNhdGVkU3RyaW4KICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmlu
ZyhtX2ltcGwtPnVuaWNvZGUoKSwgbV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAKK1N0cmluZyBTdHJp
bmc6OnNwcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdz
OworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisKKyNpZiBQTEFURk9STShXSU5fT1MpCisg
ICAgLy8gV2luZG93cyB2bnNwcmludGYgZG9lcyBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCBzaXpl
IG9uIG92ZXJmbG93CisgICAgLy8gU28gd2UganVzdCBoYXZlIHRvIGtlZXAgbG9vcGluZyB1bnRp
bCBvdXIgdnNwcmludGYgY2FsbCB3b3JrcyEKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBWZWN0
b3I8Y2hhciwgMjU2PiBidWZmZXI7CisgICAgZG8geworICAgICAgICBpZiAocmVzdWx0IDwgMCkK
KyAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyLnNpemUoKSAqIDIpOworICAgICAgICBy
ZXN1bHQgPSB2c25wcmludGYoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgZm9ybWF0LCBh
cmdzKTsKKyAgICAgICAgLy8gV2luZG93cyB2bnNwcmludGYgcmV0dXJucyAtMSBib3RoIGZvciBh
bGwgZXJyb3JzLiAgVGhlcmUgaXMgbm8KKyAgICAgICAgLy8gd2F5IHRvIGRpc3Rpbmd1aXNoIGJl
dHdlZW4gIm5vdCBlbm91Z2ggcm9vbSIgYW5kICJpbnZhbGlkIGZvcm1hdCIKKyAgICAgICAgLy8g
d2UganVzdCBrZWVwIHRyeWluZyB1bnRpbCB3ZSBoaXQgYW4gYXJiaXRyYXJ5IHNpemUgYW5kIHRo
ZW4gc3RvcC4KKyAgICB9IHdoaWxlIChyZXN1bHQgPCAwICYmIChidWZmZXIuc2l6ZSgpICogMikg
PCAyMDQ4KTsKKyAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoIiIp
OworICAgIGVsc2UgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICB1bnNpZ25lZCBsZW4gPSByZXN1bHQ7CisjZWxzZQorICAgIC8vIERvIHRoZSBmb3JtYXQgb25j
ZSB0byBnZXQgdGhlIGxlbmd0aC4KKyAgICBjaGFyIGNoOworICAgIGludCByZXN1bHQgPSB2c25w
cmludGYoJmNoLCAxLCBmb3JtYXQsIGFyZ3MpOworICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygiIik7CisgICAgZWxzZSBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIHVuc2lnbmVkIGxlbiA9IHJlc3VsdDsKKyAgICBWZWN0b3I8
Y2hhcj4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNpemUobGVuICsgMSk7CisgICAgCisgICAgLy8g
Tm93IGRvIHRoZSBmb3JtYXR0aW5nIGFnYWluLCBndWFyYW50ZWVkIHRvIGZpdC4KKyAgICB2c25w
cmludGYoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgZm9ybWF0LCBhcmdzKTsKKyNlbmRp
ZgorICAgIHZhX2VuZChhcmdzKTsKKyAgICAKKyAgICByZXR1cm4gbmV3IFN0cmluZ0ltcGwoYnVm
ZmVyLmRhdGEoKSwgbGVuKTsKK30KKworU3RyaW5nIFN0cmluZzo6bnVtYmVyKGludCBuKQorewor
ICAgIHJldHVybiBTdHJpbmc6OnNwcmludGYoIiVkIiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6
Om51bWJlcih1bnNpZ25lZCBuKQoreworICAgIHJldHVybiBTdHJpbmc6OnNwcmludGYoIiV1Iiwg
bik7Cit9CisKK1N0cmluZyBTdHJpbmc6Om51bWJlcihsb25nIG4pCit7CisgICAgcmV0dXJuIFN0
cmluZzo6c3ByaW50ZigiJWxkIiwgbik7Cit9CisKK1N0cmluZyBTdHJpbmc6Om51bWJlcih1bnNp
Z25lZCBsb25nIG4pCit7CisgICAgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigiJWx1Iiwgbik7Cit9
CisKK1N0cmluZyBTdHJpbmc6Om51bWJlcihkb3VibGUgbikKK3sKKyAgICByZXR1cm4gU3RyaW5n
OjpzcHJpbnRmKCIlLjZsZyIsIG4pOworfQorCiBpbnQgU3RyaW5nOjp0b0ludChib29sKiBvaykg
Y29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkgewpJbmRleDogcGxhdGZvcm0vbWFjL0tleUV2ZW50
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9LZXlFdmVudE1hYy5tbQkocmV2aXNp
b24gMTM1MjcpCisrKyBwbGF0Zm9ybS9tYWMvS2V5RXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMxOCw3ICszMTgsNyBAQCBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVu
dChOCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgb3RoZXIg
dGhhbiB0aGUgdmVuZG9yLWFyZWEgVW5pY29kZSB2YWx1ZXMgZm9yIHRoZSBhYm92ZSBrZXlzLgog
ICAgICAgICAgICAgLy8gRm9yIG5vdywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQu
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygp
LnNwcmludGYoIlUrJTA2WCIsIHRvdXBwZXIoYykpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6c3ByaW50ZigiVSslMDZYIiwgdG91cHBlcihjKSk7CiAgICAgfQogfQogCkluZGV4OiBwbGF0
Zm9ybS9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0NvbG9yLmgJKHJldmlzaW9uIDEz
NTI3KQorKysgcGxhdGZvcm0vQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBA
QCB0eXBlZGVmIHN0cnVjdCBDR0NvbG9yICpDR0NvbG9yUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIFN0cmluZzsKKwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgUkdCQTMyOyAgICAg
ICAgICAgICAgICAgICAgICAvLyBSR0JBIHF1YWRydXBsZXQKIAogUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CkBAIC01MSwxMCArNTMsMTAgQEAgcHVibGljOgogICAgIENvbG9y
KFJHQkEzMiBjb2wpIDogY29sb3IoY29sKSwgdmFsaWQodHJ1ZSkgeyB9CiAgICAgQ29sb3IoaW50
IHIsIGludCBnLCBpbnQgYikgOiBjb2xvcihtYWtlUkdCKHIsIGcsIGIpKSwgdmFsaWQodHJ1ZSkg
eyB9CiAgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpIDogY29sb3IobWFrZVJH
QkEociwgZywgYiwgYSkpLCB2YWxpZCh0cnVlKSB7IH0KLSAgICBleHBsaWNpdCBDb2xvcihjb25z
dCBEZXByZWNhdGVkU3RyaW5nICYpOworICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcmKTsKICAgICBleHBsaWNpdCBDb2xvcihjb25zdCBjaGFyICopOwogICAgIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXROYW1lZENvbG9yKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKIAogICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHZhbGlkOyB9CkluZGV4OiBwbGF0Zm9ybS9B
dG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkocmV2
aXNpb24gMTM1MjcpCisrKyBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmRzV2l0aChjb25zdCBBdG9taWNT
dHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgIHsgcmV0
dXJuIG1fc3RyaW5nLmVuZHNXaXRoKHMuZG9tU3RyaW5nKCksIGNhc2VTZW5zaXRpdmUpOyB9CiAg
ICAgCi0gICAgaW50IHRvSW50KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9JbnQoKTsgfQor
ICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50
KG9rKTsgfQogICAgIGJvb2wgcGVyY2VudGFnZShpbnQmIHApIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLnBlcmNlbnRhZ2UocCk7IH0KICAgICBMZW5ndGgqIHRvTGVuZ3RoQXJyYXkoaW50JiBsZW4p
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvTGVuZ3RoQXJyYXkobGVuKTsgfQogICAgIExlbmd0
aCogdG9Db29yZHNBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Db29y
ZHNBcnJheShsZW4pOyB9CkluZGV4OiBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0Zm9y
bS9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTIgKzcxLDEyIEBAIFN0cmlu
Z0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogc3RyKQogICAgIGluaXRXaXRoQ2hhcihzdHIs
IHN0cmxlbihzdHIpKTsKIH0KIAotU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBjaGFyKiBz
dHIsIHVuc2lnbmVkIGludCBsZW4pCitTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIq
IHN0ciwgdW5zaWduZWQgbGVuKQogewogICAgIGluaXRXaXRoQ2hhcihzdHIsIGxlbik7CiB9CiAK
LXZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQg
aW50IGxlbikKK3ZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIqIHN0ciwg
dW5zaWduZWQgbGVuKQogewogICAgIG1faGFzaCA9IDA7CiAgICAgbV9pblRhYmxlID0gZmFsc2U7
CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNo
YXIKICAgICAgICAgKnB0cisrID0gKnN0cisrOwogfQogCi12b2lkIFN0cmluZ0ltcGw6OmluaXRX
aXRoUUNoYXIoY29uc3QgUUNoYXIqIHN0ciwgdW5zaWduZWQgaW50IGxlbikKK3ZvaWQgU3RyaW5n
SW1wbDo6aW5pdFdpdGhRQ2hhcihjb25zdCBRQ2hhciogc3RyLCB1bnNpZ25lZCBsZW4pCiB7CiAg
ICAgbV9oYXNoID0gMDsKICAgICBtX2luVGFibGUgPSBmYWxzZTsKQEAgLTE5OSw3ICsxOTksNyBA
QCBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoCiAgICAgcmV0dXJuIGNv
bnRhaW5zT25seVdoaXRlc3BhY2UoMCwgbV9sZW5ndGgpOwogfQogCi1ib29sIFN0cmluZ0ltcGw6
OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBs
ZW4pIGNvbnN0Citib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdAogewogICAgIGlmICghbV9kYXRhKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IHBsYXRmb3JtL1BsYXRmb3JtU3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0
Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxOCBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0OwogICAgIERlcHJlY2F0
ZWRTdHJpbmcgZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyBTdHJp
bmcgbnVtYmVyKGludCk7CisgICAgc3RhdGljIFN0cmluZyBudW1iZXIodW5zaWduZWQpOworICAg
IHN0YXRpYyBTdHJpbmcgbnVtYmVyKGxvbmcpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVu
c2lnbmVkIGxvbmcpOworICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKGRvdWJsZSk7CisgICAgCisg
ICAgc3RhdGljIFN0cmluZyBzcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKQorI2lmIF9fR05VQ19f
CisgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCisjZW5kaWYKKyAg
ICA7CiAKICAgICBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdDsKICAgICBMZW5ndGgqIHRv
TGVuZ3RoQXJyYXkoaW50JiBsZW4pIGNvbnN0OwpJbmRleDogcGxhdGZvcm0vQ29sb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL0NvbG9yLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBwbGF0
Zm9ybS9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJDb2xvci5oIgogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiAvLyBU
dXJuIG9mZiBpbmxpbmluZyB0byBhdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjLgpAQCAtMTA2
LDEzICsxMDcsMTMgQEAgQ29sb3I6OkNvbG9yKGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogfQog
Ci1EZXByZWNhdGVkU3RyaW5nIENvbG9yOjpuYW1lKCkgY29uc3QKK1N0cmluZyBDb2xvcjo6bmFt
ZSgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBuYW1lOworICAgIFN0cmluZyBuYW1l
OwogICAgIGlmIChhbHBoYSgpIDwgMHhGRikKLSAgICAgICAgbmFtZS5zcHJpbnRmKCIjJTAyWCUw
MlglMDJYJTAyWCIsIHJlZCgpLCBncmVlbigpLCBibHVlKCksIGFscGhhKCkpOworICAgICAgICBu
YW1lID0gU3RyaW5nOjpzcHJpbnRmKCIjJTAyWCUwMlglMDJYJTAyWCIsIHJlZCgpLCBncmVlbigp
LCBibHVlKCksIGFscGhhKCkpOwogICAgIGVsc2UKLSAgICAgICAgbmFtZS5zcHJpbnRmKCIjJTAy
WCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CisgICAgICAgIG5hbWUgPSBTdHJp
bmc6OnNwcmludGYoIiMlMDJYJTAyWCUwMlgiLCByZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpKTsKICAg
ICByZXR1cm4gbmFtZTsKIH0KIApJbmRleDogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCShyZXZpc2lvbiAxMzUy
NykKKysrIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
OCwxNiArMTE4LDE0IEBAIFN0cmluZzo6U3RyaW5nKE5TU3RyaW5nICpzdHIpCiAgICAgZWxzZSB7
CiAgICAgICAgIFVuaUNoYXIgZml4ZWRTaXplQnVmZmVyWzEwMjRdOwogICAgICAgICBVbmlDaGFy
ICpidWZmZXI7Ci0gICAgICAgIGlmIChzaXplID4gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oc2l6ZW9m
KGZpeGVkU2l6ZUJ1ZmZlcikgLyBzaXplb2YoVW5pQ2hhcikpKSB7CisgICAgICAgIGlmIChzaXpl
ID4gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oc2l6ZW9mKGZpeGVkU2l6ZUJ1ZmZlcikgLyBzaXplb2Yo
VW5pQ2hhcikpKQogICAgICAgICAgICAgYnVmZmVyID0gc3RhdGljX2Nhc3Q8VW5pQ2hhciAqPihm
YXN0TWFsbG9jKHNpemUgKiBzaXplb2YoVW5pQ2hhcikpKTsKLSAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgZWxzZQogICAgICAgICAgICAgYnVmZmVyID0gZml4ZWRTaXplQnVmZmVyOwotICAgICAg
ICB9CiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhyZWludGVycHJldF9jYXN0PENGU3Ry
aW5nUmVmPihzdHIpLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgYnVmZmVyKTsKICAgICAgICAgbV9p
bXBsID0gbmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhciAqPihidWZm
ZXIpLCAodW5zaWduZWQpc2l6ZSk7Ci0gICAgICAgIGlmIChidWZmZXIgIT0gZml4ZWRTaXplQnVm
ZmVyKSB7CisgICAgICAgIGlmIChidWZmZXIgIT0gZml4ZWRTaXplQnVmZmVyKQogICAgICAgICAg
ICAgZmFzdEZyZWUoYnVmZmVyKTsKLSAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogYmluZGlu
Z3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL29iamMvRE9NSFRNTC5t
bQkocmV2aXNpb24gMTM1MjcpCisrKyBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE0NzgsOCArMTQ3OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CiAKIC0gKHZvaWQpc2V0Q29sczooaW50KWNvbHMKIHsKLSAgICBTdHJpbmcgdmFsdWUo
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKGNvbHMpKTsKLSAgICBbc2VsZiBfdGV4dEFyZWFFbGVt
ZW50XS0+c2V0QXR0cmlidXRlKGNvbHNBdHRyLCB2YWx1ZSk7CisgICAgW3NlbGYgX3RleHRBcmVh
RWxlbWVudF0tPnNldEF0dHJpYnV0ZShjb2xzQXR0ciwgU3RyaW5nOjpudW1iZXIoY29scykpOwog
fQogCiAtIChCT09MKWRpc2FibGVkCkBAIC0xNTE5LDggKzE1MTgsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFJvd3M6KGludClyb3dzCiB7Ci0g
ICAgU3RyaW5nIHZhbHVlKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihyb3dzKSk7Ci0gICAgW3Nl
bGYgX3RleHRBcmVhRWxlbWVudF0tPnNldEF0dHJpYnV0ZShyb3dzQXR0ciwgdmFsdWUpOworICAg
IFtzZWxmIF90ZXh0QXJlYUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUocm93c0F0dHIsIFN0cmluZzo6
bnVtYmVyKHJvd3MpKTsKIH0KIAogLSAoaW50KXRhYkluZGV4CkBAIC0xNzc3LDggKzE3NzUsNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFN0YXJ0
OihpbnQpc3RhcnQKIHsKLSAgICBTdHJpbmcgdmFsdWUoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVy
KHN0YXJ0KSk7Ci0gICAgW3NlbGYgX29MaXN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShzdGFydEF0
dHIsIHZhbHVlKTsKKyAgICBbc2VsZiBfb0xpc3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKHN0YXJ0
QXR0ciwgU3RyaW5nOjpudW1iZXIoc3RhcnQpKTsKIH0KIAogLSAoTlNTdHJpbmcgKil0eXBlCkBA
IC0xOTY5LDggKzE5NjYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwog
CiAtICh2b2lkKXNldFdpZHRoOihpbnQpd2lkdGgKIHsKLSAgICBTdHJpbmcgc3RyaW5nKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOwotICAgIFtzZWxmIF9wcmVFbGVtZW50XS0+c2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfcHJlRWxlbWVudF0tPnNl
dEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIEBlbmQK
QEAgLTIzNTcsOCArMjM1Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7
CiAKIC0gKHZvaWQpc2V0SGVpZ2h0OihpbnQpaGVpZ2h0CiB7Ci0gICAgU3RyaW5nIHN0cmluZyhE
ZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaGVpZ2h0KSk7Ci0gICAgW3NlbGYgX2ltYWdlRWxlbWVu
dF0tPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF9pbWFnZUVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIoaGVpZ2h0KSk7
CiB9CiAKIC0gKGludCloc3BhY2UKQEAgLTIzNjgsOCArMjM2Myw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0SHNwYWNlOihpbnQpaHNwYWNlCiB7
Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7Ci0g
ICAgW3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBzdHJpbmcp
OworICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgU3Ry
aW5nOjpudW1iZXIoaHNwYWNlKSk7CiB9CiAKIC0gKEJPT0wpaXNNYXAKQEAgLTI0MjQsOCArMjQx
OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0
VnNwYWNlOihpbnQpdnNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIodnNwYWNlKSk7Ci0gICAgW3NlbGYgX2ltYWdlRWxlbWVudF0tPnNldEF0dHJpYnV0
ZSh2c3BhY2VBdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF9pbWFnZUVsZW1lbnRdLT5zZXRBdHRy
aWJ1dGUodnNwYWNlQXR0ciwgU3RyaW5nOjpudW1iZXIodnNwYWNlKSk7CiB9CiAKIC0gKGludCl3
aWR0aApAQCAtMjQzNSw4ICsyNDI4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxO
YW1lczsKIAogLSAodm9pZClzZXRXaWR0aDooaW50KXdpZHRoCiB7Ci0gICAgU3RyaW5nIHN0cmlu
ZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIod2lkdGgpKTsKLSAgICBbc2VsZiBfaW1hZ2VFbGVt
ZW50XS0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfaW1hZ2VF
bGVtZW50XS0+c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lkdGgpKTsK
IH0KIAogQGVuZApAQCAtMjU1Nyw4ICsyNTQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6
OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRIc3BhY2U6KGludCloc3BhY2UKIHsKLSAgICBTdHJp
bmcgc3RyaW5nKERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKLSAgICBbc2VsZiBf
b2JqZWN0RWxlbWVudF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBzdHJpbmcpOworICAgIFtz
ZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVt
YmVyKGhzcGFjZSkpOwogfQogCiAtIChOU1N0cmluZyAqKW5hbWUKQEAgLTI1ODgsOCArMjU3OSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0VGFi
SW5kZXg6KGludCl0YWJJbmRleAogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHRhYkluZGV4KSk7Ci0gICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRy
aWJ1dGUodGFiaW5kZXhBdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+
c2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKil0eXBlCkBAIC0yNjE5LDggKzI2MDksNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFZzcGFjZTooaW50KXZzcGFjZQog
ewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwot
ICAgIFtzZWxmIF9vYmplY3RFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHN0cmlu
Zyk7CisgICAgW3NlbGYgX29iamVjdEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwg
U3RyaW5nOjpudW1iZXIodnNwYWNlKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd2lkdGgKQEAgLTI3
NjksOCArMjc1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0SHNwYWNlOihpbnQpaHNwYWNlCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIoaHNwYWNlKSk7Ci0gICAgW3NlbGYgX2FwcGxldEVsZW1lbnRdLT5z
ZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfYXBwbGV0RWxlbWVu
dF0tPnNldEF0dHJpYnV0ZShoc3BhY2VBdHRyLCBTdHJpbmc6Om51bWJlcihoc3BhY2UpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKiluYW1lCkBAIC0yODAwLDggKzI3ODgsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFZzcGFjZTooaW50KXZzcGFjZQog
ewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZzcGFjZSkpOwot
ICAgIFtzZWxmIF9hcHBsZXRFbGVtZW50XS0+c2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIHN0cmlu
Zyk7CisgICAgW3NlbGYgX2FwcGxldEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUodnNwYWNlQXR0ciwg
U3RyaW5nOjpudW1iZXIodnNwYWNlKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd2lkdGgKQEAgLTI5
MjYsOCArMjkxMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0g
KHZvaWQpc2V0VGFiSW5kZXg6KGludCl0YWJJbmRleAogewotICAgIFN0cmluZyBzdHJpbmcoRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7Ci0gICAgW3NlbGYgX2FyZWFFbGVtZW50
XS0+c2V0QXR0cmlidXRlKHRhYmluZGV4QXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfYXJlYUVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRl
eCkpOwogfQogCiAtIChOU1N0cmluZyAqKXRhcmdldApAQCAtMzM3Miw4ICszMzU4LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAodm9pZClzZXRTcGFuOihpbnQp
c3BhbgogewotICAgIFN0cmluZyBzdHJpbmcoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHNwYW4p
KTsKLSAgICBbc2VsZiBfdGFibGVDb2xFbGVtZW50XS0+c2V0QXR0cmlidXRlKHNwYW5BdHRyLCBz
dHJpbmcpOworICAgIFtzZWxmIF90YWJsZUNvbEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoc3BhbkF0
dHIsIFN0cmluZzo6bnVtYmVyKHNwYW4pKTsKIH0KIAogLSAoTlNTdHJpbmcgKil2QWxpZ24KQEAg
LTM1NjIsOCArMzU0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAK
IC0gKHZvaWQpc2V0Q29sU3BhbjooaW50KWNvbFNwYW4KIHsKLSAgICBTdHJpbmcgc3RyaW5nKERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xTcGFuKSk7Ci0gICAgW3NlbGYgX3RhYmxlQ2VsbEVs
ZW1lbnRdLT5zZXRBdHRyaWJ1dGUoY29sc3BhbkF0dHIsIHN0cmluZyk7CisgICAgW3NlbGYgX3Rh
YmxlQ2VsbEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoY29sc3BhbkF0dHIsIFN0cmluZzo6bnVtYmVy
KGNvbFNwYW4pKTsKIH0KIAogLSAoTlNTdHJpbmcgKiloZWFkZXJzCkBAIC0zNjAzLDggKzM1ODcs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwogCiAtICh2b2lkKXNldFJv
d1NwYW46KGludClyb3dTcGFuCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5n
OjpudW1iZXIocm93U3BhbikpOwotICAgIFtzZWxmIF90YWJsZUNlbGxFbGVtZW50XS0+c2V0QXR0
cmlidXRlKHJvd3NwYW5BdHRyLCBzdHJpbmcpOworICAgIFtzZWxmIF90YWJsZUNlbGxFbGVtZW50
XS0+c2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKSk7CiB9
CiAKIC0gKE5TU3RyaW5nICopc2NvcGUKQEAgLTM5MjYsOCArMzkwOSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7CiAKIC0gKHZvaWQpc2V0SGVpZ2h0OihpbnQpaGVpZ2h0
CiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoaGVpZ2h0KSk7
Ci0gICAgW3NlbGYgX2VtYmVkRWxlbWVudF0tPnNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBzdHJp
bmcpOworICAgIFtzZWxmIF9lbWJlZEVsZW1lbnRdLT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwg
U3RyaW5nOjpudW1iZXIoaGVpZ2h0KSk7CiB9CiAKIC0gKE5TU3RyaW5nICopbmFtZQpAQCAtMzk2
Nyw4ICszOTQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKIAogLSAo
dm9pZClzZXRXaWR0aDooaW50KXdpZHRoCiB7Ci0gICAgU3RyaW5nIHN0cmluZyhEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIod2lkdGgpKTsKLSAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+c2V0QXR0
cmlidXRlKHdpZHRoQXR0ciwgc3RyaW5nKTsKKyAgICBbc2VsZiBfZW1iZWRFbGVtZW50XS0+c2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIod2lkdGgpKTsKIH0KIAogQGVuZApJ
bmRleDogaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfYmFz
ZWltcGwuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGh0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NiwxNiArMTY2LDEwIEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWUKICAgICAvLyBGSVhNRTogcGVyaGFwcyB0aGlzIGNvZGUgc2hvdWxk
IGJlIGluIGF0dGFjaCgpIGluc3RlYWQgb2YgaGVyZQogCiAgICAgRnJhbWVWaWV3ICp3ID0gZ2V0
RG9jdW1lbnQoKS0+dmlldygpOwotICAgIGlmICh3ICYmIHctPm1hcmdpbldpZHRoKCkgIT0gLTEp
IHsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBzOwotICAgICAgICBzLnNwcmludGYoIiVkIiwg
dy0+bWFyZ2luV2lkdGgoKSk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZShtYXJnaW53aWR0aEF0dHIs
IHMpOwotICAgIH0KLSAgICBpZiAodyAmJiB3LT5tYXJnaW5IZWlnaHQoKSAhPSAtMSkgewotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIHM7Ci0gICAgICAgIHMuc3ByaW50ZigiJWQiLCB3LT5tYXJn
aW5IZWlnaHQoKSk7Ci0gICAgICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRyLCBzKTsK
LSAgICB9CisgICAgaWYgKHcgJiYgdy0+bWFyZ2luV2lkdGgoKSAhPSAtMSkKKyAgICAgICAgc2V0
QXR0cmlidXRlKG1hcmdpbndpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIody0+bWFyZ2luV2lkdGgo
KSkpOworICAgIGlmICh3ICYmIHctPm1hcmdpbkhlaWdodCgpICE9IC0xKQorICAgICAgICBzZXRB
dHRyaWJ1dGUobWFyZ2luaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIody0+bWFyZ2luSGVpZ2h0
KCkpKTsKIAogICAgIGlmICh3KQogICAgICAgICB3LT5zY2hlZHVsZVJlbGF5b3V0KCk7CkluZGV4
OiBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfaW1hZ2Vp
bXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0
aChib29sIGlnbm9yZVAKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gY2hlY2sg
dGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKICAgICAgICAg
Ym9vbCBvazsKLSAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikuZGVw
cmVjYXRlZFN0cmluZygpLnRvSW50KCZvayk7CisgICAgICAgIGludCB3aWR0aCA9IGdldEF0dHJp
YnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAg
IHJldHVybiB3aWR0aDsKICAgICAgICAgCkBAIC0yODMsNyArMjgzLDcgQEAgaW50IEhUTUxJbWFn
ZUVsZW1lbnQ6OmhlaWdodChib29sIGlnbm9yZQogICAgIGlmICghcmVuZGVyZXIoKSkgewogICAg
ICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2
YWx1ZQogICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZ2V0QXR0cmlidXRl
KGhlaWdodEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0ludCgmb2spOworICAgICAgICBpbnQg
aGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7CiAgICAgICAgIGlm
IChvaykKICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAgICAgICAgIApAQCAtMzQ0LDEyICsz
NDQsMTIgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OmJvcmRlcigpIGNvbnN0CiAKIHZvaWQgSFRN
TEltYWdlRWxlbWVudDo6c2V0Qm9yZGVyKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
Ym9yZGVyQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0
cmlidXRlKGJvcmRlckF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIHZvaWQgSFRN
TEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
aGVpZ2h0QXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0
cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAKIGludCBIVE1M
SW1hZ2VFbGVtZW50Ojpoc3BhY2UoKSBjb25zdApAQCAtMzYwLDcgKzM2MCw3IEBAIGludCBIVE1M
SW1hZ2VFbGVtZW50Ojpoc3BhY2UoKSBjb25zdAogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNl
dEhzcGFjZShpbnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIERlcHJl
Y2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0ZShoc3BhY2VBdHRy
LCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6Omlz
TWFwKCkgY29uc3QKQEAgLTQxMSwxMiArNDExLDEyIEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp2
c3BhY2UoKSBjb25zdAogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFZzcGFjZShpbnQgdmFs
dWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0ZSh2c3BhY2VBdHRyLCBTdHJpbmc6Om51bWJl
cih2YWx1ZSkpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFdpZHRoKGludCB2YWx1
ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIodmFsdWUpKTsKKyAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6Om51bWJlcih2
YWx1ZSkpOwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6eCgpIGNvbnN0CkBAIC02OTMsNyAr
NjkzLDcgQEAgaW50IEhUTUxBcmVhRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAogCiB2b2lkIEhU
TUxBcmVhRWxlbWVudDo6c2V0VGFiSW5kZXgoaW50IHRhYkluZGV4KQogewotICAgIHNldEF0dHJp
YnV0ZSh0YWJpbmRleEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwor
ICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7
CiB9CiAKIFN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkluZGV4OiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI3NCwxMiArMTI3NCwxMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldEFsdChjb25zdCBTdHJpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0TWF4TGVuZ3Ro
KGludCBfbWF4TGVuZ3RoKQogewotICAgIHNldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyLCBEZXBy
ZWNhdGVkU3RyaW5nOjpudW1iZXIoX21heExlbmd0aCkpOworICAgIHNldEF0dHJpYnV0ZShtYXhs
ZW5ndGhBdHRyLCBTdHJpbmc6Om51bWJlcihfbWF4TGVuZ3RoKSk7CiB9CiAKIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBfc2l6ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
c2l6ZUF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihfc2l6ZSkpOworICAgIHNldEF0dHJp
YnV0ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIoX3NpemUpKTsKIH0KIAogU3RyaW5nIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNyYygpIGNvbnN0CkluZGV4OiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9u
IDEzNTI3KQorKysgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjY4LDEyICsyNjgsMTIgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NL
ZXkoYwogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldENvbHMoaW50IGNvbHMpCiB7Ci0g
ICAgc2V0QXR0cmlidXRlKGNvbHNBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoY29scykp
OworICAgIHNldEF0dHJpYnV0ZShjb2xzQXR0ciwgU3RyaW5nOjpudW1iZXIoY29scykpOwogfQog
CiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFJvd3MoaW50IHJvd3MpCiB7Ci0gICAgc2V0
QXR0cmlidXRlKHJvd3NBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIocm93cykpOworICAg
IHNldEF0dHJpYnV0ZShyb3dzQXR0ciwgU3RyaW5nOjpudW1iZXIocm93cykpOwogfQogCiB9IC8v
IG5hbWVzcGFjZQpJbmRleDogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRNdWx0aXBsZShib29sCiAKIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFNpemUoaW50IHNpemUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRy
LCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc2l6ZSkpOworICAgIHNldEF0dHJpYnV0ZShzaXpl
QXR0ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UKSW5k
ZXg6IGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNyArMzAzLDcgQEAgaW50IEhUTUxBbmNob3JFbGVtZW50
Ojp0YWJJbmRleCgpIGNvbnN0CiAKIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFRhYkluZGV4
KGludCB0YWJJbmRleCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBEZXByZWNh
dGVkU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKKyAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhB
dHRyLCBTdHJpbmc6Om51bWJlcih0YWJJbmRleCkpOwogfQogCiBTdHJpbmcgSFRNTEFuY2hvckVs
ZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkluZGV4OiBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEzNTI3KQorKysgaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgxLDExICsyODEsMTAgQEAgRGVwcmVjYXRlZFN0cmluZyBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50OgogICAgICAgICBhc3NlcnQoc2VwMSA+PSAwKTsKICAgICAgICAgYXNzZXJ0KHNl
cDIgPj0gMCk7CiAKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBuYW1lQW5kVHlwZSA9IHN0YXRl
LmxlZnQoc2VwMik7CisgICAgICAgIFN0cmluZyBuYW1lQW5kVHlwZSA9IHN0YXRlLmxlZnQoc2Vw
Mik7CiAgICAgICAgIGlmIChlbmNOYW1lLmxlbmd0aCgpICsgdHlwZVN0ci5sZW5ndGgoKSArIDEg
PT0gKHVuc2lnbmVkKXNlcDIKICAgICAgICAgICAgICYmIG5hbWVBbmRUeXBlLnN0YXJ0c1dpdGgo
ZW5jTmFtZSkKLSAgICAgICAgICAgICYmIG5hbWVBbmRUeXBlLmVuZHNXaXRoKHR5cGVTdHIpKQot
ICAgICAgICB7CisgICAgICAgICAgICAmJiBuYW1lQW5kVHlwZS5lbmRzV2l0aCh0eXBlU3RyKSkg
ewogICAgICAgICAgICAgc3RhdGVzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGUubWlkKHNlcDIrMSk7CiAgICAgICAgIH0KQEAgLTMwMCw3ICsyOTksNyBAQCBpbnQgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudDo6dGFiSW5kZXgoKSBjCiAKIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudDo6c2V0VGFiSW5kZXgoaW50IHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZSh0YWJpbmRl
eEF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEF0dHJpYnV0
ZSh0YWJpbmRleEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9CiAgICAgCiB9IC8vIG5h
bWVzcGFjZQpJbmRleDogaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgaHRtbC9odG1sX2Jsb2Nr
aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxIUkVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAgICAgICAgIGlmIChzaXplIDw9IDEpCiAgICAg
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRI
LCBTdHJpbmcoIjAiKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENTU0xlbmd0aChh
dHRyLCBDU1NfUFJPUF9IRUlHSFQsIFN0cmluZyhEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc2l6
ZS0yKSkpOworICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU19QUk9QX0hFSUdIVCwg
U3RyaW5nOjpudW1iZXIoc2l6ZS0yKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBpbnQg
SFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QKIAogdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0
V2lkdGgoaW50IHdpZHRoKQogewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcih3aWR0aCkpOworICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0
cmluZzo6bnVtYmVyKHdpZHRoKSk7CiB9CiAKIGJvb2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBj
b25zdApJbmRleDogaHRtbC9odG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
aHRtbF9vYmplY3RpbXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBodG1sL2h0bWxfb2JqZWN0
aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNyArMTAwNSw3IEBAIGludCBIVE1MT2Jq
ZWN0RWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAogCiB2b2lkIEhUTUxPYmplY3RFbGVtZW50Ojpz
ZXRUYWJJbmRleChpbnQgdGFiSW5kZXgpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHRhYmluZGV4QXR0
ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHRhYkluZGV4KSk7CisgICAgc2V0QXR0cmlidXRl
KHRhYmluZGV4QXR0ciwgU3RyaW5nOjpudW1iZXIodGFiSW5kZXgpKTsKIH0KIAogU3RyaW5nIEhU
TUxPYmplY3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKSW5kZXg6IGh0bWwvaHRtbF9saXN0aW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2xpc3RpbXBsLmNwcAkocmV2aXNpb24gMTM1Mjcp
CisrKyBodG1sL2h0bWxfbGlzdGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4
LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYgogCiB2b2lkIEhU
TUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFydCkKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
c3RhcnRBdHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIoc3RhcnQpKTsKKyAgICBzZXRBdHRy
aWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkpOwogfQogCiBTdHJpbmcgSFRN
TE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0CkBAIC0yMzYsNyArMjM2LDcgQEAgaW50IEhUTUxM
SUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBIVE1MTElFbGVtZW50OjpzZXRWYWx1ZShp
bnQgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgU3RyaW5nOjpu
dW1iZXIodmFsdWUpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogaHRtbC9odG1s
X3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHJl
dmlzaW9uIDEzNTI3KQorKysgaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5Nyw4ICszOTcsNyBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmliCiAgICAgICAgICAgICBib3JkZXI9MTsKICNlbmRpZgogICAgICAgICAgICAgbV9ub0JvcmRl
ciA9ICFib3JkZXI7Ci0gICAgICAgICAgICBTdHJpbmcgdiA9IERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlciggYm9yZGVyICk7Ci0gICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1Bf
Qk9SREVSX1dJRFRILCB2ICk7CisgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BS
T1BfQk9SREVSX1dJRFRILCBTdHJpbmc6Om51bWJlcihib3JkZXIpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJnY29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENT
U0NvbG9yKGF0dHIsIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwpA
QCAtMTE0Nyw3ICsxMTQ2LDcgQEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2hPZmYo
Y29ucwogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xTcGFuKGludCBuKQogewot
ICAgIHNldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciwgRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG4p
KTsKKyAgICBzZXRBdHRyaWJ1dGUoY29sc3BhbkF0dHIsIFN0cmluZzo6bnVtYmVyKG4pKTsKIH0K
IAogU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpoZWFkZXJzKCkgY29uc3QKQEAgLTExODIs
NyArMTE4MSw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldE5vV3JhcChib28KIAog
dm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3BhbihpbnQgbikKIHsKLSAgICBzZXRB
dHRyaWJ1dGUocm93c3BhbkF0dHIsIERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihuKSk7CisgICAg
c2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihuKSk7CiB9CiAKIFN0cmlu
ZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2NvcGUoKSBjb25zdApAQCAtMTI3OCw3ICsxMjc3LDcg
QEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRDaE9mZihjb25zdAogCiB2b2lkIEhUTUxU
YWJsZUNvbEVsZW1lbnQ6OnNldFNwYW4oaW50IG4pCiB7Ci0gICAgc2V0QXR0cmlidXRlKHNwYW5B
dHRyLCBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobikpOworICAgIHNldEF0dHJpYnV0ZShzcGFu
QXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwogfQogCiBTdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVu
dDo6dkFsaWduKCkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBy
ZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE2LDcgKzExMTYs
NyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIGlmICghZXF1
YWxJZ25vcmluZ0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAgICAgICAgdmFsID0gKGludCko
dmFsICsgMC41KTsKIAotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoRGVwcmVjYXRlZFN0cmluZzo6
bnVtYmVyKHZhbCkpOworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodmFs
KSk7CiAKICAgICBRU2xpZGVyKiBzbGlkZXIgPSAoUVNsaWRlciopd2lkZ2V0KCk7CiAgICAgIApA
QCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnZhbHVlQ2hhbmdlZChXaWRn
ZXQqKQogICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UocHJlY2lzaW9uLCAiZmxvYXQiKSkKICAg
ICAgICAgdmFsID0gKGludCkodmFsICsgMC41KTsKIAotICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUo
RGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKHZhbCkpOworICAgIGVsZW1lbnQoKS0+c2V0VmFsdWUo
U3RyaW5nOjpudW1iZXIodmFsKSk7CiAgICAgCiAgICAgLy8gRmlyZSB0aGUgImlucHV0IiBET00g
ZXZlbnQuCiAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChpbnB1dEV2ZW50LCB0cnVl
LCBmYWxzZSk7CkluZGV4OiBkb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Qb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjg5LDEyICs2ODksMTIgQEAgdm9pZCBQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdn
ZXIoY2hhciAqYgogewogICAgIFN0cmluZyByZXN1bHQ7CiAgICAgCi0gICAgaWYgKGlzTnVsbCgp
KSB7CisgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXN1bHQgPSAiPG51bGw+IjsKLSAgICB9
IGVsc2UgeworICAgIGVsc2UgewogICAgICAgICBjaGFyIHNbMTAyNF07CiAgICAgICAgIHJlc3Vs
dCArPSAib2Zmc2V0ICI7Ci0gICAgICAgIHJlc3VsdCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIobV9vZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1iZXIobV9vZmZzZXQp
OwogICAgICAgICByZXN1bHQgKz0gIiBvZiAiOwogICAgICAgICBtX25vZGUtPmZvcm1hdEZvckRl
YnVnZ2VyKHMsIHNpemVvZihzKSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwpJbmRleDogZG9tL1N0
eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTM1MjcpCisrKyBkb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNiwxNSArMzI2LDE2IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTTGVuZ3RoKE1hcHBl
ZEEKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IoTWFwcGVkQXR0cmlidXRlKiBhdHRy
LCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmYykKIHsKICAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IGNh
c2Ugbm8gY29sb3IgZ2V0cyBhcHBsaWVkIGluIElFLgotICAgIGlmICggIWMubGVuZ3RoKCkgKQor
ICAgIGlmICghYy5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFhdHRyLT5k
ZWNsKCkpIGNyZWF0ZU1hcHBlZERlY2woYXR0cik7CisgICAgaWYgKCFhdHRyLT5kZWNsKCkpCisg
ICAgICAgIGNyZWF0ZU1hcHBlZERlY2woYXR0cik7CiAgICAgCi0gICAgaWYgKGF0dHItPmRlY2wo
KS0+c2V0UHJvcGVydHkoaWQsIGMsIGZhbHNlKSApCisgICAgaWYgKGF0dHItPmRlY2woKS0+c2V0
UHJvcGVydHkoaWQsIGMsIGZhbHNlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIERlcHJl
Y2F0ZWRTdHJpbmcgY29sb3IgPSBjLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBTdHJpbmcgY29s
b3IgPSBjLmNvcHkoKTsKICAgICAvLyBub3Qgc29tZXRoaW5nIHRoYXQgZml0cyB0aGUgc3BlY3Mu
CiAgICAgCiAgICAgLy8gd2UncmUgZW11bGF0aW5nIElFcyBjb2xvciBwYXJzZXIgaGVyZS4gSXQg
bWFwcyB0cmFuc3BhcmVudCB0byBibGFjaywgb3RoZXJ3aXNlIGl0IHRyaWVzIHRvIGJ1aWxkIGEg
cmdiIHZhbHVlCkBAIC0zNTIsMzAgKzM1MywzMCBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENT
U0NvbG9yKE1hcHBlZEF0CiAgICAgLy8gdXNlZCBhcyBhIG5vcm1hbGl6YXRpb24gcG9pbnQgdG8g
bm9ybWFsaXplIHRvIHZhbHVlcyBiZXR3ZWVuIDAKICAgICAvLyBhbmQgMjU1LgogICAgIAotICAg
IGlmICggY29sb3IubG93ZXIoKSAhPSAidHJhbnNwYXJlbnQiICkgewotICAgICAgICBpZiAoIGNv
bG9yWzBdID09ICcjJyApCi0gICAgICAgICAgICBjb2xvci5yZW1vdmUoIDAsICAxICk7CisgICAg
aWYgKGNvbG9yLmxvd2VyKCkgIT0gInRyYW5zcGFyZW50IikgeworICAgICAgICBpZiAoY29sb3Jb
MF0gPT0gJyMnKQorICAgICAgICAgICAgY29sb3IucmVtb3ZlKDAsIDEpOwogICAgICAgICBpbnQg
YmFzaWNMZW5ndGggPSAoY29sb3IubGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAgIGlmICggYmFz
aWNMZW5ndGggPiAxICkgeworICAgICAgICBpZiAoYmFzaWNMZW5ndGggPiAxKSB7CiAgICAgICAg
ICAgICAvLyBJRSBpZ25vcmVzIGNvbG9ycyB3aXRoIHRocmVlIGRpZ2l0cyBvciBsZXNzCiAgICAg
ICAgICAgICBpbnQgY29sb3JzWzNdID0geyAwLCAwLCAwIH07CiAgICAgICAgICAgICBpbnQgY29t
cG9uZW50ID0gMDsKICAgICAgICAgICAgIGludCBwb3MgPSAwOwogICAgICAgICAgICAgaW50IG1h
eERpZ2l0ID0gYmFzaWNMZW5ndGgtMTsKLSAgICAgICAgICAgIHdoaWxlICggY29tcG9uZW50IDwg
MyApIHsKKyAgICAgICAgICAgIHdoaWxlIChjb21wb25lbnQgPCAzKSB7CiAgICAgICAgICAgICAg
ICAgLy8gc2VhcmNoIGZvcndhcmQgZm9yIGRpZ2l0cyBpbiB0aGUgc3RyaW5nCiAgICAgICAgICAg
ICAgICAgaW50IG51bURpZ2l0cyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBwb3MgPCAo
aW50KWNvbG9yLmxlbmd0aCgpICYmIG51bURpZ2l0cyA8IGJhc2ljTGVuZ3RoICkgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgaGV4ID0gdG9IZXgoIGNvbG9yW3Bvc10gKTsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdpdHMgPCBiYXNp
Y0xlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaGV4ID0gdG9IZXgoY29sb3JbcG9z
XSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdID0gKGNvbG9yc1tjb21w
b25lbnRdIDw8IDQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGhleCA+IDAgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoZXggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvcnNbY29tcG9uZW50XSArPSBoZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhEaWdp
dCA9IGtNaW4oIG1heERpZ2l0LCBudW1EaWdpdHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1heERpZ2l0ID0ga01pbihtYXhEaWdpdCwgbnVtRGlnaXRzKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBudW1EaWdpdHMrKzsKICAgICAgICAgICAgICAgICAg
ICAgcG9zKys7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdoaWxlICggbnVt
RGlnaXRzKysgPCBiYXNpY0xlbmd0aCApCisgICAgICAgICAgICAgICAgd2hpbGUgKG51bURpZ2l0
cysrIDwgYmFzaWNMZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRd
IDw8PSA0OwogICAgICAgICAgICAgICAgIGNvbXBvbmVudCsrOwogICAgICAgICAgICAgfQpAQCAt
Mzg2LDEwICszODcsMTAgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihNYXBwZWRB
dAogICAgICAgICAgICAgY29sb3JzWzBdID4+PSA0Km1heERpZ2l0OwogICAgICAgICAgICAgY29s
b3JzWzFdID4+PSA0Km1heERpZ2l0OwogICAgICAgICAgICAgY29sb3JzWzJdID4+PSA0Km1heERp
Z2l0OwotICAgICAgICAgICAgLy8gYXNzZXJ0KCBjb2xvcnNbMF0gPCAweDEwMCAmJiBjb2xvcnNb
MV0gPCAweDEwMCAmJiBjb2xvcnNbMl0gPCAweDEwMCApOworICAgICAgICAgICAgLy8gYXNzZXJ0
KGNvbG9yc1swXSA8IDB4MTAwICYmIGNvbG9yc1sxXSA8IDB4MTAwICYmIGNvbG9yc1syXSA8IDB4
MTAwKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3Iuc3ByaW50ZigiIyUwMnglMDJ4
JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0gKTsKLSAgICAgICAgICAgIGlm
ICggYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgU3RyaW5nKGNvbG9yKSwgZmFsc2UpICkK
KyAgICAgICAgICAgIGNvbG9yID0gU3RyaW5nOjpzcHJpbnRmKCIjJTAyeCUwMnglMDJ4IiwgY29s
b3JzWzBdLCBjb2xvcnNbMV0sIGNvbG9yc1syXSk7CisgICAgICAgICAgICBpZiAoYXR0ci0+ZGVj
bCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3IsIGZhbHNlKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBkb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDEzNTI3KQorKysgZG9tL1JhbmdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwMiwxOCArMTMwMiwxNyBAQCB2b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1
Z2dlcihjaGFyICpidWZmCiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBTdHJpbmcgczsKICAgICAK
LSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIgfHwgIW1fZW5kQ29udGFpbmVyKSB7CisgICAgaWYg
KCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENvbnRhaW5lcikKICAgICAgICAgcmVzdWx0ID0g
IjxlbXB0eT4iOwotICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2hhciBzW0Zvcm1hdEJ1ZmZl
clNpemVdOwogICAgICAgICByZXN1bHQgKz0gImZyb20gb2Zmc2V0ICI7Ci0gICAgICAgIHJlc3Vs
dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV9zdGFydE9mZnNldCk7CisgICAgICAgIHJl
c3VsdCArPSBTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9
ICIgb2YgIjsKICAgICAgICAgbV9zdGFydENvbnRhaW5lci0+Zm9ybWF0Rm9yRGVidWdnZXIocywg
Rm9ybWF0QnVmZmVyU2l6ZSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAgICAgICByZXN1bHQg
Kz0gIiB0byBvZmZzZXQgIjsKLSAgICAgICAgcmVzdWx0ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihtX2VuZE9mZnNldCk7CisgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihtX2Vu
ZE9mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7CiAgICAgICAgIG1fZW5kQ29udGFp
bmVyLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXplKTsKICAgICAgICAgcmVz
dWx0ICs9IHM7CkluZGV4OiBkb20veG1sX3Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9t
L3htbF90b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGRvbS94bWxfdG9rZW5pemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDE1ICs1MzYsMTUgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OmVycm9yKEVycm9yVHlwZSB0eXBlLAogCiAgICAgaWYgKHR5cGUgPT0gZmF0YWwgfHwgKG1f
ZXJyb3JDb3VudCA8IG1heEVycm9ycyAmJiBtX2xhc3RFcnJvckxpbmUgIT0gbGluZU51bWJlcigp
ICYmIG1fbGFzdEVycm9yQ29sdW1uICE9IGNvbHVtbk51bWJlcigpKSkgewogCi0gICAgICAgIERl
cHJlY2F0ZWRTdHJpbmcgZm9ybWF0OworICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQ7CiAgICAg
ICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICAgY2FzZSB3YXJuaW5nOgotICAgICAgICAg
ICAgICAgIGZvcm1hdCA9IERlcHJlY2F0ZWRTdHJpbmcoIndhcm5pbmcgb24gbGluZSAlMiBhdCBj
b2x1bW4gJTM6ICUxIik7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gIndhcm5pbmcgb24gbGlu
ZSAlZCBhdCBjb2x1bW4gJWQ6ICVzIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgZmF0YWw6CiAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCiAgICAgICAg
ICAgICBjYXNlIG5vbkZhdGFsOgotICAgICAgICAgICAgICAgIGZvcm1hdCA9IERlcHJlY2F0ZWRT
dHJpbmcoImVycm9yIG9uIGxpbmUgJTIgYXQgY29sdW1uICUzOiAlMSIpOworICAgICAgICAgICAg
ICAgIGZvcm1hdCA9ICJlcnJvciBvbiBsaW5lICVkIGF0IGNvbHVtbiAlZDogJXMiOwogICAgICAg
ICB9CiAKICNpZiBXSU4zMgpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpl
cnJvcihFcnJvclR5cGUgdHlwZSwKICAgICAgICAgY2hhciAqbTsKICAgICAgICAgdmFzcHJpbnRm
KCZtLCBtZXNzYWdlLCBhcmdzKTsKICNlbmRpZgotICAgICAgICBtX2Vycm9yTWVzc2FnZXMgKz0g
Zm9ybWF0LmFyZyhtKS5hcmcobGluZU51bWJlcigpKS5hcmcoY29sdW1uTnVtYmVyKCkpOworICAg
ICAgICBtX2Vycm9yTWVzc2FnZXMgKz0gU3RyaW5nOjpzcHJpbnRmKGZvcm1hdCwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSwgbSk7CiAjaWYgIVdJTjMyCiAgICAgICAgIGZyZWUobSk7CiAj
ZW5kaWYKSW5kZXg6IGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGVkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsOSArNTExLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgICAgICAgICAg
Y3VycmVudEZvbnRTaXplID0gY29tcHV0ZWRGb250U2l6ZShub2RlKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9IGRlc2lyZWRGb250U2l6ZSkgewotICAgICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZyBkZXNpcmVkRm9udFNpemVTdHJpbmcgPSBEZXByZWNhdGVkU3Ry
aW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKTsKLSAgICAgICAgICAgIGRlc2lyZWRGb250U2l6
ZVN0cmluZyArPSAicHgiOwotICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQcm9wZXJ0
eShDU1NfUFJPUF9GT05UX1NJWkUsIGRlc2lyZWRGb250U2l6ZVN0cmluZywgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgICAgIGlubGluZVN0eWxlRGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRk9O
VF9TSVpFLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUpICsgInB4IiwgZmFsc2UsIGZh
bHNlKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbSwgc3R5bGVBdHRyLCBpbmxp
bmVTdHlsZURlY2wtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlubGluZVN0
eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCkgewpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IENoYW5nZUxvZwkocmV2aXNpb24gMTM1MjcpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSwxNzkgQEAKIDIwMDYtMDMtMjcgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBs
ZS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmVwbGFjZSBtb3JlIERlcHJlY2F0ZWRTdHJpbmcgd2l0aCBTdHJpbmcuCisgICAgICAgIEFkZCBT
dHJpbmc6OnNwcmludGYoKSBhbmQgU3RyaW5nOjpudW1iZXIoKQorICAgICAgICBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTgwMDkKKworICAgICAgICAqIGJp
bmRpbmdzL29iamMvRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTFRleHRBcmVhRWxlbWVu
dCBzZXRDb2xzOl0pOgorICAgICAgICAoLVtET01IVE1MVGV4dEFyZWFFbGVtZW50IHNldFJvd3M6
XSk6CisgICAgICAgICgtW0RPTUhUTUxPTGlzdEVsZW1lbnQgc2V0U3RhcnQ6XSk6CisgICAgICAg
ICgtW0RPTUhUTUxQcmVFbGVtZW50IHNldFdpZHRoOl0pOgorICAgICAgICAoLVtET01IVE1MSW1h
Z2VFbGVtZW50IHNldEhlaWdodDpdKToKKyAgICAgICAgKC1bRE9NSFRNTEltYWdlRWxlbWVudCBz
ZXRIc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxJbWFnZUVsZW1lbnQgc2V0VnNwYWNlOl0p
OgorICAgICAgICAoLVtET01IVE1MSW1hZ2VFbGVtZW50IHNldFdpZHRoOl0pOgorICAgICAgICAo
LVtET01IVE1MT2JqZWN0RWxlbWVudCBzZXRIc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxP
YmplY3RFbGVtZW50IHNldFRhYkluZGV4Ol0pOgorICAgICAgICAoLVtET01IVE1MT2JqZWN0RWxl
bWVudCBzZXRWc3BhY2U6XSk6CisgICAgICAgICgtW0RPTUhUTUxBcHBsZXRFbGVtZW50IHNldEhz
cGFjZTpdKToKKyAgICAgICAgKC1bRE9NSFRNTEFwcGxldEVsZW1lbnQgc2V0VnNwYWNlOl0pOgor
ICAgICAgICAoLVtET01IVE1MQXJlYUVsZW1lbnQgc2V0VGFiSW5kZXg6XSk6CisgICAgICAgICgt
W0RPTUhUTUxUYWJsZUNvbEVsZW1lbnQgc2V0U3BhbjpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQgc2V0Q29sU3BhbjpdKToKKyAgICAgICAgKC1bRE9NSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQgc2V0Um93U3BhbjpdKToKKyAgICAgICAgKC1bRE9NSFRNTEVtYmVkRWxlbWVudCBz
ZXRIZWlnaHQ6XSk6CisgICAgICAgICgtW0RPTUhUTUxFbWJlZEVsZW1lbnQgc2V0V2lkdGg6XSk6
CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbToKKyAgICAgICAgKFN0cmlu
Zzo6U3RyaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om51bWJlckFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAg
ICAgICogY3NzL2Nzc192YWx1ZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAg
ICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Zm9ybWF0Rm9yRGVi
dWdnZXIpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKyAgICAgICAgKiBkb20veG1sX3Rva2Vu
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVycm9yKToKKyAgICAg
ICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAg
KiBodG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEdlbmVyaWNGb3JtRWxlbWVudDo6ZmluZE1hdGNoaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudDo6c2V0VGFiSW5kZXgpOgorICAgICAgICAqIGh0bWwv
SFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpzZXRNYXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OnNldENvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0
Um93cyk6CisgICAgICAgICogaHRtbC9odG1sX2Jhc2VpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAqIGh0
bWwvaHRtbF9ibG9ja2ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEhSRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQ6
OnNldFdpZHRoKToKKyAgICAgICAgKiBodG1sL2h0bWxfaW1hZ2VpbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50OjpzZXRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNldEhzcGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRWc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c2V0V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50OjpzZXRUYWJJbmRleCk6CisgICAgICAgICogaHRtbC9odG1sX2lu
bGluZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldFRh
YkluZGV4KToKKyAgICAgICAgKiBodG1sL2h0bWxfbGlzdGltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9MaXN0RWxlbWVudDo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExJRWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvaHRtbF9vYmplY3RpbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpzZXRUYWJJbmRleCk6Cisg
ICAgICAgICogaHRtbC9odG1sX3RhYmxlaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50OjpzZXRTcGFuKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwOgorICAgICAgICAoS0pTOjpXaW5kb3c6OmlzU2FmZVNjcmlwdCk6CisgICAgICAgIChLSlM6
OkxvY2F0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKiBrc3ZnMi9jc3MvU1ZHQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IpOgorICAgICAgICAq
IGtzdmcyL3N2Zy9TVkdBbmdsZS5jcHA6CisgICAgICAgIChTVkdBbmdsZTo6c2V0VmFsdWVBc1N0
cmluZyk6CisgICAgICAgIChTVkdBbmdsZTo6dmFsdWVBc1N0cmluZyk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0FuZ2xlLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHA6Cisg
ICAgICAgIChTVkdMZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICAoU1ZHTGVuZ3Ro
Ojp2YWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmg6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWc6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZzo6
dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJjLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoU2VnQXJjQWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdBcmNBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdBcmNSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0FyY1JlbDo6dG9TdHJpbmcpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdQYXRoU2VnQ2xvc2VQYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ2xvc2VQ
YXRoOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdD
bG9zZVBhdGg6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6
cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjp0b1N0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpwYXRoU2VnVHlw
ZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw6OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
QWJzOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6dG9TdHJpbmcpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnBhdGhTZWdU
eXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnM6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpwYXRoU2VnVHlwZUFzTGV0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjp0b1N0cmluZyk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhTZWdMaW5ldG9BYnM6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnTGluZXRvUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFiczo6cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OnBhdGhTZWdUeXBlQXNM
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6
OnRvU3RyaW5nKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnBhdGhT
ZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsQWJzOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGluZXRvVmVy
dGljYWxSZWw6OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1BhdGhTZWdNb3ZldG8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdNb3ZldG9BYnM6
OnBhdGhTZWdUeXBlQXNMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01vdmV0
b0Ficzo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ01vdmV0b1JlbDo6
cGF0aFNlZ1R5cGVBc0xldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTW92ZXRv
UmVsOjp0b1N0cmluZyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR1BvbHlFbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdTdG9wRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL0F0b21pY1N0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3Ry
aW5nOjp0b0ludCk6CisgICAgICAgICogcGxhdGZvcm0vQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6Om5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0NvbG9yLmg6CisgICAgICAg
ICogcGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpzcHJpbnRmKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZzo6bnVtYmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6OmluaXRXaXRoUUNoYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0tleUV2ZW50TWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvcktleUV2ZW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlk
ZXI6OnZhbHVlQ2hhbmdlZCk6CisKKzIwMDYtMDMtMjcgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBh
cHBsZS5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgbWpzLgogCiAgICAgICAgIEdpdmUgU3Ry
aW5nSW1wbCBhIGxpdHRsZSBwcml2YWN5LgpJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9jc3NfdmFsdWVpbXBsLmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBj
c3MvY3NzX3ZhbHVlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNiBAQCBT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByCiAgICAgICAgIHJldHVybiBn
ZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwogICAgIH0KICAgICB9Ci0gICAgLy9r
ZERlYnVnKCkgPDwga19mdW5jaW5mbyA8PCAicHJvcGVydHkgbm90IGZvdW5kOiIgPDwgcHJvcGVy
dHlJRCA8PCBlbmRsOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtOTM4LDU1ICs5Mzcs
NTUgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAg
ICAgLy8gIyMjCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgot
ICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSk7
CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0
ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKKyAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiJSI7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgdGV4dCA9IERl
cHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0iOworICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJlbSI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfRVhTOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0
ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOworICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJleCI7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NfUFg6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJweCI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgInB4IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENTU19DTToKLSAgICAgICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgImNtIjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAiY20iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1NTX01NOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAibW0iOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUubnVtKSArICJtbSI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfSU46
Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJpbiI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgImluIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19QVDoKLSAgICAg
ICAgICAgIHRleHQgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0
IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHQi
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAgICAg
dGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOworICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwYyI7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfREVHOgotICAgICAgICAgICAgdGV4dCA9
IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKKyAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVw
cmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOworICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVj
YXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJncmFkIjsKKyAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gRGVwcmVjYXRl
ZFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtcyI7CisgICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU19TOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicyI7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgInMiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTX0haOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlciht
X3ZhbHVlLm51bSkgKyAiaHoiOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJoeiI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1Nf
S0haOgotICAgICAgICAgICAgdGV4dCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAia2h6IjsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAia2h6IjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19ESU1F
TlNJT046CiAgICAgICAgICAgICAvLyAjIyMKQEAgLTEwMjEsMTEgKzEwMjAsMTEgQEAgU3RyaW5n
IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgICAgIHRleHQg
PSAicmdiYSgiOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRleHQgPSAicmdi
KCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihjb2xvci5y
ZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIoY29sb3IuYmx1ZSgpKTsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5n
OjpudW1iZXIoY29sb3IucmVkKCkpICsgIiwgIjsKKyAgICAgICAgICAgIHRleHQgKz0gU3RyaW5n
OjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOworICAgICAgICAgICAgdGV4dCArPSBTdHJp
bmc6Om51bWJlcihjb2xvci5ibHVlKCkpOwogICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkg
PCAweEZGKQotICAgICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIERlcHJlY2F0ZWRTdHJpbmc6
Om51bWJlcigoZmxvYXQpY29sb3IuYWxwaGEoKSAvIDB4RkYpOworICAgICAgICAgICAgICAgIHRl
eHQgKz0gIiwgIiArIFN0cmluZzo6bnVtYmVyKChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7
CiAgICAgICAgICAgICB0ZXh0ICs9ICIpIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkluZGV4OiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTM1MjcpCisr
KyBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjk3LDEwICsyOTcsMTAgQEAgdm9pZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldENz
cwogfQogCiAvLyBEaXNwbGF5IGludGVnZXJzIGluIGludGVnZXIgZm9ybWF0IGluc3RlYWQgb2Yg
IjEuMCIuCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBudW1iZXJBc1N0cmluZyhkb3VibGUgbikK
K3N0YXRpYyBTdHJpbmcgbnVtYmVyQXNTdHJpbmcoZG91YmxlIG4pCiB7CiAgICAgbG9uZyBpID0g
c3RhdGljX2Nhc3Q8bG9uZz4obik7Ci0gICAgcmV0dXJuIGkgPT0gbiA/IERlcHJlY2F0ZWRTdHJp
bmc6Om51bWJlcihpKSA6IERlcHJlY2F0ZWRTdHJpbmc6Om51bWJlcihuKTsKKyAgICByZXR1cm4g
aSA9PSBuID8gU3RyaW5nOjpudW1iZXIoaSkgOiBTdHJpbmc6Om51bWJlcihuKTsKIH0KIAogUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdApAQCAtMzkxLDEwICszOTEsNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxfU0VQQVJBVEUpOwogICAgIGNhc2UgQ1NTX1BS
T1BfQk9SREVSX1NQQUNJTkc6CiAgICAgewotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmlu
ZyhudW1iZXJBc1N0cmluZyhzdHlsZS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSkgKyAKLSAg
ICAgICAgICAgICJweCAiICsgCi0gICAgICAgICAgICBudW1iZXJBc1N0cmluZyhzdHlsZS0+dmVy
dGljYWxCb3JkZXJTcGFjaW5nKCkpICsKLSAgICAgICAgICAgICJweCIpOworICAgICAgICBTdHJp
bmcgc3RyaW5nKG51bWJlckFzU3RyaW5nKHN0eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygp
KSArICJweCAiICsgbnVtYmVyQXNTdHJpbmcoc3R5bGUtPnZlcnRpY2FsQm9yZGVyU3BhY2luZygp
KSArICJweCIpOwogICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0cmluZywg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgIH0KICAgICBjYXNlIENTU19QUk9Q
X19LSFRNTF9CT1JERVJfSE9SSVpPTlRBTF9TUEFDSU5HOgpJbmRleDoga3N2ZzIvc3ZnL1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYy5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicygpOwogCiAg
ICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVy
biBQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1w
bCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJD
Iik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiQyAlMSAlMiAlMyAlNCAlNSAl
NiIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feDIpLmFyZyhtX3kyKS5hcmcobV94KS5hcmco
bV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29u
c3QgeyByZXR1cm4gIkMiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nOjpzcHJpbnRmKCJDICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUu
NmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94MiwgbV95MiwgbV94LCBtX3kpOyB9CiAKICAgICAg
ICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC03Miw4
ICs3Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhT
ZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDsgfQotICAg
ICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJl
dHVybiBuZXcgU3RyaW5nSW1wbCgiYyIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoImMgJTEgJTIgJTMgJTQgJTUgJTYiKS5hcmcobV94MSkuYXJnKG1feTEpLmFyZyhtX3gyKS5h
cmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0
aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJjIjsgfQorICAgICAgICB2aXJ0dWFs
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigiYyAlLjZs
ZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDEsIG1feTEsIG1feDIsIG1feTIs
IG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3Vi
bGUgeCgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR0FuZ2xlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5nbGUuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9T
VkdBbmdsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDkgQEAgZmxvYXQgU1ZHQW5n
bGU6OnZhbHVlSW5TcGVjaWZpZWRVbml0cygpIAogICAgIHJldHVybiBtX3ZhbHVlSW5TcGVjaWZp
ZWRVbml0czsKIH0KIAotdm9pZCBTVkdBbmdsZTo6c2V0VmFsdWVBc1N0cmluZyhTdHJpbmdJbXBs
ICp2YWx1ZUFzU3RyaW5nKQordm9pZCBTVkdBbmdsZTo6c2V0VmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmcmIHMpCiB7Ci0gICAgbV92YWx1ZUFzU3RyaW5nID0gU3RyaW5nKHZhbHVlQXNTdHJpbmcp
OworICAgIG1fdmFsdWVBc1N0cmluZyA9IHM7CiAKICAgICBib29sIGJPSzsKICAgICBtX3ZhbHVl
SW5TcGVjaWZpZWRVbml0cyA9IG1fdmFsdWVBc1N0cmluZy5kZXByZWNhdGVkU3RyaW5nKCkudG9E
b3VibGUoJmJPSyk7CkBAIC0xMDYsOSArMTA2LDkgQEAgdm9pZCBTVkdBbmdsZTo6c2V0VmFsdWVB
c1N0cmluZyhTdHJpbmdJbQogICAgIGNhbGN1bGF0ZSgpOwogfQogCi1TdHJpbmdJbXBsICpTVkdB
bmdsZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgU1ZHQW5nbGU6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAogewotICAgIG1fdmFsdWVBc1N0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6Om51
bWJlcihtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CisgICAgbV92YWx1ZUFzU3RyaW5nID0gU3Ry
aW5nOjpudW1iZXIobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogCiAgICAgc3dpdGNoKG1fdW5p
dFR5cGUpIHsKICAgICAgICAgY2FzZSBTVkdfQU5HTEVUWVBFX1VOU1BFQ0lGSUVEOgpAQCAtMTIz
LDcgKzEyMyw3IEBAIFN0cmluZ0ltcGwgKlNWR0FuZ2xlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gbV92YWx1ZUFzU3RyaW5n
LmltcGwoKTsKKyAgICByZXR1cm4gbV92YWx1ZUFzU3RyaW5nOwogfQogCiB2b2lkIFNWR0FuZ2xl
OjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2
YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0by5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRvLmgJKHJldmlzaW9uIDEz
NTI3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG8uaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRo
U2VnTGluZXRvQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElORVRPX0FCUzsgfQotICAgICAgICB2aXJ0
dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcg
U3RyaW5nSW1wbCgiTCIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIkwgJTEg
JTIiKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2Vn
VHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkwiOyB9CisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nOjpzcHJpbnRmKCJMICUuNmxnICUu
NmxnIiwgbV94LCBtX3kpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAg
IGRvdWJsZSB4KCkgY29uc3Q7CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5ldG9SZWwoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5F
VE9fUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRl
cigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJsIik7IH0KLSAgICAgICAgdmlydHVh
bCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMSgibCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAibCI7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJp
bmc6OnNwcmludGYoImwgJS42bGcgJS42bGciLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lk
IHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2
Zy9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICsz
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRo
U2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOyB9
Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0
IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJIIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNh
dGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJv
bUxhdGluMSgiSCAlMSIpLmFyZyhtX3gpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhT
ZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiSCI7IH0KKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmc6OnNwcmludGYoIkggJS42bGci
LCBtX3gpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4
KCkgY29uc3Q7CkBAIC01Miw4ICs1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZp
cnR1YWwgflNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKCk7CiAKICAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfTElO
RVRPX0hPUklaT05UQUxfUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNl
Z1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJoIik7IH0KLSAg
ICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
RGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiaCAlMSIpLmFyZyhtX3gpOyB9CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiaCI7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJp
bmc6OnNwcmludGYoImggJS42bGciLCBtX3gpOyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJs
ZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGVuZ3Ro
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkocmV2aXNpb24gMTM1
MjcpCisrKyBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEz
ICsxMDksMTIgQEAgZmxvYXQgU1ZHTGVuZ3RoOjp2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKQogICAg
IHJldHVybiBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0czsKIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotdm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlQXNT
dHJpbmcoU3RyaW5nSW1wbCogcykKK3ZvaWQgU1ZHTGVuZ3RoOjpzZXRWYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYgcykKIHsKLSAgICBTdHJpbmcgdmFsdWVBc1N0cmluZyhzKTsKLSAgICBpZih2
YWx1ZUFzU3RyaW5nLmlzRW1wdHkoKSkKKyAgICBpZihzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyB2YWx1ZUFzUVN0cmluZyA9IHZhbHVlQXNTdHJp
bmcuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgdmFsdWVBc1FTdHJp
bmcgPSBzLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAogICAgIGRvdWJsZSBjb252ZXJ0ZWROdW1iZXIg
PSAwOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gdmFsdWVBc1FTdHJpbmcubGF0aW4xKCk7CkBA
IC0xMjMsMjcgKzEyMiwyNiBAQCB2b2lkIFNWR0xlbmd0aDo6c2V0VmFsdWVBc1N0cmluZyhTdHJp
bmdJCiAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBjb252ZXJ0ZWROdW1iZXI7CiAKICAg
ICB1bnNpZ25lZCBpbnQgZGlmZiA9IGVuZCAtIHN0YXJ0OwotICAgIGlmKGRpZmYgPCB2YWx1ZUFz
UVN0cmluZy5sZW5ndGgoKSkKLSAgICB7Ci0gICAgICAgIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNX
aXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BYXSkpCisgICAgaWYgKGRpZmYgPCB2YWx1ZUFz
UVN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBpZiAocy5lbmRzV2l0aChVbml0VGV4dFtTVkdf
TEVOR1RIVFlQRV9QWF0pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBF
X1BYOwotICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NW
R19MRU5HVEhUWVBFX0NNXSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRb
U1ZHX0xFTkdUSFRZUEVfQ01dKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUgPSBTVkdfTEVOR1RI
VFlQRV9DTTsKLSAgICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5lbmRzV2l0aChVbml0VGV4
dFtTVkdfTEVOR1RIVFlQRV9QQ10pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRU
ZXh0W1NWR19MRU5HVEhUWVBFX1BDXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xF
TkdUSFRZUEVfUEM7Ci0gICAgICAgIGVsc2UgaWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5p
dFRleHRbU1ZHX0xFTkdUSFRZUEVfTU1dKSkKKyAgICAgICAgZWxzZSBpZiAocy5lbmRzV2l0aChV
bml0VGV4dFtTVkdfTEVOR1RIVFlQRV9NTV0pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNW
R19MRU5HVEhUWVBFX01NOwotICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRo
KFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX0lOXSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dp
dGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfSU5dKSkKICAgICAgICAgICAgIG1fdW5pdFR5cGUg
PSBTVkdfTEVOR1RIVFlQRV9JTjsKLSAgICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5lbmRz
V2l0aChVbml0VGV4dFtTVkdfTEVOR1RIVFlQRV9QVF0pKQorICAgICAgICBlbHNlIGlmIChzLmVu
ZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BUXSkpCiAgICAgICAgICAgICBtX3VuaXRU
eXBlID0gU1ZHX0xFTkdUSFRZUEVfUFQ7Ci0gICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5n
LmVuZHNXaXRoKFVuaXRUZXh0W1NWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0VdKSkKKyAgICAgICAg
IGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRV0p
KQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0U7Ci0g
ICAgICAgIGVsc2UgaWYodmFsdWVBc1FTdHJpbmcuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xFTkdU
SFRZUEVfRU1TXSkpCisgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoVW5pdFRleHRbU1ZHX0xF
TkdUSFRZUEVfRU1TXSkpCiAgICAgICAgICAgICBtX3VuaXRUeXBlID0gU1ZHX0xFTkdUSFRZUEVf
RU1TOwotICAgICAgICBlbHNlIGlmKHZhbHVlQXNRU3RyaW5nLmVuZHNXaXRoKFVuaXRUZXh0W1NW
R19MRU5HVEhUWVBFX0VYU10pKQorICAgICAgICBlbHNlIGlmIChzLmVuZHNXaXRoKFVuaXRUZXh0
W1NWR19MRU5HVEhUWVBFX0VYU10pKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNWR19MRU5H
VEhUWVBFX0VYUzsKLSAgICAgICAgZWxzZSBpZih2YWx1ZUFzUVN0cmluZy5pc0VtcHR5KCkpCisg
ICAgICAgIGVsc2UgaWYgKHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV91bml0VHlwZSA9IFNW
R19MRU5HVEhUWVBFX05VTUJFUjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV91bml0VHlw
ZSA9IFNWR19MRU5HVEhUWVBFX1VOS05PV047CkBAIC0xNTQsOSArMTUyLDkgQEAgdm9pZCBTVkdM
ZW5ndGg6OnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nSQogICAgIHVwZGF0ZVZhbHVlKCk7CiB9CiAK
LVN0cmluZ0ltcGwgKlNWR0xlbmd0aDo6dmFsdWVBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgU1ZH
TGVuZ3RoOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0lt
cGwoRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKSArIFVu
aXRUZXh0W21fdW5pdFR5cGVdKTsKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV92YWx1ZUlu
U3BlY2lmaWVkVW5pdHMpICsgVW5pdFRleHRbbV91bml0VHlwZV07CiB9CiAKIHZvaWQgU1ZHTGVu
Z3RoOjpuZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9h
dCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoLmgJKHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOyB9Ci0gICAg
ICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG5ldyBTdHJpbmdJbXBsKCJTIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MSgiUyAlMSAlMiAlMyAlNCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsg
cmV0dXJuICJTIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZzo6c3ByaW50ZigiUyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDIs
IG1feTIsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAg
ICBkb3VibGUgeCgpIGNvbnN0OwpAQCAtNjQsOCArNjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKCk7CiAKICAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMOyB9Ci0gICAgICAgIHZpcnR1YWwgU3Ry
aW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJ
bXBsKCJzIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgicyAlMSAlMiAlMyAl
NCIpLmFyZyhtX3gyKS5hcmcobV95MikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmly
dHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJzIjsgfQor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZzo6
c3ByaW50ZigicyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIG1feDIsIG1feTIsIG1feCwgbV95
KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwogICAgICAgICBkb3VibGUgeCgpIGNv
bnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgJKHJldmlzaW9u
IDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmly
dHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoKTsKIAogICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyByZXR1cm4gUEFUSFNFR19DVVJW
RVRPX1FVQURSQVRJQ19BQlM7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2Vn
VHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0cmluZ0ltcGwoIlEiKTsgfQotICAg
ICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKCJRICUxICUyICUzICU0IikuYXJnKG1feDEpLmFy
ZyhtX3kxKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRo
U2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIlEiOyB9CisgICAgICAgIHZpcnR1YWwg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nOjpzcHJpbnRmKCJRICUuNmxn
ICUuNmxnICUuNmxnICUuNmxnIiwgbV94MSwgbV95MSwgbV94LCBtX3kpOyB9CiAKICAgICAgICAg
dm9pZCBzZXRYKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB4KCkgY29uc3Q7CkBAIC02NCw4ICs2
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRo
U2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOyB9
Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0
IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJxIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNh
dGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJv
bUxhdGluMSgicSAlMSAlMiAlMyAlNCIpLmFyZyhtX3gxKS5hcmcobV95MSkuYXJnKG1feCkuYXJn
KG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNv
bnN0IHsgcmV0dXJuICJxIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIs
IG1feDEsIG1feTEsIG1feCwgbV95KTsgfQogIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsK
ICAgICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnQXJj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdBcmMuaAkocmV2aXNpb24gMTM1
MjcpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0FyYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdB
cmNBYnMoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gUEFUSFNFR19BUkNfQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
SW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBs
KCJBIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiQSAlMSAlMiAlMyAlNCAl
NSAlNiAlNyIpLmFyZyhtX3IxKS5hcmcobV9yMikuYXJnKG1fYW5nbGUpLmFyZyhtX2xhcmdlQXJj
RmxhZykuYXJnKG1fc3dlZXBGbGFnKS5hcmcobV94KS5hcmcobV95KTsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIkEiOyB9Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nOjpz
cHJpbnRmKCJBICUuNmxnICUuNmxnICUuNmxnICVkICVkICUuNmxnICUuNmxnIiwgbV9yMSwgbV9y
MiwgbV9hbmdsZSwgbV9sYXJnZUFyY0ZsYWcsIG1fc3dlZXBGbGFnLCBtX3gsIG1feSk7IH0KIAog
ICAgICAgICB2b2lkIHNldFgoZG91YmxlIHgpOwogICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpA
QCAtNzcsOCArNzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQ
YXRoU2VnQXJjUmVsKCk7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2Vn
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBVEhTRUdfQVJDX1JFTDsgfQotICAgICAgICB2aXJ0dWFs
IFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3Ry
aW5nSW1wbCgiYSIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoImEgJTEgJTIg
JTMgJTQgJTUgJTYgJTciKS5hcmcobV9yMSkuYXJnKG1fcjIpLmFyZyhtX2FuZ2xlKS5hcmcobV9s
YXJnZUFyY0ZsYWcpLmFyZyhtX3N3ZWVwRmxhZykuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJh
IjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0
cmluZzo6c3ByaW50ZigiYSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyIsIG1f
cjEsIG1fcjIsIG1fYW5nbGUsIG1fbGFyZ2VBcmNGbGFnLCBtX3N3ZWVwRmxhZywgbV94LCBtX3kp
OyB9CiAKICAgICAgICAgdm9pZCBzZXRYKGRvdWJsZSB4KTsKICAgICAgICAgZG91YmxlIHgoKSBj
b25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3ZnMi9z
dmcvU1ZHUGF0aFNlZ01vdmV0by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhTZWdNb3ZldG9BYnMoKTsK
IAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gUEFUSFNFR19NT1ZFVE9fQUJTOyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nSW1wbCAq
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCJNIik7
IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgiTSAlMSAlMiIpLmFyZyhtX3gpLmFy
ZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBj
b25zdCB7IHJldHVybiAiTSI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBTdHJpbmc6OnNwcmludGYoIk0gJS42bGcgJS42bGciLCBtX3gsIG1feSk7
IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAgICAgICAgZG91YmxlIHgoKSBjb25z
dDsKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+
U1ZHUGF0aFNlZ01vdmV0b1JlbCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQg
cGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX01PVkVUT19SRUw7IH0KLSAgICAg
ICAgdmlydHVhbCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1
cm4gbmV3IFN0cmluZ0ltcGwoIm0iKTsgfQotICAgICAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4x
KCJtICUxICUyIikuYXJnKG1feCkuYXJnKG1feSk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
cGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuICJtIjsgfQorICAgICAgICB2aXJ0
dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZzo6c3ByaW50ZigibSAl
LjZsZyAlLjZsZyIsIG1feCwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChkb3VibGUpOwog
ICAgICAgICBkb3VibGUgeCgpIGNvbnN0OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDbG9z
ZVBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5oCShy
ZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnQ2xvc2VQYXRoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmly
dHVhbCB+U1ZHUGF0aFNlZ0Nsb3NlUGF0aCgpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
c2hvcnQgcGF0aFNlZ1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX0NMT1NFUEFUSDsgfQot
ICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwgKnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7
IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiWiIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRl
ZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJaIjsgfQorICAgICAgICB2aXJ0dWFs
IFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gIloiOyB9CisgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIloiOyB9CiAgICAg
fTsKIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdMZW5ndGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHTGVuZ3RoLmgJKHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR0xlbmd0
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cygpIGNvbnN0OwogICAgICAgICB2b2lk
IHNldFZhbHVlSW5TcGVjaWZpZWRVbml0cyhmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
Ci0gICAgICAgIFN0cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRWYWx1ZUFzU3RyaW5nKFN0cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcpOworICAgICAgICBT
dHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OworICAgICAgICB2b2lkIHNldFZhbHVlQXNTdHJp
bmcoY29uc3QgU3RyaW5nJik7CiAKICAgICAgICAgdm9pZCBuZXdWYWx1ZVNwZWNpZmllZFVuaXRz
KHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
ICAgICAgICB2b2lkIGNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBrc3ZnMi9z
dmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNSArNTQsMTQgQEAg
dm9pZCBTVkdTdG9wRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogewogICAgIGNvbnN0IFN0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6Om9mZnNldEF0dHIpIHsKLSAgICAgICAgaWYodmFsdWUuZGVwcmVjYXRlZFN0cmluZygp
LmVuZHNXaXRoKCIlIikpCisgICAgICAgIGlmKHZhbHVlLmVuZHNXaXRoKCIlIikpCiAgICAgICAg
ICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkubGVmdCh2
YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRv
RG91YmxlKCkpOwogICAgIH0gZWxzZQogICAgICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIAotICAgIGlmKCFvd25lckRvY3VtZW50KCktPnBhcnNpbmco
KSAmJiBhdHRhY2hlZCgpKQotICAgIHsKKyAgICBpZiAoIW93bmVyRG9jdW1lbnQoKS0+cGFyc2lu
ZygpICYmIGF0dGFjaGVkKCkpIHsKICAgICAgICAgcmVjYWxjU3R5bGUoRm9yY2UpOwogICAgICAg
ICAKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqcGFyZW50U3R5bGVkID0gc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudCAqPihwYXJlbnROb2RlKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0Fu
Z2xlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuZ2xlLmgJKHJldmlzaW9uIDEzNTI3
KQorKysga3N2ZzIvc3ZnL1NWR0FuZ2xlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdm9pZCBzZXRWYWx1ZUluU3BlY2lmaWVkVW5p
dHMoZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKICAgICAgICAgZmxvYXQgdmFsdWVJblNw
ZWNpZmllZFVuaXRzKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRWYWx1ZUFzU3RyaW5nKFN0
cmluZ0ltcGwgKnZhbHVlQXNTdHJpbmcpOwotICAgICAgICBTdHJpbmdJbXBsICp2YWx1ZUFzU3Ry
aW5nKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgICAgICB2b2lk
IG5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZh
bHVlSW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5p
dHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZy5oCShyZXZpc2lvbiAxMzUyNykK
KysrIGtzdmcyL3N2Zy9TVkdQYXRoU2VnLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcg
QEAKICNpZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiU2hhcmVkLmgiCi0jaW5jbHVkZSAiU3Ry
aW5nSW1wbC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlICJrc3Zn
LmgiCiAKQEAgLTQwLDggKzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCB+U1ZHUGF0aFNlZygpOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcGF0aFNl
Z1R5cGUoKSBjb25zdCB7IHJldHVybiBQQVRIU0VHX1VOS05PV047IH0KLSAgICAgICAgdmlydHVh
bCBTdHJpbmdJbXBsICpwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gbmV3IFN0
cmluZ0ltcGwoIiIpOyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIiIpOyB9Cisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVy
biAiIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
ICIiOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
Km1fY29udGV4dDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTM1MjcpCisrKyBr
c3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3
IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUNoYW4KICAgICBpbnQgbGVu
ID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CiAgICAgICAgIFNWR1BvaW50ICpwID0gcG9pbnRzKCktPmdldEl0ZW0oaSk7Ci0g
ICAgICAgIF9wb2ludHMgKz0gRGVwcmVjYXRlZFN0cmluZygiJTEgJTIgIikuYXJnKHAtPngoKSku
YXJnKHAtPnkoKSk7CisgICAgICAgIF9wb2ludHMgKz0gU3RyaW5nOjpzcHJpbnRmKCIlLjZsZyAl
LjZsZyAiLCBwLT54KCksIHAtPnkoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHAoInBvaW50cyIp
OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgJ
KHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMo
KTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3Qg
eyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJUIik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
VCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAiVCI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmc6OnNwcmludGYoIlQgJS42
bGcgJS42bGciLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAg
ICAgICAgZG91YmxlIHgoKSBjb25zdDsKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwo
KTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkgY29uc3Qg
eyByZXR1cm4gUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG5ldyBTdHJpbmdJbXBsKCJ0Iik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5n
IHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgi
dCAlMSAlMiIpLmFyZyhtX3gpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBh
dGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiAidCI7IH0KKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmc6OnNwcmludGYoInQgJS42
bGcgJS42bGciLCBtX3gsIG1feSk7IH0KIAogICAgICAgICB2b2lkIHNldFgoZG91YmxlKTsKICAg
ICAgICAgZG91YmxlIHgoKSBjb25zdDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRoU2VnTGluZXRv
VmVydGljYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmgJKHJldmlzaW9uIDEzNTI3KQorKysga3N2ZzIvc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgICAgICAgIHZpcnR1YWx+U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKCk7CiAKICAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBwYXRoU2VnVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBB
VEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZ0ltcGwg
KnBhdGhTZWdUeXBlQXNMZXR0ZXIoKSBjb25zdCB7IHJldHVybiBuZXcgU3RyaW5nSW1wbCgiViIp
OyB9Ci0gICAgICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoIlYgJTEiKS5hcmcobV95KTsgfQor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBwYXRoU2VnVHlwZUFzTGV0dGVyKCkgY29uc3QgeyByZXR1
cm4gIlYiOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gU3RyaW5nOjpzcHJpbnRmKCJWICUuNmxnIiwgbV95KTsgfQogCiAgICAgICAgIHZvaWQgc2V0
WShkb3VibGUpOwogICAgICAgICBkb3VibGUgeSgpIGNvbnN0OwpAQCAtNTIsOCArNTIsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxSZWwoKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHBhdGhTZWdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMOyB9Ci0gICAgICAgIHZp
cnR1YWwgU3RyaW5nSW1wbCAqcGF0aFNlZ1R5cGVBc0xldHRlcigpIGNvbnN0IHsgcmV0dXJuIG5l
dyBTdHJpbmdJbXBsKCJ2Iik7IH0KLSAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHRv
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMSgidiAl
MSIpLmFyZyhtX3kpOyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHBhdGhTZWdUeXBlQXNMZXR0
ZXIoKSBjb25zdCB7IHJldHVybiAidiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdCB7IHJldHVybiBTdHJpbmc6OnNwcmludGYoInYgJS42bGciLCBtX3kpOyB9CiAK
ICAgICAgICAgdm9pZCBzZXRZKGRvdWJsZSk7CiAgICAgICAgIGRvdWJsZSB5KCkgY29uc3Q7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE4ICsxMTEsMTcgQEAgdm9pZCBTVkdV
c2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKICAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF93ID0g
d2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZh
bHVlKCk7CiAgICAgCi0gICAgU3RyaW5nIHdTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpudW1i
ZXIoX3cpOwotICAgIFN0cmluZyBoU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZzo6bnVtYmVyKF9o
KTsKKyAgICBTdHJpbmcgd1N0cmluZyA9IFN0cmluZzo6bnVtYmVyKF93KTsKKyAgICBTdHJpbmcg
aFN0cmluZyA9IFN0cmluZzo6bnVtYmVyKF9oKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
OwotICAgIERlcHJlY2F0ZWRTdHJpbmcgdHJhbnMgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0
aW4xKCJ0cmFuc2xhdGUoJTEsICUyKSIpLmFyZyhfeCkuYXJnKF95KTsKLSAgICBpZih0YXJnZXQt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpCi0gICAgeworICAgIFN0cmluZyB0cmFu
cyA9IFN0cmluZzo6c3ByaW50ZigidHJhbnNsYXRlKCVmLCAlZikiLCBfeCwgX3kpOworICAgIGlm
KHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkgewogICAgICAgICBSZWZQ
dHI8U1ZHRWxlbWVudD4gZHVtbXkgPSBuZXcgU1ZHU1ZHRWxlbWVudChTVkdOYW1lczo6c3ZnVGFn
LCBnZXREb2N1bWVudCgpKTsKLSAgICAgICAgaWYoX3cgPiAwKQotICAgICAgICAgICAgZHVtbXkt
PnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3U3RyaW5nLmltcGwoKSk7Ci0gICAg
ICAgIGlmKF9oID4gMCkKLSAgICAgICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmhlaWdodEF0dHIsIGhTdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgaWYgKF93ID4gMCkKKyAgICAg
ICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZyk7
CisgICAgICAgIGlmIChfaCA+IDApCisgICAgICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNW
R05hbWVzOjpoZWlnaHRBdHRyLCBoU3RyaW5nKTsKICAgICAgICAgCiAgICAgICAgIFNWR1N5bWJv
bEVsZW1lbnQgKnN5bWJvbCA9IHN0YXRpY19jYXN0PFNWR1N5bWJvbEVsZW1lbnQgKj4odGFyZ2V0
KTsKICAgICAgICAgaWYgKHN5bWJvbC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp2aWV3Qm94QXR0
cikpIHsKQEAgLTEzMiwyOCArMTMxLDI0IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5k
ZXJlcigpCiAgICAgICAgIHRhcmdldC0+Y2xvbmVDaGlsZE5vZGVzKGR1bW15LmdldCgpKTsKIAog
ICAgICAgICBSZWZQdHI8U1ZHRWxlbWVudD4gZHVtbXkyID0gbmV3IFNWR0R1bW15RWxlbWVudChT
VkdOYW1lczo6Z1RhZywgZ2V0RG9jdW1lbnQoKSk7Ci0gICAgICAgIGR1bW15Mi0+c2V0QXR0cmli
dXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBTdHJpbmcodHJhbnMpKTsKKyAgICAgICAgZHVt
bXkyLT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5zKTsKICAgICAg
ICAgCiAgICAgICAgIGFwcGVuZENoaWxkKGR1bW15MiwgZWMpOwogICAgICAgICBkdW1teTItPmFw
cGVuZENoaWxkKGR1bW15LCBlYyk7Ci0gICAgfQotICAgIGVsc2UgaWYodGFyZ2V0LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjpzdmdUYWcpKQotICAgIHsKKyAgICB9IGVsc2UgaWYodGFyZ2V0LT5oYXNU
YWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7CiAgICAgICAgIFJlZlB0cjxTVkdEdW1teUVsZW1l
bnQ+IGR1bW15ID0gbmV3IFNWR0R1bW15RWxlbWVudChTVkdOYW1lczo6Z1RhZywgZ2V0RG9jdW1l
bnQoKSk7Ci0gICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0
dHIsIFN0cmluZyh0cmFucykpOworICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVz
Ojp0cmFuc2Zvcm1BdHRyLCB0cmFucyk7CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8U1ZHRWxl
bWVudD4gcm9vdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LT5jbG9u
ZU5vZGUodHJ1ZSkpOwogICAgICAgICBpZihoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0
cikpCi0gICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwg
d1N0cmluZy5pbXBsKCkpOworICAgICAgICAgICAgcm9vdC0+c2V0QXR0cmlidXRlKFNWR05hbWVz
Ojp3aWR0aEF0dHIsIHdTdHJpbmcpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmKGhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhTdHJpbmcuaW1wbCgpKTsKKyAgICAgICAgICAgIHJv
b3QtPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgYXBwZW5kQ2hpbGQoZHVtbXksIGVjKTsKICAgICAgICAgZHVtbXktPmFw
cGVuZENoaWxkKHJvb3QucmVsZWFzZSgpLCBlYyk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Cisg
ICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPFNWR0R1bW15RWxlbWVudD4gZHVtbXkgPSBuZXcg
U1ZHRHVtbXlFbGVtZW50KFNWR05hbWVzOjpnVGFnLCBnZXREb2N1bWVudCgpKTsKICAgICAgICAg
ZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6dHJhbnNmb3JtQXR0ciwgdHJhbnMpOwogICAg
ICAgICAKSW5kZXg6IGtzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzUyNykKKysrIGtzdmcyL2Nzcy9T
VkdDU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsOSArMzQ1LDggQEAgQ1NTVmFs
dWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiAgICAgS0RPTUNTU1ZhbHVlICp2YWx1ZSA9
IHZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYKICAgICAgICB2YWx1ZS0+ZlZhbHVlID49
IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgewotICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nIHN0cjsKLSAgICAgICAgc3RyLnNwcmludGYoIiUwNmQiLCAoaW50KSh2YWx1ZS0+ZlZhbHVl
Ky41KSk7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xP
UiwgMCwgbmV3IFN0cmluZ0ltcGwoc3RyKSk7CisgICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmc6
OnNwcmludGYoIiUwNmQiLCAoaW50KSh2YWx1ZS0+ZlZhbHVlKy41KSk7CisgICAgICAgIHJldHVy
biBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgMCwgc3RyLmltcGwoKSk7CiAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNP
TE9SKSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSAiIyIgKyBkb21TdHJpbmcodmFsdWUtPnN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwg
MCwgc3RyLmltcGwoKSk7CkBAIC0zNzksOSArMzc4LDggQEAgQ1NTVmFsdWUgKkNTU1BhcnNlcjo6
cGFyc2VTVkdQYWludCgpCiAgICAgICAgIHIgPSBrTWF4KDAsIGtNaW4oMjU1LCByKSk7CiAgICAg
ICAgIGcgPSBrTWF4KDAsIGtNaW4oMjU1LCBnKSk7CiAgICAgICAgIGIgPSBrTWF4KDAsIGtNaW4o
MjU1LCBiKSk7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwotICAgICAgICBzdHIuc3By
aW50ZigicmdiKCVkLCAlZCwgJWQpIiwgciwgZywgYik7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZH
UGFpbnQoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgMCwgbmV3IFN0cmluZ0ltcGwoc3RyKSk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50KFNWR19QQUlOVFRZUEVfUkdCQ09M
T1IsIDAsIFN0cmluZzo6c3ByaW50ZigicmdiKCVkLCAlZCwgJWQpIiwgciwgZywgYikuaW1wbCgp
KTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MiwxMiArMzkwLDkg
QEAgQ1NTVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiBDU1NWYWx1ZSAqQ1NTUGFy
c2VyOjpwYXJzZVNWR0NvbG9yKCkKIHsKICAgICBLRE9NQ1NTVmFsdWUgKnZhbHVlID0gdmFsdWVM
aXN0LT5jdXJyZW50KCk7Ci0gICAgaWYoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJgotICAgICAgIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYg
dmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3Ry
OwotICAgICAgICBzdHIuc3ByaW50ZigiJTA2ZCIsIChpbnQpKHZhbHVlLT5mVmFsdWUrLjUpKTsK
LSAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihuZXcgU3RyaW5nSW1wbChzdHIpKTsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1Ip
IHsKKyAgICBpZiAoIXN0cmljdCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUiAmJiB2YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAw
MDAwLikKKyAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihTdHJpbmc6OnNwcmludGYoIiUwNmQi
LCAoaW50KSh2YWx1ZS0+ZlZhbHVlKy41KSkuaW1wbCgpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SKSB7CiAgICAgICAgIFN0cmlu
ZyBzdHIgPSAiIyIgKyBkb21TdHJpbmcodmFsdWUtPnN0cmluZyk7CiAgICAgICAgIHJldHVybiBu
ZXcgU1ZHQ29sb3Ioc3RyLmltcGwoKSk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8ICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkKQEAgLTQyNSw5ICs0MjAsOCBAQCBD
U1NWYWx1ZSAqQ1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKCkKICAgICAgICAgciA9IGtNYXgoMCwg
a01pbigyNTUsIHIpKTsKICAgICAgICAgZyA9IGtNYXgoMCwga01pbigyNTUsIGcpKTsKICAgICAg
ICAgYiA9IGtNYXgoMCwga01pbigyNTUsIGIpKTsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBz
dHI7Ci0gICAgICAgIHN0ci5zcHJpbnRmKCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcihuZXcgU3RyaW5nSW1wbChzdHIpKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoU3RyaW5nOjpzcHJpbnRmKCJyZ2IoJWQsICVk
LCAlZCkiLCByLCBnLCBiKS5pbXBsKCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDEzNTI3KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MTksMTEgKzE1MTksMTAgQEAgdm9pZCBGcmFtZTo6c3VibWl0Rm9ybShjb25zdCBjaGFyICphY3Rp
bwogICAgICAgICAgdG1wYm9keS5yZXBsYWNlKCcrJywgJyAnKTsKICAgICAgICAgIHRtcGJvZHkg
PSBLVVJMOjpkZWNvZGVfc3RyaW5nKHRtcGJvZHkpOyAgLy8gRGVjb2RlIHRoZSByZXN0IG9mIGl0
CiAgICAgICAgICBib2R5RW5jID0gS1VSTDo6ZW5jb2RlX3N0cmluZyh0bXBib2R5KTsgIC8vIFJl
Y29kZSBmb3IgdGhlIFVSTAotICAgICAgfSBlbHNlIHsKKyAgICAgIH0gZWxzZQogICAgICAgICAg
Ym9keUVuYyA9IEtVUkw6OmVuY29kZV9zdHJpbmcoZm9ybURhdGEuZmxhdHRlblRvU3RyaW5nKCkp
OwotICAgICAgfQogCi0gICAgICBudnBzLmFwcGVuZChEZXByZWNhdGVkU3RyaW5nKCJib2R5PSUx
IikuYXJnKGJvZHlFbmMpKTsKKyAgICAgIG52cHMuYXBwZW5kKFN0cmluZzo6c3ByaW50ZigiYm9k
eT0lcyIsIGJvZHlFbmMubGF0aW4xKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgICBxID0g
bnZwcy5qb2luKCImIik7CiAgICAgICB1LnNldFF1ZXJ5KHEpOwogICB9IAo=
</data>
<flag name="review"
          id="1971"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>