<?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>20981</bug_id>
          
          <creation_ts>2008-09-21 17:13:27 -0700</creation_ts>
          <short_desc>Store per-class info in StructureID</short_desc>
          <delta_ts>2008-09-22 14:06:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92048</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-21 17:13:27 -0700</bug_when>
    <thetext>Info that varies per JSCell class, currently often handled as virtual methods, should be stored in the StructureID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92049</commentid>
    <comment_count>1</comment_count>
      <attachid>23638</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-21 17:14:12 -0700</bug_when>
    <thetext>Created attachment 23638
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92065</commentid>
    <comment_count>2</comment_count>
      <attachid>23639</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-21 19:41:00 -0700</bug_when>
    <thetext>Created attachment 23639
add per-class TypeInfo to the StructureID (right now only used for JSType)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92067</commentid>
    <comment_count>3</comment_count>
      <attachid>23639</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 19:51:36 -0700</bug_when>
    <thetext>Comment on attachment 23639
add per-class TypeInfo to the StructureID (right now only used for JSType)

I see this:

    OBJECT_OFFSET(StructureID, m_typeInfo) + OBJECT_OFFSET(TypeInfo, m_type)

Sometimes I&apos;ve written that as:

    OBJECT_OFFSET(StructureID, m_typeInfo.m_type)

Not sure the pros and cons.

+#include &quot;JSCallbackConstructor.h&quot;
+#include &quot;JSCallbackFunction.h&quot;
+#include &quot;JSCallbackObject.h&quot;

What&apos;s this change to AllInOneFile.cpp about? Doesn&apos;t seem right to me. Maybe you pasted here by accident meaning to paste into JSGlobalObject.cpp at one point?

-        return m_structureID-&gt;type() == ObjectType;
+        return m_structureID-&gt;typeInfo().type() == ObjectType;

You could have sugared this by retaining a StructureID;:type() function. Why did you chose not to?

+#include &quot;JSCallbackConstructor.h&quot;
+#include &quot;JSCallbackFunction.h&quot;
+#include &quot;JSCallbackObject.h&quot;
 #include &quot;ArrayConstructor.h&quot;

Why aren&apos;t these sorted alphabetically in JSGlobalObject.cpp?

+++ JavaScriptCore/kjs/RegExpMatchesArray.h	(revision 0)
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
+ *  Copyright (C) 2003, 2007, 2008 Apple Inc. All Rights Reserved.

This class is new this year and doesn&apos;t need the pre-2008 copyrights on its source file.

+        TypeInfo(JSType type) : m_type(type) {}

We normally put spaces in those braces.

+    JSC::StructureID* createDOMStructure(JSC::ExecState*, CreateStructureIDFunction, const JSC::ClassInfo*, JSC::JSObject* prototype);

It&apos;s not helpful to pass the function for creating the structure instead of calling it. There&apos;s really no reason to do it that way. This should take a PassRefPtr&lt;StructureID&gt; instead, not take a prototype at all, and be renamed to cacheDOMStructure.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92107</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-22 04:18:40 -0700</bug_when>
    <thetext>Landed this with most suggestions applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92196</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-22 14:06:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/36778</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23638</attachid>
            <date>2008-09-21 17:14:12 -0700</date>
            <delta_ts>2008-09-21 17:14:12 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>typeinfo.patch.txt</filename>
            <type>text/plain</type>
            <size>31556</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5l
