<?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>41077</bug_id>
          
          <creation_ts>2010-06-23 10:15:37 -0700</creation_ts>
          <short_desc>MASTER: More work on HTML DOM content attribute reflection</short_desc>
          <delta_ts>2012-06-07 11:26:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41255</dependson>
    
    <dependson>42040</dependson>
    
    <dependson>43650</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>241912</commentid>
    <comment_count>0</comment_count>
      <attachid>59526</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-23 10:15:37 -0700</bug_when>
    <thetext>Created attachment 59526
Work in progress

I have some work on HTML DOM content attribute reflection underway. This will require multiple steps and I’ll use multiple bugs for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271124</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-28 22:52:58 -0700</bug_when>
    <thetext>Not sure if this is done or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643726</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-06-07 11:26:32 -0700</bug_when>
    <thetext>I’ll just close this now. We possibly can use reflection even more, but this bug isn’t helping me keep track of that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59526</attachid>
            <date>2010-06-23 10:15:37 -0700</date>
            <delta_ts>2010-06-23 10:17:33 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>ReflectPatch.txt</filename>
            <type>text/plain</type>
            <size>132726</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjksOCArNjY5
LDcgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhlYWRpbmdMZQogICAgIGlmIChh
cmlhUm9sZUF0dHJpYnV0ZSgpID09IEhlYWRpbmdSb2xlKSAgewogICAgICAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgICAgICByZXR1cm4g
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKS50b0ludCgpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShh
cmlhX2xldmVsQXR0cik7CiAgICAgfQogCiAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDFUYWcp
KQpAQCAtMjAzMSwxMCArMjAzMCwxMCBAQCBLVVJMIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnVybCgpIGNvCiAgICAgICAgIHJldHVybiBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT51cmwoKTsK
ICAgICAKICAgICBpZiAoaXNJbWFnZSgpICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBtX3JlbmRl
cmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoaW1nVGFnKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxJbWFnZUVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpLT5zcmMoKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2Rl
KCkpLT5nZXRVUkxBdHRyaWJ1dGUoc3JjQXR0cik7CiAgICAgCiAgICAgaWYgKGlzSW5wdXRJbWFn
ZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fcmVu
ZGVyZXItPm5vZGUoKSktPnNyYygpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG1fcmVuZGVyZXItPm5vZGUoKSktPmdldFVSTEF0dHJpYnV0ZShzcmNBdHRy
KTsKICAgICAKICAgICByZXR1cm4gS1VSTCgpOwogfQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMiwxMSArMTAyLDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc1RhYmxlRXhwb3Nh
YmwKICAgICAKICAgICAvLyBpZiB0aGVyZSBpcyBhIGNhcHRpb24gZWxlbWVudCwgc3VtbWFyeSwg
VEhFQUQsIG9yIFRGT09UIHNlY3Rpb24sIGl0J3MgbW9zdCBjZXJ0YWlubHkgYSBkYXRhIHRhYmxl
CiAgICAgSFRNTFRhYmxlRWxlbWVudCogdGFibGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlRWxlbWVudCo+KHRhYmxlTm9kZSk7Ci0gICAgaWYgKCF0YWJsZUVsZW1lbnQtPnN1bW1hcnko
KS5pc0VtcHR5KCkgfHwgdGFibGVFbGVtZW50LT50SGVhZCgpIHx8IHRhYmxlRWxlbWVudC0+dEZv
b3QoKSB8fCB0YWJsZUVsZW1lbnQtPmNhcHRpb24oKSkKKyAgICBpZiAoIXRhYmxlRWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cikuaXNFbXB0eSgpIHx8IHRhYmxlRWxlbWVudC0+
dEhlYWQoKSB8fCB0YWJsZUVsZW1lbnQtPnRGb290KCkgfHwgdGFibGVFbGVtZW50LT5jYXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8vIGlmIHNvbWVvbmUgdXNlZCAi
cnVsZXMiIGF0dHJpYnV0ZSB0aGFuIHRoZSB0YWJsZSBzaG91bGQgYXBwZWFyCi0gICAgaWYgKCF0
YWJsZUVsZW1lbnQtPnJ1bGVzKCkuaXNFbXB0eSgpKQorICAgIGlmICghdGFibGVFbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKHJ1bGVzQXR0cikuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsgICAgCiAgICAgCiAgICAgLy8gZ28gdGhyb3VnaCB0aGUgY2VsbCdzIGFuZCBjaGVjayBmb3Ig
dGVsbC10YWxlIHNpZ25zIG9mICJkYXRhIiB0YWJsZSBzdGF0dXMKQEAgLTE1NCw4ICsxNTQsOCBA
QCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNUYWJsZUV4cG9zYWJsCiAgICAgICAgICAgICBI
VE1MVGFibGVDZWxsRWxlbWVudCogY2VsbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVD
ZWxsRWxlbWVudCo+KGNlbGxOb2RlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gaW4g
dGhpcyBjYXNlLCB0aGUgZGV2ZWxvcGVyIGV4cGxpY2l0bHkgYXNzaWduZWQgYSAiZGF0YSIgdGFi
bGUgYXR0cmlidXRlCi0gICAgICAgICAgICBpZiAoIWNlbGxFbGVtZW50LT5oZWFkZXJzKCkuaXNF
bXB0eSgpIHx8ICFjZWxsRWxlbWVudC0+YWJicigpLmlzRW1wdHkoKQotICAgICAgICAgICAgICAg
IHx8ICFjZWxsRWxlbWVudC0+YXhpcygpLmlzRW1wdHkoKSB8fCAhY2VsbEVsZW1lbnQtPnNjb3Bl
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgaWYgKCFjZWxsRWxlbWVudC0+Z2V0QXR0cmlidXRl
KGhlYWRlcnNBdHRyKS5pc0VtcHR5KCkgfHwgIWNlbGxFbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWJi
ckF0dHIpLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFjZWxsRWxlbWVudC0+Z2V0QXR0
cmlidXRlKGF4aXNBdHRyKS5pc0VtcHR5KCkgfHwgIWNlbGxFbGVtZW50LT5nZXRBdHRyaWJ1dGUo
c2NvcGVBdHRyKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IGNlbGwtPnN0
eWxlKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQko
cmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQkod29ya2luZyBjb3B5KQpAQCAtNDMzLDcgKzQzMyw3IEBAIHN1YiBHZXR0ZXJFeHByZXNz
aW9uUHJlZml4CiAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJ1
bnNpZ25lZCBsb25nIikgewogICAgICAgICAkZnVuY3Rpb25OYW1lID0gImdldFVuc2lnbmVkSW50
ZWdyYWxBdHRyaWJ1dGUiOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRmdW5jdGlvbk5hbWUgPSAi
Z2V0QXR0cmlidXRlIjsKKyAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJmYXN0R2V0QXR0cmlidXRl
IjsKICAgICB9CiAKICAgICByZXR1cm4gIiRmdW5jdGlvbk5hbWUoJGNvbnRlbnRBdHRyaWJ1dGVO
YW1lIgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4ODAsMTEgKzQ4ODAsMTEgQEAgRWxlbWVudCog
RG9jdW1lbnQ6OmZpbmRBbmNob3IoY29uc3QgU3RyaQogICAgICAgICAgICAgSFRNTEFuY2hvckVs
ZW1lbnQqIGFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSk7CiAg
ICAgICAgICAgICBpZiAoaW5Db21wYXRNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBRdWly
a3MgbW9kZSwgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIG5hbWVzLgotICAgICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbmNob3ItPm5hbWUoKSwgbmFtZSkpCisgICAg
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFuY2hvci0+ZmFzdEdldEF0dHJpYnV0
ZShuYW1lQXR0ciksIG5hbWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5jaG9yOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSwgbmFt
ZXMgbmVlZCB0byBtYXRjaCBleGFjdGx5LgotICAgICAgICAgICAgICAgIGlmIChhbmNob3ItPm5h
bWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIGlmIChhbmNob3ItPmZhc3RHZXRBdHRyaWJ1
dGUobmFtZUF0dHIpID09IG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3I7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkK
KysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDAsNyArNzQw
LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaQogCiBLVVJMIEVs
ZW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYmFzZUF0
dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZShiYXNlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBiYXNlQXR0cmlidXRlID0gZmFzdEdldEF0dHJpYnV0ZShiYXNlQXR0cik7CiAgICAgS1VSTCBi
YXNlKEtVUkwoKSwgYmFzZUF0dHJpYnV0ZSk7CiAgICAgaWYgKCFiYXNlLnByb3RvY29sKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gYmFzZTsKQEAgLTExNjAsNyArMTE2MCw3IEBAIHZvaWQg
RWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnUKICAgICAgICAgcmVzdWx0ICs9IHM7
CiAgICAgfQogICAgICAgICAgIAotICAgIHMgPSBnZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsKKyAg
ICBzID0gZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwogICAgIGlmIChzLmxlbmd0aCgpID4g
MCkgewogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMCkKICAgICAgICAgICAgIHJlc3Vs
dCArPSAiOyAiOwpAQCAtMTUyOCwxMiArMTUyOCwxMiBAQCBLVVJMIEVsZW1lbnQ6OmdldFVSTEF0
dHJpYnV0ZShjb25zdCBRdWFsCiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoYXR0
cmlidXRlKSk7CiAgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChnZXRBdHRyaWJ1dGUobmFtZSkpKTsKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGZhc3RHZXRBdHRyaWJ1
dGUobmFtZSkpKTsKIH0KIAogaW50IEVsZW1lbnQ6OmdldEludGVncmFsQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKS5zdHJpbmcoKS50b0ludCgpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpLnRvSW50KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
c2V0SW50ZWdyYWxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwg
aW50IHZhbHVlKQpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRJbnRlZ3Jh
bEF0dHJpYnV0ZShjb25zdAogCiB1bnNpZ25lZCBFbGVtZW50OjpnZXRVbnNpZ25lZEludGVncmFs
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKS5zdHJpbmcoKS50b1VJbnQoKTsK
KyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKS5zdHJpbmcoKS50b1VJ
bnQoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIHVuc2lnbmVkIHZhbHVlKQpJbmRleDog
V2ViQ29yZS9kb20vU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
U2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9kb20vU2VsZWN0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIFNlbGVj
dEVsZW1lbnQ6OnJlc2V0KFNlbGVjdEVsZW1lbnRECiAgICAgICAgIGlmICghb3B0aW9uRWxlbWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghaXRlbXNbaV0tPmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNlbGVjdGVkQXR0cikuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYg
KGl0ZW1zW2ldLT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzZWxlY3RlZEF0dHIpKSB7CiAgICAg
ICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgIWRhdGEubXVsdGlwbGUoKSkKICAgICAgICAg
ICAgICAgICBzZWxlY3RlZE9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAg
ICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwpJbmRleDogV2ViQ29y
ZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBAQCBTdHlsZUVsZW1lbnQ6OlN0eWxl
RWxlbWVudCgpCiB7CiB9CiAKLVN0eWxlU2hlZXQqIFN0eWxlRWxlbWVudDo6c2hlZXQoRWxlbWVu
dCogZSkKK1N0eWxlU2hlZXQqIFN0eWxlRWxlbWVudDo6c2hlZXQoRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICBpZiAoIW1fc2hlZXQpCi0gICAgICAgIGNyZWF0ZVNoZWV0KGUpOworICAgICAgICBj
cmVhdGVTaGVldChlbGVtZW50KTsKICAgICByZXR1cm4gbV9zaGVldC5nZXQoKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
U3R5bGVFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIFN0eWxlRWxlbWVudF9oCiAjZGVmaW5l
IFN0eWxlRWxlbWVudF9oCiAKQEAgLTI3LDE0ICsyOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBFbGVtZW50OwogCiBjbGFzcyBTdHlsZUVsZW1lbnQgewotcHVibGljOgorcHJvdGVj
dGVkOgogICAgIFN0eWxlRWxlbWVudCgpOwotICAgIHZpcnR1YWwgflN0eWxlRWxlbWVudCgpIHt9
CisgICAgdmlydHVhbCB+U3R5bGVFbGVtZW50KCkgeyB9CiAKLXByb3RlY3RlZDoKICAgICBTdHls
ZVNoZWV0KiBzaGVldChFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9hZGluZyhi
b29sKSB7fQorICAgIHZpcnR1YWwgdm9pZCBzZXRMb2FkaW5nKGJvb2wpIHsgfQogCiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3QgPSAwOwpAQCAtNDMsOSArNDMsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KERvY3VtZW50Kik7CiAgICAg
dm9pZCBwcm9jZXNzKEVsZW1lbnQqKTsKIAotICAgIHZvaWQgY3JlYXRlU2hlZXQoRWxlbWVudCog
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0ID0gU3RyaW5nKCkpOworICAgIHZvaWQgY3JlYXRlU2hlZXQo
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgdGV4dCA9IFN0cmluZygpKTsKIAotcHJvdGVjdGVkOgog
ICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OwogfTsKIApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMg
Ym9vbCBleGVjdXRlSW5zZXJ0SW1hZ2UoRnJhbWUqIGZyCiB7CiAgICAgLy8gRklYTUU6IElmIHVz
ZXJJbnRlcmZhY2UgaXMgdHJ1ZSwgd2Ugc2hvdWxkIGRpc3BsYXkgYSBkaWFsb2cgYm94IGFuZCBs
ZXQgdGhlIHVzZXIgY2hvb3NlIGEgbG9jYWwgaW1hZ2UuCiAgICAgUmVmUHRyPEhUTUxJbWFnZUVs
ZW1lbnQ+IGltYWdlID0gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlKGZyYW1lLT5kb2N1bWVudCgp
KTsKLSAgICBpbWFnZS0+c2V0U3JjKHZhbHVlKTsKKyAgICBpbWFnZS0+c2V0QXR0cmlidXRlKHNy
Y0F0dHIsIHZhbHVlKTsKICAgICByZXR1cm4gZXhlY3V0ZUluc2VydE5vZGUoZnJhbWUsIGltYWdl
LnJlbGVhc2UoKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2
aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTAsNyArMzEwLDcgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6ZHJh
Z2dhYmxlKCkgY29ucwogCiBLVVJMIEhUTUxBbmNob3JFbGVtZW50OjpocmVmKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGdl
dEF0dHJpYnV0ZShocmVmQXR0cikpKTsKKyAgICByZXR1cm4gZ2V0VVJMQXR0cmlidXRlKGhyZWZB
dHRyKTsKIH0KIAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0SHJlZihjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQpAQCAtMzMyLDExICszMzIsNiBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50
OjpzZXRSZWwoY29uc3QgU3RyCiAgICAgICAgIG1fbGlua1JlbGF0aW9ucyB8PSBSZWxhdGlvbk5v
UmVmZXJyZXI7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFuY2hvckVsZW1lbnQ6Om5h
bWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwotfQotCiBz
aG9ydCBIVE1MQW5jaG9yRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAogewogICAgIC8vIFNraXAg
dGhlIHN1cHBvcnRzRm9jdXMgY2hlY2sgaW4gSFRNTEVsZW1lbnQuCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksNiBAQCBwdWJsaWM6CiAgICAg
S1VSTCBocmVmKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIcmVmKGNvbnN0IEF0b21pY1N0cmluZyYp
OwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0KICAgICBTdHJpbmcg
aGFzaCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SGFzaChjb25zdCBTdHJpbmcmKTsKIApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEs
NyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtCiAKIGJvb2wgSFRN
TEFwcGxldEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQogewot
ICAgIGlmIChnZXRBdHRyaWJ1dGUoY29kZUF0dHIpLmlzTnVsbCgpKQorICAgIGlmICghaGFzQXR0
cmlidXRlKGNvZGVBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIEhU
TUxQbHVnSW5FbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsKQEAgLTE2OCwyNCArMTY4
LDQgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaQogICAgICAgICBy
ZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8gVGhpcyB3aWxsIGNhdXNlIGl0IHRv
IGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhlIEphdmEgYXBwbGV0CiB9CiAKLVN0cmluZyBIVE1MQXBw
bGV0RWxlbWVudDo6aHNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhz
cGFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRIc3BhY2UoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwot
fQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OnZzcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVu
dDo6c2V0VnNwYWNlKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZz
cGFjZUF0dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJ
KHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw2IEBAIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50IDog
cHVibGljIEhUTUxQbHUKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXBwbGV0
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAg
U3RyaW5nIGhzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0SHNwYWNlKGNvbnN0IFN0cmluZyYp
OwotCi0gICAgU3RyaW5nIHZzcGFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VnNwYWNlKGNvbnN0
IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxBcHBsZXRFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDIxICsxNjMsNiBAQCBQYXRoIEhUTUxBcmVhRWxlbWVudDo6Z2V0
UmVnaW9uKGNvbnN0IEluCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKLUtVUkwgSFRNTEFyZWFFbGVt
ZW50OjpocmVmKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Z2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7Ci19Ci0KLWJvb2wgSFRNTEFyZWFFbGVtZW50Ojpub0hy
ZWYoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKG5vaHJlZkF0dHIpLmlzTnVs
bCgpOwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0Tm9IcmVmKGJvb2wgbm9IcmVmKQot
ewotICAgIHNldEF0dHJpYnV0ZShub2hyZWZBdHRyLCBub0hyZWYgPyAiIiA6IDApOwotfQotICAg
IAogSFRNTEltYWdlRWxlbWVudCogSFRNTEFyZWFFbGVtZW50OjppbWFnZUVsZW1lbnQoKSBjb25z
dAogewogICAgIE5vZGUqIG1hcEVsZW1lbnQgPSBwYXJlbnQoKTsKQEAgLTIzMSw5ICsyMTYsNCBA
QCBib29sIEhUTUxBcmVhRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvCiAgICAgcmV0dXJuIGlz
TGluaygpOwogfQogCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7Ci19Ci0KIH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNSArNDMsMTAgQEAgcHVibGljOgogCiAg
ICAgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIFBhdGggZ2V0UGF0
aChSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAKLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2Qg
dG8gZ2V0IHRoZSBwYXJlbnQgbWFwJ3MgaW1hZ2UuCisKKyAgICAvLyBUaGUgcGFyZW50IG1hcCdz
IGltYWdlLgogICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCgpIGNvbnN0OwogICAg
IAotICAgIEtVUkwgaHJlZigpIGNvbnN0OwotCi0gICAgYm9vbCBub0hyZWYoKSBjb25zdDsKLSAg
ICB2b2lkIHNldE5vSHJlZihib29sKTsKLQogcHJpdmF0ZToKICAgICBIVE1MQXJlYUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKQEAgLTU5LDcgKzU0LDYgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyB0
YXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXli
b2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIC8qcmVzdG9yZVBy
ZXZpb3VzU2VsZWN0aW9uKi8pOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAkocmV2
aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBI
VE1MQXVkaW9FbAogICAgIFJlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IGFkb3B0UmVm
KG5ldyBIVE1MQXVkaW9FbGVtZW50KGF1ZGlvVGFnLCBkb2N1bWVudCkpOwogICAgIGF1ZGlvLT5z
ZXRQcmVsb2FkKCJhdXRvIik7CiAgICAgaWYgKCFzcmMuaXNOdWxsKCkpIHsKLSAgICAgICAgYXVk
aW8tPnNldFNyYyhzcmMpOworICAgICAgICBhdWRpby0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHNy
Yyk7CiAgICAgICAgIGF1ZGlvLT5zY2hlZHVsZUxvYWQoKTsKICAgICB9CiAgICAgcmV0dXJuIGF1
ZGlvLnJlbGVhc2UoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsNCBAQCBQYXNzUmVmUHRyPEhUTUxCYXNlRm9udEVs
ZW1lbnQ+IEhUTUxCYXNlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQmFzZUZvbnRFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWludCBIVE1MQmFzZUZvbnRFbGVtZW50Ojpz
aXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNpemVBdHRyKS50b0ludCgp
OwotfQotCi12b2lkIEhUTUxCYXNlRm9udEVsZW1lbnQ6OnNldFNpemUoaW50IHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQog
fQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDkgKzMxLDYgQEAgY2xhc3MgSFRNTEJhc2VGb250RWxlbWVudCA6IHB1YmxpYyBIVE1MRQogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxCYXNlRm9udEVsZW1lbnQ+IGNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRTaXplKGludCk7Ci0KIHByaXZhdGU6CiAgICAgSFRNTEJhc2VGb250RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQmFzZUZvbnRFbGVtZW50LmlkbAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEJhc2VGb250RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAg
bW9kdWxlIGh0bWwgewogICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBjb2xv
cjsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgZmFjZTsKICNpZiBkZWZp
bmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJVkVfQwotICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnRUb1N0cmluZ10gRE9NU3RyaW5nIHNpemU7IC8vIHRoaXMgY2hh
bmdlZCB0byBhIGxvbmcsIGJ1dCBvdXIgZXhpc3RpbmcgQVBJIGlzIGEgc3RyaW5nCisgICAgICAg
IGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHNpemU7IC8vIHRoaXMgY2hhbmdlZCB0byBh
IGxvbmcsIGJ1dCBvdXIgZXhpc3RpbmcgQVBJIGlzIGEgc3RyaW5nCiAjZWxzZQogICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIGxvbmcgc2l6ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCb2R5
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxMCArMTg1LDEwIEBAIHZvaWQgSFRNTEJv
ZHlFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJh
c2UqIG93bmVyRnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2Uq
Pihvd25lckVsZW1lbnQpOwogICAgICAgICBpbnQgbWFyZ2luV2lkdGggPSBvd25lckZyYW1lRWxl
bWVudC0+Z2V0TWFyZ2luV2lkdGgoKTsKICAgICAgICAgaWYgKG1hcmdpbldpZHRoICE9IC0xKQot
ICAgICAgICAgICAgc2V0QXR0cmlidXRlKG1hcmdpbndpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIo
bWFyZ2luV2lkdGgpKTsKKyAgICAgICAgICAgIHNldEludGVncmFsQXR0cmlidXRlKG1hcmdpbndp
ZHRoQXR0ciwgbWFyZ2luV2lkdGgpOwogICAgICAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gb3duZXJG
cmFtZUVsZW1lbnQtPmdldE1hcmdpbkhlaWdodCgpOwogICAgICAgICBpZiAobWFyZ2luSGVpZ2h0
ICE9IC0xKQotICAgICAgICAgICAgc2V0QXR0cmlidXRlKG1hcmdpbmhlaWdodEF0dHIsIFN0cmlu
Zzo6bnVtYmVyKG1hcmdpbkhlaWdodCkpOworICAgICAgICAgICAgc2V0SW50ZWdyYWxBdHRyaWJ1
dGUobWFyZ2luaGVpZ2h0QXR0ciwgbWFyZ2luSGVpZ2h0KTsKICAgICB9CiAKICAgICAvLyBGSVhN
RTogVGhpcyBjYWxsIHRvIHNjaGVkdWxlUmVsYXlvdXQgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaGVy
ZS4KQEAgLTIwMiw1NiArMjAyLDYgQEAgYm9vbCBIVE1MQm9keUVsZW1lbnQ6OmlzVVJMQXR0cmli
dXRlKEF0dAogICAgIHJldHVybiBhdHRyLT5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHI7CiB9CiAK
LVN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OmFMaW5rKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFsaW5rQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRBTGlu
ayhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGlua0F0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJvZHlF
bGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MQm9keUVsZW1lbnQ6Omxp
bmsoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGlua0F0dHIpOwotfQotCi12
b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0TGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShsaW5rQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEJvZHlFbGVt
ZW50Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRleHRBdHRyKTsK
LX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUodGV4dEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxC
b2R5RWxlbWVudDo6dkxpbmsoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmxp
bmtBdHRyKTsKLX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFZMaW5rKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZsaW5rQXR0ciwgdmFsdWUpOwotfQotCiBz
dGF0aWMgaW50IGFkanVzdEZvclpvb20oaW50IHZhbHVlLCBGcmFtZVZpZXcqIGZyYW1lVmlldykK
IHsKICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWVWaWV3LT56b29tRmFjdG9yKCk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQm9keUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxCb2R5RWxlbWVudCgp
OwogCi0gICAgU3RyaW5nIGFMaW5rKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBTGluayhjb25zdCBT
dHJpbmcmKTsKLSAgICBTdHJpbmcgYmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xv
cihjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgbGluaygpIGNvbnN0OwotICAgIHZvaWQgc2V0
TGluayhjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0VGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgdkxpbmsoKSBjb25zdDsKLSAgICB2
b2lkIHNldFZMaW5rKGNvbnN0IFN0cmluZyYpOwotCiAgICAgLy8gRGVjbGFyZWQgdmlydHVhbCBp
biBFbGVtZW50CiAgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmx1
cik7CiAgICAgREVGSU5FX1dJTkRPV19BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nywz
NyArMTU3LDIwIEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OnNldEFjdGl2YXRlZFN1Ym0KIAog
Ym9vbCBIVE1MQnV0dG9uRWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBmb3Jt
RGF0YSwgYm9vbCkKIHsKLSAgICBpZiAobV90eXBlICE9IFNVQk1JVCB8fCBuYW1lKCkuaXNFbXB0
eSgpIHx8ICFtX2FjdGl2ZVN1Ym1pdCkKKyAgICBpZiAobV90eXBlICE9IFNVQk1JVCB8fCAhbV9h
Y3RpdmVTdWJtaXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3JtRGF0YS5hcHBlbmRE
YXRhKG5hbWUoKSwgdmFsdWUoKSk7CisgICAgU3RyaW5nIG5hbWUgPSBmYXN0R2V0QXR0cmlidXRl
KG5hbWVBdHRyKTsKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3JtRGF0YS5hcHBlbmREYXRhKG5hbWUsIGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6YWNjZXNz
S2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKLXsgICAKK3sKICAgICBmb2N1cygpOwog
ICAgIC8vIHNlbmQgdGhlIG1vdXNlIGJ1dHRvbiBldmVudHMgaWZmIHRoZSBjYWxsZXIgc3BlY2lm
aWVkIHNlbmRUb0FueUVsZW1lbnQKICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHNlbmRU
b0FueUVsZW1lbnQpOwogfQogCi1TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnQ6OmFjY2Vzc0tleSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQot
dm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6c2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5n
IEhUTUxCdXR0b25FbGVtZW50Ojp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh2YWx1ZUF0dHIpOwotfQotCi12b2lkIEhUTUxCdXR0b25FbGVtZW50OjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVl
KTsKLX0KLSAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQu
aAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDYgQEAgY2xhc3MgSFRNTEJ1dHRvbkVsZW1lbnQg
OiBwdWJsaWMgSFRNTEZvcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxCdXR0
b25FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZv
cm1FbGVtZW50Kik7CiAKLSAgICBTdHJpbmcgYWNjZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxC
dXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2
aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjMsMTIgKzEyMywxMiBAQCBSZW5kZXJPYmplY3QqIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVSCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldEhlaWdodChpbnQg
dmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHZh
bHVlKSk7CisgICAgc2V0SW50ZWdyYWxBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwogfQog
CiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRXaWR0aChpbnQgdmFsdWUpCiB7Ci0gICAgc2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICBzZXRJbnRl
Z3JhbEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBD
YW52YXNDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCkBAIC0yMDgsMTAgKzIwOCwxMCBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wg
b2s7Ci0gICAgaW50IHcgPSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgmb2spOworICAg
IGludCB3ID0gZmFzdEdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgaWYg
KCFvaykKICAgICAgICAgdyA9IERlZmF1bHRXaWR0aDsKLSAgICBpbnQgaCA9IGdldEF0dHJpYnV0
ZShoZWlnaHRBdHRyKS50b0ludCgmb2spOworICAgIGludCBoID0gZmFzdEdldEF0dHJpYnV0ZSho
ZWlnaHRBdHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2spCiAgICAgICAgIGggPSBEZWZhdWx0
SGVpZ2h0OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDYxNDY0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDExICsxODEsMTEgQEAgRWxlbWVudCogSFRNTENvbGxlY3Rpb246Oml0ZW1BZnRlcihFbGVtZQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRG9jTGlua3M6IC8vIGFsbCA8YT4gYW5kIDxhcmVhPiBlbGVtZW50cyB3
aXRoIGEgdmFsdWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZiAoKGUtPmhhc0xvY2FsTmFt
ZShhVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYXJlYVRhZykpICYmICghZS0+Z2V0QXR0cmlidXRl
KGhyZWZBdHRyKS5pc051bGwoKSkpCisgICAgICAgICAgICAgICAgaWYgKChlLT5oYXNMb2NhbE5h
bWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKSAmJiBlLT5oYXNBdHRyaWJ1dGUo
aHJlZkF0dHIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRG9jQW5jaG9yczogLy8gYWxsIDxhPiBlbGVtZW50
cyB3aXRoIGEgdmFsdWUgZm9yIG5hbWUKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKGFUYWcpICYmICFlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRhZykgJiYgZS0+aGFzQXR0cmlidXRlKG5h
bWVBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY0FsbDoKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RExpc3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNCArNDAsNCBAQCBQYXNzUmVmUHRyPEhUTUxE
TGlzdEVsZW1lbnQ+IEhUTUxETGlzdEVsCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MRExp
c3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgSFRNTERMaXN0RWxlbWVu
dDo6Y29tcGFjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoY29tcGFjdEF0
dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxETGlzdEVsZW1lbnQ6OnNldENvbXBhY3QoYm9v
bCBiKQotewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0K
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2
IEBAIGNsYXNzIEhUTUxETGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW0KIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRExpc3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2
b2lkIHNldENvbXBhY3QoYm9vbCk7Ci0KIHByaXZhdGU6CiAgICAgSFRNTERMaXN0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxEaXJlY3RvcnlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERp
cmVjdG9yeUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
RGlyZWN0b3J5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACi0vKioK
Ky8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE4LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICoKICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTERp
cmVjdG9yeUVsZW1lbnQuaCIKIApAQCAtMjcsMjAgKzI5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTERpcmVjdG9yeUVsZW1lbnQ6
OkhUTUxEaXJlY3RvcnlFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitpbmxpbmUgSFRNTERp
cmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpclRhZykpOwogfQogCi1ib29s
IEhUTUxEaXJlY3RvcnlFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdl
dEF0dHJpYnV0ZShjb21wYWN0QXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTERpcmVjdG9y
eUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQorUGFzc1JlZlB0cjxIVE1MRGlyZWN0b3J5RWxl
bWVudD4gSFRNTERpcmVjdG9yeUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGNvbXBhY3RB
dHRyLCBiID8gIiIgOiAwKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxEaXJlY3RvcnlF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRGlyZWN0b3J5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGly
ZWN0b3J5RWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGly
ZWN0b3J5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjgsMTMgKzI5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRN
TERpcmVjdG9yeUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxEaXJlY3RvcnlFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKworcHJpdmF0ZToKICAgICBIVE1MRGlyZWN0
b3J5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiA1OyB9Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBh
Y3QoYm9vbCk7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERp
dkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5j
cHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDQgQEAgdm9pZCBIVE1MRGl2RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dAogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKLVN0cmluZyBIVE1MRGl2RWxlbWVudDo6YWxpZ24oKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MRGl2RWxl
bWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
YWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCShyZXZp
c2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw5ICszMiw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RGl2RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TERpdkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAot
ICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
Jik7Ci0KIHByb3RlY3RlZDoKICAgICBIVE1MRGl2RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDYxNDY0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSwxMTQgKzE2NSw4NiBAQCBib29sIEhUTUxEb2N1bWVudDo6aGFzRm9jdXMoKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotU3RyaW5nIEhUTUxEb2N1bWVudDo6YmdDb2xvcigpCitpbmxpbmUgY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmJvZHlDb2xvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIEhUTUxFbGVtZW50KiBiID0gYm9keSgpOwotICAg
IEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYiAmJiBiLT5oYXNUYWdOYW1lKGJvZHlU
YWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGIpIDogMDsKKyAgICBIVE1MRWxl
bWVudCogYm9keSA9IHRoaXMtPmJvZHkoKTsKKyAgICBpZiAoIWJvZHkpCisgICAgICAgIHJldHVy
biBudWxsQXRvbTsKIAotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICByZXR1cm4gYm9keUVsZW1lbnQtPmJnQ29sb3IoKTsKKyAgICAvLyBGSVhNRTog
SXMgdGhpcyBjaGVjayBuZWVkZWQ/CisgICAgaWYgKCFib2R5LT5oYXNUYWdOYW1lKGJvZHlUYWcp
KQorICAgICAgICByZXR1cm4gbnVsbEF0b207CisKKyAgICByZXR1cm4gYm9keS0+ZmFzdEdldEF0
dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnQ6OnNldEJnQ29s
b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2lubGluZSB2b2lkIEhUTUxEb2N1bWVudDo6c2V0Qm9k
eUNvbG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7Ci0gICAgSFRNTEJv
ZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05hbWUoYm9keVRhZykpID8g
c3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOworICAgIEhUTUxFbGVtZW50KiBi
b2R5ID0gdGhpcy0+Ym9keSgpOworICAgIGlmICghYm9keSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGJvZHlFbGVtZW50KQotICAgICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1
ZSk7Ci19CisgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVlZGVkPworICAgIGlmICghYm9k
eS0+aGFzVGFnTmFtZShib2R5VGFnKSkKKyAgICAgICAgcmV0dXJuOwogCi1TdHJpbmcgSFRNTERv
Y3VtZW50OjpmZ0NvbG9yKCkKLXsKLSAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKLSAgICBI
VE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYgYi0+aGFzVGFnTmFtZShib2R5VGFn
KSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihiKSA6IDA7CisgICAgLy8gVGhpcyBj
aGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUK
KyAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUg
dmFsdWUgYW5kIHRoaXMKKyAgICAvLyBpcyBhIHdheSB0byBhdm9pZCBpbmN1cnJpbmcgYSBzdHls
ZSB1cGRhdGUgZWFjaCB0aW1lLgorICAgIGlmIChib2R5LT5mYXN0R2V0QXR0cmlidXRlKGF0dHJp
YnV0ZU5hbWUpID09IHZhbHVlKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWJvZHlFbGVt
ZW50KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGJvZHlFbGVtZW50LT50
ZXh0KCk7CisgICAgYm9keS0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKIH0K
IAotdm9pZCBIVE1MRG9jdW1lbnQ6OnNldEZnQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2Nv
bnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3VtZW50OjpiZ0NvbG9yKCkKIHsKLSAgICBIVE1MRWxl
bWVudCogYiA9IGJvZHkoKTsKLSAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIg
JiYgYi0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQq
PihiKSA6IDA7Ci0KLSAgICBpZiAoYm9keUVsZW1lbnQpCi0gICAgICAgIGJvZHlFbGVtZW50LT5z
ZXRUZXh0KHZhbHVlKTsKKyAgICByZXR1cm4gYm9keUNvbG9yKGJnY29sb3JBdHRyKTsKIH0KIAot
U3RyaW5nIEhUTUxEb2N1bWVudDo6YWxpbmtDb2xvcigpCit2b2lkIEhUTUxEb2N1bWVudDo6c2V0
QmdDb2xvcihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewotICAgIEhUTUxFbGVtZW50KiBi
ID0gYm9keSgpOwotICAgIEhUTUxCb2R5RWxlbWVudCogYm9keUVsZW1lbnQgPSAoYiAmJiBiLT5o
YXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGIpIDog
MDsKLQotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gYm9keUVsZW1lbnQtPmFMaW5rKCk7CisgICAgc2V0Qm9keUNvbG9yKGJnY29sb3JB
dHRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50OjpzZXRBbGlua0NvbG9yKGNvbnN0
IFN0cmluZyYgdmFsdWUpCitjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6ZmdDb2xv
cigpCiB7Ci0gICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7Ci0gICAgSFRNTEJvZHlFbGVtZW50
KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05hbWUoYm9keVRhZykpID8gc3RhdGljX2Nh
c3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOwotCi0gICAgaWYgKGJvZHlFbGVtZW50KSB7Ci0g
ICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3Mg
bGlrZSB0byBzZXQgdGhlCi0gICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBh
bmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UKLSAgICAgICAgLy8gZG9uJ3Qgd2FudCB0
byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRpbWUuCi0gICAgICAgIGlmIChib2R5RWxlbWVu
dC0+YUxpbmsoKSAhPSB2YWx1ZSkKLSAgICAgICAgICAgIGJvZHlFbGVtZW50LT5zZXRBTGluayh2
YWx1ZSk7Ci0gICAgfQorICAgIHJldHVybiBib2R5Q29sb3IodGV4dEF0dHIpOwogfQogCi1TdHJp
bmcgSFRNTERvY3VtZW50OjpsaW5rQ29sb3IoKQordm9pZCBIVE1MRG9jdW1lbnQ6OnNldEZnQ29s
b3IoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBIVE1MRWxlbWVudCogYiA9IGJv
ZHkoKTsKLSAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlFbGVtZW50ID0gKGIgJiYgYi0+aGFzVGFn
TmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnQqPihiKSA6IDA7Ci0K
LSAgICBpZiAoIWJvZHlFbGVtZW50KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0
dXJuIGJvZHlFbGVtZW50LT5saW5rKCk7CisgICAgc2V0Qm9keUNvbG9yKHRleHRBdHRyLCB2YWx1
ZSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50OjpzZXRMaW5rQ29sb3IoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3VtZW50OjphbGlua0NvbG9yKCkKIHsK
LSAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKLSAgICBIVE1MQm9keUVsZW1lbnQqIGJvZHlF
bGVtZW50ID0gKGIgJiYgYi0+aGFzVGFnTmFtZShib2R5VGFnKSkgPyBzdGF0aWNfY2FzdDxIVE1M
Qm9keUVsZW1lbnQqPihiKSA6IDA7CisgICAgcmV0dXJuIGJvZHlDb2xvcihhbGlua0F0dHIpOwor
fQogCi0gICAgaWYgKGJvZHlFbGVtZW50KSB7Ci0gICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgYSBi
aXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCi0gICAgICAgIC8v
IGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBh
bmQgd2UKLSAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNo
IHRpbWUuCi0gICAgICAgIGlmIChib2R5RWxlbWVudC0+bGluaygpICE9IHZhbHVlKQotICAgICAg
ICAgICAgYm9keUVsZW1lbnQtPnNldExpbmsodmFsdWUpOwotICAgIH0KK3ZvaWQgSFRNTERvY3Vt
ZW50OjpzZXRBbGlua0NvbG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgc2V0
Qm9keUNvbG9yKGFsaW5rQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTERvY3VtZW50Ojp2
bGlua0NvbG9yKCkKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3VtZW50OjpsaW5rQ29sb3Io
KQogewotICAgIEhUTUxFbGVtZW50KiBiID0gYm9keSgpOwotICAgIEhUTUxCb2R5RWxlbWVudCog
Ym9keUVsZW1lbnQgPSAoYiAmJiBiLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSA/IHN0YXRpY19jYXN0
PEhUTUxCb2R5RWxlbWVudCo+KGIpIDogMDsKKyAgICByZXR1cm4gYm9keUNvbG9yKGxpbmtBdHRy
KTsKK30KIAotICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gYm9keUVsZW1lbnQtPnZMaW5rKCk7Cit2b2lkIEhUTUxEb2N1bWVudDo6c2V0
TGlua0NvbG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgc2V0Qm9keUNvbG9y
KGxpbmtBdHRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50OjpzZXRWbGlua0NvbG9y
KGNvbnN0IFN0cmluZyYgdmFsdWUpCitjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6
dmxpbmtDb2xvcigpCiB7Ci0gICAgSFRNTEVsZW1lbnQqIGIgPSBib2R5KCk7Ci0gICAgSFRNTEJv
ZHlFbGVtZW50KiBib2R5RWxlbWVudCA9IChiICYmIGItPmhhc1RhZ05hbWUoYm9keVRhZykpID8g
c3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oYikgOiAwOworICAgIHJldHVybiBib2R5Q29s
b3IodmxpbmtBdHRyKTsKK30KIAotICAgIGlmIChib2R5RWxlbWVudCkgewotICAgICAgICAvLyBU
aGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5LCBidXQgc29tZSBiZW5jaG1hcmtzIGxpa2UgdG8gc2V0
IHRoZQotICAgICAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8g
dGhlIHNhbWUgdmFsdWUgYW5kIHdlCi0gICAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBz
dHlsZSB1cGRhdGUgZWFjaCB0aW1lLgotICAgICAgICBpZiAoYm9keUVsZW1lbnQtPnZMaW5rKCkg
IT0gdmFsdWUpCi0gICAgICAgICAgICBib2R5RWxlbWVudC0+c2V0VkxpbmsodmFsdWUpOwotICAg
IH0KK3ZvaWQgSFRNTERvY3VtZW50OjpzZXRWbGlua0NvbG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCit7CisgICAgc2V0Qm9keUNvbG9yKHZsaW5rQXR0ciwgdmFsdWUpOwogfQogCiB2b2lk
IEhUTUxEb2N1bWVudDo6Y2FwdHVyZUV2ZW50cygpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCShyZXZp
c2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsMTYgKzU1LDE2IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBhY3RpdmVFbGVtZW50
KCk7CiAgICAgYm9vbCBoYXNGb2N1cygpOwogCi0gICAgU3RyaW5nIGJnQ29sb3IoKTsKLSAgICB2
b2lkIHNldEJnQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGZnQ29sb3IoKTsKLSAg
ICB2b2lkIHNldEZnQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGFsaW5rQ29sb3Io
KTsKLSAgICB2b2lkIHNldEFsaW5rQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGxp
bmtDb2xvcigpOwotICAgIHZvaWQgc2V0TGlua0NvbG9yKGNvbnN0IFN0cmluZyYpOwotICAgIFN0
cmluZyB2bGlua0NvbG9yKCk7Ci0gICAgdm9pZCBzZXRWbGlua0NvbG9yKGNvbnN0IFN0cmluZyYp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYmdDb2xvcigpOworICAgIHZvaWQgc2V0QmdDb2xv
cihjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZnQ29sb3Io
KTsKKyAgICB2b2lkIHNldEZnQ29sb3IoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlua0NvbG9yKCk7CisgICAgdm9pZCBzZXRBbGlua0NvbG9yKGNvbnN0
IEF0b21pY1N0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGlua0NvbG9yKCk7Cisg
ICAgdm9pZCBzZXRMaW5rQ29sb3IoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2bGlua0NvbG9yKCk7CisgICAgdm9pZCBzZXRWbGlua0NvbG9yKGNvbnN0IEF0
b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBjbGVhcigpOwogCkBAIC04Myw2ICs4Myw5IEBAIHBy
b3RlY3RlZDoKICAgICBIVE1MRG9jdW1lbnQoRnJhbWUqKTsKIAogcHJpdmF0ZToKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGJvZHlDb2xvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lKTsKKyAgICB2b2lkIHNldEJvZHlDb2xvcihjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKwogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZEFsbG93ZWQoTm9kZSopOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNy
ZWF0ZUVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBFeGNlcHRpb25Db2RlJik7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ4LDcgKzc0OCw3IEBAIHNob3J0
IEhUTUxFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAKIHZvaWQgSFRNTEVsZW1lbnQ6OnNldFRh
YkluZGV4KGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyLCBTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOworICAgIHNldEludGVncmFsQXR0cmlidXRlKHRhYmluZGV4QXR0
ciwgdmFsdWUpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRWxlbWVudDo6
Y2hpbGRyZW4oKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSwzNCArMTQ5LDQgQEAgdm9pZCBIVE1MRm9udEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAK
LVN0cmluZyBIVE1MRm9udEVsZW1lbnQ6OmNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGNvbG9yQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZvbnRFbGVtZW50OjpzZXRDb2xv
cihjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjb2xvckF0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxGb250RWxlbWVudDo6ZmFjZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShmYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZvbnRFbGVtZW50
OjpzZXRGYWNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGZhY2VB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MRm9udEVsZW1lbnQ6OnNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2l6ZUF0dHIpOwotfQotCi12b2lkIEhUTUxGb250
RWxlbWVudDo6c2V0U2l6ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShzaXplQXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvbnRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5oCShy
ZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDYgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGb250RWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIAotICAgIFN0
cmluZyBjb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgU3RyaW5nJik7Ci0K
LSAgICBTdHJpbmcgZmFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RmFjZShjb25zdCBTdHJpbmcm
KTsKLQotICAgIFN0cmluZyBzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFN0
cmluZyYpOwotICAgIAogICAgIHN0YXRpYyBib29sIGNzc1ZhbHVlRnJvbUZvbnRTaXplTnVtYmVy
KGNvbnN0IFN0cmluZyYsIGludCYpOwogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDE2ICs3Niw2
IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2wKICAgICAgICAgbV9m
b3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1
dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpzZXRGb3JtTm9WYWxpZGF0ZShib29sIGZvcm1ub3ZhbGlkYXRlKQotewotICAg
IHNldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIsIGZvcm1ub3ZhbGlkYXRlID8gIiIgOiAw
KTsKLX0KLQogVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRpdHko
KQogewogICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQpAQCAtMTk2LDcgKzE4Niw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWUKICAgICByZXR1cm4gbmFtZS5pc051
bGwoKSA/IGVtcHR5QXRvbSA6IG5hbWU7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0
QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMDYsMzYgKzE5NiwxMSBAQCB2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9yCiAgICAgZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0K
IAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGIpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6c2V0UmVhZE9ubHkoYm9vbCBiKQotewotICAgIHNldEF0dHJp
YnV0ZShyZWFkb25seUF0dHIsIGIgPyAiIiA6IDApOwotfQotCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShh
dXRvZm9jdXNBdHRyKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRBdXRv
Zm9jdXMoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShhdXRvZm9jdXNBdHRyLCBiID8gIiIg
OiAwKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcmVxdWlyZWQ7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6c2V0UmVxdWlyZWQoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShyZXF1aXJlZEF0
dHIsIGIgPyAiIiA6IDApOwotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENhbGxi
YWNrKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlLT5pc0VsZW1lbnRO
b2RlKCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lv
biA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDkgKzQzLDYgQEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudCog
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlk
aXR5KCk7CiAKLSAgICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRG
b3JtTm9WYWxpZGF0ZShib29sKTsKLQogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCiAg
ICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CkBAIC01NCwxOSArNTEsMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsK
IAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9Ci0gICAg
dm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldFJlYWRPbmx5KGJvb2wpOwotCi0gICAgLy8gRGV0ZXJt
aW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3Vz
ZWQKKyAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29udHJvbCB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgZm9jdXNlZC4KICAgICB2aXJ0dWFsIGJvb2wgYXV0b2ZvY3VzKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBdXRvZm9jdXMoYm9vbCk7Ci0KLSAgICBib29sIHJlcXVpcmVkKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRSZXF1aXJlZChib29sKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sVHlwZSgpOyB9CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xOYW1lKCk7IH0K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsMTEgKzI3
OCwxMyBAQCBzdGF0aWMgaW5saW5lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHN1CiBib29sIEhU
TUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKIHsKICAg
ICBBU1NFUlQoZXZlbnQpOwotICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkgfHwg
bm9WYWxpZGF0ZSgpKQorCisgICAgLy8gRklYTUU6IFdoYXQgZG9lcyBzdHJpY3QgbW9kZSBoYXZl
IHRvIGRvIHdpdGggdmFsaWRhdGlvbj8gVGhhdCBjaGVjayBzZWVtcyB3cm9uZy4KKyAgICBpZiAo
IWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpIHx8IGhhc0F0dHJpYnV0ZShub3ZhbGlkYXRlQXR0
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCog
c3VibWl0RWxlbWVudCA9IHN1Ym1pdEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQpOwotICAgIGlmIChz
dWJtaXRFbGVtZW50ICYmIHN1Ym1pdEVsZW1lbnQtPmZvcm1Ob1ZhbGlkYXRlKCkpCisgICAgaWYg
KHN1Ym1pdEVsZW1lbnQgJiYgc3VibWl0RWxlbWVudC0+aGFzQXR0cmlidXRlKGZvcm1ub3ZhbGlk
YXRlQXR0cikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PiA+IHVuaGFuZGxlZEludmFsaWRDb250cm9sczsKQEAgLTUzNiw2
NCArNTM4LDE0IEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxGb3JtRWxlbWUKICAg
ICByZXR1cm4gSFRNTEZvcm1Db2xsZWN0aW9uOjpjcmVhdGUodGhpcyk7CiB9CiAKLVN0cmluZyBI
VE1MRm9ybUVsZW1lbnQ6Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwotfQotCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0TmFtZShjb25zdCBTdHJp
bmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwotfQotCi1i
b29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFn
ZXRBdHRyaWJ1dGUobm92YWxpZGF0ZUF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c2V0Tm9WYWxpZGF0ZShib29sIG5vdmFsaWRhdGUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKG5vdmFsaWRhdGVBdHRyLCBub3ZhbGlkYXRlID8gIiIgOiAwKTsKLX0KLQotdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnNldEFjY2VwdENoYXJzZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoYWNjZXB0X2NoYXJzZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShhY3Rpb25BdHRyKTsKLX0KLQotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEFjdGlvbihjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhY3Rpb25BdHRyLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRFbmN0eXBlKGNvbnN0IFN0cmluZyAmdmFs
dWUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0RW5jdHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogewogICAgIHNldEF0dHJpYnV0ZShlbmN0eXBlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcg
SFRNTEZvcm1FbGVtZW50OjptZXRob2QoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUobWV0aG9kQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRNZXRob2QoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWV0aG9kQXR0ciwgdmFsdWUp
OwotfQotCiBTdHJpbmcgSFRNTEZvcm1FbGVtZW50Ojp0YXJnZXQoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50
OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFy
Z2V0QXR0ciwgdmFsdWUpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIp
OwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRC
dXR0b24oKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDIzICs4Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqLCBi
b29sIGZyb21JbXBsaWNpdFN1Ym1pc3Npb25UcmlnZ2VyKTsKICAgICBib29sIGZvcm1Xb3VsZEhh
dmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IFN0cmluZyYgdXJsKTsKIAotICAgIFN0cmluZyBuYW1l
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBu
b1ZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROb1ZhbGlkYXRlKGJvb2wpOwotCiAgICAg
U3RyaW5nIGFjY2VwdENoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5h
Y2NlcHRDaGFyc2V0KCk7IH0KLSAgICB2b2lkIHNldEFjY2VwdENoYXJzZXQoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgYWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY3Rpb24oY29u
c3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgbWV0aG9kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRN
ZXRob2QoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcmKTsKIAogICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGRlZmF1bHRCdXR0b24oKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDE1ICs5MSw4IEBAIHZvaWQgSFRNTEZy
YW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFy
ZSBhbHJlYWR5IGF0dGFjaGVkLCB0aGlzIGhhcyBubyBlZmZlY3QuCiAgICAgICAgIC8vIEZJWE1F
OiBTaW5jZSB0aGlzIGRvZXMgbm90IGNoZWNrIGF0dHItPmlzTnVsbCgpLCBpdCBjYW4KICAgICAg
ICAgLy8gbmV2ZXIgcmVzZXQgbV9ub1Jlc2l6ZSB0byBmYWxzZSBpZiB0aGUgYXR0cmlidXRlIGlz
IHJlbW92ZWQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBzZWVtcyB0byBiZSBubyBjb2RlIHRo
YXQgbG9va3MgYXQgdGhpcwotICAgICAgICAvLyB2YWx1ZSBhbmQgcHJldmVudHMgcmVzaXppbmcu
CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KIAotdm9pZCBIVE1MRnJhbWVFbGVtZW50OjpzZXROb1Jlc2l6ZShi
b29sIG5vUmVzaXplKQotewotICAgIHNldEF0dHJpYnV0ZShub3Jlc2l6ZUF0dHIsIG5vUmVzaXpl
ID8gIiIgOiAwKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzRnJhbWVCb3JkZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQm9yZGVyOyB9CiAKICAg
ICBib29sIG5vUmVzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub1Jlc2l6ZTsgfQotICAgIHZvaWQg
c2V0Tm9SZXNpemUoYm9vbCk7CiAKIHByaXZhdGU6CiAgICAgSFRNTEZyYW1lRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJh
bWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNl
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMjQgKzIxMyw0IEBAIHZvaWQgSFRN
TEZyYW1lU2V0RWxlbWVudDo6cmVjYWxjU3R5bGUoU3QKICAgICBIVE1MRWxlbWVudDo6cmVjYWxj
U3R5bGUoY2gpOwogfQogCi1TdHJpbmcgSFRNTEZyYW1lU2V0RWxlbWVudDo6Y29scygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2xzQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEZy
YW1lU2V0RWxlbWVudDo6c2V0Q29scyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0
dHJpYnV0ZShjb2xzQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEZyYW1lU2V0RWxlbWVu
dDo6cm93cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyb3dzQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6c2V0Um93cyhjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShyb3dzQXR0ciwgdmFsdWUpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJKHJldmlzaW9u
IDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMTIgKzQyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNCb3JkZXJDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyQ29sb3JTZXQ7IH0KIAotICAgIFN0cmluZyBjb2xz
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2xzKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5n
IHJvd3MoKSBjb25zdDsKLSAgICB2b2lkIHNldFJvd3MoY29uc3QgU3RyaW5nJik7Ci0KICAgICBj
b25zdCBMZW5ndGgqIHJvd0xlbmd0aHMoKSBjb25zdCB7IHJldHVybiBtX3Jvd0xlbmd0aHMuZ2V0
KCk7IH0KICAgICBjb25zdCBMZW5ndGgqIGNvbExlbmd0aHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bExlbmd0aHMuZ2V0KCk7IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmNwcAkocmV2aXNpb24g
NjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw0NCArMTA2LDQgQEAgdm9pZCBIVE1MSFJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CiAKLVN0cmluZyBIVE1MSFJFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxIUkVsZW1lbnQ6OnNldEFsaWdu
KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFs
dWUpOwotfQotCi1ib29sIEhUTUxIUkVsZW1lbnQ6Om5vU2hhZGUoKSBjb25zdAotewotICAgIHJl
dHVybiAhZ2V0QXR0cmlidXRlKG5vc2hhZGVBdHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1M
SFJFbGVtZW50OjpzZXROb1NoYWRlKGJvb2wgbm9TaGFkZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
bm9zaGFkZUF0dHIsIG5vU2hhZGUgPyAiIiA6IDApOwotfQotCi1TdHJpbmcgSFRNTEhSRWxlbWVu
dDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEhSRWxlbWVudDo6c2V0U2l6ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEhSRWxl
bWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lkdGhBdHRy
KTsKLX0KLQotdm9pZCBIVE1MSFJFbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEhSRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSFJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSw2IEBAIGNsYXNzIEhUTUxIUkVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MSFJFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MSFJFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
Ci0gICAgCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25z
dCBTdHJpbmcmKTsKLQotICAgIGJvb2wgbm9TaGFkZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Tm9T
aGFkZShib29sKTsKLQotICAgIFN0cmluZyBzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBIVE1MSFJFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxI
ZWFkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE2ICs0Nyw2IEBAIFBhc3NSZWZQdHI8SFRNTEhlYWRF
bGVtZW50PiBIVE1MSGVhZEVsZW0KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxIZWFkRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1TdHJpbmcgSFRNTEhlYWRFbGVtZW50Ojpw
cm9maWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHByb2ZpbGVBdHRyKTsK
LX0KLQotdm9pZCBIVE1MSGVhZEVsZW1lbnQ6OnNldFByb2ZpbGUoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocHJvZmlsZUF0dHIsIHZhbHVlKTsKLX0KLQogYm9vbCBI
VE1MSGVhZEVsZW1lbnQ6OmNoaWxkQWxsb3dlZChOb2RlKiBuZXdDaGlsZCkKIHsKICAgICAvLyBE
byBub3QgYWxsb3cgbm9uLXdoaXRlc3BhY2UgdGV4dCBub2RlcyBpbiB0aGUgaGVhZApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSGVhZEVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEhlYWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDYgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxIZWFkRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEhlYWRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBTdHJpbmcgcHJvZmlsZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0UHJvZmlsZShjb25zdCBTdHJpbmcmKTsKLQogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksNCBA
QCBib29sIEhUTUxIZWFkaW5nRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgCiAgICAgcmV0dXJuIGlu
RWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7CiB9CiAKLVN0cmluZyBIVE1MSGVhZGluZ0VsZW1lbnQ6
OmFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEhlYWRpbmdFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQogfQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxIZWFkaW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSGVhZGluZ0VsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEhlYWRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAg
Y2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50IDogcHVibGljIEhUTUxFbAogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxIZWFkaW5nRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MSGVhZGluZ0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
SHRtbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSHRt
bEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsNiBAQCBQYXNzUmVmUHRy
PEhUTUxIdG1sRWxlbWVudD4gSFRNTEh0bWxFbGVtCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
VE1MSHRtbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotU3RyaW5nIEhUTUxIdG1s
RWxlbWVudDo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2ZXJz
aW9uQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEh0bWxFbGVtZW50OjpzZXRWZXJzaW9uKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZlcnNpb25BdHRyLCB2YWx1ZSk7Ci19
Ci0KIGJvb2wgSFRNTEh0bWxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkK
IHsKICAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoaGVhZFRhZykgfHwgbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUoYm9keVRhZykgfHwKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHJldmlz
aW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMyw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
SHRtbEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxIdG1sRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldFZlcnNpb24oY29uc3Qg
U3RyaW5nJik7Ci0KIHByaXZhdGU6CiAgICAgSFRNTEh0bWxFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1OSw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0
aChib29sIGlnbm9yZVAKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gY2hlY2sg
dGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKICAgICAgICAg
Ym9vbCBvazsKLSAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9J
bnQoJm9rKTsKKyAgICAgICAgaW50IHdpZHRoID0gZmFzdEdldEF0dHJpYnV0ZSh3aWR0aEF0dHIp
LnRvSW50KCZvayk7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiB3aWR0aDsK
IApAQCAtMjgzLDcgKzI4Myw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQoYm9vbCBp
Z25vcmUKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJp
YnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKICAgICAgICAgYm9vbCBvazsK
LSAgICAgICAgaW50IGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgmb2sp
OworICAgICAgICBpbnQgaGVpZ2h0ID0gZmFzdEdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0lu
dCgmb2spOwogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0OwogCkBA
IC0zMzQsNzkgKzMzNCwxNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbWFnZUVsZW1lbnQ6
OmFsCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8g
SW1hZ2UgZWxlbWVudHMgYXJlIGRyYWdnYWJsZSBieSBkZWZhdWx0LgotICAgIHJldHVybiAhZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGRyYWdnYWJsZUF0dHIpLCAiZmFsc2UiKTsKKyAg
ICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKGZhc3RHZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0
ciksICJmYWxzZSIpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhlaWdodChpbnQg
dmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIFN0cmluZzo6bnVtYmVyKHZh
bHVlKSk7Ci19Ci0KLWludCBIVE1MSW1hZ2VFbGVtZW50Ojpoc3BhY2UoKSBjb25zdAotewotICAg
IC8vICMjIyByZXR1cm4gYWN0dWFsIHZhbHVlCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoc3Bh
Y2VBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhzcGFjZShp
bnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVy
KHZhbHVlKSk7Ci19Ci0KLWJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNNYXAoKSBjb25zdAotewot
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGlzbWFwQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQg
SFRNTEltYWdlRWxlbWVudDo6c2V0SXNNYXAoYm9vbCBpc01hcCkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoaXNtYXBBdHRyLCBpc01hcCA/ICIiIDogMCk7Ci19Ci0KLUtVUkwgSFRNTEltYWdlRWxlbWVu
dDo6bG9uZ0Rlc2MoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChnZXRBdHRyaWJ1dGUobG9uZ2Rlc2NBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTEltYWdlRWxlbWVu
dDo6c2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
bG9uZ2Rlc2NBdHRyLCB2YWx1ZSk7Ci19Ci0KLUtVUkwgSFRNTEltYWdlRWxlbWVudDo6bG93c3Jj
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKGxvd3NyY0F0dHIpKTsKLX0KLQotdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZXRMb3dzcmMo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobG93c3JjQXR0ciwgdmFs
dWUpOwotfQotCi1LVVJMIEhUTUxJbWFnZUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0K
LXZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxJbWFnZUVsZW1l
bnQ6OnZzcGFjZSgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJldHVybiBhY3R1YWwgdnNwYWNlCi0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2c3BhY2VBdHRyKS50b0ludCgpOwotfQotCi12b2lkIEhU
TUxJbWFnZUVsZW1lbnQ6OnNldFZzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KHZzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgc2V0SW50ZWdyYWxBdHRy
aWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNl
dFdpZHRoKGludCB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCBTdHJpbmc6
Om51bWJlcih2YWx1ZSkpOworICAgIHNldEludGVncmFsQXR0cmlidXRlKHdpZHRoQXR0ciwgdmFs
dWUpOwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudDo6eCgpIGNvbnN0CkBAIC00NDAsOSArMzc4
LDEzIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHQKIHsKICAgICBI
VE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRk
U3VicmVzb3VyY2VVUkwodXJscywgc3JjKCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMs
IGdldFVSTEF0dHJpYnV0ZShzcmNBdHRyKSk7CisKICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB3
aGVuIHRoZSB1c2VtYXAgYXR0cmlidXRlIGJlZ2lucyB3aXRoICIjIj8KLSAgICBhZGRTdWJyZXNv
dXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUodXNlbWFw
QXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBnZXRVUkxBdHRyaWJ1dGUodXNl
bWFwQXR0cikpOworCisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgbG93c3JjPworICAgIC8vIEZJ
WE1FOiBXaGF0IGFib3V0IGxvbmdkZXNjPwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6Ondp
bGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAko
cmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSwyNSArNjEsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SGVpZ2h0KGludCk7Ci0KLSAgICBpbnQg
aHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoaW50KTsKLQotICAgIGJvb2wgaXNN
YXAoKSBjb25zdDsKLSAgICB2b2lkIHNldElzTWFwKGJvb2wpOwotCi0gICAgS1VSTCBsb25nRGVz
YygpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBL
VVJMIGxvd3NyYygpIGNvbnN0OwotICAgIHZvaWQgc2V0TG93c3JjKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgS1VSTCBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
LQotICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShpbnQpOwotCiAg
ICAgdm9pZCBzZXRXaWR0aChpbnQpOwogCiAgICAgaW50IHgoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg1LDExICsyMzg1LDExIEBA
IFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBIVE1MSW5wdXRFbGUKIHsKICAgICBSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBmb3JtID0gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CiAgICAgZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICBmb3JtLT5zZXRN
ZXRob2QoIkdFVCIpOworICAgIGZvcm0tPnNldEF0dHJpYnV0ZShtZXRob2RBdHRyLCAiR0VUIik7
CiAgICAgaWYgKCFkb2N1bWVudCgpLT5iYXNlVVJMKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IFdlIHRyZWF0IHRoZSBocmVmIHByb3BlcnR5IG9mIHRoZSA8YmFzZT4gZWxlbWVudCBhcyB0aGUg
Zm9ybSBhY3Rpb24sIGFzIHBlciBzZWN0aW9uIDcuNSAKICAgICAgICAgLy8gIlF1ZXJpZXMgYW5k
IEluZGV4ZXMiIG9mIHRoZSBIVE1MIDIuMCBzcGVjLiA8aHR0cDovL3d3dy53My5vcmcvTWFya1Vw
L2h0bWwtc3BlYy9odG1sLXNwZWNfNy5odG1sI1NFQzcuNT4uCi0gICAgICAgIGZvcm0tPnNldEFj
dGlvbihkb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCkpOworICAgICAgICBmb3JtLT5zZXRB
dHRyaWJ1dGUoYWN0aW9uQXR0ciwgZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnN0cmluZygpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGZvcm0ucmVsZWFzZSgpOwogfQpAQCAtMjQwOSw2MSArMjQwOSwxNiBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZShjCiAgICAgc2V0QXR0cmli
dXRlKHZhbHVlQXR0ciwgdmFsdWUpOwogfQogCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1
bHRDaGVja2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShjaGVja2VkQXR0
cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdENoZWNr
ZWQoYm9vbCBkZWZhdWx0Q2hlY2tlZCkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hlY2tlZEF0dHIs
IGRlZmF1bHRDaGVja2VkID8gIiIgOiAwKTsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgbV9kYXRhLnNl
dE5hbWUobmFtZSk7CiB9CiAKLVN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHQoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWNjZXB0QXR0cik7Ci19Ci0KLXZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0QWNjZXB0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGFjY2VwdEF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJbnB1dEVsZW1l
bnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3Nr
ZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGln
bkF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKIH0KIAotdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRBbHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoYWx0QXR0ciwgdmFsdWUpOwotfQotCiBpbnQgSFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3Ro
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLm1heExlbmd0aCgpOwpAQCAtMjQ3MSw0NSAr
MjQyNiwyMSBAQCBpbnQgSFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3RoKCkgY29uc3QKIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRNYXhMZW5ndGgoaW50IG1heExlbmd0aCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKG1heExlbmd0aCA8IDApCisgICAgaWYgKG1heExlbmd0aCA8
IDApIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICBlbHNlCi0gICAgICAgIHNl
dEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyLCBTdHJpbmc6Om51bWJlcihtYXhMZW5ndGgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShtYXhsZW5ndGhB
dHRyLCBtYXhMZW5ndGgpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6Om11bHRpcGxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIpLmlzTnVsbCgp
OworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKIH0KIAotdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRNdWx0aXBsZShib29sIG11bHRpcGxlKQotewotICAgIHNldEF0dHJp
YnV0ZShtdWx0aXBsZUF0dHIsIG11bHRpcGxlID8gIiIgOiAwKTsKLX0KLSAgICAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0U2l6ZSh1bnNpZ25lZCBzaXplKQogewotICAgIHNldEF0dHJpYnV0
ZShzaXplQXR0ciwgU3RyaW5nOjpudW1iZXIoc2l6ZSkpOwotfQotCi1LVVJMIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
U3JjKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZh
bHVlKTsKLX0KLQotU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnVzZU1hcCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsKLX0KLQotdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRVc2VNYXAoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUodXNlbWFwQXR0ciwgdmFsdWUpOworICAgIHNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUo
c2l6ZUF0dHIsIHNpemUpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxs
ZWQoYm9vbCBiKQpAQCAtMjU2MSw3ICsyNDkyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1
bnJlZ2lzdGVyRm9yQWN0aQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3Jt
Q29udHJvbCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZXF1aXJlZCgpKQorICAgIGlmICghaGFzQXR0
cmlidXRlKHJlcXVpcmVkQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRj
aCAoaW5wdXRUeXBlKCkpIHsKQEAgLTI2NDksNyArMjU4MCw3IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6YWRkU3VicmVzb3VyY2VBdHQKIHsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJy
ZXNvdXJjZVVSTCh1cmxzLCBzcmMoKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZ2V0
VVJMQXR0cmlidXRlKHNyY0F0dHIpKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpyZWNh
bGNXaWxsVmFsaWRhdGUoKSBjb25zdApAQCAtMjcxNyw2ICsyNjQ4LDcgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZVRvRGF0ZUNvbXBvbgogfQogCiAjaWYgRU5BQkxFKERBVEFMSVNUKQor
CiBIVE1MRWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6bGlzdCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGRhdGFMaXN0KCk7CkBAIC0yNzgxLDYgKzI3MTMsNyBAQCBIVE1MT3B0aW9uRWxlbWVudCog
SFRNTElucHV0RWxlbWVudDo6c2VsCiAgICAgfQogICAgIHJldHVybiAwOwogfQorCiAjZW5kaWYg
Ly8gRU5BQkxFKERBVEFMSVNUKQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21S
ZW5kZXJlcihpbnQgbikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNjE0
NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsMzYgKzE1OCwxNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNv
bnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIAotICAg
IGJvb2wgZGVmYXVsdENoZWNrZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldERlZmF1bHRDaGVja2Vk
KGJvb2wpOwotCiAgICAgdm9pZCBzZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsK
IAotICAgIFN0cmluZyBhY2NlcHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2VwdChjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFj
Y2Vzc0tleShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAg
IHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KICAgICBTdHJpbmcgYWx0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIHNldFNpemUodW5z
aWduZWQpOwogCi0gICAgS1VSTCBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBT
dHJpbmcmKTsKLQogICAgIGludCBtYXhMZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIHNldE1heExl
bmd0aChpbnQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldE11bHRpcGxlKGJvb2wpOwotCi0gICAgU3RyaW5nIHVzZU1hcCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0VXNlTWFwKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29s
IGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2ZpbGxlZDsgfQogICAgIHZvaWQg
c2V0QXV0b2ZpbGxlZChib29sIHZhbHVlID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TElzSW5kZXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElzSW5k
ZXhFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElzSW5k
ZXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTQgKzYxLDQgQEAgdm9pZCBIVE1M
SXNJbmRleEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotU3RyaW5nIEhUTUxJc0lu
ZGV4RWxlbWVudDo6cHJvbXB0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHBy
b21wdEF0dHIpOwotfQotCi12b2lkIEhUTUxJc0luZGV4RWxlbWVudDo6c2V0UHJvbXB0KGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHByb21wdEF0dHIsIHZhbHVlKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElzSW5kZXhFbGVtZW50LmgJKHJl
dmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxJc0luZGV4RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw5ICszMyw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MSXNJbmRleEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCop
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4gY3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCi0gICAgU3Ry
aW5nIHByb21wdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJvbXB0KGNvbnN0IFN0cmluZyYpOwot
CiBwcml2YXRlOgogICAgIEhUTUxJc0luZGV4RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxM
SUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNw
cAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNiwyNCArMTE2LDQgQEAgdm9pZCBIVE1MTElFbGVtZW50OjphdHRh
Y2goKQogICAgIH0KIH0KIAotU3RyaW5nIEhUTUxMSUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxMSUVsZW1l
bnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIHZhbHVlKTsKLX0KLQotaW50IEhUTUxMSUVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVlQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBI
VE1MTElFbGVtZW50OjpzZXRWYWx1ZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZh
bHVlQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxMSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExJRWxl
bWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICszMiw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MTElFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MTElFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25z
dCBTdHJpbmcmKTsKLQotICAgIGludCB2YWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWUo
aW50KTsKLQogcHJpdmF0ZToKICAgICBIVE1MTElFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU0LDI2ICsxNTQsNiBAQCB2b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OmFjY2Vzc0tl
eUFjdGlvbihiCiAgICAgICAgIEhUTUxFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oc2VuZFRvQW55
RWxlbWVudCk7CiB9CiAKLVN0cmluZyBIVE1MTGFiZWxFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25z
dAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7Ci19Ci0KLXZvaWQg
SFRNTExhYmVsRWxlbWVudDo6c2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxM
YWJlbEVsZW1lbnQ6Omh0bWxGb3IoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
Zm9yQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExhYmVsRWxlbWVudDo6c2V0SHRtbEZvcihjb25zdCBT
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShmb3JBdHRyLCB2YWx1ZSk7Ci19Ci0K
IHZvaWQgSFRNTExhYmVsRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyaWJ1dGUpCiB7CiAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IGZvckF0dHIpIHsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTExhYmVsRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsNiBAQCBw
dWJsaWM6CiAKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sKCk7CiAKLSAgICBT
dHJpbmcgYWNjZXNzS2V5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgU3Ry
aW5nJik7Ci0gICAgCi0gICAgU3RyaW5nIGh0bWxGb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldEh0
bWxGb3IoY29uc3QgU3RyaW5nJik7Ci0KIHByaXZhdGU6CiAgICAgSFRNTExhYmVsRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExlZ2Vu
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5k
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDI2ICs1NCw2IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTExlZ2VuZEVsZW1lbnQ6OmYKICAgICByZXR1cm4gbGVnZW5kOwogfQogCi1T
dHJpbmcgSFRNTExlZ2VuZEVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGVnZW5kRWxlbWVu
dDo6c2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMZWdlbmRFbGVtZW50Ojph
bGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQot
Ci12b2lkIEhUTUxMZWdlbmRFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQogSFRNTEZvcm1Db250
cm9sRWxlbWVudCogSFRNTExlZ2VuZEVsZW1lbnQ6OmFzc29jaWF0ZWRDb250cm9sKCkKIHsKICAg
ICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMgbGVnZW5k
LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICsz
Miw2IEBAIGNsYXNzIEhUTUxMZWdlbmRFbGVtZW50IDogcHVibGljIEhUTUxGb3IKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCi0gICAgU3RyaW5n
IGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYp
OwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBT
dHJpbmcmKTsKLSAgICAKIHByaXZhdGU6CiAgICAgSFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
TGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsOTQgKzM2Miw5IEBAIGJvb2wg
SFRNTExpbmtFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHQKICAgICByZXR1cm4gYXR0ci0+bmFt
ZSgpID09IGhyZWZBdHRyOwogfQogCi1ib29sIEhUTUxMaW5rRWxlbWVudDo6ZGlzYWJsZWQoKSBj
b25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGRpc2FibGVkQXR0cikuaXNOdWxsKCk7
Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQot
ewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKLX0K
LQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50Ojpz
ZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNoYXJz
ZXRBdHRyLCB2YWx1ZSk7Ci19Ci0KLUtVUkwgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZB
dHRyKSk7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MTGlua0VsZW1lbnQ6OmhyZWZsYW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKGhyZWZsYW5nQXR0cik7Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVm
bGFuZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShocmVmbGFuZ0F0
dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6bWVkaWEoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlu
a0VsZW1lbnQ6OnNldE1lZGlhKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKG1lZGlhQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50OjpyZWwo
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmVsQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTExpbmtFbGVtZW50OjpzZXRSZWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUocmVsQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojpy
ZXYoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmV2QXR0cik7Ci19Ci0KLXZv
aWQgSFRNTExpbmtFbGVtZW50OjpzZXRSZXYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUocmV2QXR0ciwgdmFsdWUpOwotfQotCiBTdHJpbmcgSFRNTExpbmtFbGVtZW50
Ojp0YXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7
Ci19Ci0KLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcg
SFRNTExpbmtFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKIH0KIAogdm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJs
cykgY29uc3QKQEAgLTQ2NCw3ICszNzksNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6YWRkU3Vi
cmVzb3VyY2VBdHRyCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBBcHBlbmQgdGhlIFVS
TCBvZiB0aGlzIGxpbmsgZWxlbWVudC4KLSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBocmVm
KCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGdldFVSTEF0dHJpYnV0ZShocmVmQXR0
cikpOwogICAgIAogICAgIC8vIFdhbGsgdGhlIFVSTHMgbGlua2VkIGJ5IHRoZSBsaW5rZWQtdG8g
c3R5bGVzaGVldC4KICAgICBpZiAoU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8
SFRNTExpbmtFbGVtZW50Kj4odGhpcyktPnNoZWV0KCkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVu
dC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsMzIgKzQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxMaW5rRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5IVE1MTGlua0VsZW1l
bnQoKTsKIAotICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldERpc2FibGVk
KGJvb2wpOwotCi0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJz
ZXQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBLVVJMIGhyZWYoKSBjb25zdDsKLSAgICB2b2lkIHNl
dEhyZWYoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgaHJlZmxhbmcoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEhyZWZsYW5nKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIG1lZGlhKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRNZWRpYShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBy
ZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyByZXYoKSBjb25zdDsKLSAgICB2b2lkIHNldFJldihjb25zdCBTdHJpbmcmKTsKLQogICAgIHZp
cnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nJik7CiAKICAgICBTdHlsZVNoZWV0KiBzaGVldCgpIGNvbnN0OwogCkBAIC04MSwx
MSArNTYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzYWJsZWRTdGF0ZSA9PSBEaXNhYmxlZDsgfQogICAgIGJvb2wgaXNFbmFibGVkVmlhU2Ny
aXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IEVuYWJsZWRWaWFTY3JpcHQ7
IH0KICAgICBib29sIGlzSWNvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVsQXR0cmlidXRlLm1faXNJ
Y29uOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgYm9v
bCBjYW5MYXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHN0YXRpYyB2b2lkIHRv
a2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIFJlbEF0dHJpYnV0
ZSYpOwogCiBwcml2YXRlOgorICAgIEhUTUxMaW5rRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3Ji
aWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KIApAQCAtMTA3LDE2ICs4MywxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi1wdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgUmVsQXR0
cmlidXRlJik7Ci0KLXByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi1wcml2YXRlOgotICAgIEhUTUxMaW5rRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgYm9vbCBjYW5M
YXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGVudW0gRGlzYWJsZWRTdGF0ZSB7
CiAgICAgICAgIFVuc2V0LApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2
MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNywxNiArMTM3LDYgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTE1hcEVs
ZW1lbgogICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIE1hcEFyZWFzKTsK
IH0KIAotU3RyaW5nIEhUTUxNYXBFbGVtZW50OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLX0KLQotdm9pZCBIVE1MTWFwRWxlbWVudDo6c2V0TmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFs
dWUpOwotfQotCiB2b2lkIEhUTUxNYXBFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7
CiAgICAgZG9jdW1lbnQoKS0+YWRkSW1hZ2VNYXAodGhpcyk7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE1hcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsNiBAQCBwdWJsaWM6CiAgICAgSFRNTEltYWdlRWxl
bWVudCogaW1hZ2VFbGVtZW50KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gYXJlYXMoKTsKIAotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1l
KGNvbnN0IFN0cmluZyYpOwotCiBwcml2YXRlOgogICAgIEhUTUxNYXBFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBhdHRyaWJ1
dGUgbXVzdCBiZSBpZ25vcmVkIGlmIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgaXMgcHJlc2VudAot
ICAgICAgICBpZiAoIWF1dG9wbGF5KCkgJiYgbV9wbGF5ZXIpCisgICAgICAgIGlmICghaGFzQXR0
cmlidXRlKGF1dG9wbGF5QXR0cikgJiYgbV9wbGF5ZXIpCiAgICAgICAgICAgICBtX3BsYXllci0+
c2V0UHJlbG9hZChtX3ByZWxvYWQpOwogCiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmFi
b3J0QXR0cikKQEAgLTI5Niw3ICsyOTYsNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZVJlCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KCkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAo
IXNyYygpLmlzRW1wdHkoKSAmJiBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQorICAg
IGlmIChoYXNBdHRyaWJ1dGUoc3JjQXR0cikgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19F
TVBUWSkKICAgICAgICAgc2NoZWR1bGVMb2FkKCk7CiB9CiAKQEAgLTQyMiwxNiArNDIyLDYgQEAg
UGFzc1JlZlB0cjxNZWRpYUVycm9yPiBIVE1MTWVkaWFFbGVtZW50OgogICAgIHJldHVybiBtX2Vy
cm9yOwogfQogCi1LVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0K
LXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAg
IHNldEF0dHJpYnV0ZShzcmNBdHRyLCB1cmwpOwotfQotCiBTdHJpbmcgSFRNTE1lZGlhRWxlbWVu
dDo6Y3VycmVudFNyYygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY3VycmVudFNyYzsKQEAgLTYz
Niw3ICs2MjYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zCiAg
ICAgaWYgKG1fc2VuZFByb2dyZXNzRXZlbnRzKSAKICAgICAgICAgc3RhcnRQcm9ncmVzc0V2ZW50
VGltZXIoKTsKIAotICAgIGlmICghYXV0b3BsYXkoKSkKKyAgICBpZiAoIWhhc0F0dHJpYnV0ZShh
dXRvcGxheUF0dHIpKQogICAgICAgICBtX3BsYXllci0+c2V0UHJlbG9hZChtX3ByZWxvYWQpOwog
ICAgIG1fcGxheWVyLT5zZXRQcmVzZXJ2ZXNQaXRjaChtX3dlYmtpdFByZXNlcnZlc1BpdGNoKTsK
ICAgICB1cGRhdGVWb2x1bWUoKTsKQEAgLTkzOSw3ICs5MjksNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAgICAgIGlmIChpc1BvdGVudGlhbGx5UGxheWlu
ZyAmJiBvbGRTdGF0ZSA8PSBIQVZFX0NVUlJFTlRfREFUQSkKICAgICAgICAgICAgIHNjaGVkdWxl
RXZlbnQoZXZlbnROYW1lcygpLnBsYXlpbmdFdmVudCk7CiAKLSAgICAgICAgaWYgKG1fYXV0b3Bs
YXlpbmcgJiYgbV9wYXVzZWQgJiYgYXV0b3BsYXkoKSkgeworICAgICAgICBpZiAobV9hdXRvcGxh
eWluZyAmJiBtX3BhdXNlZCAmJiBoYXNBdHRyaWJ1dGUoYXV0b3BsYXlBdHRyKSkgewogICAgICAg
ICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnRO
YW1lcygpLnBsYXlFdmVudCk7CiAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5wbGF5aW5nRXZlbnQpOwpAQCAtMTE2NSwxNiArMTE1NSw2IEBAIGJvb2wgSFRNTE1lZGlhRWxl
bWVudDo6ZW5kZWQoKSBjb25zdAogICAgIHJldHVybiBlbmRlZFBsYXliYWNrKCkgJiYgbV9wbGF5
YmFja1JhdGUgPiAwOwogfQogCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmF1dG9wbGF5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9wbGF5QXR0cik7Ci19Ci0KLXZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0QXV0b3BsYXkoYm9vbCBiKQotewotICAgIHNldEJvb2xlYW5B
dHRyaWJ1dGUoYXV0b3BsYXlBdHRyLCBiKTsKLX0KLQogU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OnByZWxvYWQoKSBjb25zdAogewogICAgIHN3aXRjaCAobV9wcmVsb2FkKSB7CkBAIC0xMjcwLDE2
ICsxMjUwLDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKCkKICAgICB1
cGRhdGVQbGF5U3RhdGUoKTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpsb29wKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGxvb3BBdHRyKTsKLX0KLQotdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZXRMb29wKGJvb2wgYikKLXsKLSAgICBzZXRCb29sZWFuQXR0cmlidXRl
KGxvb3BBdHRyLCBiKTsKLX0KLQogYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpjb250cm9scygpIGNv
bnN0CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTE1MjAs
NyArMTQ5MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2gKICAg
ICBmbG9hdCBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGZsb2F0IGR1ciA9IGR1cmF0aW9uKCk7
CiAgICAgaWYgKCFpc25hbihkdXIpICYmIGR1ciAmJiBub3cgPj0gZHVyKSB7Ci0gICAgICAgIGlm
IChsb29wKCkpIHsKKyAgICAgICAgaWYgKGhhc0F0dHJpYnV0ZShsb29wQXR0cikpIHsKICAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbjsKICAgICAgICAgICAgIG1fc2Vu
dEVuZEV2ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBzZWVrKDAsIGlnbm9yZWRFeGNlcHRpb24p
OwpAQCAtMTY4Nyw3ICsxNjU3LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbmRlZFBsYXli
YWNrKCkgYwogICAgIC8vIG9mIHBsYXliYWNrIGlzIGZvcndhcmRzIGFuZCB0aGUgbWVkaWEgZWxl
bWVudCBkb2VzIG5vdCBoYXZlIGEgbG9vcCBhdHRyaWJ1dGUgc3BlY2lmaWVkLAogICAgIGZsb2F0
IG5vdyA9IGN1cnJlbnRUaW1lKCk7CiAgICAgaWYgKG1fcGxheWJhY2tSYXRlID4gMCkKLSAgICAg
ICAgcmV0dXJuIG5vdyA+PSBkdXIgJiYgIWxvb3AoKTsKKyAgICAgICAgcmV0dXJuIG5vdyA+PSBk
dXIgJiYgIWhhc0F0dHJpYnV0ZShsb29wQXR0cik7CiAgICAgCiAgICAgLy8gb3IgdGhlIGN1cnJl
bnQgcGxheWJhY2sgcG9zaXRpb24gaXMgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHBvc2l0aW9uIGFu
ZCB0aGUgZGlyZWN0aW9uIAogICAgIC8vIG9mIHBsYXliYWNrIGlzIGJhY2t3YXJkcwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDggKzg0LDYgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8TWVkaWFFcnJvcj4gZXJyb3IoKSBjb25zdDsKIAogLy8gbmV0d29y
ayBzdGF0ZQotICAgIEtVUkwgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3Ry
aW5nJik7CiAgICAgU3RyaW5nIGN1cnJlbnRTcmMoKSBjb25zdDsKIAogICAgIGVudW0gTmV0d29y
a1N0YXRlIHsgTkVUV09SS19FTVBUWSwgTkVUV09SS19JRExFLCBORVRXT1JLX0xPQURJTkcsIE5F
VFdPUktfTE9BREVELCBORVRXT1JLX05PX1NPVVJDRSB9OwpAQCAtMTE4LDEwICsxMTYsNiBAQCBw
dWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBwbGF5ZWQoKTsKICAgICBQYXNzUmVm
UHRyPFRpbWVSYW5nZXM+IHNlZWthYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBlbmRlZCgpIGNvbnN0
OwotICAgIGJvb2wgYXV0b3BsYXkoKSBjb25zdDsgICAgCi0gICAgdm9pZCBzZXRBdXRvcGxheShi
b29sIGIpOwotICAgIGJvb2wgbG9vcCgpIGNvbnN0OyAgICAKLSAgICB2b2lkIHNldExvb3AoYm9v
bCBiKTsKICAgICB2b2lkIHBsYXkoYm9vbCBpc1VzZXJHZXN0dXJlKTsKICAgICB2b2lkIHBhdXNl
KGJvb2wgaXNVc2VyR2VzdHVyZSk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxNCArNDAsNCBAQCBQYXNzUmVmUHRyPEhUTUxNZW51RWxlbWVudD4g
SFRNTE1lbnVFbGVtCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MTWVudUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBIVE1MTWVudUVsZW1lbnQ6OmNvbXBhY3QoKSBj
b25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsK
LX0KLQotdm9pZCBIVE1MTWVudUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQotewotICAgIHNl
dEF0dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE1lbnVFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZW51
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBAIGNsYXNzIEhUTUxNZW51
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWUKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MTWVudUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKICAgICAKLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3Qo
Ym9vbCk7Ci0KIHByaXZhdGU6CiAgICAgSFRNTE1lbnVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogICAgIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3Mo
KQogICAgIGlmICghaW5Eb2N1bWVudCgpIHx8IG1fY29udGVudC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUoKSwgInZpZXdwb3J0Iikp
CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCAi
dmlld3BvcnQiKSkKICAgICAgICAgZG9jdW1lbnQoKS0+cHJvY2Vzc1ZpZXdwb3J0KG1fY29udGVu
dCk7CiAKICAgICAvLyBHZXQgdGhlIGRvY3VtZW50IHRvIHByb2Nlc3MgdGhlIHRhZywgYnV0IG9u
bHkgaWYgd2UncmUgYWN0dWFsbHkgcGFydCBvZiBET00gdHJlZSAoY2hhbmdpbmcgYSBtZXRhIHRh
ZyB3aGlsZQpAQCAtNzYsNDQgKzc2LDQgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3Mo
KQogICAgICAgICBkb2N1bWVudCgpLT5wcm9jZXNzSHR0cEVxdWl2KG1fZXF1aXYsIG1fY29udGVu
dCk7CiB9CiAKLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6OmNvbnRlbnQoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoY29udGVudEF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRhRWxl
bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShjb250ZW50QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpodHRw
RXF1aXYoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaHR0cF9lcXVpdkF0dHIp
OwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0SHR0cEVxdWl2KGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUobmFtZUF0dHIpOwotfQotCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0TmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpzY2hlbWUoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoc2NoZW1lQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE1ldGFFbGVtZW50
OjpzZXRTY2hlbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2No
ZW1lQXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5oCShyZXZp
c2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTggKzMxLDYgQEAgY2xhc3MgSFRNTE1ldGFFbGVtZW50IDogcHVibGljIEhU
TUxFbGVtZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxNZXRhRWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGNv
bnRlbnQoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBTdHJpbmcgaHR0cEVxdWl2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIdHRwRXF1aXYoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBzY2hlbWUoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFNjaGVtZShjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MTWV0YUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTW9kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNb2RFbGVt
ZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1vZEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksNCBAQCBQYXNzUmVmUHRyPEhUTUxNb2RF
bGVtZW50PiBIVE1MTW9kRWxlbWVuCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MTW9kRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1TdHJpbmcgSFRNTE1vZEVsZW1lbnQ6OmNp
dGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2l0ZUF0dHIpOwotfQotCi12
b2lkIEhUTUxNb2RFbGVtZW50OjpzZXRDaXRlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGNpdGVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MTW9kRWxlbWVu
dDo6ZGF0ZVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZGF0ZXRpbWVB
dHRyKTsKLX0KLQotdm9pZCBIVE1MTW9kRWxlbWVudDo6c2V0RGF0ZVRpbWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGF0ZXRpbWVBdHRyLCB2YWx1ZSk7Ci19Ci0K
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTW9kRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MTW9kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsNiBAQCBj
bGFzcyBIVE1MTW9kRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVuCiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTE1vZEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAotICAgIFN0cmluZyBjaXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
aXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGRhdGVUaW1lKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXREYXRlVGltZShjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MTW9k
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT0xpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TE9MaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDI5ICs4OSw5IEBAIHZvaWQg
SFRNTE9MaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgSFRNTEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxPTGlzdEVsZW1lbnQ6
OmNvbXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRy
KS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MT0xpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wg
YikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCiB2
b2lkIEhUTUxPTGlzdEVsZW1lbnQ6OnNldFN0YXJ0KGludCBzdGFydCkKIHsKLSAgICBzZXRBdHRy
aWJ1dGUoc3RhcnRBdHRyLCBTdHJpbmc6Om51bWJlcihzdGFydCkpOwotfQotCi1TdHJpbmcgSFRN
TE9MaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0
eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTE9MaXN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOworICAgIHNl
dEludGVncmFsQXR0cmlidXRlKHN0YXJ0QXR0ciwgc3RhcnQpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT0xpc3RFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxP
TGlzdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPTGlzdEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCop
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPTGlzdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQogICAgIGludCBzdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnQ7IH0KICAgICB2b2lkIHNldFN0YXJ0KGludCk7CiAKLSAgICBTdHJpbmcgdHlw
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToK
ICAgICBIVE1MT0xpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0
NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsMzYgKzI5OCw2IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05h
bWVkSXQKICAgICBtX2RvY05hbWVkSXRlbSA9IGlzTmFtZWRJdGVtOwogfQogCi1ib29sIEhUTUxP
YmplY3RFbGVtZW50OjpkZWNsYXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0
ZShkZWNsYXJlQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNl
dERlY2xhcmUoYm9vbCBkZWNsYXJlKQotewotICAgIHNldEF0dHJpYnV0ZShkZWNsYXJlQXR0ciwg
ZGVjbGFyZSA/ICIiIDogMCk7Ci19Ci0KLWludCBIVE1MT2JqZWN0RWxlbWVudDo6aHNwYWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhzcGFjZUF0dHIpLnRvSW50KCk7Ci19
Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEhzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGhzcGFjZUF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KLWlu
dCBIVE1MT2JqZWN0RWxlbWVudDo6dnNwYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHZzcGFjZUF0dHIpLnRvSW50KCk7Ci19Ci0KLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6
OnNldFZzcGFjZShpbnQgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHZzcGFjZUF0dHIsIFN0
cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KIGJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmNvbnRh
aW5zSmF2YUFwcGxldCgpIGNvbnN0CiB7CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKGdldEF0dHJpYnV0ZSh0eXBlQXR0cikpKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAKLSAgICBib29sIGRlY2xhcmUoKSBj
b25zdDsKLSAgICB2b2lkIHNldERlY2xhcmUoYm9vbCk7Ci0KLSAgICBpbnQgaHNwYWNlKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoaW50KTsKLQotICAgIGludCB2c3BhY2UoKSBjb25zdDsK
LSAgICB2b2lkIHNldFZzcGFjZShpbnQpOwotCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGNsYXNz
SWQoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzSWQ7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
T3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRH
cm91cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNiArODYsNiBAQCB2b2lkIEhU
TUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wCiAgICAgICAgIHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KS0+c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiB9CiAKLVN0
cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50OjpsYWJlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShsYWJlbEF0dHIpOwotfQotCi12b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnNl
dExhYmVsKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGxhYmVsQXR0
ciwgdmFsdWUpOwotfQotCiBib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0
IE5vZGUqIG5ld0NoaWxkKQogewogICAgIC8vIE1ha2Ugc3VyZSB0byBrZWVwIHRoaXMgaW4gc3lu
YyB3aXRoIDxzZWxlY3Q+IChvdGhlciB0aGFuIG5vdCBhbGxvd2luZyBhbiBvcHRncm91cCkuCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsNiBAQCBjbGFzcyBIVE1MT3B0R3JvdXBFbGVtZW50IDogcHVibGljIEhUTUxGCiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdEdyb3VwRWxlbWVudD4gY3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCi0gICAgU3Ry
aW5nIGxhYmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKLSAg
ICAKICAgICBIVE1MU2VsZWN0RWxlbWVudCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7CiAg
ICAgCiAgICAgdmlydHVhbCBTdHJpbmcgZ3JvdXBMYWJlbFRleHQoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBA
IFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IEhUTUxPcHRpb24KIAogICAgIGlmICghdmFs
dWUuaXNOdWxsKCkpCiAgICAgICAgIGVsZW1lbnQtPnNldFZhbHVlKHZhbHVlKTsKLSAgICBlbGVt
ZW50LT5zZXREZWZhdWx0U2VsZWN0ZWQoZGVmYXVsdFNlbGVjdGVkKTsKKyAgICBlbGVtZW50LT5z
ZXRCb29sZWFuQXR0cmlidXRlKHNlbGVjdGVkQXR0ciwgZGVmYXVsdFNlbGVjdGVkKTsKICAgICBl
bGVtZW50LT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CiAKICAgICByZXR1cm4gZWxlbWVudC5yZWxl
YXNlKCk7CkBAIC0yMDgsMjYgKzIwOCw2IEBAIEhUTUxTZWxlY3RFbGVtZW50KiBIVE1MT3B0aW9u
RWxlbWVudDo6b3cKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihz
ZWxlY3QpOwogfQogCi1ib29sIEhUTUxPcHRpb25FbGVtZW50OjpkZWZhdWx0U2VsZWN0ZWQoKSBj
b25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKHNlbGVjdGVkQXR0cikuaXNOdWxsKCk7
Ci19Ci0KLXZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldERlZmF1bHRTZWxlY3RlZChib29sIGIp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKHNlbGVjdGVkQXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLVN0
cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFiZWwoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGEubGFiZWwoKTsKLX0KLQotdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0TGFiZWwoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobGFiZWxBdHRyLCB2YWx1ZSk7Ci19
Ci0KIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IG5ld1N0eWxlKQogewogICAgIG1fc3R5bGUgPSBuZXdTdHlsZTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMiArNTQsNiBAQCBwdWJs
aWM6CiAKICAgICBIVE1MU2VsZWN0RWxlbWVudCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7
CiAKLSAgICBib29sIGRlZmF1bHRTZWxlY3RlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVmYXVs
dFNlbGVjdGVkKGJvb2wpOwotCi0gICAgU3RyaW5nIGxhYmVsKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKLQogICAgIGJvb2wgb3duRWxlbWVudERpc2FibGVkKCkg
Y29uc3QgeyByZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQoKTsgfQogCiAg
ICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFBhcmFncmFwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFy
YWdyYXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQ
YXJhZ3JhcGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDQgQEAgdm9p
ZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6cGFyc2VNYXBwZWRBdAogICAgICAgICBIVE1MRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVN0cmluZyBIVE1MUGFyYWdyYXBo
RWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25B
dHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0K
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw5ICszMSw2IEBAIGNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVtZW50IDogcHVibGljIEhUTUwK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyYWdyYXBoRWxlbWVudD4gY3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5nIGFsaWdu
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToK
ICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDggKzUyLDYgQEAgdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAg
ICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG5hbWVBdHRyKSB7CiAgICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIG1fdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC02MSw1NiArNTksMjIgQEAgdm9pZCBIVE1MUGFyYW1F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogYm9vbCBIVE1MUGFyYW1FbGVtZW50Ojppc1VSTEF0
dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSB2YWx1ZUF0dHIpIHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlcygpLT5n
ZXRBdHRyaWJ1dGVJdGVtKG5hbWVBdHRyKTsKLSAgICAgICAgaWYgKGF0dHIpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwotICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiZGF0YSIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlLCAibW92aWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgInNyYyIpKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIFN0cmluZyBu
YW1lID0gdGhpcy0+bmFtZSgpOworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
ImRhdGEiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAibW92aWUiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAic3JjIikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwotfQotCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIs
IHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6OnZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh2YWx1ZXR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGFyYW1FbGVtZW50
OjpzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUo
dmFsdWV0eXBlQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OmFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKIHsK
ICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0g
ICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShuYW1lKCksICJkYXRhIikgJiYKLSAgICAgICAgIWVx
dWFsSWdub3JpbmdDYXNlKG5hbWUoKSwgIm1vdmllIikgJiYKLSAgICAgICAgIWVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUoKSwgInNyYyIpKQorICAgIFN0cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOwor
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImRhdGEiKSAmJiAhZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIm1vdmllIikgJiYgIWVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKCkpKTsKKworICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIGdldFVSTEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxQYXJhbUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBh
cmFtRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSw3IEBAIGNsYXNzIEhUTUxQYXJh
bUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW0KIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MUGFyYW1FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICBTdHJpbmcgdmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZVR5cGUo
Y29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAKIHByaXZhdGU6CiAgICAgSFRNTFBhcmFtRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTU2LDcgKzQ2LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CiAKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwotICAgIEF0b21pY1N0cmlu
ZyBtX3ZhbHVlOwogfTsKIAogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsMjYgKzg4LDYgQEAgUGFzc1NjcmlwdEluc3RhbmNlIEhUTUxQbHVn
SW5FbGVtZW50OjpnZQogICAgIHJldHVybiBtX2luc3RhbmNlOwogfQogCi1TdHJpbmcgSFRNTFBs
dWdJbkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSho
ZWlnaHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGhlaWdodEF0dHIsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50
OjpzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0
aEF0dHIsIHZhbHVlKTsKLX0KLQogYm9vbCBIVE1MUGx1Z0luRWxlbWVudDo6bWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDYgQEAgY2xhc3Mg
SFRNTFBsdWdJbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZyYQogcHVibGljOgogICAgIHZpcnR1YWwg
fkhUTUxQbHVnSW5FbGVtZW50KCk7CiAKLSAgICBTdHJpbmcgaGVpZ2h0KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7Ci0gICAgCi0gICAgU3RyaW5nIHdpZHRoKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKLQogICAgIFBhc3NTY3Jp
cHRJbnN0YW5jZSBnZXRJbnN0YW5jZSgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFByZUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
MjQgKzY1LDQgQEAgdm9pZCBIVE1MUHJlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAg
ICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQog
Ci1pbnQgSFRNTFByZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHdpZHRoQXR0cikudG9JbnQoKTsKLX0KLQotdm9pZCBIVE1MUHJlRWxlbWVudDo6c2V0
V2lkdGgoaW50IHdpZHRoKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6
bnVtYmVyKHdpZHRoKSk7Ci19Ci0KLWJvb2wgSFRNTFByZUVsZW1lbnQ6OndyYXAoKSBjb25zdAot
ewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKHdyYXBBdHRyKS5pc051bGwoKTsKLX0KLQotdm9p
ZCBIVE1MUHJlRWxlbWVudDo6c2V0V3JhcChib29sIHdyYXApCi17Ci0gICAgc2V0QXR0cmlidXRl
KHdyYXBBdHRyLCB3cmFwID8gIiIgOiAwKTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxQcmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50
LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw2IEBAIGNsYXNzIEhUTUxQcmVFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW4KIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUHJlRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgaW50
IHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChpbnQpOwotCi0gICAgYm9vbCB3cmFw
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXcmFwKGJvb2wpOwotCiBwcml2YXRlOgogICAgIEhUTUxQ
cmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxRdW90ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MUXVvdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDQgQEAgdm9p
ZCBIVE1MUXVvdGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bQogICAgIEhUTUxFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCi1TdHJpbmcgSFRNTFF1b3RlRWxlbWVudDo6Y2l0
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaXRlQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTFF1b3RlRWxlbWVudDo6c2V0Q2l0ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShjaXRlQXR0ciwgdmFsdWUpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFF1b3RlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUXVv
dGVFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNiBAQCBjbGFzcyBIVE1MUXVvdGVF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFF1b3RlRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCi0gICAgU3RyaW5nIGNpdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENpdGUoY29uc3QgU3Ry
aW5nJik7Ci0KIHByaXZhdGU6CiAgICAgSFRNTFF1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNjggKzExNyw2IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNldFRleHQoY29uc3QgU3QKICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVU
ZXh0Tm9kZSh2YWx1ZS5pbXBsKCkpLCBlYyk7CiB9CiAKLVN0cmluZyBIVE1MU2NyaXB0RWxlbWVu
dDo6aHRtbEZvcigpIGNvbnN0Ci17Ci0gICAgLy8gRE9NIExldmVsIDEgc2F5czogcmVzZXJ2ZWQg
Zm9yIGZ1dHVyZSB1c2UuCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRE9NIExldmVs
IDEgc2F5czogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCi19Ci0KLVN0cmluZyBIVE1MU2NyaXB0
RWxlbWVudDo6ZXZlbnQoKSBjb25zdAotewotICAgIC8vIERPTSBMZXZlbCAxIHNheXM6IHJlc2Vy
dmVkIGZvciBmdXR1cmUgdXNlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBIVE1M
U2NyaXB0RWxlbWVudDo6c2V0RXZlbnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBET00gTGV2
ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLX0KLQotU3RyaW5nIEhUTUxTY3Jp
cHRFbGVtZW50OjpjaGFyc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hhcnNldEF0dHJpYnV0
ZVZhbHVlKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldENoYXJzZXQoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIsIHZhbHVlKTsK
LX0KLQotYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6ZGVmZXIoKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0QXR0cmlidXRlKGRlZmVyQXR0cikuaXNOdWxsKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlw
dEVsZW1lbnQ6OnNldERlZmVyKGJvb2wgZGVmZXIpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRlZmVy
QXR0ciwgZGVmZXIgPyAiIiA6IDApOwotfQotCi1LVVJMIEhUTUxTY3JpcHRFbGVtZW50OjpzcmMo
KSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzb3VyY2VBdHRy
aWJ1dGVWYWx1ZSgpKTsKLX0KLQotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0U3JjKGNvbnN0
IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dHlwZUF0dHJpYnV0ZVZhbHVlKCk7Ci19Ci0KLXZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFR5
cGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZh
bHVlKTsKLX0KLQogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9kYXRhLnNjcmlwdENoYXJzZXQoKTsKQEAgLTE5Myw3ICsxMzEs
NyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0CiB7CiAgICAgSFRN
TEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIHNyYygpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBn
ZXRVUkxBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6
OnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVu
dC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyNCArMzgsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRl
eHQoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CiAKLSAgICBTdHJp
bmcgaHRtbEZvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHRtbEZvcihjb25zdCBTdHJpbmcmKTsK
LQotICAgIFN0cmluZyBldmVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RXZlbnQoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgY2hhcnNldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hhcnNl
dChjb25zdCBTdHJpbmcmKTsKLQotICAgIGJvb2wgZGVmZXIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dERlZmVyKGJvb2wpOwotCi0gICAgS1VSTCBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRU
eXBlKGNvbnN0IFN0cmluZyYpOwotCiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hhcnNldCgp
IGNvbnN0OwogICAgIAogICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmhhdmVGaXJlZExvYWRFdmVudCgpOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDEyICszNzgsMTIgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZQogICAgIAogdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6c2V0TXVsdGlwbGUoYm9vbCBtdWx0aXBsZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUobXVs
dGlwbGVBdHRyLCBtdWx0aXBsZSA/ICIiIDogMCk7CisgICAgc2V0Qm9vbGVhbkF0dHJpYnV0ZSht
dWx0aXBsZUF0dHIsIG11bHRpcGxlKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0
U2l6ZShpbnQgc2l6ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIFN0cmluZzo6bnVt
YmVyKHNpemUpKTsKKyAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShzaXplQXR0ciwgc2l6ZSk7CiB9
CiAKIE5vZGUqIEhUTUxTZWxlY3RFbGVtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MTQ2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWlu
aWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDUxICsyNCw0OCBAQCBtb2R1bGUgaHRt
bCB7CiAgICAgICAgIEhhc0luZGV4R2V0dGVyLAogICAgICAgICBIYXNDdXN0b21JbmRleFNldHRl
cgogICAgIF0gSFRNTFNlbGVjdEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0KLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICB0eXBlOwotICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgbG9uZyAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg7Ci0gICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICB2YWx1
ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICBh
dHRyaWJ1dGUgbG9uZyBzZWxlY3RlZEluZGV4OworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRO
dWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmFsdWU7CiAgICAgICAgIAogICAgICAgICAvLyBN
b2RpZmllZCBpbiBET00gTGV2ZWwgMjoKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9D
KSAmJiBMQU5HVUFHRV9PQkpFQ1RJVkVfQwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyAgICAgICAgICAgIGxlbmd0aDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbGVu
Z3RoOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgICBs
ZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoIHNldHRlciByYWlzZXMgKERP
TUV4Y2VwdGlvbik7CiAjZW5kaWYKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZv
cm1FbGVtZW50IGZvcm07Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWYWxpZGl0eVN0YXRl
ICAgdmFsaWRpdHk7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAg
d2lsbFZhbGlkYXRlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
IHZhbGlkYXRpb25NZXNzYWdlOwotICAgICAgICBib29sZWFuICAgICAgICAgICAgY2hlY2tWYWxp
ZGl0eSgpOwotICAgICAgICB2b2lkICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkoaW4g
W0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBlcnJvcik7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWYWxpZGl0eVN0YXRlIHZhbGlkaXR5OworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3aWxsVmFsaWRhdGU7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2U7CisgICAgICAgIGJvb2xl
YW4gY2hlY2tWYWxpZGl0eSgpOworICAgICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGluIFtD
b252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgZXJyb3IpOwogCiAg
ICAgICAgIC8vIE1vZGlmaWVkIGluIERPTSBMZXZlbCAyOgogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSFRNTE9wdGlvbnNDb2xsZWN0aW9uIG9wdGlvbnM7CiAKLSAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIGJvb2xlYW4gICAgICAgICBkaXNhYmxlZDsKLSAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIGJvb2xlYW4gICAgICAgICBhdXRvZm9jdXM7Ci0gICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBib29sZWFuICAgICAgICAgbXVsdGlwbGU7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBuYW1lOwotICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgIHNpemU7CisgICAgICAgIGF0dHJp
YnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBkaXNhYmxlZDsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZs
ZWN0XSBib29sZWFuIGF1dG9mb2N1czsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbXVsdGlw
bGU7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyBuYW1lOworICAgICAgICBhdHRyaWJ1dGUgbG9uZyBzaXplOwogICAgICAgICAKLSAgICAgICAg
W09sZFN0eWxlT2JqQ10gdm9pZCBhZGQoaW4gSFRNTEVsZW1lbnQgZWxlbWVudCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gSFRNTEVsZW1lbnQgYmVmb3JlKQotICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtPbGRTdHlsZU9iakNdIHZvaWQgYWRk
KGluIEhUTUxFbGVtZW50IGVsZW1lbnQsIGluIEhUTUxFbGVtZW50IGJlZm9yZSkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CiAKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdV
QUdFX0pBVkFTQ1JJUFQKLSAgICAgICAgLy8gSW4gSlMsIHdlIHN1cHBvcnQgYm90aCBvcHRpb25z
IGluZGV4IGFuZCBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXJzIC0gdGhpcyBjYW5ub3QgYmUgYXV0
b2dlbmVyYXRlZCBub3cuCi0gICAgICAgIFtDdXN0b21dIHZvaWQgICAgICByZW1vdmUoLyogMSAq
Lyk7CisgICAgICAgIC8vIEluIEpTLCB3ZSBzdXBwb3J0IGJvdGggb3B0aW9ucyBpbmRleCBhbmQg
b3B0aW9ucyBvYmplY3QgcGFyYW1ldGVycy4KKyAgICAgICAgLy8gQXMgb2YgdGhpcyB3cml0aW5n
IHRoaXMgY2Fubm90IGJlIGF1dG8tZ2VuZXJhdGVkLgorICAgICAgICBbQ3VzdG9tXSB2b2lkIHJl
bW92ZSgvKiAxICovKTsKICNlbHNlCi0gICAgICAgIHZvaWQgICAgICAgICAgICAgICByZW1vdmUo
aW4gbG9uZyBpbmRleCk7CisgICAgICAgIHZvaWQgcmVtb3ZlKGluIGxvbmcgaW5kZXgpOwogI2Vu
ZGlmCiAKICAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IGluIERPTSBMZXZlbCAyIElE
TCwgYnV0IGFyZSBtZW50aW9uZWQgaW4gdGhlIHN0YW5kYXJkOgogICAgICAgICAvLyAiVGhlIGNv
bnRhaW5lZCBvcHRpb25zIGNhbiBiZSBkaXJlY3RseSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBzZWxl
Y3QgZWxlbWVudCBhcyBhIGNvbGxlY3Rpb24uIgogICAgICAgICBOb2RlIGl0ZW0oaW4gW0lzSW5k
ZXhdIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgICAgICBOb2RlIG5hbWVkSXRlbShpbiBET01T
dHJpbmcgbmFtZSk7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlTGlzdCAgICAgICAg
bGFiZWxzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZUxpc3QgbGFiZWxzOwogICAg
IH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0
KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxNCArNDUsMTEgQEAgUGFzc1JlZlB0cjxIVE1MU3R5bGVFbGVtZW50PiBIVE1MU3R5bGVF
bAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0eWxlRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCwgY3JlYXRlZEJ5UGFyc2VyKSk7CiB9CiAKLS8vIG90aGVyIHN0dWZmLi4uCiB2b2lkIEhU
TUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikKLSAgICAgICAgbV9tZWRpYSA9IGF0
dHItPnZhbHVlKCkuc3RyaW5nKCkubG93ZXIoKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0
dHIgJiYgbV9zaGVldCkKICAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoYXR0ci0+dmFsdWUoKSk7
Ci0gICAgIGVsc2UKKyAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KIApAQCAtMTEwLDM0ICsxMDcsMTQgQEAgYm9vbCBIVE1MU3R5bGVF
bGVtZW50OjpzaGVldExvYWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhUTUxT
dHlsZUVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0
ZShkaXNhYmxlZEF0dHIpLmlzTnVsbCgpOwotfQotCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNl
dERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0
ciwgZGlzYWJsZWQgPyAiIiA6IDApOwotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxTdHls
ZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlh
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgQXRvbWlj
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobWVkaWFBdHRyLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKIH0KIAogY29uc3QgQXRvbWlj
U3RyaW5nJiBIVE1MU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHR5cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXRUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRy
LCB2YWx1ZSk7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCiB2
b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYgdXJscykgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkocmV2
aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MU3R5bGVFbGVtZW50X2gKICNkZWZpbmUgSFRNTFN0eWxl
RWxlbWVudF9oCiAKQEAgLTI5LDE3ICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFN0eWxlU2hlZXQ7CiAKLWNsYXNzIEhUTUxTdHlsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQgeworY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCwgcHJpdmF0ZSBTdHlsZUVsZW1lbnQgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKLSAgICBib29sIGRpc2Fi
bGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLQotICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29u
c3QgQXRvbWljU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAg
IFN0eWxlU2hlZXQqIHNoZWV0KCk7CkBAIC02Niw3ICs2MCw5IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JikgY29uc3Q7CiAKLSAgICBTdHJpbmcgbV9tZWRpYTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWVkaWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSgpIGNvbnN0OworCiAgICAgYm9vbCBtX2xvYWRpbmc7CiAgICAgYm9vbCBtX2NyZWF0ZWRC
eVBhcnNlcjsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaWRsCShyZXZpc2lvbiA2
MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNyArMjEsNyBAQAogbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIEhUTUxT
dHlsZUVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0gICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGRp
c2FibGVkOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gZGlzYWJsZWQ7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG1lZGlhOwogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyB0eXBlOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTQgKzYz
LDQgQEAgdm9pZCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6cGFyc2VNYXBwZQogICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVN0cmluZyBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudDo6YWxpZ24oKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoYWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6c2V0
QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRy
LCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw2IEBAIGNsYXNzIEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50IDogcHVibGljIEgKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MVGFibGVDYXB0aW9uRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihj
b25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTM0ICsxMzEs
MTQgQEAgYm9vbCBIVE1MVGFibGVDZWxsRWxlbWVudDo6aXNVUkxBdHRyaWJ1dAogICAgIHJldHVy
biBhdHRyLT5uYW1lKCkgPT0gYmFja2dyb3VuZEF0dHI7CiB9CiAKLVN0cmluZyBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6YWJicigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhYmJy
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEFiYnIoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYWJickF0dHIsIHZhbHVlKTsKLX0KLQot
U3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50
OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShhbGln
bkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpheGlzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGF4aXNBdHRyKTsKLX0KLQotdm9pZCBI
VE1MVGFibGVDZWxsRWxlbWVudDo6c2V0QXhpcyhjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShheGlzQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmJnQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYmdj
b2xvckF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRCZ0NvbG9yKGNv
bnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y2goKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNlbGxF
bGVtZW50OjpzZXRDaChjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShj
aGFyQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNoT2Zm
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyKTsKLX0KLQot
dm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2hPZmYoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIsIHZhbHVlKTsKLX0KLQogdm9pZCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3BhbihpbnQgbikKIHsKLSAgICBzZXRBdHRyaWJ1dGUo
Y29sc3BhbkF0dHIsIFN0cmluZzo6bnVtYmVyKG4pKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNl
bGxFbGVtZW50OjpoZWFkZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhl
YWRlcnNBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0SGVhZGVycyhj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShoZWFkZXJzQXR0ciwgdmFs
dWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFi
bGVDZWxsRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKGhlaWdodEF0dHIsIHZhbHVlKTsKLX0KLQotYm9vbCBIVE1MVGFibGVDZWxsRWxl
bWVudDo6bm9XcmFwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShub3dyYXBB
dHRyKS5pc051bGwoKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Tm9XcmFw
KGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUobm93cmFwQXR0ciwgYiA/ICIiIDogMCk7Cisg
ICAgc2V0SW50ZWdyYWxBdHRyaWJ1dGUoY29sc3BhbkF0dHIsIG4pOwogfQogCiB2b2lkIEhUTUxU
YWJsZUNlbGxFbGVtZW50OjpzZXRSb3dTcGFuKGludCBuKQogewotICAgIHNldEF0dHJpYnV0ZShy
b3dzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OnNjb3BlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNjb3Bl
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldFNjb3BlKGNvbnN0IFN0
cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHNjb3BlQXR0ciwgdmFsdWUpOwotfQot
Ci1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnZBbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh2YWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVDZWxsRWxl
bWVudDo6c2V0VkFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KHZhbGlnbkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojp3
aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQot
Ci12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVl
KQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKKyAgICBzZXRJbnRlZ3Jh
bEF0dHJpYnV0ZShyb3dzcGFuQXR0ciwgbik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykg
Y29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw1NyArMzUsMjAgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxU
YWJsZUNlbGxFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKICAgICBpbnQgY2VsbEluZGV4KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDZWxsSW5kZXgoaW50
KTsKIAogICAgIGludCBjb2woKSBjb25zdCB7IHJldHVybiBtX2NvbDsgfQogICAgIHZvaWQgc2V0
Q29sKGludCBjb2wpIHsgbV9jb2wgPSBjb2w7IH0KKwogICAgIGludCByb3coKSBjb25zdCB7IHJl
dHVybiBtX3JvdzsgfQogICAgIHZvaWQgc2V0Um93KGludCByb3cpIHsgbV9yb3cgPSByb3c7IH0K
IAogICAgIGludCBjb2xTcGFuKCkgY29uc3QgeyByZXR1cm4gbV9jb2xTcGFuOyB9Ci0gICAgaW50
IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBtX3Jvd1NwYW47IH0KLQotICAgIHZvaWQgc2V0Q2Vs
bEluZGV4KGludCk7Ci0KLSAgICBTdHJpbmcgYWJicigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWJi
cihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWxpZ24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgYXhpcygpIGNvbnN0OwotICAg
IHZvaWQgc2V0QXhpcyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBiZ0NvbG9yKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNo
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBj
aE9mZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hPZmYoY29uc3QgU3RyaW5nJik7Ci0KICAgICB2
b2lkIHNldENvbFNwYW4oaW50KTsKIAotICAgIFN0cmluZyBoZWFkZXJzKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRIZWFkZXJzKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGhlaWdodCgpIGNv
bnN0OwotICAgIHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgYm9vbCBub1dy
YXAoKSBjb25zdDsKLSAgICB2b2lkIHNldE5vV3JhcChib29sKTsKLQorICAgIGludCByb3dTcGFu
KCkgY29uc3QgeyByZXR1cm4gbV9yb3dTcGFuOyB9CiAgICAgdm9pZCBzZXRSb3dTcGFuKGludCk7
CiAKLSAgICBTdHJpbmcgc2NvcGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjb3BlKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIHZBbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0VkFsaWdu
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToKICAgICBIVE1MVGFibGVDZWxsRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MVGFibGVDZWxsRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAgbW9kdWxlIGh0bWwgewogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBjb2xTcGFuOwogICAgICAg
ICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBoZWFkZXJzOwogICAgICAgICBhdHRyaWJ1
dGUgW1JlZmxlY3RdIERPTVN0cmluZyBoZWlnaHQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBib29sZWFu
IG5vV3JhcDsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIG5vV3JhcDsKICAg
ICAgICAgYXR0cmlidXRlIGxvbmcgcm93U3BhbjsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0
XSBET01TdHJpbmcgc2NvcGU7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5n
IHZBbGlnbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAJKHJldmlzaW9u
IDYxNDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHQKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eVdpZHRo
LCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzVGFibGVDb2woKSkgewogICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2wg
PSB0b1JlbmRlclRhYmxlQ29sKHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGludCBuZXdX
aWR0aCA9IHdpZHRoKCkudG9JbnQoKTsKKyAgICAgICAgICAgICAgICBpbnQgbmV3V2lkdGggPSBh
dHRyLT52YWx1ZSgpLnRvSW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9IGNv
bC0+d2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgY29sLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIH0KQEAgLTExMCw1OSArMTEwLDkgQEAgdm9p
ZCBIVE1MVGFibGVDb2xFbGVtZW50OjphZGRpdGlvbmFsQXR0cgogICAgIHN0YXRpY19jYXN0PEhU
TUxUYWJsZUVsZW1lbnQqPihwKS0+YWRkU2hhcmVkR3JvdXBEZWNscyhmYWxzZSwgcmVzdWx0cyk7
CiB9CiAKLVN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50OjphbGlnbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6Y2go
KSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0dHIpOwotfQotCi12b2lk
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldENoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGNoYXJBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVDb2xF
bGVtZW50OjpjaE9mZigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyb2Zm
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6c2V0Q2hPZmYoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIsIHZhbHVlKTsKLX0K
LQogdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRTcGFuKGludCBuKQogewotICAgIHNldEF0
dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwotfQotCi1TdHJpbmcgSFRNTFRh
YmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHZhbGlnbkF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFZBbGlnbihj
b25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh2YWxpZ25BdHRyLCB2YWx1
ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUNv
bEVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKHdpZHRoQXR0ciwgdmFsdWUpOworICAgIHNldEludGVncmFsQXR0cmlidXRlKHNwYW5BdHRy
LCBuKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCShyZXZpc2lv
biA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDI0ICszNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MVGFibGVDb2xFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqKTsKIAogICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gbV9zcGFuOyB9Ci0K
LSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIGNoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaChjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyBjaE9mZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hPZmYoY29u
c3QgU3RyaW5nJik7Ci0KICAgICB2b2lkIHNldFNwYW4oaW50KTsKIAotICAgIFN0cmluZyB2QWxp
Z24oKSBjb25zdDsKLSAgICB2b2lkIHNldFZBbGlnbihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0
cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5nJik7Ci0K
IHByaXZhdGU6CiAgICAgSFRNTFRhYmxlQ29sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjY5LDk2ICs2NjksNiBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBIVE1MVGFibGVFbGVtCiAgICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywg
VGFibGVUQm9kaWVzKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmFsaWduKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7Ci19Ci0KLXZvaWQgSFRN
TFRhYmxlRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVFbGVtZW50
OjpiZ0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29sb3JBdHRy
KTsKLX0KLQotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBIVE1MVGFibGVFbGVtZW50Ojpib3JkZXIoKSBjb25zdAotewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYm9yZGVyQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0Qm9y
ZGVyKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGJvcmRlckF0dHIs
IHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxQYWRkaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cik7Ci19Ci0KLXZv
aWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0Q2VsbFBhZGRpbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBIVE1MVGFibGVFbGVtZW50OjpjZWxsU3BhY2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjZWxsc3BhY2luZ0F0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OnNldENlbGxTcGFjaW5nKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNlbGxzcGFjaW5nQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlRWxlbWVudDo6
ZnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZnJhbWVBdHRyKTsKLX0K
LQotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRGcmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQot
ewotICAgIHNldEF0dHJpYnV0ZShmcmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxU
YWJsZUVsZW1lbnQ6OnJ1bGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJ1
bGVzQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlRWxlbWVudDo6c2V0UnVsZXMoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocnVsZXNBdHRyLCB2YWx1ZSk7Ci19Ci0K
LVN0cmluZyBIVE1MVGFibGVFbGVtZW50OjpzdW1tYXJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVFbGVtZW50Ojpz
ZXRTdW1tYXJ5KGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHN1bW1h
cnlBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVFbGVtZW50Ojp3aWR0aCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotfQotCi12b2lkIEhU
TUxUYWJsZUVsZW1lbnQ6OnNldFdpZHRoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0
QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwotfQotCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29u
c3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDMzICs2MCw2
IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiByb3dzKCk7CiAgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gdEJvZGllcygpOwogCi0gICAgU3RyaW5nIGFsaWdu
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyBiZ0NvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgU3RyaW5nIGJvcmRlcigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKGNvbnN0IFN0
cmluZyYpOwotCi0gICAgU3RyaW5nIGNlbGxQYWRkaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
ZWxsUGFkZGluZyhjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBjZWxsU3BhY2luZygpIGNv
bnN0OwotICAgIHZvaWQgc2V0Q2VsbFNwYWNpbmcoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIHJ1bGVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSdWxlcyhjb25zdCBTdHJpbmcm
KTsKLQotICAgIFN0cmluZyBzdW1tYXJ5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdW1tYXJ5KGNv
bnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRX
aWR0aChjb25zdCBTdHJpbmcmKTsKLQogICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDU5ICsxODEsOSBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dFCiAg
ICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgVFJDZWxscyk7CiB9CiAKLXZv
aWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0Q2VsbHMoSFRNTENvbGxlY3Rpb24gKiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnNldENlbGxzKEhUTUxDb2xs
ZWN0aW9uKiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI7CiB9CiAKLVN0cmluZyBIVE1MVGFibGVSb3dFbGVtZW50OjphbGlnbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwotfQotCi12b2lkIEhU
TUxUYWJsZVJvd0VsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAg
c2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTFRhYmxlUm93
RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShiZ2Nv
bG9yQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0QmdDb2xvcihjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShiZ2NvbG9yQXR0ciwgdmFsdWUp
OwotfQotCi1TdHJpbmcgSFRNTFRhYmxlUm93RWxlbWVudDo6Y2goKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0dHIpOwotfQotCi12b2lkIEhUTUxUYWJsZVJvd0VsZW1l
bnQ6OnNldENoKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNoYXJB
dHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBIVE1MVGFibGVSb3dFbGVtZW50OjpjaE9mZigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyb2ZmQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTFRhYmxlUm93RWxlbWVudDo6c2V0Q2hPZmYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAg
ICBzZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEhUTUxUYWJs
ZVJvd0VsZW1lbnQ6OnZBbGlnbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2
YWxpZ25BdHRyKTsKLX0KLQotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRWQWxpZ24oY29u
c3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodmFsaWduQXR0ciwgdmFsdWUp
OwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHJldmlzaW9uIDYx
NDY0KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMjEgKzQ5LDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IGNlbGxzKCk7CiAgICAgdm9pZCBzZXRDZWxscyhIVE1MQ29sbGVjdGlvbiAqLCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWdu
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGJnQ29sb3IoKSBjb25zdDsKLSAgICB2b2lk
IHNldEJnQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY2goKSBjb25zdDsKLSAg
ICB2b2lkIHNldENoKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNoT2ZmKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDaE9mZihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB2QWxpZ24o
KSBjb25zdDsKLSAgICB2b2lkIHNldFZBbGlnbihjb25zdCBTdHJpbmcmKTsKLQogcHJpdmF0ZToK
ICAgICBIVE1MVGFibGVSb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2
NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcwLDE2ICszNzAsMTcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXREZWZh
dWx0VmFsdQogaW50IEhUTUxUZXh0QXJlYUVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CiB7CiAg
ICAgYm9vbCBvazsKLSAgICBpbnQgdmFsdWUgPSBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciku
c3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICBpbnQgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKG1h
eGxlbmd0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgcmV0dXJuIG9rICYmIHZhbHVlID49IDAgPyB2
YWx1ZSA6IC0xOwogfQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldE1heExlbmd0aChp
bnQgbmV3VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChuZXdWYWx1ZSA8IDAp
CisgICAgaWYgKG5ld1ZhbHVlIDwgMCkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwot
ICAgIGVsc2UKLSAgICAgICAgc2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIsIFN0cmluZzo6bnVt
YmVyKG5ld1ZhbHVlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0SW50ZWdyYWxB
dHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgbmV3VmFsdWUpOwogfQogCiBib29sIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OnRvb0xvbmcoKSBjb25zdApAQCAtMzk5LDI0ICs0MDAsMTQgQEAgdm9pZCBIVE1M
VGV4dEFyZWFFbGVtZW50OjphY2Nlc3NLZXlBY3RpbwogICAgIGZvY3VzKCk7CiB9CiAKLWNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTFRleHRBcmVhRWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOwotfQotCi12b2lkIEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgSFRNTFRleHRB
cmVhRWxlbWVudDo6c2V0Q29scyhpbnQgY29scykKIHsKLSAgICBzZXRBdHRyaWJ1dGUoY29sc0F0
dHIsIFN0cmluZzo6bnVtYmVyKGNvbHMpKTsKKyAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShjb2xz
QXR0ciwgY29scyk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0Um93cyhpbnQg
cm93cykKIHsKLSAgICBzZXRBdHRyaWJ1dGUocm93c0F0dHIsIFN0cmluZzo6bnVtYmVyKHJvd3Mp
KTsKKyAgICBzZXRJbnRlZ3JhbEF0dHJpYnV0ZShyb3dzQXR0ciwgcm93cyk7CiB9CiAKIGJvb2wg
SFRNTFRleHRBcmVhRWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdApAQCAtNDI0
LDQgKzQxNSw5IEBAIGJvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6c2hvdWxkVXNlSW5wdXQKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBIVE1MVGV4dEFyZWFFbGVtZW50Ojppc1JlcXVpcmVk
Rm9ybUNvbnRyb2woKSBjb25zdAoreworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUocmVxdWlyZWRB
dHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIHJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhY2Nlc3NLZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJp
bmcmKTsKLQogICAgIHZvaWQgc2V0Q29scyhpbnQpOwogICAgIHZvaWQgc2V0Um93cyhpbnQpOwog
ICAgIApAQCAtNzUsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgaW50IGNhY2hlZFNl
bGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uRW5kOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gIWlz
UmVxdWlyZWRGb3JtQ29udHJvbCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVxdWlyZWRGb3Jt
Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHJlcXVpcmVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaWRsCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEzIEBAIG1vZHVsZSBodG1sIHsK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZhbGlkaXR5U3RhdGUgdmFsaWRpdHk7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIGFjY2Vzc0tleTsKICAgICAgICAgYXR0
cmlidXRlIGxvbmcgY29sczsKLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gZGlzYWJsZWQ7Ci0g
ICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGF1dG9mb2N1czsKKyAgICAgICAgYXR0cmlidXRlIFtS
ZWZsZWN0XSBib29sZWFuIGRpc2FibGVkOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJv
b2xlYW4gYXV0b2ZvY3VzOwogICAgICAgICBhdHRyaWJ1dGUgbG9uZyBtYXhMZW5ndGggc2V0dGVy
IHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgbmFtZTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBE
T01TdHJpbmcgcGxhY2Vob2xkZXI7Ci0gICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIHJlYWRPbmx5
OwotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKKyAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0XSBib29sZWFuIHJlYWRPbmx5OworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3Rd
IGJvb2xlYW4gcmVxdWlyZWQ7CiAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHJvd3M7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICAgICAgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHZhbHVlOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VUxpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVM
aXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI0ICs2NSw0IEBAIHZvaWQgSFRN
TFVMaXN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxVTGlzdEVsZW1lbnQ6OmNv
bXBhY3QoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5p
c051bGwoKTsKLX0KLQotdm9pZCBIVE1MVUxpc3RFbGVtZW50OjpzZXRDb21wYWN0KGJvb2wgYikK
LXsKLSAgICBzZXRBdHRyaWJ1dGUoY29tcGFjdEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi1TdHJp
bmcgSFRNTFVMaXN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTFVMaXN0RWxlbWVudDo6c2V0VHlwZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwot
fQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgJKHJldmlzaW9uIDYxNDY0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIg
KzMyLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxVTGlzdEVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxVTGlzdEVsZW1l
bnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIGJvb2wg
Y29tcGFjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQotICAgIFN0cmlu
ZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwotCiBwcml2
YXRlOgogICAgIEhUTUxVTGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5pZGwJKHJldmlzaW9uIDYxNDY0KQor
KysgV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCw3ICsyMCw3IEBACiBtb2R1bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgSFRNTFVMaXN0RWxl
bWVudCA6IEhUTUxFbGVtZW50IHsKLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gY29tcGFjdDsK
KyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIGNvbXBhY3Q7CiAgICAgICAgIGF0
dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIHR5cGU7CiAgICAgfTsKIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwzNSArMTQ4LDYgQEAgdW5z
aWduZWQgSFRNTFZpZGVvRWxlbWVudDo6dmlkZW9IZWlnaHQoKQogICAgIHJldHVybiBwbGF5ZXIo
KS0+bmF0dXJhbFNpemUoKS5oZWlnaHQoKTsKIH0KIAotdW5zaWduZWQgSFRNTFZpZGVvRWxlbWVu
dDo6d2lkdGgoKSBjb25zdAotewotICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgdyA9IGdldEF0
dHJpYnV0ZSh3aWR0aEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOwotICAgIHJldHVybiBvayA/
IHcgOiAwOwotfQotCi12b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnNldFdpZHRoKHVuc2lnbmVkIHZh
bHVlKQotewotICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIFN0cmluZzo6bnVtYmVyKHZhbHVl
KSk7Ci19Ci0gICAgCi11bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50OjpoZWlnaHQoKSBjb25zdAot
ewotICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRy
KS5zdHJpbmcoKS50b1VJbnQoJm9rKTsKLSAgICByZXR1cm4gb2sgPyBoIDogMDsKLX0KLSAgICAK
LXZvaWQgSFRNTFZpZGVvRWxlbWVudDo6c2V0SGVpZ2h0KHVuc2lnbmVkIHZhbHVlKQotewotICAg
IHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCBTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotfQotCi12
b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnNldFBvc3Rlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShwb3N0ZXJBdHRyLCB2YWx1ZSk7Ci19Ci0KIGJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyaWJ1dGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNiArMzgsMTAgQEAg
Y2xhc3MgSFRNTFZpZGVvRWxlbWVudCA6IHB1YmxpYyBIVE1MTWVkaQogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRXaWR0aCh1bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRIZWlnaHQodW5zaWduZWQpOwotICAgIAogICAgIHVuc2lnbmVkIHZpZGVvV2lkdGgo
KSBjb25zdDsKICAgICB1bnNpZ25lZCB2aWRlb0hlaWdodCgpIGNvbnN0OwogICAgIAogICAgIHZp
cnR1YWwgY29uc3QgS1VSTCBwb3N0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Bvc3RlclVSTDsgfQot
ICAgIHZvaWQgc2V0UG9zdGVyKGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gRnVsbHNjcmVlbgog
ICAgIHZvaWQgd2Via2l0RW50ZXJGdWxsc2NyZWVuKGJvb2wgaXNVc2VyR2VzdHVyZSwgRXhjZXB0
aW9uQ29kZSYpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDYxNDY0
KQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNCw3ICsyMjQsNyBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0
CiAgICAgCiAgICAgaW1hZ2VFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiLXdlYmtp
dC11c2VyLXNlbGVjdDogbm9uZSIpOyAgICAgICAgCiAgICAgaW1hZ2VFbGVtZW50LT5zZXRMb2Fk
TWFudWFsbHkodHJ1ZSk7Ci0gICAgaW1hZ2VFbGVtZW50LT5zZXRTcmModXJsKCkuc3RyaW5nKCkp
OworICAgIGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygp
KTsKICAgICAKICAgICBib2R5LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQsIGVjKTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdlYkNv
cmUvbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMiArODks
MTEgQEAgdm9pZCBNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudAogICAgIFJlZlB0
cjxFbGVtZW50PiBtZWRpYUVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudCh2aWRlb1RhZywg
ZmFsc2UpOwogICAgICAgICAKICAgICBtX21lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxW
aWRlb0VsZW1lbnQqPihtZWRpYUVsZW1lbnQuZ2V0KCkpOwotICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0
dHJpYnV0ZShhdXRvcGxheUF0dHIsICIiKTsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgIm1hcmdpbjogYXV0bzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7
IHJpZ2h0OiAwOyBib3R0b206IDA7IGxlZnQ6IDA7Iik7Ci0KKyAgICBtX21lZGlhRWxlbWVudC0+
c2V0QXR0cmlidXRlKGF1dG9wbGF5QXR0ciwgZW1wdHlBdG9tKTsKKyAgICBtX21lZGlhRWxlbWVu
dC0+c2V0QXR0cmlidXRlKGNvbnRyb2xzQXR0ciwgZW1wdHlBdG9tKTsKICAgICBtX21lZGlhRWxl
bWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAibWVkaWEiKTsKLSAgICBtX21lZGlhRWxlbWVu
dC0+c2V0U3JjKG1fZG9jLT51cmwoKSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0
ZShzcmNBdHRyLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpOworICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAibWFyZ2luOiBhdXRvOyBwb3NpdGlvbjogYWJzb2x1dGU7
IHRvcDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgbGVmdDogMDsiKTsKICAgICAKICAgICBib2R5
LT5hcHBlbmRDaGlsZChtZWRpYUVsZW1lbnQsIGVjKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIv
aWNvbi9JY29uRmV0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRmV0Y2hlci5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRmV0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIHZv
aWQgcGFyc2VJY29uTGluayhIVE1MTGlua0VsZW1lbgogICAgIC8vIEZJWE1FOiBQYXJzZSB0aGUg
c2l6ZSBhdHRyaWJ1dGUgdG9vLgogICAgIAogICAgIEljb25MaW5rRW50cnk6Okljb25UeXBlIHR5
cGUgPSBJY29uTGlua0VudHJ5OjpVbmtub3duOwotICAgIGNvbnN0IEtVUkwmIHVybCA9IGxpbmst
PmhyZWYoKTsKKyAgICBjb25zdCBLVVJMJiB1cmwgPSBsaW5rLT5nZXRVUkxBdHRyaWJ1dGUoaHJl
ZkF0dHIpOwogCiAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgZmlsZSB0eXBlLgogICAgIFN0
cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysr
IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNyArMzYyLDcg
QEAgdm9pZCBDaHJvbWU6OnNldFRvb2xUaXAoY29uc3QgSGl0VGVzdFJlcwogICAgICAgICAgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRN
TElucHV0RWxlbWVudDo6U1VCTUlUKQogICAgICAgICAgICAgICAgICAgICBpZiAoSFRNTEZvcm1F
bGVtZW50KiBmb3JtID0gaW5wdXQtPmZvcm0oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dG9vbFRpcCA9IGZvcm0tPmFjdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRp
cCA9IGZvcm0tPmZhc3RHZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZm9ybS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b29sVGlwRGlyZWN0aW9uID0gZm9ybS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJBcHBsZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckFwcGxldC5jcHAJKHJldmlzaW9uIDYxNDY0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QXBwbGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFJlbmRlckFw
cGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFt
ZShwYXJhbVRhZykpIHsKICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnQqIHAgPSBzdGF0aWNf
Y2FzdDxIVE1MUGFyYW1FbGVtZW50Kj4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKCFwLT5uYW1l
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fYXJncy5zZXQocC0+bmFtZSgpLCBwLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2FyZ3Muc2V0KHAtPm5hbWUoKSwgcC0+Z2V0QXR0
cmlidXRlKHZhbHVlQXR0cikpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA2MTQ2NCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE4LDkgKzIxOCw5IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnVwZGF0ZVdpZGdl
dCgKICAgICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8SFRN
TFBhcmFtRWxlbWVudCo+KGNoaWxkKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHAt
Pm5hbWUoKTsKICAgICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgInNyYyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJtb3ZpZSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJjb2RlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgInVybCIpKSkKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gcC0+dmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdXJsID0gcC0+ZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOwog
ICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgInR5cGUiKSkgewotICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZSA9
IHAtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gcC0+ZmFzdEdl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOwogICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gc2Vy
dmljZVR5cGUuZmluZCgiOyIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKQog
ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGUgPSBzZXJ2aWNlVHlwZS5sZWZ0KHBv
cyk7CkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dXBkYXRl
V2lkZ2V0KAogICAgICAgICAgICAgICAgIGlmICghZW1iZWQgJiYgIW5hbWUuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQocC0+bmFtZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKHAtPnZhbHVlKCkpOworICAgICAgICAg
ICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQocC0+ZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDEzICs5NCwxMiBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp2YWx1ZUNoYW5nCiAK
IGJvb2wgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmFsbG93c011bHRpcGxlRmlsZXMoKQogewot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG5vZGUoKSk7Ci0gICAgcmV0dXJuICFpbnB1dC0+Z2V0QXR0cmlidXRlKG11bHRpcGxlQXR0
cikuaXNOdWxsKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihu
b2RlKCkpLT5oYXNBdHRyaWJ1dGUobXVsdGlwbGVBdHRyKTsKIH0KIAogU3RyaW5nIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjphY2NlcHRUeXBlcygpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5hY2NlcHQoKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPmZhc3RHZXRBdHRyaWJ1dGUoYWNjZXB0
QXR0cik7CiB9CiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNob29zZUljb25Gb3JG
aWxlcyhGaWxlQ2hvb3NlciogY2hvb3NlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cykKQEAgLTE0Niw3ICsxNDUsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRh
dGVGcm9tCiAgICAgICAgIGFkZENoaWxkKHJlbmRlcmVyKTsKICAgICB9CiAKLSAgICBtX2J1dHRv
bi0+c2V0RGlzYWJsZWQoIXRoZW1lKCktPmlzRW5hYmxlZCh0aGlzKSk7CisgICAgbV9idXR0b24t
PnNldEJvb2xlYW5BdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCAhdGhlbWUoKS0+aXNFbmFibGVkKHRo
aXMpKTsKIAogICAgIC8vIFRoaXMgb25seSBzdXBwb3J0cyBjbGVhcmluZyBvdXQgdGhlIGZpbGVz
LCBidXQgdGhhdCdzIE9LIGJlY2F1c2UgZm9yCiAgICAgLy8gc2VjdXJpdHkgcmVhc29ucyB0aGF0
J3MgdGhlIG9ubHkgY2hhbmdlIHRoZSBET00gaXMgYWxsb3dlZCB0byBtYWtlLgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gNjE0NjQpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgUmVu
ZGVyVmlkZW86OlJlbmRlclZpZGVvKEhUTUxWaWRlb0VsZW1lbgogICAgICAgICAvLyBiZXR0ZXIg
dmFsdWVzIGJlY29tZSBhdmFpbGFibGUuIElmIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIG5vdCBzZXQs
IHdlIGZhbGwgYmFjawogICAgICAgICAvLyB0byBhIGRlZmF1bHQgdmlkZW8gc2l6ZSAoMzAweDE1
MCkuCiAgICAgICAgIGlmICh2aWRlby0+aGFzQXR0cmlidXRlKHdpZHRoQXR0cikgJiYgdmlkZW8t
Pmhhc0F0dHJpYnV0ZShoZWlnaHRBdHRyKSkKLSAgICAgICAgICAgIHNldEludHJpbnNpY1NpemUo
SW50U2l6ZSh2aWRlby0+d2lkdGgoKSwgdmlkZW8tPmhlaWdodCgpKSk7CisgICAgICAgICAgICBz
ZXRJbnRyaW5zaWNTaXplKEludFNpemUodmlkZW8tPmdldEludGVncmFsQXR0cmlidXRlKHdpZHRo
QXR0ciksIHZpZGVvLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShoZWlnaHRBdHRyKSkpOwogICAgICAg
ICBlbHNlIGlmICh2aWRlby0+b3duZXJEb2N1bWVudCgpICYmIHZpZGVvLT5vd25lckRvY3VtZW50
KCktPmlzTWVkaWFEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBWaWRlbyBpbiBzdGFuZGFs
b25lIG1lZGlhIGRvY3VtZW50cyBzaG91bGQgbm90IHVzZSB0aGUgZGVmYXVsdCAzMDB4MTUwCiAg
ICAgICAgICAgICAvLyBzaXplIHNpbmNlIHRoZXkgYWxzbyBoYXZlIGF1ZGlvIHRocm93biBhdCB0
aGVtLiBCeSBzZXR0aW5nIHRoZSBpbnRyaW5zaWMK
</data>

          </attachment>
      

    </bug>

</bugzilla>