<?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>192301</bug_id>
          
          <creation_ts>2018-12-03 00:17:07 -0800</creation_ts>
          <short_desc>Remove &quot;using namespace WebKit&quot; under Source/WebKit/WebProcess/InjectedBundle/API</short_desc>
          <delta_ts>2018-12-05 20:09:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>192449</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1484277</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 00:17:07 -0800</bug_when>
    <thetext>Remove &quot;using namespace WebKit&quot; under Source/WebKit/WebProcess/InjectedBundle/API

(In reply to Darin Adler from bug #191995 comment #8)
&gt; Same applies to &quot;using namespace WebKit&quot; and those should be removed for the
&gt; same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484279</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 00:18:23 -0800</bug_when>
    <thetext>Here are commands I invoked: 

&gt; sed -i -e &apos;/using namespace WebKit;/d&apos; *.cpp
&gt; name=&quot;(toFloatRect|SnapshotOptions|SnapshotOptionsInViewCoordinates|WebPageGroupProxy|WebPageOverlay|WebRenderLayer|WebRenderObject|snapshotOptionsFromImageOptions|toFindOptions|toIntRect|toLayoutMilestones|InjectedBundlePageContextMenuClient|InjectedBundlePageEditorClient|InjectedBundlePageFormClient|InjectedBundlePageLoaderClient|InjectedBundlePageResourceLoadClient|InjectedBundlePageUIClient|InjectedBundleRangeHandle|WebContextMenu|WebContextMenuItem|WebImage|WebPage|toIntPoint|toSnapshotOptions|toImpl|InjectedBundleDOMWindowExtension|InjectedBundleHitTestResult|InjectedBundleNavigationAction|InjectedBundleNodeHandle|SecurityOriginData|WebFrame|WebInspector|toAPI|toCopiedAPI|toCopiedURLAPI|InjectedBundleClient|InjectedBundle|toWTFString|toUserScriptInjectionTime|toUserContentInjectedFrames|toUserContentInjectedFrames|InjectedBundleScriptWorld)&quot;; sed -Ei -e &quot;s/WebKit::$name\\b/\\1/g&quot; -e &quot;s/\\b$name\\b/WebKit::\\1/g&quot; -e &quot;s/\\bWebKit::$name\\.h\\b/\\1.h/g&quot; *.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484287</commentid>
    <comment_count>2</comment_count>
      <attachid>356363</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 00:28:17 -0800</bug_when>
    <thetext>Created attachment 356363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484299</commentid>
    <comment_count>3</comment_count>
      <attachid>356366</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 01:03:57 -0800</bug_when>
    <thetext>Created attachment 356366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484300</commentid>
    <comment_count>4</comment_count>
      <attachid>356363</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-03 01:05:18 -0800</bug_when>
    <thetext>Comment on attachment 356363
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356363&amp;action=review

Argument-dependent lookup means that some small number of these might not be needed. If any argument has a type in the WebKit namespace, then the function name doesn’t need to include a WebKit prefix. But that only affects a very small number of these.

&gt; Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePageBanner.cpp:35
&gt; +    return WebKit::toAPI(PageBanner::APIType);

Looks ike this needs to be WebKit::PageBanner::APIType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484302</commentid>
    <comment_count>5</comment_count>
      <attachid>356367</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 01:47:36 -0800</bug_when>
    <thetext>Created attachment 356367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484303</commentid>
    <comment_count>6</comment_count>
      <attachid>356367</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 01:51:09 -0800</bug_when>
    <thetext>Comment on attachment 356367
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356367&amp;action=review

&gt; Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundle.cpp:53
&gt; +    return WebKit::toAPI(WebKit::InjectedBundle::APIType);

Some &quot;WebKit::&quot; can not be removed even though its argument&apos;s namespace is WebKit.
For example, this &quot;WebKit::&quot; of toAPI can not be removed. 


&gt; In file included from DerivedSources\WebKit\unified-sources\UnifiedSource43.cpp:4:
&gt; ..\..\Source\WebKit\WebProcess/InjectedBundle/API/c/WKBundle.cpp(53,12):  error: use of undeclared identifier &apos;toAPI&apos;; did you mean &apos;WebKit::toAPI&apos;?
&gt;     return toAPI(WebKit::InjectedBundle::APIType);
&gt;            ^~~~~
&gt;            WebKit::toAPI
&gt; ..\..\Source\WebKit\Shared\API\c\WKSharedAPICast.h(279,17):  note: &apos;WebKit::toAPI&apos; declared here
&gt; inline WKTypeID toAPI(API::Object::Type type)
&gt;                 ^
&gt; 1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484304</commentid>
    <comment_count>7</comment_count>
      <attachid>356367</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 01:53:22 -0800</bug_when>
    <thetext>Comment on attachment 356367
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=356367&amp;action=review

&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundle.cpp:53
&gt;&gt; +    return WebKit::toAPI(WebKit::InjectedBundle::APIType);
&gt; 
&gt; Some &quot;WebKit::&quot; can not be removed even though its argument&apos;s namespace is WebKit.
&gt; For example, this &quot;WebKit::&quot; of toAPI can not be removed.

Its argument namespace is WebKit::InjectedBundle, not WebKit in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484638</commentid>
    <comment_count>8</comment_count>
      <attachid>356367</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 17:13:18 -0800</bug_when>
    <thetext>Comment on attachment 356367
Patch

Clearing flags on attachment: 356367

Committed r238832: &lt;https://trac.webkit.org/changeset/238832&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484639</commentid>
    <comment_count>9</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-03 17:13:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484641</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-03 17:14:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/46438085&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356363</attachid>
            <date>2018-12-03 00:28:17 -0800</date>
            <delta_ts>2018-12-03 01:12:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192301-20181203172816.patch</filename>
            <type>text/plain</type>
            <size>106971</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3ODM3MjNhMjU3OGU1OWE4
YmFjNzE2YTFkNjdmN2QzY2UxNDg1ZTAuLmYzZDhhMmZjYjhiYjRiYjE0MzE4MmExMWFiM2VlMDNh
YTczNzQ4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTgtMTItMDMgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgUmVtb3ZlICJ1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0IiB1bmRlciBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTIzMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmVkICJ1c2luZyBuYW1lc3BhY2UgV2ViS2l0IiBzdGF0ZW1lbnQsIGFuZCB1c2Ug
IldlYktpdDo6IgorICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGluc3RlYWQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVzdFJlc3VsdC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUlu
c3BlY3Rvci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlU2NyaXB0V29ybGQuY3BwOgorCiAyMDE4LTEyLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1BTT05dIHByb2Nlc3Mtc3dh
cHBpbmcgbWF5IG9jY3VyIGV2ZW4gdGhvdWdoIG9wZW5lciBoYXMgaGFuZGxlIHRvIG9wZW5lZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggMWNlMjUyNGVkYmFmMmZiZjFhYTViOGQ5N2VjOGE1ZTMw
Yjg3NTc1Ni4uZGI4MTk3OTBhNWVmMmZjNjM2ZTU1NTdmY2Y0ODI4ZTE5NGIzOWZhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGUuY3BwCkBAIC00OCwxNzkgKzQ4LDE3NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJU
aHJlYWRQcm94eS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlOjpBUElU
eXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpB
UElUeXBlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldENsaWVudChXS0J1bmRsZVJlZiBidW5kbGVS
ZWYsIFdLQnVuZGxlQ2xpZW50QmFzZSAqd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJl
ZiktPnNldENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEluamVjdGVkQnVuZGxlQ2xpZW50Pih3a0Ns
aWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldENsaWVudChzdGQ6Om1h
a2VfdW5pcXVlPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVDbGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVTZXRTZXJ2aWNlV29ya2VyUHJveHlDcmVhdGlvbkNhbGxiYWNrKFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgdm9pZCAoKmNhbGxiYWNrKSh1aW50NjRfdCkpCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQcm94eUNyZWF0aW9uQ2FsbGJhY2soY2Fs
bGJhY2spOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQ
cm94eUNyZWF0aW9uQ2FsbGJhY2soY2FsbGJhY2spOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5wb3N0
TWVzc2FnZSh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RNZXNzYWdlKFdlYktpdDo6
dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShXS0J1bmRsZVJl
ZiBidW5kbGVSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2Fn
ZUJvZHlSZWYsIFdLVHlwZVJlZiogcmV0dXJuRGF0YVJlZikKIHsKICAgICBSZWZQdHI8QVBJOjpP
YmplY3Q+IHJldHVybkRhdGE7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RTeW5jaHJvbm91
c01lc3NhZ2UodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2FnZUJvZHlS
ZWYpLCByZXR1cm5EYXRhKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJL
aXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOwogICAgIGlmIChyZXR1cm5E
YXRhUmVmKQotICAgICAgICAqcmV0dXJuRGF0YVJlZiA9IHRvQVBJKHJldHVybkRhdGEubGVha1Jl
ZigpKTsKKyAgICAgICAgKnJldHVybkRhdGFSZWYgPSBXZWJLaXQ6OnRvQVBJKHJldHVybkRhdGEu
bGVha1JlZigpKTsKIH0KIAogV0tDb25uZWN0aW9uUmVmIFdLQnVuZGxlR2V0QXBwbGljYXRpb25D
b25uZWN0aW9uKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9J
bXBsKGJ1bmRsZVJlZiktPndlYkNvbm5lY3Rpb25Ub1VJUHJvY2VzcygpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT53ZWJDb25uZWN0aW9uVG9V
SVByb2Nlc3MoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRP
YmplY3RzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+
Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cygpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVJlZiktPmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKTsKIH0KIAogdm9pZCBX
S0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVybmF0ZVRocmVhZEZv
ckRlYnVnZ2luZyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIGJvb2wgd2FpdFVudGlsRG9uZSkKIHsK
LSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0c09u
QWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdhaXRVbnRpbERvbmUpOworICAgIFdlYktpdDo6
dG9JbXBsKGJ1bmRsZVJlZiktPmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVy
bmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsKIH0KIAogc2l6ZV90IFdLQnVu
ZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChXS0J1bmRsZVJlZiBidW5kbGVSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChidW5kbGVSZWYpLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPmphdmFTY3JpcHRPYmplY3RzQ291
bnQoKTsKIH0KIAogdm9pZCBXS0J1bmRsZUFkZFVzZXJTY3JpcHQoV0tCdW5kbGVSZWYgYnVuZGxl
UmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLQnVuZGxlU2NyaXB0V29y
bGRSZWYgc2NyaXB0V29ybGRSZWYsIFdLU3RyaW5nUmVmIHNvdXJjZVJlZiwgV0tVUkxSZWYgdXJs
UmVmLCBXS0FycmF5UmVmIHdoaXRlbGlzdFJlZiwgV0tBcnJheVJlZiBibGFja2xpc3RSZWYsIF9X
S1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWVSZWYsIFdLVXNlckNvbnRlbnRJ
bmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lc1JlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVm
KS0+YWRkVXNlclNjcmlwdCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgdG9JbXBsKHNjcmlwdFdvcmxk
UmVmKSwgdG9XVEZTdHJpbmcoc291cmNlUmVmKSwgdG9XVEZTdHJpbmcodXJsUmVmKSwgdG9JbXBs
KHdoaXRlbGlzdFJlZiksIHRvSW1wbChibGFja2xpc3RSZWYpLCB0b1VzZXJTY3JpcHRJbmplY3Rp
b25UaW1lKGluamVjdGlvblRpbWVSZWYpLCB0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5q
ZWN0ZWRGcmFtZXNSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5hZGRVc2Vy
U2NyaXB0KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlw
dFdvcmxkUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhzb3VyY2VSZWYpLCBXZWJLaXQ6OnRvV1RG
U3RyaW5nKHVybFJlZiksIFdlYktpdDo6dG9JbXBsKHdoaXRlbGlzdFJlZiksIFdlYktpdDo6dG9J
bXBsKGJsYWNrbGlzdFJlZiksIFdlYktpdDo6dG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmpl
Y3Rpb25UaW1lUmVmKSwgV2ViS2l0Ojp0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0
ZWRGcmFtZXNSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUFkZFVzZXJTdHlsZVNoZWV0KFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VSZWYs
IFdLVVJMUmVmIHVybFJlZiwgV0tBcnJheVJlZiB3aGl0ZWxpc3RSZWYsIFdLQXJyYXlSZWYgYmxh
Y2tsaXN0UmVmLCBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXNSZWYp
CiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0KHRvSW1wbChwYWdl
R3JvdXBSZWYpLCB0b0ltcGwoc2NyaXB0V29ybGRSZWYpLCB0b1dURlN0cmluZyhzb3VyY2VSZWYp
LCB0b1dURlN0cmluZyh1cmxSZWYpLCB0b0ltcGwod2hpdGVsaXN0UmVmKSwgdG9JbXBsKGJsYWNr
bGlzdFJlZiksIHRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1lc1JlZikp
OworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0KFdlYktp
dDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwg
V2ViS2l0Ojp0b1dURlN0cmluZyhzb3VyY2VSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHVybFJl
ZiksIFdlYktpdDo6dG9JbXBsKHdoaXRlbGlzdFJlZiksIFdlYktpdDo6dG9JbXBsKGJsYWNrbGlz
dFJlZiksIFdlYktpdDo6dG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJhbWVz
UmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1vdmVVc2VyU2NyaXB0KFdLQnVuZGxlUmVmIGJ1
bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTY3JpcHQodG9JbXBsKHBhZ2VHcm91cFJlZiksIHRvSW1w
bChzY3JpcHRXb3JsZFJlZiksIHRvV1RGU3RyaW5nKHVybFJlZikpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTY3JpcHQoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3Vw
UmVmKSwgV2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5n
KHVybFJlZikpOwogfQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlVXNlclN0eWxlU2hlZXQoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWYgc2NyaXB0V29ybGRSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAg
ICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlVXNlclN0eWxlU2hlZXQodG9JbXBsKHBhZ2VHcm91
cFJlZiksIHRvSW1wbChzY3JpcHRXb3JsZFJlZiksIHRvV1RGU3RyaW5nKHVybFJlZikpOworICAg
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTdHlsZVNoZWV0KFdlYktpdDo6
dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwgV2Vi
S2l0Ojp0b1dURlN0cmluZyh1cmxSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92ZVVzZXJT
Y3JpcHRzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmKQogewotICAgIHRv
SW1wbChidW5kbGVSZWYpLT5yZW1vdmVVc2VyU2NyaXB0cyh0b0ltcGwocGFnZUdyb3VwUmVmKSwg
dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+
cmVtb3ZlVXNlclNjcmlwdHMoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSwgV2ViS2l0Ojp0
b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJlZikKIHsKLSAgICB0
b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlVXNlclN0eWxlU2hlZXRzKHRvSW1wbChwYWdlR3JvdXBS
ZWYpLCB0b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVS
ZWYpLT5yZW1vdmVVc2VyU3R5bGVTaGVldHMoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSwg
V2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92
ZUFsbFVzZXJDb250ZW50KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5yZW1vdmVBbGxVc2Vy
Q29udGVudCh0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxl
UmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnQoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihX
S0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwg
V0tTdHJpbmdSZWYgcHJlZmVyZW5jZSwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5k
bGVSZWYpLT5vdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcih0b0ltcGwocGFnZUdy
b3VwUmVmKSwgdG9XVEZTdHJpbmcocHJlZmVyZW5jZSksIGVuYWJsZWQpOworICAgIFdlYktpdDo6
dG9JbXBsKGJ1bmRsZVJlZiktPm92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKFdl
YktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9XVEZTdHJpbmcocHJlZmVyZW5j
ZSksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHModG9JbXBsKHBhZ2VHcm91cFJlZiksIGVu
YWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldEFsbG93VW5pdmVyc2Fs
QWNjZXNzRnJvbUZpbGVVUkxzKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29s
IGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0
b0ltcGwoYnVuZGxlUmVmKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFdlYktpdDo6
dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxs
b3dTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxTKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5k
bGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIG5lZWRzUXVpcmspCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnNldE5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBuZWVkc1F1aXJrKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5zZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayhXZWJLaXQ6OnRv
SW1wbChwYWdlR3JvdXBSZWYpLCBuZWVkc1F1aXJrKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldE1p
bmltdW1Mb2dpY2FsRm9udFNpemUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIGludCBzaXplKQogewotICAgIHRvSW1wbChidW5kbGVSZWYp
LT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBzaXplKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIHNpemUpOwogfQogCiB2b2lkIFdLQnVuZGxl
U2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxl
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChi
dW5kbGVSZWYpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQog
CiB2b2lkIFdLQnVuZGxlU2V0QXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQoV0tCdW5kbGVSZWYg
YnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0QXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJs
ZWQodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVJlZiktPnNldEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBh
Z2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5kbGVSZWYp
LT5zZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBl
bmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRKYXZhU2NyaXB0Q2Fu
QWNjZXNzQ2xpcGJvYXJkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwog
fQogCiB2b2lkIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXS0J1bmRsZVJlZiBi
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVk
KQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVS
ZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJl
ZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJp
bGl0eU1vZGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0VXNl
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFdLQnVuZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoV0tCdW5kbGVSZWYgYnVuZGxlUmVm
LCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodG9JbXBsKHBhZ2VH
cm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFBv
cHVwQmxvY2tpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdlYktpdDo6dG9J
bXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJl
ZiktPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5h
YmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0U3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFdLQnVuZGxlQWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoV0tCdW5kbGVSZWYgYnVu
ZGxlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0
aW9uU3ViZG9tYWlucykKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+YWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkodG9XVEZTdHJpbmcoc291cmNlT3JpZ2luKSwgdG9XVEZTdHJpbmcoZGVz
dGluYXRpb25Qcm90b2NvbCksIHRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uSG9zdCksIGFsbG93RGVz
dGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5hZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShXZWJLaXQ6OnRvV1RGU3RyaW5nKHNvdXJjZU9yaWdp
biksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2NvbCksIFdlYktpdDo6dG9X
VEZTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwog
fQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIFdLU3RyaW5nUmVmIGRl
c3RpbmF0aW9uUHJvdG9jb2wsIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkodG9XVEZTdHJpbmcoc291cmNlT3JpZ2luKSwgdG9X
VEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2NvbCksIHRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uSG9z
dCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShXZWJLaXQ6OnRvV1RGU3Ry
aW5nKHNvdXJjZU9yaWdpbiksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2Nv
bCksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnMpOwogfQogCiB2b2lkIFdLQnVuZGxlUmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVz
ZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVm
KS0+cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVTZXRB
c3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdL
QnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRv
SW1wbChidW5kbGVSZWYpLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCh0b0lt
cGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVm
KS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoV2ViS2l0Ojp0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgZW5hYmxlZCk7CiB9CiAKIFdLQXJyYXlSZWYgV0tCdW5kbGVHZXRMaXZlRG9j
dW1lbnRVUkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmLCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cFBhZ2VzKQogewotICAg
IGF1dG8gbGl2ZURvY3VtZW50cyA9IHRvSW1wbChidW5kbGVSZWYpLT5saXZlRG9jdW1lbnRVUkxz
KHRvSW1wbChwYWdlR3JvdXBSZWYpLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdlcyk7
CisgICAgYXV0byBsaXZlRG9jdW1lbnRzID0gV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+bGl2
ZURvY3VtZW50VVJMcyhXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBleGNsdWRlRG9jdW1l
bnRzSW5QYWdlR3JvdXBQYWdlcyk7CiAKICAgICBhdXRvIGxpdmVVUkxzID0gYWRvcHRXSyhXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKIApAQCAtMjMxLDcgKzIyOSw3IEBAIFdLQXJyYXlSZWYgV0tC
dW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQ
YWdlR3JvdXBSCiAgICAgICAgIGF1dG8gZG9jdW1lbnRVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7CiAKICAgICAgICAgYXV0byBkb2N1bWVudElE
VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGl0LmtleSkpOwotICAgICAgICBhdXRvIGRv
Y3VtZW50VVJMVmFsdWUgPSBhZG9wdFdLKHRvQ29waWVkQVBJKGl0LnZhbHVlKSk7CisgICAgICAg
IGF1dG8gZG9jdW1lbnRVUkxWYWx1ZSA9IGFkb3B0V0soV2ViS2l0Ojp0b0NvcGllZEFQSShpdC52
YWx1ZSkpOwogCiAgICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odXJsSW5mby5nZXQoKSwgZG9j
dW1lbnRJREtleS5nZXQoKSwgZG9jdW1lbnRJRFZhbHVlLmdldCgpKTsKICAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbSh1cmxJbmZvLmdldCgpLCBkb2N1bWVudFVSTEtleS5nZXQoKSwgZG9jdW1l
bnRVUkxWYWx1ZS5nZXQoKSk7CkBAIC0yNDQsNyArMjQyLDcgQEAgV0tBcnJheVJlZiBXS0J1bmRs
ZUdldExpdmVEb2N1bWVudFVSTHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VH
cm91cFIKIAogdm9pZCBXS0J1bmRsZVJlcG9ydEV4Y2VwdGlvbihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiBleGNlcHRpb24pCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4
Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6
OnJlcG9ydEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdLQnVuZGxl
Q2xlYXJBbGxEYXRhYmFzZXMoV0tCdW5kbGVSZWYpCkBAIC0yNTUsNyArMjUzLDcgQEAgdm9pZCBX
S0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKFdLQnVuZGxlUmVmKQogdm9pZCBXS0J1bmRsZVNldERh
dGFiYXNlUXVvdGEoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCB1aW50NjRfdCBxdW90YSkKIHsKICAg
ICAvLyBIaXN0b3JpY2FsbHksIHdlJ3ZlIHVzZWQgdGhlIGZvbGxvd2luZyAoc29tZXdoYXQgbm9u
c2Vuc2ljYWwpIHN0cmluZyBmb3IgdGhlIGRhdGFiYXNlSWRlbnRpZmllciBvZiBsb2NhbCBmaWxl
cy4KLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLnNldFF1b3RhKCpT
ZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoImZpbGVfXzAiKSwgcXVv
dGEpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9uKCkuc2V0UXVvdGEo
KldlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKCJmaWxl
X18wIiksIHF1b3RhKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbGVhc2VNZW1vcnkoV0tCdW5kbGVS
ZWYpCkBAIC0yNjUsNTcgKzI2Myw1NyBAQCB2b2lkIFdLQnVuZGxlUmVsZWFzZU1lbW9yeShXS0J1
bmRsZVJlZikKIAogV0tEYXRhUmVmIFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXko
V0tCdW5kbGVSZWYgYnVuZGxlLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBkYXRh
KQogewotICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKGJ1bmRsZSktPmNyZWF0ZVdlYkRhdGFGcm9t
VWludDhBcnJheShjb250ZXh0LCBkYXRhKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChidW5kbGUpLT5jcmVhdGVXZWJEYXRhRnJvbVVpbnQ4QXJy
YXkoY29udGV4dCwgZGF0YSkubGVha1JlZigpKTsKIH0KIAogaW50IFdLQnVuZGxlTnVtYmVyT2ZQ
YWdlcyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIGRv
dWJsZSBwYWdlV2lkdGhJblBpeGVscywgZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscykKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKGJ1bmRsZVJlZiktPm51bWJlck9mUGFnZXModG9JbXBsKGZyYW1lUmVm
KSwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscyk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPm51bWJlck9mUGFnZXMoV2ViS2l0Ojp0b0ltcGwoZnJh
bWVSZWYpLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKTsKIH0KIAogaW50
IFdLQnVuZGxlUGFnZU51bWJlckZvckVsZW1lbnRCeUlkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tTdHJpbmdSZWYgaWRSZWYsIGRvdWJsZSBwYWdl
V2lkdGhJblBpeGVscywgZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscykKIHsKLSAgICByZXR1cm4g
dG9JbXBsKGJ1bmRsZVJlZiktPnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCh0b0ltcGwoZnJhbWVS
ZWYpLCB0b1dURlN0cmluZyhpZFJlZiksIHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5Q
aXhlbHMpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wYWdlTnVtYmVy
Rm9yRWxlbWVudEJ5SWQoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLCBXZWJLaXQ6OnRvV1RGU3Ry
aW5nKGlkUmVmKSwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscyk7CiB9CiAK
IFdLU3RyaW5nUmVmIFdLQnVuZGxlUGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoV0tCdW5kbGVS
ZWYgYnVuZGxlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBpbnQgcGFnZUluZGV4LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50
IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJ
KHRvSW1wbChidW5kbGVSZWYpLT5wYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyh0b0ltcGwoZnJh
bWVSZWYpLCBwYWdlSW5kZXgsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQs
IG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVk
QVBJKFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwgcGFnZUluZGV4LCB3aWR0aCwgaGVpZ2h0LCBtYXJn
aW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpKTsKIH0KIAogYm9v
bCBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lUmVmLCBpbnQgcGFnZUluZGV4KQogewotICAgIHJldHVybiB0b0ltcGwo
YnVuZGxlUmVmKS0+aXNQYWdlQm94VmlzaWJsZSh0b0ltcGwoZnJhbWVSZWYpLCBwYWdlSW5kZXgp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5pc1BhZ2VCb3hWaXNpYmxl
KFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwgcGFnZUluZGV4KTsKIH0KIAogYm9vbCBXS0J1bmRs
ZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFdLQnVuZGxlUmVmKQogewotICAgIHJldHVybiBJbmpl
Y3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBX
S0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIGxvY2F0aW9uKQog
ewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHRvSW1w
bChwYWdlR3JvdXBSZWYpLCB0b1dURlN0cmluZyhsb2NhdGlvbikpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oV2ViS2l0Ojp0b0ltcGwo
cGFnZUdyb3VwUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhsb2NhdGlvbikpOwogfQogCiB2b2lk
IFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihXS0J1bmRsZVJlZiBidW5kbGVS
ZWYsIFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBvcmlnaW5TdHJpbmdSZWYs
IGJvb2wgYWxsb3dlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbih0b0ltcGwocGFnZVJlZiksIHRvV1RGU3RyaW5nKG9yaWdpblN0cmluZ1Jl
ZiksIGFsbG93ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb24oV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiksIFdlYktpdDo6dG9XVEZT
dHJpbmcob3JpZ2luU3RyaW5nUmVmKSwgYWxsb3dlZCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1v
dmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5yZW1vdmVB
bGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyh0b0ltcGwocGFnZVJlZikpOworICAgIFdlYktp
dDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25z
KFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpKTsKIH0KIAogdWludDY0X3QgV0tCdW5kbGVHZXRXZWJO
b3RpZmljYXRpb25JRChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGJ1bmRsZVJl
ZiktPndlYk5vdGlmaWNhdGlvbklEKGNvbnRleHQsIG5vdGlmaWNhdGlvbik7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPndlYk5vdGlmaWNhdGlvbklEKGNvbnRleHQsIG5v
dGlmaWNhdGlvbik7CiB9CiAKIHZvaWQgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9v
bCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHModG9JbXBsKHBhZ2VSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChidW5kbGVSZWYpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlQ2xlYXJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKFdLQnVuZGxlUmVmKQpAQCAtMzM2LDYgKzMzNCw2IEBAIHZvaWQgV0tCdW5k
bGVFeHRlbmRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0Fy
cmF5UmVmIGNsYXNzCiAgICAgaWYgKCFjbGFzc0xpc3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHRvSW1wbChidW5kbGUpLT5leHRlbmRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIoKmNsYXNzTGlz
dCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlKS0+ZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyKCpjbGFzc0xpc3QpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCA0MmMyZThhMzZjNzc2NTFmNzFlYjhlYTJlYzkz
Y2RkNzdhNDgwMWU1Li4xZjA2NzMzZGRkMmI1MTU5MGJkYjc3OGExOTFkZmEyMmRiNWFiYWIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKIAogV0tUeXBlSUQgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RHZXRUeXBlSUQo
KQogewotICAgIHJldHVybiB0b0FQSShBUEk6Ok9iamVjdDo6VHlwZTo6TnVsbCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOwogfQogCiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDb3B5SXRlbUF0
SW5kZXgoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZiwgaW50IGluZGV4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcAppbmRl
eCA1YzhkOThlNmMwODE5NjkyYmQ5NzlkNDRjOGY4ODNhNjgxNjA4NjRmLi5kOGUzYTlmMjMxODdl
ZmIzYjViMDc2NGExNGIxMmQ1ZThjNTBiMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcApAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNs
dWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogCi11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1H
ZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShBUEk6Ok9iamVjdDo6VHlwZTo6TnVsbCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOwogfQog
CiBib29sIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzU2FtZShXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZjEsIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBp
dGVtUmVmMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uY3BwCmluZGV4IGZjMzgxZjQ2YTY0MWZhMDc3NWMzZTU0NjQ4NjBkOWUwNGY0ODNlMmIuLmM5
NjMxMTUxNzJmNTI0OTA5MDNkNWViOWVlYzdhZmQ4MjU2YWM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRv
d0V4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcApAQCAtMzEsMjYgKzMxLDI0
IEBACiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb25HZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJbmplY3RlZEJ1bmRsZURP
TVdpbmRvd0V4dGVuc2lvbjo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6QVBJVHlwZSk7CiB9CiAKIFdL
QnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uQ3Jl
YXRlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQp
CiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uPiBleHRlbnNp
b24gPSBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6Y3JlYXRlKHRvSW1wbChmcmFt
ZSksIHRvSW1wbCh3b3JsZCkpOwotICAgIHJldHVybiB0b0FQSShleHRlbnNpb24ubGVha1JlZigp
KTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbj4g
ZXh0ZW5zaW9uID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6Y3Jl
YXRlKFdlYktpdDo6dG9JbXBsKGZyYW1lKSwgV2ViS2l0Ojp0b0ltcGwod29ybGQpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSShleHRlbnNpb24ubGVha1JlZigpKTsKIH0KIAogV0tCdW5kbGVG
cmFtZVJlZiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbkdldEZyYW1lKFdLQnVuZGxlRE9NV2lu
ZG93RXh0ZW5zaW9uUmVmIGV4dGVuc2lvbikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGV4
dGVuc2lvbiktPmZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9J
bXBsKGV4dGVuc2lvbiktPmZyYW1lKCkpOwogfQogCiBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIFdL
QnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uR2V0U2NyaXB0V29ybGQoV0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb25SZWYgZXh0ZW5zaW9uKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZXh0ZW5z
aW9uKS0+d29ybGQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwo
ZXh0ZW5zaW9uKS0+d29ybGQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcApp
bmRleCA3ODVkMWE1ZWI5NTM2MmU0OWI4Y2U2ZWVjZjZiMDliMjdiYWM4ZjY5Li4wYWM5NTQ1NjRj
NjM4M2FjMGY5YjFhOTFiNDAwMGJkMTUwZDIxMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRnJh
bWUuY3BwCkBAIC00NSwzNiArNDUsMzQgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
CiBXS1R5cGVJRCBXS0J1bmRsZUZyYW1lR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEko
V2ViRnJhbWU6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2Vi
RnJhbWU6OkFQSVR5cGUpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5p
c01haW5GcmFtZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmlzTWFp
bkZyYW1lKCk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVGcmFtZUdldFBhcmVudEZy
YW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1w
bChmcmFtZVJlZiktPnBhcmVudEZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdl
YktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGFyZW50RnJhbWUoKSk7CiB9CiAKIFdLVVJMUmVmIFdL
QnVuZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQ29waWVkVVJMQVBJKHRvSW1wbChmcmFtZVJlZiktPnVybCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPnVybCgpKTsK
IH0KIAogV0tVUkxSZWYgV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoZnJh
bWVSZWYpLT5wcm92aXNpb25hbFVSTCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVS
TEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPnByb3Zpc2lvbmFsVVJMKCkpOwogfQogCiBX
S0ZyYW1lTG9hZFN0YXRlIFdLQnVuZGxlRnJhbWVHZXRGcmFtZUxvYWRTdGF0ZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lUmVmKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSB0b0lt
cGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIGtXS0ZyYW1lTG9hZFN0YXRlRmluaXNoZWQ7CiAKQEAgLTkz
LDE0OSArOTEsMTQ5IEBAIFdLRnJhbWVMb2FkU3RhdGUgV0tCdW5kbGVGcmFtZUdldEZyYW1lTG9h
ZFN0YXRlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiAKIFdLQXJyYXlSZWYgV0tCdW5kbGVG
cmFtZUNvcHlDaGlsZEZyYW1lcyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJl
dHVybiB0b0FQSSgmdG9JbXBsKGZyYW1lUmVmKS0+Y2hpbGRGcmFtZXMoKS5sZWFrUmVmKCkpOyAg
ICAKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5j
aGlsZEZyYW1lcygpLmxlYWtSZWYoKSk7ICAgIAogfQogCiBKU0dsb2JhbENvbnRleHRSZWYgV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dCgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dCgpOwogfQogCiBXS0J1bmRsZUZy
YW1lUmVmIFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChKU0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViRnJhbWU6OmZyYW1lRm9yQ29udGV4dChjb250
ZXh0KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpXZWJGcmFtZTo6ZnJhbWVG
b3JDb250ZXh0KGNvbnRleHQpKTsKIH0KIAogSlNHbG9iYWxDb250ZXh0UmVmIFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYs
IFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChm
cmFtZVJlZiktPmpzQ29udGV4dEZvcldvcmxkKHRvSW1wbCh3b3JsZFJlZikpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dEZvcldvcmxkKFdlYktpdDo6dG9J
bXBsKHdvcmxkUmVmKSk7CiB9CiAKIEpTVmFsdWVSZWYgV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRXcmFwcGVyRm9yTm9kZUZvcldvcmxkKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdv
cmxkUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5qc1dyYXBwZXJGb3JXb3Js
ZCh0b0ltcGwobm9kZUhhbmRsZVJlZiksIHRvSW1wbCh3b3JsZFJlZikpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzV3JhcHBlckZvcldvcmxkKFdlYktpdDo6dG9JbXBs
KG5vZGVIYW5kbGVSZWYpLCBXZWJLaXQ6OnRvSW1wbCh3b3JsZFJlZikpOwogfQogCiBKU1ZhbHVl
UmVmIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZUhhbmRs
ZVJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZFJlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKGZyYW1lUmVmKS0+anNXcmFwcGVyRm9yV29ybGQodG9JbXBsKHJhbmdlSGFuZGxlUmVmKSwg
dG9JbXBsKHdvcmxkUmVmKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+
anNXcmFwcGVyRm9yV29ybGQoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLCBXZWJLaXQ6
OnRvSW1wbCh3b3JsZFJlZikpOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUZyYW1lQ29weU5h
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEko
dG9JbXBsKGZyYW1lUmVmKS0+bmFtZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQ
SShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPm5hbWUoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlRnJhbWVDb3B5Q291bnRlclZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIEpT
T2JqZWN0UmVmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChmcmFt
ZVJlZiktPmNvdW50ZXJWYWx1ZShlbGVtZW50KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3Bp
ZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3VudGVyVmFsdWUoZWxlbWVudCkpOwog
fQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUZyYW1lQ29weUlubmVyVGV4dChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYp
LT5pbm5lclRleHQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0
b0ltcGwoZnJhbWVSZWYpLT5pbm5lclRleHQoKSk7CiB9CiAKIHVuc2lnbmVkIFdLQnVuZGxlRnJh
bWVHZXRQZW5kaW5nVW5sb2FkQ291bnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+cGVuZGluZ1VubG9hZENvdW50KCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGVuZGluZ1VubG9hZENvdW50KCk7CiB9CiAK
IFdLQnVuZGxlUGFnZVJlZiBXS0J1bmRsZUZyYW1lR2V0UGFnZShXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5wYWdlKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGFnZSgp
KTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1lQ2xlYXJPcGVuZXIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gdG9JbXBsKGZyYW1l
UmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFdlYktp
dDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CiAgICAgaWYgKGNvcmVGcmFtZSkKICAg
ICAgICAgY29yZUZyYW1lLT5sb2FkZXIoKS5zZXRPcGVuZXIoMCk7CiB9CiAKIHZvaWQgV0tCdW5k
bGVGcmFtZVN0b3BMb2FkaW5nKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgdG9J
bXBsKGZyYW1lUmVmKS0+c3RvcExvYWRpbmcoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TGF5
ZXJUcmVlQXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChmcmFtZVJlZiktPmxheWVyVHJlZUFzVGV4dCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmxheWVyVHJl
ZUFzVGV4dCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQWxsb3dzRm9sbG93aW5nTGluayhX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChmcmFtZVJlZiktPmFsbG93c0ZvbGxvd2luZ0xpbmsoVVJMKFVSTCgpLCB0b1dURlN0
cmluZyh1cmxSZWYpKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+YWxs
b3dzRm9sbG93aW5nTGluayhVUkwoVVJMKCksIFdlYktpdDo6dG9XVEZTdHJpbmcodXJsUmVmKSkp
OwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVIYW5kbGVzUGFnZVNjYWxlR2VzdHVyZShXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYp
LT5oYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKCkpOwogfQog
CiBXS1JlY3QgV0tCdW5kbGVGcmFtZUdldENvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+Y29udGVudEJv
dW5kcygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPmNvbnRlbnRCb3VuZHMoKSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZUZyYW1lR2V0VmlzaWJs
ZUNvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT52aXNpYmxlQ29udGVu
dEJvdW5kcygpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJv
dW5kc0V4Y2x1ZGluZ1Njcm9sbGJhcnMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNs
dWRpbmdTY3JvbGxiYXJzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9J
bXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNsdWRpbmdTY3JvbGxiYXJzKCkp
OwogfQogCiBXS1NpemUgV0tCdW5kbGVGcmFtZUdldFNjcm9sbE9mZnNldChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5zY3Jv
bGxPZmZzZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoZnJh
bWVSZWYpLT5zY3JvbGxPZmZzZXQoKSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVGcmFtZUhhc0hvcml6
b250YWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKGZyYW1lUmVmKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTsKIH0KIAog
Ym9vbCBXS0J1bmRsZUZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+aGFzVmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5oYXNWZXJ0aWNh
bFNjcm9sbGJhcigpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVHZXREb2N1bWVudEJhY2tncm91
bmRDb2xvcihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBkb3VibGUqIHJlZCwgZG91YmxlKiBn
cmVlbiwgZG91YmxlKiBibHVlLCBkb3VibGUqIGFscGhhKQogewotICAgIHJldHVybiB0b0ltcGwo
ZnJhbWVSZWYpLT5nZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Z2V0RG9jdW1lbnRC
YWNrZ3JvdW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiBXS1N0cmluZ1Jl
ZiBXS0J1bmRsZUZyYW1lQ29weVN1Z2dlc3RlZEZpbGVuYW1lRm9yUmVzb3VyY2VXaXRoVVJMKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAgICByZXR1cm4g
dG9Db3BpZWRBUEkodG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVkRmlsZW5hbWVGb3JSZXNvdXJj
ZVdpdGhVUkwoVVJMKFVSTCgpLCB0b1dURlN0cmluZyh1cmxSZWYpKSkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVkRmls
ZW5hbWVGb3JSZXNvdXJjZVdpdGhVUkwoVVJMKFVSTCgpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHVy
bFJlZikpKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JS
ZXNvdXJjZVdpdGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgdXJsUmVm
KQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5taW1lVHlwZUZv
clJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHVybFJlZikpKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5taW1l
VHlwZUZvclJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIFdlYktpdDo6dG9XVEZTdHJpbmcodXJs
UmVmKSkpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQ29udGFpbnNBbnlGb3JtRWxlbWVudHMo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVm
KS0+Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1FbGVtZW50cygpOwogfQogCiBib29sIFdLQnVuZGxl
RnJhbWVDb250YWluc0FueUZvcm1Db250cm9scyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1Db250cm9scygp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmNvbnRhaW5zQW55Rm9ybUNv
bnRyb2xzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24oV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tTdHJpbmdSZWYgZGlyZWN0aW9uUmVmKQogewotICAgIHRv
SW1wbChmcmFtZVJlZiktPnNldFRleHREaXJlY3Rpb24odG9XVEZTdHJpbmcoZGlyZWN0aW9uUmVm
KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5zZXRUZXh0RGlyZWN0aW9uKFdlYktp
dDo6dG9XVEZTdHJpbmcoZGlyZWN0aW9uUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVNl
dEFjY2Vzc2libGVOYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLU3RyaW5nUmVmIGFj
Y2Vzc2libGVOYW1lUmVmKQogewotICAgIHRvSW1wbChmcmFtZVJlZiktPnNldEFjY2Vzc2libGVO
YW1lKHRvV1RGU3RyaW5nKGFjY2Vzc2libGVOYW1lUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5zZXRBY2Nlc3NpYmxlTmFtZShXZWJLaXQ6OnRvV1RGU3RyaW5nKGFjY2Vzc2li
bGVOYW1lUmVmKSk7CiB9CiAKIFdLRGF0YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKQEAgLTI0Niw3ICsyNDQsNyBAQCBXS0RhdGFSZWYg
V0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiBX
S0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlRmlsdGVyaW5nU3ViZnJhbWVzKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLQnVuZGxlRnJhbWVGcmFtZUZpbHRlckNhbGxiYWNr
IGZyYW1lRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IHRvSW1wbChmcmFtZVJlZiktPndl
YkFyY2hpdmVEYXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOworICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGRhdGEgPSBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPndlYkFyY2hpdmVE
YXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOwogICAgIGlmIChkYXRhKQogICAgICAg
ICByZXR1cm4gV0tEYXRhQ3JlYXRlKENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSksIENGRGF0
YUdldExlbmd0aChkYXRhLmdldCgpKSk7CiAjZWxzZQpAQCAtMjYwLDcgKzI1OCw3IEBAIFdLRGF0
YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmVGaWx0ZXJpbmdTdWJmcmFtZXMoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZVJlCiAKIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIFdlYkNvcmU6OkZyYW1l
KiBjb3JlRnJhbWUgPSB0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogY29yZUZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUo
KTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI2OSwy
MSArMjY3LDIxIEBAIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogCiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgV0tC
dW5kbGVGcmFtZUNyZWF0ZUhpdFRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwg
V0tQb2ludCBwb2ludCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+aGl0
VGVzdCh0b0ludFBvaW50KHBvaW50KSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhpdFRlc3QoV2ViS2l0Ojp0b0ludFBvaW50
KHBvaW50KSkubGVha1JlZigpKTsKIH0KIAogV0tTZWN1cml0eU9yaWdpblJlZiBXS0J1bmRsZUZy
YW1lQ29weVNlY3VyaXR5T3JpZ2luKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IHRvSW1wbChmcmFtZVJlZiktPmNvcmVGcmFtZSgp
OworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPmNvcmVGcmFtZSgpOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiB0b0NvcGllZEFQSSgmY29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSSgmY29yZUZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1lRm9j
dXMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29y
ZUZyYW1lID0gdG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVzdFJl
c3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAppbmRleCA2OTMzNDNjNzRmNmEwOTk1Y2ExMGY5NTQz
NTFmOWIyZWQyNzBlYjc2Li4wOTZlNWZkMTc0ODc4MjI3NjBjZDEzYjllYTQ0MWFkNWVkMzZiNjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAtMzMs
MTAyICszMywxMDAgQEAKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlSGl0VGVz
dFJlc3VsdEdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OkFQSVR5cGUpOwogfQogCiBXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoV0tCdW5kbGVIaXRU
ZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bm9k
ZUhhbmRsZSgpOwotICAgIHJldHVybiB0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAg
UmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2Vi
S2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm5vZGVIYW5kbGUoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5VVJMRWxlbWVudEhhbmRsZShXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiB1cmxFbGVtZW50Tm9kZUhhbmRsZSA9IHRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+dXJsRWxlbWVudEhhbmRsZSgpOwotICAgIHJldHVybiB0b0FQSSh1cmxFbGVt
ZW50Tm9kZUhhbmRsZS5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gdXJsRWxlbWVudE5vZGVIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChoaXRU
ZXN0UmVzdWx0UmVmKS0+dXJsRWxlbWVudEhhbmRsZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRv
QVBJKHVybEVsZW1lbnROb2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVS
ZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0R2V0RnJhbWUoV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVm
IGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChoaXRUZXN0UmVz
dWx0UmVmKS0+ZnJhbWUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPmZyYW1lKCkpOwogfQogCiBXS0J1bmRsZUZyYW1lUmVmIFdL
QnVuZGxlSGl0VGVzdFJlc3VsdEdldFRhcmdldEZyYW1lKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJl
ZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPnRhcmdldEZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktp
dDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT50YXJnZXRGcmFtZSgpKTsKIH0KIAogV0tVUkxS
ZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlSW1hZ2VVUkwoV0tCdW5kbGVIaXRU
ZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJM
QVBJKHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0
UmVmKS0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKIH0KIAogV0tVUkxSZWYgV0tCdW5kbGVIaXRUZXN0
UmVzdWx0Q29weUFic29sdXRlUERGVVJMKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0
UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPmFic29sdXRlUERGVVJMKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVk
VVJMQVBJKFdlYktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZVBERlVSTCgp
KTsKIH0KIAogV0tVUkxSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlTGlua1VS
TChXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZUxpbmtV
UkwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwo
aGl0VGVzdFJlc3VsdFJlZiktPmFic29sdXRlTGlua1VSTCgpKTsKIH0KIAogV0tVUkxSZWYgV0tC
dW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlTWVkaWFVUkwoV0tCdW5kbGVIaXRUZXN0UmVz
dWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKHRv
SW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVNZWRpYVVSTCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+
YWJzb2x1dGVNZWRpYVVSTCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRNZWRp
YUlzSW5GdWxsc2NyZWVuKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVm
KQogewotICAgIHJldHVybiB0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSXNJbkZ1bGxz
Y3JlZW4oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1l
ZGlhSXNJbkZ1bGxzY3JlZW4oKTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRNZWRp
YUhhc0F1ZGlvKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSGFzQXVkaW8oKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSGFzQXVkaW8o
KTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRJc0Rvd25sb2FkYWJsZU1lZGlhKFdL
QnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0
b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzRG93bmxvYWRhYmxlTWVkaWEoKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzRG93bmxvYWRhYmxlTWVkaWEo
KTsKIH0KIAogV0tCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlIFdLQnVuZGxlSGl0VGVzdFJl
c3VsdEdldE1lZGlhVHlwZShXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJl
ZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5tZWRpYVR5
cGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPm1lZGlhVHlwZSgpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlSGl0VGVzdFJlc3Vs
dEdldEltYWdlUmVjdChXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikK
IHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5pbWFnZVJlY3Qo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3Vs
dFJlZiktPmltYWdlUmVjdCgpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1
bHRDb3B5SW1hZ2UoV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7
Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVm
KS0+aW1hZ2UoKTsKLSAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKKyAgICBS
ZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+aW1hZ2UoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSh3ZWJJbWFnZS5s
ZWFrUmVmKCkpOwogfQogCiBib29sIFdLQnVuZGxlSGl0VGVzdFJlc3VsdEdldElzU2VsZWN0ZWQo
V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNTZWxlY3RlZCgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNTZWxlY3RlZCgpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5TGlua0xhYmVsKFdLQnVuZGxlSGl0VGVzdFJl
c3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtMYWJlbCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bGlua0xhYmVsKCkp
OwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5TGlua1RpdGxlKFdL
QnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0
b0NvcGllZEFQSSh0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtUaXRsZSgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVm
KS0+bGlua1RpdGxlKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRD
b3B5TGlua1N1Z2dlc3RlZEZpbGVuYW1lKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0
UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoaGl0VGVzdFJlc3Vs
dFJlZiktPmxpbmtTdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0Nv
cGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bGlua1N1Z2dlc3RlZEZp
bGVuYW1lKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUluc3BlY3Rvci5jcHAKaW5kZXgg
NTVlYjNkYmMwODc3NzFkYmNhZDhiNDJmMjJhZTkzNjFmYTgyNjgwNi4uZmE5NGFmOTZhODE0NDY1
MTc4NTgyNGM2NTJhN2U0YTg2MzU4OTEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSW5zcGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVJbnNw
ZWN0b3IuY3BwCkBAIC0zMCwzNCArMzAsMzIgQEAKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3Qu
aCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LQogV0tUeXBlSUQgV0tCdW5kbGVJbnNwZWN0b3JHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0
b0FQSShXZWJJbnNwZWN0b3I6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdl
YktpdDo6V2ViSW5zcGVjdG9yOjpBUElUeXBlKTsKIH0KIAogdm9pZCBXS0J1bmRsZUluc3BlY3Rv
clNob3coV0tCdW5kbGVJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChp
bnNwZWN0b3JSZWYpLT5zaG93KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+
c2hvdygpOwogfQogCiB2b2lkIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2UoV0tCdW5kbGVJbnNwZWN0
b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5jbG9zZSgp
OworICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZiktPmNsb3NlKCk7CiB9CiAKIHZvaWQg
V0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVJbnNwZWN0b3JS
ZWYgaW5zcGVjdG9yUmVmLCBXS1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgdG9JbXBsKGluc3Bl
Y3RvclJlZiktPmV2YWx1YXRlU2NyaXB0Rm9yVGVzdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5ldmFsdWF0ZVNjcmlwdEZvclRlc3QoV2Vi
S2l0Ojp0b1dURlN0cmluZyhzY3JpcHQpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUluc3BlY3RvclNl
dFBhZ2VQcm9maWxpbmdFbmFibGVkKFdLQnVuZGxlSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZiwg
Ym9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zaG93VGltZWxpbmVz
KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvd1RpbWVsaW5lcygpOwog
CiAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zdGFydFBh
Z2VQcm9maWxpbmcoKTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c3Rh
cnRQYWdlUHJvZmlsaW5nKCk7CiAgICAgZWxzZQotICAgICAgICB0b0ltcGwoaW5zcGVjdG9yUmVm
KS0+c3RvcFBhZ2VQcm9maWxpbmcoKTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9y
UmVmKS0+c3RvcFBhZ2VQcm9maWxpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5hdmlnYXRpb25BY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKaW5kZXggYTNjMzYzZTE5NDJjZWMwNDc5NTVmOTJiMDMy
NzBhOTU2ZGFmZTk3Yi4uMDc0ZGZlOTE0Y2M0MWU0YmQyZmNlNDMzNzIzZTM5MzkwOTdlYWZjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKQEAg
LTMzLDUxICszMyw0OSBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJbmpl
Y3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uOjpBUElUeXBlKTsK
IH0KIAogV0tGcmFtZU5hdmlnYXRpb25UeXBlIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5h
dmlnYXRpb25UeXBlKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9u
UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm5h
dmlnYXRpb25UeXBlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBs
KG5hdmlnYXRpb25BY3Rpb25SZWYpLT5uYXZpZ2F0aW9uVHlwZSgpKTsKIH0KIAogV0tFdmVudE1v
ZGlmaWVycyBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRFdmVudE1vZGlmaWVycyhXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkodG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5tb2RpZmllcnMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm1v
ZGlmaWVycygpKTsKIH0KIAogV0tFdmVudE1vdXNlQnV0dG9uIFdLQnVuZGxlTmF2aWdhdGlvbkFj
dGlvbkdldEV2ZW50TW91c2VCdXR0b24oV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmln
YXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChuYXZpZ2F0aW9uQWN0
aW9uUmVmKS0+bW91c2VCdXR0b24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm1vdXNlQnV0dG9uKCkpOwogfQogCiBXS0J1
bmRsZUhpdFRlc3RSZXN1bHRSZWYgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RS
ZXN1bHQoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7
Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9
IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+aGl0VGVzdFJlc3VsdCgpOwotICAgIHJldHVy
biB0b0FQSShoaXRUZXN0UmVzdWx0LmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gV2ViS2l0Ojp0b0ltcGwo
bmF2aWdhdGlvbkFjdGlvblJlZiktPmhpdFRlc3RSZXN1bHQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShoaXRUZXN0UmVzdWx0LmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5Rm9ybUVsZW1lbnQoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgUmVmUHRyPEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZT4gZm9ybUVsZW1lbnQgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlv
blJlZiktPmZvcm1FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZvcm1FbGVtZW50LmxlYWtS
ZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBmb3Jt
RWxlbWVudCA9IFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5mb3JtRWxlbWVu
dCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKGZvcm1FbGVtZW50LmxlYWtSZWYoKSk7CiB9
CiAKIGJvb2wgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJM
cyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zaG91bGRPcGVuRXh0ZXJuYWxV
UkxzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzKCk7CiB9CiAKIGJvb2wgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0
aW9uR2V0U2hvdWxkVHJ5QXBwTGlua3MoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmln
YXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVm
KS0+c2hvdWxkVHJ5QXBwTGlua3MoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwobmF2aWdh
dGlvbkFjdGlvblJlZiktPnNob3VsZFRyeUFwcExpbmtzKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlEb3dubG9hZEF0dHJpYnV0ZShXS0J1bmRsZU5hdmln
YXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAgICByZXR1cm4gdG9Db3Bp
ZWRBUEkodG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5kb3dubG9hZEF0dHJpYnV0ZSgpKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChuYXZpZ2F0aW9u
QWN0aW9uUmVmKS0+ZG93bmxvYWRBdHRyaWJ1dGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDRjN2RiYjQxMmMxMmQ1NTFmOWU4YTdmYzdlZjkyODNh
ODJiNWI3NWMuLjBkNTM3MzJkZTFmNDRhOGUwZGU2MjRjMDcxMTlmNjU2ZDM5ZTk1MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0zNSw4ICszNSw2IEBACiAj
aW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIHN0YXRpYyBXZWJDb3Jl
OjpBdXRvRmlsbEJ1dHRvblR5cGUgdG9BdXRvRmlsbEJ1dHRvblR5cGUoV0tBdXRvRmlsbEJ1dHRv
blR5cGUgd2tBdXRvRmlsbEJ1dHRvblR5cGUpCiB7CiAgICAgc3dpdGNoICh3a0F1dG9GaWxsQnV0
dG9uVHlwZSkgewpAQCAtNzUsMTQyICs3MywxNDIgQEAgc3RhdGljIFdLQXV0b0ZpbGxCdXR0b25U
eXBlIHRvV0tBdXRvRmlsbEJ1dHRvblR5cGUoV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGEK
IAogV0tUeXBlSUQgV0tCdW5kbGVOb2RlSGFuZGxlR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4g
dG9BUEkoSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6QVBJVHlwZSk7CiB9
CiAKIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoSlNDb250
ZXh0UmVmIGNvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKIHsKLSAgICBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjpnZXRPckNyZWF0ZShjb250ZXh0UmVmLCBvYmplY3RSZWYpOwotICAgIHJldHVybiB0
b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OmdldE9yQ3JlYXRlKGNvbnRleHRSZWYsIG9iamVjdFJlZik7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkobm9kZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBXS0J1bmRsZU5vZGVIYW5k
bGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50KFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiBub2RlSGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+
IG5vZGVIYW5kbGUgPSB0b0ltcGwobm9kZUhhbmRsZVJlZiktPmRvY3VtZW50KCk7Ci0gICAgcmV0
dXJuIHRvQVBJKG5vZGVIYW5kbGUubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChub2RlSGFu
ZGxlUmVmKS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShub2RlSGFuZGxl
LmxlYWtSZWYoKSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRSZW5kZXJSZWN0
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBib29sKiBpc1JlcGxhY2VkKQog
ewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobm9kZUhhbmRsZVJlZiktPnJlbmRlclJlY3QoaXNS
ZXBsYWNlZCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKG5vZGVI
YW5kbGVSZWYpLT5yZW5kZXJSZWN0KGlzUmVwbGFjZWQpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1
bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgbm9kZUhhbmRsZVJlZiwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQ
dHI8V2ViSW1hZ2U+IGltYWdlID0gdG9JbXBsKG5vZGVIYW5kbGVSZWYpLT5yZW5kZXJlZEltYWdl
KHRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMpLCBvcHRpb25zICYga1dLU25hcHNob3RPcHRpb25z
RXhjbHVkZU92ZXJmbG93KTsKLSAgICByZXR1cm4gdG9BUEkoaW1hZ2UubGVha1JlZigpKTsKKyAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gaW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChub2RlSGFu
ZGxlUmVmKS0+cmVuZGVyZWRJbWFnZShXZWJLaXQ6OnRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMp
LCBvcHRpb25zICYga1dLU25hcHNob3RPcHRpb25zRXhjbHVkZU92ZXJmbG93KTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSShpbWFnZS5sZWFrUmVmKCkpOwogfQogCiBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIG5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU+IHJhbmdlSGFuZGxlID0gdG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2Uo
KTsKLSAgICByZXR1cm4gdG9BUEkocmFuZ2VIYW5kbGUubGVha1JlZigpKTsKKyAgICBSZWZQdHI8
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6
dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShyYW5nZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2Rl
SGFuZGxlR2V0RWxlbWVudEJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudEhhbmRs
ZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGVsZW1lbnRIYW5kbGVSZWYpLT5lbGVt
ZW50Qm91bmRzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGVs
ZW1lbnRIYW5kbGVSZWYpLT5lbGVtZW50Qm91bmRzKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIFdLU3RyaW5nUmVmIHZhbHVlUmVmKQogewot
ICAgIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVu
dFZhbHVlRm9yVXNlcih0b1dURlN0cmluZyh2YWx1ZVJlZikpOworICAgIFdlYktpdDo6dG9JbXBs
KGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JV
c2VyKFdlYktpdDo6dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5v
ZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRT
cGVsbGNoZWNrRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRF
bGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKGVu
YWJsZWQpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRN
TElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsK
IH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxl
ZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBm
aWxsZWQpCiB7Ci0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1M
SW5wdXRFbGVtZW50QXV0b0ZpbGxlZChmaWxsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChmaWxs
ZWQpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRv
RmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVm
KS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5k
bGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1dHRvblR5cGUo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIFdLQXV0b0Zp
bGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSkKIHsKLSAgICB0b0ltcGwoaHRtbElucHV0
RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJs
ZWQodG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0b0ZpbGxCdXR0b25UeXBlKSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEJ1dHRvbkVuYWJsZWQodG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0b0ZpbGxCdXR0b25U
eXBlKSk7CiB9CiAKIFdLQXV0b0ZpbGxCdXR0b25UeXBlIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRv
blR5cGUodG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVtZW50
QXV0b0ZpbGxCdXR0b25UeXBlKCkpOworICAgIHJldHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBl
KFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVt
ZW50QXV0b0ZpbGxCdXR0b25UeXBlKCkpOwogfQogCiBXS0F1dG9GaWxsQnV0dG9uVHlwZSBXS0J1
bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZShX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBy
ZXR1cm4gdG9XS0F1dG9GaWxsQnV0dG9uVHlwZSh0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBlKCkpOworICAgIHJl
dHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBlKFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZSgpKTsK
IH0KIAogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxB
dmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNBdXRv
RmlsbEF2YWlsYWJsZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKS0+aXNBdXRvRmlsbEF2YWlsYWJsZSgpOwogfQogCiB2b2lkIFdLQnVuZGxl
Tm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5v
ZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBhdXRvRmlsbEF2YWls
YWJsZSkKIHsKLSAgICB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEF1dG9G
aWxsQXZhaWxhYmxlKGF1dG9GaWxsQXZhaWxhYmxlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0QXV0b0ZpbGxBdmFpbGFibGUoYXV0b0ZpbGxBdmFp
bGFibGUpOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcygpKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFu
ZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKCkpOwogfQogCiBi
b29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNl
ckVkaXQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0
RWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudExhc3RDaGFuZ2VX
YXNVc2VyRWRpdCgpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxUZXh0QXJl
YUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxU
ZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sVGV4dEFy
ZWFFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2Vy
RWRpdCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sVGV4dEFyZWFFbGVtZW50SGFu
ZGxlUmVmKS0+aHRtbFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogfQog
CiBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxUYWJsZUNl
bGxFbGVtZW50Q2VsbEFib3ZlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sVGFibGVDZWxsRWxl
bWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBu
b2RlSGFuZGxlID0gdG9JbXBsKGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRh
YmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoKTsKLSAgICByZXR1cm4gdG9BUEkobm9kZUhhbmRsZS5s
ZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4g
bm9kZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVm
KS0+aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5k
bGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3Vt
ZW50SGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJGcmFtZT4gZnJhbWUgPSB0b0ltcGwoZG9j
dW1lbnRIYW5kbGVSZWYpLT5kb2N1bWVudEZyYW1lKCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1l
LmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0
Ojp0b0ltcGwoZG9jdW1lbnRIYW5kbGVSZWYpLT5kb2N1bWVudEZyYW1lKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9BUEkoZnJhbWUubGVha1JlZigpKTsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBX
S0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTEZyYW1lRWxlbWVudENvbnRlbnRGcmFtZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8
V2ViRnJhbWU+IGZyYW1lID0gdG9JbXBsKGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1s
RnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtS
ZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0Ojp0b0lt
cGwoaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJh
bWUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShmcmFtZS5sZWFrUmVmKCkpOwogfQogCiBX
S0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MSUZyYW1lRWxlbWVudENv
bnRlbnRGcmFtZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElGcmFtZUVsZW1lbnRIYW5kbGVS
ZWYpCiB7Ci0gICAgUmVmUHRyPFdlYkZyYW1lPiBmcmFtZSA9IHRvSW1wbChodG1sSUZyYW1lRWxl
bWVudEhhbmRsZVJlZiktPmh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCk7Ci0gICAgcmV0
dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+
IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoaHRtbElGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1s
SUZyYW1lRWxlbWVudENvbnRlbnRGcmFtZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKGZy
YW1lLmxlYWtSZWYoKSk7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKS4K
IGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50
SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZCgpOwogfQogCiAvLyBEZXBy
ZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmls
bGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCkuCiB2b2lkIFdLQnVuZGxlTm9kZUhhbmRs
ZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxlZCkKIHsKLSAgICB0b0ltcGwoaHRtbElu
cHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxl
ZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxlZCk7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1
c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5h
YmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRv
blR5cGUpLgpAQCAtMjE4LDUgKzIxNiw1IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRN
TElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kCiB7CiAg
ICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJs
ZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6
QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOwogCi0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKGF1dG9G
aWxsQnV0dG9uVHlwZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoYXV0b0ZpbGxC
dXR0b25UeXBlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggOTk1YzVkY2M5
NjFlM2JlNTA2YzA4MWNhYmNmYTZhMzdjZGRjMWU5OC4uZDkzYTRjMTFiODg3ZjY1YWNjN2JmZGQ3
OTQ0ZjNmOWVlYzEyNjk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTY5LDE3
ICs2OSwxNSBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VVJMLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlUGFn
ZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2U6OkFQSVR5cGUpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2ViUGFnZTo6QVBJVHlwZSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlU2V0Q29udGV4dE1lbnVDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50QmFzZSogd2tDbGllbnQpCiB7CiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1
bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdl
Q29udGV4dE1lbnVDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50Pih3a0NsaWVudCkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAgICAgVU5VU0VEX1BBUkFNKHdrQ2xp
ZW50KTsKQEAgLTg4LDM4ICs4NiwzOCBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldENvbnRleHRNZW51
Q2xpZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VDb250ZQogCiB2b2lk
IFdLQnVuZGxlUGFnZVNldEVkaXRvckNsaWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VS
ZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCh3a0NsaWVudCA/IHN0ZDo6bWFrZV91
bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Pigqd2tDbGllbnQpIDogc3RkOjpt
YWtlX3VuaXF1ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+KCkpOworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCh3a0Ns
aWVudCA/IHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ+KCp3a0NsaWVudCkgOiBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGU6
OkVkaXRvckNsaWVudD4oKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Rm9ybUNsaWVudChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlRm9ybUNsaWVudEJhc2UqIHdrQ2xp
ZW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50
KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudD4od2tDbGllbnQp
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50
Pih3a0NsaWVudCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudEJhc2UqIHdr
Q2xpZW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVQYWdlTG9h
ZGVyQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50
Pih3a0NsaWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1
bmRsZVBhZ2VMb2FkZXJDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlUGFnZUxvYWRlckNsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VT
ZXRSZXNvdXJjZUxvYWRDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFn
ZVJlc291cmNlTG9hZENsaWVudEJhc2UqIHdrQ2xpZW50KQogewotICAgIHRvSW1wbChwYWdlUmVm
KS0+c2V0SW5qZWN0ZWRCdW5kbGVSZXNvdXJjZUxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxJ
bmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEluamVjdGVkQnVuZGxlUmVzb3VyY2VMb2FkQ2xpZW50
KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRD
bGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0UG9saWN5Q2xpZW50
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VQb2xpY3lDbGllbnRCYXNlKiB3
a0NsaWVudCkKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmluaXRpYWxpemVJbmplY3RlZEJ1bmRs
ZVBvbGljeUNsaWVudCh3a0NsaWVudCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlu
aXRpYWxpemVJbmplY3RlZEJ1bmRsZVBvbGljeUNsaWVudCh3a0NsaWVudCk7CiB9CiAKIHZvaWQg
V0tCdW5kbGVQYWdlU2V0VUlDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZVVJQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJ
bmplY3RlZEJ1bmRsZVVJQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdl
VUlDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldElu
amVjdGVkQnVuZGxlVUlDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlUGFnZVVJQ2xpZW50Pih3a0NsaWVudCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEZ1
bGxTY3JlZW5DbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUZ1bGxT
Y3JlZW5DbGllbnRCYXNlKiB3a0NsaWVudCkKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5p
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVGdWxsU2NyZWVuQ2xpZW50KHdrQ2xpZW50KTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlRnVsbFNjcmVl
bkNsaWVudCh3a0NsaWVudCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAg
ICBVTlVTRURfUEFSQU0od2tDbGllbnQpOwpAQCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgV0tCdW5k
bGVQYWdlU2V0RnVsbFNjcmVlbkNsaWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5k
bGVQYWdlRnVsbFNjCiB2b2lkIFdLQnVuZGxlUGFnZVdpbGxFbnRlckZ1bGxTY3JlZW4oV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYpCiB7CiAjaWYgZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
ICYmIEVOQUJMRV9GVUxMU0NSRUVOX0FQSQotICAgIHRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICNlbmRpZgpAQCAtMTM4LDcgKzEzNiw3IEBA
IHZvaWQgV0tCdW5kbGVQYWdlV2lsbEVudGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZikKIHZvaWQgV0tCdW5kbGVQYWdlRGlkRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmKQogewogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBFTkFC
TEVfRlVMTFNDUkVFTl9BUEkKLSAgICB0b0ltcGwocGFnZVJlZiktPmZ1bGxTY3JlZW5NYW5hZ2Vy
KCktPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5m
dWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2VSZWYpOwogI2VuZGlmCkBAIC0xNDcsNyArMTQ1LDcgQEAgdm9pZCBXS0J1
bmRsZVBhZ2VEaWRFbnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB2b2lk
IFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikK
IHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JF
RU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRXhp
dEZ1bGxTY3JlZW4oKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVlbk1h
bmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShw
YWdlUmVmKTsKICNlbmRpZgpAQCAtMTU2LDcgKzE1NCw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlV2ls
bEV4aXRGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogdm9pZCBXS0J1bmRsZVBh
Z2VEaWRFeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKICNpZiBkZWZp
bmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAg
dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRF
eGl0RnVsbFNjcmVlbigpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAjZW5k
aWYKQEAgLTE2NCwyMyArMTYyLDIzIEBAIHZvaWQgV0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3Jl
ZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAKIFdLQnVuZGxlUGFnZUdyb3VwUmVmIFdLQnVu
ZGxlUGFnZUdldFBhZ2VHcm91cChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1
cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnBhZ2VHcm91cCgpKTsKIH0KIAogV0tC
dW5kbGVGcmFtZVJlZiBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVmKS0+bWFpbldlYkZyYW1l
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5t
YWluV2ViRnJhbWUoKSk7CiB9CiAKIFdLRnJhbWVIYW5kbGVSZWYgV0tCdW5kbGVGcmFtZUNyZWF0
ZUZyYW1lSGFuZGxlKFdLQnVuZGxlRnJhbWVSZWYgYnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKCZBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUodG9JbXBsKGJ1bmRsZUZyYW1lUmVm
KS0+ZnJhbWVJRCgpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZBUEk6
OkZyYW1lSGFuZGxlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwoYnVuZGxlRnJhbWVSZWYpLT5mcmFt
ZUlEKCkpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ2xpY2tNZW51SXRlbShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tDb250ZXh0TWVudUl0ZW1SZWYgaXRlbSkKIHsKICNp
ZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICB0b0ltcGwocGFnZVJlZiktPmNvbnRleHRNZW51
KCktPml0ZW1TZWxlY3RlZCh0b0ltcGwoaXRlbSktPmRhdGEoKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPmNvbnRleHRNZW51KCktPml0ZW1TZWxlY3RlZChXZWJLaXQ6OnRvSW1wbChp
dGVtKS0+ZGF0YSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogICAgIFVO
VVNFRF9QQVJBTShpdGVtKTsKQEAgLTE4OCw3ICsxODYsNyBAQCB2b2lkIFdLQnVuZGxlUGFnZUNs
aWNrTWVudUl0ZW0oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQ29udGV4dE1lbnVJdGVtUmVm
IGl0ZQogfQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi1zdGF0aWMgUmVmPEFQSTo6QXJy
YXk+IGNvbnRleHRNZW51SXRlbXMoY29uc3QgV2ViQ29udGV4dE1lbnUmIGNvbnRleHRNZW51KQor
c3RhdGljIFJlZjxBUEk6OkFycmF5PiBjb250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYktpdDo6V2Vi
Q29udGV4dE1lbnUmIGNvbnRleHRNZW51KQogewogICAgIGF1dG8gaXRlbXMgPSBjb250ZXh0TWVu
dS5pdGVtcygpOwogCkBAIC0xOTYsNyArMTk0LDcgQEAgc3RhdGljIFJlZjxBUEk6OkFycmF5PiBj
b250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYkNvbnRleHRNZW51JiBjb250ZXh0TWVudSkKICAgICBt
ZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtcy5zaXplKCkpOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpdGVtIDogaXRlbXMpCi0gICAgICAgIG1lbnVJdGVtcy51bmNoZWNrZWRB
cHBlbmQoV2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRlbSkpOworICAgICAgICBtZW51SXRl
bXMudW5jaGVja2VkQXBwZW5kKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRl
bSkpOwogCiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1lbnVJdGVtcykp
OwogfQpAQCAtMjA1LDkgKzIwMyw5IEBAIHN0YXRpYyBSZWY8QVBJOjpBcnJheT4gY29udGV4dE1l
bnVJdGVtcyhjb25zdCBXZWJDb250ZXh0TWVudSYgY29udGV4dE1lbnUpCiBXS0FycmF5UmVmIFdL
QnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUl0ZW1zKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQog
ewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIFdlYkNvbnRleHRNZW51KiBjb250ZXh0
TWVudSA9IHRvSW1wbChwYWdlUmVmKS0+Y29udGV4dE1lbnUoKTsKKyAgICBXZWJLaXQ6OldlYkNv
bnRleHRNZW51KiBjb250ZXh0TWVudSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb250ZXh0
TWVudSgpOwogCi0gICAgcmV0dXJuIHRvQVBJKCZjb250ZXh0TWVudUl0ZW1zKCpjb250ZXh0TWVu
dSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmY29udGV4dE1lbnVJdGVt
cygqY29udGV4dE1lbnUpLmxlYWtSZWYoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
UmVmKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxNywxMSArMjE1LDExIEBAIFdLQXJyYXlS
ZWYgV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51SXRlbXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYpCiBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRv
dyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tQb2ludCBwb2ludCkKIHsKICNpZiBFTkFCTEUo
Q09OVEVYVF9NRU5VUykKLSAgICBXZWJDb250ZXh0TWVudSogY29udGV4dE1lbnUgPSB0b0ltcGwo
cGFnZVJlZiktPmNvbnRleHRNZW51QXRQb2ludEluV2luZG93KHRvSW50UG9pbnQocG9pbnQpKTsK
KyAgICBXZWJLaXQ6OldlYkNvbnRleHRNZW51KiBjb250ZXh0TWVudSA9IFdlYktpdDo6dG9JbXBs
KHBhZ2VSZWYpLT5jb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhXZWJLaXQ6OnRvSW50UG9pbnQo
cG9pbnQpKTsKICAgICBpZiAoIWNvbnRleHRNZW51KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiB0b0FQSSgmY29udGV4dE1lbnVJdGVtcygqY29udGV4dE1lbnUpLmxlYWtS
ZWYoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmNvbnRleHRNZW51SXRlbXMoKmNvbnRl
eHRNZW51KS5sZWFrUmVmKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAg
ICAgVU5VU0VEX1BBUkFNKHBvaW50KTsKQEAgLTIzMSw3ICsyMjksNyBAQCBXS0FycmF5UmVmIFdL
QnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhXS0J1bmRsZVBhZ2VSZWYg
cGFnZVJlZiwgVwogCiB2b2lkIFdLQnVuZGxlUGFnZUluc2VydE5ld2xpbmVJblF1b3RlZENvbnRl
bnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnNl
cnROZXdsaW5lSW5RdW90ZWRDb250ZW50KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
Pmluc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQoKTsKIH0KIAogdm9pZCogV0tBY2Nlc3NpYmls
aXR5Um9vdE9iamVjdChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKQEAgLTI0MCw3ICsyMzgsNyBA
QCB2b2lkKiBXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
KQogICAgIGlmICghcGFnZVJlZikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKTsKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTI2Nyw3ICsyNjUsNyBAQCB2
b2lkKiBXS0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
KQogICAgIGlmICghcGFnZVJlZikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKTsKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzAyLDc3ICszMDAsNzcgQEAgYm9v
bCBXS0FjY2Vzc2liaWxpdHlFbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIAogdm9pZCBX
S0J1bmRsZVBhZ2VTdG9wTG9hZGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPnN0b3BMb2FkaW5nKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0RGVmZXJzTG9hZGlu
ZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCBkZWZlcnNMb2FkaW5nKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKIH0K
IAogV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQ
SSh0b0ltcGwocGFnZVJlZiktPnJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5y
ZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tC
dW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmco
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1w
bChwYWdlUmVmKS0+cmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZygp
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+cmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZygpKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLU3RyaW5nUmVmIG5hbWUsIFdLU3RyaW5nUmVmIGFyZ3VtZW50KQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+ZXhlY3V0ZUVkaXRpbmdDb21tYW5kKHRvV1RGU3RyaW5nKG5hbWUpLCB0
b1dURlN0cmluZyhhcmd1bWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5leGVj
dXRlRWRpdGluZ0NvbW1hbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhuYW1lKSwgV2ViS2l0Ojp0b1dU
RlN0cmluZyhhcmd1bWVudCkpOwogfQogCiBib29sIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1h
bmRFbmFibGVkKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBuYW1lKQogewot
ICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHRvV1RG
U3RyaW5nKG5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKFdlYktpdDo6dG9XVEZTdHJpbmcobmFtZSkpOwogfQogCiB2b2lk
IFdLQnVuZGxlUGFnZUNsZWFyTWFpbkZyYW1lTmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNsZWFyTWFpbkZyYW1lTmFtZSgpOworICAgIFdlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5jbGVhck1haW5GcmFtZU5hbWUoKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVBhZ2VDbG9zZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPnNlbmRDbG9zZSgpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZW5kQ2xv
c2UoKTsKIH0KIAogZG91YmxlIFdLQnVuZGxlUGFnZUdldFRleHRab29tRmFjdG9yKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPnRleHRab29t
RmFjdG9yKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT50ZXh0Wm9vbUZh
Y3RvcigpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgem9vbUZhY3RvcikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPnNldFRleHRab29tRmFjdG9yKHpvb21GYWN0b3IpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAogZG91YmxlIFdLQnVu
ZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPnBhZ2Vab29tRmFjdG9yKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5wYWdlWm9vbUZhY3RvcigpOwogfQogCiB2b2lkIFdLQnVu
ZGxlUGFnZVNldFBhZ2Vab29tRmFjdG9yKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUg
em9vbUZhY3RvcikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFBhZ2Vab29tRmFjdG9yKHpv
b21GYWN0b3IpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRQYWdlWm9vbUZhY3Rv
cih6b29tRmFjdG9yKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRTY2FsZUF0T3JpZ2luKFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgc2NhbGUsIFdLUG9pbnQgb3JpZ2luKQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+c2NhbGVQYWdlKHNjYWxlLCB0b0ludFBvaW50KG9yaWdpbikp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zY2FsZVBhZ2Uoc2NhbGUsIFdlYktpdDo6
dG9JbnRQb2ludChvcmlnaW4pKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlRHVtcEhp
c3RvcnlGb3JUZXN0aW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBkaXJlY3Rv
cnkpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlKS0+ZHVtcEhpc3RvcnlG
b3JUZXN0aW5nKHRvV1RGU3RyaW5nKGRpcmVjdG9yeSkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlKS0+ZHVtcEhpc3RvcnlGb3JUZXN0aW5nKFdl
YktpdDo6dG9XVEZTdHJpbmcoZGlyZWN0b3J5KSkpOwogfQogCiB2b2lkIFdLQnVuZGxlQ2xlYXJI
aXN0b3J5Rm9yVGVzdGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKIHsKLSAgICB0b0ltcGwocGFn
ZSktPmNsZWFySGlzdG9yeSgpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jbGVhckhpc3Rv
cnkoKTsKIH0KIAogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFj
a0ZvcndhcmRMaXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQpAQCAtMzgyLDI4ICszODAsMjgg
QEAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmUKIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFn
ZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKnRvSW1wbChwYWdlT3Zlcmxh
eVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9O
b3RGYWRlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCpXZWJLaXQ6OnRvSW1wbChwYWdl
T3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3Zlcmxh
eShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3Zl
cmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCp0b0ltcGwocGFnZU92ZXJsYXlSZWYp
LT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFk
ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCpXZWJLaXQ6OnRvSW1wbChwYWdlT3Zl
cmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRo
QW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVm
IHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCp0b0ltcGwocGFnZU92ZXJs
YXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKldlYktpdDo6dG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmlt
YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFn
ZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqdG9JbXBsKHBhZ2VPdmVybGF5
UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKldlYktpdDo6dG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWdlUmVmKQogewogI2lmIFBMQVRGT1JNKE1B
QykKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFRvcE92ZXJoYW5nSW1hZ2UodG9JbXBsKGltYWdl
UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFRvcE92ZXJoYW5nSW1hZ2Uo
V2ViS2l0Ojp0b0ltcGwoaW1hZ2VSZWYpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VS
ZWYpOwogICAgIFVOVVNFRF9QQVJBTShpbWFnZVJlZik7CkBAIC00MTMsNyArNDExLDcgQEAgdm9p
ZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0ltYWdlUmVmIGltYWdlUmUKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Qm90dG9tT3ZlcmhhbmdJ
bWFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tJbWFnZVJlZiBpbWFnZVJlZikKIHsKICNp
ZiBQTEFURk9STShNQUMpCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRCb3R0b21PdmVyaGFuZ0lt
YWdlKHRvSW1wbChpbWFnZVJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRC
b3R0b21PdmVyaGFuZ0ltYWdlKFdlYktpdDo6dG9JbXBsKGltYWdlUmVmKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAgICBVTlVTRURfUEFSQU0oaW1hZ2VSZWYpOwpAQCAt
NDIzLDQwICs0MjEsNDAgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFuZ0ltYWdl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWcKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIHZvaWQgV0tCdW5kbGVQYWdlU2V0SGVhZGVyQmFubmVyKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VCYW5uZXJSZWYgYmFubmVyUmVmKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+c2V0SGVhZGVyUGFnZUJhbm5lcih0b0ltcGwoYmFubmVyUmVmKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEhlYWRlclBhZ2VCYW5uZXIoV2ViS2l0Ojp0
b0ltcGwoYmFubmVyUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Rm9vdGVyQmFubmVy
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VCYW5uZXJSZWYgYmFubmVyUmVm
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0Rm9vdGVyUGFnZUJhbm5lcih0b0ltcGwoYmFu
bmVyUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEZvb3RlclBhZ2VCYW5u
ZXIoV2ViS2l0Ojp0b0ltcGwoYmFubmVyUmVmKSk7CiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAKIGJvb2wgV0tCdW5kbGVQYWdlSGFzTG9jYWxEYXRhRm9yVVJMKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
YWdlUmVmKS0+aGFzTG9jYWxEYXRhRm9yVVJMKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcodXJsUmVm
KSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aGFzTG9jYWxEYXRhRm9y
VVJMKFVSTChVUkwoKSwgV2ViS2l0Ojp0b1dURlN0cmluZyh1cmxSZWYpKSk7CiB9CiAKIGJvb2wg
V0tCdW5kbGVQYWdlQ2FuSGFuZGxlUmVxdWVzdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdFJlZikK
IHsKICAgICBpZiAoIXJlcXVlc3RSZWYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdCh0b0ltcGwocmVxdWVzdFJlZiktPnJlc291cmNl
UmVxdWVzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0
KFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVlc3QoKSk7CiB9CiAKIGJv
b2wgV0tCdW5kbGVQYWdlRmluZFN0cmluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJp
bmdSZWYgdGFyZ2V0LCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zKQogewotICAgIHJldHVybiB0
b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdGcm9tSW5qZWN0ZWRCdW5kbGUodG9XVEZTdHJpbmco
dGFyZ2V0KSwgdG9GaW5kT3B0aW9ucyhmaW5kT3B0aW9ucykpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ0Zyb21JbmplY3RlZEJ1bmRsZShXZWJLaXQ6OnRv
V1RGU3RyaW5nKHRhcmdldCksIFdlYktpdDo6dG9GaW5kT3B0aW9ucyhmaW5kT3B0aW9ucykpOwog
fQogCiB2b2lkIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVzKFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmLCBXS1N0cmluZ1JlZiB0YXJnZXQsIFdLRmluZE9wdGlvbnMgZmluZE9wdGlvbnMpCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nTWF0Y2hlc0Zyb21JbmplY3RlZEJ1bmRs
ZSh0b1dURlN0cmluZyh0YXJnZXQpLCB0b0ZpbmRPcHRpb25zKGZpbmRPcHRpb25zKSk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdNYXRjaGVzRnJvbUluamVjdGVkQnVu
ZGxlKFdlYktpdDo6dG9XVEZTdHJpbmcodGFyZ2V0KSwgV2ViS2l0Ojp0b0ZpbmRPcHRpb25zKGZp
bmRPcHRpb25zKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgbWF0Y2hJbmRpY2VzUmVmLCBXS1N0
cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSkKIHsKLSAgICBhdXRv
KiBtYXRjaEluZGljZXMgPSB0b0ltcGwobWF0Y2hJbmRpY2VzUmVmKTsKKyAgICBhdXRvKiBtYXRj
aEluZGljZXMgPSBXZWJLaXQ6OnRvSW1wbChtYXRjaEluZGljZXNSZWYpOwogCiAgICAgVmVjdG9y
PHVpbnQzMl90PiBpbmRpY2VzOwogICAgIGluZGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
YXRjaEluZGljZXMtPnNpemUoKSk7CkBAIC00NjYsODMgKzQ2NCw4MyBAQCB2b2lkIFdLQnVuZGxl
UGFnZVJlcGxhY2VTdHJpbmdNYXRjaGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5
UmVmIG1hdGNoSQogICAgICAgICBpZiAoYXV0byogaW5kZXhBc09iamVjdCA9IG1hdGNoSW5kaWNl
cy0+YXQ8QVBJOjpVSW50NjQ+KGkpKQogICAgICAgICAgICAgaW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoaW5kZXhBc09iamVjdC0+dmFsdWUoKSk7CiAgICAgfQotICAgIHRvSW1wbChwYWdlUmVmKS0+
cmVwbGFjZVN0cmluZ01hdGNoZXNGcm9tSW5qZWN0ZWRCdW5kbGUoaW5kaWNlcywgdG9XVEZTdHJp
bmcocmVwbGFjZW1lbnRUZXh0KSwgc2VsZWN0aW9uT25seSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZiktPnJlcGxhY2VTdHJpbmdNYXRjaGVzRnJvbUluamVjdGVkQnVuZGxlKGluZGljZXMs
IFdlYktpdDo6dG9XVEZTdHJpbmcocmVwbGFjZW1lbnRUZXh0KSwgc2VsZWN0aW9uT25seSk7CiB9
CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9ucyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3QsIFdLU25hcHNob3RPcHRpb25zIG9wdGlv
bnMpCiB7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+
c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJlY3QocmVjdCksIDEsIHRvU25hcHNob3RP
cHRpb25zKG9wdGlvbnMpKTsKLSAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsK
KyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyhXZWJLaXQ6OnRvSW50UmVjdChyZWN0
KSwgMSwgV2ViS2l0Ojp0b1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRs
ZVBhZ2VDcmVhdGVTbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBTbmFwc2hv
dE9wdGlvbnMgc25hcHNob3RPcHRpb25zID0gc25hcHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9u
cyhvcHRpb25zKTsKLSAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3
Q29vcmRpbmF0ZXM7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdl
UmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJlY3QocmVjdCksIDEsIHNuYXBz
aG90T3B0aW9ucyk7Ci0gICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLmxlYWtSZWYoKSk7CisgICAg
V2ViS2l0OjpTbmFwc2hvdE9wdGlvbnMgc25hcHNob3RPcHRpb25zID0gV2ViS2l0OjpzbmFwc2hv
dE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMpOworICAgIHNuYXBzaG90T3B0aW9ucyB8
PSBXZWJLaXQ6OlNuYXBzaG90T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOworICAgIFJlZlB0cjxX
ZWJLaXQ6OldlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zY2Fs
ZWRTbmFwc2hvdFdpdGhPcHRpb25zKFdlYktpdDo6dG9JbnRSZWN0KHJlY3QpLCAxLCBzbmFwc2hv
dE9wdGlvbnMpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHdlYkltYWdlLmxlYWtSZWYoKSk7
CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RJbkRvY3VtZW50Q29v
cmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLUmVjdCByZWN0LCBXS0ltYWdlT3B0
aW9ucyBvcHRpb25zKQogewotICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwo
cGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCAxLCBz
bmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKLSAgICByZXR1cm4gdG9B
UEkod2ViSW1hZ2UubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2Vi
SW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9u
cyhXZWJLaXQ6OnRvSW50UmVjdChyZWN0KSwgMSwgV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNGcm9t
SW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSh3ZWJJbWFn
ZS5sZWFrUmVmKCkpOwogfQogCiBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNjYWxlZFNu
YXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1Jl
Y3QgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNu
YXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCBzY2FsZUZhY3Rvciwgc25hcHNob3RP
cHRpb25zRnJvbUltYWdlT3B0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmV0dXJuIHRvQVBJKHdlYklt
YWdlLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViSW1hZ2U+IHdlYkltYWdlID0g
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMoV2ViS2l0
Ojp0b0ludFJlY3QocmVjdCksIHNjYWxlRmFjdG9yLCBXZWJLaXQ6OnNuYXBzaG90T3B0aW9uc0Zy
b21JbWFnZU9wdGlvbnMob3B0aW9ucykpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHdlYklt
YWdlLmxlYWtSZWYoKSk7CiB9CiAKIGRvdWJsZSBXS0J1bmRsZVBhZ2VHZXRCYWNraW5nU2NhbGVG
YWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPmRldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlTGlzdGVu
Rm9yTGF5b3V0TWlsZXN0b25lcyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tMYXlvdXRNaWxl
c3RvbmVzIG1pbGVzdG9uZXMpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5saXN0ZW5Gb3JMYXlv
dXRNaWxlc3RvbmVzKHRvTGF5b3V0TWlsZXN0b25lcyhtaWxlc3RvbmVzKSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocGFnZVJlZiktPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMoV2ViS2l0Ojp0b0xh
eW91dE1pbGVzdG9uZXMobWlsZXN0b25lcykpOwogfQogCiBXS0J1bmRsZUluc3BlY3RvclJlZiBX
S0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVmKS0+aW5zcGVjdG9yKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogewot
ICAgIHRvSW1wbChwYWdlKS0+Zm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZSktPmZvcmNlUmVwYWludFdpdGhvdXRDYWxsYmFjaygpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVNpbXVsYXRlTW91c2VEb3duKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBp
bnQgYnV0dG9uLCBXS1BvaW50IHBvc2l0aW9uLCBpbnQgY2xpY2tDb3VudCwgV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lKQogewotICAgIHRvSW1wbChwYWdlKS0+c2ltdWxh
dGVNb3VzZURvd24oYnV0dG9uLCB0b0ludFBvaW50KHBvc2l0aW9uKSwgY2xpY2tDb3VudCwgbW9k
aWZpZXJzLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAgIFdlYktpdDo6dG9J
bXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlRG93bihidXR0b24sIFdlYktpdDo6dG9JbnRQb2ludChw
b3NpdGlvbiksIGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHRpbWUpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTaW11bGF0ZU1vdXNlVXAoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIGludCBidXR0b24sIFdLUG9pbnQgcG9zaXRpb24sIGludCBjbGlja0NvdW50
LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWUpCiB7Ci0gICAgdG9JbXBs
KHBhZ2UpLT5zaW11bGF0ZU1vdXNlVXAoYnV0dG9uLCB0b0ludFBvaW50KHBvc2l0aW9uKSwgY2xp
Y2tDb3VudCwgbW9kaWZpZXJzLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAg
IFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlVXAoYnV0dG9uLCBXZWJLaXQ6OnRv
SW50UG9pbnQocG9zaXRpb24pLCBjbGlja0NvdW50LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyh0aW1lKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2ltdWxhdGVNb3VzZU1v
dGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tQb2ludCBwb3NpdGlvbiwgZG91YmxlIHRpbWUp
CiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlTW90aW9uKHRvSW50UG9pbnQocG9z
aXRpb24pLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAgIFdlYktpdDo6dG9J
bXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlTW90aW9uKFdlYktpdDo6dG9JbnRQb2ludChwb3NpdGlv
biksIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyh0aW1lKSk7CiB9CiAKIHVpbnQ2NF90IFdLQnVu
ZGxlUGFnZUdldFJlbmRlclRyZWVTaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPnJlbmRlclRyZWVTaXplKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCiBXS1JlbmRlck9i
amVjdFJlZiBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJl
ZikKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUmVuZGVyT2JqZWN0OjpjcmVhdGUodG9JbXBsKHBh
Z2VSZWYpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2Vi
UmVuZGVyT2JqZWN0OjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7
CiB9CiAKIFdLUmVuZGVyTGF5ZXJSZWYgV0tCdW5kbGVQYWdlQ29weVJlbmRlckxheWVyVHJlZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUmVuZGVyTGF5
ZXI6OmNyZWF0ZSh0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0OjpXZWJSZW5kZXJMYXllcjo6Y3JlYXRlKFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFBhaW50ZWRPYmpl
Y3RzQ291bnRlclRocmVzaG9sZChXS0J1bmRsZVBhZ2VSZWYsIHVpbnQ2NF90KQpAQCAtNTUzLDc5
ICs1NTEsNzkgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQoV0tCdW5kbGVQYWdlUmVmLCB1aW50NjRfdCkKIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRU
cmFja3NSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCB0cmFja1JlcGFpbnRz
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VHJhY2tzUmVwYWludHModHJhY2tSZXBhaW50
cyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFRyYWNrc1JlcGFpbnRzKHRyYWNr
UmVwYWludHMpOwogfQogCiBib29sIFdLQnVuZGxlUGFnZUlzVHJhY2tpbmdSZXBhaW50cyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5pc1Ry
YWNraW5nUmVwYWludHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlz
VHJhY2tpbmdSZXBhaW50cygpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJl
cGFpbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+
cmVzZXRUcmFja2VkUmVwYWludHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cmVz
ZXRUcmFja2VkUmVwYWludHMoKTsKIH0KIAogV0tBcnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5VHJh
Y2tlZFJlcGFpbnRSZWN0cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkoJnRvSW1wbChwYWdlUmVmKS0+dHJhY2tlZFJlcGFpbnRSZWN0cygpLmxlYWtSZWYoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT50cmFj
a2VkUmVwYWludFJlY3RzKCkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRD
b21wb3NpdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgdGV4dCwgaW50
IGZyb20sIGludCBsZW5ndGgsIGJvb2wgc3VwcHJlc3NVbmRlcmxpbmUpCiB7Ci0gICAgdG9JbXBs
KHBhZ2VSZWYpLT5zZXRDb21wb3NpdGlvbkZvclRlc3RpbmcodG9XVEZTdHJpbmcodGV4dCksIGZy
b20sIGxlbmd0aCwgc3VwcHJlc3NVbmRlcmxpbmUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLT5zZXRDb21wb3NpdGlvbkZvclRlc3RpbmcoV2ViS2l0Ojp0b1dURlN0cmluZyh0ZXh0KSwg
ZnJvbSwgbGVuZ3RoLCBzdXBwcmVzc1VuZGVybGluZSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVQYWdl
SGFzQ29tcG9zaXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwYWdlUmVmKS0+aGFzQ29tcG9zaXRpb25Gb3JUZXN0aW5nKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5oYXNDb21wb3NpdGlvbkZvclRlc3RpbmcoKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VDb25maXJtQ29tcG9zaXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5n
KFN0cmluZygpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29uZmlybUNvbXBvc2l0
aW9uRm9yVGVzdGluZyhTdHJpbmcoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ29uZmlybUNv
bXBvc2l0aW9uV2l0aFRleHQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRl
eHQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5n
KHRvV1RGU3RyaW5nKHRleHQpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29uZmly
bUNvbXBvc2l0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OnRvV1RGU3RyaW5nKHRleHQpKTsKIH0KIAog
Ym9vbCBXS0J1bmRsZVBhZ2VDYW5TaG93TUlNRVR5cGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYs
IFdLU3RyaW5nUmVmIG1pbWVUeXBlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZikt
PmNhblNob3dNSU1FVHlwZSh0b1dURlN0cmluZyhtaW1lVHlwZVJlZikpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y2FuU2hvd01JTUVUeXBlKFdlYktpdDo6dG9XVEZTdHJp
bmcobWltZVR5cGVSZWYpKTsKIH0KIAogV0tSZW5kZXJpbmdTdXBwcmVzc2lvblRva2VuIFdLQnVu
ZGxlUGFnZUV4dGVuZEluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb24oV0tCdW5kbGVQYWdl
UmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+ZXh0ZW5kSW5jcmVt
ZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+ZXh0ZW5kSW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVN0b3BFeHRlbmRpbmdJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNz
aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlbmRlcmluZ1N1cHByZXNzaW9uVG9rZW4g
dG9rZW4pCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zdG9wRXh0ZW5kaW5nSW5jcmVtZW50YWxS
ZW5kZXJpbmdTdXBwcmVzc2lvbih0b2tlbik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PnN0b3BFeHRlbmRpbmdJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9uKHRva2VuKTsKIH0K
IAogYm9vbCBXS0J1bmRsZVBhZ2VJc1VzaW5nRXBoZW1lcmFsU2Vzc2lvbihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT51c2VzRXBoZW1lcmFs
U2Vzc2lvbigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+dXNlc0VwaGVt
ZXJhbFNlc3Npb24oKTsKIH0KIAogYm9vbCBXS0J1bmRsZVBhZ2VJc0NvbnRyb2xsZWRCeUF1dG9t
YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHBhZ2VSZWYpLT5pc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24oKTsKIH0KIAogI2lmIFRBUkdF
VF9PU19JUEhPTkUKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmln
dXJhdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCB1c2VUZXN0aW5nVmlld3BvcnRD
b25maWd1cmF0aW9uKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VXNlVGVzdGluZ1ZpZXdw
b3J0Q29uZmlndXJhdGlvbih1c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlv
bih1c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKTsKIH0KICNlbmRpZgogCiB2b2lkIFdL
QnVuZGxlUGFnZVN0YXJ0TW9uaXRvcmluZ1Njcm9sbE9wZXJhdGlvbnMoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYpCiB7Ci0gICAgV2ViS2l0OjpXZWJQYWdlKiB3ZWJQYWdlID0gdG9JbXBsKHBhZ2VS
ZWYpOworICAgIFdlYktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpOwogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSB3ZWJQYWdlID8gd2ViUGFnZS0+Y29yZVBh
Z2UoKSA6IG51bGxwdHI7CiAgICAgCiAgICAgaWYgKCFwYWdlKQpAQCAtNjM5LDcgKzYzNyw3IEBA
IHZvaWQgV0tCdW5kbGVQYWdlUmVnaXN0ZXJTY3JvbGxPcGVyYXRpb25Db21wbGV0aW9uQ2FsbGJh
Y2soV0tCdW5kbGVQYWdlUmVmIHBhZ2VSCiAgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFdlYktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IHRvSW1wbChwYWdlUmVm
KTsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gd2ViUGFnZSA/IHdlYlBhZ2UtPmNvcmVQYWdl
KCkgOiBudWxscHRyOwogICAgIGlmICghcGFnZSB8fCAhcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRU
cmlnZ2VycygpKQogICAgICAgICByZXR1cm47CkBAIC02NTQsNyArNjUyLDcgQEAgdm9pZCBXS0J1
bmRsZVBhZ2VDYWxsQWZ0ZXJUYXNrc0FuZFRpbWVycyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwg
V0tCdW5kbGVQYWdlVGUKICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgV2ViS2l0OjpXZWJQYWdlKiB3ZWJQYWdlID0gdG9JbXBsKHBhZ2VSZWYpOworICAgIFdl
YktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOwogICAgIFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSB3ZWJQYWdlID8gd2ViUGFnZS0+Y29yZVBhZ2UoKSA6IG51bGxw
dHI7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC02OTEsNzggKzY4OSw3OCBA
QCB2b2lkIFdLQnVuZGxlUGFnZUNhbGxBZnRlclRhc2tzQW5kVGltZXJzKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VUZQogCiB2b2lkIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwgV0tU
eXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3Nh
Z2UodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3NhZ2UoV2ViS2l0Ojp0b1dURlN0
cmluZyhtZXNzYWdlTmFtZVJlZiksIFdlYktpdDo6dG9JbXBsKG1lc3NhZ2VCb2R5UmVmKSk7CiB9
CiAKIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNN
b2RlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cG9zdE1l
c3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHRvV1RGU3RyaW5nKG1lc3NhZ2VOYW1l
UmVmKSwgdG9JbXBsKG1lc3NhZ2VCb2R5UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShXZWJLaXQ6OnRvV1RG
U3RyaW5nKG1lc3NhZ2VOYW1lUmVmKSwgV2ViS2l0Ojp0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWVSZWYsIFdLVHlw
ZVJlZiBtZXNzYWdlQm9keVJlZiwgV0tUeXBlUmVmKiByZXR1cm5EYXRhUmVmKQogewotICAgIFdl
YlBhZ2UqIHBhZ2UgPSB0b0ltcGwocGFnZVJlZik7CisgICAgV2ViS2l0OjpXZWJQYWdlKiBwYWdl
ID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CiAgICAgcGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsK
IAogICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gcmV0dXJuRGF0YTsKLSAgICBwYWdlLT5wb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRv
SW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOworICAgIHBhZ2UtPnBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYp
LCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOwogICAgIGlmIChy
ZXR1cm5EYXRhUmVmKQotICAgICAgICAqcmV0dXJuRGF0YVJlZiA9IHRvQVBJKHJldHVybkRhdGEu
bGVha1JlZigpKTsKKyAgICAgICAgKnJldHVybkRhdGFSZWYgPSBXZWJLaXQ6OnRvQVBJKHJldHVy
bkRhdGEubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VBZGRVc2VyU2NyaXB0KFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2UsIF9XS1VzZXJTY3JpcHRJ
bmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUsIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBp
bmplY3RlZEZyYW1lcykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTY3JpcHQodG9X
VEZTdHJpbmcoc291cmNlKSwgdG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJh
bWVzKSwgdG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTY3JpcHQoV2ViS2l0Ojp0b1dURlN0cmluZyhz
b3VyY2UpLCBXZWJLaXQ6OnRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1l
cyksIFdlYktpdDo6dG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSk7CiB9
CiAKIHZvaWQgV0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLU3RyaW5nUmVmIHNvdXJjZSwgV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzIGlu
amVjdGVkRnJhbWVzKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+YWRkVXNlclN0eWxlU2hlZXQo
dG9XVEZTdHJpbmcoc291cmNlKSwgdG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVk
RnJhbWVzKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0
KFdlYktpdDo6dG9XVEZTdHJpbmcoc291cmNlKSwgV2ViS2l0Ojp0b1VzZXJDb250ZW50SW5qZWN0
ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXMpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VSZW1vdmVB
bGxVc2VyQ29udGVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlUGFn
ZUNvcHlHcm91cElkZW50aWZpZXIoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlUmVmKS0+cGFnZUdyb3VwKCktPmlkZW50aWZpZXIo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnBhZ2VHcm91cCgpLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUNs
ZWFyQXBwbGljYXRpb25DYWNoZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKIHsKLSAgICB0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVsZXRlQWxsRW50
cmllcygpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZSgpLmRlbGV0ZUFsbEVudHJpZXMoKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVsZXRlQ2FjaGVGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodG9JbXBsKG9yaWdpbiktPnN0cmluZygpKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlKCkuZGVsZXRlQ2FjaGVGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21TdHJpbmcoV2ViS2l0Ojp0b0ltcGwob3JpZ2luKS0+c3RyaW5nKCkpKTsKIH0KIAogdm9p
ZCBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCB1aW50NjRfdCBzaXplKQogewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UoKS5zZXRNYXhpbXVtU2l6ZShzaXplKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zZXRNYXhp
bXVtU2l6ZShzaXplKTsKIH0KIAogdWludDY0X3QgV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2Fn
ZUZvck9yaWdpbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luKQogewot
ICAgIHJldHVybiB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlKCkuZGlza1VzYWdlRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKHRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kaXNr
VXNhZ2VGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmco
V2ViS2l0Ojp0b0ltcGwob3JpZ2luKS0+c3RyaW5nKCkpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VTZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG9yaWdpbiwgdWludDY0X3QgYnl0ZXMpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5j
b3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRlZFF1b3RhRm9y
T3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHRvSW1wbChv
cmlnaW4pLT5zdHJpbmcoKSkucHRyKCksIGJ5dGVzKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdl
KS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0ZWRRdW90
YUZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhXZWJL
aXQ6OnRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkucHRyKCksIGJ5dGVzKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVBhZ2VSZXNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBh
Z2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdp
bihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyh0b0ltcGwob3JpZ2lu
KS0+c3RyaW5nKCkpLnB0cigpLCB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlKCkuZGVmYXVsdE9yaWdpblF1b3RhKCkpOworICAgIFdlYktpdDo6dG9JbXBs
KHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRl
ZFF1b3RhRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KFdlYktpdDo6dG9JbXBsKG9yaWdpbiktPnN0cmluZygpKS5wdHIoKSwgV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVmYXVsdE9yaWdp
blF1b3RhKCkpOwogfQogCiBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgYXV0byBvcmlnaW5z
ID0gdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9y
aWdpbnNXaXRoQ2FjaGUoKTsKKyAgICBhdXRvIG9yaWdpbnMgPSBXZWJLaXQ6OnRvSW1wbChwYWdl
KS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hl
KCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gb3JpZ2luSWRlbnRpZmllcnM7
CiAgICAgb3JpZ2luSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNp
emUoKSk7CkBAIC03NzAsNyArNzY4LDcgQEAgV0tBcnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5T3Jp
Z2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGZvciAo
Y29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2lucykKICAgICAgICAgb3JpZ2luSWRlbnRpZmllcnMu
dW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLT5kYXRhKCkuZGF0YWJh
c2VJZGVudGlmaWVyKCkpKTsKIAotICAgIHJldHVybiB0b0FQSSgmQVBJOjpBcnJheTo6Y3JlYXRl
KFdURk1vdmUob3JpZ2luSWRlbnRpZmllcnMpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKCZBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShvcmlnaW5JZGVudGlmaWVycykp
LmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0RXZlbnRUaHJvdHRsaW5nQmVo
YXZpb3JPdmVycmlkZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tFdmVudFRocm90dGxpbmdCZWhh
dmlvciogYmVoYXZpb3IpCkBAIC03ODcsNyArNzg1LDcgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRF
dmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0V2
ZW4KICAgICAgICAgfQogICAgIH0KIAotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0
RXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JPdmVycmlkZShiZWhhdmlvclZhbHVlKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0RXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JP
dmVycmlkZShiZWhhdmlvclZhbHVlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRDb21wb3Np
dGluZ1BvbGljeU92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0NvbXBvc2l0aW5nUG9s
aWN5KiBwb2xpY3kpCkBAIC04MDQsNiArODAyLDYgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRDb21w
b3NpdGluZ1BvbGljeU92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0NvbXBvc2l0aW4K
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0Q29t
cG9zaXRpbmdQb2xpY3lPdmVycmlkZShwb2xpY3lWYWx1ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPnNldENvbXBvc2l0aW5nUG9saWN5T3ZlcnJpZGUocG9saWN5VmFs
dWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlQmFubmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwCmluZGV4IGJl
MDk1NWUxYzU5ZDA0ODUzMjAwY2JhMDQ0NDFiNTk2Y2M4NjY1ODYuLmY4ZDA3NTAwNzcxYTBkYzM3
ZjQ4ODc3ODNiMjcwNWVmOTcxYjIyNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VC
YW5uZXIuY3BwCkBAIC0zMCw5ICszMCw3IEBACiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5j
bHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdL
VHlwZUlEIFdLQnVuZGxlUGFnZUJhbm5lckdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KFBhZ2VCYW5uZXI6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFBhZ2VCYW5u
ZXI6OkFQSVR5cGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VHcm91cC5jcHAKaW5k
ZXggZTA3NmNiOTdmYjEzMWY1N2FiY2QxYTRhNjc3ZDQ1ZTNhNTNhOGQ0Zi4uNGY1NmRkYjJjMTMx
Njg5MDMwMWYzNjc3ZTU5YzQ1NjU0NTJlMWFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUdyb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlR3JvdXAuY3BwCkBAIC0zMCwxNCArMzAsMTIgQEAKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNh
c3QuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogCi11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VHcm91cEdldFR5cGVJRCgpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKFdlYlBhZ2VHcm91cFByb3h5OjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0FQSShXZWJLaXQ6OldlYlBhZ2VHcm91cFByb3h5OjpBUElUeXBlKTsKIH0KIAogV0tT
dHJpbmdSZWYgV0tCdW5kbGVQYWdlR3JvdXBDb3B5SWRlbnRpZmllcihXS0J1bmRsZVBhZ2VHcm91
cFJlZiBidW5kbGVQYWdlR3JvdXApCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChi
dW5kbGVQYWdlR3JvdXApLT5pZGVudGlmaWVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29w
aWVkQVBJKFdlYktpdDo6dG9JbXBsKGJ1bmRsZVBhZ2VHcm91cCktPmlkZW50aWZpZXIoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggYjcwODFkNDI0
NGI4N2Q4N2Y3ODg1NWZkYWI0NjliZDM2MjlkMDIwMi4uNDg0ODZiOTY4ZTNmN2ZjOGIyNDJiYzU3
OWM2YzI4MmQ0M2FlNjRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5
LmNwcApAQCAtNTMsOSArNTMsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tC
dW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiAKIH0KIAotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLQotY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJbXBsIDogQVBJOjpD
bGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMgV2ViUGFnZU92ZXJs
YXk6OkNsaWVudCB7CitjbGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxX
S0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBXZWJLaXQ6OldlYlBhZ2VPdmVy
bGF5OjpDbGllbnQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5Q2xpZW50SW1w
bChXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSogY2xpZW50KQogICAgIHsKQEAgLTY4LDU5
ICs2Niw1OSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIC8vIFdlYlBhZ2VPdmVy
bGF5OjpDbGllbnQuCi0gICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFn
ZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCisgICAgLy8gV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheTo6Q2xpZW50LgorICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYktpdDo6V2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGlmICghbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9BUEkoJnBhZ2VPdmVy
bGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1f
Y2xpZW50LndpbGxNb3ZlVG9QYWdlKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgV2ViS2l0
Ojp0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViUGFn
ZSogcGFnZSkgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYktpdDo6V2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGlmICghbV9jbGllbnQuZGlkTW92ZVRvUGFnZSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3Zlcmxh
eSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2Ns
aWVudC5kaWRNb3ZlVG9QYWdlKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgV2ViS2l0Ojp0
b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAKLSAgICB2b2lk
IGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCkgb3ZlcnJpZGUKKyAgICB2b2lkIGRyYXdSZWN0KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBh
Z2VPdmVybGF5LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKCFtX2NsaWVudC5kcmF3UmVjdCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBt
X2NsaWVudC5kcmF3UmVjdCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxh
dGZvcm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5
KSwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBXZWJLaXQ6OnRvQVBJKGRpcnR5
UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
bW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGNvbnN0IFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCisgICAgYm9vbCBtb3VzZUV2ZW50KFdl
YktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9y
bU1vdXNlRXZlbnQmIGV2ZW50KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgc3dpdGNoIChldmVu
dC50eXBlKCkpIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5
cGU6Ok1vdXNlUHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9j
bGllbnQubW91c2VEb3duKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9u
KCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3duKFdlYktpdDo6dG9BUEkoJnBhZ2VP
dmVybGF5KSwgV2ViS2l0Ojp0b0FQSShldmVudC5wb3NpdGlvbigpKSwgV2ViS2l0Ojp0b0FQSShl
dmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlUmVsZWFz
ZWQ6IHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91c2VVcCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZVVwKHRv
QVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5i
dXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQubW91c2VVcChXZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdlYktpdDo6dG9B
UEkoZXZlbnQucG9zaXRpb24oKSksIFdlYktpdDo6dG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7CiAgICAgICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uKCkgPT0gV2ViQ29yZTo6TW91c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VN
b3ZlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VNb3ZlZChXZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdlYktpdDo6dG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBNb3VzZU1vdmUgZXZlbnQgd2l0aCBhIG1vdXNlIGJ1
dHRvbiBwcmVzc2VkLiBDYWxsIG1vdXNlRHJhZ2dlZC4KICAgICAgICAgICAgIGlmICghbV9jbGll
bnQubW91c2VEcmFnZ2VkKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0
b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dl
ZChXZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdlYktpdDo6dG9BUEkoZXZlbnQucG9zaXRp
b24oKSksIFdlYktpdDo6dG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyOSwxNCArMTI3LDE0
IEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9uQ29u
dGV4dCAqYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5LCBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uLCBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+JiByYW5nZUhhbmRsZSkgb3ZlcnJpZGUKKyAgICBEREFjdGlvbkNvbnRleHQgKmFjdGlvbkNv
bnRleHRGb3JSZXN1bHRBdFBvaW50KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5
LCBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uLCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+JiBy
YW5nZUhhbmRsZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChtX2NsaWVudC5hY3Rpb25D
b250ZXh0Rm9yUmVzdWx0QXRQb2ludCkgewogICAgICAgICAgICAgV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiBhcGlSYW5nZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBEREFjdGlvbkNvbnRleHQgKmFj
dGlvbkNvbnRleHQgPSAoRERBY3Rpb25Db250ZXh0ICopbV9jbGllbnQuYWN0aW9uQ29udGV4dEZv
clJlc3VsdEF0UG9pbnQodG9BUEkoJnBhZ2VPdmVybGF5KSwgV0tQb2ludE1ha2UobG9jYXRpb24u
eCgpLCBsb2NhdGlvbi55KCkpLCAmYXBpUmFuZ2UsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICBEREFjdGlvbkNvbnRleHQgKmFjdGlvbkNvbnRleHQgPSAoRERBY3Rpb25D
b250ZXh0ICopbV9jbGllbnQuYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0Ojp0
b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShsb2NhdGlvbi54KCksIGxvY2F0aW9uLnko
KSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIAogICAgICAgICAgICAg
aWYgKGFwaVJhbmdlKQotICAgICAgICAgICAgICAgIHJhbmdlSGFuZGxlID0gJnRvSW1wbChhcGlS
YW5nZSktPmNvcmVSYW5nZSgpOworICAgICAgICAgICAgICAgIHJhbmdlSGFuZGxlID0gJldlYktp
dDo6dG9JbXBsKGFwaVJhbmdlKS0+Y29yZVJhbmdlKCk7CiAKICAgICAgICAgICAgIHJldHVybiBh
Y3Rpb25Db250ZXh0OwogICAgICAgICB9CkBAIC0xNDQsNjUgKzE0Miw2NSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAotICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZFBy
ZXNlbnRVSShXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXkpIG92ZXJyaWRlCisgICAgdm9pZCBk
YXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVy
bGF5KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kYXRhRGV0ZWN0b3Jz
RGlkUHJlc2VudFVJKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRh
dGFEZXRlY3RvcnNEaWRQcmVzZW50VUkodG9BUEkoJnBhZ2VPdmVybGF5KSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQuZGF0YURldGVjdG9yc0RpZFByZXNlbnRV
SShXZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgfQogCi0gICAgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViUGFnZU92ZXJs
YXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQorICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZENoYW5n
ZVVJKFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQogICAgIHsK
ICAgICAgICAgaWYgKCFtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGF0YURldGVjdG9yc0RpZENoYW5nZVVJ
KHRvQVBJKCZwYWdlT3ZlcmxheSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAg
IG1fY2xpZW50LmRhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSShXZWJLaXQ6OnRvQVBJKCZwYWdlT3Zl
cmxheSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogCi0gICAgdm9pZCBkYXRh
RGV0ZWN0b3JzRGlkSGlkZVVJKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUK
KyAgICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYg
cGFnZU92ZXJsYXkpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRhdGFE
ZXRlY3RvcnNEaWRIaWRlVUkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGll
bnQuZGF0YURldGVjdG9yc0RpZEhpZGVVSSh0b0FQSSgmcGFnZU92ZXJsYXkpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlkSGlkZVVJ
KFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi0gICAgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVy
bGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgU3Ry
aW5nJiB2YWx1ZSkgb3ZlcnJpZGUKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
U3RyaW5nVmFsdWVGb3JQb2ludChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwg
U3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYg
dmFsdWUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2Uo
cGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xp
ZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKLSAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUpLT50eXBl
KCkgIT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nl
c3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
V2ViS2l0Ojp0b0FQSSgmcGFnZU92ZXJsYXkpLCBXZWJLaXQ6OnRvQ29waWVkQVBJKGF0dHJpYnV0
ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnko
KSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAg
ICAgICAgaWYgKFdlYktpdDo6dG9JbXBsKHdrVHlwZSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPSB0b1dU
RlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlKSk7CisgICAgICAgIHZhbHVl
ID0gV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXks
IFN0cmluZyBhdHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2
YWx1ZSkgb3ZlcnJpZGUKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFN0cmluZyBh
dHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9D
b3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIu
eCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNl
LmNsaWVudEluZm8pOwotICAgICAgICBpZiAodG9JbXBsKHdrVHlwZSktPnR5cGUoKSAhPSBBUEk6
OkJvb2xlYW46OkFQSVR5cGUpCisgICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5
Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV2ViS2l0Ojp0
b0FQSSgmcGFnZU92ZXJsYXkpLCBXZWJLaXQ6OnRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9p
bnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYg
KFdlYktpdDo6dG9JbXBsKHdrVHlwZSktPnR5cGUoKSAhPSBBUEk6OkJvb2xlYW46OkFQSVR5cGUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlID0gV0tCb29sZWFuR2V0
VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPih3a1R5cGUpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWRO
YW1lcykgb3ZlcnJpZGUKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzKFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBib29sIHBhcmFt
ZXJpemVkTmFtZXMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1l
czsKICAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcykKICAgICAgICAgICAgIHJldHVybiBuYW1lczsKLSAgICAg
ICAgYXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWRO
YW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIGF1dG8gd2tOYW1lcyA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwg
cGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xp
ZW50SW5mbyk7CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1l
cyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAg
ICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7
Ci0gICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQ
SVR5cGUpCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICAgICAgaWYgKFdlYktpdDo6dG9JbXBs
KGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAg
bmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KGl0ZW0pKSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbmFtZXM7CkBAIC0yMTMsMjMg
KzIxMSwyMyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVybGF5R2V0VHlw
ZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUGFnZU92ZXJsYXk6OkFQSVR5cGUpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OkFQSVR5cGUpOwog
fQogCiBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tC
dW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqIHdrQ2xpZW50KQogewogICAgIGF1dG8gY2xpZW50
SW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDbGllbnRJbXBsPih3a0NsaWVudCk7
Ci0gICAgcmV0dXJuIHRvQVBJKCZXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdURk1vdmUoY2xpZW50
SW1wbCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2Vi
UGFnZU92ZXJsYXk6OmNyZWF0ZShXVEZNb3ZlKGNsaWVudEltcGwpKS5sZWFrUmVmKCkpOwogfQog
CiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlB
Y2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50KQogewotICAgIHN0YXRpY19jYXN0PFBhZ2VP
dmVybGF5Q2xpZW50SW1wbCY+KHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPmNsaWVudCgp
KS5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nhc3Q8UGFnZU92
ZXJsYXlDbGllbnRJbXBsJj4oV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUGFnZU92ZXJsYXlSZWYpLT5j
bGllbnQoKSkuc2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdLQnVu
ZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5k
bGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVBhZ2VP
dmVybGF5UmVmKS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJlY3QodG9GbG9hdFJlY3Qo
cmVjdCkpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPnNldE5l
ZWRzRGlzcGxheShlbmNsb3NpbmdJbnRSZWN0KFdlYktpdDo6dG9GbG9hdFJlY3QocmVjdCkpKTsK
IH0KIAogZmxvYXQgV0tCdW5kbGVQYWdlT3ZlcmxheUZyYWN0aW9uRmFkZWRJbihXS0J1bmRsZVBh
Z2VPdmVybGF5UmVmKQpAQCAtMjQzLDUgKzI0MSw1IEBAIGZsb2F0IFdLQnVuZGxlUGFnZU92ZXJs
YXlGcmFjdGlvbkZhZGVkSW4oV0tCdW5kbGVQYWdlT3ZlcmxheVJlZikKIAogdm9pZCBXS0J1bmRs
ZVBhZ2VPdmVybGF5Q2xlYXIoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3Zlcmxh
eVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUGFnZU92ZXJsYXlSZWYpLT5jbGVhcigpOworICAg
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+Y2xlYXIoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCA0MzcxN2M5MTVkMDYyYjNk
NGE0YjdkZjBlZjMxYzNmNTY2MWU1NDk4Li5kZjQ0MjdlODM3YThjZjZkYmNkMjM4ODhkOGE4Njgw
NWU4YjNhMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBA
IC0zMywyNyArMzMsMjUgQEAKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZVJhbmdlSGFuZGxlR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpBUElUeXBlKTsKIH0KIAogV0tCdW5kbGVS
YW5nZUhhbmRsZVJlZiBXS0J1bmRsZVJhbmdlSGFuZGxlQ3JlYXRlKEpTQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6
Z2V0T3JDcmVhdGUoY29udGV4dFJlZiwgb2JqZWN0UmVmKTsKLSAgICByZXR1cm4gdG9BUEkocmFu
Z2VIYW5kbGUubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRs
ZTo6Z2V0T3JDcmVhdGUoY29udGV4dFJlZiwgb2JqZWN0UmVmKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShyYW5nZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBXS1JlY3QgV0tCdW5kbGVSYW5n
ZUhhbmRsZUdldEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoV0tCdW5kbGVSYW5nZUhh
bmRsZVJlZiByYW5nZUhhbmRsZVJlZikKIHsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5n
UmVjdCA9IHRvSW1wbChyYW5nZUhhbmRsZVJlZiktPmJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMoKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kaW5nUmVjdCA9IFdlYktpdDo6dG9J
bXBsKHJhbmdlSGFuZGxlUmVmKS0+Ym91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpOwog
ICAgIHJldHVybiBXS1JlY3RNYWtlKGJvdW5kaW5nUmVjdC54KCksIGJvdW5kaW5nUmVjdC55KCks
IGJvdW5kaW5nUmVjdC53aWR0aCgpLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCkpOwogfQogCiBXS0lt
YWdlUmVmIFdLQnVuZGxlUmFuZ2VIYW5kbGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRs
ZVJhbmdlSGFuZGxlUmVmIHJhbmdlSGFuZGxlUmVmLCBXS1NuYXBzaG90T3B0aW9ucyBvcHRpb25z
KQogewotICAgIFJlZlB0cjxXZWJJbWFnZT4gaW1hZ2UgPSB0b0ltcGwocmFuZ2VIYW5kbGVSZWYp
LT5yZW5kZXJlZEltYWdlKHRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMpKTsKLSAgICByZXR1cm4g
dG9BUEkoaW1hZ2UubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gaW1h
Z2UgPSBXZWJLaXQ6OnRvSW1wbChyYW5nZUhhbmRsZVJlZiktPnJlbmRlcmVkSW1hZ2UoV2ViS2l0
Ojp0b1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
aW1hZ2UubGVha1JlZigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVNjcmlwdFdvcmxkLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVNjcmlwdFdvcmxk
LmNwcAppbmRleCBlZjY5Nzc5Y2Y0YTY5ZDk3YTczZjMzOTQwMWNhN2NiZmQwZGM3ZTI1Li5kYmZm
M2I4ZWZkYjE5YjU2ZTIxNGZkMDEyNWFjZmMyMGQzNjk1NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVTY3JpcHRXb3Js
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlU2NyaXB0V29ybGQuY3BwCkBAIC0zMCw0MCArMzAsMzggQEAKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKIAotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVTY3JpcHRXb3JsZEdldFR5cGVJRCgpCiB7
Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6OkFQSVR5cGUpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZDo6QVBJVHlwZSk7CiB9CiAKIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgV0tCdW5kbGVTY3JpcHRX
b3JsZENyZWF0ZVdvcmxkKCkKIHsKLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZD4gd29ybGQgPSBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpjcmVhdGUoKTsKLSAgICByZXR1
cm4gdG9BUEkod29ybGQubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVNjcmlwdFdvcmxkPiB3b3JsZCA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkod29ybGQubGVha1JlZigpKTsK
IH0KIAogV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBXS0J1bmRsZVNjcmlwdFdvcmxkTm9ybWFsV29y
bGQoKQogewotICAgIHJldHVybiB0b0FQSSgmSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDo6bm9y
bWFsV29ybGQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6SW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZDo6bm9ybWFsV29ybGQoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVTY3Jp
cHRXb3JsZENsZWFyV3JhcHBlcnMoV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJl
ZikKIHsKLSAgICB0b0ltcGwoc2NyaXB0V29ybGRSZWYpLT5jbGVhcldyYXBwZXJzKCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpLT5jbGVhcldyYXBwZXJzKCk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVTY3JpcHRXb3JsZE1ha2VBbGxTaGFkb3dSb290c09wZW4oV0tCdW5kbGVTY3Jp
cHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJlZikKIHsKLSAgICB0b0ltcGwoc2NyaXB0V29ybGRSZWYp
LT5tYWtlQWxsU2hhZG93Um9vdHNPcGVuKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29y
bGRSZWYpLT5tYWtlQWxsU2hhZG93Um9vdHNPcGVuKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVTY3Jp
cHRXb3JsZERpc2FibGVPdmVycmlkZUJ1aWx0aW5zQmVoYXZpb3IoV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiBzY3JpcHRXb3JsZFJlZikKIHsKLSAgICB0b0ltcGwoc2NyaXB0V29ybGRSZWYpLT5kaXNh
YmxlT3ZlcnJpZGVCdWlsdGluc0JlaGF2aW9yKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoc2NyaXB0
V29ybGRSZWYpLT5kaXNhYmxlT3ZlcnJpZGVCdWlsdGluc0JlaGF2aW9yKCk7CiB9CiAKIFdLU3Ry
aW5nUmVmIFdLQnVuZGxlU2NyaXB0V29ybGRDb3B5TmFtZShXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHNjcmlwdFdvcmxkUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoc2NyaXB0
V29ybGRSZWYpLT5uYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktp
dDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKS0+bmFtZSgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356366</attachid>
            <date>2018-12-03 01:03:57 -0800</date>
            <delta_ts>2018-12-03 01:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192301-20181203180356.patch</filename>
            <type>text/plain</type>
            <size>106979</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3ODM3MjNhMjU3OGU1OWE4
YmFjNzE2YTFkNjdmN2QzY2UxNDg1ZTAuLmYzZDhhMmZjYjhiYjRiYjE0MzE4MmExMWFiM2VlMDNh
YTczNzQ4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTgtMTItMDMgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgUmVtb3ZlICJ1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0IiB1bmRlciBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTIzMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmVkICJ1c2luZyBuYW1lc3BhY2UgV2ViS2l0IiBzdGF0ZW1lbnQsIGFuZCB1c2Ug
IldlYktpdDo6IgorICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGluc3RlYWQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVzdFJlc3VsdC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUlu
c3BlY3Rvci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlU2NyaXB0V29ybGQuY3BwOgorCiAyMDE4LTEyLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1BTT05dIHByb2Nlc3Mtc3dh
cHBpbmcgbWF5IG9jY3VyIGV2ZW4gdGhvdWdoIG9wZW5lciBoYXMgaGFuZGxlIHRvIG9wZW5lZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggMWNlMjUyNGVkYmFmMmZiZjFhYTViOGQ5N2VjOGE1ZTMw
Yjg3NTc1Ni4uZGI4MTk3OTBhNWVmMmZjNjM2ZTU1NTdmY2Y0ODI4ZTE5NGIzOWZhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGUuY3BwCkBAIC00OCwxNzkgKzQ4LDE3NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJU
aHJlYWRQcm94eS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlOjpBUElU
eXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpB
UElUeXBlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldENsaWVudChXS0J1bmRsZVJlZiBidW5kbGVS
ZWYsIFdLQnVuZGxlQ2xpZW50QmFzZSAqd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJl
ZiktPnNldENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEluamVjdGVkQnVuZGxlQ2xpZW50Pih3a0Ns
aWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldENsaWVudChzdGQ6Om1h
a2VfdW5pcXVlPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVDbGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVTZXRTZXJ2aWNlV29ya2VyUHJveHlDcmVhdGlvbkNhbGxiYWNrKFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgdm9pZCAoKmNhbGxiYWNrKSh1aW50NjRfdCkpCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQcm94eUNyZWF0aW9uQ2FsbGJhY2soY2Fs
bGJhY2spOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQ
cm94eUNyZWF0aW9uQ2FsbGJhY2soY2FsbGJhY2spOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5wb3N0
TWVzc2FnZSh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RNZXNzYWdlKFdlYktpdDo6
dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShXS0J1bmRsZVJl
ZiBidW5kbGVSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2Fn
ZUJvZHlSZWYsIFdLVHlwZVJlZiogcmV0dXJuRGF0YVJlZikKIHsKICAgICBSZWZQdHI8QVBJOjpP
YmplY3Q+IHJldHVybkRhdGE7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RTeW5jaHJvbm91
c01lc3NhZ2UodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2FnZUJvZHlS
ZWYpLCByZXR1cm5EYXRhKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJL
aXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOwogICAgIGlmIChyZXR1cm5E
YXRhUmVmKQotICAgICAgICAqcmV0dXJuRGF0YVJlZiA9IHRvQVBJKHJldHVybkRhdGEubGVha1Jl
ZigpKTsKKyAgICAgICAgKnJldHVybkRhdGFSZWYgPSBXZWJLaXQ6OnRvQVBJKHJldHVybkRhdGEu
bGVha1JlZigpKTsKIH0KIAogV0tDb25uZWN0aW9uUmVmIFdLQnVuZGxlR2V0QXBwbGljYXRpb25D
b25uZWN0aW9uKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9J
bXBsKGJ1bmRsZVJlZiktPndlYkNvbm5lY3Rpb25Ub1VJUHJvY2VzcygpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT53ZWJDb25uZWN0aW9uVG9V
SVByb2Nlc3MoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRP
YmplY3RzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+
Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cygpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVJlZiktPmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKTsKIH0KIAogdm9pZCBX
S0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVybmF0ZVRocmVhZEZv
ckRlYnVnZ2luZyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIGJvb2wgd2FpdFVudGlsRG9uZSkKIHsK
LSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0c09u
QWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdhaXRVbnRpbERvbmUpOworICAgIFdlYktpdDo6
dG9JbXBsKGJ1bmRsZVJlZiktPmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVy
bmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsKIH0KIAogc2l6ZV90IFdLQnVu
ZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChXS0J1bmRsZVJlZiBidW5kbGVSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChidW5kbGVSZWYpLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPmphdmFTY3JpcHRPYmplY3RzQ291
bnQoKTsKIH0KIAogdm9pZCBXS0J1bmRsZUFkZFVzZXJTY3JpcHQoV0tCdW5kbGVSZWYgYnVuZGxl
UmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLQnVuZGxlU2NyaXB0V29y
bGRSZWYgc2NyaXB0V29ybGRSZWYsIFdLU3RyaW5nUmVmIHNvdXJjZVJlZiwgV0tVUkxSZWYgdXJs
UmVmLCBXS0FycmF5UmVmIHdoaXRlbGlzdFJlZiwgV0tBcnJheVJlZiBibGFja2xpc3RSZWYsIF9X
S1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWVSZWYsIFdLVXNlckNvbnRlbnRJ
bmplY3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lc1JlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVm
KS0+YWRkVXNlclNjcmlwdCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgdG9JbXBsKHNjcmlwdFdvcmxk
UmVmKSwgdG9XVEZTdHJpbmcoc291cmNlUmVmKSwgdG9XVEZTdHJpbmcodXJsUmVmKSwgdG9JbXBs
KHdoaXRlbGlzdFJlZiksIHRvSW1wbChibGFja2xpc3RSZWYpLCB0b1VzZXJTY3JpcHRJbmplY3Rp
b25UaW1lKGluamVjdGlvblRpbWVSZWYpLCB0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5q
ZWN0ZWRGcmFtZXNSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5hZGRVc2Vy
U2NyaXB0KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlw
dFdvcmxkUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhzb3VyY2VSZWYpLCBXZWJLaXQ6OnRvV1RG
U3RyaW5nKHVybFJlZiksIFdlYktpdDo6dG9JbXBsKHdoaXRlbGlzdFJlZiksIFdlYktpdDo6dG9J
bXBsKGJsYWNrbGlzdFJlZiksIFdlYktpdDo6dG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmpl
Y3Rpb25UaW1lUmVmKSwgV2ViS2l0Ojp0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0
ZWRGcmFtZXNSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUFkZFVzZXJTdHlsZVNoZWV0KFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VSZWYs
IFdLVVJMUmVmIHVybFJlZiwgV0tBcnJheVJlZiB3aGl0ZWxpc3RSZWYsIFdLQXJyYXlSZWYgYmxh
Y2tsaXN0UmVmLCBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXNSZWYp
CiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0KHRvSW1wbChwYWdl
R3JvdXBSZWYpLCB0b0ltcGwoc2NyaXB0V29ybGRSZWYpLCB0b1dURlN0cmluZyhzb3VyY2VSZWYp
LCB0b1dURlN0cmluZyh1cmxSZWYpLCB0b0ltcGwod2hpdGVsaXN0UmVmKSwgdG9JbXBsKGJsYWNr
bGlzdFJlZiksIHRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1lc1JlZikp
OworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0KFdlYktp
dDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwg
V2ViS2l0Ojp0b1dURlN0cmluZyhzb3VyY2VSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHVybFJl
ZiksIFdlYktpdDo6dG9JbXBsKHdoaXRlbGlzdFJlZiksIFdlYktpdDo6dG9JbXBsKGJsYWNrbGlz
dFJlZiksIFdlYktpdDo6dG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJhbWVz
UmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1vdmVVc2VyU2NyaXB0KFdLQnVuZGxlUmVmIGJ1
bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTY3JpcHQodG9JbXBsKHBhZ2VHcm91cFJlZiksIHRvSW1w
bChzY3JpcHRXb3JsZFJlZiksIHRvV1RGU3RyaW5nKHVybFJlZikpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTY3JpcHQoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3Vw
UmVmKSwgV2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5n
KHVybFJlZikpOwogfQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlVXNlclN0eWxlU2hlZXQoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWYgc2NyaXB0V29ybGRSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAg
ICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlVXNlclN0eWxlU2hlZXQodG9JbXBsKHBhZ2VHcm91
cFJlZiksIHRvSW1wbChzY3JpcHRXb3JsZFJlZiksIHRvV1RGU3RyaW5nKHVybFJlZikpOworICAg
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTdHlsZVNoZWV0KFdlYktpdDo6
dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwgV2Vi
S2l0Ojp0b1dURlN0cmluZyh1cmxSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92ZVVzZXJT
Y3JpcHRzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmKQogewotICAgIHRv
SW1wbChidW5kbGVSZWYpLT5yZW1vdmVVc2VyU2NyaXB0cyh0b0ltcGwocGFnZUdyb3VwUmVmKSwg
dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+
cmVtb3ZlVXNlclNjcmlwdHMoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSwgV2ViS2l0Ojp0
b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92ZVVzZXJTdHls
ZVNoZWV0cyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJlZikKIHsKLSAgICB0
b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlVXNlclN0eWxlU2hlZXRzKHRvSW1wbChwYWdlR3JvdXBS
ZWYpLCB0b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVS
ZWYpLT5yZW1vdmVVc2VyU3R5bGVTaGVldHMoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSwg
V2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92
ZUFsbFVzZXJDb250ZW50KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5yZW1vdmVBbGxVc2Vy
Q29udGVudCh0b0ltcGwocGFnZUdyb3VwUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxl
UmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnQoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihX
S0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwg
V0tTdHJpbmdSZWYgcHJlZmVyZW5jZSwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5k
bGVSZWYpLT5vdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcih0b0ltcGwocGFnZUdy
b3VwUmVmKSwgdG9XVEZTdHJpbmcocHJlZmVyZW5jZSksIGVuYWJsZWQpOworICAgIFdlYktpdDo6
dG9JbXBsKGJ1bmRsZVJlZiktPm92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKFdl
YktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9XVEZTdHJpbmcocHJlZmVyZW5j
ZSksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHModG9JbXBsKHBhZ2VHcm91cFJlZiksIGVu
YWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldEFsbG93VW5pdmVyc2Fs
QWNjZXNzRnJvbUZpbGVVUkxzKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29s
IGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0
b0ltcGwoYnVuZGxlUmVmKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFdlYktpdDo6
dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QWxs
b3dTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxTKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5k
bGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIG5lZWRzUXVpcmspCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnNldE5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBuZWVkc1F1aXJrKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5zZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayhXZWJLaXQ6OnRv
SW1wbChwYWdlR3JvdXBSZWYpLCBuZWVkc1F1aXJrKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldE1p
bmltdW1Mb2dpY2FsRm9udFNpemUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIGludCBzaXplKQogewotICAgIHRvSW1wbChidW5kbGVSZWYp
LT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBzaXplKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIHNpemUpOwogfQogCiB2b2lkIFdLQnVuZGxl
U2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxl
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChi
dW5kbGVSZWYpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRGcmFtZUZsYXR0
ZW5pbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQog
CiB2b2lkIFdLQnVuZGxlU2V0QXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJsZWQoV0tCdW5kbGVSZWYg
YnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0QXN5bmNGcmFtZVNjcm9sbGluZ0VuYWJs
ZWQodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVJlZiktPnNldEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBh
Z2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5kbGVSZWYp
LT5zZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBl
bmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRKYXZhU2NyaXB0Q2Fu
QWNjZXNzQ2xpcGJvYXJkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwog
fQogCiB2b2lkIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXS0J1bmRsZVJlZiBi
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVk
KQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRv
SW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVS
ZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJl
ZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJp
bGl0eU1vZGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0VXNl
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFdLQnVuZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoV0tCdW5kbGVSZWYgYnVuZGxlUmVm
LCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQodG9JbXBsKHBhZ2VH
cm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFBv
cHVwQmxvY2tpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQp
OwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdlYktpdDo6dG9J
bXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJl
ZiktPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5h
YmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0U3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFdLQnVuZGxlQWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoV0tCdW5kbGVSZWYgYnVu
ZGxlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0
aW9uU3ViZG9tYWlucykKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+YWRkT3JpZ2luQWNjZXNz
V2hpdGVsaXN0RW50cnkodG9XVEZTdHJpbmcoc291cmNlT3JpZ2luKSwgdG9XVEZTdHJpbmcoZGVz
dGluYXRpb25Qcm90b2NvbCksIHRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uSG9zdCksIGFsbG93RGVz
dGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5hZGRP
cmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShXZWJLaXQ6OnRvV1RGU3RyaW5nKHNvdXJjZU9yaWdp
biksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2NvbCksIFdlYktpdDo6dG9X
VEZTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwog
fQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoV0tCdW5k
bGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIFdLU3RyaW5nUmVmIGRl
c3RpbmF0aW9uUHJvdG9jb2wsIFdLU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucykKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3Zl
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkodG9XVEZTdHJpbmcoc291cmNlT3JpZ2luKSwgdG9X
VEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2NvbCksIHRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uSG9z
dCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShXZWJLaXQ6OnRvV1RGU3Ry
aW5nKHNvdXJjZU9yaWdpbiksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Qcm90b2Nv
bCksIFdlYktpdDo6dG9XVEZTdHJpbmcoZGVzdGluYXRpb25Ib3N0KSwgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnMpOwogfQogCiB2b2lkIFdLQnVuZGxlUmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVz
ZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVm
KS0+cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVTZXRB
c3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdL
QnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRv
SW1wbChidW5kbGVSZWYpLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCh0b0lt
cGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVm
KS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoV2ViS2l0Ojp0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgZW5hYmxlZCk7CiB9CiAKIFdLQXJyYXlSZWYgV0tCdW5kbGVHZXRMaXZlRG9j
dW1lbnRVUkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmLCBib29sIGV4Y2x1ZGVEb2N1bWVudHNJblBhZ2VHcm91cFBhZ2VzKQogewotICAg
IGF1dG8gbGl2ZURvY3VtZW50cyA9IHRvSW1wbChidW5kbGVSZWYpLT5saXZlRG9jdW1lbnRVUkxz
KHRvSW1wbChwYWdlR3JvdXBSZWYpLCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdlcyk7
CisgICAgYXV0byBsaXZlRG9jdW1lbnRzID0gV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+bGl2
ZURvY3VtZW50VVJMcyhXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBleGNsdWRlRG9jdW1l
bnRzSW5QYWdlR3JvdXBQYWdlcyk7CiAKICAgICBhdXRvIGxpdmVVUkxzID0gYWRvcHRXSyhXS011
dGFibGVBcnJheUNyZWF0ZSgpKTsKIApAQCAtMjMxLDcgKzIyOSw3IEBAIFdLQXJyYXlSZWYgV0tC
dW5kbGVHZXRMaXZlRG9jdW1lbnRVUkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQ
YWdlR3JvdXBSCiAgICAgICAgIGF1dG8gZG9jdW1lbnRVUkxLZXkgPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1cmwiKSk7CiAKICAgICAgICAgYXV0byBkb2N1bWVudElE
VmFsdWUgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKGl0LmtleSkpOwotICAgICAgICBhdXRvIGRv
Y3VtZW50VVJMVmFsdWUgPSBhZG9wdFdLKHRvQ29waWVkQVBJKGl0LnZhbHVlKSk7CisgICAgICAg
IGF1dG8gZG9jdW1lbnRVUkxWYWx1ZSA9IGFkb3B0V0soV2ViS2l0Ojp0b0NvcGllZEFQSShpdC52
YWx1ZSkpOwogCiAgICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0odXJsSW5mby5nZXQoKSwgZG9j
dW1lbnRJREtleS5nZXQoKSwgZG9jdW1lbnRJRFZhbHVlLmdldCgpKTsKICAgICAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbSh1cmxJbmZvLmdldCgpLCBkb2N1bWVudFVSTEtleS5nZXQoKSwgZG9jdW1l
bnRVUkxWYWx1ZS5nZXQoKSk7CkBAIC0yNDQsNyArMjQyLDcgQEAgV0tBcnJheVJlZiBXS0J1bmRs
ZUdldExpdmVEb2N1bWVudFVSTHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VH
cm91cFIKIAogdm9pZCBXS0J1bmRsZVJlcG9ydEV4Y2VwdGlvbihKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiBleGNlcHRpb24pCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnJlcG9ydEV4
Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOworICAgIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6
OnJlcG9ydEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24pOwogfQogCiB2b2lkIFdLQnVuZGxl
Q2xlYXJBbGxEYXRhYmFzZXMoV0tCdW5kbGVSZWYpCkBAIC0yNTUsNyArMjUzLDcgQEAgdm9pZCBX
S0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKFdLQnVuZGxlUmVmKQogdm9pZCBXS0J1bmRsZVNldERh
dGFiYXNlUXVvdGEoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCB1aW50NjRfdCBxdW90YSkKIHsKICAg
ICAvLyBIaXN0b3JpY2FsbHksIHdlJ3ZlIHVzZWQgdGhlIGZvbGxvd2luZyAoc29tZXdoYXQgbm9u
c2Vuc2ljYWwpIHN0cmluZyBmb3IgdGhlIGRhdGFiYXNlSWRlbnRpZmllciBvZiBsb2NhbCBmaWxl
cy4KLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLnNldFF1b3RhKCpT
ZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoImZpbGVfXzAiKSwgcXVv
dGEpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9uKCkuc2V0UXVvdGEo
KldlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKCJmaWxl
X18wIiksIHF1b3RhKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbGVhc2VNZW1vcnkoV0tCdW5kbGVS
ZWYpCkBAIC0yNjUsNTcgKzI2Myw1NyBAQCB2b2lkIFdLQnVuZGxlUmVsZWFzZU1lbW9yeShXS0J1
bmRsZVJlZikKIAogV0tEYXRhUmVmIFdLQnVuZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXko
V0tCdW5kbGVSZWYgYnVuZGxlLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBkYXRh
KQogewotICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKGJ1bmRsZSktPmNyZWF0ZVdlYkRhdGFGcm9t
VWludDhBcnJheShjb250ZXh0LCBkYXRhKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKCZXZWJLaXQ6OnRvSW1wbChidW5kbGUpLT5jcmVhdGVXZWJEYXRhRnJvbVVpbnQ4QXJy
YXkoY29udGV4dCwgZGF0YSkubGVha1JlZigpKTsKIH0KIAogaW50IFdLQnVuZGxlTnVtYmVyT2ZQ
YWdlcyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIGRv
dWJsZSBwYWdlV2lkdGhJblBpeGVscywgZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscykKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKGJ1bmRsZVJlZiktPm51bWJlck9mUGFnZXModG9JbXBsKGZyYW1lUmVm
KSwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscyk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPm51bWJlck9mUGFnZXMoV2ViS2l0Ojp0b0ltcGwoZnJh
bWVSZWYpLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKTsKIH0KIAogaW50
IFdLQnVuZGxlUGFnZU51bWJlckZvckVsZW1lbnRCeUlkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tTdHJpbmdSZWYgaWRSZWYsIGRvdWJsZSBwYWdl
V2lkdGhJblBpeGVscywgZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscykKIHsKLSAgICByZXR1cm4g
dG9JbXBsKGJ1bmRsZVJlZiktPnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCh0b0ltcGwoZnJhbWVS
ZWYpLCB0b1dURlN0cmluZyhpZFJlZiksIHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5Q
aXhlbHMpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wYWdlTnVtYmVy
Rm9yRWxlbWVudEJ5SWQoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLCBXZWJLaXQ6OnRvV1RGU3Ry
aW5nKGlkUmVmKSwgcGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscyk7CiB9CiAK
IFdLU3RyaW5nUmVmIFdLQnVuZGxlUGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoV0tCdW5kbGVS
ZWYgYnVuZGxlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBpbnQgcGFnZUluZGV4LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50
IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJ
KHRvSW1wbChidW5kbGVSZWYpLT5wYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyh0b0ltcGwoZnJh
bWVSZWYpLCBwYWdlSW5kZXgsIHdpZHRoLCBoZWlnaHQsIG1hcmdpblRvcCwgbWFyZ2luUmlnaHQs
IG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVk
QVBJKFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwgcGFnZUluZGV4LCB3aWR0aCwgaGVpZ2h0LCBtYXJn
aW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnQpKTsKIH0KIAogYm9v
bCBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lUmVmLCBpbnQgcGFnZUluZGV4KQogewotICAgIHJldHVybiB0b0ltcGwo
YnVuZGxlUmVmKS0+aXNQYWdlQm94VmlzaWJsZSh0b0ltcGwoZnJhbWVSZWYpLCBwYWdlSW5kZXgp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5pc1BhZ2VCb3hWaXNpYmxl
KFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwgcGFnZUluZGV4KTsKIH0KIAogYm9vbCBXS0J1bmRs
ZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKFdLQnVuZGxlUmVmKQogewotICAgIHJldHVybiBJbmpl
Y3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBX
S0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIGxvY2F0aW9uKQog
ewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKHRvSW1w
bChwYWdlR3JvdXBSZWYpLCB0b1dURlN0cmluZyhsb2NhdGlvbikpOworICAgIFdlYktpdDo6dG9J
bXBsKGJ1bmRsZVJlZiktPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oV2ViS2l0Ojp0b0ltcGwo
cGFnZUdyb3VwUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhsb2NhdGlvbikpOwogfQogCiB2b2lk
IFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihXS0J1bmRsZVJlZiBidW5kbGVS
ZWYsIFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBvcmlnaW5TdHJpbmdSZWYs
IGJvb2wgYWxsb3dlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbih0b0ltcGwocGFnZVJlZiksIHRvV1RGU3RyaW5nKG9yaWdpblN0cmluZ1Jl
ZiksIGFsbG93ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb24oV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiksIFdlYktpdDo6dG9XVEZT
dHJpbmcob3JpZ2luU3RyaW5nUmVmKSwgYWxsb3dlZCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1v
dmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5yZW1vdmVB
bGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyh0b0ltcGwocGFnZVJlZikpOworICAgIFdlYktp
dDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25z
KFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpKTsKIH0KIAogdWludDY0X3QgV0tCdW5kbGVHZXRXZWJO
b3RpZmljYXRpb25JRChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGJ1bmRsZVJl
ZiktPndlYk5vdGlmaWNhdGlvbklEKGNvbnRleHQsIG5vdGlmaWNhdGlvbik7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPndlYk5vdGlmaWNhdGlvbklEKGNvbnRleHQsIG5v
dGlmaWNhdGlvbik7CiB9CiAKIHZvaWQgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9v
bCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHModG9JbXBsKHBhZ2VSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChidW5kbGVSZWYpLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiksIGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlQ2xlYXJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKFdLQnVuZGxlUmVmKQpAQCAtMzM2LDYgKzMzNCw2IEBAIHZvaWQgV0tCdW5k
bGVFeHRlbmRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0Fy
cmF5UmVmIGNsYXNzCiAgICAgaWYgKCFjbGFzc0xpc3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHRvSW1wbChidW5kbGUpLT5leHRlbmRDbGFzc2VzRm9yUGFyYW1ldGVyQ29kZXIoKmNsYXNzTGlz
dCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlKS0+ZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyKCpjbGFzc0xpc3QpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCA0MmMyZThhMzZjNzc2NTFmNzFlYjhlYTJlYzkz
Y2RkNzdhNDgwMWU1Li4xZjA2NzMzZGRkMmI1MTU5MGJkYjc3OGExOTFkZmEyMmRiNWFiYWIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKIAogV0tUeXBlSUQgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RHZXRUeXBlSUQo
KQogewotICAgIHJldHVybiB0b0FQSShBUEk6Ok9iamVjdDo6VHlwZTo6TnVsbCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOwogfQogCiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDb3B5SXRlbUF0
SW5kZXgoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZiwgaW50IGluZGV4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcAppbmRl
eCA1YzhkOThlNmMwODE5NjkyYmQ5NzlkNDRjOGY4ODNhNjgxNjA4NjRmLi5kOGUzYTlmMjMxODdl
ZmIzYjViMDc2NGExNGIxMmQ1ZThjNTBiMjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcApAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNs
dWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogCi11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1H
ZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShBUEk6Ok9iamVjdDo6VHlwZTo6TnVsbCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOwogfQog
CiBib29sIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzU2FtZShXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZjEsIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBp
dGVtUmVmMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uY3BwCmluZGV4IGZjMzgxZjQ2YTY0MWZhMDc3NWMzZTU0NjQ4NjBkOWUwNGY0ODNlMmIuLmM5
NjMxMTUxNzJmNTI0OTA5MDNkNWViOWVlYzdhZmQ4MjU2YWM5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRv
d0V4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcApAQCAtMzEsMjYgKzMxLDI0
IEBACiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIK
IAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb25HZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJbmplY3RlZEJ1bmRsZURP
TVdpbmRvd0V4dGVuc2lvbjo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6QVBJVHlwZSk7CiB9CiAKIFdL
QnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uQ3Jl
YXRlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQp
CiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uPiBleHRlbnNp
b24gPSBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6Y3JlYXRlKHRvSW1wbChmcmFt
ZSksIHRvSW1wbCh3b3JsZCkpOwotICAgIHJldHVybiB0b0FQSShleHRlbnNpb24ubGVha1JlZigp
KTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbj4g
ZXh0ZW5zaW9uID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbjo6Y3Jl
YXRlKFdlYktpdDo6dG9JbXBsKGZyYW1lKSwgV2ViS2l0Ojp0b0ltcGwod29ybGQpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSShleHRlbnNpb24ubGVha1JlZigpKTsKIH0KIAogV0tCdW5kbGVG
cmFtZVJlZiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbkdldEZyYW1lKFdLQnVuZGxlRE9NV2lu
ZG93RXh0ZW5zaW9uUmVmIGV4dGVuc2lvbikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGV4
dGVuc2lvbiktPmZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9J
bXBsKGV4dGVuc2lvbiktPmZyYW1lKCkpOwogfQogCiBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIFdL
QnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uR2V0U2NyaXB0V29ybGQoV0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb25SZWYgZXh0ZW5zaW9uKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZXh0ZW5z
aW9uKS0+d29ybGQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwo
ZXh0ZW5zaW9uKS0+d29ybGQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcApp
bmRleCA3ODVkMWE1ZWI5NTM2MmU0OWI4Y2U2ZWVjZjZiMDliMjdiYWM4ZjY5Li4wYWM5NTQ1NjRj
NjM4M2FjMGY5YjFhOTFiNDAwMGJkMTUwZDIxMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRnJh
bWUuY3BwCkBAIC00NSwzNiArNDUsMzQgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
CiBXS1R5cGVJRCBXS0J1bmRsZUZyYW1lR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEko
V2ViRnJhbWU6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2Vi
RnJhbWU6OkFQSVR5cGUpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5p
c01haW5GcmFtZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmlzTWFp
bkZyYW1lKCk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVGcmFtZUdldFBhcmVudEZy
YW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1w
bChmcmFtZVJlZiktPnBhcmVudEZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdl
YktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGFyZW50RnJhbWUoKSk7CiB9CiAKIFdLVVJMUmVmIFdL
QnVuZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQ29waWVkVVJMQVBJKHRvSW1wbChmcmFtZVJlZiktPnVybCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPnVybCgpKTsK
IH0KIAogV0tVUkxSZWYgV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoZnJh
bWVSZWYpLT5wcm92aXNpb25hbFVSTCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVS
TEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPnByb3Zpc2lvbmFsVVJMKCkpOwogfQogCiBX
S0ZyYW1lTG9hZFN0YXRlIFdLQnVuZGxlRnJhbWVHZXRGcmFtZUxvYWRTdGF0ZShXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lUmVmKQogewotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSB0b0lt
cGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIGtXS0ZyYW1lTG9hZFN0YXRlRmluaXNoZWQ7CiAKQEAgLTkz
LDE0OSArOTEsMTQ5IEBAIFdLRnJhbWVMb2FkU3RhdGUgV0tCdW5kbGVGcmFtZUdldEZyYW1lTG9h
ZFN0YXRlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiAKIFdLQXJyYXlSZWYgV0tCdW5kbGVG
cmFtZUNvcHlDaGlsZEZyYW1lcyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJl
dHVybiB0b0FQSSgmdG9JbXBsKGZyYW1lUmVmKS0+Y2hpbGRGcmFtZXMoKS5sZWFrUmVmKCkpOyAg
ICAKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5j
aGlsZEZyYW1lcygpLmxlYWtSZWYoKSk7ICAgIAogfQogCiBKU0dsb2JhbENvbnRleHRSZWYgV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dCgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dCgpOwogfQogCiBXS0J1bmRsZUZy
YW1lUmVmIFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChKU0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViRnJhbWU6OmZyYW1lRm9yQ29udGV4dChjb250
ZXh0KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpXZWJGcmFtZTo6ZnJhbWVG
b3JDb250ZXh0KGNvbnRleHQpKTsKIH0KIAogSlNHbG9iYWxDb250ZXh0UmVmIFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYs
IFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChm
cmFtZVJlZiktPmpzQ29udGV4dEZvcldvcmxkKHRvSW1wbCh3b3JsZFJlZikpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzQ29udGV4dEZvcldvcmxkKFdlYktpdDo6dG9J
bXBsKHdvcmxkUmVmKSk7CiB9CiAKIEpTVmFsdWVSZWYgV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRXcmFwcGVyRm9yTm9kZUZvcldvcmxkKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdv
cmxkUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5qc1dyYXBwZXJGb3JXb3Js
ZCh0b0ltcGwobm9kZUhhbmRsZVJlZiksIHRvSW1wbCh3b3JsZFJlZikpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmpzV3JhcHBlckZvcldvcmxkKFdlYktpdDo6dG9JbXBs
KG5vZGVIYW5kbGVSZWYpLCBXZWJLaXQ6OnRvSW1wbCh3b3JsZFJlZikpOwogfQogCiBKU1ZhbHVl
UmVmIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0V3JhcHBlckZvclJhbmdlRm9yV29ybGQoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZUhhbmRs
ZVJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZFJlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKGZyYW1lUmVmKS0+anNXcmFwcGVyRm9yV29ybGQodG9JbXBsKHJhbmdlSGFuZGxlUmVmKSwg
dG9JbXBsKHdvcmxkUmVmKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+
anNXcmFwcGVyRm9yV29ybGQoV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLCBXZWJLaXQ6
OnRvSW1wbCh3b3JsZFJlZikpOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUZyYW1lQ29weU5h
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEko
dG9JbXBsKGZyYW1lUmVmKS0+bmFtZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQ
SShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPm5hbWUoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlRnJhbWVDb3B5Q291bnRlclZhbHVlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIEpT
T2JqZWN0UmVmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChmcmFt
ZVJlZiktPmNvdW50ZXJWYWx1ZShlbGVtZW50KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3Bp
ZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3VudGVyVmFsdWUoZWxlbWVudCkpOwog
fQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUZyYW1lQ29weUlubmVyVGV4dChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYp
LT5pbm5lclRleHQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0
b0ltcGwoZnJhbWVSZWYpLT5pbm5lclRleHQoKSk7CiB9CiAKIHVuc2lnbmVkIFdLQnVuZGxlRnJh
bWVHZXRQZW5kaW5nVW5sb2FkQ291bnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+cGVuZGluZ1VubG9hZENvdW50KCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGVuZGluZ1VubG9hZENvdW50KCk7CiB9CiAK
IFdLQnVuZGxlUGFnZVJlZiBXS0J1bmRsZUZyYW1lR2V0UGFnZShXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5wYWdlKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGFnZSgp
KTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1lQ2xlYXJPcGVuZXIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gdG9JbXBsKGZyYW1l
UmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFdlYktp
dDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CiAgICAgaWYgKGNvcmVGcmFtZSkKICAg
ICAgICAgY29yZUZyYW1lLT5sb2FkZXIoKS5zZXRPcGVuZXIoMCk7CiB9CiAKIHZvaWQgV0tCdW5k
bGVGcmFtZVN0b3BMb2FkaW5nKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgdG9J
bXBsKGZyYW1lUmVmKS0+c3RvcExvYWRpbmcoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TGF5
ZXJUcmVlQXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChmcmFtZVJlZiktPmxheWVyVHJlZUFzVGV4dCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmxheWVyVHJl
ZUFzVGV4dCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQWxsb3dzRm9sbG93aW5nTGluayhX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChmcmFtZVJlZiktPmFsbG93c0ZvbGxvd2luZ0xpbmsoVVJMKFVSTCgpLCB0b1dURlN0
cmluZyh1cmxSZWYpKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+YWxs
b3dzRm9sbG93aW5nTGluayhVUkwoVVJMKCksIFdlYktpdDo6dG9XVEZTdHJpbmcodXJsUmVmKSkp
OwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVIYW5kbGVzUGFnZVNjYWxlR2VzdHVyZShXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYp
LT5oYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKCkpOwogfQog
CiBXS1JlY3QgV0tCdW5kbGVGcmFtZUdldENvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+Y29udGVudEJv
dW5kcygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPmNvbnRlbnRCb3VuZHMoKSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZUZyYW1lR2V0VmlzaWJs
ZUNvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT52aXNpYmxlQ29udGVu
dEJvdW5kcygpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJv
dW5kc0V4Y2x1ZGluZ1Njcm9sbGJhcnMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNs
dWRpbmdTY3JvbGxiYXJzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9J
bXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNsdWRpbmdTY3JvbGxiYXJzKCkp
OwogfQogCiBXS1NpemUgV0tCdW5kbGVGcmFtZUdldFNjcm9sbE9mZnNldChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5zY3Jv
bGxPZmZzZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoZnJh
bWVSZWYpLT5zY3JvbGxPZmZzZXQoKSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVGcmFtZUhhc0hvcml6
b250YWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKGZyYW1lUmVmKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTsKIH0KIAog
Ym9vbCBXS0J1bmRsZUZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+aGFzVmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5oYXNWZXJ0aWNh
bFNjcm9sbGJhcigpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVHZXREb2N1bWVudEJhY2tncm91
bmRDb2xvcihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBkb3VibGUqIHJlZCwgZG91YmxlKiBn
cmVlbiwgZG91YmxlKiBibHVlLCBkb3VibGUqIGFscGhhKQogewotICAgIHJldHVybiB0b0ltcGwo
ZnJhbWVSZWYpLT5nZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Z2V0RG9jdW1lbnRC
YWNrZ3JvdW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiBXS1N0cmluZ1Jl
ZiBXS0J1bmRsZUZyYW1lQ29weVN1Z2dlc3RlZEZpbGVuYW1lRm9yUmVzb3VyY2VXaXRoVVJMKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAgICByZXR1cm4g
dG9Db3BpZWRBUEkodG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVkRmlsZW5hbWVGb3JSZXNvdXJj
ZVdpdGhVUkwoVVJMKFVSTCgpLCB0b1dURlN0cmluZyh1cmxSZWYpKSkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVkRmls
ZW5hbWVGb3JSZXNvdXJjZVdpdGhVUkwoVVJMKFVSTCgpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHVy
bFJlZikpKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JS
ZXNvdXJjZVdpdGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgdXJsUmVm
KQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5taW1lVHlwZUZv
clJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHVybFJlZikpKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5taW1l
VHlwZUZvclJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIFdlYktpdDo6dG9XVEZTdHJpbmcodXJs
UmVmKSkpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQ29udGFpbnNBbnlGb3JtRWxlbWVudHMo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVm
KS0+Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1FbGVtZW50cygpOwogfQogCiBib29sIFdLQnVuZGxl
RnJhbWVDb250YWluc0FueUZvcm1Db250cm9scyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1Db250cm9scygp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmNvbnRhaW5zQW55Rm9ybUNv
bnRyb2xzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24oV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tTdHJpbmdSZWYgZGlyZWN0aW9uUmVmKQogewotICAgIHRv
SW1wbChmcmFtZVJlZiktPnNldFRleHREaXJlY3Rpb24odG9XVEZTdHJpbmcoZGlyZWN0aW9uUmVm
KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5zZXRUZXh0RGlyZWN0aW9uKFdlYktp
dDo6dG9XVEZTdHJpbmcoZGlyZWN0aW9uUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVNl
dEFjY2Vzc2libGVOYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLU3RyaW5nUmVmIGFj
Y2Vzc2libGVOYW1lUmVmKQogewotICAgIHRvSW1wbChmcmFtZVJlZiktPnNldEFjY2Vzc2libGVO
YW1lKHRvV1RGU3RyaW5nKGFjY2Vzc2libGVOYW1lUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5zZXRBY2Nlc3NpYmxlTmFtZShXZWJLaXQ6OnRvV1RGU3RyaW5nKGFjY2Vzc2li
bGVOYW1lUmVmKSk7CiB9CiAKIFdLRGF0YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKQEAgLTI0Niw3ICsyNDQsNyBAQCBXS0RhdGFSZWYg
V0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiBX
S0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlRmlsdGVyaW5nU3ViZnJhbWVzKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLQnVuZGxlRnJhbWVGcmFtZUZpbHRlckNhbGxiYWNr
IGZyYW1lRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IHRvSW1wbChmcmFtZVJlZiktPndl
YkFyY2hpdmVEYXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOworICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGRhdGEgPSBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPndlYkFyY2hpdmVE
YXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOwogICAgIGlmIChkYXRhKQogICAgICAg
ICByZXR1cm4gV0tEYXRhQ3JlYXRlKENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSksIENGRGF0
YUdldExlbmd0aChkYXRhLmdldCgpKSk7CiAjZWxzZQpAQCAtMjYwLDcgKzI1OCw3IEBAIFdLRGF0
YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmVGaWx0ZXJpbmdTdWJmcmFtZXMoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZVJlCiAKIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIFdlYkNvcmU6OkZyYW1l
KiBjb3JlRnJhbWUgPSB0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogY29yZUZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUo
KTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI2OSwy
MSArMjY3LDIxIEBAIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogCiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgV0tC
dW5kbGVGcmFtZUNyZWF0ZUhpdFRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwg
V0tQb2ludCBwb2ludCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+aGl0
VGVzdCh0b0ludFBvaW50KHBvaW50KSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhpdFRlc3QoV2ViS2l0Ojp0b0ludFBvaW50
KHBvaW50KSkubGVha1JlZigpKTsKIH0KIAogV0tTZWN1cml0eU9yaWdpblJlZiBXS0J1bmRsZUZy
YW1lQ29weVNlY3VyaXR5T3JpZ2luKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IHRvSW1wbChmcmFtZVJlZiktPmNvcmVGcmFtZSgp
OworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBXZWJLaXQ6OnRvSW1wbChmcmFtZVJl
ZiktPmNvcmVGcmFtZSgpOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiB0b0NvcGllZEFQSSgmY29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSSgmY29yZUZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1lRm9j
dXMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29y
ZUZyYW1lID0gdG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVzdFJl
c3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAppbmRleCA2OTMzNDNjNzRmNmEwOTk1Y2ExMGY5NTQz
NTFmOWIyZWQyNzBlYjc2Li4wOTZlNWZkMTc0ODc4MjI3NjBjZDEzYjllYTQ0MWFkNWVkMzZiNjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAtMzMs
MTAyICszMywxMDAgQEAKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlSGl0VGVz
dFJlc3VsdEdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OkFQSVR5cGUpOwogfQogCiBXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoV0tCdW5kbGVIaXRU
ZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bm9k
ZUhhbmRsZSgpOwotICAgIHJldHVybiB0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAg
UmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2Vi
S2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm5vZGVIYW5kbGUoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5VVJMRWxlbWVudEhhbmRsZShXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICBSZWZQdHI8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiB1cmxFbGVtZW50Tm9kZUhhbmRsZSA9IHRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+dXJsRWxlbWVudEhhbmRsZSgpOwotICAgIHJldHVybiB0b0FQSSh1cmxFbGVt
ZW50Tm9kZUhhbmRsZS5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZT4gdXJsRWxlbWVudE5vZGVIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChoaXRU
ZXN0UmVzdWx0UmVmKS0+dXJsRWxlbWVudEhhbmRsZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRv
QVBJKHVybEVsZW1lbnROb2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVS
ZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0R2V0RnJhbWUoV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVm
IGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChoaXRUZXN0UmVz
dWx0UmVmKS0+ZnJhbWUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPmZyYW1lKCkpOwogfQogCiBXS0J1bmRsZUZyYW1lUmVmIFdL
QnVuZGxlSGl0VGVzdFJlc3VsdEdldFRhcmdldEZyYW1lKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJl
ZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPnRhcmdldEZyYW1lKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktp
dDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT50YXJnZXRGcmFtZSgpKTsKIH0KIAogV0tVUkxS
ZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlSW1hZ2VVUkwoV0tCdW5kbGVIaXRU
ZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJM
QVBJKHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0
UmVmKS0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKIH0KIAogV0tVUkxSZWYgV0tCdW5kbGVIaXRUZXN0
UmVzdWx0Q29weUFic29sdXRlUERGVVJMKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0
UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPmFic29sdXRlUERGVVJMKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVk
VVJMQVBJKFdlYktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZVBERlVSTCgp
KTsKIH0KIAogV0tVUkxSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlTGlua1VS
TChXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZUxpbmtV
UkwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwo
aGl0VGVzdFJlc3VsdFJlZiktPmFic29sdXRlTGlua1VSTCgpKTsKIH0KIAogV0tVUkxSZWYgV0tC
dW5kbGVIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlTWVkaWFVUkwoV0tCdW5kbGVIaXRUZXN0UmVz
dWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKHRv
SW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVNZWRpYVVSTCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+
YWJzb2x1dGVNZWRpYVVSTCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRNZWRp
YUlzSW5GdWxsc2NyZWVuKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVm
KQogewotICAgIHJldHVybiB0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSXNJbkZ1bGxz
Y3JlZW4oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1l
ZGlhSXNJbkZ1bGxzY3JlZW4oKTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRNZWRp
YUhhc0F1ZGlvKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSGFzQXVkaW8oKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhSGFzQXVkaW8o
KTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRJc0Rvd25sb2FkYWJsZU1lZGlhKFdL
QnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0
b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzRG93bmxvYWRhYmxlTWVkaWEoKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzRG93bmxvYWRhYmxlTWVkaWEo
KTsKIH0KIAogV0tCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlIFdLQnVuZGxlSGl0VGVzdFJl
c3VsdEdldE1lZGlhVHlwZShXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJl
ZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5tZWRpYVR5
cGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJl
c3VsdFJlZiktPm1lZGlhVHlwZSgpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlSGl0VGVzdFJlc3Vs
dEdldEltYWdlUmVjdChXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikK
IHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5pbWFnZVJlY3Qo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3Vs
dFJlZiktPmltYWdlUmVjdCgpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1
bHRDb3B5SW1hZ2UoV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7
Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVm
KS0+aW1hZ2UoKTsKLSAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKKyAgICBS
ZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+aW1hZ2UoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSh3ZWJJbWFnZS5s
ZWFrUmVmKCkpOwogfQogCiBib29sIFdLQnVuZGxlSGl0VGVzdFJlc3VsdEdldElzU2VsZWN0ZWQo
V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNTZWxlY3RlZCgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNTZWxlY3RlZCgpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5TGlua0xhYmVsKFdLQnVuZGxlSGl0VGVzdFJl
c3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtMYWJlbCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bGlua0xhYmVsKCkp
OwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5TGlua1RpdGxlKFdL
QnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0
b0NvcGllZEFQSSh0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtUaXRsZSgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVm
KS0+bGlua1RpdGxlKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRD
b3B5TGlua1N1Z2dlc3RlZEZpbGVuYW1lKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0
UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoaGl0VGVzdFJlc3Vs
dFJlZiktPmxpbmtTdWdnZXN0ZWRGaWxlbmFtZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0Nv
cGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bGlua1N1Z2dlc3RlZEZp
bGVuYW1lKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUluc3BlY3Rvci5jcHAKaW5kZXgg
NTVlYjNkYmMwODc3NzFkYmNhZDhiNDJmMjJhZTkzNjFmYTgyNjgwNi4uZmE5NGFmOTZhODE0NDY1
MTc4NTgyNGM2NTJhN2U0YTg2MzU4OTEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSW5zcGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVJbnNw
ZWN0b3IuY3BwCkBAIC0zMCwzNCArMzAsMzIgQEAKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3Qu
aCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LQogV0tUeXBlSUQgV0tCdW5kbGVJbnNwZWN0b3JHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0
b0FQSShXZWJJbnNwZWN0b3I6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdl
YktpdDo6V2ViSW5zcGVjdG9yOjpBUElUeXBlKTsKIH0KIAogdm9pZCBXS0J1bmRsZUluc3BlY3Rv
clNob3coV0tCdW5kbGVJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChp
bnNwZWN0b3JSZWYpLT5zaG93KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+
c2hvdygpOwogfQogCiB2b2lkIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2UoV0tCdW5kbGVJbnNwZWN0
b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5jbG9zZSgp
OworICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZiktPmNsb3NlKCk7CiB9CiAKIHZvaWQg
V0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVJbnNwZWN0b3JS
ZWYgaW5zcGVjdG9yUmVmLCBXS1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgdG9JbXBsKGluc3Bl
Y3RvclJlZiktPmV2YWx1YXRlU2NyaXB0Rm9yVGVzdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5ldmFsdWF0ZVNjcmlwdEZvclRlc3QoV2Vi
S2l0Ojp0b1dURlN0cmluZyhzY3JpcHQpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUluc3BlY3RvclNl
dFBhZ2VQcm9maWxpbmdFbmFibGVkKFdLQnVuZGxlSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZiwg
Ym9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zaG93VGltZWxpbmVz
KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvd1RpbWVsaW5lcygpOwog
CiAgICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zdGFydFBh
Z2VQcm9maWxpbmcoKTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c3Rh
cnRQYWdlUHJvZmlsaW5nKCk7CiAgICAgZWxzZQotICAgICAgICB0b0ltcGwoaW5zcGVjdG9yUmVm
KS0+c3RvcFBhZ2VQcm9maWxpbmcoKTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9y
UmVmKS0+c3RvcFBhZ2VQcm9maWxpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5hdmlnYXRpb25BY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKaW5kZXggYTNjMzYzZTE5NDJjZWMwNDc5NTVmOTJiMDMy
NzBhOTU2ZGFmZTk3Yi4uMDc0ZGZlOTE0Y2M0MWU0YmQyZmNlNDMzNzIzZTM5MzkwOTdlYWZjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5jcHAKQEAg
LTMzLDUxICszMyw0OSBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJbmpl
Y3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uOjpBUElUeXBlKTsK
IH0KIAogV0tGcmFtZU5hdmlnYXRpb25UeXBlIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5h
dmlnYXRpb25UeXBlKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9u
UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm5h
dmlnYXRpb25UeXBlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBs
KG5hdmlnYXRpb25BY3Rpb25SZWYpLT5uYXZpZ2F0aW9uVHlwZSgpKTsKIH0KIAogV0tFdmVudE1v
ZGlmaWVycyBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXRFdmVudE1vZGlmaWVycyhXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkodG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5tb2RpZmllcnMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm1v
ZGlmaWVycygpKTsKIH0KIAogV0tFdmVudE1vdXNlQnV0dG9uIFdLQnVuZGxlTmF2aWdhdGlvbkFj
dGlvbkdldEV2ZW50TW91c2VCdXR0b24oV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmln
YXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChuYXZpZ2F0aW9uQWN0
aW9uUmVmKS0+bW91c2VCdXR0b24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPm1vdXNlQnV0dG9uKCkpOwogfQogCiBXS0J1
bmRsZUhpdFRlc3RSZXN1bHRSZWYgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RS
ZXN1bHQoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7
Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9
IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+aGl0VGVzdFJlc3VsdCgpOwotICAgIHJldHVy
biB0b0FQSShoaXRUZXN0UmVzdWx0LmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gV2ViS2l0Ojp0b0ltcGwo
bmF2aWdhdGlvbkFjdGlvblJlZiktPmhpdFRlc3RSZXN1bHQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShoaXRUZXN0UmVzdWx0LmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5Rm9ybUVsZW1lbnQoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgUmVmUHRyPEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZT4gZm9ybUVsZW1lbnQgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlv
blJlZiktPmZvcm1FbGVtZW50KCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZvcm1FbGVtZW50LmxlYWtS
ZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBmb3Jt
RWxlbWVudCA9IFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5mb3JtRWxlbWVu
dCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKGZvcm1FbGVtZW50LmxlYWtSZWYoKSk7CiB9
CiAKIGJvb2wgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0U2hvdWxkT3BlbkV4dGVybmFsVVJM
cyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zaG91bGRPcGVuRXh0ZXJuYWxV
UkxzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5z
aG91bGRPcGVuRXh0ZXJuYWxVUkxzKCk7CiB9CiAKIGJvb2wgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0
aW9uR2V0U2hvdWxkVHJ5QXBwTGlua3MoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmln
YXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVm
KS0+c2hvdWxkVHJ5QXBwTGlua3MoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwobmF2aWdh
dGlvbkFjdGlvblJlZiktPnNob3VsZFRyeUFwcExpbmtzKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlEb3dubG9hZEF0dHJpYnV0ZShXS0J1bmRsZU5hdmln
YXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikKIHsKLSAgICByZXR1cm4gdG9Db3Bp
ZWRBUEkodG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5kb3dubG9hZEF0dHJpYnV0ZSgpKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChuYXZpZ2F0aW9u
QWN0aW9uUmVmKS0+ZG93bmxvYWRBdHRyaWJ1dGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZU5vZGVIYW5kbGUuY3BwCmluZGV4IDRjN2RiYjQxMmMxMmQ1NTFmOWU4YTdmYzdlZjkyODNh
ODJiNWI3NWMuLjBkNTM3MzJkZTFmNDRhOGUwZGU2MjRjMDcxMTlmNjU2ZDM5ZTk1MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZU5vZGVIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0zNSw4ICszNSw2IEBACiAj
aW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIHN0YXRpYyBXZWJDb3Jl
OjpBdXRvRmlsbEJ1dHRvblR5cGUgdG9BdXRvRmlsbEJ1dHRvblR5cGUoV0tBdXRvRmlsbEJ1dHRv
blR5cGUgd2tBdXRvRmlsbEJ1dHRvblR5cGUpCiB7CiAgICAgc3dpdGNoICh3a0F1dG9GaWxsQnV0
dG9uVHlwZSkgewpAQCAtNzUsMTQyICs3MywxNDIgQEAgc3RhdGljIFdLQXV0b0ZpbGxCdXR0b25U
eXBlIHRvV0tBdXRvRmlsbEJ1dHRvblR5cGUoV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGEK
IAogV0tUeXBlSUQgV0tCdW5kbGVOb2RlSGFuZGxlR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4g
dG9BUEkoSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6QVBJVHlwZSk7CiB9
CiAKIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDcmVhdGUoSlNDb250
ZXh0UmVmIGNvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKIHsKLSAgICBSZWZQdHI8
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlOjpnZXRPckNyZWF0ZShjb250ZXh0UmVmLCBvYmplY3RSZWYpOwotICAgIHJldHVybiB0
b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OmdldE9yQ3JlYXRlKGNvbnRleHRSZWYsIG9iamVjdFJlZik7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkobm9kZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBXS0J1bmRsZU5vZGVIYW5k
bGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50KFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiBub2RlSGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+
IG5vZGVIYW5kbGUgPSB0b0ltcGwobm9kZUhhbmRsZVJlZiktPmRvY3VtZW50KCk7Ci0gICAgcmV0
dXJuIHRvQVBJKG5vZGVIYW5kbGUubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBXZWJLaXQ6OnRvSW1wbChub2RlSGFu
ZGxlUmVmKS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShub2RlSGFuZGxl
LmxlYWtSZWYoKSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRSZW5kZXJSZWN0
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBib29sKiBpc1JlcGxhY2VkKQog
ewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobm9kZUhhbmRsZVJlZiktPnJlbmRlclJlY3QoaXNS
ZXBsYWNlZCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKG5vZGVI
YW5kbGVSZWYpLT5yZW5kZXJSZWN0KGlzUmVwbGFjZWQpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1
bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgbm9kZUhhbmRsZVJlZiwgV0tTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQ
dHI8V2ViSW1hZ2U+IGltYWdlID0gdG9JbXBsKG5vZGVIYW5kbGVSZWYpLT5yZW5kZXJlZEltYWdl
KHRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMpLCBvcHRpb25zICYga1dLU25hcHNob3RPcHRpb25z
RXhjbHVkZU92ZXJmbG93KTsKLSAgICByZXR1cm4gdG9BUEkoaW1hZ2UubGVha1JlZigpKTsKKyAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gaW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChub2RlSGFu
ZGxlUmVmKS0+cmVuZGVyZWRJbWFnZShXZWJLaXQ6OnRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMp
LCBvcHRpb25zICYga1dLU25hcHNob3RPcHRpb25zRXhjbHVkZU92ZXJmbG93KTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0FQSShpbWFnZS5sZWFrUmVmKCkpOwogfQogCiBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIG5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU+IHJhbmdlSGFuZGxlID0gdG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2Uo
KTsKLSAgICByZXR1cm4gdG9BUEkocmFuZ2VIYW5kbGUubGVha1JlZigpKTsKKyAgICBSZWZQdHI8
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6
dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShyYW5nZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2Rl
SGFuZGxlR2V0RWxlbWVudEJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudEhhbmRs
ZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGVsZW1lbnRIYW5kbGVSZWYpLT5lbGVt
ZW50Qm91bmRzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGVs
ZW1lbnRIYW5kbGVSZWYpLT5lbGVtZW50Qm91bmRzKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIFdLU3RyaW5nUmVmIHZhbHVlUmVmKQogewot
ICAgIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVu
dFZhbHVlRm9yVXNlcih0b1dURlN0cmluZyh2YWx1ZVJlZikpOworICAgIFdlYktpdDo6dG9JbXBs
KGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVGb3JV
c2VyKFdlYktpdDo6dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5v
ZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRT
cGVsbGNoZWNrRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRF
bGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKGVu
YWJsZWQpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRN
TElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsK
IH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxl
ZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBm
aWxsZWQpCiB7Ci0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1M
SW5wdXRFbGVtZW50QXV0b0ZpbGxlZChmaWxsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChmaWxs
ZWQpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRv
RmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVm
KS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5k
bGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1dHRvblR5cGUo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIFdLQXV0b0Zp
bGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSkKIHsKLSAgICB0b0ltcGwoaHRtbElucHV0
RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJs
ZWQodG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0b0ZpbGxCdXR0b25UeXBlKSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEJ1dHRvbkVuYWJsZWQodG9BdXRvRmlsbEJ1dHRvblR5cGUoYXV0b0ZpbGxCdXR0b25U
eXBlKSk7CiB9CiAKIFdLQXV0b0ZpbGxCdXR0b25UeXBlIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRv
blR5cGUodG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVtZW50
QXV0b0ZpbGxCdXR0b25UeXBlKCkpOworICAgIHJldHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBl
KFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVt
ZW50QXV0b0ZpbGxCdXR0b25UeXBlKCkpOwogfQogCiBXS0F1dG9GaWxsQnV0dG9uVHlwZSBXS0J1
bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZShX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBy
ZXR1cm4gdG9XS0F1dG9GaWxsQnV0dG9uVHlwZSh0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBlKCkpOworICAgIHJl
dHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBlKFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1l
bnRIYW5kbGVSZWYpLT5odG1sSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZSgpKTsK
IH0KIAogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxB
dmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNBdXRv
RmlsbEF2YWlsYWJsZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKS0+aXNBdXRvRmlsbEF2YWlsYWJsZSgpOwogfQogCiB2b2lkIFdLQnVuZGxl
Tm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5v
ZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBhdXRvRmlsbEF2YWls
YWJsZSkKIHsKLSAgICB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEF1dG9G
aWxsQXZhaWxhYmxlKGF1dG9GaWxsQXZhaWxhYmxlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0QXV0b0ZpbGxBdmFpbGFibGUoYXV0b0ZpbGxBdmFp
bGFibGUpOwogfQogCiBXS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcygpKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFu
ZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKCkpOwogfQogCiBi
b29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNl
ckVkaXQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0
RWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudExhc3RDaGFuZ2VX
YXNVc2VyRWRpdCgpOwogfQogCiBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxUZXh0QXJl
YUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxU
ZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sVGV4dEFy
ZWFFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2Vy
RWRpdCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sVGV4dEFyZWFFbGVtZW50SGFu
ZGxlUmVmKS0+aHRtbFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogfQog
CiBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxUYWJsZUNl
bGxFbGVtZW50Q2VsbEFib3ZlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sVGFibGVDZWxsRWxl
bWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBu
b2RlSGFuZGxlID0gdG9JbXBsKGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRh
YmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoKTsKLSAgICByZXR1cm4gdG9BUEkobm9kZUhhbmRsZS5s
ZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4g
bm9kZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxlUmVm
KS0+aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5k
bGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3Vt
ZW50SGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJGcmFtZT4gZnJhbWUgPSB0b0ltcGwoZG9j
dW1lbnRIYW5kbGVSZWYpLT5kb2N1bWVudEZyYW1lKCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1l
LmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0
Ojp0b0ltcGwoZG9jdW1lbnRIYW5kbGVSZWYpLT5kb2N1bWVudEZyYW1lKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9BUEkoZnJhbWUubGVha1JlZigpKTsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBX
S0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTEZyYW1lRWxlbWVudENvbnRlbnRGcmFtZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8
V2ViRnJhbWU+IGZyYW1lID0gdG9JbXBsKGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1s
RnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtS
ZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+IGZyYW1lID0gV2ViS2l0Ojp0b0lt
cGwoaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0bWxGcmFtZUVsZW1lbnRDb250ZW50RnJh
bWUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShmcmFtZS5sZWFrUmVmKCkpOwogfQogCiBX
S0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MSUZyYW1lRWxlbWVudENv
bnRlbnRGcmFtZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElGcmFtZUVsZW1lbnRIYW5kbGVS
ZWYpCiB7Ci0gICAgUmVmUHRyPFdlYkZyYW1lPiBmcmFtZSA9IHRvSW1wbChodG1sSUZyYW1lRWxl
bWVudEhhbmRsZVJlZiktPmh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCk7Ci0gICAgcmV0
dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+
IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoaHRtbElGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1s
SUZyYW1lRWxlbWVudENvbnRlbnRGcmFtZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKGZy
YW1lLmxlYWtSZWYoKSk7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKS4K
IGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50
SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZCgpOwogfQogCiAvLyBEZXBy
ZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmls
bGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCkuCiB2b2lkIFdLQnVuZGxlTm9kZUhhbmRs
ZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxlZCkKIHsKLSAgICB0b0ltcGwoaHRtbElu
cHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxl
ZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxlZCk7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1
c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5h
YmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRv
blR5cGUpLgpAQCAtMjE4LDUgKzIxNiw1IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRN
TElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kCiB7CiAg
ICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJs
ZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6
QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOwogCi0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKGF1dG9G
aWxsQnV0dG9uVHlwZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRs
ZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoYXV0b0ZpbGxC
dXR0b25UeXBlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggOTk1YzVkY2M5
NjFlM2JlNTA2YzA4MWNhYmNmYTZhMzdjZGRjMWU5OC4uZDkzYTRjMTFiODg3ZjY1YWNjN2JmZGQ3
OTQ0ZjNmOWVlYzEyNjk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTY5LDE3
ICs2OSwxNSBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VVJMLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlUGFn
ZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2U6OkFQSVR5cGUpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2ViUGFnZTo6QVBJVHlwZSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlU2V0Q29udGV4dE1lbnVDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50QmFzZSogd2tDbGllbnQpCiB7CiAjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1
bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdl
Q29udGV4dE1lbnVDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnNldEluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50Pih3a0NsaWVudCkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAgICAgVU5VU0VEX1BBUkFNKHdrQ2xp
ZW50KTsKQEAgLTg4LDM4ICs4NiwzOCBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldENvbnRleHRNZW51
Q2xpZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VDb250ZQogCiB2b2lk
IFdLQnVuZGxlUGFnZVNldEVkaXRvckNsaWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VS
ZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCh3a0NsaWVudCA/IHN0ZDo6bWFrZV91
bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Pigqd2tDbGllbnQpIDogc3RkOjpt
YWtlX3VuaXF1ZTxBUEk6OkluamVjdGVkQnVuZGxlOjpFZGl0b3JDbGllbnQ+KCkpOworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCh3a0Ns
aWVudCA/IHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQ+KCp3a0NsaWVudCkgOiBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGU6
OkVkaXRvckNsaWVudD4oKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Rm9ybUNsaWVudChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlRm9ybUNsaWVudEJhc2UqIHdrQ2xp
ZW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50
KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudD4od2tDbGllbnQp
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50
Pih3a0NsaWVudCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudEJhc2UqIHdr
Q2xpZW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVQYWdlTG9h
ZGVyQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50
Pih3a0NsaWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1
bmRsZVBhZ2VMb2FkZXJDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlUGFnZUxvYWRlckNsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VT
ZXRSZXNvdXJjZUxvYWRDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFn
ZVJlc291cmNlTG9hZENsaWVudEJhc2UqIHdrQ2xpZW50KQogewotICAgIHRvSW1wbChwYWdlUmVm
KS0+c2V0SW5qZWN0ZWRCdW5kbGVSZXNvdXJjZUxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxJ
bmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEluamVjdGVkQnVuZGxlUmVzb3VyY2VMb2FkQ2xpZW50
KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRD
bGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0UG9saWN5Q2xpZW50
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VQb2xpY3lDbGllbnRCYXNlKiB3
a0NsaWVudCkKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmluaXRpYWxpemVJbmplY3RlZEJ1bmRs
ZVBvbGljeUNsaWVudCh3a0NsaWVudCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlu
aXRpYWxpemVJbmplY3RlZEJ1bmRsZVBvbGljeUNsaWVudCh3a0NsaWVudCk7CiB9CiAKIHZvaWQg
V0tCdW5kbGVQYWdlU2V0VUlDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZVVJQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJ
bmplY3RlZEJ1bmRsZVVJQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdl
VUlDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldElu
amVjdGVkQnVuZGxlVUlDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlUGFnZVVJQ2xpZW50Pih3a0NsaWVudCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEZ1
bGxTY3JlZW5DbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUZ1bGxT
Y3JlZW5DbGllbnRCYXNlKiB3a0NsaWVudCkKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5p
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVGdWxsU2NyZWVuQ2xpZW50KHdrQ2xpZW50KTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlRnVsbFNjcmVl
bkNsaWVudCh3a0NsaWVudCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAg
ICBVTlVTRURfUEFSQU0od2tDbGllbnQpOwpAQCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgV0tCdW5k
bGVQYWdlU2V0RnVsbFNjcmVlbkNsaWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5k
bGVQYWdlRnVsbFNjCiB2b2lkIFdLQnVuZGxlUGFnZVdpbGxFbnRlckZ1bGxTY3JlZW4oV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYpCiB7CiAjaWYgZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
ICYmIEVOQUJMRV9GVUxMU0NSRUVOX0FQSQotICAgIHRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICNlbmRpZgpAQCAtMTM4LDcgKzEzNiw3IEBA
IHZvaWQgV0tCdW5kbGVQYWdlV2lsbEVudGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFn
ZVJlZikKIHZvaWQgV0tCdW5kbGVQYWdlRGlkRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmKQogewogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBFTkFC
TEVfRlVMTFNDUkVFTl9BUEkKLSAgICB0b0ltcGwocGFnZVJlZiktPmZ1bGxTY3JlZW5NYW5hZ2Vy
KCktPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5m
dWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBhZ2VSZWYpOwogI2VuZGlmCkBAIC0xNDcsNyArMTQ1LDcgQEAgdm9pZCBXS0J1
bmRsZVBhZ2VEaWRFbnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB2b2lk
IFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikK
IHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JF
RU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRXhp
dEZ1bGxTY3JlZW4oKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVlbk1h
bmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShw
YWdlUmVmKTsKICNlbmRpZgpAQCAtMTU2LDcgKzE1NCw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlV2ls
bEV4aXRGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogdm9pZCBXS0J1bmRsZVBh
Z2VEaWRFeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKICNpZiBkZWZp
bmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAg
dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRF
eGl0RnVsbFNjcmVlbigpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAjZW5k
aWYKQEAgLTE2NCwyMyArMTYyLDIzIEBAIHZvaWQgV0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3Jl
ZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiAKIFdLQnVuZGxlUGFnZUdyb3VwUmVmIFdLQnVu
ZGxlUGFnZUdldFBhZ2VHcm91cChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1
cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnBhZ2VHcm91cCgpKTsKIH0KIAogV0tC
dW5kbGVGcmFtZVJlZiBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVmKS0+bWFpbldlYkZyYW1l
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5t
YWluV2ViRnJhbWUoKSk7CiB9CiAKIFdLRnJhbWVIYW5kbGVSZWYgV0tCdW5kbGVGcmFtZUNyZWF0
ZUZyYW1lSGFuZGxlKFdLQnVuZGxlRnJhbWVSZWYgYnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKCZBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUodG9JbXBsKGJ1bmRsZUZyYW1lUmVm
KS0+ZnJhbWVJRCgpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZBUEk6
OkZyYW1lSGFuZGxlOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwoYnVuZGxlRnJhbWVSZWYpLT5mcmFt
ZUlEKCkpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ2xpY2tNZW51SXRlbShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tDb250ZXh0TWVudUl0ZW1SZWYgaXRlbSkKIHsKICNp
ZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICB0b0ltcGwocGFnZVJlZiktPmNvbnRleHRNZW51
KCktPml0ZW1TZWxlY3RlZCh0b0ltcGwoaXRlbSktPmRhdGEoKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPmNvbnRleHRNZW51KCktPml0ZW1TZWxlY3RlZChXZWJLaXQ6OnRvSW1wbChp
dGVtKS0+ZGF0YSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogICAgIFVO
VVNFRF9QQVJBTShpdGVtKTsKQEAgLTE4OCw3ICsxODYsNyBAQCB2b2lkIFdLQnVuZGxlUGFnZUNs
aWNrTWVudUl0ZW0oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQ29udGV4dE1lbnVJdGVtUmVm
IGl0ZQogfQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi1zdGF0aWMgUmVmPEFQSTo6QXJy
YXk+IGNvbnRleHRNZW51SXRlbXMoY29uc3QgV2ViQ29udGV4dE1lbnUmIGNvbnRleHRNZW51KQor
c3RhdGljIFJlZjxBUEk6OkFycmF5PiBjb250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYktpdDo6V2Vi
Q29udGV4dE1lbnUmIGNvbnRleHRNZW51KQogewogICAgIGF1dG8gaXRlbXMgPSBjb250ZXh0TWVu
dS5pdGVtcygpOwogCkBAIC0xOTYsNyArMTk0LDcgQEAgc3RhdGljIFJlZjxBUEk6OkFycmF5PiBj
b250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYkNvbnRleHRNZW51JiBjb250ZXh0TWVudSkKICAgICBt
ZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpdGVtcy5zaXplKCkpOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpdGVtIDogaXRlbXMpCi0gICAgICAgIG1lbnVJdGVtcy51bmNoZWNrZWRB
cHBlbmQoV2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRlbSkpOworICAgICAgICBtZW51SXRl
bXMudW5jaGVja2VkQXBwZW5kKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJdGVtOjpjcmVhdGUoaXRl
bSkpOwogCiAgICAgcmV0dXJuIEFQSTo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKG1lbnVJdGVtcykp
OwogfQpAQCAtMjA1LDkgKzIwMyw5IEBAIHN0YXRpYyBSZWY8QVBJOjpBcnJheT4gY29udGV4dE1l
bnVJdGVtcyhjb25zdCBXZWJDb250ZXh0TWVudSYgY29udGV4dE1lbnUpCiBXS0FycmF5UmVmIFdL
QnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUl0ZW1zKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQog
ewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIFdlYkNvbnRleHRNZW51KiBjb250ZXh0
TWVudSA9IHRvSW1wbChwYWdlUmVmKS0+Y29udGV4dE1lbnUoKTsKKyAgICBXZWJLaXQ6OldlYkNv
bnRleHRNZW51KiBjb250ZXh0TWVudSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb250ZXh0
TWVudSgpOwogCi0gICAgcmV0dXJuIHRvQVBJKCZjb250ZXh0TWVudUl0ZW1zKCpjb250ZXh0TWVu
dSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmY29udGV4dE1lbnVJdGVt
cygqY29udGV4dE1lbnUpLmxlYWtSZWYoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
UmVmKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxNywxMSArMjE1LDExIEBAIFdLQXJyYXlS
ZWYgV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51SXRlbXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYpCiBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRv
dyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tQb2ludCBwb2ludCkKIHsKICNpZiBFTkFCTEUo
Q09OVEVYVF9NRU5VUykKLSAgICBXZWJDb250ZXh0TWVudSogY29udGV4dE1lbnUgPSB0b0ltcGwo
cGFnZVJlZiktPmNvbnRleHRNZW51QXRQb2ludEluV2luZG93KHRvSW50UG9pbnQocG9pbnQpKTsK
KyAgICBXZWJLaXQ6OldlYkNvbnRleHRNZW51KiBjb250ZXh0TWVudSA9IFdlYktpdDo6dG9JbXBs
KHBhZ2VSZWYpLT5jb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhXZWJLaXQ6OnRvSW50UG9pbnQo
cG9pbnQpKTsKICAgICBpZiAoIWNvbnRleHRNZW51KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiB0b0FQSSgmY29udGV4dE1lbnVJdGVtcygqY29udGV4dE1lbnUpLmxlYWtS
ZWYoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJmNvbnRleHRNZW51SXRlbXMoKmNvbnRl
eHRNZW51KS5sZWFrUmVmKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAg
ICAgVU5VU0VEX1BBUkFNKHBvaW50KTsKQEAgLTIzMSw3ICsyMjksNyBAQCBXS0FycmF5UmVmIFdL
QnVuZGxlUGFnZUNvcHlDb250ZXh0TWVudUF0UG9pbnRJbldpbmRvdyhXS0J1bmRsZVBhZ2VSZWYg
cGFnZVJlZiwgVwogCiB2b2lkIFdLQnVuZGxlUGFnZUluc2VydE5ld2xpbmVJblF1b3RlZENvbnRl
bnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnNl
cnROZXdsaW5lSW5RdW90ZWRDb250ZW50KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
Pmluc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQoKTsKIH0KIAogdm9pZCogV0tBY2Nlc3NpYmls
aXR5Um9vdE9iamVjdChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKQEAgLTI0MCw3ICsyMzgsNyBA
QCB2b2lkKiBXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
KQogICAgIGlmICghcGFnZVJlZikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKTsKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTI2Nyw3ICsyNjUsNyBAQCB2
b2lkKiBXS0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
KQogICAgIGlmICghcGFnZVJlZikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKTsKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzAyLDc3ICszMDAsNzcgQEAgYm9v
bCBXS0FjY2Vzc2liaWxpdHlFbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkKCkKIAogdm9pZCBX
S0J1bmRsZVBhZ2VTdG9wTG9hZGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPnN0b3BMb2FkaW5nKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0RGVmZXJzTG9hZGlu
ZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCBkZWZlcnNMb2FkaW5nKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKTsKIH0K
IAogV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQ
SSh0b0ltcGwocGFnZVJlZiktPnJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5y
ZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tC
dW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmco
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1w
bChwYWdlUmVmKS0+cmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZygp
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+cmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZygpKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLU3RyaW5nUmVmIG5hbWUsIFdLU3RyaW5nUmVmIGFyZ3VtZW50KQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+ZXhlY3V0ZUVkaXRpbmdDb21tYW5kKHRvV1RGU3RyaW5nKG5hbWUpLCB0
b1dURlN0cmluZyhhcmd1bWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5leGVj
dXRlRWRpdGluZ0NvbW1hbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhuYW1lKSwgV2ViS2l0Ojp0b1dU
RlN0cmluZyhhcmd1bWVudCkpOwogfQogCiBib29sIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1h
bmRFbmFibGVkKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBuYW1lKQogewot
ICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKHRvV1RG
U3RyaW5nKG5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKFdlYktpdDo6dG9XVEZTdHJpbmcobmFtZSkpOwogfQogCiB2b2lk
IFdLQnVuZGxlUGFnZUNsZWFyTWFpbkZyYW1lTmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNsZWFyTWFpbkZyYW1lTmFtZSgpOworICAgIFdlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5jbGVhck1haW5GcmFtZU5hbWUoKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVBhZ2VDbG9zZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPnNlbmRDbG9zZSgpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZW5kQ2xv
c2UoKTsKIH0KIAogZG91YmxlIFdLQnVuZGxlUGFnZUdldFRleHRab29tRmFjdG9yKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPnRleHRab29t
RmFjdG9yKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT50ZXh0Wm9vbUZh
Y3RvcigpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgem9vbUZhY3RvcikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPnNldFRleHRab29tRmFjdG9yKHpvb21GYWN0b3IpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAogZG91YmxlIFdLQnVu
ZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPnBhZ2Vab29tRmFjdG9yKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5wYWdlWm9vbUZhY3RvcigpOwogfQogCiB2b2lkIFdLQnVu
ZGxlUGFnZVNldFBhZ2Vab29tRmFjdG9yKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUg
em9vbUZhY3RvcikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFBhZ2Vab29tRmFjdG9yKHpv
b21GYWN0b3IpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRQYWdlWm9vbUZhY3Rv
cih6b29tRmFjdG9yKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRTY2FsZUF0T3JpZ2luKFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgc2NhbGUsIFdLUG9pbnQgb3JpZ2luKQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+c2NhbGVQYWdlKHNjYWxlLCB0b0ludFBvaW50KG9yaWdpbikp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zY2FsZVBhZ2Uoc2NhbGUsIFdlYktpdDo6
dG9JbnRQb2ludChvcmlnaW4pKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlRHVtcEhp
c3RvcnlGb3JUZXN0aW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBkaXJlY3Rv
cnkpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlKS0+ZHVtcEhpc3RvcnlG
b3JUZXN0aW5nKHRvV1RGU3RyaW5nKGRpcmVjdG9yeSkpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlKS0+ZHVtcEhpc3RvcnlGb3JUZXN0aW5nKFdl
YktpdDo6dG9XVEZTdHJpbmcoZGlyZWN0b3J5KSkpOwogfQogCiB2b2lkIFdLQnVuZGxlQ2xlYXJI
aXN0b3J5Rm9yVGVzdGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKIHsKLSAgICB0b0ltcGwocGFn
ZSktPmNsZWFySGlzdG9yeSgpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jbGVhckhpc3Rv
cnkoKTsKIH0KIAogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFj
a0ZvcndhcmRMaXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQpAQCAtMzgyLDI4ICszODAsMjgg
QEAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmUKIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFn
ZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKnRvSW1wbChwYWdlT3Zlcmxh
eVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9O
b3RGYWRlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCpXZWJLaXQ6OnRvSW1wbChwYWdl
T3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3Zlcmxh
eShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3Zl
cmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCp0b0ltcGwocGFnZU92ZXJsYXlSZWYp
LT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFk
ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCpXZWJLaXQ6OnRvSW1wbChwYWdlT3Zl
cmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRo
QW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVm
IHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCp0b0ltcGwocGFnZU92ZXJs
YXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKldlYktpdDo6dG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmlt
YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFn
ZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqdG9JbXBsKHBhZ2VPdmVybGF5
UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKldlYktpdDo6dG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWdlUmVmKQogewogI2lmIFBMQVRGT1JNKE1B
QykKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFRvcE92ZXJoYW5nSW1hZ2UodG9JbXBsKGltYWdl
UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFRvcE92ZXJoYW5nSW1hZ2Uo
V2ViS2l0Ojp0b0ltcGwoaW1hZ2VSZWYpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VS
ZWYpOwogICAgIFVOVVNFRF9QQVJBTShpbWFnZVJlZik7CkBAIC00MTMsNyArNDExLDcgQEAgdm9p
ZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0ltYWdlUmVmIGltYWdlUmUKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Qm90dG9tT3ZlcmhhbmdJ
bWFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tJbWFnZVJlZiBpbWFnZVJlZikKIHsKICNp
ZiBQTEFURk9STShNQUMpCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRCb3R0b21PdmVyaGFuZ0lt
YWdlKHRvSW1wbChpbWFnZVJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRC
b3R0b21PdmVyaGFuZ0ltYWdlKFdlYktpdDo6dG9JbXBsKGltYWdlUmVmKSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAgICBVTlVTRURfUEFSQU0oaW1hZ2VSZWYpOwpAQCAt
NDIzLDQwICs0MjEsNDAgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFuZ0ltYWdl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWcKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIHZvaWQgV0tCdW5kbGVQYWdlU2V0SGVhZGVyQmFubmVyKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VCYW5uZXJSZWYgYmFubmVyUmVmKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+c2V0SGVhZGVyUGFnZUJhbm5lcih0b0ltcGwoYmFubmVyUmVmKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEhlYWRlclBhZ2VCYW5uZXIoV2ViS2l0Ojp0
b0ltcGwoYmFubmVyUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Rm9vdGVyQmFubmVy
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VCYW5uZXJSZWYgYmFubmVyUmVm
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0Rm9vdGVyUGFnZUJhbm5lcih0b0ltcGwoYmFu
bmVyUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEZvb3RlclBhZ2VCYW5u
ZXIoV2ViS2l0Ojp0b0ltcGwoYmFubmVyUmVmKSk7CiB9CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElP
U19GQU1JTFkpCiAKIGJvb2wgV0tCdW5kbGVQYWdlSGFzTG9jYWxEYXRhRm9yVVJMKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
YWdlUmVmKS0+aGFzTG9jYWxEYXRhRm9yVVJMKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcodXJsUmVm
KSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aGFzTG9jYWxEYXRhRm9y
VVJMKFVSTChVUkwoKSwgV2ViS2l0Ojp0b1dURlN0cmluZyh1cmxSZWYpKSk7CiB9CiAKIGJvb2wg
V0tCdW5kbGVQYWdlQ2FuSGFuZGxlUmVxdWVzdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdFJlZikK
IHsKICAgICBpZiAoIXJlcXVlc3RSZWYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdCh0b0ltcGwocmVxdWVzdFJlZiktPnJlc291cmNl
UmVxdWVzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0
KFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVlc3QoKSk7CiB9CiAKIGJv
b2wgV0tCdW5kbGVQYWdlRmluZFN0cmluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJp
bmdSZWYgdGFyZ2V0LCBXS0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zKQogewotICAgIHJldHVybiB0
b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdGcm9tSW5qZWN0ZWRCdW5kbGUodG9XVEZTdHJpbmco
dGFyZ2V0KSwgdG9GaW5kT3B0aW9ucyhmaW5kT3B0aW9ucykpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ0Zyb21JbmplY3RlZEJ1bmRsZShXZWJLaXQ6OnRv
V1RGU3RyaW5nKHRhcmdldCksIFdlYktpdDo6dG9GaW5kT3B0aW9ucyhmaW5kT3B0aW9ucykpOwog
fQogCiB2b2lkIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmdNYXRjaGVzKFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmLCBXS1N0cmluZ1JlZiB0YXJnZXQsIFdLRmluZE9wdGlvbnMgZmluZE9wdGlvbnMpCiB7
Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nTWF0Y2hlc0Zyb21JbmplY3RlZEJ1bmRs
ZSh0b1dURlN0cmluZyh0YXJnZXQpLCB0b0ZpbmRPcHRpb25zKGZpbmRPcHRpb25zKSk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdNYXRjaGVzRnJvbUluamVjdGVkQnVu
ZGxlKFdlYktpdDo6dG9XVEZTdHJpbmcodGFyZ2V0KSwgV2ViS2l0Ojp0b0ZpbmRPcHRpb25zKGZp
bmRPcHRpb25zKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgbWF0Y2hJbmRpY2VzUmVmLCBXS1N0
cmluZ1JlZiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSkKIHsKLSAgICBhdXRv
KiBtYXRjaEluZGljZXMgPSB0b0ltcGwobWF0Y2hJbmRpY2VzUmVmKTsKKyAgICBhdXRvKiBtYXRj
aEluZGljZXMgPSBXZWJLaXQ6OnRvSW1wbChtYXRjaEluZGljZXNSZWYpOwogCiAgICAgVmVjdG9y
PHVpbnQzMl90PiBpbmRpY2VzOwogICAgIGluZGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
YXRjaEluZGljZXMtPnNpemUoKSk7CkBAIC00NjYsODMgKzQ2NCw4MyBAQCB2b2lkIFdLQnVuZGxl
UGFnZVJlcGxhY2VTdHJpbmdNYXRjaGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5
UmVmIG1hdGNoSQogICAgICAgICBpZiAoYXV0byogaW5kZXhBc09iamVjdCA9IG1hdGNoSW5kaWNl
cy0+YXQ8QVBJOjpVSW50NjQ+KGkpKQogICAgICAgICAgICAgaW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoaW5kZXhBc09iamVjdC0+dmFsdWUoKSk7CiAgICAgfQotICAgIHRvSW1wbChwYWdlUmVmKS0+
cmVwbGFjZVN0cmluZ01hdGNoZXNGcm9tSW5qZWN0ZWRCdW5kbGUoaW5kaWNlcywgdG9XVEZTdHJp
bmcocmVwbGFjZW1lbnRUZXh0KSwgc2VsZWN0aW9uT25seSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZiktPnJlcGxhY2VTdHJpbmdNYXRjaGVzRnJvbUluamVjdGVkQnVuZGxlKGluZGljZXMs
IFdlYktpdDo6dG9XVEZTdHJpbmcocmVwbGFjZW1lbnRUZXh0KSwgc2VsZWN0aW9uT25seSk7CiB9
CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9ucyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3QsIFdLU25hcHNob3RPcHRpb25zIG9wdGlv
bnMpCiB7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+
c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJlY3QocmVjdCksIDEsIHRvU25hcHNob3RP
cHRpb25zKG9wdGlvbnMpKTsKLSAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsK
KyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyhXZWJLaXQ6OnRvSW50UmVjdChyZWN0
KSwgMSwgV2ViS2l0Ojp0b1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRs
ZVBhZ2VDcmVhdGVTbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBTbmFwc2hv
dE9wdGlvbnMgc25hcHNob3RPcHRpb25zID0gc25hcHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9u
cyhvcHRpb25zKTsKLSAgICBzbmFwc2hvdE9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3
Q29vcmRpbmF0ZXM7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdl
UmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyh0b0ludFJlY3QocmVjdCksIDEsIHNuYXBz
aG90T3B0aW9ucyk7Ci0gICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLmxlYWtSZWYoKSk7CisgICAg
V2ViS2l0OjpTbmFwc2hvdE9wdGlvbnMgc25hcHNob3RPcHRpb25zID0gV2ViS2l0OjpzbmFwc2hv
dE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMpOworICAgIHNuYXBzaG90T3B0aW9ucyB8
PSBXZWJLaXQ6OlNuYXBzaG90T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOworICAgIFJlZlB0cjxX
ZWJLaXQ6OldlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zY2Fs
ZWRTbmFwc2hvdFdpdGhPcHRpb25zKFdlYktpdDo6dG9JbnRSZWN0KHJlY3QpLCAxLCBzbmFwc2hv
dE9wdGlvbnMpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHdlYkltYWdlLmxlYWtSZWYoKSk7
CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RJbkRvY3VtZW50Q29v
cmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLUmVjdCByZWN0LCBXS0ltYWdlT3B0
aW9ucyBvcHRpb25zKQogewotICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwo
cGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCAxLCBz
bmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKLSAgICByZXR1cm4gdG9B
UEkod2ViSW1hZ2UubGVha1JlZigpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2Vi
SW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9u
cyhXZWJLaXQ6OnRvSW50UmVjdChyZWN0KSwgMSwgV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNGcm9t
SW1hZ2VPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSh3ZWJJbWFn
ZS5sZWFrUmVmKCkpOwogfQogCiBXS0ltYWdlUmVmIFdLQnVuZGxlUGFnZUNyZWF0ZVNjYWxlZFNu
YXBzaG90SW5Eb2N1bWVudENvb3JkaW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1Jl
Y3QgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIFJlZlB0cjxXZWJJbWFnZT4gd2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNu
YXBzaG90V2l0aE9wdGlvbnModG9JbnRSZWN0KHJlY3QpLCBzY2FsZUZhY3Rvciwgc25hcHNob3RP
cHRpb25zRnJvbUltYWdlT3B0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmV0dXJuIHRvQVBJKHdlYklt
YWdlLmxlYWtSZWYoKSk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViSW1hZ2U+IHdlYkltYWdlID0g
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMoV2ViS2l0
Ojp0b0ludFJlY3QocmVjdCksIHNjYWxlRmFjdG9yLCBXZWJLaXQ6OnNuYXBzaG90T3B0aW9uc0Zy
b21JbWFnZU9wdGlvbnMob3B0aW9ucykpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKHdlYklt
YWdlLmxlYWtSZWYoKSk7CiB9CiAKIGRvdWJsZSBXS0J1bmRsZVBhZ2VHZXRCYWNraW5nU2NhbGVG
YWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPmRldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlTGlzdGVu
Rm9yTGF5b3V0TWlsZXN0b25lcyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tMYXlvdXRNaWxl
c3RvbmVzIG1pbGVzdG9uZXMpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5saXN0ZW5Gb3JMYXlv
dXRNaWxlc3RvbmVzKHRvTGF5b3V0TWlsZXN0b25lcyhtaWxlc3RvbmVzKSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocGFnZVJlZiktPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMoV2ViS2l0Ojp0b0xh
eW91dE1pbGVzdG9uZXMobWlsZXN0b25lcykpOwogfQogCiBXS0J1bmRsZUluc3BlY3RvclJlZiBX
S0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVmKS0+aW5zcGVjdG9yKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogewot
ICAgIHRvSW1wbChwYWdlKS0+Zm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZSktPmZvcmNlUmVwYWludFdpdGhvdXRDYWxsYmFjaygpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVNpbXVsYXRlTW91c2VEb3duKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBp
bnQgYnV0dG9uLCBXS1BvaW50IHBvc2l0aW9uLCBpbnQgY2xpY2tDb3VudCwgV0tFdmVudE1vZGlm
aWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lKQogewotICAgIHRvSW1wbChwYWdlKS0+c2ltdWxh
dGVNb3VzZURvd24oYnV0dG9uLCB0b0ludFBvaW50KHBvc2l0aW9uKSwgY2xpY2tDb3VudCwgbW9k
aWZpZXJzLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAgIFdlYktpdDo6dG9J
bXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlRG93bihidXR0b24sIFdlYktpdDo6dG9JbnRQb2ludChw
b3NpdGlvbiksIGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHRpbWUpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTaW11bGF0ZU1vdXNlVXAoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIGludCBidXR0b24sIFdLUG9pbnQgcG9zaXRpb24sIGludCBjbGlja0NvdW50
LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWUpCiB7Ci0gICAgdG9JbXBs
KHBhZ2UpLT5zaW11bGF0ZU1vdXNlVXAoYnV0dG9uLCB0b0ludFBvaW50KHBvc2l0aW9uKSwgY2xp
Y2tDb3VudCwgbW9kaWZpZXJzLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAg
IFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlVXAoYnV0dG9uLCBXZWJLaXQ6OnRv
SW50UG9pbnQocG9zaXRpb24pLCBjbGlja0NvdW50LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyh0aW1lKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2ltdWxhdGVNb3VzZU1v
dGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tQb2ludCBwb3NpdGlvbiwgZG91YmxlIHRpbWUp
CiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlTW90aW9uKHRvSW50UG9pbnQocG9z
aXRpb24pLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOworICAgIFdlYktpdDo6dG9J
bXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlTW90aW9uKFdlYktpdDo6dG9JbnRQb2ludChwb3NpdGlv
biksIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyh0aW1lKSk7CiB9CiAKIHVpbnQ2NF90IFdLQnVu
ZGxlUGFnZUdldFJlbmRlclRyZWVTaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPnJlbmRlclRyZWVTaXplKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQogCiBXS1JlbmRlck9i
amVjdFJlZiBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJl
ZikKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUmVuZGVyT2JqZWN0OjpjcmVhdGUodG9JbXBsKHBh
Z2VSZWYpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2Vi
UmVuZGVyT2JqZWN0OjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7
CiB9CiAKIFdLUmVuZGVyTGF5ZXJSZWYgV0tCdW5kbGVQYWdlQ29weVJlbmRlckxheWVyVHJlZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUmVuZGVyTGF5
ZXI6OmNyZWF0ZSh0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0OjpXZWJSZW5kZXJMYXllcjo6Y3JlYXRlKFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFBhaW50ZWRPYmpl
Y3RzQ291bnRlclRocmVzaG9sZChXS0J1bmRsZVBhZ2VSZWYsIHVpbnQ2NF90KQpAQCAtNTUzLDc5
ICs1NTEsNzkgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQoV0tCdW5kbGVQYWdlUmVmLCB1aW50NjRfdCkKIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRU
cmFja3NSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCB0cmFja1JlcGFpbnRz
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VHJhY2tzUmVwYWludHModHJhY2tSZXBhaW50
cyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFRyYWNrc1JlcGFpbnRzKHRyYWNr
UmVwYWludHMpOwogfQogCiBib29sIFdLQnVuZGxlUGFnZUlzVHJhY2tpbmdSZXBhaW50cyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5pc1Ry
YWNraW5nUmVwYWludHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlz
VHJhY2tpbmdSZXBhaW50cygpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJl
cGFpbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+
cmVzZXRUcmFja2VkUmVwYWludHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cmVz
ZXRUcmFja2VkUmVwYWludHMoKTsKIH0KIAogV0tBcnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5VHJh
Y2tlZFJlcGFpbnRSZWN0cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkoJnRvSW1wbChwYWdlUmVmKS0+dHJhY2tlZFJlcGFpbnRSZWN0cygpLmxlYWtSZWYoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT50cmFj
a2VkUmVwYWludFJlY3RzKCkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRD
b21wb3NpdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgdGV4dCwgaW50
IGZyb20sIGludCBsZW5ndGgsIGJvb2wgc3VwcHJlc3NVbmRlcmxpbmUpCiB7Ci0gICAgdG9JbXBs
KHBhZ2VSZWYpLT5zZXRDb21wb3NpdGlvbkZvclRlc3RpbmcodG9XVEZTdHJpbmcodGV4dCksIGZy
b20sIGxlbmd0aCwgc3VwcHJlc3NVbmRlcmxpbmUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLT5zZXRDb21wb3NpdGlvbkZvclRlc3RpbmcoV2ViS2l0Ojp0b1dURlN0cmluZyh0ZXh0KSwg
ZnJvbSwgbGVuZ3RoLCBzdXBwcmVzc1VuZGVybGluZSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVQYWdl
SGFzQ29tcG9zaXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwYWdlUmVmKS0+aGFzQ29tcG9zaXRpb25Gb3JUZXN0aW5nKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5oYXNDb21wb3NpdGlvbkZvclRlc3RpbmcoKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VDb25maXJtQ29tcG9zaXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5n
KFN0cmluZygpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29uZmlybUNvbXBvc2l0
aW9uRm9yVGVzdGluZyhTdHJpbmcoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ29uZmlybUNv
bXBvc2l0aW9uV2l0aFRleHQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRl
eHQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5n
KHRvV1RGU3RyaW5nKHRleHQpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29uZmly
bUNvbXBvc2l0aW9uRm9yVGVzdGluZyhXZWJLaXQ6OnRvV1RGU3RyaW5nKHRleHQpKTsKIH0KIAog
Ym9vbCBXS0J1bmRsZVBhZ2VDYW5TaG93TUlNRVR5cGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYs
IFdLU3RyaW5nUmVmIG1pbWVUeXBlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZikt
PmNhblNob3dNSU1FVHlwZSh0b1dURlN0cmluZyhtaW1lVHlwZVJlZikpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y2FuU2hvd01JTUVUeXBlKFdlYktpdDo6dG9XVEZTdHJp
bmcobWltZVR5cGVSZWYpKTsKIH0KIAogV0tSZW5kZXJpbmdTdXBwcmVzc2lvblRva2VuIFdLQnVu
ZGxlUGFnZUV4dGVuZEluY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb24oV0tCdW5kbGVQYWdl
UmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+ZXh0ZW5kSW5jcmVt
ZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+ZXh0ZW5kSW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbigpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVN0b3BFeHRlbmRpbmdJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNz
aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlbmRlcmluZ1N1cHByZXNzaW9uVG9rZW4g
dG9rZW4pCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zdG9wRXh0ZW5kaW5nSW5jcmVtZW50YWxS
ZW5kZXJpbmdTdXBwcmVzc2lvbih0b2tlbik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PnN0b3BFeHRlbmRpbmdJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9uKHRva2VuKTsKIH0K
IAogYm9vbCBXS0J1bmRsZVBhZ2VJc1VzaW5nRXBoZW1lcmFsU2Vzc2lvbihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT51c2VzRXBoZW1lcmFs
U2Vzc2lvbigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+dXNlc0VwaGVt
ZXJhbFNlc3Npb24oKTsKIH0KIAogYm9vbCBXS0J1bmRsZVBhZ2VJc0NvbnRyb2xsZWRCeUF1dG9t
YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHBhZ2VSZWYpLT5pc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24oKTsKIH0KIAogI2lmIFRBUkdF
VF9PU19JUEhPTkUKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmln
dXJhdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCB1c2VUZXN0aW5nVmlld3BvcnRD
b25maWd1cmF0aW9uKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VXNlVGVzdGluZ1ZpZXdw
b3J0Q29uZmlndXJhdGlvbih1c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlv
bih1c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKTsKIH0KICNlbmRpZgogCiB2b2lkIFdL
QnVuZGxlUGFnZVN0YXJ0TW9uaXRvcmluZ1Njcm9sbE9wZXJhdGlvbnMoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYpCiB7Ci0gICAgV2ViS2l0OjpXZWJQYWdlKiB3ZWJQYWdlID0gdG9JbXBsKHBhZ2VS
ZWYpOworICAgIFdlYktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpOwogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSB3ZWJQYWdlID8gd2ViUGFnZS0+Y29yZVBh
Z2UoKSA6IG51bGxwdHI7CiAgICAgCiAgICAgaWYgKCFwYWdlKQpAQCAtNjM5LDcgKzYzNyw3IEBA
IHZvaWQgV0tCdW5kbGVQYWdlUmVnaXN0ZXJTY3JvbGxPcGVyYXRpb25Db21wbGV0aW9uQ2FsbGJh
Y2soV0tCdW5kbGVQYWdlUmVmIHBhZ2VSCiAgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFdlYktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IHRvSW1wbChwYWdlUmVm
KTsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gd2ViUGFnZSA/IHdlYlBhZ2UtPmNvcmVQYWdl
KCkgOiBudWxscHRyOwogICAgIGlmICghcGFnZSB8fCAhcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRU
cmlnZ2VycygpKQogICAgICAgICByZXR1cm47CkBAIC02NTQsNyArNjUyLDcgQEAgdm9pZCBXS0J1
bmRsZVBhZ2VDYWxsQWZ0ZXJUYXNrc0FuZFRpbWVycyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwg
V0tCdW5kbGVQYWdlVGUKICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgV2ViS2l0OjpXZWJQYWdlKiB3ZWJQYWdlID0gdG9JbXBsKHBhZ2VSZWYpOworICAgIFdl
YktpdDo6V2ViUGFnZSogd2ViUGFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOwogICAgIFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSB3ZWJQYWdlID8gd2ViUGFnZS0+Y29yZVBhZ2UoKSA6IG51bGxw
dHI7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC02OTEsNzggKzY4OSw3OCBA
QCB2b2lkIFdLQnVuZGxlUGFnZUNhbGxBZnRlclRhc2tzQW5kVGltZXJzKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VUZQogCiB2b2lkIFdLQnVuZGxlUGFnZVBvc3RNZXNzYWdl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwgV0tU
eXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3Nh
Z2UodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3NhZ2UoV2ViS2l0Ojp0b1dURlN0
cmluZyhtZXNzYWdlTmFtZVJlZiksIFdlYktpdDo6dG9JbXBsKG1lc3NhZ2VCb2R5UmVmKSk7CiB9
CiAKIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNN
b2RlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cG9zdE1l
c3NhZ2VJZ25vcmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKHRvV1RGU3RyaW5nKG1lc3NhZ2VOYW1l
UmVmKSwgdG9JbXBsKG1lc3NhZ2VCb2R5UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnBvc3RNZXNzYWdlSWdub3JpbmdGdWxseVN5bmNocm9ub3VzTW9kZShXZWJLaXQ6OnRvV1RG
U3RyaW5nKG1lc3NhZ2VOYW1lUmVmKSwgV2ViS2l0Ojp0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWVSZWYsIFdLVHlw
ZVJlZiBtZXNzYWdlQm9keVJlZiwgV0tUeXBlUmVmKiByZXR1cm5EYXRhUmVmKQogewotICAgIFdl
YlBhZ2UqIHBhZ2UgPSB0b0ltcGwocGFnZVJlZik7CisgICAgV2ViS2l0OjpXZWJQYWdlKiBwYWdl
ID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CiAgICAgcGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsK
IAogICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gcmV0dXJuRGF0YTsKLSAgICBwYWdlLT5wb3N0U3lu
Y2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRv
SW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOworICAgIHBhZ2UtPnBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYp
LCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOwogICAgIGlmIChy
ZXR1cm5EYXRhUmVmKQotICAgICAgICAqcmV0dXJuRGF0YVJlZiA9IHRvQVBJKHJldHVybkRhdGEu
bGVha1JlZigpKTsKKyAgICAgICAgKnJldHVybkRhdGFSZWYgPSBXZWJLaXQ6OnRvQVBJKHJldHVy
bkRhdGEubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VBZGRVc2VyU2NyaXB0KFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2UsIF9XS1VzZXJTY3JpcHRJ
bmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUsIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBp
bmplY3RlZEZyYW1lcykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTY3JpcHQodG9X
VEZTdHJpbmcoc291cmNlKSwgdG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJh
bWVzKSwgdG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTY3JpcHQoV2ViS2l0Ojp0b1dURlN0cmluZyhz
b3VyY2UpLCBXZWJLaXQ6OnRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1l
cyksIFdlYktpdDo6dG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShpbmplY3Rpb25UaW1lKSk7CiB9
CiAKIHZvaWQgV0tCdW5kbGVQYWdlQWRkVXNlclN0eWxlU2hlZXQoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLU3RyaW5nUmVmIHNvdXJjZSwgV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzIGlu
amVjdGVkRnJhbWVzKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+YWRkVXNlclN0eWxlU2hlZXQo
dG9XVEZTdHJpbmcoc291cmNlKSwgdG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVk
RnJhbWVzKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmFkZFVzZXJTdHlsZVNoZWV0
KFdlYktpdDo6dG9XVEZTdHJpbmcoc291cmNlKSwgV2ViS2l0Ojp0b1VzZXJDb250ZW50SW5qZWN0
ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXMpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VSZW1vdmVB
bGxVc2VyQ29udGVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlUGFn
ZUNvcHlHcm91cElkZW50aWZpZXIoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlUmVmKS0+cGFnZUdyb3VwKCktPmlkZW50aWZpZXIo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnBhZ2VHcm91cCgpLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUNs
ZWFyQXBwbGljYXRpb25DYWNoZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKIHsKLSAgICB0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVsZXRlQWxsRW50
cmllcygpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZSgpLmRlbGV0ZUFsbEVudHJpZXMoKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VDbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVsZXRlQ2FjaGVGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodG9JbXBsKG9yaWdpbiktPnN0cmluZygpKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlKCkuZGVsZXRlQ2FjaGVGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21TdHJpbmcoV2ViS2l0Ojp0b0ltcGwob3JpZ2luKS0+c3RyaW5nKCkpKTsKIH0KIAogdm9p
ZCBXS0J1bmRsZVBhZ2VTZXRBcHBDYWNoZU1heGltdW1TaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCB1aW50NjRfdCBzaXplKQogewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UoKS5zZXRNYXhpbXVtU2l6ZShzaXplKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zZXRNYXhp
bXVtU2l6ZShzaXplKTsKIH0KIAogdWludDY0X3QgV0tCdW5kbGVQYWdlR2V0QXBwQ2FjaGVVc2Fn
ZUZvck9yaWdpbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luKQogewot
ICAgIHJldHVybiB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlKCkuZGlza1VzYWdlRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVG
cm9tU3RyaW5nKHRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kaXNr
VXNhZ2VGb3JPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmco
V2ViS2l0Ojp0b0ltcGwob3JpZ2luKS0+c3RyaW5nKCkpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VTZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG9yaWdpbiwgdWludDY0X3QgYnl0ZXMpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5j
b3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRlZFF1b3RhRm9y
T3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHRvSW1wbChv
cmlnaW4pLT5zdHJpbmcoKSkucHRyKCksIGJ5dGVzKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdl
KS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0ZWRRdW90
YUZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhXZWJL
aXQ6OnRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkucHRyKCksIGJ5dGVzKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVBhZ2VSZXNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBh
Z2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5zdG9yZVVwZGF0ZWRRdW90YUZvck9yaWdp
bihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyh0b0ltcGwob3JpZ2lu
KS0+c3RyaW5nKCkpLnB0cigpLCB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlKCkuZGVmYXVsdE9yaWdpblF1b3RhKCkpOworICAgIFdlYktpdDo6dG9JbXBs
KHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRl
ZFF1b3RhRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KFdlYktpdDo6dG9JbXBsKG9yaWdpbiktPnN0cmluZygpKS5wdHIoKSwgV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVmYXVsdE9yaWdp
blF1b3RhKCkpOwogfQogCiBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFw
cGxpY2F0aW9uQ2FjaGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgYXV0byBvcmlnaW5z
ID0gdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9y
aWdpbnNXaXRoQ2FjaGUoKTsKKyAgICBhdXRvIG9yaWdpbnMgPSBXZWJLaXQ6OnRvSW1wbChwYWdl
KS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hl
KCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gb3JpZ2luSWRlbnRpZmllcnM7
CiAgICAgb3JpZ2luSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcmlnaW5zLnNp
emUoKSk7CkBAIC03NzAsNyArNzY4LDcgQEAgV0tBcnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5T3Jp
Z2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogICAgIGZvciAo
Y29uc3QgYXV0byYgb3JpZ2luIDogb3JpZ2lucykKICAgICAgICAgb3JpZ2luSWRlbnRpZmllcnMu
dW5jaGVja2VkQXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUob3JpZ2luLT5kYXRhKCkuZGF0YWJh
c2VJZGVudGlmaWVyKCkpKTsKIAotICAgIHJldHVybiB0b0FQSSgmQVBJOjpBcnJheTo6Y3JlYXRl
KFdURk1vdmUob3JpZ2luSWRlbnRpZmllcnMpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKCZBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShvcmlnaW5JZGVudGlmaWVycykp
LmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0RXZlbnRUaHJvdHRsaW5nQmVo
YXZpb3JPdmVycmlkZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tFdmVudFRocm90dGxpbmdCZWhh
dmlvciogYmVoYXZpb3IpCkBAIC03ODcsNyArNzg1LDcgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRF
dmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0V2
ZW4KICAgICAgICAgfQogICAgIH0KIAotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0
RXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JPdmVycmlkZShiZWhhdmlvclZhbHVlKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0RXZlbnRUaHJvdHRsaW5nQmVoYXZpb3JP
dmVycmlkZShiZWhhdmlvclZhbHVlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRDb21wb3Np
dGluZ1BvbGljeU92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0NvbXBvc2l0aW5nUG9s
aWN5KiBwb2xpY3kpCkBAIC04MDQsNiArODAyLDYgQEAgdm9pZCBXS0J1bmRsZVBhZ2VTZXRDb21w
b3NpdGluZ1BvbGljeU92ZXJyaWRlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0NvbXBvc2l0aW4K
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+c2V0Q29t
cG9zaXRpbmdQb2xpY3lPdmVycmlkZShwb2xpY3lWYWx1ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPmNvcmVQYWdlKCktPnNldENvbXBvc2l0aW5nUG9saWN5T3ZlcnJpZGUocG9saWN5VmFs
dWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlQmFubmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwCmluZGV4IGJl
MDk1NWUxYzU5ZDA0ODUzMjAwY2JhMDQ0NDFiNTk2Y2M4NjY1ODYuLmU0Y2U0ZTVkZDkzYmY4NGMx
MmM0YzY0ZjE1M2JlODFlNmFhYmY5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VC
YW5uZXIuY3BwCkBAIC0zMCw5ICszMCw3IEBACiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5j
bHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdL
VHlwZUlEIFdLQnVuZGxlUGFnZUJhbm5lckdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KFBhZ2VCYW5uZXI6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
UGFnZUJhbm5lcjo6QVBJVHlwZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUdyb3Vw
LmNwcAppbmRleCBlMDc2Y2I5N2ZiMTMxZjU3YWJjZDFhNGE2NzdkNDVlM2E1M2E4ZDRmLi40ZjU2
ZGRiMmMxMzE2ODkwMzAxZjM2NzdlNTljNDU2NTQ1MmUxYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2VHcm91cC5jcHAKQEAgLTMwLDE0ICszMCwxMiBAQAogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5LmgiCiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlUGFnZUdyb3VwR2V0VHlwZUlEKCkK
IHsKLSAgICByZXR1cm4gdG9BUEkoV2ViUGFnZUdyb3VwUHJveHk6OkFQSVR5cGUpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OkFQSVR5cGUpOwog
fQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZVBhZ2VHcm91cENvcHlJZGVudGlmaWVyKFdLQnVuZGxl
UGFnZUdyb3VwUmVmIGJ1bmRsZVBhZ2VHcm91cCkKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEko
dG9JbXBsKGJ1bmRsZVBhZ2VHcm91cCktPmlkZW50aWZpZXIoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUGFnZUdyb3VwKS0+aWRlbnRpZmll
cigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBi
NzA4MWQ0MjQ0Yjg3ZDg3Zjc4ODU1ZmRhYjQ2OWJkMzYyOWQwMjAyLi40ODQ4NmI5NjhlM2Y3ZmM4
YjI0MmJjNTc5YzZjMjgyZDQzYWU2NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZU92ZXJsYXkuY3BwCkBAIC01Myw5ICs1Myw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRy
YWl0czxXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IHsKIAogfQog
Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1jbGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwg
OiBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBXZWJQ
YWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFBhZ2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6
Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVibGljIFdlYktpdDo6V2Vi
UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJsYXlD
bGllbnRJbXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAgewpA
QCAtNjgsNTkgKzY2LDU5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8gV2Vi
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVy
bGF5JiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKKyAgICAvLyBXZWJLaXQ6
OldlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJLaXQ6
OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViS2l0OjpXZWJQYWdlKiBwYWdlKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC53aWxsTW92ZVRvUGFnZSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSh0b0FQSSgm
cGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAg
ICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoV2ViS2l0Ojp0b0FQSSgmcGFnZU92ZXJsYXkp
LCBXZWJLaXQ6OnRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5
LCBXZWJQYWdlKiBwYWdlKSBvdmVycmlkZQorICAgIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJLaXQ6
OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViS2l0OjpXZWJQYWdlKiBwYWdlKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRpZE1vdmVUb1BhZ2UodG9BUEkoJnBh
Z2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAg
ICAgIG1fY2xpZW50LmRpZE1vdmVUb1BhZ2UoV2ViS2l0Ojp0b0FQSSgmcGFnZU92ZXJsYXkpLCBX
ZWJLaXQ6OnRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAot
ICAgIHZvaWQgZHJhd1JlY3QoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGlydHlSZWN0KSBvdmVycmlkZQorICAgIHZvaWQgZHJhd1JlY3QoV2ViS2l0OjpXZWJQYWdlT3Zl
cmxheSYgcGFnZU92ZXJsYXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1fY2xpZW50LmRyYXdSZWN0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSksIGdyYXBoaWNzQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQuZHJhd1JlY3QoV2ViS2l0Ojp0b0FQSSgmcGFn
ZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIFdlYktpdDo6dG9B
UEkoZGlydHlSZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBtb3VzZUV2ZW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgb3ZlcnJpZGUKKyAgICBib29sIG1vdXNl
RXZlbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBzd2l0
Y2ggKGV2ZW50LnR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VF
dmVudDo6VHlwZTo6TW91c2VQcmVzc2VkOiB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1v
dXNlRG93bikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURvd24oV2ViS2l0Ojp0b0FQ
SSgmcGFnZU92ZXJsYXkpLCBXZWJLaXQ6OnRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBXZWJLaXQ6
OnRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudDo6VHlwZTo6TW91
c2VSZWxlYXNlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZVVwKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlVXAodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJ
KGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2NsaWVudC5tb3VzZVVwKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgV2Vi
S2l0Ojp0b0FQSShldmVudC5wb3NpdGlvbigpKSwgV2ViS2l0Ojp0b0FQSShldmVudC5idXR0b24o
KSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBX
ZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlTW92ZWQ6IHsKICAgICAgICAg
ICAgIGlmIChldmVudC5idXR0b24oKSA9PSBXZWJDb3JlOjpNb3VzZUJ1dHRvbjo6Tm9CdXR0b24p
IHsKICAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlTW92ZWQpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVu
dC5tb3VzZU1vdmVkKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudC5tb3VzZU1vdmVkKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgV2ViS2l0Ojp0b0FQ
SShldmVudC5wb3NpdGlvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gVGhpcyBpcyBhIE1vdXNlTW92ZSBldmVudCB3aXRoIGEg
bW91c2UgYnV0dG9uIHByZXNzZWQuIENhbGwgbW91c2VEcmFnZ2VkLgogICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5tb3VzZURyYWdnZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEcmFnZ2VkKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VEcmFnZ2VkKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgV2ViS2l0Ojp0b0FQSShldmVu
dC5wb3NpdGlvbigpKSwgV2ViS2l0Ojp0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgpAQCAtMTI5LDE0
ICsxMjcsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgRERB
Y3Rpb25Db250ZXh0ICphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJQYWdlT3Zlcmxh
eSYgcGFnZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQorICAgIEREQWN0aW9uQ29udGV4dCAq
YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFn
ZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1fY2xpZW50
LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KSB7CiAgICAgICAgICAgICBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIGFwaVJhbmdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEREQWN0aW9uQ29u
dGV4dCAqYWN0aW9uQ29udGV4dCA9IChEREFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25D
b250ZXh0Rm9yUmVzdWx0QXRQb2ludCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShs
b2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKKyAgICAgICAgICAgIEREQWN0aW9uQ29udGV4dCAqYWN0aW9uQ29udGV4dCA9IChE
REFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChX
ZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdLUG9pbnRNYWtlKGxvY2F0aW9uLngoKSwgbG9j
YXRpb24ueSgpKSwgJmFwaVJhbmdlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogCiAgICAg
ICAgICAgICBpZiAoYXBpUmFuZ2UpCi0gICAgICAgICAgICAgICAgcmFuZ2VIYW5kbGUgPSAmdG9J
bXBsKGFwaVJhbmdlKS0+Y29yZVJhbmdlKCk7CisgICAgICAgICAgICAgICAgcmFuZ2VIYW5kbGUg
PSAmV2ViS2l0Ojp0b0ltcGwoYXBpUmFuZ2UpLT5jb3JlUmFuZ2UoKTsKIAogICAgICAgICAgICAg
cmV0dXJuIGFjdGlvbkNvbnRleHQ7CiAgICAgICAgIH0KQEAgLTE0NCw2NSArMTQyLDY1IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0gICAgdm9pZCBkYXRhRGV0ZWN0
b3JzRGlkUHJlc2VudFVJKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKKyAg
ICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYg
cGFnZU92ZXJsYXkpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRhdGFE
ZXRlY3RvcnNEaWRQcmVzZW50VUkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9j
bGllbnQuZGF0YURldGVjdG9yc0RpZFByZXNlbnRVSSh0b0FQSSgmcGFnZU92ZXJsYXkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlk
UHJlc2VudFVJKFdlYktpdDo6dG9BUEkoJnBhZ2VPdmVybGF5KSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICB9CiAKLSAgICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSShXZWJQ
YWdlT3ZlcmxheSYgcGFnZU92ZXJsYXkpIG92ZXJyaWRlCisgICAgdm9pZCBkYXRhRGV0ZWN0b3Jz
RGlkQ2hhbmdlVUkoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXkpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlk
Q2hhbmdlVUkodG9BUEkoJnBhZ2VPdmVybGF5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgbV9jbGllbnQuZGF0YURldGVjdG9yc0RpZENoYW5nZVVJKFdlYktpdDo6dG9BUEko
JnBhZ2VPdmVybGF5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAKLSAgICB2
b2lkIGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5KSBv
dmVycmlkZQorICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZEhpZGVVSShXZWJLaXQ6OldlYlBhZ2VP
dmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGll
bnQuZGF0YURldGVjdG9yc0RpZEhpZGVVSSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlkSGlkZVVJKHRvQVBJKCZwYWdlT3ZlcmxheSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRhdGFEZXRlY3RvcnNE
aWRIaWRlVUkoV2ViS2l0Ojp0b0FQSSgmcGFnZU92ZXJsYXkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLSAgICBib29sIGNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYg
cGFnZU92ZXJsYXksIFN0cmluZyBhdHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1l
dGVyLCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZQorICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwg
U3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9hY2Nlc3NpYmls
aXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmls
aXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEko
JnBhZ2VPdmVybGF5KSwgdG9Db3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1Bv
aW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNs
aWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwotICAgICAgICBpZiAodG9JbXBsKHdrVHlw
ZSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAgYXV0byB3a1R5cGUg
PSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZShXZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdlYktpdDo6dG9Db3BpZWRBUEko
YXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJh
bWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudElu
Zm8pOworICAgICAgICBpZiAoV2ViS2l0Ojp0b0ltcGwod2tUeXBlKS0+dHlwZSgpICE9IEFQSTo6
U3RyaW5nOjpBUElUeXBlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2YWx1
ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih3a1R5cGUpKTsKKyAgICAg
ICAgdmFsdWUgPSBXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih3
a1R5cGUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBjb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiBwYWdl
T3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIs
IGJvb2wmIHZhbHVlKSBvdmVycmlkZQorICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVCb29sVmFsdWVGb3JQb2ludChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwg
U3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSSgmcGFnZU92ZXJs
YXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3JlYXRlKFdLUG9pbnRNYWtlKHBh
cmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVu
dCgpLmJhc2UuY2xpZW50SW5mbyk7Ci0gICAgICAgIGlmICh0b0ltcGwod2tUeXBlKS0+dHlwZSgp
ICE9IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKKyAgICAgICAgYXV0byB3a1R5cGUgPSBtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShX
ZWJLaXQ6OnRvQVBJKCZwYWdlT3ZlcmxheSksIFdlYktpdDo6dG9Db3BpZWRBUEkoYXR0cmlidXRl
KSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIueSgp
KSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAg
ICAgICBpZiAoV2ViS2l0Ojp0b0ltcGwod2tUeXBlKS0+dHlwZSgpICE9IEFQSTo6Qm9vbGVhbjo6
QVBJVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmFsdWUgPSBXS0Jv
b2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHdrVHlwZSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJh
bWVyaXplZE5hbWVzKSBvdmVycmlkZQorICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXMoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGJv
b2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5j
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQogICAgICAgICAgICAgcmV0dXJuIG5hbWVz
OwotICAgICAgICBhdXRvIHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCku
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJsYXkpLCBwYXJh
bWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgYXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVu
dCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoV2ViS2l0Ojp0b0FQSSgmcGFnZU92
ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCku
YmFzZS5jbGllbnRJbmZvKTsKIAogICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6
ZSh3a05hbWVzKTsKICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7
CiAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05h
bWVzLCBrKTsKLSAgICAgICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0
cmluZzo6QVBJVHlwZSkKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQodG9XVEZTdHJpbmco
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgICAgICBpZiAoV2ViS2l0
Ojp0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBuYW1lczsKQEAg
LTIxMywyMyArMjExLDIzIEBAIHByaXZhdGU6CiAKIFdLVHlwZUlEIFdLQnVuZGxlUGFnZU92ZXJs
YXlHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlw
ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6QVBJ
VHlwZSk7CiB9CiAKIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNy
ZWF0ZShXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSogd2tDbGllbnQpCiB7CiAgICAgYXV0
byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNsaWVudEltcGw+KHdr
Q2xpZW50KTsKLSAgICByZXR1cm4gdG9BUEkoJldlYlBhZ2VPdmVybGF5OjpjcmVhdGUoV1RGTW92
ZShjbGllbnRJbXBsKSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2Vi
S2l0OjpXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdURk1vdmUoY2xpZW50SW1wbCkpLmxlYWtSZWYo
KSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlT3ZlcmxheVNldEFjY2Vzc2liaWxpdHlDbGllbnQo
V0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tCdW5kbGVQYWdl
T3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlKiBjbGllbnQpCiB7Ci0gICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsJj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+
Y2xpZW50KCkpLnNldEFjY2Vzc2liaWxpdHlDbGllbnQoY2xpZW50KTsKKyAgICBzdGF0aWNfY2Fz
dDxQYWdlT3ZlcmxheUNsaWVudEltcGwmPihXZWJLaXQ6OnRvSW1wbChidW5kbGVQYWdlT3Zlcmxh
eVJlZiktPmNsaWVudCgpKS5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlT3ZlcmxheVNldE5lZWRzRGlzcGxheShXS0J1bmRsZVBhZ2VPdmVybGF5
UmVmIGJ1bmRsZVBhZ2VPdmVybGF5UmVmLCBXS1JlY3QgcmVjdCkKIHsKLSAgICB0b0ltcGwoYnVu
ZGxlUGFnZU92ZXJsYXlSZWYpLT5zZXROZWVkc0Rpc3BsYXkoZW5jbG9zaW5nSW50UmVjdCh0b0Zs
b2F0UmVjdChyZWN0KSkpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVm
KS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJlY3QoV2ViS2l0Ojp0b0Zsb2F0UmVjdChy
ZWN0KSkpOwogfQogCiBmbG9hdCBXS0J1bmRsZVBhZ2VPdmVybGF5RnJhY3Rpb25GYWRlZEluKFdL
QnVuZGxlUGFnZU92ZXJsYXlSZWYpCkBAIC0yNDMsNSArMjQxLDUgQEAgZmxvYXQgV0tCdW5kbGVQ
YWdlT3ZlcmxheUZyYWN0aW9uRmFkZWRJbihXS0J1bmRsZVBhZ2VPdmVybGF5UmVmKQogCiB2b2lk
IFdLQnVuZGxlUGFnZU92ZXJsYXlDbGVhcihXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBh
Z2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPmNsZWFy
KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUGFnZU92ZXJsYXlSZWYpLT5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IDQzNzE3Yzkx
NWQwNjJiM2Q0YTRiN2RmMGVmMzFjM2Y1NjYxZTU0OTguLmRmNDQyN2U4MzdhOGNmNmRiY2QyMzg4
OGQ4YTg2ODA1ZThiM2EwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVSYW5nZUhhbmRs
ZS5jcHAKQEAgLTMzLDI3ICszMywyNSBAQAogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlw
ZUlEIFdLQnVuZGxlUmFuZ2VIYW5kbGVHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OkFQSVR5cGUpOwogfQogCiBX
S0J1bmRsZVJhbmdlSGFuZGxlUmVmIFdLQnVuZGxlUmFuZ2VIYW5kbGVDcmVhdGUoSlNDb250ZXh0
UmVmIGNvbnRleHRSZWYsIEpTT2JqZWN0UmVmIG9iamVjdFJlZikKIHsKLSAgICBSZWZQdHI8SW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpnZXRPckNyZWF0ZShjb250ZXh0UmVmLCBvYmplY3RSZWYpOwotICAgIHJldHVybiB0
b0FQSShyYW5nZUhhbmRsZS5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlOjpnZXRPckNyZWF0ZShjb250ZXh0UmVmLCBvYmplY3RSZWYpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvQVBJKHJhbmdlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLUmVjdCBXS0J1
bmRsZVJhbmdlSGFuZGxlR2V0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyhXS0J1bmRs
ZVJhbmdlSGFuZGxlUmVmIHJhbmdlSGFuZGxlUmVmKQogewotICAgIFdlYkNvcmU6OkludFJlY3Qg
Ym91bmRpbmdSZWN0ID0gdG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+Ym91bmRpbmdSZWN0SW5XaW5k
b3dDb29yZGluYXRlcygpOworICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdSZWN0ID0gV2Vi
S2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5ib3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKCk7CiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoYm91bmRpbmdSZWN0LngoKSwgYm91bmRpbmdS
ZWN0LnkoKSwgYm91bmRpbmdSZWN0LndpZHRoKCksIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CiB9
CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVSYW5nZUhhbmRsZUNvcHlTbmFwc2hvdFdpdGhPcHRpb25z
KFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VIYW5kbGVSZWYsIFdLU25hcHNob3RPcHRpb25z
IG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiBpbWFnZSA9IHRvSW1wbChyYW5nZUhh
bmRsZVJlZiktPnJlbmRlcmVkSW1hZ2UodG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucykpOwotICAg
IHJldHVybiB0b0FQSShpbWFnZS5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6OldlYklt
YWdlPiBpbWFnZSA9IFdlYktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+cmVuZGVyZWRJbWFn
ZShXZWJLaXQ6OnRvU25hcHNob3RPcHRpb25zKG9wdGlvbnMpKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShpbWFnZS5sZWFrUmVmKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlU2NyaXB0V29ybGQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlU2Ny
aXB0V29ybGQuY3BwCmluZGV4IGVmNjk3NzljZjRhNjlkOTdhNzNmMzM5NDAxY2E3Y2JmZDBkYzdl
MjUuLmRiZmYzYjhlZmRiMTliNTZlMjE0ZmQwMTI1YWNmYzIwZDM2OTU2MDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVNj
cmlwdFdvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVTY3JpcHRXb3JsZC5jcHAKQEAgLTMwLDQwICszMCwzOCBAQAogI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1bmRsZVNjcmlwdFdvcmxkR2V0VHlw
ZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDo6QVBJ
VHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkOjpBUElUeXBlKTsKIH0KIAogV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBXS0J1bmRs
ZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKQogewotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkPiB3b3JsZCA9IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6OmNyZWF0ZSgpOwot
ICAgIHJldHVybiB0b0FQSSh3b3JsZC5sZWFrUmVmKCkpOworICAgIFJlZlB0cjxXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlU2NyaXB0V29ybGQ+IHdvcmxkID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVNj
cmlwdFdvcmxkOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSh3b3JsZC5sZWFr
UmVmKCkpOwogfQogCiBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIFdLQnVuZGxlU2NyaXB0V29ybGRO
b3JtYWxXb3JsZCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZJbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkOjpub3JtYWxXb3JsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVNjcmlwdFdvcmxkQ2xlYXJXcmFwcGVycyhXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlw
dFdvcmxkUmVmKQogewotICAgIHRvSW1wbChzY3JpcHRXb3JsZFJlZiktPmNsZWFyV3JhcHBlcnMo
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJlZiktPmNsZWFyV3JhcHBlcnMoKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVNjcmlwdFdvcmxkTWFrZUFsbFNoYWRvd1Jvb3RzT3BlbihXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmKQogewotICAgIHRvSW1wbChzY3JpcHRX
b3JsZFJlZiktPm1ha2VBbGxTaGFkb3dSb290c09wZW4oKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChz
Y3JpcHRXb3JsZFJlZiktPm1ha2VBbGxTaGFkb3dSb290c09wZW4oKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVNjcmlwdFdvcmxkRGlzYWJsZU92ZXJyaWRlQnVpbHRpbnNCZWhhdmlvcihXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmKQogewotICAgIHRvSW1wbChzY3JpcHRXb3JsZFJl
ZiktPmRpc2FibGVPdmVycmlkZUJ1aWx0aW5zQmVoYXZpb3IoKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChzY3JpcHRXb3JsZFJlZiktPmRpc2FibGVPdmVycmlkZUJ1aWx0aW5zQmVoYXZpb3IoKTsKIH0K
IAogV0tTdHJpbmdSZWYgV0tCdW5kbGVTY3JpcHRXb3JsZENvcHlOYW1lKFdLQnVuZGxlU2NyaXB0
V29ybGRSZWYgc2NyaXB0V29ybGRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1w
bChzY3JpcHRXb3JsZFJlZiktPm5hbWUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRB
UEkoV2ViS2l0Ojp0b0ltcGwoc2NyaXB0V29ybGRSZWYpLT5uYW1lKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356367</attachid>
            <date>2018-12-03 01:47:36 -0800</date>
            <delta_ts>2018-12-03 17:13:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192301-20181203184734.patch</filename>
            <type>text/plain</type>
            <size>104738</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3ODM3MjNhMjU3OGU1OWE4
YmFjNzE2YTFkNjdmN2QzY2UxNDg1ZTAuLmYzZDhhMmZjYjhiYjRiYjE0MzE4MmExMWFiM2VlMDNh
YTczNzQ4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTgtMTItMDMgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgUmVtb3ZlICJ1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0IiB1bmRlciBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTIzMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmVkICJ1c2luZyBuYW1lc3BhY2UgV2ViS2l0IiBzdGF0ZW1lbnQsIGFuZCB1c2Ug
IldlYktpdDo6IgorICAgICAgICBuYW1lc3BhY2UgcHJlZml4IGluc3RlYWQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVzdFJlc3VsdC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUlu
c3BlY3Rvci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlU2NyaXB0V29ybGQuY3BwOgorCiAyMDE4LTEyLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1BTT05dIHByb2Nlc3Mtc3dh
cHBpbmcgbWF5IG9jY3VyIGV2ZW4gdGhvdWdoIG9wZW5lciBoYXMgaGFuZGxlIHRvIG9wZW5lZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZS5jcHAKaW5kZXggMWNlMjUyNGVkYmFmMmZiZjFhYTViOGQ5N2VjOGE1ZTMw
Yjg3NTc1Ni4uMmVlYThjYzhkOGQ2M2ZlNTA4YjViYTJkNDA5MjQ5NzRkZGMyYmJiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGUuY3BwCkBAIC00OCwxNzkgKzQ4LDE3NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJU
aHJlYWRQcm94eS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlOjpBUElU
eXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpB
UElUeXBlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldENsaWVudChXS0J1bmRsZVJlZiBidW5kbGVS
ZWYsIFdLQnVuZGxlQ2xpZW50QmFzZSAqd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJl
ZiktPnNldENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEluamVjdGVkQnVuZGxlQ2xpZW50Pih3a0Ns
aWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldENsaWVudChzdGQ6Om1h
a2VfdW5pcXVlPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVDbGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVTZXRTZXJ2aWNlV29ya2VyUHJveHlDcmVhdGlvbkNhbGxiYWNrKFdLQnVu
ZGxlUmVmIGJ1bmRsZVJlZiwgdm9pZCAoKmNhbGxiYWNrKSh1aW50NjRfdCkpCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQcm94eUNyZWF0aW9uQ2FsbGJhY2soY2Fs
bGJhY2spOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFNlcnZpY2VXb3JrZXJQ
cm94eUNyZWF0aW9uQ2FsbGJhY2soY2FsbGJhY2spOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVmKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5wb3N0
TWVzc2FnZSh0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIHRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RNZXNzYWdlKFdlYktpdDo6
dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJl
ZikpOwogfQogCiB2b2lkIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShXS0J1bmRsZVJl
ZiBidW5kbGVSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2Fn
ZUJvZHlSZWYsIFdLVHlwZVJlZiogcmV0dXJuRGF0YVJlZikKIHsKICAgICBSZWZQdHI8QVBJOjpP
YmplY3Q+IHJldHVybkRhdGE7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnBvc3RTeW5jaHJvbm91
c01lc3NhZ2UodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2FnZUJvZHlS
ZWYpLCByZXR1cm5EYXRhKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCBXZWJL
aXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZiksIHJldHVybkRhdGEpOwogICAgIGlmIChyZXR1cm5E
YXRhUmVmKQotICAgICAgICAqcmV0dXJuRGF0YVJlZiA9IHRvQVBJKHJldHVybkRhdGEubGVha1Jl
ZigpKTsKKyAgICAgICAgKnJldHVybkRhdGFSZWYgPSBXZWJLaXQ6OnRvQVBJKHJldHVybkRhdGEu
bGVha1JlZigpKTsKIH0KIAogV0tDb25uZWN0aW9uUmVmIFdLQnVuZGxlR2V0QXBwbGljYXRpb25D
b25uZWN0aW9uKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9J
bXBsKGJ1bmRsZVJlZiktPndlYkNvbm5lY3Rpb25Ub1VJUHJvY2VzcygpKTsKKyAgICByZXR1cm4g
dG9BUEkoV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+d2ViQ29ubmVjdGlvblRvVUlQcm9jZXNz
KCkpOwogfQogCiB2b2lkIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyhX
S0J1bmRsZVJlZiBidW5kbGVSZWYpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPmdhcmJhZ2VD
b2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYp
LT5nYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVH
YXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dp
bmcoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBib29sIHdhaXRVbnRpbERvbmUpCiB7Ci0gICAgdG9J
bXBsKGJ1bmRsZVJlZiktPmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVybmF0
ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChi
dW5kbGVSZWYpLT5nYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJl
YWRGb3JEZWJ1Z2dpbmcod2FpdFVudGlsRG9uZSk7CiB9CiAKIHNpemVfdCBXS0J1bmRsZUdldEph
dmFTY3JpcHRPYmplY3RzQ291bnQoV0tCdW5kbGVSZWYgYnVuZGxlUmVmKQogewotICAgIHJldHVy
biB0b0ltcGwoYnVuZGxlUmVmKS0+amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7CiB9
CiAKIHZvaWQgV0tCdW5kbGVBZGRVc2VyU2NyaXB0KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tC
dW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNj
cmlwdFdvcmxkUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tB
cnJheVJlZiB3aGl0ZWxpc3RSZWYsIFdLQXJyYXlSZWYgYmxhY2tsaXN0UmVmLCBfV0tVc2VyU2Ny
aXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lUmVmLCBXS1VzZXJDb250ZW50SW5qZWN0ZWRG
cmFtZXMgaW5qZWN0ZWRGcmFtZXNSZWYpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPmFkZFVz
ZXJTY3JpcHQodG9JbXBsKHBhZ2VHcm91cFJlZiksIHRvSW1wbChzY3JpcHRXb3JsZFJlZiksIHRv
V1RGU3RyaW5nKHNvdXJjZVJlZiksIHRvV1RGU3RyaW5nKHVybFJlZiksIHRvSW1wbCh3aGl0ZWxp
c3RSZWYpLCB0b0ltcGwoYmxhY2tsaXN0UmVmKSwgdG9Vc2VyU2NyaXB0SW5qZWN0aW9uVGltZShp
bmplY3Rpb25UaW1lUmVmKSwgdG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJh
bWVzUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+YWRkVXNlclNjcmlwdChX
ZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJl
ZiksIFdlYktpdDo6dG9XVEZTdHJpbmcoc291cmNlUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyh1
cmxSZWYpLCBXZWJLaXQ6OnRvSW1wbCh3aGl0ZWxpc3RSZWYpLCBXZWJLaXQ6OnRvSW1wbChibGFj
a2xpc3RSZWYpLCBXZWJLaXQ6OnRvVXNlclNjcmlwdEluamVjdGlvblRpbWUoaW5qZWN0aW9uVGlt
ZVJlZiksIFdlYktpdDo6dG9Vc2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJhbWVz
UmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVBZGRVc2VyU3R5bGVTaGVldChXS0J1bmRsZVJlZiBi
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tCdW5kbGVTY3Jp
cHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJlZiwgV0tTdHJpbmdSZWYgc291cmNlUmVmLCBXS1VSTFJl
ZiB1cmxSZWYsIFdLQXJyYXlSZWYgd2hpdGVsaXN0UmVmLCBXS0FycmF5UmVmIGJsYWNrbGlzdFJl
ZiwgV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzUmVmKQogewotICAg
IHRvSW1wbChidW5kbGVSZWYpLT5hZGRVc2VyU3R5bGVTaGVldCh0b0ltcGwocGFnZUdyb3VwUmVm
KSwgdG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwgdG9XVEZTdHJpbmcoc291cmNlUmVmKSwgdG9XVEZT
dHJpbmcodXJsUmVmKSwgdG9JbXBsKHdoaXRlbGlzdFJlZiksIHRvSW1wbChibGFja2xpc3RSZWYp
LCB0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXNSZWYpKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5hZGRVc2VyU3R5bGVTaGVldChXZWJLaXQ6OnRvSW1w
bChwYWdlR3JvdXBSZWYpLCBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJlZiksIFdlYktpdDo6
dG9XVEZTdHJpbmcoc291cmNlUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyh1cmxSZWYpLCBXZWJL
aXQ6OnRvSW1wbCh3aGl0ZWxpc3RSZWYpLCBXZWJLaXQ6OnRvSW1wbChibGFja2xpc3RSZWYpLCBX
ZWJLaXQ6OnRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1lc1JlZikpOwog
fQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlVXNlclNjcmlwdChXS0J1bmRsZVJlZiBidW5kbGVSZWYs
IFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJl
ZiBzY3JpcHRXb3JsZFJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewotICAgIHRvSW1wbChidW5kbGVS
ZWYpLT5yZW1vdmVVc2VyU2NyaXB0KHRvSW1wbChwYWdlR3JvdXBSZWYpLCB0b0ltcGwoc2NyaXB0
V29ybGRSZWYpLCB0b1dURlN0cmluZyh1cmxSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5yZW1vdmVVc2VyU2NyaXB0KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdl
YktpdDo6dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyh1cmxSZWYp
KTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlbW92ZVVzZXJTdHlsZVNoZWV0KFdLQnVuZGxlUmVmIGJ1
bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS0J1bmRsZVNjcmlw
dFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7Ci0gICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnJlbW92ZVVzZXJTdHlsZVNoZWV0KHRvSW1wbChwYWdlR3JvdXBSZWYpLCB0
b0ltcGwoc2NyaXB0V29ybGRSZWYpLCB0b1dURlN0cmluZyh1cmxSZWYpKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChidW5kbGVSZWYpLT5yZW1vdmVVc2VyU3R5bGVTaGVldChXZWJLaXQ6OnRvSW1wbChw
YWdlR3JvdXBSZWYpLCBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJlZiksIFdlYktpdDo6dG9X
VEZTdHJpbmcodXJsUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1vdmVVc2VyU2NyaXB0cyhX
S0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwg
V0tCdW5kbGVTY3JpcHRXb3JsZFJlZiBzY3JpcHRXb3JsZFJlZikKIHsKLSAgICB0b0ltcGwoYnVu
ZGxlUmVmKS0+cmVtb3ZlVXNlclNjcmlwdHModG9JbXBsKHBhZ2VHcm91cFJlZiksIHRvSW1wbChz
Y3JpcHRXb3JsZFJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZVVz
ZXJTY3JpcHRzKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6dG9JbXBsKHNj
cmlwdFdvcmxkUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1vdmVVc2VyU3R5bGVTaGVldHMo
V0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYs
IFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgc2NyaXB0V29ybGRSZWYpCiB7Ci0gICAgdG9JbXBsKGJ1
bmRsZVJlZiktPnJlbW92ZVVzZXJTdHlsZVNoZWV0cyh0b0ltcGwocGFnZUdyb3VwUmVmKSwgdG9J
bXBsKHNjcmlwdFdvcmxkUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+cmVt
b3ZlVXNlclN0eWxlU2hlZXRzKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZiksIFdlYktpdDo6
dG9JbXBsKHNjcmlwdFdvcmxkUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZW1vdmVBbGxVc2Vy
Q29udGVudChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnQo
dG9JbXBsKHBhZ2VHcm91cFJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJl
bW92ZUFsbFVzZXJDb250ZW50KFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJlZikpOwogfQogCiB2
b2lkIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoV0tCdW5kbGVS
ZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5n
UmVmIHByZWZlcmVuY2UsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+
b3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIodG9JbXBsKHBhZ2VHcm91cFJlZiks
IHRvV1RGU3RyaW5nKHByZWZlcmVuY2UpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChi
dW5kbGVSZWYpLT5vdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJLaXQ6OnRv
SW1wbChwYWdlR3JvdXBSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHByZWZlcmVuY2UpLCBlbmFi
bGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVV
UkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMcyhXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhXS0J1bmRsZVJlZiBi
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBlbmFibGVk
KQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THModG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVJlZiktPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhXZWJLaXQ6OnRvSW1wbChw
YWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldEFsbG93U3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMUyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZiwgYm9vbCBuZWVkc1F1aXJrKQogewotICAgIHRvSW1wbChidW5k
bGVSZWYpLT5zZXROZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayh0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgbmVlZHNRdWlyayk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+
c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoV2ViS2l0Ojp0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgbmVlZHNRdWlyayk7CiB9CiAKIHZvaWQgV0tCdW5kbGVTZXRNaW5pbXVtTG9n
aWNhbEZvbnRTaXplKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBpbnQgc2l6ZSkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0TWlu
aW11bUxvZ2ljYWxGb250U2l6ZSh0b0ltcGwocGFnZUdyb3VwUmVmKSwgc2l6ZSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShXZWJLaXQ6
OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBzaXplKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVm
KS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxl
ZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0RnJhbWVGbGF0dGVuaW5nRW5h
YmxlZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVNldEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJl
ZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEFzeW5jRnJhbWVTY3JvbGxpbmdFbmFibGVkKHRvSW1w
bChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYp
LT5zZXRBc3luY0ZyYW1lU2Nyb2xsaW5nRW5hYmxlZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBS
ZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldEphdmFTY3JpcHRDYW5BY2Nlc3ND
bGlwYm9hcmQoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCh0b0ltcGwocGFnZUdyb3VwUmVmKSwgZW5hYmxlZCk7
CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9p
ZCBXS0J1bmRsZVNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoV0tCdW5kbGVSZWYgYnVuZGxlUmVm
LCBXS0J1bmRsZVBhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCh0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+c2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFi
bGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2Rl
KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
LCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldFVzZURhc2hib2Fy
ZENvbXBhdGliaWxpdHlNb2RlKHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9k
ZShXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVNldFBvcHVwQmxvY2tpbmdFbmFibGVkKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5k
bGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBs
KGJ1bmRsZVJlZiktPnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFdLQnVuZGxlUmVmIGJ1
bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBib29sIGVuYWJsZWQp
CiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KHRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXZWJLaXQ6OnRvSW1wbChwYWdl
R3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChidW5kbGVSZWYpLT5zZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQodG9JbXBsKHBhZ2VHcm91cFJlZiksIGVuYWJsZWQpOwor
ICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxl
ZChXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1
bmRsZUFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwg
V0tTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBXS1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29s
LCBXS1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KHRvV1RGU3RyaW5nKHNvdXJjZU9yaWdpbiksIHRvV1RGU3RyaW5nKGRlc3RpbmF0aW9u
UHJvdG9jb2wpLCB0b1dURlN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+YWRkT3JpZ2luQWNj
ZXNzV2hpdGVsaXN0RW50cnkoV2ViS2l0Ojp0b1dURlN0cmluZyhzb3VyY2VPcmlnaW4pLCBXZWJL
aXQ6OnRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLCBXZWJLaXQ6OnRvV1RGU3RyaW5n
KGRlc3RpbmF0aW9uSG9zdCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIH0KIAogdm9p
ZCBXS0J1bmRsZVJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KFdLQnVuZGxlUmVmIGJ1
bmRsZVJlZiwgV0tTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBXS1N0cmluZ1JlZiBkZXN0aW5hdGlv
blByb3RvY29sLCBXS1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KHRvV1RGU3RyaW5nKHNvdXJjZU9yaWdpbiksIHRvV1RGU3RyaW5n
KGRlc3RpbmF0aW9uUHJvdG9jb2wpLCB0b1dURlN0cmluZyhkZXN0aW5hdGlvbkhvc3QpLCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+
cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoV2ViS2l0Ojp0b1dURlN0cmluZyhzb3Vy
Y2VPcmlnaW4pLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uUHJvdG9jb2wpLCBXZWJL
aXQ6OnRvV1RGU3RyaW5nKGRlc3RpbmF0aW9uSG9zdCksIGFsbG93RGVzdGluYXRpb25TdWJkb21h
aW5zKTsKIH0KIAogdm9pZCBXS0J1bmRsZVJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cyhXS0J1
bmRsZVJlZiBidW5kbGVSZWYpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnJlc2V0T3JpZ2lu
QWNjZXNzV2hpdGVsaXN0cygpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnJlc2V0
T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoYnVu
ZGxlUmVmKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQodG9JbXBsKHBhZ2VH
cm91cFJlZiksIGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPnNldEFz
eW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91cFJl
ZiksIGVuYWJsZWQpOwogfQogCiBXS0FycmF5UmVmIFdLQnVuZGxlR2V0TGl2ZURvY3VtZW50VVJM
cyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZiwgYm9vbCBleGNsdWRlRG9jdW1lbnRzSW5QYWdlR3JvdXBQYWdlcykKIHsKLSAgICBhdXRvIGxp
dmVEb2N1bWVudHMgPSB0b0ltcGwoYnVuZGxlUmVmKS0+bGl2ZURvY3VtZW50VVJMcyh0b0ltcGwo
cGFnZUdyb3VwUmVmKSwgZXhjbHVkZURvY3VtZW50c0luUGFnZUdyb3VwUGFnZXMpOworICAgIGF1
dG8gbGl2ZURvY3VtZW50cyA9IFdlYktpdDo6dG9JbXBsKGJ1bmRsZVJlZiktPmxpdmVEb2N1bWVu
dFVSTHMoV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKSwgZXhjbHVkZURvY3VtZW50c0luUGFn
ZUdyb3VwUGFnZXMpOwogCiAgICAgYXV0byBsaXZlVVJMcyA9IGFkb3B0V0soV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKSk7CiAKQEAgLTIzMSw3ICsyMjksNyBAQCBXS0FycmF5UmVmIFdLQnVuZGxlR2V0
TGl2ZURvY3VtZW50VVJMcyhXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxlUGFnZUdyb3Vw
UgogICAgICAgICBhdXRvIGRvY3VtZW50VVJMS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygidXJsIikpOwogCiAgICAgICAgIGF1dG8gZG9jdW1lbnRJRFZhbHVlID0g
YWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShpdC5rZXkpKTsKLSAgICAgICAgYXV0byBkb2N1bWVudFVS
TFZhbHVlID0gYWRvcHRXSyh0b0NvcGllZEFQSShpdC52YWx1ZSkpOworICAgICAgICBhdXRvIGRv
Y3VtZW50VVJMVmFsdWUgPSBhZG9wdFdLKFdlYktpdDo6dG9Db3BpZWRBUEkoaXQudmFsdWUpKTsK
IAogICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKHVybEluZm8uZ2V0KCksIGRvY3VtZW50SURL
ZXkuZ2V0KCksIGRvY3VtZW50SURWYWx1ZS5nZXQoKSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0odXJsSW5mby5nZXQoKSwgZG9jdW1lbnRVUkxLZXkuZ2V0KCksIGRvY3VtZW50VVJMVmFs
dWUuZ2V0KCkpOwpAQCAtMjQ0LDcgKzI0Miw3IEBAIFdLQXJyYXlSZWYgV0tCdW5kbGVHZXRMaXZl
RG9jdW1lbnRVUkxzKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlR3JvdXBSCiAK
IHZvaWQgV0tCdW5kbGVSZXBvcnRFeGNlcHRpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFs
dWVSZWYgZXhjZXB0aW9uKQogewotICAgIEluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24o
Y29udGV4dCwgZXhjZXB0aW9uKTsKKyAgICBXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZXBvcnRF
eGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uKTsKIH0KIAogdm9pZCBXS0J1bmRsZUNsZWFyQWxs
RGF0YWJhc2VzKFdLQnVuZGxlUmVmKQpAQCAtMjU1LDcgKzI1Myw3IEBAIHZvaWQgV0tCdW5kbGVD
bGVhckFsbERhdGFiYXNlcyhXS0J1bmRsZVJlZikKIHZvaWQgV0tCdW5kbGVTZXREYXRhYmFzZVF1
b3RhKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgdWludDY0X3QgcXVvdGEpCiB7CiAgICAgLy8gSGlz
dG9yaWNhbGx5LCB3ZSd2ZSB1c2VkIHRoZSBmb2xsb3dpbmcgKHNvbWV3aGF0IG5vbnNlbnNpY2Fs
KSBzdHJpbmcgZm9yIHRoZSBkYXRhYmFzZUlkZW50aWZpZXIgb2YgbG9jYWwgZmlsZXMuCi0gICAg
V2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5zZXRRdW90YSgqU2VjdXJpdHlP
cmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKCJmaWxlX18wIiksIHF1b3RhKTsKKyAg
ICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLnNldFF1b3RhKCpXZWJLaXQ6
OlNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcigiZmlsZV9fMCIpLCBx
dW90YSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVSZWxlYXNlTWVtb3J5KFdLQnVuZGxlUmVmKQpAQCAt
MjY1LDU3ICsyNjMsNTcgQEAgdm9pZCBXS0J1bmRsZVJlbGVhc2VNZW1vcnkoV0tCdW5kbGVSZWYp
CiAKIFdLRGF0YVJlZiBXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KFdLQnVuZGxl
UmVmIGJ1bmRsZSwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKLSAg
ICByZXR1cm4gdG9BUEkoJnRvSW1wbChidW5kbGUpLT5jcmVhdGVXZWJEYXRhRnJvbVVpbnQ4QXJy
YXkoY29udGV4dCwgZGF0YSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgm
V2ViS2l0Ojp0b0ltcGwoYnVuZGxlKS0+Y3JlYXRlV2ViRGF0YUZyb21VaW50OEFycmF5KGNvbnRl
eHQsIGRhdGEpLmxlYWtSZWYoKSk7CiB9CiAKIGludCBXS0J1bmRsZU51bWJlck9mUGFnZXMoV0tC
dW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBkb3VibGUgcGFn
ZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0SW5QaXhlbHMpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChidW5kbGVSZWYpLT5udW1iZXJPZlBhZ2VzKHRvSW1wbChmcmFtZVJlZiksIHBhZ2VX
aWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpOworICAgIHJldHVybiBXZWJLaXQ6OnRv
SW1wbChidW5kbGVSZWYpLT5udW1iZXJPZlBhZ2VzKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwg
cGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscyk7CiB9CiAKIGludCBXS0J1bmRs
ZVBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZChXS0J1bmRsZVJlZiBidW5kbGVSZWYsIFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWVSZWYsIFdLU3RyaW5nUmVmIGlkUmVmLCBkb3VibGUgcGFnZVdpZHRoSW5Q
aXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0SW5QaXhlbHMpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChi
dW5kbGVSZWYpLT5wYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQodG9JbXBsKGZyYW1lUmVmKSwgdG9X
VEZTdHJpbmcoaWRSZWYpLCBwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+cGFnZU51bWJlckZvckVsZW1l
bnRCeUlkKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKSwgV2ViS2l0Ojp0b1dURlN0cmluZyhpZFJl
ZiksIHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS0J1bmRsZVBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKFdLQnVuZGxlUmVmIGJ1bmRs
ZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgaW50IHBhZ2VJbmRleCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5C
b3R0b20sIGludCBtYXJnaW5MZWZ0KQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwo
YnVuZGxlUmVmKS0+cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHModG9JbXBsKGZyYW1lUmVmKSwg
cGFnZUluZGV4LCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5C
b3R0b20sIG1hcmdpbkxlZnQpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJL
aXQ6OnRvSW1wbChidW5kbGVSZWYpLT5wYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhXZWJLaXQ6
OnRvSW1wbChmcmFtZVJlZiksIHBhZ2VJbmRleCwgd2lkdGgsIGhlaWdodCwgbWFyZ2luVG9wLCBt
YXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0KSk7CiB9CiAKIGJvb2wgV0tCdW5k
bGVJc1BhZ2VCb3hWaXNpYmxlKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZVJlZiwgaW50IHBhZ2VJbmRleCkKIHsKLSAgICByZXR1cm4gdG9JbXBsKGJ1bmRsZVJl
ZiktPmlzUGFnZUJveFZpc2libGUodG9JbXBsKGZyYW1lUmVmKSwgcGFnZUluZGV4KTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoYnVuZGxlUmVmKS0+aXNQYWdlQm94VmlzaWJsZShXZWJLaXQ6
OnRvSW1wbChmcmFtZVJlZiksIHBhZ2VJbmRleCk7CiB9CiAKIGJvb2wgV0tCdW5kbGVJc1Byb2Nl
c3NpbmdVc2VyR2VzdHVyZShXS0J1bmRsZVJlZikKIHsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5k
bGU6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgcmV0dXJuIFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGU6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVT
ZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKFdLQnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiBsb2NhdGlvbikKIHsKLSAgICB0
b0ltcGwoYnVuZGxlUmVmKS0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih0b0ltcGwocGFnZUdy
b3VwUmVmKSwgdG9XVEZTdHJpbmcobG9jYXRpb24pKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5k
bGVSZWYpLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKFdlYktpdDo6dG9JbXBsKHBhZ2VHcm91
cFJlZiksIFdlYktpdDo6dG9XVEZTdHJpbmcobG9jYXRpb24pKTsKIH0KIAogdm9pZCBXS0J1bmRs
ZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgb3JpZ2luU3RyaW5nUmVmLCBib29sIGFs
bG93ZWQpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVJlZiktPnNldFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb24odG9JbXBsKHBhZ2VSZWYpLCB0b1dURlN0cmluZyhvcmlnaW5TdHJpbmdSZWYpLCBhbGxv
d2VkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVSZWYpLT5zZXRXZWJOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKG9y
aWdpblN0cmluZ1JlZiksIGFsbG93ZWQpOwogfQogCiB2b2lkIFdLQnVuZGxlUmVtb3ZlQWxsV2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+cmVtb3ZlQWxsV2ViTm90
aWZpY2F0aW9uUGVybWlzc2lvbnModG9JbXBsKHBhZ2VSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChidW5kbGVSZWYpLT5yZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKSk7CiB9CiAKIHVpbnQ2NF90IFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0
aW9uSUQoV0tCdW5kbGVSZWYgYnVuZGxlUmVmLCBKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1
ZVJlZiBub3RpZmljYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChidW5kbGVSZWYpLT53ZWJO
b3RpZmljYXRpb25JRChjb250ZXh0LCBub3RpZmljYXRpb24pOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChidW5kbGVSZWYpLT53ZWJOb3RpZmljYXRpb25JRChjb250ZXh0LCBub3RpZmljYXRp
b24pOwogfQogCiB2b2lkIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdL
QnVuZGxlUmVmIGJ1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICB0b0ltcGwoYnVuZGxlUmVmKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKHRvSW1wbChwYWdlUmVmKSwgZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxl
UmVmKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBXS0J1bmRsZUNsZWFyUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhXS0J1bmRsZVJlZikKQEAgLTMzNiw2ICszMzQsNiBAQCB2b2lkIFdLQnVuZGxlRXh0ZW5k
Q2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tBcnJheVJlZiBj
bGFzcwogICAgIGlmICghY2xhc3NMaXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0ltcGwo
YnVuZGxlKS0+ZXh0ZW5kQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGVyKCpjbGFzc0xpc3QpOworICAg
IFdlYktpdDo6dG9JbXBsKGJ1bmRsZSktPmV4dGVuZENsYXNzZXNGb3JQYXJhbWV0ZXJDb2Rlcigq
Y2xhc3NMaXN0KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tG
b3J3YXJkTGlzdC5jcHAKaW5kZXggNDJjMmU4YTM2Yzc3NjUxZjcxZWI4ZWEyZWM5M2NkZDc3YTQ4
MDFlNS4uMWYwNjczM2RkZDJiNTE1OTBiZGI3NzhhMTkxZGZhMjJkYjVhYmFiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zMCw3ICszMCw3
IEBACiAKIFdLVHlwZUlEIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0R2V0VHlwZUlEKCkKIHsKLSAg
ICByZXR1cm4gdG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKEFQSTo6T2JqZWN0OjpUeXBlOjpOdWxsKTsKIH0KIAogV0tCdW5kbGVCYWNrRm9y
d2FyZExpc3RJdGVtUmVmIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q29weUl0ZW1BdEluZGV4KFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYsIGludCBpbmRleCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKaW5kZXggNWM4ZDk4
ZTZjMDgxOTY5MmJkOTc5ZDQ0YzhmODgzYTY4MTYwODY0Zi4uZDhlM2E5ZjIzMTg3ZWZiM2I1YjA3
NjRhMTRiMTJkNWU4YzUwYjIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKQEAgLTI5LDExICsyOSw5IEBACiAjaW5jbHVkZSAiQVBJ
QXJyYXkuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtR2V0VHlwZUlE
KCkKIHsKLSAgICByZXR1cm4gdG9BUEkoQVBJOjpPYmplY3Q6OlR5cGU6Ok51bGwpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKEFQSTo6T2JqZWN0OjpUeXBlOjpOdWxsKTsKIH0KIAogYm9vbCBX
S0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc1NhbWUoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmIGl0ZW1SZWYxLCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZjIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcApp
bmRleCBmYzM4MWY0NmE2NDFmYTA3NzVjM2U1NDY0ODYwZDllMDRmNDgzZTJiLi40N2Y2Njk5MGRi
YzdlN2ZlMTMxZDIzYmEyOWRhMTI4MjRmMTlhYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAKQEAgLTMxLDI2ICszMSwyNCBAQAogI2lu
Y2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9u
R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dF
eHRlbnNpb246OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb246OkFQSVR5cGUpOwogfQogCiBXS0J1bmRsZURP
TVdpbmRvd0V4dGVuc2lvblJlZiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbkNyZWF0ZShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQogewotICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbj4gZXh0ZW5zaW9uID0gSW5q
ZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb246OmNyZWF0ZSh0b0ltcGwoZnJhbWUpLCB0b0lt
cGwod29ybGQpKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4
dGVuc2lvbj4gZXh0ZW5zaW9uID0gV2ViS2l0OjpJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVu
c2lvbjo6Y3JlYXRlKFdlYktpdDo6dG9JbXBsKGZyYW1lKSwgV2ViS2l0Ojp0b0ltcGwod29ybGQp
KTsKICAgICByZXR1cm4gdG9BUEkoZXh0ZW5zaW9uLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxl
RnJhbWVSZWYgV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb25HZXRGcmFtZShXS0J1bmRsZURPTVdp
bmRvd0V4dGVuc2lvblJlZiBleHRlbnNpb24pCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChl
eHRlbnNpb24pLT5mcmFtZSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoZXh0
ZW5zaW9uKS0+ZnJhbWUoKSk7CiB9CiAKIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgV0tCdW5kbGVE
T01XaW5kb3dFeHRlbnNpb25HZXRTY3JpcHRXb3JsZChXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lv
blJlZiBleHRlbnNpb24pCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChleHRlbnNpb24pLT53
b3JsZCgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoZXh0ZW5zaW9uKS0+d29y
bGQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcAppbmRleCA3ODVkMWE1ZWI5
NTM2MmU0OWI4Y2U2ZWVjZjZiMDliMjdiYWM4ZjY5Li5hOWNlYjZkMTcyZTNkOGZmZjU4YWQ3MTZl
MDI1NzVlMWE4NmVkODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRnJhbWUuY3BwCkBAIC00NSwz
NiArNDUsMzQgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZS5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBXS1R5cGVJRCBXS0J1
bmRsZUZyYW1lR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViRnJhbWU6OkFQSVR5
cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6V2ViRnJhbWU6OkFQSVR5cGUp
OwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCk7CiB9CiAK
IFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVGcmFtZUdldFBhcmVudEZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChmcmFtZVJlZiktPnBh
cmVudEZyYW1lKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZikt
PnBhcmVudEZyYW1lKCkpOwogfQogCiBXS1VSTFJlZiBXS0J1bmRsZUZyYW1lQ29weVVSTChXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0lt
cGwoZnJhbWVSZWYpLT51cmwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEko
V2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT51cmwoKSk7CiB9CiAKIFdLVVJMUmVmIFdLQnVuZGxl
RnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGZyYW1lUmVmKS0+cHJvdmlzaW9uYWxVUkwo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwoZnJh
bWVSZWYpLT5wcm92aXNpb25hbFVSTCgpKTsKIH0KIAogV0tGcmFtZUxvYWRTdGF0ZSBXS0J1bmRs
ZUZyYW1lR2V0RnJhbWVMb2FkU3RhdGUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAg
ICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gdG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1l
KCk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFdlYktpdDo6dG9JbXBsKGZyYW1l
UmVmKS0+Y29yZUZyYW1lKCk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBr
V0tGcmFtZUxvYWRTdGF0ZUZpbmlzaGVkOwogCkBAIC05MywxNDkgKzkxLDE0OSBAQCBXS0ZyYW1l
TG9hZFN0YXRlIFdLQnVuZGxlRnJhbWVHZXRGcmFtZUxvYWRTdGF0ZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lUmVmKQogCiBXS0FycmF5UmVmIFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChmcmFt
ZVJlZiktPmNoaWxkRnJhbWVzKCkubGVha1JlZigpKTsgICAgCisgICAgcmV0dXJuIFdlYktpdDo6
dG9BUEkoJldlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y2hpbGRGcmFtZXMoKS5sZWFrUmVmKCkp
OyAgICAKIH0KIAogSlNHbG9iYWxDb250ZXh0UmVmIFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0ltcGwo
ZnJhbWVSZWYpLT5qc0NvbnRleHQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVS
ZWYpLT5qc0NvbnRleHQoKTsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZUZyYW1lRm9y
SmF2YVNjcmlwdENvbnRleHQoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIHRv
QVBJKFdlYkZyYW1lOjpmcmFtZUZvckNvbnRleHQoY29udGV4dCkpOworICAgIHJldHVybiB0b0FQ
SShXZWJLaXQ6OldlYkZyYW1lOjpmcmFtZUZvckNvbnRleHQoY29udGV4dCkpOwogfQogCiBKU0ds
b2JhbENvbnRleHRSZWYgV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZFJl
ZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+anNDb250ZXh0Rm9yV29ybGQodG9J
bXBsKHdvcmxkUmVmKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+anND
b250ZXh0Rm9yV29ybGQoV2ViS2l0Ojp0b0ltcGwod29ybGRSZWYpKTsKIH0KIAogSlNWYWx1ZVJl
ZiBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdFdyYXBwZXJGb3JOb2RlRm9yV29ybGQoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYs
IFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChm
cmFtZVJlZiktPmpzV3JhcHBlckZvcldvcmxkKHRvSW1wbChub2RlSGFuZGxlUmVmKSwgdG9JbXBs
KHdvcmxkUmVmKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+anNXcmFw
cGVyRm9yV29ybGQoV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiksIFdlYktpdDo6dG9JbXBs
KHdvcmxkUmVmKSk7CiB9CiAKIEpTVmFsdWVSZWYgV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRX
cmFwcGVyRm9yUmFuZ2VGb3JXb3JsZChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBXS0J1bmRs
ZVJhbmdlSGFuZGxlUmVmIHJhbmdlSGFuZGxlUmVmLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdv
cmxkUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5qc1dyYXBwZXJGb3JXb3Js
ZCh0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLCB0b0ltcGwod29ybGRSZWYpKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5qc1dyYXBwZXJGb3JXb3JsZChXZWJLaXQ6OnRvSW1w
bChyYW5nZUhhbmRsZVJlZiksIFdlYktpdDo6dG9JbXBsKHdvcmxkUmVmKSk7CiB9CiAKIFdLU3Ry
aW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQog
ewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5uYW1lKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+bmFt
ZSgpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tCdW5kbGVGcmFtZUNvcHlDb3VudGVyVmFsdWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgSlNPYmplY3RSZWYgZWxlbWVudCkKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRBUEkodG9JbXBsKGZyYW1lUmVmKS0+Y291bnRlclZhbHVlKGVsZW1lbnQpKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZikt
PmNvdW50ZXJWYWx1ZShlbGVtZW50KSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVD
b3B5SW5uZXJUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChmcmFtZVJlZiktPmlubmVyVGV4dCgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmlubmVyVGV4dCgpKTsK
IH0KIAogdW5zaWduZWQgV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5wZW5k
aW5nVW5sb2FkQ291bnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5w
ZW5kaW5nVW5sb2FkQ291bnQoKTsKIH0KIAogV0tCdW5kbGVQYWdlUmVmIFdLQnVuZGxlRnJhbWVH
ZXRQYWdlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRv
SW1wbChmcmFtZVJlZiktPnBhZ2UoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBs
KGZyYW1lUmVmKS0+cGFnZSgpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1lQ2xlYXJPcGVuZXIo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZy
YW1lID0gdG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWUq
IGNvcmVGcmFtZSA9IFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CiAgICAg
aWYgKGNvcmVGcmFtZSkKICAgICAgICAgY29yZUZyYW1lLT5sb2FkZXIoKS5zZXRPcGVuZXIoMCk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVN0b3BMb2FkaW5nKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWVSZWYpCiB7Ci0gICAgdG9JbXBsKGZyYW1lUmVmKS0+c3RvcExvYWRpbmcoKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChmcmFtZVJlZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlRnJhbWVDb3B5TGF5ZXJUcmVlQXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChmcmFtZVJlZiktPmxheWVyVHJlZUFz
VGV4dCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChm
cmFtZVJlZiktPmxheWVyVHJlZUFzVGV4dCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQWxs
b3dzRm9sbG93aW5nTGluayhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBXS1VSTFJlZiB1cmxS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChmcmFtZVJlZiktPmFsbG93c0ZvbGxvd2luZ0xpbmso
VVJMKFVSTCgpLCB0b1dURlN0cmluZyh1cmxSZWYpKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKGZyYW1lUmVmKS0+YWxsb3dzRm9sbG93aW5nTGluayhVUkwoVVJMKCksIFdlYktpdDo6dG9X
VEZTdHJpbmcodXJsUmVmKSkpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVIYW5kbGVzUGFnZVNj
YWxlR2VzdHVyZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQ
SSh0b0ltcGwoZnJhbWVSZWYpLT5oYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5oYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSgpOwog
fQogCiBXS1JlY3QgV0tCdW5kbGVGcmFtZUdldENvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+Y29udGVu
dEJvdW5kcygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFt
ZVJlZiktPmNvbnRlbnRCb3VuZHMoKSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZUZyYW1lR2V0Vmlz
aWJsZUNvbnRlbnRCb3VuZHMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1
cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT52aXNpYmxlQ29u
dGVudEJvdW5kcygpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVu
dEJvdW5kc0V4Y2x1ZGluZ1Njcm9sbGJhcnMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsK
LSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNF
eGNsdWRpbmdTY3JvbGxiYXJzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
dG9JbXBsKGZyYW1lUmVmKS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNsdWRpbmdTY3JvbGxiYXJz
KCkpOwogfQogCiBXS1NpemUgV0tCdW5kbGVGcmFtZUdldFNjcm9sbE9mZnNldChXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5z
Y3JvbGxPZmZzZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5zY3JvbGxPZmZzZXQoKSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVGcmFtZUhhc0hv
cml6b250YWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKGZyYW1lUmVmKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTsKIH0K
IAogYm9vbCBXS0J1bmRsZUZyYW1lSGFzVmVydGljYWxTY3JvbGxiYXIoV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+aGFzVmVydGljYWxT
Y3JvbGxiYXIoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcigpOwogfQogCiBib29sIFdLQnVuZGxlRnJhbWVHZXREb2N1bWVudEJhY2tn
cm91bmRDb2xvcihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmLCBkb3VibGUqIHJlZCwgZG91Ymxl
KiBncmVlbiwgZG91YmxlKiBibHVlLCBkb3VibGUqIGFscGhhKQogewotICAgIHJldHVybiB0b0lt
cGwoZnJhbWVSZWYpLT5nZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Z2V0RG9jdW1l
bnRCYWNrZ3JvdW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS0J1bmRsZUZyYW1lQ29weVN1Z2dlc3RlZEZpbGVuYW1lRm9yUmVzb3VyY2VXaXRoVVJM
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRBUEkodG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVkRmlsZW5hbWVGb3JSZXNv
dXJjZVdpdGhVUkwoVVJMKFVSTCgpLCB0b1dURlN0cmluZyh1cmxSZWYpKSkpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+c3VnZ2VzdGVk
RmlsZW5hbWVGb3JSZXNvdXJjZVdpdGhVUkwoVVJMKFVSTCgpLCBXZWJLaXQ6OnRvV1RGU3RyaW5n
KHVybFJlZikpKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVG
b3JSZXNvdXJjZVdpdGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgdXJs
UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5taW1lVHlw
ZUZvclJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHVybFJlZikpKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5t
aW1lVHlwZUZvclJlc291cmNlV2l0aFVSTChVUkwoVVJMKCksIFdlYktpdDo6dG9XVEZTdHJpbmco
dXJsUmVmKSkpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUZyYW1lQ29udGFpbnNBbnlGb3JtRWxlbWVu
dHMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1l
UmVmKS0+Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwoZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1FbGVtZW50cygpOwogfQogCiBib29sIFdLQnVu
ZGxlRnJhbWVDb250YWluc0FueUZvcm1Db250cm9scyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5jb250YWluc0FueUZvcm1Db250cm9s
cygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmNvbnRhaW5zQW55Rm9y
bUNvbnRyb2xzKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24oV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlZiwgV0tTdHJpbmdSZWYgZGlyZWN0aW9uUmVmKQogewotICAg
IHRvSW1wbChmcmFtZVJlZiktPnNldFRleHREaXJlY3Rpb24odG9XVEZTdHJpbmcoZGlyZWN0aW9u
UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5zZXRUZXh0RGlyZWN0aW9uKFdl
YktpdDo6dG9XVEZTdHJpbmcoZGlyZWN0aW9uUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVGcmFt
ZVNldEFjY2Vzc2libGVOYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLU3RyaW5nUmVm
IGFjY2Vzc2libGVOYW1lUmVmKQogewotICAgIHRvSW1wbChmcmFtZVJlZiktPnNldEFjY2Vzc2li
bGVOYW1lKHRvV1RGU3RyaW5nKGFjY2Vzc2libGVOYW1lUmVmKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwoZnJhbWVSZWYpLT5zZXRBY2Nlc3NpYmxlTmFtZShXZWJLaXQ6OnRvV1RGU3RyaW5nKGFjY2Vz
c2libGVOYW1lUmVmKSk7CiB9CiAKIFdLRGF0YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hp
dmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKQEAgLTI0Niw3ICsyNDQsNyBAQCBXS0RhdGFS
ZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYp
CiBXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlRmlsdGVyaW5nU3ViZnJhbWVz
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYsIFdLQnVuZGxlRnJhbWVGcmFtZUZpbHRlckNhbGxi
YWNrIGZyYW1lRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IHRvSW1wbChmcmFtZVJlZikt
PndlYkFyY2hpdmVEYXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOworICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IGRhdGEgPSBXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPndlYkFyY2hp
dmVEYXRhKGZyYW1lRmlsdGVyQ2FsbGJhY2ssIGNvbnRleHQpOwogICAgIGlmIChkYXRhKQogICAg
ICAgICByZXR1cm4gV0tEYXRhQ3JlYXRlKENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSksIENG
RGF0YUdldExlbmd0aChkYXRhLmdldCgpKSk7CiAjZWxzZQpAQCAtMjYwLDcgKzI1OCw3IEBAIFdL
RGF0YVJlZiBXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmVGaWx0ZXJpbmdTdWJmcmFtZXMoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZVJlCiAKIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9z
ZU9uV2ViVmlldyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWUgPSB0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJhbWUoKTsKKyAgICBXZWJD
b3JlOjpGcmFtZSogY29yZUZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jb3JlRnJh
bWUoKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI2
OSwyMSArMjY3LDIxIEBAIGJvb2wgV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmll
dyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lUmVmKQogCiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYg
V0tCdW5kbGVGcmFtZUNyZWF0ZUhpdFRlc3RSZXN1bHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJl
ZiwgV0tQb2ludCBwb2ludCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGZyYW1lUmVmKS0+
aGl0VGVzdCh0b0ludFBvaW50KHBvaW50KSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPmhpdFRlc3QoV2ViS2l0Ojp0b0ludFBv
aW50KHBvaW50KSkubGVha1JlZigpKTsKIH0KIAogV0tTZWN1cml0eU9yaWdpblJlZiBXS0J1bmRs
ZUZyYW1lQ29weVNlY3VyaXR5T3JpZ2luKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0g
ICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IHRvSW1wbChmcmFtZVJlZiktPmNvcmVGcmFt
ZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBXZWJLaXQ6OnRvSW1wbChmcmFt
ZVJlZiktPmNvcmVGcmFtZSgpOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiB0b0NvcGllZEFQSSgmY29yZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSSgmY29yZUZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZUZyYW1l
Rm9jdXMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSog
Y29yZUZyYW1lID0gdG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7CisgICAgV2ViQ29yZTo6
RnJhbWUqIGNvcmVGcmFtZSA9IFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y29yZUZyYW1lKCk7
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSGl0VGVz
dFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAppbmRleCA2OTMzNDNjNzRmNmEwOTk1Y2ExMGY5
NTQzNTFmOWIyZWQyNzBlYjc2Li5kYzVjOWYyN2VjMGI4ZTQ5NzBhYWY2ZDRlNTYxYTNlMWEwNGUz
ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAt
MzMsMTAyICszMywxMDAgQEAKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYklt
YWdlLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlSGl0
VGVzdFJlc3VsdEdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxl
SGl0VGVzdFJlc3VsdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OkFQSVR5cGUpOwogfQogCiBXS0J1bmRsZU5v
ZGVIYW5kbGVSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoV0tCdW5kbGVI
aXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgUmVmUHRyPEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+
bm9kZUhhbmRsZSgpOworICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZT4gbm9kZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5ub2RlSGFu
ZGxlKCk7CiAgICAgcmV0dXJuIHRvQVBJKG5vZGVIYW5kbGUubGVha1JlZigpKTsKIH0KIAogV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlVUkxFbGVtZW50SGFu
ZGxlKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IHVybEVsZW1lbnROb2RlSGFuZGxlID0gdG9J
bXBsKGhpdFRlc3RSZXN1bHRSZWYpLT51cmxFbGVtZW50SGFuZGxlKCk7CisgICAgUmVmUHRyPFdl
YktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiB1cmxFbGVtZW50Tm9kZUhhbmRsZSA9IFdl
YktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT51cmxFbGVtZW50SGFuZGxlKCk7CiAgICAg
cmV0dXJuIHRvQVBJKHVybEVsZW1lbnROb2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVu
ZGxlRnJhbWVSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0R2V0RnJhbWUoV0tCdW5kbGVIaXRUZXN0
UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbCho
aXRUZXN0UmVzdWx0UmVmKS0+ZnJhbWUoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9J
bXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5mcmFtZSgpKTsKIH0KIAogV0tCdW5kbGVGcmFtZVJlZiBX
S0J1bmRsZUhpdFRlc3RSZXN1bHRHZXRUYXJnZXRGcmFtZShXS0J1bmRsZUhpdFRlc3RSZXN1bHRS
ZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRlc3RS
ZXN1bHRSZWYpLT50YXJnZXRGcmFtZSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPnRhcmdldEZyYW1lKCkpOwogfQogCiBXS1VSTFJlZiBXS0J1
bmRsZUhpdFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVJbWFnZVVSTChXS0J1bmRsZUhpdFRlc3RSZXN1
bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9J
bXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZUltYWdlVVJMKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5h
YnNvbHV0ZUltYWdlVVJMKCkpOwogfQogCiBXS1VSTFJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRD
b3B5QWJzb2x1dGVQREZVUkwoV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKHRvSW1wbChoaXRUZXN0UmVzdWx0UmVm
KS0+YWJzb2x1dGVQREZVUkwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRVUkxBUEko
V2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmFic29sdXRlUERGVVJMKCkpOwogfQog
CiBXS1VSTFJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVMaW5rVVJMKFdLQnVu
ZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0Nv
cGllZFVSTEFQSSh0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmFic29sdXRlTGlua1VSTCgpKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+YWJzb2x1dGVMaW5rVVJMKCkpOwogfQogCiBXS1VSTFJlZiBXS0J1bmRsZUhp
dFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVNZWRpYVVSTChXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYg
aGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGhp
dFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZU1lZGlhVVJMKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0
ZU1lZGlhVVJMKCkpOwogfQogCiBib29sIFdLQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhSXNJbkZ1
bGxzY3JlZW4oV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bWVkaWFJc0luRnVsbHNjcmVlbigp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bWVkaWFJc0lu
RnVsbHNjcmVlbigpOwogfQogCiBib29sIFdLQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhSGFzQXVk
aW8oV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bWVkaWFIYXNBdWRpbygpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bWVkaWFIYXNBdWRpbygpOwogfQog
CiBib29sIFdLQnVuZGxlSGl0VGVzdFJlc3VsdElzRG93bmxvYWRhYmxlTWVkaWEoV0tCdW5kbGVI
aXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbCho
aXRUZXN0UmVzdWx0UmVmKS0+aXNEb3dubG9hZGFibGVNZWRpYSgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNEb3dubG9hZGFibGVNZWRpYSgpOwogfQog
CiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUgV0tCdW5kbGVIaXRUZXN0UmVzdWx0R2V0
TWVkaWFUeXBlKFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewot
ICAgIHJldHVybiB0b0FQSSh0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlhVHlwZSgpKTsK
KyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPm1lZGlh
VHlwZSgpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlSGl0VGVzdFJlc3VsdEdldEltYWdlUmVjdChX
S0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5pbWFnZVJlY3QoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmltYWdlUmVj
dCgpKTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5SW1hZ2UoV0tC
dW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgUmVmUHRyPFdl
YkltYWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aW1hZ2UoKTsKKyAg
ICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1wbChoaXRU
ZXN0UmVzdWx0UmVmKS0+aW1hZ2UoKTsKICAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1Jl
ZigpKTsKIH0KIAogYm9vbCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRHZXRJc1NlbGVjdGVkKFdLQnVu
ZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0lt
cGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzU2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmlzU2VsZWN0ZWQoKTsKIH0KIAogV0tTdHJpbmdSZWYg
V0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUxpbmtMYWJlbChXS0J1bmRsZUhpdFRlc3RSZXN1bHRS
ZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGhp
dFRlc3RSZXN1bHRSZWYpLT5saW5rTGFiZWwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3Bp
ZWRBUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtMYWJlbCgpKTsKIH0K
IAogV0tTdHJpbmdSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUxpbmtUaXRsZShXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3Bp
ZWRBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5saW5rVGl0bGUoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmxp
bmtUaXRsZSgpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weUxp
bmtTdWdnZXN0ZWRGaWxlbmFtZShXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3Vs
dFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYp
LT5saW5rU3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRB
UEkoV2ViS2l0Ojp0b0ltcGwoaGl0VGVzdFJlc3VsdFJlZiktPmxpbmtTdWdnZXN0ZWRGaWxlbmFt
ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZUluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVJbnNwZWN0b3IuY3BwCmluZGV4IDU1ZWIz
ZGJjMDg3NzcxZGJjYWQ4YjQyZjIyYWU5MzYxZmE4MjY4MDYuLmZhOTRhZjk2YTgxNDQ2NTE3ODU4
MjRjNjUyYTdlNGE4NjM1ODkxMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlSW5zcGVjdG9y
LmNwcApAQCAtMzAsMzQgKzMwLDMyIEBACiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KIFdL
VHlwZUlEIFdLQnVuZGxlSW5zcGVjdG9yR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEko
V2ViSW5zcGVjdG9yOjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6
OldlYkluc3BlY3Rvcjo6QVBJVHlwZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVJbnNwZWN0b3JTaG93
KFdLQnVuZGxlSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKIHsKLSAgICB0b0ltcGwoaW5zcGVj
dG9yUmVmKS0+c2hvdygpOworICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZiktPnNob3co
KTsKIH0KIAogdm9pZCBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlSW5zcGVjdG9yUmVm
IGluc3BlY3RvclJlZikKIHsKLSAgICB0b0ltcGwoaW5zcGVjdG9yUmVmKS0+Y2xvc2UoKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5jbG9zZSgpOwogfQogCiB2b2lkIFdLQnVu
ZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlSW5zcGVjdG9yUmVmIGlu
c3BlY3RvclJlZiwgV0tTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIHRvSW1wbChpbnNwZWN0b3JS
ZWYpLT5ldmFsdWF0ZVNjcmlwdEZvclRlc3QodG9XVEZTdHJpbmcoc2NyaXB0KSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdlYktpdDo6
dG9XVEZTdHJpbmcoc2NyaXB0KSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVJbnNwZWN0b3JTZXRQYWdl
UHJvZmlsaW5nRW5hYmxlZChXS0J1bmRsZUluc3BlY3RvclJlZiBpbnNwZWN0b3JSZWYsIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvd1RpbWVsaW5lcygpOwor
ICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZiktPnNob3dUaW1lbGluZXMoKTsKIAogICAg
IGlmIChlbmFibGVkKQotICAgICAgICB0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c3RhcnRQYWdlUHJv
ZmlsaW5nKCk7CisgICAgICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZiktPnN0YXJ0UGFn
ZVByb2ZpbGluZygpOwogICAgIGVsc2UKLSAgICAgICAgdG9JbXBsKGluc3BlY3RvclJlZiktPnN0
b3BQYWdlUHJvZmlsaW5nKCk7CisgICAgICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZikt
PnN0b3BQYWdlUHJvZmlsaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5h
dmlnYXRpb25BY3Rpb24uY3BwCmluZGV4IGEzYzM2M2UxOTQyY2VjMDQ3OTU1ZjkyYjAzMjcwYTk1
NmRhZmU5N2IuLjg3YjhlMTQxNGU4ZGZiM2Q5YzIwMzY1MjQ0ZmY5YTFlMWJmNWQzN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwCkBAIC0zMyw1
MSArMzMsNDkgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQ
SUNhc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVO
YXZpZ2F0aW9uQWN0aW9uR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoSW5qZWN0ZWRC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uOjpBUElUeXBlKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SShXZWJLaXQ6OkluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlvbjo6QVBJVHlwZSk7CiB9CiAK
IFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0
aW9uVHlwZShXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZikK
IHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5uYXZpZ2F0
aW9uVHlwZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChuYXZp
Z2F0aW9uQWN0aW9uUmVmKS0+bmF2aWdhdGlvblR5cGUoKSk7CiB9CiAKIFdLRXZlbnRNb2RpZmll
cnMgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0RXZlbnRNb2RpZmllcnMoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+bW9kaWZpZXJzKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5tb2RpZmll
cnMoKSk7CiB9CiAKIFdLRXZlbnRNb3VzZUJ1dHRvbiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25H
ZXRFdmVudE1vdXNlQnV0dG9uKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9u
QWN0aW9uUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJl
ZiktPm1vdXNlQnV0dG9uKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9J
bXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5tb3VzZUJ1dHRvbigpKTsKIH0KIAogV0tCdW5kbGVI
aXRUZXN0UmVzdWx0UmVmIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0
KFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmKQogewotICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSB0b0lt
cGwobmF2aWdhdGlvbkFjdGlvblJlZiktPmhpdFRlc3RSZXN1bHQoKTsKKyAgICBSZWZQdHI8V2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBXZWJLaXQ6
OnRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+aGl0VGVzdFJlc3VsdCgpOwogICAgIHJldHVy
biB0b0FQSShoaXRUZXN0UmVzdWx0LmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5Rm9ybUVsZW1lbnQoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgUmVmUHRyPEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZT4gZm9ybUVsZW1lbnQgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlv
blJlZiktPmZvcm1FbGVtZW50KCk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlPiBmb3JtRWxlbWVudCA9IFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25S
ZWYpLT5mb3JtRWxlbWVudCgpOwogICAgIHJldHVybiB0b0FQSShmb3JtRWxlbWVudC5sZWFrUmVm
KCkpOwogfQogCiBib29sIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldFNob3VsZE9wZW5FeHRl
cm5hbFVSTHMoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c2hvdWxkT3BlbkV4
dGVybmFsVVJMcygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChuYXZpZ2F0aW9uQWN0aW9u
UmVmKS0+c2hvdWxkT3BlbkV4dGVybmFsVVJMcygpOwogfQogCiBib29sIFdLQnVuZGxlTmF2aWdh
dGlvbkFjdGlvbkdldFNob3VsZFRyeUFwcExpbmtzKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJl
ZiBuYXZpZ2F0aW9uQWN0aW9uUmVmKQogewotICAgIHJldHVybiB0b0ltcGwobmF2aWdhdGlvbkFj
dGlvblJlZiktPnNob3VsZFRyeUFwcExpbmtzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zaG91bGRUcnlBcHBMaW5rcygpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5RG93bmxvYWRBdHRyaWJ1dGUoV0tCdW5k
bGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYpCiB7Ci0gICAgcmV0dXJu
IHRvQ29waWVkQVBJKHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+ZG93bmxvYWRBdHRyaWJ1
dGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwobmF2
aWdhdGlvbkFjdGlvblJlZiktPmRvd25sb2FkQXR0cmlidXRlKCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9k
ZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRleCA0YzdkYmI0MTJjMTJkNTUxZjllOGE3ZmM3
ZWY5MjgzYTgyYjViNzVjLi5hYTVmZTI0ZTljZGIyYjJiY2I5MmQ1NTg4ZmMzOTZmZDg5MjFhNTMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcApAQCAtMzUsOCArMzUs
NiBAQAogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCiBzdGF0aWMg
V2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlIHRvQXV0b0ZpbGxCdXR0b25UeXBlKFdLQXV0b0Zp
bGxCdXR0b25UeXBlIHdrQXV0b0ZpbGxCdXR0b25UeXBlKQogewogICAgIHN3aXRjaCAod2tBdXRv
RmlsbEJ1dHRvblR5cGUpIHsKQEAgLTc1LDE0MiArNzMsMTQyIEBAIHN0YXRpYyBXS0F1dG9GaWxs
QnV0dG9uVHlwZSB0b1dLQXV0b0ZpbGxCdXR0b25UeXBlKFdlYkNvcmU6OkF1dG9GaWxsQnV0dG9u
VHlwZSBhCiAKIFdLVHlwZUlEIFdLQnVuZGxlTm9kZUhhbmRsZUdldFR5cGVJRCgpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6QVBJVHlwZSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OkFQSVR5
cGUpOwogfQogCiBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ3JlYXRl
KEpTQ29udGV4dFJlZiBjb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3RSZWYpCiB7Ci0gICAg
UmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoY29udGV4dFJlZiwgb2JqZWN0UmVmKTsKKyAgICBS
ZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSBXZWJL
aXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoY29udGV4dFJlZiwgb2Jq
ZWN0UmVmKTsKICAgICByZXR1cm4gdG9BUEkobm9kZUhhbmRsZS5sZWFrUmVmKCkpOwogfQogCiBX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50KFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU+IG5vZGVIYW5kbGUgPSB0b0ltcGwobm9kZUhhbmRsZVJlZiktPmRvY3Vt
ZW50KCk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2Rl
SGFuZGxlID0gV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiktPmRvY3VtZW50KCk7CiAgICAg
cmV0dXJuIHRvQVBJKG5vZGVIYW5kbGUubGVha1JlZigpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxl
Tm9kZUhhbmRsZUdldFJlbmRlclJlY3QoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVS
ZWYsIGJvb2wqIGlzUmVwbGFjZWQpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChub2RlSGFu
ZGxlUmVmKS0+cmVuZGVyUmVjdChpc1JlcGxhY2VkKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9B
UEkoV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRsZVJlZiktPnJlbmRlclJlY3QoaXNSZXBsYWNlZCkp
OwogfQogCiBXS0ltYWdlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlTbmFwc2hvdFdpdGhPcHRp
b25zKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBXS1NuYXBzaG90T3B0aW9u
cyBvcHRpb25zKQogewotICAgIFJlZlB0cjxXZWJJbWFnZT4gaW1hZ2UgPSB0b0ltcGwobm9kZUhh
bmRsZVJlZiktPnJlbmRlcmVkSW1hZ2UodG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucyksIG9wdGlv
bnMgJiBrV0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRlT3ZlcmZsb3cpOworICAgIFJlZlB0cjxXZWJL
aXQ6OldlYkltYWdlPiBpbWFnZSA9IFdlYktpdDo6dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT5yZW5k
ZXJlZEltYWdlKFdlYktpdDo6dG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucyksIG9wdGlvbnMgJiBr
V0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRlT3ZlcmZsb3cpOwogICAgIHJldHVybiB0b0FQSShpbWFn
ZS5sZWFrUmVmKCkpOwogfQogCiBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhh
bmRsZUNvcHlWaXNpYmxlUmFuZ2UoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYp
CiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IHJhbmdlSGFuZGxlID0g
dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKKyAgICBSZWZQdHI8V2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBs
KG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2UoKTsKICAgICByZXR1cm4gdG9BUEkocmFuZ2VI
YW5kbGUubGVha1JlZigpKTsKIH0KIAogV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEVsZW1l
bnRCb3VuZHMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKHRvSW1wbChlbGVtZW50SGFuZGxlUmVmKS0+ZWxlbWVudEJvdW5kcygpKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChlbGVtZW50SGFuZGxlUmVm
KS0+ZWxlbWVudEJvdW5kcygpKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1M
SW5wdXRFbGVtZW50VmFsdWVGb3JVc2VyKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRF
bGVtZW50SGFuZGxlUmVmLCBXS1N0cmluZ1JlZiB2YWx1ZVJlZikKIHsKLSAgICB0b0ltcGwoaHRt
bElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIo
dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNlcihXZWJLaXQ6OnRv
V1RGU3RyaW5nKHZhbHVlUmVmKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRN
TElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0VuYWJs
ZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJl
ZiktPnNldEhUTUxJbnB1dEVsZW1lbnRTcGVsbGNoZWNrRW5hYmxlZChlbmFibGVkKTsKIH0KIAog
Ym9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1
bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKCk7CiB9CiAKIHZvaWQgV0tC
dW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZmlsbGVkKQogewotICAg
IHRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudEF1
dG9GaWxsZWQoZmlsbGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFu
ZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoZmlsbGVkKTsKIH0KIAogYm9v
bCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFi
bGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0
RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxC
dXR0b25FbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSBh
dXRvRmlsbEJ1dHRvblR5cGUpCiB7Ci0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVS
ZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKHRvQXV0b0ZpbGxC
dXR0b25UeXBlKGF1dG9GaWxsQnV0dG9uVHlwZSkpOworICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25F
bmFibGVkKHRvQXV0b0ZpbGxCdXR0b25UeXBlKGF1dG9GaWxsQnV0dG9uVHlwZSkpOwogfQogCiBX
S0F1dG9GaWxsQnV0dG9uVHlwZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50
SGFuZGxlUmVmKQogewotICAgIHJldHVybiB0b1dLQXV0b0ZpbGxCdXR0b25UeXBlKHRvSW1wbCho
dG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9u
VHlwZSgpKTsKKyAgICByZXR1cm4gdG9XS0F1dG9GaWxsQnV0dG9uVHlwZShXZWJLaXQ6OnRvSW1w
bChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxsQnV0
dG9uVHlwZSgpKTsKIH0KIAogV0tBdXRvRmlsbEJ1dHRvblR5cGUgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTElucHV0RWxlbWVudExhc3RBdXRvRmlsbEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvV0tBdXRv
RmlsbEJ1dHRvblR5cGUodG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sSW5w
dXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZSgpKTsKKyAgICByZXR1cm4gdG9XS0F1dG9G
aWxsQnV0dG9uVHlwZShXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+
aHRtbElucHV0RWxlbWVudExhc3RBdXRvRmlsbEJ1dHRvblR5cGUoKSk7CiB9CiAKIGJvb2wgV0tC
dW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQXZhaWxhYmxlKFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQogewotICAgIHJldHVy
biB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzQXV0b0ZpbGxBdmFpbGFibGUo
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikt
PmlzQXV0b0ZpbGxBdmFpbGFibGUoKTsKIH0KIAogdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRI
VE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgYXV0b0ZpbGxBdmFpbGFibGUpCiB7Ci0gICAg
dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRBdXRvRmlsbEF2YWlsYWJsZShh
dXRvRmlsbEF2YWlsYWJsZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZiktPnNldEF1dG9GaWxsQXZhaWxhYmxlKGF1dG9GaWxsQXZhaWxhYmxlKTsKIH0KIAog
V0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRv
bkJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikK
IHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5o
dG1sSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJ
bnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcygpKTsKIH0KIAogYm9vbCBXS0J1bmRsZU5v
ZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KFdLQnVuZGxl
Tm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0Q2hh
bmdlV2FzVXNlckVkaXQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxl
bWVudEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsK
IH0KIAogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MVGV4dEFyZWFFbGVtZW50TGFzdENo
YW5nZVdhc1VzZXJFZGl0KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sVGV4dEFyZWFFbGVtZW50
SGFuZGxlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwoaHRtbFRleHRBcmVhRWxlbWVudEhhbmRs
ZVJlZiktPmh0bWxUZXh0QXJlYUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbFRleHRBcmVhRWxlbWVudEhhbmRsZVJlZiktPmh0bWxU
ZXh0QXJlYUVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIH0KIAogV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MVGFibGVDZWxsRWxlbWVudENlbGxB
Ym92ZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbFRhYmxlQ2VsbEVsZW1lbnRIYW5kbGVSZWYp
CiB7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IHRv
SW1wbChodG1sVGFibGVDZWxsRWxlbWVudEhhbmRsZVJlZiktPmh0bWxUYWJsZUNlbGxFbGVtZW50
Q2VsbEFib3ZlKCk7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxl
PiBub2RlSGFuZGxlID0gV2ViS2l0Ojp0b0ltcGwoaHRtbFRhYmxlQ2VsbEVsZW1lbnRIYW5kbGVS
ZWYpLT5odG1sVGFibGVDZWxsRWxlbWVudENlbGxBYm92ZSgpOwogICAgIHJldHVybiB0b0FQSShu
b2RlSGFuZGxlLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2Rl
SGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGRvY3VtZW50SGFu
ZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJGcmFtZT4gZnJhbWUgPSB0b0ltcGwoZG9jdW1lbnRI
YW5kbGVSZWYpLT5kb2N1bWVudEZyYW1lKCk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViRnJhbWU+
IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoZG9jdW1lbnRIYW5kbGVSZWYpLT5kb2N1bWVudEZyYW1l
KCk7CiAgICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJh
bWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAg
UmVmUHRyPFdlYkZyYW1lPiBmcmFtZSA9IHRvSW1wbChodG1sRnJhbWVFbGVtZW50SGFuZGxlUmVm
KS0+aHRtbEZyYW1lRWxlbWVudENvbnRlbnRGcmFtZSgpOworICAgIFJlZlB0cjxXZWJLaXQ6Oldl
YkZyYW1lPiBmcmFtZSA9IFdlYktpdDo6dG9JbXBsKGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYp
LT5odG1sRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKCk7CiAgICAgcmV0dXJuIHRvQVBJKGZyYW1l
LmxlYWtSZWYoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29w
eUhUTUxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SUZyYW1lRWxlbWVudEhhbmRsZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViRnJhbWU+IGZyYW1lID0g
dG9JbXBsKGh0bWxJRnJhbWVFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElGcmFtZUVsZW1lbnRDb250
ZW50RnJhbWUoKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJGcmFtZT4gZnJhbWUgPSBXZWJLaXQ6
OnRvSW1wbChodG1sSUZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0bWxJRnJhbWVFbGVtZW50Q29u
dGVudEZyYW1lKCk7CiAgICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CiB9CiAKIC8v
IERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1
dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKS4KIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxl
R2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJ
bnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZCgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRF
bGVtZW50QXV0b0ZpbGxlZCgpOwogfQogCiAvLyBEZXByZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9k
ZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiwgYm9vbCkuCiB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRv
ZmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBi
b29sIGZpbGxlZCkKIHsKLSAgICB0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
aHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVk
KGZpbGxlZCk7CiB9CiAKIC8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0b25UeXBlKFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRvblR5cGUpLgpAQCAtMjE4LDUgKzIxNiw1
IEBAIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0
dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kCiB7CiAgICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0
b25UeXBlIGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1
dHRvblR5cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25l
OwogCi0gICAgdG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRF
bGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKGF1dG9GaWxsQnV0dG9uVHlwZSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1l
bnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoYXV0b0ZpbGxCdXR0b25UeXBlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggOTk1YzVkY2M5NjFlM2JlNTA2YzA4MWNhYmNmYTZhMzdj
ZGRjMWU5OC4uNGU0NmI3NGIyYmZhZmY2MDE5OTJhZjc5NGNhOGRhMWIyMDUyNjk2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTY5LDE3ICs2OSwxNSBAQAogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAKLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci0KIFdLVHlwZUlEIFdLQnVuZGxlUGFnZUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKFdlYlBhZ2U6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdl
YktpdDo6V2ViUGFnZTo6QVBJVHlwZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0Q29udGV4
dE1lbnVDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUNvbnRleHRN
ZW51Q2xpZW50QmFzZSogd2tDbGllbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50KHN0
ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQ+KHdrQ2xp
ZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEluamVjdGVkQnVuZGxlQ29u
dGV4dE1lbnVDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFn
ZUNvbnRleHRNZW51Q2xpZW50Pih3a0NsaWVudCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cGFnZVJlZik7CiAgICAgVU5VU0VEX1BBUkFNKHdrQ2xpZW50KTsKQEAgLTg4LDM4ICs4NiwzOCBA
QCB2b2lkIFdLQnVuZGxlUGFnZVNldENvbnRleHRNZW51Q2xpZW50KFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmLCBXS0J1bmRsZVBhZ2VDb250ZQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEVkaXRvckNs
aWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50QmFz
ZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUVk
aXRvckNsaWVudCh3a0NsaWVudCA/IHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50Pigqd2tDbGllbnQpIDogc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkluamVjdGVk
QnVuZGxlOjpFZGl0b3JDbGllbnQ+KCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5z
ZXRJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCh3a0NsaWVudCA/IHN0ZDo6bWFrZV91bmlxdWU8
V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ+KCp3a0NsaWVudCkgOiBzdGQ6
Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkVkaXRvckNsaWVudD4oKSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVQYWdlU2V0Rm9ybUNsaWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwg
V0tCdW5kbGVQYWdlRm9ybUNsaWVudEJhc2UqIHdrQ2xpZW50KQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5qZWN0
ZWRCdW5kbGVQYWdlRm9ybUNsaWVudD4od2tDbGllbnQpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8V2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50Pih3a0NsaWVudCkpOwogfQogCiB2b2lk
IFdLQnVuZGxlUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYs
IFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudEJhc2UqIHdrQ2xpZW50KQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50KHN0ZDo6bWFrZV91bmlx
dWU8SW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Pih3a0NsaWVudCkpOworICAgIFdlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQoc3Rk
OjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudD4od2tD
bGllbnQpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRSZXNvdXJjZUxvYWRDbGllbnQoV0tC
dW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudEJhc2Uq
IHdrQ2xpZW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVSZXNv
dXJjZUxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJj
ZUxvYWRDbGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNl
dEluamVjdGVkQnVuZGxlUmVzb3VyY2VMb2FkQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQ+KHdrQ2xpZW50KSk7CiB9CiAK
IHZvaWQgV0tCdW5kbGVQYWdlU2V0UG9saWN5Q2xpZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0J1bmRsZVBhZ2VQb2xpY3lDbGllbnRCYXNlKiB3a0NsaWVudCkKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBvbGljeUNsaWVudCh3a0NsaWVudCk7
CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBv
bGljeUNsaWVudCh3a0NsaWVudCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VUlDbGllbnQo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZVVJQ2xpZW50QmFzZSogd2tDbGll
bnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZVVJQ2xpZW50KHN0
ZDo6bWFrZV91bmlxdWU8SW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQ+KHdrQ2xpZW50KSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEluamVjdGVkQnVuZGxlVUlDbGllbnQoc3Rk
OjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50Pih3a0NsaWVu
dCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEZ1bGxTY3JlZW5DbGllbnQoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnRCYXNlKiB3a0NsaWVu
dCkKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVG
dWxsU2NyZWVuQ2xpZW50KHdrQ2xpZW50KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudCh3a0NsaWVudCk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAgICBVTlVTRURfUEFSQU0od2tDbGllbnQp
OwpAQCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlU2V0RnVsbFNjcmVlbkNsaWVu
dChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlRnVsbFNjCiB2b2lkIFdLQnVu
ZGxlUGFnZVdpbGxFbnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7CiAj
aWYgZGVmaW5lZChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICYmIEVOQUJMRV9GVUxMU0NSRUVOX0FQ
SQotICAgIHRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEVudGVyRnVs
bFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdl
cigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
UmVmKTsKICNlbmRpZgpAQCAtMTM4LDcgKzEzNiw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlV2lsbEVu
dGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHZvaWQgV0tCdW5kbGVQYWdl
RGlkRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewogI2lmIGRlZmlu
ZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEVfRlVMTFNDUkVFTl9BUEkKLSAgICB0
b0ltcGwocGFnZVJlZiktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVlbigp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRF
bnRlckZ1bGxTY3JlZW4oKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogI2Vu
ZGlmCkBAIC0xNDcsNyArMTQ1LDcgQEAgdm9pZCBXS0J1bmRsZVBhZ2VEaWRFbnRlckZ1bGxTY3Jl
ZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB2b2lkIFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVs
bFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9G
VUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VS
ZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2Ny
ZWVuKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICNlbmRpZgpAQCAtMTU2
LDcgKzE1NCw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlV2lsbEV4aXRGdWxsU2NyZWVuKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmKQogdm9pZCBXS0J1bmRsZVBhZ2VEaWRFeGl0RnVsbFNjcmVlbihXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQ
SSkgJiYgRU5BQkxFX0ZVTExTQ1JFRU5fQVBJCi0gICAgdG9JbXBsKHBhZ2VSZWYpLT5mdWxsU2Ny
ZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CiAjZW5kaWYKQEAgLTE2NCwyMyArMTYyLDIzIEBA
IHZvaWQgV0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYpCiAKIFdLQnVuZGxlUGFnZUdyb3VwUmVmIFdLQnVuZGxlUGFnZUdldFBhZ2VHcm91cChXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYp
LT5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYp
LT5wYWdlR3JvdXAoKSk7CiB9CiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0lt
cGwocGFnZVJlZiktPm1haW5XZWJGcmFtZSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0
b0ltcGwocGFnZVJlZiktPm1haW5XZWJGcmFtZSgpKTsKIH0KIAogV0tGcmFtZUhhbmRsZVJlZiBX
S0J1bmRsZUZyYW1lQ3JlYXRlRnJhbWVIYW5kbGUoV0tCdW5kbGVGcmFtZVJlZiBidW5kbGVGcmFt
ZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoJkFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh0b0lt
cGwoYnVuZGxlRnJhbWVSZWYpLT5mcmFtZUlEKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9BUEkoJkFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZShXZWJLaXQ6OnRvSW1wbChidW5k
bGVGcmFtZVJlZiktPmZyYW1lSUQoKSkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VDbGlja01lbnVJdGVtKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0NvbnRleHRNZW51SXRl
bVJlZiBpdGVtKQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIHRvSW1wbChwYWdl
UmVmKS0+Y29udGV4dE1lbnUoKS0+aXRlbVNlbGVjdGVkKHRvSW1wbChpdGVtKS0+ZGF0YSgpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29udGV4dE1lbnUoKS0+aXRlbVNlbGVjdGVk
KFdlYktpdDo6dG9JbXBsKGl0ZW0pLT5kYXRhKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cGFnZVJlZik7CiAgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwpAQCAtMTg4LDcgKzE4Niw3IEBAIHZv
aWQgV0tCdW5kbGVQYWdlQ2xpY2tNZW51SXRlbShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tD
b250ZXh0TWVudUl0ZW1SZWYgaXRlCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLXN0
YXRpYyBSZWY8QVBJOjpBcnJheT4gY29udGV4dE1lbnVJdGVtcyhjb25zdCBXZWJDb250ZXh0TWVu
dSYgY29udGV4dE1lbnUpCitzdGF0aWMgUmVmPEFQSTo6QXJyYXk+IGNvbnRleHRNZW51SXRlbXMo
Y29uc3QgV2ViS2l0OjpXZWJDb250ZXh0TWVudSYgY29udGV4dE1lbnUpCiB7CiAgICAgYXV0byBp
dGVtcyA9IGNvbnRleHRNZW51Lml0ZW1zKCk7CiAKQEAgLTE5Niw3ICsxOTQsNyBAQCBzdGF0aWMg
UmVmPEFQSTo6QXJyYXk+IGNvbnRleHRNZW51SXRlbXMoY29uc3QgV2ViQ29udGV4dE1lbnUmIGNv
bnRleHRNZW51KQogICAgIG1lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZW1zLnNp
emUoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBpdGVtcykKLSAgICAgICAgbWVu
dUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChXZWJDb250ZXh0TWVudUl0ZW06OmNyZWF0ZShpdGVtKSk7
CisgICAgICAgIG1lbnVJdGVtcy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0OjpXZWJDb250ZXh0TWVu
dUl0ZW06OmNyZWF0ZShpdGVtKSk7CiAKICAgICByZXR1cm4gQVBJOjpBcnJheTo6Y3JlYXRlKFdU
Rk1vdmUobWVudUl0ZW1zKSk7CiB9CkBAIC0yMDUsOSArMjAzLDkgQEAgc3RhdGljIFJlZjxBUEk6
OkFycmF5PiBjb250ZXh0TWVudUl0ZW1zKGNvbnN0IFdlYkNvbnRleHRNZW51JiBjb250ZXh0TWVu
dSkKIFdLQXJyYXlSZWYgV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51SXRlbXMoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2VSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgV2ViQ29u
dGV4dE1lbnUqIGNvbnRleHRNZW51ID0gdG9JbXBsKHBhZ2VSZWYpLT5jb250ZXh0TWVudSgpOwor
ICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnUqIGNvbnRleHRNZW51ID0gV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZiktPmNvbnRleHRNZW51KCk7CiAKLSAgICByZXR1cm4gdG9BUEkoJmNvbnRleHRNZW51
SXRlbXMoKmNvbnRleHRNZW51KS5sZWFrUmVmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJ
KCZjb250ZXh0TWVudUl0ZW1zKCpjb250ZXh0TWVudSkubGVha1JlZigpKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtMjE3LDExICsy
MTUsMTEgQEAgV0tBcnJheVJlZiBXS0J1bmRsZVBhZ2VDb3B5Q29udGV4dE1lbnVJdGVtcyhXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIFdLQXJyYXlSZWYgV0tCdW5kbGVQYWdlQ29weUNvbnRleHRN
ZW51QXRQb2ludEluV2luZG93KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1BvaW50IHBvaW50
KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAgIFdlYkNvbnRleHRNZW51KiBjb250
ZXh0TWVudSA9IHRvSW1wbChwYWdlUmVmKS0+Y29udGV4dE1lbnVBdFBvaW50SW5XaW5kb3codG9J
bnRQb2ludChwb2ludCkpOworICAgIFdlYktpdDo6V2ViQ29udGV4dE1lbnUqIGNvbnRleHRNZW51
ID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvbnRleHRNZW51QXRQb2ludEluV2luZG93KFdl
YktpdDo6dG9JbnRQb2ludChwb2ludCkpOwogICAgIGlmICghY29udGV4dE1lbnUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvQVBJKCZjb250ZXh0TWVudUl0ZW1zKCpj
b250ZXh0TWVudSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmY29udGV4
dE1lbnVJdGVtcygqY29udGV4dE1lbnUpLmxlYWtSZWYoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShwYWdlUmVmKTsKICAgICBVTlVTRURfUEFSQU0ocG9pbnQpOwpAQCAtMjMxLDcgKzIyOSw3
IEBAIFdLQXJyYXlSZWYgV0tCdW5kbGVQYWdlQ29weUNvbnRleHRNZW51QXRQb2ludEluV2luZG93
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXCiAKIHZvaWQgV0tCdW5kbGVQYWdlSW5zZXJ0TmV3
bGluZUluUXVvdGVkQ29udGVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0lt
cGwocGFnZVJlZiktPmluc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQoKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+aW5zZXJ0TmV3bGluZUluUXVvdGVkQ29udGVudCgpOwogfQogCiB2
b2lkKiBXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQpA
QCAtMjQwLDcgKzIzOCw3IEBAIHZvaWQqIFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QoV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYpCiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFn
ZSgpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
Y29yZVBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAt
MjY3LDcgKzI2NSw3IEBAIHZvaWQqIFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QoV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYpCiAgICAgaWYgKCFwYWdlUmVmKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFn
ZSgpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
Y29yZVBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zMDIs
NzcgKzMwMCw3NyBAQCBib29sIFdLQWNjZXNzaWJpbGl0eUVuaGFuY2VkQWNjZXNzaWJpbGl0eUVu
YWJsZWQoKQogCiB2b2lkIFdLQnVuZGxlUGFnZVN0b3BMb2FkaW5nKFdLQnVuZGxlUGFnZVJlZiBw
YWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c3RvcExvYWRpbmcoKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+c3RvcExvYWRpbmcoKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VTZXREZWZlcnNMb2FkaW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBib29sIGRlZmVyc0xv
YWRpbmcpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xv
YWRpbmcpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXREZWZlcnNMb2FkaW5nKGRl
ZmVyc0xvYWRpbmcpOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlUmVmKS0+cmVuZGVyVHJlZUV4dGVybmFsUmVw
cmVzZW50YXRpb24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0
b0ltcGwocGFnZVJlZiktPnJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkpOwogfQog
CiBXS1N0cmluZ1JlZiBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50
YXRpb25Gb3JQcmludGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4g
dG9Db3BpZWRBUEkodG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRh
dGlvbkZvclByaW50aW5nKCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbkZvclBy
aW50aW5nKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tTdHJpbmdSZWYgYXJn
dW1lbnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5leGVjdXRlRWRpdGluZ0NvbW1hbmQodG9X
VEZTdHJpbmcobmFtZSksIHRvV1RGU3RyaW5nKGFyZ3VtZW50KSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPmV4ZWN1dGVFZGl0aW5nQ29tbWFuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKG5h
bWUpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKGFyZ3VtZW50KSk7CiB9CiAKIGJvb2wgV0tCdW5kbGVQ
YWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3Ry
aW5nUmVmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+aXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQodG9XVEZTdHJpbmcobmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoV2ViS2l0Ojp0b1dURlN0cmluZyhu
YW1lKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ2xlYXJNYWluRnJhbWVOYW1lKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Y2xlYXJNYWluRnJhbWVO
YW1lKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNsZWFyTWFpbkZyYW1lTmFtZSgp
OwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUNsb3NlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQog
ewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2VuZENsb3NlKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZiktPnNlbmRDbG9zZSgpOwogfQogCiBkb3VibGUgV0tCdW5kbGVQYWdlR2V0VGV4dFpv
b21GYWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
YWdlUmVmKS0+dGV4dFpvb21GYWN0b3IoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPnRleHRab29tRmFjdG9yKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VGV4dFpv
b21GYWN0b3IoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIGRvdWJsZSB6b29tRmFjdG9yKQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VGV4dFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CisgICAg
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFRleHRab29tRmFjdG9yKHpvb21GYWN0b3IpOwog
fQogCiBkb3VibGUgV0tCdW5kbGVQYWdlR2V0UGFnZVpvb21GYWN0b3IoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+cGFnZVpvb21GYWN0b3Io
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnBhZ2Vab29tRmFjdG9yKCk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYsIGRvdWJsZSB6b29tRmFjdG9yKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0
UGFnZVpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PnNldFBhZ2Vab29tRmFjdG9yKHpvb21GYWN0b3IpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNl
dFNjYWxlQXRPcmlnaW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIGRvdWJsZSBzY2FsZSwgV0tQ
b2ludCBvcmlnaW4pCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zY2FsZVBhZ2Uoc2NhbGUsIHRv
SW50UG9pbnQob3JpZ2luKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNjYWxlUGFn
ZShzY2FsZSwgV2ViS2l0Ojp0b0ludFBvaW50KG9yaWdpbikpOwogfQogCiBXS1N0cmluZ1JlZiBX
S0J1bmRsZVBhZ2VEdW1wSGlzdG9yeUZvclRlc3RpbmcoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIGRpcmVjdG9yeSkKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKHBh
Z2UpLT5kdW1wSGlzdG9yeUZvclRlc3RpbmcodG9XVEZTdHJpbmcoZGlyZWN0b3J5KSkpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5kdW1wSGlz
dG9yeUZvclRlc3RpbmcoV2ViS2l0Ojp0b1dURlN0cmluZyhkaXJlY3RvcnkpKSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQog
ewotICAgIHRvSW1wbChwYWdlKS0+Y2xlYXJIaXN0b3J5KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPmNsZWFySGlzdG9yeSgpOwogfQogCiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBX
S0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCkBA
IC0zODIsMjggKzM4MCwyOCBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBXS0J1bmRsZVBh
Z2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZQogCiB2b2lkIFdLQnVu
ZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5k
bGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZikt
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgq
dG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKldl
YktpdDo6dG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVVu
aW5zdGFsbFBhZ2VPdmVybGF5KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VP
dmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKnRvSW1w
bChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKldlYktp
dDo6dG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3Rh
bGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYp
LT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXko
KnRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgqV2ViS2l0
Ojp0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBh
Z2VPdmVybGF5V2l0aEFuaW1hdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQ
YWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNv
cmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCp0
b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkZhZGUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFn
ZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqV2ViS2l0
Ojp0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJo
YW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VSZWYpCiB7
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VG9wT3ZlcmhhbmdJ
bWFnZSh0b0ltcGwoaW1hZ2VSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0
VG9wT3ZlcmhhbmdJbWFnZShXZWJLaXQ6OnRvSW1wbChpbWFnZVJlZikpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocGFnZVJlZik7CiAgICAgVU5VU0VEX1BBUkFNKGltYWdlUmVmKTsKQEAgLTQx
Myw3ICs0MTEsNyBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VSZQogdm9pZCBXS0J1bmRsZVBhZ2VT
ZXRCb3R0b21PdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVm
IGltYWdlUmVmKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB0b0ltcGwocGFnZVJlZiktPnNl
dEJvdHRvbU92ZXJoYW5nSW1hZ2UodG9JbXBsKGltYWdlUmVmKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPnNldEJvdHRvbU92ZXJoYW5nSW1hZ2UoV2ViS2l0Ojp0b0ltcGwoaW1hZ2VS
ZWYpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogICAgIFVOVVNFRF9QQVJB
TShpbWFnZVJlZik7CkBAIC00MjMsNDAgKzQyMSw0MCBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldEJv
dHRvbU92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1h
ZwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBXS0J1bmRsZVBhZ2VTZXRIZWFkZXJC
YW5uZXIoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUJhbm5lclJlZiBiYW5u
ZXJSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRIZWFkZXJQYWdlQmFubmVyKHRvSW1w
bChiYW5uZXJSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0SGVhZGVyUGFn
ZUJhbm5lcihXZWJLaXQ6OnRvSW1wbChiYW5uZXJSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VTZXRGb290ZXJCYW5uZXIoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZUJh
bm5lclJlZiBiYW5uZXJSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRGb290ZXJQYWdl
QmFubmVyKHRvSW1wbChiYW5uZXJSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
c2V0Rm9vdGVyUGFnZUJhbm5lcihXZWJLaXQ6OnRvSW1wbChiYW5uZXJSZWYpKTsKIH0KICNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogYm9vbCBXS0J1bmRsZVBhZ2VIYXNMb2NhbERh
dGFGb3JVUkwoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5oYXNMb2NhbERhdGFGb3JVUkwoVVJMKFVSTCgpLCB0
b1dURlN0cmluZyh1cmxSZWYpKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYp
LT5oYXNMb2NhbERhdGFGb3JVUkwoVVJMKFVSTCgpLCBXZWJLaXQ6OnRvV1RGU3RyaW5nKHVybFJl
ZikpKTsKIH0KIAogYm9vbCBXS0J1bmRsZVBhZ2VDYW5IYW5kbGVSZXF1ZXN0KFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0UmVmKQogewogICAgIGlmICghcmVxdWVzdFJlZikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBXZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0KHRvSW1wbChyZXF1
ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OldlYlBhZ2U6
OmNhbkhhbmRsZVJlcXVlc3QoV2ViS2l0Ojp0b0ltcGwocmVxdWVzdFJlZiktPnJlc291cmNlUmVx
dWVzdCgpKTsKIH0KIAogYm9vbCBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiB0YXJnZXQsIFdLRmluZE9wdGlvbnMgZmluZE9wdGlvbnMp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ0Zyb21JbmplY3RlZEJ1
bmRsZSh0b1dURlN0cmluZyh0YXJnZXQpLCB0b0ZpbmRPcHRpb25zKGZpbmRPcHRpb25zKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5maW5kU3RyaW5nRnJvbUluamVjdGVk
QnVuZGxlKFdlYktpdDo6dG9XVEZTdHJpbmcodGFyZ2V0KSwgV2ViS2l0Ojp0b0ZpbmRPcHRpb25z
KGZpbmRPcHRpb25zKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlRmluZFN0cmluZ01hdGNoZXMo
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRhcmdldCwgV0tGaW5kT3B0aW9u
cyBmaW5kT3B0aW9ucykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmdNYXRjaGVz
RnJvbUluamVjdGVkQnVuZGxlKHRvV1RGU3RyaW5nKHRhcmdldCksIHRvRmluZE9wdGlvbnMoZmlu
ZE9wdGlvbnMpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ01hdGNo
ZXNGcm9tSW5qZWN0ZWRCdW5kbGUoV2ViS2l0Ojp0b1dURlN0cmluZyh0YXJnZXQpLCBXZWJLaXQ6
OnRvRmluZE9wdGlvbnMoZmluZE9wdGlvbnMpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VSZXBs
YWNlU3RyaW5nTWF0Y2hlcyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBtYXRj
aEluZGljZXNSZWYsIFdLU3RyaW5nUmVmIHJlcGxhY2VtZW50VGV4dCwgYm9vbCBzZWxlY3Rpb25P
bmx5KQogewotICAgIGF1dG8qIG1hdGNoSW5kaWNlcyA9IHRvSW1wbChtYXRjaEluZGljZXNSZWYp
OworICAgIGF1dG8qIG1hdGNoSW5kaWNlcyA9IFdlYktpdDo6dG9JbXBsKG1hdGNoSW5kaWNlc1Jl
Zik7CiAKICAgICBWZWN0b3I8dWludDMyX3Q+IGluZGljZXM7CiAgICAgaW5kaWNlcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1hdGNoSW5kaWNlcy0+c2l6ZSgpKTsKQEAgLTQ2Niw4MyArNDY0LDgz
IEBAIHZvaWQgV0tCdW5kbGVQYWdlUmVwbGFjZVN0cmluZ01hdGNoZXMoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYsIFdLQXJyYXlSZWYgbWF0Y2hJCiAgICAgICAgIGlmIChhdXRvKiBpbmRleEFzT2Jq
ZWN0ID0gbWF0Y2hJbmRpY2VzLT5hdDxBUEk6OlVJbnQ2ND4oaSkpCiAgICAgICAgICAgICBpbmRp
Y2VzLnVuY2hlY2tlZEFwcGVuZChpbmRleEFzT2JqZWN0LT52YWx1ZSgpKTsKICAgICB9Ci0gICAg
dG9JbXBsKHBhZ2VSZWYpLT5yZXBsYWNlU3RyaW5nTWF0Y2hlc0Zyb21JbmplY3RlZEJ1bmRsZShp
bmRpY2VzLCB0b1dURlN0cmluZyhyZXBsYWNlbWVudFRleHQpLCBzZWxlY3Rpb25Pbmx5KTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cmVwbGFjZVN0cmluZ01hdGNoZXNGcm9tSW5qZWN0
ZWRCdW5kbGUoaW5kaWNlcywgV2ViS2l0Ojp0b1dURlN0cmluZyhyZXBsYWNlbWVudFRleHQpLCBz
ZWxlY3Rpb25Pbmx5KTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hv
dFdpdGhPcHRpb25zKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwgV0tTbmFw
c2hvdE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0g
dG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKHRvSW50UmVjdChyZWN0
KSwgMSwgdG9TbmFwc2hvdE9wdGlvbnMob3B0aW9ucykpOworICAgIFJlZlB0cjxXZWJLaXQ6Oldl
YkltYWdlPiB3ZWJJbWFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hv
dFdpdGhPcHRpb25zKFdlYktpdDo6dG9JbnRSZWN0KHJlY3QpLCAxLCBXZWJLaXQ6OnRvU25hcHNo
b3RPcHRpb25zKG9wdGlvbnMpKTsKICAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigp
KTsKIH0KIAogV0tJbWFnZVJlZiBXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdEluVmlld0Nvb3Jk
aW5hdGVzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1JlY3QgcmVjdCwgV0tJbWFnZU9wdGlv
bnMgb3B0aW9ucykKIHsKLSAgICBTbmFwc2hvdE9wdGlvbnMgc25hcHNob3RPcHRpb25zID0gc25h
cHNob3RPcHRpb25zRnJvbUltYWdlT3B0aW9ucyhvcHRpb25zKTsKLSAgICBzbmFwc2hvdE9wdGlv
bnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgUmVmUHRyPFdlYklt
YWdlPiB3ZWJJbWFnZSA9IHRvSW1wbChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9u
cyh0b0ludFJlY3QocmVjdCksIDEsIHNuYXBzaG90T3B0aW9ucyk7CisgICAgYXV0byBzbmFwc2hv
dE9wdGlvbnMgPSBXZWJLaXQ6OnNuYXBzaG90T3B0aW9uc0Zyb21JbWFnZU9wdGlvbnMob3B0aW9u
cyk7CisgICAgc25hcHNob3RPcHRpb25zIHw9IFdlYktpdDo6U25hcHNob3RPcHRpb25zSW5WaWV3
Q29vcmRpbmF0ZXM7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViSW1hZ2U+IHdlYkltYWdlID0gV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMoV2ViS2l0Ojp0
b0ludFJlY3QocmVjdCksIDEsIHNuYXBzaG90T3B0aW9ucyk7CiAgICAgcmV0dXJuIHRvQVBJKHdl
YkltYWdlLmxlYWtSZWYoKSk7CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVQYWdlQ3JlYXRlU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLUmVj
dCByZWN0LCBXS0ltYWdlT3B0aW9ucyBvcHRpb25zKQogewotICAgIFJlZlB0cjxXZWJJbWFnZT4g
d2ViSW1hZ2UgPSB0b0ltcGwocGFnZVJlZiktPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnModG9J
bnRSZWN0KHJlY3QpLCAxLCBzbmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMp
KTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJJbWFnZT4gd2ViSW1hZ2UgPSBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+c2NhbGVkU25hcHNob3RXaXRoT3B0aW9ucyhXZWJLaXQ6OnRvSW50UmVjdChy
ZWN0KSwgMSwgV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRpb25zKG9wdGlvbnMp
KTsKICAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKIH0KIAogV0tJbWFnZVJl
ZiBXS0J1bmRsZVBhZ2VDcmVhdGVTY2FsZWRTbmFwc2hvdEluRG9jdW1lbnRDb29yZGluYXRlcyhX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tSZWN0IHJlY3QsIGRvdWJsZSBzY2FsZUZhY3Rvciwg
V0tJbWFnZU9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdl
ID0gdG9JbXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKHRvSW50UmVjdChy
ZWN0KSwgc2NhbGVGYWN0b3IsIHNuYXBzaG90T3B0aW9uc0Zyb21JbWFnZU9wdGlvbnMob3B0aW9u
cykpOworICAgIFJlZlB0cjxXZWJLaXQ6OldlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYktpdDo6dG9J
bXBsKHBhZ2VSZWYpLT5zY2FsZWRTbmFwc2hvdFdpdGhPcHRpb25zKFdlYktpdDo6dG9JbnRSZWN0
KHJlY3QpLCBzY2FsZUZhY3RvciwgV2ViS2l0OjpzbmFwc2hvdE9wdGlvbnNGcm9tSW1hZ2VPcHRp
b25zKG9wdGlvbnMpKTsKICAgICByZXR1cm4gdG9BUEkod2ViSW1hZ2UubGVha1JlZigpKTsKIH0K
IAogZG91YmxlIFdLQnVuZGxlUGFnZUdldEJhY2tpbmdTY2FsZUZhY3RvcihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVz
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0xheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXModG9MYXlv
dXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhXZWJLaXQ6OnRvTGF5b3V0TWlsZXN0b25lcyhtaWxl
c3RvbmVzKSk7CiB9CiAKIFdLQnVuZGxlSW5zcGVjdG9yUmVmIFdLQnVuZGxlUGFnZUdldEluc3Bl
Y3RvcihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBs
KHBhZ2VSZWYpLT5pbnNwZWN0b3IoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0
Ojp0b0ltcGwocGFnZVJlZiktPmluc3BlY3RvcigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VG
b3JjZVJlcGFpbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5m
b3JjZVJlcGFpbnRXaXRob3V0Q2FsbGJhY2soKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+
Zm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2lt
dWxhdGVNb3VzZURvd24oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGludCBidXR0b24sIFdLUG9pbnQg
cG9zaXRpb24sIGludCBjbGlja0NvdW50LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgZG91
YmxlIHRpbWUpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5zaW11bGF0ZU1vdXNlRG93bihidXR0b24s
IHRvSW50UG9pbnQocG9zaXRpb24pLCBjbGlja0NvdW50LCBtb2RpZmllcnMsIFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyh0aW1lKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPnNpbXVsYXRl
TW91c2VEb3duKGJ1dHRvbiwgV2ViS2l0Ojp0b0ludFBvaW50KHBvc2l0aW9uKSwgY2xpY2tDb3Vu
dCwgbW9kaWZpZXJzLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZSkpOwogfQogCiB2b2lk
IFdLQnVuZGxlUGFnZVNpbXVsYXRlTW91c2VVcChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgaW50IGJ1
dHRvbiwgV0tQb2ludCBwb3NpdGlvbiwgaW50IGNsaWNrQ291bnQsIFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXJzLCBkb3VibGUgdGltZSkKIHsKLSAgICB0b0ltcGwocGFnZSktPnNpbXVsYXRlTW91
c2VVcChidXR0b24sIHRvSW50UG9pbnQocG9zaXRpb24pLCBjbGlja0NvdW50LCBtb2RpZmllcnMs
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyh0aW1lKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFn
ZSktPnNpbXVsYXRlTW91c2VVcChidXR0b24sIFdlYktpdDo6dG9JbnRQb2ludChwb3NpdGlvbiks
IGNsaWNrQ291bnQsIG1vZGlmaWVycywgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWUpKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTaW11bGF0ZU1vdXNlTW90aW9uKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS1BvaW50IHBvc2l0aW9uLCBkb3VibGUgdGltZSkKIHsKLSAgICB0b0ltcGwocGFn
ZSktPnNpbXVsYXRlTW91c2VNb3Rpb24odG9JbnRQb2ludChwb3NpdGlvbiksIFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyh0aW1lKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPnNpbXVsYXRl
TW91c2VNb3Rpb24oV2ViS2l0Ojp0b0ludFBvaW50KHBvc2l0aW9uKSwgV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKHRpbWUpKTsKIH0KIAogdWludDY0X3QgV0tCdW5kbGVQYWdlR2V0UmVuZGVyVHJl
ZVNpemUoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdl
UmVmKS0+cmVuZGVyVHJlZVNpemUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnJlbmRlclRyZWVTaXplKCk7CiB9CiAKIFdLUmVuZGVyT2JqZWN0UmVmIFdLQnVuZGxlUGFn
ZUNvcHlSZW5kZXJUcmVlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0
b0FQSShXZWJSZW5kZXJPYmplY3Q6OmNyZWF0ZSh0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpXZWJSZW5kZXJPYmplY3Q6OmNyZWF0
ZShXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKSkubGVha1JlZigpKTsKIH0KIAogV0tSZW5kZXJMYXll
clJlZiBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyTGF5ZXJUcmVlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmKQogewotICAgIHJldHVybiB0b0FQSShXZWJSZW5kZXJMYXllcjo6Y3JlYXRlKHRvSW1wbChw
YWdlUmVmKSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6Oldl
YlJlbmRlckxheWVyOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikpLmxlYWtSZWYoKSk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU2V0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xk
KFdLQnVuZGxlUGFnZVJlZiwgdWludDY0X3QpCkBAIC01NTMsNzkgKzU1MSw3OSBAQCB2b2lkIFdL
QnVuZGxlUGFnZVNldFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZChXS0J1bmRsZVBhZ2VS
ZWYsIHVpbnQ2NF90KQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRzKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlUmVmLCBib29sIHRyYWNrUmVwYWludHMpCiB7Ci0gICAgdG9JbXBsKHBh
Z2VSZWYpLT5zZXRUcmFja3NSZXBhaW50cyh0cmFja1JlcGFpbnRzKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwYWdlUmVmKS0+c2V0VHJhY2tzUmVwYWludHModHJhY2tSZXBhaW50cyk7CiB9CiAKIGJv
b2wgV0tCdW5kbGVQYWdlSXNUcmFja2luZ1JlcGFpbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmlzVHJhY2tpbmdSZXBhaW50cygpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aXNUcmFja2luZ1JlcGFpbnRzKCk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlUmVzZXRUcmFja2VkUmVwYWludHMoV0tCdW5kbGVQYWdl
UmVmIHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5yZXNldFRyYWNrZWRSZXBhaW50
cygpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5yZXNldFRyYWNrZWRSZXBhaW50cygp
OwogfQogCiBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlUcmFja2VkUmVwYWludFJlY3RzKFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBhZ2VS
ZWYpLT50cmFja2VkUmVwYWludFJlY3RzKCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSSgmV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnRyYWNrZWRSZXBhaW50UmVjdHMoKS5s
ZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldENvbXBvc2l0aW9uKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwgaW50IGxlbmd0aCwg
Ym9vbCBzdXBwcmVzc1VuZGVybGluZSkKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldENvbXBv
c2l0aW9uRm9yVGVzdGluZyh0b1dURlN0cmluZyh0ZXh0KSwgZnJvbSwgbGVuZ3RoLCBzdXBwcmVz
c1VuZGVybGluZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldENvbXBvc2l0aW9u
Rm9yVGVzdGluZyhXZWJLaXQ6OnRvV1RGU3RyaW5nKHRleHQpLCBmcm9tLCBsZW5ndGgsIHN1cHBy
ZXNzVW5kZXJsaW5lKTsKIH0KIAogYm9vbCBXS0J1bmRsZVBhZ2VIYXNDb21wb3NpdGlvbihXS0J1
bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5oYXND
b21wb3NpdGlvbkZvclRlc3RpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPmhhc0NvbXBvc2l0aW9uRm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUNv
bmZpcm1Db21wb3NpdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPmNvbmZpcm1Db21wb3NpdGlvbkZvclRlc3RpbmcoU3RyaW5nKCkpOworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0aW5nKFN0cmlu
ZygpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VDb25maXJtQ29tcG9zaXRpb25XaXRoVGV4dChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgdGV4dCkKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPmNvbmZpcm1Db21wb3NpdGlvbkZvclRlc3RpbmcodG9XVEZTdHJpbmcodGV4dCkp
OworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jb25maXJtQ29tcG9zaXRpb25Gb3JUZXN0
aW5nKFdlYktpdDo6dG9XVEZTdHJpbmcodGV4dCkpOwogfQogCiBib29sIFdLQnVuZGxlUGFnZUNh
blNob3dNSU1FVHlwZShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgbWltZVR5
cGVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+Y2FuU2hvd01JTUVUeXBlKHRv
V1RGU3RyaW5nKG1pbWVUeXBlUmVmKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLT5jYW5TaG93TUlNRVR5cGUoV2ViS2l0Ojp0b1dURlN0cmluZyhtaW1lVHlwZVJlZikpOwog
fQogCiBXS1JlbmRlcmluZ1N1cHByZXNzaW9uVG9rZW4gV0tCdW5kbGVQYWdlRXh0ZW5kSW5jcmVt
ZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5leHRlbmRJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHBy
ZXNzaW9uKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5leHRlbmRJbmNy
ZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9uKCk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlU3Rv
cEV4dGVuZGluZ0luY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb24oV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYsIFdLUmVuZGVyaW5nU3VwcHJlc3Npb25Ub2tlbiB0b2tlbikKIHsKLSAgICB0b0lt
cGwocGFnZVJlZiktPnN0b3BFeHRlbmRpbmdJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9u
KHRva2VuKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c3RvcEV4dGVuZGluZ0luY3Jl
bWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb24odG9rZW4pOwogfQogCiBib29sIFdLQnVuZGxlUGFn
ZUlzVXNpbmdFcGhlbWVyYWxTZXNzaW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocGFnZVJlZiktPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwogfQog
CiBib29sIFdLQnVuZGxlUGFnZUlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5pc0NvbnRyb2xsZWRC
eUF1dG9tYXRpb24oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlzQ29u
dHJvbGxlZEJ5QXV0b21hdGlvbigpOwogfQogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogdm9pZCBX
S0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlUmVmLCBib29sIHVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24pCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHVz
ZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24pOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLT5zZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHVzZVRlc3RpbmdWaWV3cG9y
dENvbmZpZ3VyYXRpb24pOwogfQogI2VuZGlmCiAKIHZvaWQgV0tCdW5kbGVQYWdlU3RhcnRNb25p
dG9yaW5nU2Nyb2xsT3BlcmF0aW9ucyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICBX
ZWJLaXQ6OldlYlBhZ2UqIHdlYlBhZ2UgPSB0b0ltcGwocGFnZVJlZik7CisgICAgV2ViS2l0OjpX
ZWJQYWdlKiB3ZWJQYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CiAgICAgV2ViQ29yZTo6
UGFnZSogcGFnZSA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5jb3JlUGFnZSgpIDogbnVsbHB0cjsKICAg
ICAKICAgICBpZiAoIXBhZ2UpCkBAIC02MzksNyArNjM3LDcgQEAgdm9pZCBXS0J1bmRsZVBhZ2VS
ZWdpc3RlclNjcm9sbE9wZXJhdGlvbkNvbXBsZXRpb25DYWxsYmFjayhXS0J1bmRsZVBhZ2VSZWYg
cGFnZVIKICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgV2Vi
S2l0OjpXZWJQYWdlKiB3ZWJQYWdlID0gdG9JbXBsKHBhZ2VSZWYpOworICAgIFdlYktpdDo6V2Vi
UGFnZSogd2ViUGFnZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOwogICAgIFdlYkNvcmU6OlBh
Z2UqIHBhZ2UgPSB3ZWJQYWdlID8gd2ViUGFnZS0+Y29yZVBhZ2UoKSA6IG51bGxwdHI7CiAgICAg
aWYgKCFwYWdlIHx8ICFwYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTY1NCw3ICs2NTIsNyBAQCB2b2lkIFdLQnVuZGxlUGFnZUNhbGxBZnRlclRh
c2tzQW5kVGltZXJzKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VUZQogICAg
IGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBXZWJLaXQ6OldlYlBh
Z2UqIHdlYlBhZ2UgPSB0b0ltcGwocGFnZVJlZik7CisgICAgV2ViS2l0OjpXZWJQYWdlKiB3ZWJQ
YWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9
IHdlYlBhZ2UgPyB3ZWJQYWdlLT5jb3JlUGFnZSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKQEAgLTY5MSw3OCArNjg5LDc4IEBAIHZvaWQgV0tCdW5kbGVQYWdl
Q2FsbEFmdGVyVGFza3NBbmRUaW1lcnMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZVRlCiAKIHZvaWQgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHlS
ZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5wb3N0TWVzc2FnZSh0b1dURlN0cmluZyhtZXNz
YWdlTmFtZVJlZiksIHRvSW1wbChtZXNzYWdlQm9keVJlZikpOworICAgIFdlYktpdDo6dG9JbXBs
KHBhZ2VSZWYpLT5wb3N0TWVzc2FnZShXZWJLaXQ6OnRvV1RGU3RyaW5nKG1lc3NhZ2VOYW1lUmVm
KSwgV2ViS2l0Ojp0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VQb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlTeW5jaHJvbm91c01vZGUoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lUmVmLCBXS1R5cGVSZWYgbWVzc2FnZUJv
ZHlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5wb3N0TWVzc2FnZUlnbm9yaW5nRnVsbHlT
eW5jaHJvbm91c01vZGUodG9XVEZTdHJpbmcobWVzc2FnZU5hbWVSZWYpLCB0b0ltcGwobWVzc2Fn
ZUJvZHlSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3NhZ2VJZ25v
cmluZ0Z1bGx5U3luY2hyb25vdXNNb2RlKFdlYktpdDo6dG9XVEZTdHJpbmcobWVzc2FnZU5hbWVS
ZWYpLCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZikpOwogfQogCiB2b2lkIFdLQnVuZGxl
UGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdl
UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVm
LCBXS1R5cGVSZWYqIHJldHVybkRhdGFSZWYpCiB7Ci0gICAgV2ViUGFnZSogcGFnZSA9IHRvSW1w
bChwYWdlUmVmKTsKKyAgICBXZWJLaXQ6OldlYlBhZ2UqIHBhZ2UgPSBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKTsKICAgICBwYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgUmVmUHRyPEFQSTo6
T2JqZWN0PiByZXR1cm5EYXRhOwotICAgIHBhZ2UtPnBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JU
ZXN0aW5nKHRvV1RGU3RyaW5nKG1lc3NhZ2VOYW1lUmVmKSwgdG9JbXBsKG1lc3NhZ2VCb2R5UmVm
KSwgcmV0dXJuRGF0YSk7CisgICAgcGFnZS0+cG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3Rp
bmcoV2ViS2l0Ojp0b1dURlN0cmluZyhtZXNzYWdlTmFtZVJlZiksIFdlYktpdDo6dG9JbXBsKG1l
c3NhZ2VCb2R5UmVmKSwgcmV0dXJuRGF0YSk7CiAgICAgaWYgKHJldHVybkRhdGFSZWYpCi0gICAg
ICAgICpyZXR1cm5EYXRhUmVmID0gdG9BUEkocmV0dXJuRGF0YS5sZWFrUmVmKCkpOworICAgICAg
ICAqcmV0dXJuRGF0YVJlZiA9IFdlYktpdDo6dG9BUEkocmV0dXJuRGF0YS5sZWFrUmVmKCkpOwog
fQogCiB2b2lkIFdLQnVuZGxlUGFnZUFkZFVzZXJTY3JpcHQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLU3RyaW5nUmVmIHNvdXJjZSwgX1dLVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0
aW9uVGltZSwgV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+YWRkVXNlclNjcmlwdCh0b1dURlN0cmluZyhzb3VyY2UpLCB0
b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXMpLCB0b1VzZXJTY3JpcHRJ
bmplY3Rpb25UaW1lKGluamVjdGlvblRpbWUpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+YWRkVXNlclNjcmlwdChXZWJLaXQ6OnRvV1RGU3RyaW5nKHNvdXJjZSksIFdlYktpdDo6dG9V
c2VyQ29udGVudEluamVjdGVkRnJhbWVzKGluamVjdGVkRnJhbWVzKSwgV2ViS2l0Ojp0b1VzZXJT
Y3JpcHRJbmplY3Rpb25UaW1lKGluamVjdGlvblRpbWUpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VBZGRVc2VyU3R5bGVTaGVldChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYg
c291cmNlLCBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5hZGRVc2VyU3R5bGVTaGVldCh0b1dURlN0cmluZyhzb3VyY2Up
LCB0b1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXMpKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+YWRkVXNlclN0eWxlU2hlZXQoV2ViS2l0Ojp0b1dURlN0cmlu
Zyhzb3VyY2UpLCBXZWJLaXQ6OnRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZy
YW1lcykpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVJlbW92ZUFsbFVzZXJDb250ZW50KFdLQnVu
ZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVtb3ZlQWxsVXNl
ckNvbnRlbnQoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cmVtb3ZlQWxsVXNlckNv
bnRlbnQoKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tCdW5kbGVQYWdlQ29weUdyb3VwSWRlbnRpZmll
cihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9J
bXBsKHBhZ2VSZWYpLT5wYWdlR3JvdXAoKS0+aWRlbnRpZmllcigpKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cGFnZUdyb3VwKCktPmlk
ZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlQ2xlYXJBcHBsaWNhdGlvbkNhY2hl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+
YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kZWxldGVBbGxFbnRyaWVzKCk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuZGVs
ZXRlQWxsRW50cmllcygpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUNsZWFyQXBwbGljYXRpb25D
YWNoZUZvck9yaWdpbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luKQog
ewotICAgIHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uo
KS5kZWxldGVDYWNoZUZvck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bVN0cmluZyh0b0ltcGwob3JpZ2luKS0+c3RyaW5nKCkpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChw
YWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kZWxldGVDYWNoZUZv
ck9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhXZWJLaXQ6
OnRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEFw
cENhY2hlTWF4aW11bVNpemUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIHVpbnQ2NF90IHNpemUpCiB7
Ci0gICAgdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgp
LnNldE1heGltdW1TaXplKHNpemUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFn
ZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLnNldE1heGltdW1TaXplKHNpemUpOwogfQog
CiB1aW50NjRfdCBXS0J1bmRsZVBhZ2VHZXRBcHBDYWNoZVVzYWdlRm9yT3JpZ2luKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
YWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kaXNrVXNhZ2VGb3JP
cmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodG9JbXBsKG9y
aWdpbiktPnN0cmluZygpKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3Jl
UGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLmRpc2tVc2FnZUZvck9yaWdpbihXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhXZWJLaXQ6OnRvSW1wbChvcmln
aW4pLT5zdHJpbmcoKSkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgb3JpZ2luLCB1
aW50NjRfdCBieXRlcykKIHsKLSAgICB0b0ltcGwocGFnZSktPmNvcmVQYWdlKCktPmFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlKCkuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodG9JbXBsKG9yaWdpbiktPnN0cmluZygpKS5w
dHIoKSwgYnl0ZXMpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKFdlYktpdDo6dG9JbXBsKG9yaWdpbikt
PnN0cmluZygpKS5wdHIoKSwgYnl0ZXMpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1Jl
ZiBvcmlnaW4pCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZSgpLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHRvSW1wbChvcmlnaW4pLT5zdHJpbmcoKSkucHRyKCks
IHRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kZWZh
dWx0T3JpZ2luUXVvdGEoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmNvcmVQYWdlKCkt
PmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkuc3RvcmVVcGRhdGVkUXVvdGFGb3JPcmlnaW4oV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoV2ViS2l0Ojp0b0ltcGwob3Jp
Z2luKS0+c3RyaW5nKCkpLnB0cigpLCBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+
YXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5kZWZhdWx0T3JpZ2luUXVvdGEoKSk7CiB9CiAKIFdL
QXJyYXlSZWYgV0tCdW5kbGVQYWdlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSkKIHsKLSAgICBhdXRvIG9yaWdpbnMgPSB0b0ltcGwocGFnZSktPmNv
cmVQYWdlKCktPmFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2luc1dpdGhDYWNoZSgpOwor
ICAgIGF1dG8gb3JpZ2lucyA9IFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5hcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9yaWdpbnNXaXRoQ2FjaGUoKTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8QVBJOjpPYmplY3Q+PiBvcmlnaW5JZGVudGlmaWVyczsKICAgICBvcmlnaW5JZGVudGlm
aWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9yaWdpbnMuc2l6ZSgpKTsKQEAgLTc3MCw3ICs3
NjgsNyBAQCBXS0FycmF5UmVmIFdLQnVuZGxlUGFnZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0aW9u
Q2FjaGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4g
OiBvcmlnaW5zKQogICAgICAgICBvcmlnaW5JZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoQVBJ
OjpTdHJpbmc6OmNyZWF0ZShvcmlnaW4tPmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkpOwog
Ci0gICAgcmV0dXJuIHRvQVBJKCZBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShvcmlnaW5JZGVu
dGlmaWVycykpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJkFQSTo6QXJy
YXk6OmNyZWF0ZShXVEZNb3ZlKG9yaWdpbklkZW50aWZpZXJzKSkubGVha1JlZigpKTsKIH0KIAog
dm9pZCBXS0J1bmRsZVBhZ2VTZXRFdmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0V2ZW50VGhyb3R0bGluZ0JlaGF2aW9yKiBiZWhhdmlvcikKQEAg
LTc4Nyw3ICs3ODUsNyBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldEV2ZW50VGhyb3R0bGluZ0JlaGF2
aW9yT3ZlcnJpZGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLRXZlbgogICAgICAgICB9CiAgICAg
fQogCi0gICAgdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5zZXRFdmVudFRocm90dGxpbmdCZWhh
dmlvck92ZXJyaWRlKGJlaGF2aW9yVmFsdWUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5j
b3JlUGFnZSgpLT5zZXRFdmVudFRocm90dGxpbmdCZWhhdmlvck92ZXJyaWRlKGJlaGF2aW9yVmFs
dWUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldENvbXBvc2l0aW5nUG9saWN5T3ZlcnJpZGUo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQ29tcG9zaXRpbmdQb2xpY3kqIHBvbGljeSkKQEAgLTgw
NCw2ICs4MDIsNiBAQCB2b2lkIFdLQnVuZGxlUGFnZVNldENvbXBvc2l0aW5nUG9saWN5T3ZlcnJp
ZGUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQ29tcG9zaXRpbgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdG9JbXBsKHBhZ2UpLT5jb3JlUGFnZSgpLT5zZXRDb21wb3NpdGluZ1BvbGljeU92ZXJy
aWRlKHBvbGljeVZhbHVlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+Y29yZVBhZ2UoKS0+
c2V0Q29tcG9zaXRpbmdQb2xpY3lPdmVycmlkZShwb2xpY3lWYWx1ZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2VCYW5uZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5lci5jcHAKaW5kZXggYmUwOTU1ZTFjNTlkMDQ4NTMyMDBj
YmEwNDQ0MWI1OTZjYzg2NjU4Ni4uZTRjZTRlNWRkOTNiZjg0YzEyYzRjNjRmMTUzYmU4MWU2YWFi
ZjkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5lci5jcHAKQEAgLTMwLDkg
KzMwLDcgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNh
c3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVQYWdl
QmFubmVyR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZUJhbm5lcjo6QVBJVHlw
ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpQYWdlQmFubmVyOjpBUElUeXBl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlR3JvdXAuY3BwCmluZGV4IGUwNzZjYjk3
ZmIxMzFmNTdhYmNkMWE0YTY3N2Q0NWUzYTUzYThkNGYuLjRmNTZkZGIyYzEzMTY4OTAzMDFmMzY3
N2U1OWM0NTY1NDUyZTFhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VHcm91cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUdyb3VwLmNw
cApAQCAtMzAsMTQgKzMwLDEyIEBACiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5j
bHVkZSAiV2ViUGFnZUdyb3VwUHJveHkuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQog
V0tUeXBlSUQgV0tCdW5kbGVQYWdlR3JvdXBHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQ
SShXZWJQYWdlR3JvdXBQcm94eTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEko
V2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6QVBJVHlwZSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdL
QnVuZGxlUGFnZUdyb3VwQ29weUlkZW50aWZpZXIoV0tCdW5kbGVQYWdlR3JvdXBSZWYgYnVuZGxl
UGFnZUdyb3VwKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoYnVuZGxlUGFnZUdy
b3VwKS0+aWRlbnRpZmllcigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0NvcGllZEFQSShXZWJL
aXQ6OnRvSW1wbChidW5kbGVQYWdlR3JvdXApLT5pZGVudGlmaWVyKCkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IGI3MDgxZDQyNDRiODdkODdmNzg4
NTVmZGFiNDY5YmQzNjI5ZDAyMDIuLmViZDNlZjVmMjkzMDhjMTQxOTNhMTgxYjdlMWU0YTQyNWZk
MjFkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTUz
LDkgKzUzLDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLQnVuZGxlUGFnZU92
ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZT4gewogCiB9CiAKLXVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Ci0KLWNsYXNzIFBhZ2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVu
ZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVibGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQg
eworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJbXBsIDogQVBJOjpDbGllbnQ8V0tCdW5kbGVQYWdl
T3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMgV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6Q2xpZW50
IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBQYWdlT3ZlcmxheUNsaWVudEltcGwoV0tCdW5kbGVQ
YWdlT3ZlcmxheUNsaWVudEJhc2UqIGNsaWVudCkKICAgICB7CkBAIC02OCw4ICs2Niw4IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8gV2ViUGFnZU92ZXJsYXk6OkNsaWVudC4K
LSAgICB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2Vi
UGFnZSogcGFnZSkgb3ZlcnJpZGUKKyAgICAvLyBXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpDbGll
bnQuCisgICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdl
T3ZlcmxheSwgV2ViS2l0OjpXZWJQYWdlKiBwYWdlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKCFtX2NsaWVudC53aWxsTW92ZVRvUGFnZSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc3
LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9B
UEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFn
ZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCisgICAgdm9pZCBkaWRNb3ZlVG9QYWdl
KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJLaXQ6OldlYlBhZ2UqIHBh
Z2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2Up
CiAgICAgICAgICAgICByZXR1cm47CkBAIC04NSw0MiArODMsNDIgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShwYWdl
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAKLSAgICB2b2lkIGRyYXdSZWN0
KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJp
ZGUKKyAgICB2b2lkIGRyYXdSZWN0KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2Ns
aWVudC5kcmF3UmVjdCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2NsaWVudC5k
cmF3UmVjdCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAg
ICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSksIGdyYXBoaWNzQ29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSwgV2ViS2l0Ojp0b0FQSShkaXJ0eVJlY3QpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICAKLSAgICBib29sIG1vdXNlRXZlbnQoV2ViUGFn
ZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KSBvdmVycmlkZQorICAgIGJvb2wgbW91c2VFdmVudChXZWJLaXQ6OldlYlBhZ2VPdmVy
bGF5JiBwYWdlT3ZlcmxheSwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVByZXNzZWQ6
IHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91c2VEb3duKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRG93bih0
b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQu
YnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50Lm1vdXNlRG93bih0b0FQSSgmcGFnZU92ZXJsYXkpLCBXZWJLaXQ6OnRvQVBJKGV2
ZW50LnBvc2l0aW9uKCkpLCBXZWJLaXQ6OnRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYkNvcmU6OlBsYXRm
b3JtTW91c2VFdmVudDo6VHlwZTo6TW91c2VSZWxlYXNlZDogewogICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC5tb3VzZVVwKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlVXAodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEko
ZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZVVwKHRvQVBJKCZw
YWdlT3ZlcmxheSksIFdlYktpdDo6dG9BUEkoZXZlbnQucG9zaXRpb24oKSksIFdlYktpdDo6dG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1v
dmVkOiB7CiAgICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViQ29yZTo6TW91c2VC
dXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZU1v
dmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShl
dmVudC5wb3NpdGlvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXZWJL
aXQ6OnRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTW91c2VNb3ZlIGV2ZW50
IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURyYWdnZWQuCiAgICAgICAg
ICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURyYWdnZWQodG9BUEko
JnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRv
bigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudC5tb3VzZURyYWdnZWQodG9BUEkoJnBhZ2VPdmVybGF5KSwgV2ViS2l0Ojp0b0FQSShldmVu
dC5wb3NpdGlvbigpKSwgV2ViS2l0Ojp0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgpAQCAtMTI5LDE0
ICsxMjcsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgRERB
Y3Rpb25Db250ZXh0ICphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJQYWdlT3Zlcmxh
eSYgcGFnZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQorICAgIEREQWN0aW9uQ29udGV4dCAq
YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFn
ZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1fY2xpZW50
LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KSB7CiAgICAgICAgICAgICBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIGFwaVJhbmdlID0gbnVsbHB0cjsKICAgICAgICAgICAgIEREQWN0aW9uQ29u
dGV4dCAqYWN0aW9uQ29udGV4dCA9IChEREFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25D
b250ZXh0Rm9yUmVzdWx0QXRQb2ludCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShs
b2NhdGlvbi54KCksIGxvY2F0aW9uLnkoKSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKIAogICAgICAgICAgICAgaWYgKGFwaVJhbmdlKQotICAgICAgICAgICAgICAgIHJh
bmdlSGFuZGxlID0gJnRvSW1wbChhcGlSYW5nZSktPmNvcmVSYW5nZSgpOworICAgICAgICAgICAg
ICAgIHJhbmdlSGFuZGxlID0gJldlYktpdDo6dG9JbXBsKGFwaVJhbmdlKS0+Y29yZVJhbmdlKCk7
CiAKICAgICAgICAgICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwogICAgICAgICB9CkBAIC0xNDQs
NyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICB2
b2lkIGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5
KSBvdmVycmlkZQorICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZFByZXNlbnRVSShXZWJLaXQ6Oldl
YlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICgh
bV9jbGllbnQuZGF0YURldGVjdG9yc0RpZFByZXNlbnRVSSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE1Miw3ICsxNTAsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC5kYXRhRGV0ZWN0
b3JzRGlkUHJlc2VudFVJKHRvQVBJKCZwYWdlT3ZlcmxheSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CiAgICAgfQogCi0gICAgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViUGFn
ZU92ZXJsYXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQorICAgIHZvaWQgZGF0YURldGVjdG9yc0Rp
ZENoYW5nZVVJKFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xNjAsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9jbGllbnQuZGF0YURldGVjdG9yc0RpZENoYW5nZVVJKHRvQVBJKCZwYWdlT3ZlcmxheSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogCi0gICAgdm9pZCBkYXRhRGV0ZWN0b3Jz
RGlkSGlkZVVJKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKKyAgICB2b2lk
IGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJs
YXkpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRhdGFEZXRlY3RvcnNE
aWRIaWRlVUkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjksMjkgKzE2NywyOSBAQCBwcml2
YXRlOgogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLSAgICBib29sIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYgcGFn
ZU92ZXJsYXksIFN0cmluZyBhdHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVy
LCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZQorICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVy
bGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgU3Ry
aW5nJiB2YWx1ZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5
Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5
Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBh
Z2VPdmVybGF5KSwgdG9Db3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50
TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwotICAgICAgICBpZiAodG9JbXBsKHdrVHlwZSkt
PnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAgYXV0byB3a1R5cGUgPSBt
X2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXZWJLaXQ6OnRvQ29waWVkQVBJKGF0dHJpYnV0ZSks
IFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkp
LCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAg
ICAgaWYgKFdlYktpdDo6dG9JbXBsKHdrVHlwZSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJ
VHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmFsdWUgPSB0b1dURlN0
cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlKSk7CisgICAgICAgIHZhbHVlID0g
V2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFN0
cmluZyBhdHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1
ZSkgb3ZlcnJpZGUKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFN0cmluZyBhdHRy
aWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9Db3Bp
ZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgp
LCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNs
aWVudEluZm8pOwotICAgICAgICBpZiAodG9JbXBsKHdrVHlwZSktPnR5cGUoKSAhPSBBUEk6OkJv
b2xlYW46OkFQSVR5cGUpCisgICAgICAgIGF1dG8gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5Q2xp
ZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBhZ2VP
dmVybGF5KSwgV2ViS2l0Ojp0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3JlYXRlKFdL
UG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3NpYmlsaXR5
Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmIChXZWJLaXQ6OnRv
SW1wbCh3a1R5cGUpLT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4od2tUeXBlKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMo
V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBib29sIHBhcmFtZXJpemVkTmFtZXMpIG92ZXJy
aWRlCisgICAgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhX
ZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVz
KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAgICAgICAg
IGlmICghbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlTmFtZXMpCkBAIC0yMDEsOCArMTk5LDggQEAgcHJpdmF0ZToKICAgICAgICAgc2l6ZV90
IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGsg
PSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7Ci0gICAgICAgICAgICBpZiAodG9JbXBsKGl0
ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCi0gICAgICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwor
ICAgICAgICAgICAgaWYgKFdlYktpdDo6dG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJp
bmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZT
dHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICByZXR1cm4gbmFtZXM7CkBAIC0yMTMsMjMgKzIxMSwyMyBAQCBwcml2YXRlOgogCiBXS1R5
cGVJRCBXS0J1bmRsZVBhZ2VPdmVybGF5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEko
V2ViUGFnZU92ZXJsYXk6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktp
dDo6V2ViUGFnZU92ZXJsYXk6OkFQSVR5cGUpOwogfQogCiBXS0J1bmRsZVBhZ2VPdmVybGF5UmVm
IFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2Uq
IHdrQ2xpZW50KQogewogICAgIGF1dG8gY2xpZW50SW1wbCA9IHN0ZDo6bWFrZV91bmlxdWU8UGFn
ZU92ZXJsYXlDbGllbnRJbXBsPih3a0NsaWVudCk7Ci0gICAgcmV0dXJuIHRvQVBJKCZXZWJQYWdl
T3ZlcmxheTo6Y3JlYXRlKFdURk1vdmUoY2xpZW50SW1wbCkpLmxlYWtSZWYoKSk7CisgICAgcmV0
dXJuIHRvQVBJKCZXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjcmVhdGUoV1RGTW92ZShjbGllbnRJ
bXBsKSkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0QWNjZXNz
aWJpbGl0eUNsaWVudChXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVybGF5UmVm
LCBXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2UqIGNsaWVudCkKIHsK
LSAgICBzdGF0aWNfY2FzdDxQYWdlT3ZlcmxheUNsaWVudEltcGwmPih0b0ltcGwoYnVuZGxlUGFn
ZU92ZXJsYXlSZWYpLT5jbGllbnQoKSkuc2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwor
ICAgIHN0YXRpY19jYXN0PFBhZ2VPdmVybGF5Q2xpZW50SW1wbCY+KFdlYktpdDo6dG9JbXBsKGJ1
bmRsZVBhZ2VPdmVybGF5UmVmKS0+Y2xpZW50KCkpLnNldEFjY2Vzc2liaWxpdHlDbGllbnQoY2xp
ZW50KTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNwbGF5KFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLUmVjdCByZWN0KQogewot
ICAgIHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPnNldE5lZWRzRGlzcGxheShlbmNsb3Np
bmdJbnRSZWN0KHRvRmxvYXRSZWN0KHJlY3QpKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoYnVuZGxl
UGFnZU92ZXJsYXlSZWYpLT5zZXROZWVkc0Rpc3BsYXkoZW5jbG9zaW5nSW50UmVjdChXZWJLaXQ6
OnRvRmxvYXRSZWN0KHJlY3QpKSk7CiB9CiAKIGZsb2F0IFdLQnVuZGxlUGFnZU92ZXJsYXlGcmFj
dGlvbkZhZGVkSW4oV0tCdW5kbGVQYWdlT3ZlcmxheVJlZikKQEAgLTI0Myw1ICsyNDEsNSBAQCBm
bG9hdCBXS0J1bmRsZVBhZ2VPdmVybGF5RnJhY3Rpb25GYWRlZEluKFdLQnVuZGxlUGFnZU92ZXJs
YXlSZWYpCiAKIHZvaWQgV0tCdW5kbGVQYWdlT3ZlcmxheUNsZWFyKFdLQnVuZGxlUGFnZU92ZXJs
YXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVBhZ2VPdmVy
bGF5UmVmKS0+Y2xlYXIoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJl
ZiktPmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
aW5kZXggNDM3MTdjOTE1ZDA2MmIzZDRhNGI3ZGYwZWYzMWMzZjU2NjFlNTQ5OC4uYTBlOGEzOWI1
YTk5OWZhZjgyNTFiMjA0MDgxNmNkMzk0NDFhNTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUmFuZ2VIYW5kbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtMzMsMjcgKzMzLDI1IEBACiAjaW5jbHVkZSAiV2ViSW1h
Z2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVSYW5nZUhhbmRsZUdldFR5cGVJRCgpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OkFQSVR5cGUpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6QVBJ
VHlwZSk7CiB9CiAKIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgV0tCdW5kbGVSYW5nZUhhbmRsZUNy
ZWF0ZShKU0NvbnRleHRSZWYgY29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0UmVmKQogewot
ICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiByYW5nZUhhbmRsZSA9IEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKGNvbnRleHRSZWYsIG9iamVjdFJlZik7
CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5k
bGUgPSBXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKGNvbnRl
eHRSZWYsIG9iamVjdFJlZik7CiAgICAgcmV0dXJuIHRvQVBJKHJhbmdlSGFuZGxlLmxlYWtSZWYo
KSk7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZVJhbmdlSGFuZGxlR2V0Qm91bmRpbmdSZWN0SW5XaW5k
b3dDb29yZGluYXRlcyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlSGFuZGxlUmVmKQogewot
ICAgIFdlYkNvcmU6OkludFJlY3QgYm91bmRpbmdSZWN0ID0gdG9JbXBsKHJhbmdlSGFuZGxlUmVm
KS0+Ym91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpOworICAgIFdlYkNvcmU6OkludFJl
Y3QgYm91bmRpbmdSZWN0ID0gV2ViS2l0Ojp0b0ltcGwocmFuZ2VIYW5kbGVSZWYpLT5ib3VuZGlu
Z1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCk7CiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoYm91bmRp
bmdSZWN0LngoKSwgYm91bmRpbmdSZWN0LnkoKSwgYm91bmRpbmdSZWN0LndpZHRoKCksIGJvdW5k
aW5nUmVjdC5oZWlnaHQoKSk7CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVSYW5nZUhhbmRsZUNv
cHlTbmFwc2hvdFdpdGhPcHRpb25zKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VIYW5kbGVS
ZWYsIFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyPFdlYkltYWdlPiBp
bWFnZSA9IHRvSW1wbChyYW5nZUhhbmRsZVJlZiktPnJlbmRlcmVkSW1hZ2UodG9TbmFwc2hvdE9w
dGlvbnMob3B0aW9ucykpOworICAgIFJlZlB0cjxXZWJLaXQ6OldlYkltYWdlPiBpbWFnZSA9IFdl
YktpdDo6dG9JbXBsKHJhbmdlSGFuZGxlUmVmKS0+cmVuZGVyZWRJbWFnZShXZWJLaXQ6OnRvU25h
cHNob3RPcHRpb25zKG9wdGlvbnMpKTsKICAgICByZXR1cm4gdG9BUEkoaW1hZ2UubGVha1JlZigp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVNjcmlwdFdvcmxkLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVNjcmlwdFdvcmxkLmNwcAppbmRleCBlZjY5
Nzc5Y2Y0YTY5ZDk3YTczZjMzOTQwMWNhN2NiZmQwZGM3ZTI1Li4xNzQxMWMwOTU0NTZiYjBjODg5
Zjg2NTZiNWIyYjRmMTNkNGVlZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVTY3JpcHRXb3JsZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlU2NyaXB0
V29ybGQuY3BwCkBAIC0zMCw0MCArMzAsMzggQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNp
bmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQog
V0tUeXBlSUQgV0tCdW5kbGVTY3JpcHRXb3JsZEdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRv
QVBJKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6OkFQSVR5cGUpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDo6QVBJVHlwZSk7CiB9
CiAKIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxk
KCkKIHsKLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZD4gd29ybGQgPSBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8V2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkPiB3b3JsZCA9IFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZDo6Y3JlYXRlKCk7CiAgICAgcmV0dXJuIHRvQVBJKHdvcmxkLmxlYWtSZWYoKSk7CiB9
CiAKIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgV0tCdW5kbGVTY3JpcHRXb3JsZE5vcm1hbFdvcmxk
KCkKIHsKLSAgICByZXR1cm4gdG9BUEkoJkluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ6Om5vcm1h
bFdvcmxkKCkpOworICAgIHJldHVybiB0b0FQSSgmV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVNjcmlw
dFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNjcmlwdFdvcmxkQ2xl
YXJXcmFwcGVycyhXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlwdFdvcmxkUmVmKQogewotICAg
IHRvSW1wbChzY3JpcHRXb3JsZFJlZiktPmNsZWFyV3JhcHBlcnMoKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChzY3JpcHRXb3JsZFJlZiktPmNsZWFyV3JhcHBlcnMoKTsKIH0KIAogdm9pZCBXS0J1bmRs
ZVNjcmlwdFdvcmxkTWFrZUFsbFNoYWRvd1Jvb3RzT3BlbihXS0J1bmRsZVNjcmlwdFdvcmxkUmVm
IHNjcmlwdFdvcmxkUmVmKQogewotICAgIHRvSW1wbChzY3JpcHRXb3JsZFJlZiktPm1ha2VBbGxT
aGFkb3dSb290c09wZW4oKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJlZiktPm1h
a2VBbGxTaGFkb3dSb290c09wZW4oKTsKIH0KIAogdm9pZCBXS0J1bmRsZVNjcmlwdFdvcmxkRGlz
YWJsZU92ZXJyaWRlQnVpbHRpbnNCZWhhdmlvcihXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHNjcmlw
dFdvcmxkUmVmKQogewotICAgIHRvSW1wbChzY3JpcHRXb3JsZFJlZiktPmRpc2FibGVPdmVycmlk
ZUJ1aWx0aW5zQmVoYXZpb3IoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChzY3JpcHRXb3JsZFJlZikt
PmRpc2FibGVPdmVycmlkZUJ1aWx0aW5zQmVoYXZpb3IoKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tC
dW5kbGVTY3JpcHRXb3JsZENvcHlOYW1lKFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgc2NyaXB0V29y
bGRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChzY3JpcHRXb3JsZFJlZikt
Pm5hbWUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwo
c2NyaXB0V29ybGRSZWYpLT5uYW1lKCkpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>