eHAJKHJldmlzaW9uIDM2NzQ2KQorKysgSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTIsNyArMTEyLDYgQEAgX19aTjNKU0MxMVN0cnVjdHVyZUlEMjFhZGRQcm9wZXJ0eVRy
YW5zaQogX19aTjNKU0MxMVN0cnVjdHVyZUlEMjFjbGVhckVudW1lcmF0aW9uQ2FjaGVFdgogX19a
TjNKU0MxMVN0cnVjdHVyZUlEMjRmcm9tRGljdGlvbmFyeVRyYW5zaXRpb25FUFMwXwogX19aTjNK
U0MxMVN0cnVjdHVyZUlEMjVjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uRVBTMF9QTlNfN0pTVmFs
dWVFCi1fX1pOM0pTQzExU3RydWN0dXJlSURDMUVQTlNfN0pTVmFsdWVFTlNfNkpTVHlwZUUKIF9f
Wk4zSlNDMTFTdHJ1Y3R1cmVJREQxRXYKIF9fWk4zSlNDMTJEYXRlSW5zdGFuY2U0aW5mb0UKIF9f
Wk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRXYKSW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzY3NDYpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICAgICAgbV9qaXQudGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplYXgpOwogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpKbXBTcmMgaXNJbW1lZGlhdGUg
PSBtX2ppdC5lbWl0VW5saW5rZWRKbmUoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmxfbXIoT0JK
RUNUX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlSUQpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJtKE9iamVjdFR5cGUsIE9CSkVDVF9PRkZTRVQoU3Ry
dWN0dXJlSUQsIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIG1faml0LmNtcGxfaTMy
bShPYmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZvKSArIE9C
SkVDVF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKICAgICAgICAgICAgIFg4
NkFzc2VtYmxlcjo6Sm1wU3JjIGlzT2JqZWN0ID0gbV9qaXQuZW1pdFVubGlua2VkSmUoKTsKIAog
ICAgICAgICAgICAgbV9qaXQubGluayhpc0ltbWVkaWF0ZSwgbV9qaXQubGFiZWwoKSk7CkBAIC0y
NDA4LDcgKzI0MDgsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
CiAgICAgLy8gIGVjeCA9IGJhc2VPYmplY3QKICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlEKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKICAgICAvLyBw
cm90byhlY3gpID0gYmFzZU9iamVjdC0+c3RydWN0dXJlSUQoKS0+cHJvdG90eXBlKCkKLSAgICBt
X2ppdC5jbXBsX2kzMm0oT2JqZWN0VHlwZSwgT0JKRUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV90
eXBlKSwgWDg2OjplY3gpOworICAgIG1faml0LmNtcGxfaTMybShPYmplY3RUeXBlLCBPQkpFQ1Rf
T0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGVJbmZvKSArIE9CSkVDVF9PRkZTRVQoVHlwZUluZm8s
IG1fdHlwZSksIFg4Njo6ZWN4KTsKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1faml0LmVtaXRV
bmxpbmtlZEpuZSgpKTsKICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoU3RydWN0dXJl
SUQsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKICAgICAKQEAgLTI0MjMsNyAr
MjQyMyw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKbmUoKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZsX21yKE9CSkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZUlEKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgbV9qaXQuY21wbF9pMzJtKE9iamVj
dFR5cGUsIE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAg
ICAgICAgbV9qaXQuY21wbF9pMzJtKE9iamVjdFR5cGUsIE9CSkVDVF9PRkZTRVQoU3RydWN0dXJl
SUQsIG1fdHlwZUluZm8pICsgT0JKRUNUX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2Ojpl
Y3gpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1faml0LmVtaXRVbmxpbmtlZEpuZSgp
KTsKICAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3By
b3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CiAgICAgfQpJbmRleDogVk0vTWFjaGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM2NzQ2KQorKysgVk0v
TWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgYm9v
bCBqc0lzT2JqZWN0VHlwZShKU1ZhbHVlKiB2KQogICAgIGlmIChKU0ltbWVkaWF0ZTo6aXNJbW1l
ZGlhdGUodikpCiAgICAgICAgIHJldHVybiB2LT5pc051bGwoKTsKIAotICAgIEpTVHlwZSB0eXBl
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4odiktPnN0cnVjdHVyZUlEKCktPnR5cGUoKTsKKyAgICBK
U1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHYpLT5zdHJ1Y3R1cmVJRCgpLT50eXBl
SW5mbygpLnR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBOdW1iZXJUeXBlIHx8IHR5cGUgPT0gU3Ry
aW5nVHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh0eXBlID09IE9iamVjdFR5
cGUpIHsKQEAgLTYyOCw3ICs2MjgsNyBAQCBNYWNoaW5lOjpNYWNoaW5lKCkKICAgICAvLyBCaXph
cnJlbHksIGNhbGxpbmcgZmFzdE1hbGxvYyBoZXJlIGlzIGZhc3RlciB0aGFuIGFsbG9jYXRpbmcg
c3BhY2Ugb24gdGhlIHN0YWNrLgogICAgIHZvaWQqIHN0b3JhZ2UgPSBmYXN0TWFsbG9jKHNpemVv
ZihDb2xsZWN0b3JCbG9jaykpOwogCi0gICAgSlNBcnJheSoganNBcnJheSA9IG5ldyAoc3RvcmFn
ZSkgSlNBcnJheShTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpKSk7CisgICAgSlNBcnJheSog
anNBcnJheSA9IG5ldyAoc3RvcmFnZSkgSlNBcnJheShKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmVJ
RChqc051bGwoKSkpOwogICAgIG1fanNBcnJheVZwdHIgPSBqc0FycmF5LT52cHRyKCk7CiAgICAg
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oanNBcnJheSktPn5KU0NlbGwoKTsKIApAQCAtNjM2LDcgKzYz
Niw3IEBAIE1hY2hpbmU6Ok1hY2hpbmUoKQogICAgIG1fanNTdHJpbmdWcHRyID0ganNTdHJpbmct
PnZwdHIoKTsKICAgICBzdGF0aWNfY2FzdDxKU0NlbGwqPihqc1N0cmluZyktPn5KU0NlbGwoKTsK
IAotICAgIEpTRnVuY3Rpb24qIGpzRnVuY3Rpb24gPSBuZXcgKHN0b3JhZ2UpIEpTRnVuY3Rpb24o
U3RydWN0dXJlSUQ6OmNyZWF0ZShqc051bGwoKSkpOworICAgIEpTRnVuY3Rpb24qIGpzRnVuY3Rp
b24gPSBuZXcgKHN0b3JhZ2UpIEpTRnVuY3Rpb24oSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJl
SUQoanNOdWxsKCkpKTsKICAgICBtX2pzRnVuY3Rpb25WcHRyID0ganNGdW5jdGlvbi0+dnB0cigp
OwogICAgIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGpzRnVuY3Rpb24pLT5+SlNDZWxsKCk7CiAgICAg
CkluZGV4OiBranMvQWxsSW5PbmVGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvQWxsSW5PbmVG
aWxlLmNwcAkocmV2aXNpb24gMzY3NDYpCisrKyBranMvQWxsSW5PbmVGaWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2RlZmluZSBKQVZBU0NSSVBUQ09SRV9CVUlMRElO
R19BTExfSU5fT05FX0ZJTEUgMQogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiSlND
YWxsYmFja0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmpl
Y3QuY3BwIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uY3BwIgogI2luY2x1ZGUgIkFyZ3VtZW50cy5j
cHAiCkluZGV4OiBranMvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTQ2VsbC5oCShyZXZp
c2lvbiAzNjc0NikKKysrIGtqcy9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDEyICsx
MjMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzT2Jq
ZWN0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUlELT50eXBlKCkg
PT0gT2JqZWN0VHlwZTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlSUQtPnR5cGVJbmZvKCku
dHlwZSgpID09IE9iamVjdFR5cGU7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgSlNDZWxsOjpp
c1N0cmluZygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVJRC0+dHlw
ZSgpID09IFN0cmluZ1R5cGU7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUlELT50eXBlSW5m
bygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlOwogICAgIH0KIAogICAgIGlubGluZSBTdHJ1Y3R1cmVJ
RCogSlNDZWxsOjpzdHJ1Y3R1cmVJRCgpIGNvbnN0CkluZGV4OiBranMvSlNHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBranMvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMzY3NDYpCisr
KyBranMvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOSArNzYsOSBAQCBK
U0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShib29sIGlzU2hhcmVkCiAgICAgLCByZWdFeHBDb25z
dHJ1Y3RvclRhYmxlKCZKU0M6OnJlZ0V4cENvbnN0cnVjdG9yVGFibGUpCiAgICAgLCBzdHJpbmdU
YWJsZSgmSlNDOjpzdHJpbmdUYWJsZSkKICNlbmRpZgotICAgICwgbnVsbFByb3RvU3RydWN0dXJl
SUQoU3RydWN0dXJlSUQ6OmNyZWF0ZShqc051bGwoKSkpCi0gICAgLCBzdHJpbmdTdHJ1Y3R1cmVJ
RChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpLCBTdHJpbmdUeXBlKSkKLSAgICAsIG51bWJl
clN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEOjpjcmVhdGUoanNOdWxsKCksIE51bWJlclR5cGUpKQor
ICAgICwgbnVsbFByb3RvU3RydWN0dXJlSUQoSlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKGpz
TnVsbCgpKSkKKyAgICAsIHN0cmluZ1N0cnVjdHVyZUlEKEpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1
cmVJRChqc051bGwoKSkpCisgICAgLCBudW1iZXJTdHJ1Y3R1cmVJRChKU051bWJlckNlbGw6OmNy
ZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgpKSkKICAgICAsIGlkZW50aWZpZXJUYWJsZShjcmVhdGVJ
ZGVudGlmaWVyVGFibGUoKSkKICAgICAsIHByb3BlcnR5TmFtZXMobmV3IENvbW1vbklkZW50aWZp
ZXJzKHRoaXMpKQogICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQpJbmRleDoga2pzL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAzNjc0NikKKysrIGtqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogCisjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
SlNDYWxsYmFja0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2lu
Y2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgpAQCAtNTUsNiArNTgsNyBAQAogI2luY2x1
ZGUgIlByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiUHJvdG90eXBlRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgog
I2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW5NYXJrLmgi
CiAjaW5jbHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKQEAgLTIwMiwzNCArMjA2LDMzIEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICAvLyBQcm90b3R5cGVz
CiAKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IChleGVjKSBGdW5jdGlvblByb3Rv
dHlwZShleGVjKTsKLSAgICBkKCktPmZ1bmN0aW9uU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNy
ZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmNhbGxiYWNrRnVuY3Rpb25T
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwot
ICAgIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRl
KGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwotICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CisgICAg
ZCgpLT5mdW5jdGlvblN0cnVjdHVyZSA9IEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVy
ZSA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSk7CisgICAgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSA9IFByb3RvdHlw
ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAg
ICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgZCgp
LT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7CiAgICAgZCgpLT5vYmplY3RQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCBkKCktPnByb3RvdHlwZUZ1
bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKICAgICBkKCktPmVtcHR5T2JqZWN0U3RydWN0dXJlID0g
ZCgpLT5vYmplY3RQcm90b3R5cGUtPmluaGVyaXRvcklEKCk7CiAgICAgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZS0+c2V0UHJvdG90eXBlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBkKCktPmFy
Z3VtZW50c1N0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5
cGUpOwotICAgIGQoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSA9IFN0cnVjdHVyZUlE
OjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5cGUpOwotICAgIGQoKS0+Y2FsbGJhY2tPYmplY3RT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAg
ICBkKCktPmFycmF5UHJvdG90eXBlID0gbmV3IChleGVjKSBBcnJheVByb3RvdHlwZShTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKGQoKS0+b2JqZWN0UHJvdG90eXBlKSk7Ci0gICAgZCgpLT5hcnJheVN0cnVj
dHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5hcnJheVByb3RvdHlwZSk7Ci0gICAgZCgp
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+
YXJyYXlQcm90b3R5cGUpOwotICAgIGQoKS0+c3RyaW5nUHJvdG90eXBlID0gbmV3IChleGVjKSBT
dHJpbmdQcm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3Rv
dHlwZSkpOwotICAgIGQoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNy
ZWF0ZShkKCktPnN0cmluZ1Byb3RvdHlwZSk7Ci0gICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0g
bmV3IChleGVjKSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgp
LT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
KTsKLSAgICBkKCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRl
KGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgZCgpLT5udW1iZXJQcm90b3R5cGUgPSBuZXcg
KGV4ZWMpIE51bWJlclByb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2Jq
ZWN0UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7Ci0g
ICAgZCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+
bnVtYmVyUHJvdG90eXBlKTsKLSAgICBkKCktPmRhdGVQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIERh
dGVQcm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlw
ZSkpOwotICAgIGQoKS0+ZGF0ZVN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5k
YXRlUHJvdG90eXBlKTsKLSAgICBkKCktPnJlZ0V4cFByb3RvdHlwZSA9IG5ldyAoZXhlYykgUmVn
RXhwUHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5
cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKLSAgICBkKCktPnJl
Z0V4cFN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5yZWdFeHBQcm90b3R5cGUp
OwotICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgRXJyb3JQ
cm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSks
IGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOwotICAgIGQoKS0+ZXJyb3JT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGVycm9yUHJvdG90eXBlKTsKKyAgICBkKCkt
PmFyZ3VtZW50c1N0cnVjdHVyZSA9IEFyZ3VtZW50czo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5v
YmplY3RQcm90b3R5cGUpOworICAgIGQoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSA9
IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90
b3R5cGUpOworICAgIGQoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUgPSBKU0NhbGxiYWNrT2Jq
ZWN0PEpTT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpOwor
ICAgIGQoKS0+YXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEFycmF5UHJvdG90eXBlKEFycmF5
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVjdFByb3RvdHlwZSkpOworICAg
IGQoKS0+YXJyYXlTdHJ1Y3R1cmUgPSBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmFy
cmF5UHJvdG90eXBlKTsKKyAgICBkKCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSA9IFJl
Z0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5hcnJheVByb3RvdHlwZSk7
CisgICAgZCgpLT5zdHJpbmdQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIFN0cmluZ1Byb3RvdHlwZShl
eGVjLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90
eXBlKSk7CisgICAgZCgpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBTdHJpbmdPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZUlEKGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKKyAgICBkKCktPmJvb2xlYW5Q
cm90b3R5cGUgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgQm9vbGVhblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKKyAgICBkKCktPmJvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUgPSBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmJvb2xlYW5Qcm90
b3R5cGUpOworICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gbmV3IChleGVjKSBOdW1iZXJQcm90
b3R5cGUoZXhlYywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVj
dFByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOworICAg
IGQoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlID0gTnVtYmVyT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmVJRChkKCktPm51bWJlclByb3RvdHlwZSk7CisgICAgZCgpLT5kYXRlUHJvdG90eXBlID0gbmV3
IChleGVjKSBEYXRlUHJvdG90eXBlKGV4ZWMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZUlEKGQoKS0+b2JqZWN0UHJvdG90eXBlKSk7CisgICAgZCgpLT5kYXRlU3RydWN0dXJlID0gRGF0
ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmRhdGVQcm90b3R5cGUpOworICAgIGQo
KS0+cmVnRXhwUHJvdG90eXBlID0gbmV3IChleGVjKSBSZWdFeHBQcm90b3R5cGUoZXhlYywgUmVn
RXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVjdFByb3RvdHlwZSksIGQo
KS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGQoKS0+cmVnRXhwU3Ry
dWN0dXJlID0gUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPnJlZ0V4cFByb3Rv
dHlwZSk7CisgICAgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBF
cnJvclByb3RvdHlwZShleGVjLCBFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgp
LT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
KTsKKyAgICBkKCktPmVycm9yU3RydWN0dXJlID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0
dXJlSUQoZXJyb3JQcm90b3R5cGUpOwogCi0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBuYXRpdmVF
cnJvclByb3RvdHlwZVN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUoZXJyb3JQcm90b3R5
cGUpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1
cmUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZXJyb3JQcm90b3R5
cGUpOwogCiAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIGV2YWxFcnJvclByb3RvdHlwZSA9IG5l
dyAoZXhlYykgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgbmF0aXZlRXJyb3JQcm90b3R5cGVT
dHJ1Y3R1cmUsICJFdmFsRXJyb3IiLCAiRXZhbEVycm9yIik7CiAgICAgTmF0aXZlRXJyb3JQcm90
b3R5cGUqIHJhbmdlRXJyb3JQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90
eXBlKGV4ZWMsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIsICJS
YW5nZUVycm9yIik7CkBAIC0yNDAsMTkgKzI0MywxOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpTVmFsdWUq
IG9iamVjdENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCBT
dHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPm9iamVjdFBy
b3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykg
RnVuY3Rpb25Db25zdHJ1Y3RvcihleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rp
b25Qcm90b3R5cGUpLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBhcnJh
eUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVy
ZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+YXJyYXlQcm90b3R5cGUp
OwotICAgIEpTVmFsdWUqIHN0cmluZ0NvbnN0cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25z
dHJ1Y3RvcihleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
LCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPnN0cmluZ1Byb3Rv
dHlwZSk7Ci0gICAgSlNWYWx1ZSogYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBCb29s
ZWFuQ29uc3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKSwgZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKLSAgICBKU1ZhbHVlKiBudW1iZXJDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6
OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5udW1iZXJQcm90b3R5cGUpOwot
ICAgIEpTVmFsdWUqIGRhdGVDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRGF0ZUNvbnN0cnVjdG9y
KGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIGQoKS0+ZGF0ZVByb3RvdHlwZSk7Cisg
ICAgSlNWYWx1ZSogb2JqZWN0Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVj
dG9yKGV4ZWMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKSwgZCgpLT5vYmplY3RQcm90b3R5cGUpOworICAgIEpTVmFsdWUqIGZ1bmN0
aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgRnVu
Y3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlw
ZSksIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIEpTVmFsdWUqIGFycmF5Q29uc3RydWN0
b3IgPSBuZXcgKGV4ZWMpIEFycmF5Q29uc3RydWN0b3IoZXhlYywgQXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+YXJyYXlQcm90
b3R5cGUpOworICAgIEpTVmFsdWUqIHN0cmluZ0NvbnN0cnVjdG9yID0gbmV3IChleGVjKSBTdHJp
bmdDb25zdHJ1Y3RvcihleGVjLCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQo
ZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KCksIGQoKS0+c3RyaW5nUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlKiBib29sZWFuQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCBCb29sZWFuQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmJv
b2xlYW5Qcm90b3R5cGUpOworICAgIEpTVmFsdWUqIG51bWJlckNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+bnVtYmVyUHJvdG90eXBlKTsK
KyAgICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3Rv
cihleGVjLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPmRh
dGVQcm90b3R5cGUpOwogCi0gICAgZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykg
UmVnRXhwQ29uc3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKSwgZCgpLT5yZWdFeHBQcm90b3R5cGUpOworICAgIGQoKS0+cmVnRXhwQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIFJlZ0V4cENvbnN0cnVjdG9yKGV4ZWMsIFJlZ0V4cENvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5yZWdF
eHBQcm90b3R5cGUpOwogCi0gICAgZCgpLT5lcnJvckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBF
cnJvckNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIGVycm9yUHJvdG90eXBlKTsKKyAgICBkKCktPmVycm9yQ29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGVycm9yUHJvdG90eXBlKTsKIAot
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJ
RDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJ
RD4gbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKIAogICAgIGQoKS0+ZXZhbEVycm9y
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgbmF0
aXZlRXJyb3JTdHJ1Y3R1cmUsIGV2YWxFcnJvclByb3RvdHlwZSk7CiAgICAgZCgpLT5yYW5nZUVy
cm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywg
bmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIHJhbmdlRXJyb3JQcm90b3R5cGUpOwpAQCAtMzAxLDcgKzMw
NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIC8v
IFNldCBnbG9iYWwgdmFsdWVzLgogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxz
W10gPSB7Ci0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRo
IiksIG5ldyAoZXhlYykgTWF0aE9iamVjdChleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+
b2JqZWN0UHJvdG90eXBlKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCisgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiksIG5ldyAoZXhlYykgTWF0aE9i
amVjdChleGVjLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVjdFByb3Rv
dHlwZSkpLCBEb250RW51bSB8IERvbnREZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8oSWRlbnRpZmllcihleGVjLCAiTmFOIiksIGpzTmFOKGV4ZWMpLCBEb250RW51bSB8IERvbnRE
ZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5m
aW5pdHkiKSwganNOdW1iZXIoZXhlYywgSW5mKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgInVuZGVmaW5lZCIpLCBq
c1VuZGVmaW5lZCgpLCBEb250RW51bSB8IERvbnREZWxldGUpCkBAIC0zMTEsNyArMzE0LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgLy8gU2V0IGds
b2JhbCBmdW5jdGlvbnMuCiAKLSAgICBkKCktPmV2YWxGdW5jdGlvbiA9IG5ldyAoZXhlYykgR2xv
YmFsRXZhbEZ1bmN0aW9uKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCwg
dGhpcyk7CisgICAgZCgpLT5ldmFsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEdsb2JhbEV2YWxGdW5j
dGlvbihleGVjLCBHbG9iYWxFdmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVu
Y0V2YWwsIHRoaXMpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZXZhbEZ1bmN0
aW9uLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdl
dCgpLCAyLCBJZGVudGlmaWVyKGV4ZWMsICJwYXJzZUludCIpLCBnbG9iYWxGdW5jUGFyc2VJbnQp
LCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
LCAxLCBJZGVudGlmaWVyKGV4ZWMsICJwYXJzZUZsb2F0IiksIGdsb2JhbEZ1bmNQYXJzZUZsb2F0
KSwgRG9udEVudW0pOwpJbmRleDoga2pzL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDM2NzQ2KQorKysga2pzL0pTR2xvYmFsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMiwxMyArMzEyLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgaW5saW5lIEpTVmFsdWUqIFN0cnVjdHVyZUlEOjpwcm90b3R5cGVGb3JMb29rdXAo
RXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBPYmplY3RUeXBl
KQorICAgICAgICBpZiAodHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSkKICAgICAgICAg
ICAgIHJldHVybiBtX3Byb3RvdHlwZTsKIAotICAgICAgICBpZiAobV90eXBlID09IFN0cmluZ1R5
cGUpCisgICAgICAgIGlmICh0eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQogICAgICAg
ICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBl
KCk7CiAKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBOdW1iZXJUeXBlKTsKKyAgICAgICAgQVNT
RVJUKHR5cGVJbmZvKCkudHlwZSgpID09IE51bWJlclR5cGUpOwogICAgICAgICByZXR1cm4gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJQcm90b3R5cGUoKTsKICAgICB9CiAKSW5k
ZXg6IGtqcy9KU051bWJlckNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNOdW1iZXJDZWxsLmgJ
KHJldmlzaW9uIDM2NzQ2KQorKysga2pzL0pTTnVtYmVyQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNlbmRpZgogICAgICAgICB9CiAK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlE
KEpTVmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBl
SW5mbyhOdW1iZXJUeXBlKSk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTnVtYmVyQ2Vs
bChFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGV4
ZWMtPmdsb2JhbERhdGEoKS5udW1iZXJTdHJ1Y3R1cmVJRC5nZXQoKSkKSW5kZXg6IGtqcy9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMzY3NDYp
CisrKyBranMvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksNyArNDk5LDcgQEAg
TkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcgogCiBTdHJ1Y3R1cmVJRCog
SlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKCkKIHsKLSAgICBtX2luaGVyaXRvcklEID0gU3Ry
dWN0dXJlSUQ6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2luaGVyaXRvcklEID0gSlNPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZUlEKHRoaXMpOwogICAgIHJldHVybiBtX2luaGVyaXRvcklELmdldCgpOwog
fQogCkluZGV4OiBranMvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNPYmplY3QuaAko
cmV2aXNpb24gMzY3NDYpCisrKyBranMvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDYgKzE4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgaW5saW5lU3RvcmFnZUNhcGFjaXR5ID0gMjsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJu
IFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsgfQorCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdEZvcldyaXRlKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNX
cml0ZWFibGUpOwogCkluZGV4OiBranMvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNT
dHJpbmcuaAkocmV2aXNpb24gMzY3NDYpCisrKyBranMvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsNiArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5HZXRJ
bmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFs
dWUuc2l6ZSgpKTsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRlKiwgdW5z
aWduZWQpOwogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVT
dHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShw
cm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSkpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBl
bnVtIFZQdHJTdGVhbGluZ0hhY2tUeXBlIHsgVlB0clN0ZWFsaW5nSGFjayB9OwogICAgICAgICBK
U1N0cmluZyhWUHRyU3RlYWxpbmdIYWNrVHlwZSkgCkluZGV4OiBranMvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAzNjc0NikKKysrIGtqcy9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBjb25zdCBDbGFzc0luZm8gTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcjo6CiAKIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUs
IE5hdGl2ZUVycm9yUHJvdG90eXBlKiBuYXRpdmVFcnJvclByb3RvdHlwZSkKICAgICA6IEludGVy
bmFsRnVuY3Rpb24oZXhlYywgc3RydWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIG5hdGl2ZUVycm9y
UHJvdG90eXBlLT5nZXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpLT5nZXRTdHJp
bmcoKSkpCi0gICAgLCBtX2Vycm9yU3RydWN0dXJlKFN0cnVjdHVyZUlEOjpjcmVhdGUobmF0aXZl
RXJyb3JQcm90b3R5cGUpKQorICAgICwgbV9lcnJvclN0cnVjdHVyZShFcnJvckluc3RhbmNlOjpj
cmVhdGVTdHJ1Y3R1cmVJRChuYXRpdmVFcnJvclByb3RvdHlwZSkpCiB7CiAgICAgcHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CiAgICAgcHV0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIG5hdGl2ZUVycm9yUHJvdG90eXBl
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CkluZGV4OiBranMvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDM2NzQ2KQorKysga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U1N0cmluZy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlJlZ0V4
cE1hdGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
Z0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgInJlZ2V4cC5oIgpAQCAtMTE0LDIzICsxMTUsNiBA
QCB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpwZXJmb3JtTWF0Y2goUmVnCiAgICAgfQogfQogCi1j
bGFzcyBSZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7Ci1wdWJsaWM6Ci0gICAg
UmVnRXhwTWF0Y2hlc0FycmF5KEV4ZWNTdGF0ZSosIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSop
OwotICAgIHZpcnR1YWwgflJlZ0V4cE1hdGNoZXNBcnJheSgpOwotCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgeyBpZiAobGF6eUNyZWF0
aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOyB9Ci0gICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZpbGxB
cnJheUluc3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2LCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5z
dGFuY2UoZXhlYyk7IEpTQXJyYXk6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYsIHNsb3QpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSogdikgeyBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0
YW5jZShleGVjKTsgSlNBcnJheTo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdik7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5z
dGFuY2UoZXhlYyk7IHJldHVybiBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUpOyB9Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZpbGxB
cnJheUluc3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lKTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikgeyBpZiAobGF6eUNyZWF0aW9uRGF0
YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgSlNBcnJheTo6Z2V0UHJvcGVydHlOYW1lcyhl
eGVjLCBhcnIpOyB9Ci0KLSAgICB2b2lkIGZpbGxBcnJheUluc3RhbmNlKEV4ZWNTdGF0ZSopOwot
fTsKLQogUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoRXhlY1N0YXRlKiBl
eGVjLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGRhdGEpCiAgICAgOiBKU0FycmF5KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGRh
dGEtPmxhc3ROdW1TdWJQYXR0ZXJucyArIDEpCiB7CkluZGV4OiBranMvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAw
KQorKysga2pzL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLwor
CisjaWZuZGVmIFJlZ0V4cE1hdGNoZXNBcnJheV9oCisjZGVmaW5lIFJlZ0V4cE1hdGNoZXNBcnJh
eV9oCisKKyNpbmNsdWRlICJKU0FycmF5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBS
ZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CitwdWJsaWM6CisgICAgUmVnRXhw
TWF0Y2hlc0FycmF5KEV4ZWNTdGF0ZSosIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSopOworICAg
IHZpcnR1YWwgflJlZ0V4cE1hdGNoZXNBcnJheSgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgeyBpZiAobGF6eUNyZWF0aW9uRGF0
YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOyB9CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZpbGxBcnJheUlu
c3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2LCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2Uo
ZXhlYyk7IEpTQXJyYXk6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYsIHNsb3QpOyB9CisgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSogdikgeyBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShl
eGVjKTsgSlNBcnJheTo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdik7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2Uo
ZXhlYyk7IHJldHVybiBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUp
OyB9CisgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZpbGxBcnJheUlu
c3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikgeyBpZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBm
aWxsQXJyYXlJbnN0YW5jZShleGVjKTsgSlNBcnJheTo6Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBh
cnIpOyB9CisKKyAgICB2b2lkIGZpbGxBcnJheUluc3RhbmNlKEV4ZWNTdGF0ZSopOworfTsKKwor
fQorCisjZW5kaWYgLy8gUmVnRXhwTWF0Y2hlc0FycmF5X2gKSW5kZXg6IGtqcy9TdHJ1Y3R1cmVJ
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmNwcAkocmV2aXNpb24gMzY3NDYp
CisrKyBranMvU3RydWN0dXJlSUQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi1TdHJ1Y3R1cmVJRDo6
U3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG90eXBlLCBKU1R5cGUgdHlwZSkKLSAgICA6IG1faXNE
aWN0aW9uYXJ5KGZhbHNlKQotICAgICwgbV90eXBlKHR5cGUpCitTdHJ1Y3R1cmVJRDo6U3RydWN0
dXJlSUQoSlNWYWx1ZSogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCisgICAg
OiBtX3R5cGVJbmZvKHR5cGVJbmZvKQorICAgICwgbV9pc0RpY3Rpb25hcnkoZmFsc2UpCiAgICAg
LCBtX3Byb3RvdHlwZShwcm90b3R5cGUpCiAgICAgLCBtX2NhY2hlZFByb3RvdHlwZUNoYWluKDAp
CiAgICAgLCBtX3ByZXZpb3VzKDApCkBAIC0xNDEsNyArMTQxLDcgQEAgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmFkZAogICAgICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxl
YXNlKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHN0cnVjdHVyZUlELT5tX3Byb3RvdHlwZSk7CisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0
cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlELT5tX3Byb3RvdHlwZSwgc3RydWN0dXJlSUQt
PnR5cGVJbmZvKCkpOwogICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gPSBz
dHJ1Y3R1cmVJRC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKICAgICB0cmFuc2l0aW9uLT5tX3By
ZXZpb3VzID0gc3RydWN0dXJlSUQ7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9
IHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCk7CkBAIC0xNTksNyArMTU5LDcgQEAgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OnRvRAogewogICAgIEFTU0VSVCghc3RydWN0
dXJlSUQtPm1faXNEaWN0aW9uYXJ5KTsKIAotICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNp
dGlvbiA9IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+bV9wcm90b3R5cGUpOworICAgIFJlZlB0cjxTdHJ1
Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+bV9wcm90b3R5cGUsIHN0
cnVjdHVyZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5tX2lzRGljdGlvbmFyeSA9
IHRydWU7CiAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eU1hcCA9IHN0cnVjdHVyZUlELT5tX3By
b3BlcnR5TWFwOwogICAgIHJldHVybiB0cmFuc2l0aW9uLnJlbGVhc2UoKTsKQEAgLTE3OCw3ICsx
NzgsNyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6ZnJvCiAKIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCwgSlNWYWx1ZSogcHJvdG90eXBlKQogewotICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShwcm90b3R5cGUpOworICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShwcm90b3R5cGUsIHN0cnVjdHVy
ZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Db3VudCA9IHN0
cnVjdHVyZUlELT5tX3RyYW5zaXRpb25Db3VudCArIDE7CiAgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eU1hcCA9IHN0cnVjdHVyZUlELT5tX3Byb3BlcnR5TWFwOwogICAgIHJldHVybiB0cmFuc2l0
aW9uLnJlbGVhc2UoKTsKQEAgLTE4Niw3ICsxODYsNyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlE
PiBTdHJ1Y3R1cmVJRDo6Y2hhCiAKIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlE
OjpnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZUlEKiBzdHJ1Y3R1cmVJRCkKIHsKLSAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRyYW5zaXRpb24gPSBjcmVhdGUoc3RydWN0dXJlSUQtPnN0
b3JlZFByb3RvdHlwZSgpKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRyYW5zaXRpb24gPSBj
cmVhdGUoc3RydWN0dXJlSUQtPnN0b3JlZFByb3RvdHlwZSgpLCBzdHJ1Y3R1cmVJRC0+dHlwZUlu
Zm8oKSk7CiAgICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uQ291bnQgPSBzdHJ1Y3R1cmVJRC0+
bV90cmFuc2l0aW9uQ291bnQgKyAxOwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlNYXAgPSBz
dHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eU1hcDsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNl
KCk7CkluZGV4OiBranMvU3RydWN0dXJlSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvU3RydWN0dXJl
SUQuaAkocmV2aXNpb24gMzY3NDYpCisrKyBranMvU3RydWN0dXJlSUQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0q
LQogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUg
IkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcC5oIgorI2luY2x1ZGUgIlR5cGVJbmZv
LmgiCiAjaW5jbHVkZSAidXN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KQEAgLTc1LDkgKzc3LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgU3RydWN0dXJlSUQgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHJ1Y3R1
cmVJRD4gewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIENUSTsKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZShKU1ZhbHVlKiBwcm90b3R5cGUs
IEpTVHlwZSB0eXBlID0gT2JqZWN0VHlwZSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlSUQ+IGNyZWF0ZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJ1Y3R1
cmVJRChwcm90b3R5cGUsIHR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RydWN0dXJlSUQocHJvdG90eXBlLCB0eXBlSW5mbykpOwogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24o
U3RydWN0dXJlSUQqLCBKU1ZhbHVlKiBwcm90b3R5cGUpOwpAQCAtOTYsNyArOTgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNEaWN0aW9uYXJ5OyB9CiAKLSAgICAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlSW5mbzsgfQogCiAgICAgICAgIEpTVmFsdWUqIHN0b3JlZFByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CiAgICAgICAgIEpTVmFsdWUqIHByb3RvdHlw
ZUZvckxvb2t1cChFeGVjU3RhdGUqKTsgCkBAIC0xMTksMTIgKzEyMSwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFVTdHJpbmc6OlJlcD4sIHVu
c2lnbmVkPiBUcmFuc2l0aW9uVGFibGVLZXk7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUcmFu
c2l0aW9uVGFibGVLZXksIFN0cnVjdHVyZUlEKiwgVHJhbnNpdGlvblRhYmxlSGFzaCwgVHJhbnNp
dGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOwogCi0gICAgICAgIFN0cnVjdHVy
ZUlEKEpTVmFsdWUqIHByb3RvdHlwZSwgSlNUeXBlKTsKKyAgICAgICAgU3RydWN0dXJlSUQoSlNW
YWx1ZSogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYpOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKIAorICAgICAgICBU
eXBlSW5mbyBtX3R5cGVJbmZvOworCiAgICAgICAgIGJvb2wgbV9pc0RpY3Rpb25hcnk7Ci0gICAg
ICAgIEpTVHlwZSBtX3R5cGU7CiAKICAgICAgICAgSlNWYWx1ZSogbV9wcm90b3R5cGU7CiAgICAg
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRENoYWluPiBtX2NhY2hlZFByb3RvdHlwZUNoYWluOwpJbmRl
eDoga2pzL1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1R5cGVJbmZvLmgJKHJldmlzaW9u
IDApCisrKyBranMvVHlwZUluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLy8g
LSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBU
eXBlSW5mb19oCisjZGVmaW5lIFR5cGVJbmZvX2gKKworI2luY2x1ZGUgIkpTVHlwZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIFR5cGVJbmZvIHsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIENUSTsKKyAgICBwdWJsaWM6CisgICAgICAgIFR5cGVJbmZvKEpTVHlwZSB0eXBlKSA6IG1f
dHlwZSh0eXBlKSB7fQorICAgICAgICAKKyAgICAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEpTVHlwZSBtX3R5cGU7Cisg
ICAgfTsKKworfQorCisjZW5kaWYgLy8gVHlwZUluZm9faAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23639</attachid>
            <date>2008-09-21 19:41:00 -0700</date>
            <delta_ts>2008-09-21 19:51:36 -0700</delta_ts>
            <desc>add per-class TypeInfo to the StructureID (right now only used for JSType)</desc>
            <filename>typeinfo.patch.txt</filename>
            <type>text/plain</type>
            <size>51210</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NzU0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMDgtMDktMjEgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gaW50cm9kdWNlIGEgVHlwZUluZm8gY2xhc3Ms
IGZvciBob2xkaW5nIHBlci10eXBlIChpbiB0aGUgQysrIGNsYXNzIHNlbnNlKSBkYXRlIGluIFN0
cnVjdHVyZUlECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDk4MQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVk0vQ1RJLmNw
cDoKKyAgICAgICAgKEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAg
KEpTQzo6Q1RJOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBW
TS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKEpTQzo6anNJc09iamVjdFR5cGUpOgorICAgICAgICAo
SlNDOjpNYWNoaW5lOjpNYWNoaW5lKToKKyAgICAgICAgKiBranMvQWxsSW5PbmVGaWxlLmNwcDoK
KyAgICAgICAgKiBranMvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aXNPYmplY3Qp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmlzU3RyaW5nKToKKyAgICAgICAgKiBranMvSlNHbG9i
YWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgor
ICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpyZXNldCk6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUlEOjpwcm90b3R5cGVGb3JMb29rdXApOgorICAgICAgICAqIGtqcy9K
U051bWJlckNlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNOdW1iZXJDZWxsOjpjcmVhdGVTdHJ1Y3R1
cmVJRCk6CisgICAgICAgICoga2pzL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNyZWF0ZUluaGVyaXRvcklEKToKKyAgICAgICAgKiBranMvSlNPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBranMvSlNT
dHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZUlEKToKKyAg
ICAgICAgKiBranMvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGtqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICoga2pzL1JlZ0V4cE1hdGNoZXNB
cnJheS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OnB1dCk6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IGtqcy9TdHJ1Y3R1cmVJRC5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpTdHJ1Y3R1
cmVJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OmdldHRlclNldHRlclRyYW5zaXRpb24pOgorICAgICAg
ICAqIGtqcy9TdHJ1Y3R1cmVJRC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSUQ6OnR5cGVJbmZvKToKKyAgICAgICAgKiBranMv
VHlwZUluZm8uaDogQWRkZWQuCisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpUeXBlSW5mbyk6Cisg
ICAgICAgIChKU0M6OlR5cGVJbmZvOjp0eXBlKToKKwogMjAwOC0wOS0yMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNo
LgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMzY3NTQpCisrKyBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3
ICsxMTIsNyBAQCBfX1pOM0pTQzExU3RydWN0dXJlSUQyMWFkZFByb3BlcnR5VHJhbnNpCiBfX1pO
M0pTQzExU3RydWN0dXJlSUQyMWNsZWFyRW51bWVyYXRpb25DYWNoZUV2CiBfX1pOM0pTQzExU3Ry
dWN0dXJlSUQyNGZyb21EaWN0aW9uYXJ5VHJhbnNpdGlvbkVQUzBfCiBfX1pOM0pTQzExU3RydWN0
dXJlSUQyNWNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb25FUFMwX1BOU183SlNWYWx1ZUUKLV9fWk4z
SlNDMTFTdHJ1Y3R1cmVJREMxRVBOU183SlNWYWx1ZUVOU182SlNUeXBlRQorX19aTjNKU0MxMVN0
cnVjdHVyZUlEQzFFUE5TXzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRQogX19aTjNKU0MxMVN0cnVj
dHVyZUlERDFFdgogX19aTjNKU0MxMkRhdGVJbnN0YW5jZTRpbmZvRQogX19aTjNKU0MxMkpTR2xv
YmFsRGF0YTZjcmVhdGVFdgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjc1NCkKKysr
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAKIAkJNUQ1RDhBQjYwRTBEMEE3MjAwRjlD
NjkyIC8qIGpzYyBpbiBDb3B5IEludG8gRnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi87IH07CiAJCTVE
NUQ4QUQxMEUwRDBFQkUwMEY5QzY5MiAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjky
IC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CiAJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBj
cmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NTA3RDI5RTBF
ODcxRTVFMDBEN0Q4OTYgLyogVHlwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBUeXBlSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1OTEy
NkJEMEJERDE3MjgwMDE5MjFGQiAvKiBBbGxJbk9uZUZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5MTI2QkMwQkREMTcyODAwMTkyMUZCIC8q
IEFsbEluT25lRmlsZS5jcHAgKi87IH07CiAJCTY1REZDOTMzMDhFQTE3M0EwMEY3MzAwQiAvKiBI
YXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjVERkM5MkQwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgKi87IH07CiAJCTY1
RkRFNDlDMEJERDFENEEwMEU4MDExMSAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTIxN0I4MDhFN0VFQ0MwMDIzRTVGNiAv
KiBBc3NlcnRpb25zLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1t
aXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUiOyB9OyB9OwpAQCAtNTI5LDYgKzUzMCw3IEBACiAJCTVE
QTQ3OTY1MENGQkNGNTYwMDkzMjhBMCAvKiBUQ1BhY2tlZENhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRDUGFja2VkQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNURCRDE4QUYwQzU0MDFBNzAwQzE1RUFFIC8qIE1hbGxvY1pvbmVTdXBwb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hbGxvY1pvbmVTdXBwb3J0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVERTNEMEY0MEREOERERkIwMDQ2ODcxNCAvKiBX
ZWJLaXRBdmFpbGFiaWxpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
S2l0QXZhaWxhYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1MDdEMjk3
MEU4NzFFNEEwMEQ3RDg5NiAvKiBUeXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTFGNjQx
MjAzOUQ1QjVGMDA3ODM5NUMgLyogZHRvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkdG9hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NTFGNjQxMzAzOUQ1QjVGMDA3ODM5NUMgLyogZHRv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBk
dG9hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNjUyMjQ2
QTQwQzhEN0EwRTAwN0JEQUY3IC8qIEhhc2hJdGVyYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaEl0ZXJhdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTEyNSw2ICsxMTI3LDcgQEAKIAkJNjU0MTcyMDAwMzlFMDFCQTAwNThCRkVCIC8qIGtq
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNjUwN0Qy
OTcwRTg3MUU0QTAwRDdEODk2IC8qIFR5cGVJbmZvLmggKi8sCiAJCQkJNjU5MTI2QkMwQkREMTcy
ODAwMTkyMUZCIC8qIEFsbEluT25lRmlsZS5jcHAgKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAv
KiBBcmdMaXN0LmggKi8sCkBAIC0xNTI4LDYgKzE1MzEsNyBAQAogCQkJCUJDMThDNDY5MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5
bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTA3RDI5RTBFODcxRTVFMDBEN0Q4OTYg
LyogVHlwZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZDMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBUQ1BhY2tlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RDBFMTZGNUNE
MDBCMzQ0NjAgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RTBFMTZG
NUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9WTS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5j
cHAJKHJldmlzaW9uIDM2NzU0KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIyLDcgKzkyMiw3IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgICAgIG1faml0LnRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ss
IFg4Njo6ZWF4KTsKICAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGlzSW1tZWRpYXRl
ID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZsX21yKE9C
SkVDVF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZUlEKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIG1faml0LmNtcGxfaTMybShPYmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0
cnVjdHVyZUlELCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgICAgICBtX2ppdC5jbXBsX2kz
Mm0oT2JqZWN0VHlwZSwgT0JKRUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV90eXBlSW5mbykgKyBP
QkpFQ1RfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7CiAgICAgICAgICAgICBY
ODZBc3NlbWJsZXI6OkptcFNyYyBpc09iamVjdCA9IG1faml0LmVtaXRVbmxpbmtlZEplKCk7CiAK
ICAgICAgICAgICAgIG1faml0LmxpbmsoaXNJbW1lZGlhdGUsIG1faml0LmxhYmVsKCkpOwpAQCAt
MjQwOCw3ICsyNDA4LDcgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRp
bwogICAgIC8vICBlY3ggPSBiYXNlT2JqZWN0CiAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZG
U0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmVJRCksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CiAgICAgLy8g
cHJvdG8oZWN4KSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZUlEKCktPnByb3RvdHlwZSgpCi0gICAg
bV9qaXQuY21wbF9pMzJtKE9iamVjdFR5cGUsIE9CSkVDVF9PRkZTRVQoU3RydWN0dXJlSUQsIG1f
dHlwZSksIFg4Njo6ZWN4KTsKKyAgICBtX2ppdC5jbXBsX2kzMm0oT2JqZWN0VHlwZSwgT0JKRUNU
X09GRlNFVChTdHJ1Y3R1cmVJRCwgbV90eXBlSW5mbykgKyBPQkpFQ1RfT0ZGU0VUKFR5cGVJbmZv
LCBtX3R5cGUpLCBYODY6OmVjeCk7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2ppdC5lbWl0
VW5saW5rZWRKbmUoKSk7CiAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVy
ZUlELCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CiAgICAgCkBAIC0yNDIzLDcg
KzI0MjMsNyBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAg
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9qaXQuZW1pdFVubGlua2VkSm5lKCkpOwogICAgICAg
ICAKICAgICAgICAgbV9qaXQubW92bF9tcihPQkpFQ1RfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1
cmVJRCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgIG1faml0LmNtcGxfaTMybShPYmpl
Y3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVyZUlELCBtX3R5cGUpLCBYODY6OmVjeCk7Cisg
ICAgICAgIG1faml0LmNtcGxfaTMybShPYmplY3RUeXBlLCBPQkpFQ1RfT0ZGU0VUKFN0cnVjdHVy
ZUlELCBtX3R5cGVJbmZvKSArIE9CSkVDVF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6
ZWN4KTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2ppdC5lbWl0VW5saW5rZWRKbmUo
KSk7CiAgICAgICAgIG1faml0Lm1vdmxfbXIoT0JKRUNUX09GRlNFVChTdHJ1Y3R1cmVJRCwgbV9w
cm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hp
bmUuY3BwCShyZXZpc2lvbiAzNjc1NCkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wganNJc09iamVj
dFR5cGUoSlNWYWx1ZSogdikKICAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHYpKQog
ICAgICAgICByZXR1cm4gdi0+aXNOdWxsKCk7CiAKLSAgICBKU1R5cGUgdHlwZSA9IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KHYpLT5zdHJ1Y3R1cmVJRCgpLT50eXBlKCk7CisgICAgSlNUeXBlIHR5cGUg
PSBzdGF0aWNfY2FzdDxKU0NlbGwqPih2KS0+c3RydWN0dXJlSUQoKS0+dHlwZUluZm8oKS50eXBl
KCk7CiAgICAgaWYgKHR5cGUgPT0gTnVtYmVyVHlwZSB8fCB0eXBlID09IFN0cmluZ1R5cGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodHlwZSA9PSBPYmplY3RUeXBlKSB7CkBAIC02
MjgsNyArNjI4LDcgQEAgTWFjaGluZTo6TWFjaGluZSgpCiAgICAgLy8gQml6YXJyZWx5LCBjYWxs
aW5nIGZhc3RNYWxsb2MgaGVyZSBpcyBmYXN0ZXIgdGhhbiBhbGxvY2F0aW5nIHNwYWNlIG9uIHRo
ZSBzdGFjay4KICAgICB2b2lkKiBzdG9yYWdlID0gZmFzdE1hbGxvYyhzaXplb2YoQ29sbGVjdG9y
QmxvY2spKTsKIAotICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBuZXcgKHN0b3JhZ2UpIEpTQXJyYXko
U3RydWN0dXJlSUQ6OmNyZWF0ZShqc051bGwoKSkpOworICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBu
ZXcgKHN0b3JhZ2UpIEpTQXJyYXkoSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlSUQoanNOdWxsKCkp
KTsKICAgICBtX2pzQXJyYXlWcHRyID0ganNBcnJheS0+dnB0cigpOwogICAgIHN0YXRpY19jYXN0
PEpTQ2VsbCo+KGpzQXJyYXkpLT5+SlNDZWxsKCk7CiAKQEAgLTYzNiw3ICs2MzYsNyBAQCBNYWNo
aW5lOjpNYWNoaW5lKCkKICAgICBtX2pzU3RyaW5nVnB0ciA9IGpzU3RyaW5nLT52cHRyKCk7CiAg
ICAgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oanNTdHJpbmcpLT5+SlNDZWxsKCk7CiAKLSAgICBKU0Z1
bmN0aW9uKiBqc0Z1bmN0aW9uID0gbmV3IChzdG9yYWdlKSBKU0Z1bmN0aW9uKFN0cnVjdHVyZUlE
OjpjcmVhdGUoanNOdWxsKCkpKTsKKyAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gbmV3IChz
dG9yYWdlKSBKU0Z1bmN0aW9uKEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGpzTnVsbCgp
KSk7CiAgICAgbV9qc0Z1bmN0aW9uVnB0ciA9IGpzRnVuY3Rpb24tPnZwdHIoKTsKICAgICBzdGF0
aWNfY2FzdDxKU0NlbGwqPihqc0Z1bmN0aW9uKS0+fkpTQ2VsbCgpOwogICAgIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0FsbEluT25lRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL0FsbEluT25lRmlsZS5jcHAJKHJldmlzaW9uIDM2NzU0KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL0FsbEluT25lRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkg
QEAKICNkZWZpbmUgSkFWQVNDUklQVENPUkVfQlVJTERJTkdfQUxMX0lOX09ORV9GSUxFIDEKICNp
bmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmNwcCIKICNpbmNsdWRlICJBcmd1bWVudHMuY3BwIgpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0NlbGwu
aAkocmV2aXNpb24gMzY3NTQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMywxMiArMTIzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5s
aW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmVJRC0+dHlwZSgpID09IE9iamVjdFR5cGU7CisgICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZUlELT50eXBlSW5mbygpLnR5cGUoKSA9PSBPYmplY3RUeXBlOwogICAgIH0KIAogICAg
IGlubGluZSBib29sIEpTQ2VsbDo6aXNTdHJpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fc3RydWN0dXJlSUQtPnR5cGUoKSA9PSBTdHJpbmdUeXBlOworICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmVJRC0+dHlwZUluZm8oKS50eXBlKCkgPT0gU3RyaW5nVHlwZTsKICAgICB9CiAK
ICAgICBpbmxpbmUgU3RydWN0dXJlSUQqIEpTQ2VsbDo6c3RydWN0dXJlSUQoKSBjb25zdApJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDM2NzU0KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkg
Kzc2LDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoYm9vbCBpc1NoYXJlZAogICAgICwg
cmVnRXhwQ29uc3RydWN0b3JUYWJsZSgmSlNDOjpyZWdFeHBDb25zdHJ1Y3RvclRhYmxlKQogICAg
ICwgc3RyaW5nVGFibGUoJkpTQzo6c3RyaW5nVGFibGUpCiAjZW5kaWYKLSAgICAsIG51bGxQcm90
b1N0cnVjdHVyZUlEKFN0cnVjdHVyZUlEOjpjcmVhdGUoanNOdWxsKCkpKQotICAgICwgc3RyaW5n
U3RydWN0dXJlSUQoU3RydWN0dXJlSUQ6OmNyZWF0ZShqc051bGwoKSwgU3RyaW5nVHlwZSkpCi0g
ICAgLCBudW1iZXJTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpLCBOdW1i
ZXJUeXBlKSkKKyAgICAsIG51bGxQcm90b1N0cnVjdHVyZUlEKEpTT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmVJRChqc051bGwoKSkpCisgICAgLCBzdHJpbmdTdHJ1Y3R1cmVJRChKU1N0cmluZzo6Y3Jl
YXRlU3RydWN0dXJlSUQoanNOdWxsKCkpKQorICAgICwgbnVtYmVyU3RydWN0dXJlSUQoSlNOdW1i
ZXJDZWxsOjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCiAgICAgLCBpZGVudGlmaWVyVGFi
bGUoY3JlYXRlSWRlbnRpZmllclRhYmxlKCkpCiAgICAgLCBwcm9wZXJ0eU5hbWVzKG5ldyBDb21t
b25JZGVudGlmaWVycyh0aGlzKSkKICAgICAsIGVtcHR5TGlzdChuZXcgQXJnTGlzdCkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMzY3NTQpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKIAorI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpT
Q2FsbGJhY2tGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKICNpbmNs
dWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJCb29sZWFuQ29uc3RydWN0b3IuaCIKQEAgLTU1LDYgKzU4LDcgQEAKICNpbmNsdWRl
ICJQcm9maWxlci5oIgogI2luY2x1ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
UmVnRXhwQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKICNp
bmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTY29wZUNoYWluTWFyay5oIgog
I2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCkBAIC0yMDIsMzQgKzIwNiwzMyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAgICAgLy8gUHJvdG90eXBlcwog
CiAgICAgZCgpLT5mdW5jdGlvblByb3RvdHlwZSA9IG5ldyAoZXhlYykgRnVuY3Rpb25Qcm90b3R5
cGUoZXhlYyk7Ci0gICAgZCgpLT5mdW5jdGlvblN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVh
dGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgZCgpLT5jYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAg
ICBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShk
KCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQo
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUgPSBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBkKCktPmNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUg
PSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpOworICAgIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUgPSBQcm90b3R5cGVG
dW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAg
ZCgpLT5mdW5jdGlvblByb3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKGV4ZWMsIGQoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIGQoKS0+b2JqZWN0UHJvdG90
eXBlID0gbmV3IChleGVjKSBPYmplY3RQcm90b3R5cGUoZXhlYywgZCgpLT5wcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZS5nZXQoKSk7CiAgICAgZCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSA9IGQo
KS0+b2JqZWN0UHJvdG90eXBlLT5pbmhlcml0b3JJRCgpOwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUtPnNldFByb3RvdHlwZShkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0gICAgZCgpLT5hcmd1
bWVudHNTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2JqZWN0UHJvdG90eXBl
KTsKLSAgICBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6
Y3JlYXRlKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBkKCktPmNhbGxiYWNrT2JqZWN0U3Ry
dWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSk7Ci0gICAg
ZCgpLT5hcnJheVByb3RvdHlwZSA9IG5ldyAoZXhlYykgQXJyYXlQcm90b3R5cGUoU3RydWN0dXJl
SUQ6OmNyZWF0ZShkKCktPm9iamVjdFByb3RvdHlwZSkpOwotICAgIGQoKS0+YXJyYXlTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+YXJyYXlQcm90b3R5cGUpOwotICAgIGQoKS0+
cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmFy
cmF5UHJvdG90eXBlKTsKLSAgICBkKCktPnN0cmluZ1Byb3RvdHlwZSA9IG5ldyAoZXhlYykgU3Ry
aW5nUHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5
cGUpKTsKLSAgICBkKCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVh
dGUoZCgpLT5zdHJpbmdQcm90b3R5cGUpOwotICAgIGQoKS0+Ym9vbGVhblByb3RvdHlwZSA9IG5l
dyAoZXhlYykgQm9vbGVhblByb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+
b2JqZWN0UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7
Ci0gICAgZCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShk
KCktPmJvb2xlYW5Qcm90b3R5cGUpOwotICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gbmV3IChl
eGVjKSBOdW1iZXJQcm90b3R5cGUoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9iamVj
dFByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOwotICAg
IGQoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm51
bWJlclByb3RvdHlwZSk7Ci0gICAgZCgpLT5kYXRlUHJvdG90eXBlID0gbmV3IChleGVjKSBEYXRl
UHJvdG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5cGUp
KTsKLSAgICBkKCktPmRhdGVTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZGF0
ZVByb3RvdHlwZSk7Ci0gICAgZCgpLT5yZWdFeHBQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIFJlZ0V4
cFByb3RvdHlwZShleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+b2JqZWN0UHJvdG90eXBl
KSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZCgpLT5yZWdF
eHBTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+cmVnRXhwUHJvdG90eXBlKTsK
LSAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEVycm9yUHJv
dG90eXBlKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5vYmplY3RQcm90b3R5cGUpLCBk
KCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKLSAgICBkKCktPmVycm9yU3Ry
dWN0dXJlID0gU3RydWN0dXJlSUQ6OmNyZWF0ZShlcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5h
cmd1bWVudHNTdHJ1Y3R1cmUgPSBBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2Jq
ZWN0UHJvdG90eXBlKTsKKyAgICBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUgPSBK
U0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90
eXBlKTsKKyAgICBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlID0gSlNDYWxsYmFja09iamVj
dDxKU09iamVjdD46OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKKyAg
ICBkKCktPmFycmF5UHJvdG90eXBlID0gbmV3IChleGVjKSBBcnJheVByb3RvdHlwZShBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpKTsKKyAgICBk
KCktPmFycmF5U3RydWN0dXJlID0gSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5hcnJh
eVByb3RvdHlwZSk7CisgICAgZCgpLT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUgPSBSZWdF
eHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+YXJyYXlQcm90b3R5cGUpOwor
ICAgIGQoKS0+c3RyaW5nUHJvdG90eXBlID0gbmV3IChleGVjKSBTdHJpbmdQcm90b3R5cGUoZXhl
YywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVjdFByb3RvdHlw
ZSkpOworICAgIGQoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlID0gU3RyaW5nT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmVJRChkKCktPnN0cmluZ1Byb3RvdHlwZSk7CisgICAgZCgpLT5ib29sZWFuUHJv
dG90eXBlID0gbmV3IChleGVjKSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIEJvb2xlYW5Qcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5
cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7CisgICAgZCgpLT5ib29sZWFuT2JqZWN0U3RydWN0
dXJlID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5ib29sZWFuUHJvdG90
eXBlKTsKKyAgICBkKCktPm51bWJlclByb3RvdHlwZSA9IG5ldyAoZXhlYykgTnVtYmVyUHJvdG90
eXBlKGV4ZWMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQ
cm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKKyAgICBk
KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSA9IE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
SUQoZCgpLT5udW1iZXJQcm90b3R5cGUpOworICAgIGQoKS0+ZGF0ZVByb3RvdHlwZSA9IG5ldyAo
ZXhlYykgRGF0ZVByb3RvdHlwZShleGVjLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJ
RChkKCktPm9iamVjdFByb3RvdHlwZSkpOworICAgIGQoKS0+ZGF0ZVN0cnVjdHVyZSA9IERhdGVJ
bnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5kYXRlUHJvdG90eXBlKTsKKyAgICBkKCkt
PnJlZ0V4cFByb3RvdHlwZSA9IG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIFJlZ0V4
cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpLCBkKCkt
PnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKKyAgICBkKCktPnJlZ0V4cFN0cnVj
dHVyZSA9IFJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5yZWdFeHBQcm90b3R5
cGUpOworICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgRXJy
b3JQcm90b3R5cGUoZXhlYywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+
b2JqZWN0UHJvdG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7
CisgICAgZCgpLT5lcnJvclN0cnVjdHVyZSA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVy
ZUlEKGVycm9yUHJvdG90eXBlKTsKIAotICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gbmF0aXZlRXJy
b3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGVycm9yUHJvdG90eXBl
KTsKKyAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJl
ID0gTmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGVycm9yUHJvdG90eXBl
KTsKIAogICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBldmFsRXJyb3JQcm90b3R5cGUgPSBuZXcg
KGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3Ry
dWN0dXJlLCAiRXZhbEVycm9yIiwgIkV2YWxFcnJvciIpOwogICAgIE5hdGl2ZUVycm9yUHJvdG90
eXBlKiByYW5nZUVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBOYXRpdmVFcnJvclByb3RvdHlw
ZShleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiLCAiUmFu
Z2VFcnJvciIpOwpAQCAtMjQwLDE5ICsyNDMsMTkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU1ZhbHVlKiBv
YmplY3RDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgU3Ry
dWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5vYmplY3RQcm90
b3R5cGUpOwotICAgIEpTVmFsdWUqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1
bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9u
UHJvdG90eXBlKSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogYXJyYXlD
b25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBTdHJ1Y3R1cmVJ
RDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmFycmF5UHJvdG90eXBlKTsK
LSAgICBKU1ZhbHVlKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5nQ29uc3Ry
dWN0b3IoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwg
ZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5zdHJpbmdQcm90b3R5
cGUpOwotICAgIEpTVmFsdWUqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQm9vbGVh
bkNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSksIGQoKS0+Ym9vbGVhblByb3RvdHlwZSk7Ci0gICAgSlNWYWx1ZSogbnVtYmVyQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpj
cmVhdGUoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+bnVtYmVyUHJvdG90eXBlKTsKLSAg
ICBKU1ZhbHVlKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3Rvcihl
eGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCBkKCktPmRhdGVQcm90b3R5cGUpOworICAg
IEpTVmFsdWUqIG9iamVjdENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3Rv
cihleGVjLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlv
blByb3RvdHlwZSksIGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlKiBmdW5jdGlv
bkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIEZ1bmN0
aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUp
LCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlKiBhcnJheUNvbnN0cnVjdG9y
ID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIEFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPmFycmF5UHJvdG90
eXBlKTsKKyAgICBKU1ZhbHVlKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5n
Q29uc3RydWN0b3IoZXhlYywgU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdl
dCgpLCBkKCktPnN0cmluZ1Byb3RvdHlwZSk7CisgICAgSlNWYWx1ZSogYm9vbGVhbkNvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgQm9vbGVhbkNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgZCgpLT5ib29s
ZWFuUHJvdG90eXBlKTsKKyAgICBKU1ZhbHVlKiBudW1iZXJDb25zdHJ1Y3RvciA9IG5ldyAoZXhl
YykgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBkKCktPm51bWJlclByb3RvdHlwZSk7Cisg
ICAgSlNWYWx1ZSogZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3Io
ZXhlYywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgZCgpLT5kYXRl
UHJvdG90eXBlKTsKIAotICAgIGQoKS0+cmVnRXhwQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIFJl
Z0V4cENvbnN0cnVjdG9yKGV4ZWMsIFN0cnVjdHVyZUlEOjpjcmVhdGUoZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSksIGQoKS0+cmVnRXhwUHJvdG90eXBlKTsKKyAgICBkKCktPnJlZ0V4cENvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCBSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSksIGQoKS0+cmVnRXhw
UHJvdG90eXBlKTsKIAotICAgIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRXJy
b3JDb25zdHJ1Y3RvcihleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpLCBlcnJvclByb3RvdHlwZSk7CisgICAgZCgpLT5lcnJvckNvbnN0cnVjdG9yID0gbmV3
IChleGVjKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZUlEKGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpLCBlcnJvclByb3RvdHlwZSk7CiAKLSAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IG5hdGl2ZUVycm9yU3RydWN0dXJlID0gU3RydWN0dXJlSUQ6
OmNyZWF0ZShkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlSUQ+
IG5hdGl2ZUVycm9yU3RydWN0dXJlID0gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAKICAgICBkKCktPmV2YWxFcnJvckNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIG5hdGl2
ZUVycm9yU3RydWN0dXJlLCBldmFsRXJyb3JQcm90b3R5cGUpOwogICAgIGQoKS0+cmFuZ2VFcnJv
ckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIG5h
dGl2ZUVycm9yU3RydWN0dXJlLCByYW5nZUVycm9yUHJvdG90eXBlKTsKQEAgLTMwMSw3ICszMDQs
NyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICAvLyBT
ZXQgZ2xvYmFsIHZhbHVlcy4KICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1td
ID0gewotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTWF0aCIp
LCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywgU3RydWN0dXJlSUQ6OmNyZWF0ZShkKCktPm9i
amVjdFByb3RvdHlwZSkpLCBEb250RW51bSB8IERvbnREZWxldGUpLAorICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmpl
Y3QoZXhlYywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5
cGUpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KElkZW50aWZpZXIoZXhlYywgIk5hTiIpLCBqc05hTihleGVjKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlKSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkluZmlu
aXR5IiksIGpzTnVtYmVyKGV4ZWMsIEluZiksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJ1bmRlZmluZWQiKSwganNV
bmRlZmluZWQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlKQpAQCAtMzExLDcgKzMxNCw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIC8vIFNldCBnbG9i
YWwgZnVuY3Rpb25zLgogCi0gICAgZCgpLT5ldmFsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEdsb2Jh
bEV2YWxGdW5jdGlvbihleGVjLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwsIHRo
aXMpOworICAgIGQoKS0+ZXZhbEZ1bmN0aW9uID0gbmV3IChleGVjKSBHbG9iYWxFdmFsRnVuY3Rp
b24oZXhlYywgR2xvYmFsRXZhbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0
aW9uUHJvdG90eXBlKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGdsb2JhbEZ1bmNF
dmFsLCB0aGlzKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBkKCktPmV2YWxGdW5jdGlv
biwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQo
KSwgMiwgSWRlbnRpZmllcihleGVjLCAicGFyc2VJbnQiKSwgZ2xvYmFsRnVuY1BhcnNlSW50KSwg
RG9udEVudW0pOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwg
MSwgSWRlbnRpZmllcihleGVjLCAicGFyc2VGbG9hdCIpLCBnbG9iYWxGdW5jUGFyc2VGbG9hdCks
IERvbnRFbnVtKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAzNjc1NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTIsMTMgKzMxMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGlu
ZSBKU1ZhbHVlKiBTdHJ1Y3R1cmVJRDo6cHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSogZXhl
YykKICAgICB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gT2JqZWN0VHlwZSkKKyAgICAgICAgaWYg
KHR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gbV9w
cm90b3R5cGU7CiAKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBTdHJpbmdUeXBlKQorICAgICAgICBp
ZiAodHlwZUluZm8oKS50eXBlKCkgPT0gU3RyaW5nVHlwZSkKICAgICAgICAgICAgIHJldHVybiBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpOwogCi0gICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gTnVtYmVyVHlwZSk7CisgICAgICAgIEFTU0VSVCh0eXBlSW5mbygp
LnR5cGUoKSA9PSBOdW1iZXJUeXBlKTsKICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+bnVtYmVyUHJvdG90eXBlKCk7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvSlNOdW1iZXJDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L0pTTnVtYmVyQ2VsbC5oCShyZXZpc2lvbiAzNjc1NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9K
U051bWJlckNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAjZW5kaWYKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVlKiBwcm90bykgeyByZXR1cm4g
U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oTnVtYmVyVHlwZSkpOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBKU051bWJlckNlbGwoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUg
dmFsdWUpCiAgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCkubnVtYmVyU3Ry
dWN0dXJlSUQuZ2V0KCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU09iamVjdC5jcHAJKHJldmlzaW9uIDM2
NzU0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDk5LDcgKzQ5OSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVy
UHIKIAogU3RydWN0dXJlSUQqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRCgpCiB7Ci0gICAg
bV9pbmhlcml0b3JJRCA9IFN0cnVjdHVyZUlEOjpjcmVhdGUodGhpcyk7CisgICAgbV9pbmhlcml0
b3JJRCA9IEpTT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRCh0aGlzKTsKICAgICByZXR1cm4gbV9p
bmhlcml0b3JJRC5nZXQoKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDM2NzU0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4MSw2ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGlubGluZVN0b3JhZ2VDYXBhY2l0eSA9IDI7CiAKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTVmFsdWUqIHByb3RvKSB7
IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7
IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RGb3JX
cml0ZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYg
c2xvdElzV3JpdGVhYmxlKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmgJKHJldmlzaW9uIDM2
NzU0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDYgKzgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY2FuR2V0SW5kZXgo
dW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLnNp
emUoKSk7IH0KICAgICAgICAgSlNTdHJpbmcqIGdldEluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
KTsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gY3JlYXRlU3RydWN0
dXJlSUQoSlNWYWx1ZSogcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG8s
IFR5cGVJbmZvKFN0cmluZ1R5cGUpKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBW
UHRyU3RlYWxpbmdIYWNrVHlwZSB7IFZQdHJTdGVhbGluZ0hhY2sgfTsKICAgICAgICAgSlNTdHJp
bmcoVlB0clN0ZWFsaW5nSGFja1R5cGUpIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL05hdGl2
ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9O
YXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY3NTQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OgogCiBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBOYXRpdmVFcnJvclByb3Rv
dHlwZSogbmF0aXZlRXJyb3JQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMs
IHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZS0+Z2V0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS0+Z2V0U3RyaW5nKCkpKQotICAgICwgbV9l
cnJvclN0cnVjdHVyZShTdHJ1Y3R1cmVJRDo6Y3JlYXRlKG5hdGl2ZUVycm9yUHJvdG90eXBlKSkK
KyAgICAsIG1fZXJyb3JTdHJ1Y3R1cmUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlSUQo
bmF0aXZlRXJyb3JQcm90b3R5cGUpKQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBuYXRpdmVFcnJvclByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAzNjc1NCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPYmplY3RQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKICNpbmNsdWRlICJS
ZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJy
ZWdleHAuaCIKQEAgLTExNCwyMyArMTE1LDYgQEAgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6cGVy
Zm9ybU1hdGNoKFJlZwogICAgIH0KIH0KIAotY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVi
bGljIEpTQXJyYXkgewotcHVibGljOgotICAgIFJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUq
LCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqKTsKLSAgICB2aXJ0dWFsIH5SZWdFeHBNYXRjaGVz
QXJyYXkoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2Uo
ZXhlYyk7IHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgeyBp
ZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSogdiwgUHV0UHJvcGVydHlTbG90JiBzbG90KSB7IGlmIChsYXp5
Q3JlYXRpb25EYXRhKCkpIGZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOyBKU0FycmF5OjpwdXQoZXhl
YywgcHJvcGVydHlOYW1lLCB2LCBzbG90KTsgfQotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHYpIHsgaWYgKGxhenlD
cmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7IEpTQXJyYXk6OnB1dChleGVj
LCBwcm9wZXJ0eU5hbWUsIHYpOyB9Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSB7IGlmIChsYXp5
Q3JlYXRpb25EYXRhKCkpIGZpbGxBcnJheUluc3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6
ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsgfQotICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgeyBp
ZiAobGF6eUNyZWF0aW9uRGF0YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpT
QXJyYXk6OmRlbGV0ZVByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBhcnIpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7
IEpTQXJyYXk6OmdldFByb3BlcnR5TmFtZXMoZXhlYywgYXJyKTsgfQotCi0gICAgdm9pZCBmaWxs
QXJyYXlJbnN0YW5jZShFeGVjU3RhdGUqKTsKLX07Ci0KIFJlZ0V4cE1hdGNoZXNBcnJheTo6UmVn
RXhwTWF0Y2hlc0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRl
KiBkYXRhKQogICAgIDogSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4
cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBkYXRhLT5sYXN0TnVtU3ViUGF0dGVybnMgKyAxKQog
ewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBSZWdFeHBNYXRjaGVzQXJyYXlfaAorI2RlZmluZSBS
ZWdFeHBNYXRjaGVzQXJyYXlfaAorCisjaW5jbHVkZSAiSlNBcnJheS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgeworcHVi
bGljOgorICAgIFJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1Y3Rv
clByaXZhdGUqKTsKKyAgICB2aXJ0dWFsIH5SZWdFeHBNYXRjaGVzQXJyYXkoKTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIHsgaWYg
KGxhenlDcmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7IHJldHVybiBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgeyBpZiAobGF6eUNyZWF0aW9uRGF0
YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOyB9CisgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdiwgUHV0UHJvcGVydHlTbG90JiBzbG90KSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZp
bGxBcnJheUluc3RhbmNlKGV4ZWMpOyBKU0FycmF5OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2
LCBzbG90KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHYpIHsgaWYgKGxhenlDcmVhdGlvbkRhdGEoKSkgZmls
bEFycmF5SW5zdGFuY2UoZXhlYyk7IEpTQXJyYXk6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHYp
OyB9CisgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSB7IGlmIChsYXp5Q3JlYXRpb25EYXRhKCkpIGZp
bGxBcnJheUluc3RhbmNlKGV4ZWMpOyByZXR1cm4gSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lKTsgfQorICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgeyBpZiAobGF6eUNyZWF0aW9uRGF0
YSgpKSBmaWxsQXJyYXlJbnN0YW5jZShleGVjKTsgcmV0dXJuIEpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnIpIHsgaWYgKGxhenlD
cmVhdGlvbkRhdGEoKSkgZmlsbEFycmF5SW5zdGFuY2UoZXhlYyk7IEpTQXJyYXk6OmdldFByb3Bl
cnR5TmFtZXMoZXhlYywgYXJyKTsgfQorCisgICAgdm9pZCBmaWxsQXJyYXlJbnN0YW5jZShFeGVj
U3RhdGUqKTsKK307CisKK30KKworI2VuZGlmIC8vIFJlZ0V4cE1hdGNoZXNBcnJheV9oCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvU3RydWN0dXJlSUQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9TdHJ1Y3R1cmVJRC5jcHAJKHJldmlzaW9uIDM2NzU0KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL1N0cnVjdHVyZUlELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYs
OSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAotU3RydWN0dXJl
SUQ6OlN0cnVjdHVyZUlEKEpTVmFsdWUqIHByb3RvdHlwZSwgSlNUeXBlIHR5cGUpCi0gICAgOiBt
X2lzRGljdGlvbmFyeShmYWxzZSkKLSAgICAsIG1fdHlwZSh0eXBlKQorU3RydWN0dXJlSUQ6OlN0
cnVjdHVyZUlEKEpTVmFsdWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQor
ICAgIDogbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faXNEaWN0aW9uYXJ5KGZhbHNlKQog
ICAgICwgbV9wcm90b3R5cGUocHJvdG90eXBlKQogICAgICwgbV9jYWNoZWRQcm90b3R5cGVDaGFp
bigwKQogICAgICwgbV9wcmV2aW91cygwKQpAQCAtMTQxLDcgKzE0MSw3IEBAIFBhc3NSZWZQdHI8
U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjphZGQKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24u
cmVsZWFzZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4gdHJhbnNpdGlvbiA9
IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+bV9wcm90b3R5cGUpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJ
RD4gdHJhbnNpdGlvbiA9IGNyZWF0ZShzdHJ1Y3R1cmVJRC0+bV9wcm90b3R5cGUsIHN0cnVjdHVy
ZUlELT50eXBlSW5mbygpKTsKICAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWlu
ID0gc3RydWN0dXJlSUQtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW47CiAgICAgdHJhbnNpdGlvbi0+
bV9wcmV2aW91cyA9IHN0cnVjdHVyZUlEOwogICAgIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlv
dXMgPSBwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJlcCgpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIFBh
c3NSZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjp0b0QKIHsKICAgICBBU1NFUlQoIXN0
cnVjdHVyZUlELT5tX2lzRGljdGlvbmFyeSk7CiAKLSAgICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRy
YW5zaXRpb24gPSBjcmVhdGUoc3RydWN0dXJlSUQtPm1fcHJvdG90eXBlKTsKKyAgICBSZWZQdHI8
U3RydWN0dXJlSUQ+IHRyYW5zaXRpb24gPSBjcmVhdGUoc3RydWN0dXJlSUQtPm1fcHJvdG90eXBl
LCBzdHJ1Y3R1cmVJRC0+dHlwZUluZm8oKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9pc0RpY3Rpb25h
cnkgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlNYXAgPSBzdHJ1Y3R1cmVJRC0+
bV9wcm9wZXJ0eU1hcDsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CkBAIC0xNzgs
NyArMTc4LDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gU3RydWN0dXJlSUQ6OmZybwogCiBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1cmVJRDo6Y2hhbmdlUHJvdG90eXBlVHJhbnNp
dGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQsIEpTVmFsdWUqIHByb3RvdHlwZSkKIHsKLSAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRyYW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBlKTsKKyAg
ICBSZWZQdHI8U3RydWN0dXJlSUQ+IHRyYW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBlLCBzdHJ1
Y3R1cmVJRC0+dHlwZUluZm8oKSk7CiAgICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uQ291bnQg
PSBzdHJ1Y3R1cmVJRC0+bV90cmFuc2l0aW9uQ291bnQgKyAxOwogICAgIHRyYW5zaXRpb24tPm1f
cHJvcGVydHlNYXAgPSBzdHJ1Y3R1cmVJRC0+bV9wcm9wZXJ0eU1hcDsKICAgICByZXR1cm4gdHJh
bnNpdGlvbi5yZWxlYXNlKCk7CkBAIC0xODYsNyArMTg2LDcgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmVJRD4gU3RydWN0dXJlSUQ6OmNoYQogCiBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBTdHJ1Y3R1
cmVJRDo6Z2V0dGVyU2V0dGVyVHJhbnNpdGlvbihTdHJ1Y3R1cmVJRCogc3RydWN0dXJlSUQpCiB7
Ci0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZUlE
LT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiB0cmFuc2l0aW9u
ID0gY3JlYXRlKHN0cnVjdHVyZUlELT5zdG9yZWRQcm90b3R5cGUoKSwgc3RydWN0dXJlSUQtPnR5
cGVJbmZvKCkpOwogICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvbkNvdW50ID0gc3RydWN0dXJl
SUQtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5TWFw
ID0gc3RydWN0dXJlSUQtPm1fcHJvcGVydHlNYXA7CiAgICAgcmV0dXJuIHRyYW5zaXRpb24ucmVs
ZWFzZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1N0cnVjdHVyZUlELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1N0cnVjdHVyZUlELmgJKHJldmlzaW9uIDM2NzU0KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL1N0cnVjdHVyZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
QEAgLTI5LDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJKU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXAuaCIKKyNpbmNsdWRlICJUeXBlSW5mby5oIgogI2lu
Y2x1ZGUgInVzdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CkBAIC03NSw5ICs3Nyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFN0cnVjdHVyZUlEIDogcHVibGljIFJlZkNvdW50ZWQ8U3RydWN0dXJlSUQ+IHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDVEk7Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGUoSlNWYWx1ZSogcHJvdG90eXBlLCBKU1R5cGUg
dHlwZSA9IE9iamVjdFR5cGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlE
PiBjcmVhdGUoSlNWYWx1ZSogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RydWN0dXJlSUQocHJv
dG90eXBlLCB0eXBlKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cnVjdHVy
ZUlEKHByb3RvdHlwZSwgdHlwZUluZm8pKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFN0cnVjdHVy
ZUlEKiwgSlNWYWx1ZSogcHJvdG90eXBlKTsKQEAgLTk2LDcgKzk4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2lzRGlj
dGlvbmFyeTsgfQogCi0gICAgICAgIEpTVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZUluZm87IH0KIAogICAgICAgICBKU1ZhbHVlKiBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBtX3Byb3RvdHlwZTsgfQogICAgICAgICBKU1ZhbHVlKiBwcm90b3R5cGVGb3JMb29r
dXAoRXhlY1N0YXRlKik7IApAQCAtMTE5LDEyICsxMjEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxVU3RyaW5nOjpSZXA+LCB1bnNpZ25lZD4g
VHJhbnNpdGlvblRhYmxlS2V5OwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VHJhbnNpdGlvblRh
YmxlS2V5LCBTdHJ1Y3R1cmVJRCosIFRyYW5zaXRpb25UYWJsZUhhc2gsIFRyYW5zaXRpb25UYWJs
ZUhhc2hUcmFpdHM+IFRyYW5zaXRpb25UYWJsZTsKIAotICAgICAgICBTdHJ1Y3R1cmVJRChKU1Zh
bHVlKiBwcm90b3R5cGUsIEpTVHlwZSk7CisgICAgICAgIFN0cnVjdHVyZUlEKEpTVmFsdWUqIHBy
b3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAKKyAgICAgICAgVHlwZUluZm8g
bV90eXBlSW5mbzsKKwogICAgICAgICBib29sIG1faXNEaWN0aW9uYXJ5OwotICAgICAgICBKU1R5
cGUgbV90eXBlOwogCiAgICAgICAgIEpTVmFsdWUqIG1fcHJvdG90eXBlOwogICAgICAgICBSZWZQ
dHI8U3RydWN0dXJlSURDaGFpbj4gbV9jYWNoZWRQcm90b3R5cGVDaGFpbjsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9UeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9UeXBlSW5mby5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL1R5cGVJbmZv
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFz
aWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZUluZm9faAorI2RlZmluZSBU
eXBlSW5mb19oCisKKyNpbmNsdWRlICJKU1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyAg
ICBjbGFzcyBUeXBlSW5mbyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBDVEk7CisgICAgcHVibGlj
OgorICAgICAgICBUeXBlSW5mbyhKU1R5cGUgdHlwZSkgOiBtX3R5cGUodHlwZSkge30KKyAgICAg
ICAgCisgICAgICAgIEpTVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBKU1R5cGUgbV90eXBlOworICAgIH07CisKK30KKworI2VuZGlm
IC8vIFR5cGVJbmZvX2gKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjc1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDgtMDktMjEgIE1hY2llaiBTdGFjaG93
aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIGludHJvZHVjZSBhIFR5cGVJbmZvIGNsYXNzLCBmb3IgaG9sZGluZyBw
ZXItdHlwZSAoaW4gdGhlIEMrKyBjbGFzcyBzZW5zZSkgZGF0ZSBpbiBTdHJ1Y3R1cmVJRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5ODEKKyAgICAg
ICAgCisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQXVkaW9Db25zdHJ1Y3Rvcjo6SlNBdWRpb0NvbnN0cnVjdG9yKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlRE9NU3RydWN0dXJlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldERPTVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1No
ZWxsOjpKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hl
bGw6OnNldFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OmNyZWF0ZVByb3RvdHlw
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVj
dG9yOjpKU0ltYWdlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0
cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3I6OkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3I6OkpTWFNMVFByb2Nlc3NvckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKwog
MjAwOC0wOS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0F1ZGlvQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjc1NCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjb25zdCBDbGFzc0luZm8gSlNBdWRpb0NvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJBdWRpb0NvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OwogCiBKU0F1ZGlv
Q29uc3RydWN0b3I6OkpTQXVkaW9Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIERvY3VtZW50
KiBkb2N1bWVudCkKLSAgICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQorICAgIDogRE9NT2JqZWN0
KEpTQXVkaW9Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50
KQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAzNjc1NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIEpTVmFsdWUq
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZUdldHQKICAgICAvLyBNYWtlIHRoZSBTVkcgJ2Zp
bHRlcicgYXR0cmlidXRlIHVuZGV0ZWN0YWJsZSwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhl
IElFICdmaWx0ZXInIGF0dHJpYnV0ZS4KICAgICBpZiAocHJvcGVydHlOYW1lID09ICJmaWx0ZXIi
KQogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChleGVjLAotICAgICAgICAgICAgU3RydWN0dXJlSUQ6OmNyZWF0ZShleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpKSwKKyAgICAgICAgICAgIFN0
cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGVTdHJ1Y3R1cmVJRChl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpKSwKICAgICAgICAg
ICAgIHRoaXNPYmotPmltcGwoKS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wKSk7CiAKICAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdGhpc09iai0+aW1wbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Ap
KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDM2NzU0
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBTdHJ1Y3R1cmVJRCogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEV4ZWNTCiAgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7CiB9CiAK
LVN0cnVjdHVyZUlEKiBjcmVhdGVET01TdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgSlNPYmplY3QqIHByb3RvdHlwZSkKK1N0cnVjdHVyZUlEKiBj
cmVhdGVET01TdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBDcmVhdGVTdHJ1Y3R1cmVJREZ1bmN0
aW9uIGNyZWF0ZVN0cnVjdHVyZUlELCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSlNPYmpl
Y3QqIHByb3RvdHlwZSkKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IHN0
YXRpY19jYXN0PEpTRE9NV2luZG93Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c3Ry
dWN0dXJlcygpOwogICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsK
LSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBTdHJ1Y3R1cmVJRDo6Y3JlYXRl
KHByb3RvdHlwZSkpLmZpcnN0LT5zZWNvbmQuZ2V0KCk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMu
c2V0KGNsYXNzSW5mbywgY3JlYXRlU3RydWN0dXJlSUQocHJvdG90eXBlKSkuZmlyc3QtPnNlY29u
ZC5nZXQoKTsKIH0KIAogSlNPYmplY3QqIGdldENhY2hlZERPTUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDM2NzU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZW5kaWYKICAgICB9OwogCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEpTQzo6
U3RydWN0dXJlSUQ+ICgqQ3JlYXRlU3RydWN0dXJlSURGdW5jdGlvbikoSlNDOjpKU1ZhbHVlKik7
CisKICAgICBET01PYmplY3QqIGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIodm9pZCogb2JqZWN0
SGFuZGxlKTsKICAgICB2b2lkIGNhY2hlRE9NT2JqZWN0V3JhcHBlcih2b2lkKiBvYmplY3RIYW5k
bGUsIERPTU9iamVjdCogd3JhcHBlcik7CiAgICAgdm9pZCBmb3JnZXRET01PYmplY3Qodm9pZCog
b2JqZWN0SGFuZGxlKTsKQEAgLTY2LDcgKzY4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKIAogICAgIEpTQzo6U3Ry
dWN0dXJlSUQqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvKik7Ci0gICAgSlNDOjpTdHJ1Y3R1cmVJRCogY3JlYXRlRE9NU3RydWN0dXJl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qLCBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUpOworICAgIEpTQzo6U3RydWN0dXJlSUQqIGNyZWF0ZURPTVN0cnVjdHVyZShKU0M6
OkV4ZWNTdGF0ZSosIENyZWF0ZVN0cnVjdHVyZUlERnVuY3Rpb24sIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiwgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGdl
dENhY2hlZERPTUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qKTsKICAgICB2b2lkIGNhY2hlRE9NQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OkNsYXNzSW5mbyosIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yKTsKQEAgLTc1LDcg
Kzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgaWYgKEpTQzo6U3Ry
dWN0dXJlSUQqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShleGVjLCAmV3JhcHBl
ckNsYXNzOjpzX2luZm8pKQogICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZURPTVN0cnVjdHVyZShleGVjLCAmV3JhcHBlckNsYXNzOjpzX2luZm8sIFdy
YXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZURPTVN0cnVjdHVyZShleGVjLCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZUlELCAmV3Jh
cHBlckNsYXNzOjpzX2luZm8sIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKGV4ZWMpKTsK
ICAgICB9CiAgICAgdGVtcGxhdGU8Y2xhc3MgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09i
amVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogICAgIHsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMzY3NTQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNET01XaW5k
b3dTaGUKIGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8gPSB7ICJKU0RP
TVdpbmRvd1NoZWxsIiwgMCwgMCwgMCB9OwogCiBKU0RPTVdpbmRvd1NoZWxsOjpKU0RPTVdpbmRv
d1NoZWxsKFBhc3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3cpCi0gICAgOiBCYXNlKFN0cnVjdHVy
ZUlEOjpjcmVhdGUoanNOdWxsKCkpKQorICAgIDogQmFzZShKU0RPTVdpbmRvd1NoZWxsOjpjcmVh
dGVTdHJ1Y3R1cmVJRChqc051bGwoKSkpCiAgICAgLCBtX3dpbmRvdygwKQogewogICAgIHNldFdp
bmRvdyh3aW5kb3cpOwpAQCAtNTYsOCArNTYsOCBAQCBKU0RPTVdpbmRvd1NoZWxsOjp+SlNET01X
aW5kb3dTaGVsbCgpCiAKIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KFBhc3NSZWZQ
dHI8RE9NV2luZG93PiB3aW5kb3cpCiB7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBwcm90b3R5
cGVTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGpzTnVsbCgpKTsKLSAgICBSZWZQdHI8
U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSA9IFN0cnVjdHVyZUlEOjpjcmVhdGUobmV3IEpTRE9NV2lu
ZG93UHJvdG90eXBlKHByb3RvdHlwZVN0cnVjdHVyZS5yZWxlYXNlKCkpKTsKKyAgICBSZWZQdHI8
U3RydWN0dXJlSUQ+IHByb3RvdHlwZVN0cnVjdHVyZSA9IEpTRE9NV2luZG93UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSk7CisgICAgUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1
Y3R1cmUgPSBKU0RPTVdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlSUQobmV3IEpTRE9NV2luZG93UHJv
dG90eXBlKHByb3RvdHlwZVN0cnVjdHVyZS5yZWxlYXNlKCkpKTsKICAgICBzZXRXaW5kb3cobmV3
IChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpIEpTRE9NV2luZG93KHN0cnVjdHVy
ZS5yZWxlYXNlKCksIHdpbmRvdywgdGhpcykpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMzY3NTQpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCBKU0V2ZW50VGFyZ2V0Tm9kZTo6SlNFdmVudFRhcmdldE5vZGUoUGFzCiAKIEpTT2Jq
ZWN0KiBKU0V2ZW50VGFyZ2V0Tm9kZTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZShKU0M6
OlN0cnVjdHVyZUlEOjpjcmVhdGUoSlNOb2RlUHJvdG90eXBlOjpzZWxmKGV4ZWMpKSk7CisgICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGUoSlNFdmVudFRhcmdl
dE5vZGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKEpTTm9kZVByb3RvdHlwZTo6c2VsZihl
eGVjKSkpOwogfQogCiB2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5lcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBKU1ZhbHVlKiBmdW5jKSBj
b25zdApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9u
RWxlbWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzY3NTQpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0hUTUxPcHRpb25F
bAogY29uc3QgQ2xhc3NJbmZvIEpTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiT3B0aW9uQ29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKIEpTSFRNTE9wdGlvbkVsZW1l
bnRDb25zdHJ1Y3Rvcjo6SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogRE9NT2JqZWN0KFN0cnVjdHVyZUlEOjpj
cmVhdGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCisg
ICAgOiBET01PYmplY3QoSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmVJRChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkK
ICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDQpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDM2NzU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoSlNJbWFnZUNvbnN0cnUKIGNvbnN0IENsYXNzSW5mbyBKU0ltYWdlQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIkltYWdlQ29uc3RydWN0b3IiLCAwLCAwLCAwIH07CiAKIEpT
SW1hZ2VDb25zdHJ1Y3Rvcjo6SlNJbWFnZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgRG9j
dW1lbnQqIGRvY3VtZW50KQotICAgIDogRE9NT2JqZWN0KFN0cnVjdHVyZUlEOjpjcmVhdGUoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCisgICAgOiBET01P
YmplY3QoSlNJbWFnZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmVJRChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKICAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjc1NCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTWE1MSHR0cFJlcXVl
CiBjb25zdCBDbGFzc0luZm8gSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OwogCiBKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3I6OkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3Jl
YXRlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQorICAg
IDogRE9NT2JqZWN0KEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
SUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCiAgICAg
LCBtX2RvY3VtZW50KGRvY3VtZW50KQogewogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBO
b25lKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNjc1NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNYU0xUUHJvY2Vzc28KIGNvbnN0IENs
YXNzSW5mbyBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiWFNMVFByb2Nl
c3NvckNvbnNydWN0b3IiLCAwLCAwLCAwIH07CiAKIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVjdG9y
OjpKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBET01P
YmplY3QoU3RydWN0dXJlSUQ6OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9i
amVjdFByb3RvdHlwZSgpKSkKKyAgICA6IERPTU9iamVjdChKU1hTTFRQcm9jZXNzb3JDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKSkpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUsIEpTWFNMVFByb2Nlc3NvclByb3RvdHlwZTo6c2VsZihleGVjKSwgTm9uZSk7CiB9
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDM2NzU0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtOTUwLDkgKzk1MCw5IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNPYmplY3QqICR7Y2xhc3NO
YW1lfTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYylcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCAmJiAkcGFyZW50
Q2xhc3NOYW1lIG5lICJKU0M6OkRPTU5vZGVGaWx0ZXIiKSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gbmV3IChleGVjKSAke2NsYXNzTmFtZX1Qcm90b3R5cGUo
SlNDOjpTdHJ1Y3R1cmVJRDo6Y3JlYXRlKCR7cGFyZW50Q2xhc3NOYW1lfVByb3RvdHlwZTo6c2Vs
ZihleGVjKSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gbmV3IChleGVjKSAke2NsYXNzTmFtZX1Qcm90b3R5cGUoJHtjbGFzc05hbWV9UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmVJRCgke3BhcmVudENsYXNzTmFtZX1Qcm90b3R5cGU6OnNlbGYoZXhl
YykpKTtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIG5ldyAoZXhlYykgJHtjbGFzc05hbWV9UHJvdG90eXBlKEpTQzo6U3Ry
dWN0dXJlSUQ6OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBuZXcgKGV4ZWMpICR7Y2xhc3NOYW1lfVByb3RvdHlwZSgke2NsYXNzTmFtZX1Qcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZUlEKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJv
dG90eXBlKCkpKTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKICAgICB9CkBAIC0xODExLDcgKzE4MTEsNyBAQCBteSAkaW1wbENvbnRlbnQgPSA8
PCAiRU9GIjsKIGNsYXNzICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVj
dCB7CiBwdWJsaWM6CiAgICAgJHtjbGFzc05hbWV9Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQotICAgICAgICA6IERPTU9iamVjdChTdHJ1Y3R1cmVJRDo6Y3JlYXRlKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQorICAgICAgICA6IERPTU9iamVjdCgk
e2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCiAgICAgewogICAgICAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtwcm90b0NsYXNzTmFtZX06OnNl
bGYoZXhlYyksIE5vbmUpOwogICAgIH0K
</data>
<flag name="review"
          id="10598"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>