<?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>202390</bug_id>
          
          <creation_ts>2019-09-30 22:29:27 -0700</creation_ts>
          <short_desc>Unify more WebKitLegacy sources</short_desc>
          <delta_ts>2019-10-01 09:37:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mkwst</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1575434</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-09-30 22:29:27 -0700</bug_when>
    <thetext>Unify more WebKitLegacy sources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575435</commentid>
    <comment_count>1</comment_count>
      <attachid>379875</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-09-30 22:32:59 -0700</bug_when>
    <thetext>Created attachment 379875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575443</commentid>
    <comment_count>2</comment_count>
      <attachid>379875</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-09-30 22:44:44 -0700</bug_when>
    <thetext>Comment on attachment 379875
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575450</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-09-30 23:18:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/r250549</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575451</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-30 23:19:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55867949&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575529</commentid>
    <comment_count>5</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-10-01 08:06:34 -0700</bug_when>
    <thetext>It looks like this change https://trac.webkit.org/changeset/250549/webkit

broke internal builds for Mac and iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575551</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-10-01 08:59:47 -0700</bug_when>
    <thetext>http://trac.webkit.org/r250556</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575572</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-10-01 09:37:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/r250558</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379875</attachid>
            <date>2019-09-30 22:32:59 -0700</date>
            <delta_ts>2019-09-30 22:44:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202390-20190930223257.patch</filename>
            <type>text/plain</type>
            <size>447735</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwkocmV2aXNpb24gMjUwNTQ0KQorKysgU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE5LTA5
LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgVW5pZnkgbW9yZSBXZWJLaXRMZWdhY3kgc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvc3BpL21hYy9RdWlja0xvb2tNYWNTUEku
aDoKKwogMjAxOS0wOS0yNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ29hbGVzY2Ugb3IgcmVtb3ZlIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9RdWlja0xvb2tNYWNT
UEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvUXVpY2tM
b29rTWFjU1BJLmgJKHJldmlzaW9uIDI1MDUyMikKKysrIFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
c3BpL21hYy9RdWlja0xvb2tNYWNTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsMTIg
QEAKIAogI2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgogCisjaWYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKKworI2ltcG9ydCA8UXVhcnR6L1F1YXJ0elByaXZhdGUuaD4KKworI2Vsc2UKKwogQHBy
b3RvY29sIFFMUHJldmlld01lbnVJdGVtRGVsZWdhdGUgPE5TT2JqZWN0PgogQG9wdGlvbmFsCiAK
QEAgLTUxLDMgKzU3LDUgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUUxQcmV2aWV3U3R5
bAogQHByb3BlcnR5IChhc3NpZ24pIGlkPFFMUHJldmlld01lbnVJdGVtRGVsZWdhdGU+IGRlbGVn
YXRlOwogQHByb3BlcnR5IFFMUHJldmlld1N0eWxlIHByZXZpZXdTdHlsZTsKIEBlbmQKKworI2Vu
ZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwko
cmV2aXNpb24gMjUwNTIyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxOS0wOS0zMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVuaWZ5IG1vcmUgV2ViS2l0TGVn
YWN5IHNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMjM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXNlIGZpbGVzIHdlcmUgY2F1c2luZyBwcm9ibGVtcyB3aXRoIHRoZSBDTWFrZSBidWls
ZCwgYnV0IG9ubHkgaWYgbm90IHVuaWZpZWQuCisgICAgICAgIFNvIEkgdW5pZmllZCB0aGVtIGFu
ZCBzcGVkIHVwIHRoZSBidWlsZCB0b28sIHdpdGhvdXQgY2hhbmdpbmcgYW55IGJlaGF2aW9yLgor
CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVbmlmaWVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBXZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBzY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5z
aDoKKwogMjAxOS0wOS0xMCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjM5MDk3LgpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjUwNTIyKQorKysgU291cmNl
L1dlYktpdExlZ2FjeS9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNSAr
MTU1LDMzIEBAIG1hYy9ET00vT2JqQ0V2ZW50TGlzdGVuZXIubW0KIG1hYy9ET00vT2JqQ05vZGVG
aWx0ZXJDb25kaXRpb24ubW0KIG1hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQogCittYWMvRGVm
YXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbQorCittYWMvTWlz
Yy9XZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIubW0KKworbWFjL1BsdWdpbnMvV2Vi
QmFzZVBsdWdpblBhY2thZ2UubW0KK21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNoZWNr
Lm1tCittYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCittYWMvUGx1Z2lucy9XZWJQ
bHVnaW5EYXRhYmFzZS5tbQorCittYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KKwog
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KIG1hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFNYW5hZ2VyLm1tCittYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKworbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0
b3IubW0KKworbWFjL1dlYlZpZXcvV2ViQ2xpcFZpZXcubW0KK21hYy9XZWJWaWV3L1dlYkRhdGFT
b3VyY2UubW0KK21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCittYWMvV2ViVmlldy9XZWJGcmFtZVZp
ZXcubW0KK21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCittYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQorbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5tbQorbWFjL1dlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRpb24ubW0KK21hYy9XZWJWaWV3L1dl
YlBERlZpZXcubW0KK21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCittYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCittYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5t
bQorbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9Vbmlm
aWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNTA1MjIp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CSh3b3JraW5nIGNvcHkpCkBAIC0xMCw4ICsxMCwxMCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0TGVnYWN5L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTYtbW0ubW0KICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXRMZWdhY3kvdW5pZmllZC1zb3Vy
Y2VzL1VuaWZpZWRTb3VyY2UxNy1tbS5tbQogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdExlZ2FjeS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTE4LW1tLm1t
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0TGVnYWN5L3VuaWZp
ZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTktbW0ubW0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXRMZWdhY3kvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2Uy
LW1tLm1tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0TGVnYWN5
L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMi5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXRMZWdhY3kvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3Vy
Y2UyMC1tbS5tbQogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdExl
Z2FjeS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTMtbW0ubW0KICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXRMZWdhY3kvdW5pZmllZC1zb3VyY2VzL1VuaWZp
ZWRTb3VyY2UzLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dExlZ2FjeS91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTQtbW0ubW0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUwNTIyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9X
ZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw2IEBACiAJCTIyRjIxOUNDMDhEMjM2NzMwMDMwRTA3OCAvKiBXZWJCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMkYyMTlDQjA4RDIzNjczMDAzMEUwNzggLyogV2ViQmFja0ZvcndhcmRMaXN0UHJp
dmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTI5QUVGOTYwMTM0Qzc2RkIwMEZFNTA5NiAvKiBPdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcyBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBRUY5NUQx
MzRDNzU1NDAwRkU1MDk2IC8qIE91dGxvb2tRdWlya3NVc2VyU2NyaXB0LmpzICovOyB9OwogCQky
RDI1Mzk2NjE4Q0U4NUMyMDAyNzAyMjIgLyogV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDI1
Mzk2NDE4Q0U4NUMyMDAyNzAyMjIgLyogV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVy
LmggKi87IH07Ci0JCTJEMjUzOTY3MThDRTg1QzIwMDI3MDIyMiAvKiBXZWJTaGFyaW5nU2Vydmlj
ZVBpY2tlckNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDI1Mzk2NTE4Q0U4NUMyMDAyNzAyMjIgLyogV2ViU2hhcmluZ1NlcnZpY2VQ
aWNrZXJDb250cm9sbGVyLm1tICovOyB9OwogCQkyREQ2MzJDMjE5RTVEMUYwMDAyRTlDN0IgLyog
V2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDYzMkMwMTlFNUQxRjAwMDJFOUM3QiAvKiBXZWJTZWxl
Y3Rpb25TZXJ2aWNlQ29udHJvbGxlci5oICovOyB9OwogCQkyREQ2MzJDMzE5RTVEMUYwMDAyRTlD
N0IgLyogV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ2MzJDMTE5RTVEMUYwMDAyRTlDN0IgLyog
V2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTMxMkUyRkU1MTRFNDgx
ODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkUyRkUzMTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3Rp
ZmljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTg5LDYgKzE4OCw4IEBACiAJCTVDN0U3ODc0MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlm
aWVkU291cmNlNy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDN0U3ODY3MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlNy1tbS5tbSAq
LzsgfTsKIAkJNUM3RTc4NzUyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3VyY2UxMi1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDN0U3ODY4
MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTItbW0ubW0gKi87IH07CiAJCTVDN0U3
ODc2MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTEtbW0ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdFNzg2OTIyRDk1RkUyMDAwNkEy
MzAgLyogVW5pZmllZFNvdXJjZTExLW1tLm1tICovOyB9OworCQk1Qzk3RUY2MzIzNDJDNTM0MDA2
MDIwRDQgLyogVW5pZmllZFNvdXJjZTE5LW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5N0VGNjEyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRT
b3VyY2UxOS1tbS5tbSAqLzsgfTsKKwkJNUM5N0VGNjQyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZp
ZWRTb3VyY2UyMC1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDOTdFRjYyMjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0g
Ki87IH07CiAJCTVDOUE0RTUzMjJERTQ2MjcwMDdEQjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q0MzYz
NzFENTdBQkVFMDBBQjg1RUEgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1tICovOyB9OwogCQk1QzlE
OTI1QTIyRDdFOEFEMDA4RTkyNjYgLyogU291cmNlcy50eHQgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUQ5MjU4MjJEN0U4QUQwMDhFOTI2NiAvKiBT
b3VyY2VzLnR4dCAqLzsgfTsKIAkJNUM5RDkyNUIyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXND
b2NvYS50eHQgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDOUQ5MjU5MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29jb2EudHh0ICovOyB9OwpAQCAt
MjA1LDcgKzIwNiw2IEBACiAJCTVDQzE5RkQyMjJEN0YyOEQwMEJCQzk1MiAvKiBVbmlmaWVkU291
cmNlNS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0MxOUZCOTIyRDdGMjNCMDBCQkM5NTIgLyogVW5pZmllZFNvdXJjZTUuY3BwICovOyB9OwogCQk1
Q0U0NEY0QTIwNkQ3MEVBMDAzRUZEMDEgLyogUGluZ0hhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFNDRGNDkyMDZENzBFOTAwM0VGRDAxIC8q
IFBpbmdIYW5kbGUuaCAqLzsgfTsKIAkJNUQ3QkY4MTQwQzJBMUQ5MDAwOENFMDZEIC8qIFdlYklu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUQ3QkY4MTIwQzJBMUQ5MDAwOENFMDZEIC8qIFdlYkluc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTVEN0JGODE1MEMyQTFEOTAwMDhD
RTA2RCAvKiBXZWJJbnNwZWN0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDdCRjgxMzBDMkExRDkwMDA4Q0UwNkQgLyogV2ViSW5zcGVjdG9yLm1t
ICovOyB9OwogCQk1REU4M0E3QTBEMEY3Rjk0MDBDQUQxMkEgLyogV2ViSmF2YVNjcmlwdFRleHRJ
bnB1dFBhbmVsLnhpYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNURFODNBNzQwRDBGN0Y5NDAwQ0FEMTJBIC8qIFdlYkphdmFTY3JpcHRUZXh0SW5wdXRQ
YW5lbC54aWIgKi87IH07CiAJCTY1NDg4REExMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rp
b25hcnlFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1NDg4RDlGMDg0RkJDQ0IwMDgzMUFEMCAvKiBXZWJOU0RpY3Rpb25hcnlFeHRyYXMuaCAq
LzsgfTsKIAkJNjU0ODhEQTIwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJh
cy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0ODhE
QTAwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGljdGlvbmFyeUV4dHJhcy5tICovOyB9OwpAQCAt
MjI0LDExICsyMjQsOCBAQAogCQk3QzAxQ0I4NzE3MzQzNUM5MDBDNUQ4MDcgLyogU2VhcmNoUG9w
dXBNZW51TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzAxQ0I4MzE3MzQzNUM5MDBDNUQ4MDcgLyogU2VhcmNoUG9wdXBNZW51TWFjLmggKi87IH07
CiAJCTdDMUZCM0MyMTg0NkU4RTEwMDFBMDNEOCAvKiBXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxRkIz
QzExODQ2RThFMTAwMUEwM0Q4IC8qIFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0U2RkVGMDgwODk4
NUE3MjAwQzQ0QzNGIC8qIFdlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNkZFRjA1MDg5ODVBNzIwMEM0NEMzRiAv
KiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0U2RkVGMDkwODk4NUE3MjAwQzQ0QzNGIC8qIFdlYlNjcmlw
dERlYnVnRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3RTZGRUYwNjA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0
ZS5tbSAqLzsgfTsKIAkJOTMxNjMzRUIwQUVERkY5MzAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzE2MzNFQTBBRURGRjkzMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCAqLzsgfTsK
LQkJOTMxNjMzRUYwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxNjMzRUUwQUVE
RkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tICovOyB9OwogCQk5MzIxRDU5
MjFBMzkxREMzMDA4MDUyQkUgLyogV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyMUQ1OTExQTM5MURC
ODAwODA1MkJFIC8qIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaCAqLzsgfTsKLQkJOTMy
MUQ1OTQxQTM5MURGOTAwODA1MkJFIC8qIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzIxRDU5MzFB
MzkxREY5MDA4MDUyQkUgLyogV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSAqLzsgfTsK
IAkJOTM0QzExNjcwRDg3MTBCQjAwQzMyQUJEIC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlld0lu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzRDMTE2NjBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJu
YWwuaCAqLzsgfTsKIAkJOTM0QzRBOTEwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5TT2JqZWN0RXh0
cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0
QzRBOTAwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5TT2JqZWN0RXh0cmFzLm1tICovOyB9OwogCQk5
MzRDNEFBMDBGMDE0MUY3MDA5MzcyQzAgLyogV2ViUmVzb3VyY2VJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0QzRBOUYwRjAxNDFGNzAw
OTM3MkMwIC8qIFdlYlJlc291cmNlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTMyNiw3ICszMjMsNiBA
QAogCQk5Mzk4MTBCMTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTExNTAz
MDdFRkZFQkYwMDlCOEJGNyAvKiBXZWJQbHVnaW5Db250YWluZXJDaGVjay5oICovOyB9OwogCQk5
Mzk4MTBCNTA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC54aWIgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVEMTdCMDM2
NUJGMzUwMDg2MzVDRSAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLnhpYiAqLzsgfTsKIAkJOTM5
ODEwQjcwODI0QkYwMTAwOERGMDM4IC8qIHVybF9pY29uLnRpZmYgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QjY3MTMwMDIzRURGODkwMUMxQTUyNSAv
KiB1cmxfaWNvbi50aWZmICovOyB9OwotCQk5Mzk4MTBCQzA4MjRCRjAxMDA4REYwMzggLyogV2Vi
QmFja0ZvcndhcmRMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzk0NDYwN0UwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5t
bSAqLzsgfTsKIAkJOTM5ODEwQkQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3RvcnlJdGVtLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwODAw
MjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3RvcnlJdGVtLm1tICovOyB9OwogCQk5Mzk4MTBCRTA4
MjRCRjAxMDA4REYwMzggLyogV2ViVVJMc1dpdGhUaXRsZXMubSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RTBBNzZGMDJCOEZFRTQwMUMxQTUyNSAvKiBX
ZWJVUkxzV2l0aFRpdGxlcy5tICovOyB9OwogCQk5Mzk4MTBCRjA4MjRCRjAxMDA4REYwMzggLyog
V2ViQ29yZVN0YXRpc3RpY3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTlFQUU0MTAyNTNDOERFMDE4NjM1Q0EgLyogV2ViQ29yZVN0YXRpc3RpY3Mu
bW0gKi87IH07CkBAIC0zNDMsMjYgKzMzOSwxNiBAQAogCQk5Mzk4MTBDRjA4MjRCRjAxMDA4REYw
MzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjhDQTE1QjYwMjlBMzlEOTAxMDAwMTIyIC8qIFdlYkF1dGhl
bnRpY2F0aW9uUGFuZWwubSAqLzsgfTsKIAkJOTM5ODEwRDAwODI0QkYwMTAwOERGMDM4IC8qIFdl
YlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE1NEVGMjAzQTQxMjcwMDA4NjM1Q0UgLyogV2ViUGFuZWxB
dXRoZW50aWNhdGlvbkhhbmRsZXIubSAqLzsgfTsKIAkJOTM5ODEwRDEwODI0QkYwMTAwOERGMDM4
IC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBNjcyQkEwMjYzODY2RTAxMDAwMTAyIC8qIFdlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tICovOyB9OwotCQk5Mzk4MTBEMzA4MjRCRjAxMDA4REYwMzggLyog
V2ViQmFzZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4M0U0QUY0NzAzNjY1MjE1MDAwMEU1MDYgLyogV2ViQmFzZVBsdWdpblBh
Y2thZ2UubW0gKi87IH07CiAJCTkzOTgxMEQ2MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNUY3MTcxRjAyODg0OTNDMDE4NjM1Q0EgLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNr
YWdlLm1tICovOyB9OwotCQk5Mzk4MTBEQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0NjcyNzVEMDM2NzE1ODUwMENBMkFDQSAvKiBXZWJQbHVnaW5Db250cm9sbGVyLm1tICovOyB9
OwotCQk5Mzk4MTBEQjA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luRGF0YWJhc2UubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUY3MTcyMTAyODg0
OTNDMDE4NjM1Q0EgLyogV2ViUGx1Z2luRGF0YWJhc2UubW0gKi87IH07CiAJCTkzOTgxMERDMDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5QYWNrYWdlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNEMwMzY2NTk0NDAwMDBFNTA2IC8qIFdl
YlBsdWdpblBhY2thZ2UubW0gKi87IH07CiAJCTkzOTgxMEREMDgyNEJGMDEwMDhERjAzOCAvKiBu
cGFwaS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
RjcxNzIzMDI4ODQ5M0MwMTg2MzVDQSAvKiBucGFwaS5tbSAqLzsgfTsKIAkJOTM5ODEwRTQwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0NUQ0RUIwMzY1QzVCMjAwODYz
NUNFIC8qIFdlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5tICovOyB9OwotCQk5Mzk4MTBFQjA4
MjRCRjAxMDA4REYwMzggLyogV2ViQ2xpcFZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNENjU5QTAzNDEzRkYyMDA4NjM1Q0UgLyogV2ViQ2xp
cFZpZXcubW0gKi87IH07Ci0JCTkzOTgxMEVEMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEYXRhU291
cmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0
NDYwNzEwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkRhdGFTb3VyY2UubW0gKi87IH07Ci0JCTkzOTgx
MEVGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTJGQURFMDMz
RkM1MDQwMENBMkFDRCAvKiBXZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbSAqLzsgfTsK
IAkJOTM5ODEwRjAwODI0QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MkZBRTAw
MzNGQzUwNDAwQ0EyQUNEIC8qIFdlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5tICovOyB9OwogCQk5
Mzk4MTBGMTA4MjRCRjAxMDA4REYwMzggLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwNkMwMjBG
NTBFRDBFQ0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tbSAqLzsgfTsKLQkJOTM5
ODEwRjIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUxNDNBMzcwMjIxRENDRTAxQTgwMTgxIC8qIFdl
YkZyYW1lLm1tICovOyB9OwogCQk5Mzk4MTBGMzA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzUwODFEOTMwMkI2RDREODBBQ0EyQUNBIC8qIFdlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bSAqLzsgfTsKLQkJOTM5ODEwRjQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzUwODFEOTUwMkI2
RDREODBBQ0EyQUNBIC8qIFdlYkhUTUxWaWV3Lm1tICovOyB9OwogCQk5Mzk4MTBGODA4MjRCRjAx
MDA4REYwMzggLyogV2ViUHJlZmVyZW5jZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNUFFQkIzRDAyNEE1Mjc2MDFDMUE1MjYgLyogV2ViUHJlZmVy
ZW5jZXMubW0gKi87IH07CiAJCTkzOTgxMEZDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVs
ZWdhdGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
ODFEQUIzMDNFQjBCMkQwMEE4MDE2NiAvKiBXZWJGb3JtRGVsZWdhdGUubSAqLzsgfTsKIAkJOTM5
ODExMDMwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdEVycm9ycy5tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MzBGOTgwM0ZCMUU2NjAwMDQ3MzZFIC8q
IFdlYktpdEVycm9ycy5tICovOyB9OwotCQk5Mzk4MTEwNjA4MjRCRjAxMDA4REYwMzggLyogV2Vi
RnJhbWVWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFBOEI1MkYwNDI4MkI1OTAwQ0EyRDNBIC8qIFdlYkZyYW1lVmlldy5tbSAqLzsgfTsKLQkJ
OTM5ODExMDcwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE4QjU3QTA0MjgzNEY3MDBDQTJEM0EgLyog
V2ViVmlldy5tbSAqLzsgfTsKIAkJOTM5ODExMDgwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBvbGlj
eURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE0NDNGOUIwNDI5MzkyQjAwQ0EyRDNBIC8qIFdlYlBvbGljeURlbGVnYXRlLm1tICovOyB9
OwogCQk5Mzk4MTEwQTA4MjRCRjAxMDA4REYwMzggLyogV2ViRGVmYXVsdFVJRGVsZWdhdGUubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFMjdEMDA0
NThDQTRCMDBDQTJEM0EgLyogV2ViRGVmYXVsdFVJRGVsZWdhdGUubW0gKi87IH07CiAJCTkzOTgx
MTEyMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOU1VSTEV4dHJhcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFNkRDMzlBMDRDNjJDNEUwMDREMEVGNiAv
KiBXZWJOU1VSTEV4dHJhcy5tbSAqLzsgfTsKQEAgLTM3Myw5ICszNTksNiBAQAogCQk5Mzk4MTEx
QTA4MjRCRjAxMDA4REYwMzggLyogV2ViUmVzb3VyY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDMxMUExMzA1RUFBQUYwMDA4OEVEQTQgLyogV2Vi
UmVzb3VyY2UubW0gKi87IH07CiAJCTkzOTgxMTFCMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEZWZh
dWx0RWRpdGluZ0RlbGVnYXRlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCRTk1QkVFNTA1RkQwODA1MDA2RTE1MTMgLyogV2ViRGVmYXVsdEVkaXRpbmdE
ZWxlZ2F0ZS5tICovOyB9OwogCQk5Mzk4MTExRDA4MjRCRjAxMDA4REYwMzggLyogV2ViQXJjaGl2
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzM0
MzVCMDYyNEVFMEQwMEYzQjI4OSAvKiBXZWJBcmNoaXZlLm1tICovOyB9OwotCQk5Mzk4MTExRTA4
MjRCRjAxMDA4REYwMzggLyogV2ViUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTk0QzM1MDZDMDMyMTIwMEE5QjA5RSAvKiBXZWJQREZW
aWV3Lm1tICovOyB9OwotCQk5Mzk4MTExRjA4MjRCRjAxMDA4REYwMzggLyogV2ViUERGUmVwcmVz
ZW50YXRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUU5NEM2OTA2QzAzNDc1MDBBOUIwOUUgLyogV2ViUERGUmVwcmVzZW50YXRpb24ubW0gKi87
IH07Ci0JCTkzOTgxMTI2MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250YWluZXJDaGVj
ay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTEx
NTA0MDdFRkZFQkYwMDlCOEJGNyAvKiBXZWJQbHVnaW5Db250YWluZXJDaGVjay5tbSAqLzsgfTsK
IAkJOTNENDM2NEQxRDU3QUJFRTAwQUI4NUVBIC8qIERPTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENDM0RkIxRDU3QUJFRTAwQUI4NUVBIC8qIERP
TS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkz
RDQzNjRGMUQ1N0FCRUUwMEFCODVFQSAvKiBET01BYnN0cmFjdFZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDQzNEZEMUQ1N0FCRUUwMEFCODVF
QSAvKiBET01BYnN0cmFjdFZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5M0Q0MzY1MTFENTdBQkVFMDBBQjg1RUEgLyogRE9NQWJzdHJhY3RW
aWV3RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRDQzNEZGMUQ1N0FCRUUwMEFCODVFQSAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovOyB9
OwpAQCAtNjc0LDkgKzY1Nyw3IEBACiAJCUJDN0Y4ODlGMTBDOUQzMEMwMEQ2MTMzRCAvKiBXZWJH
ZW9sb2NhdGlvblBvc2l0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM3Rjg4OUQxMEM5RDMwQzAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9uUG9z
aXRpb24ubW0gKi87IH07CiAJCUJDN0Y4OEE1MTBDOUQ4OEIwMEQ2MTMzRCAvKiBXZWJHZW9sb2Nh
dGlvblBvc2l0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDN0Y4OEE0MTBDOUQ4OEIwMEQ2MTMzRCAvKiBXZWJHZW9sb2NhdGlvblBv
c2l0aW9uSW50ZXJuYWwuaCAqLzsgfTsKIAkJQzAxNjdCRjgwRDdGNUREMDAwMjg2OTZFIC8qIFdl
YlNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMDE2N0JGNjBEN0Y1REQwMDAyODY5NkUgLyogV2ViU2NyaXB0RGVidWdnZXIuaCAq
LzsgfTsKLQkJQzAxNjdCRjkwRDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzAxNjdCRjcw
RDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLm1tICovOyB9OwogCQlDMEIxRjdF
ODEwQUM4RTMxMDBDOTI1RDkgLyogV2ViU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQjFGN0U1MTBBQzhFMzEwMEM5MjVEOSAvKiBX
ZWJTY3JpcHRXb3JsZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUMwQjFGN0U5MTBBQzhFMzEwMEM5MjVEOSAvKiBXZWJTY3JpcHRXb3JsZC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQjFGN0U2MTBB
QzhFMzEwMEM5MjVEOSAvKiBXZWJTY3JpcHRXb3JsZC5tbSAqLzsgfTsKIAkJQzBCMUY3RUExMEFD
OEUzMTAwQzkyNUQ5IC8qIFdlYlNjcmlwdFdvcmxkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQjFGN0U3MTBBQzhFMzEwMEM5MjVEOSAv
KiBXZWJTY3JpcHRXb3JsZEludGVybmFsLmggKi87IH07CiAJCUMwQjg4RThCMTBBMDhGM0QwMEZC
QjNGNSAvKiBXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQjg4RThBMTBBMDhGM0QwMEZCQjNGNSAvKiBX
ZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDMEM1QjNFRTExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMEM1QjNFQzExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTY4OSw3ICs2NzAsNiBAQAogCQlDRDhCRkNFNzE1NTMxMjI0MDA1QUZCMjUgLyogV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q4QkZDRTUxNTUzMTIyNDAwNUFGQjI1IC8qIFdlYktpdEZ1bGxTY3JlZW5M
aXN0ZW5lci5tbSAqLzsgfTsKIAkJQ0Q4QkZDRTgxNTUzMTIyNDAwNUFGQjI1IC8qIFdlYktpdEZ1
bGxTY3JlZW5MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0Q4QkZDRTYxNTUzMTIyNDAwNUFGQjI1IC8qIFdlYktpdEZ1bGxTY3JlZW5MaXN0
ZW5lci5oICovOyB9OwogCQlDREE2MkFFMjEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQTYyQUUwMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5o
ICovOyB9OwotCQlDREE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
REE2MkFFMTEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gKi87
IH07CiAJCUNFREExMkRCMTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGll
bnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRURB
MTJEOTE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tICovOyB9
OwogCQlDRURBMTJEQzE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRURBMTJE
QTE1MkNCRTY4MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggKi87IH07CiAJ
CUREN0NERUU3MEEyM0JBOUUwMDA2OTkyOCAvKiBXZWJUeXBlc0ludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDdDREVFNjBBMjNCQTlFMDAw
Njk5MjggLyogV2ViVHlwZXNJbnRlcm5hbC5oICovOyB9OwpAQCAtNzE1LDYgKzY5NSw4IEBACiAJ
CQljb21waWxlclNwZWMgPSBjb20uYXBwbGUuY29tcGlsZXJzLnByb3h5LnNjcmlwdDsKIAkJCWZp
bGVQYXR0ZXJucyA9ICIqLmgiOwogCQkJZmlsZVR5cGUgPSBwYXR0ZXJuLnByb3h5OworCQkJaW5w
dXRGaWxlcyA9ICgKKwkJCSk7CiAJCQlpc0VkaXRhYmxlID0gMTsKIAkJCW91dHB1dEZpbGVzID0g
KAogCQkJCSIkKEhFQURFUl9PVVRQVVRfRElSKS8kKElOUFVUX0ZJTEVfTkFNRSkiLApAQCAtOTUz
LDYgKzkzNSw4IEBACiAJCTVDN0U3ODY3MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNl
Ny1tbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9ICJVbmlmaWVk
U291cmNlNy1tbS5tbSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDN0U3ODY4MjJE
OTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTItbW0ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSAiVW5pZmllZFNvdXJjZTEyLW1tLm1tIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3RTc4NjkyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRT
b3VyY2UxMS1tbS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9ICJV
bmlmaWVkU291cmNlMTEtbW0ubW0iOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Qzk3
RUY2MTIzNDJDNTM0MDA2MDIwRDQgLyogVW5pZmllZFNvdXJjZTE5LW1tLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gIlVuaWZpZWRTb3VyY2UxOS1tbS5tbSI7IHBh
dGggPSAiVW5pZmllZFNvdXJjZTE5LW1tLm1tIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUM5N0VGNjIyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UyMC1tbS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9ICJVbmlmaWVkU291cmNlMjAtbW0u
bW0iOyBwYXRoID0gIlVuaWZpZWRTb3VyY2UyMC1tbS5tbSI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDOUQ5MjU4MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzLnR4dCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTb3VyY2VzLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUM5RDkyNTkyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXNDb2NvYS50eHQgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU291cmNlc0NvY29hLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM5RUYyRjQyMUYwNjFCRTAwM0JEQzU2IC8qIFBhZ2VTdG9yYWdlU2Vzc2lvblByb3Zp
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBhZ2VTdG9yYWdlU2Vzc2lv
blByb3ZpZGVyLmg7IHBhdGggPSBXZWJDb3JlU3VwcG9ydC9QYWdlU3RvcmFnZVNlc3Npb25Qcm92
aWRlci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC0xOTM1LDYgKzE5MTksOCBA
QAogCQkJCTVDN0U3ODYyMjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTYtbW0ubW0g
Ki8sCiAJCQkJNUM3RTc4NjQyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3VyY2UxNy1tbS5t
bSAqLywKIAkJCQk1QzdFNzg1RTIyRDk1RkUxMDAwNkEyMzAgLyogVW5pZmllZFNvdXJjZTE4LW1t
Lm1tICovLAorCQkJCTVDOTdFRjYxMjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMTkt
bW0ubW0gKi8sCisJCQkJNUM5N0VGNjIyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2Uy
MC1tbS5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gInVuaWZpZWQtc291cmNlcyI7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ1OCwxNiArMzQ0NCwxNSBAQAogCQkJCTVDN0U3ODZG
MjJEOTVGRTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTYtbW0ubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1QzdFNzg3MTIyRDk1RkUyMDAwNkEyMzAgLyogVW5pZmllZFNvdXJjZTE3LW1tLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUM3RTc4NkIyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3Vy
Y2UxOC1tbS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDOTdFRjYzMjM0MkM1MzQwMDYwMjBENCAv
KiBVbmlmaWVkU291cmNlMTktbW0ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Qzk3RUY2NDIzNDJD
NTM0MDA2MDIwRDQgLyogVW5pZmllZFNvdXJjZTIwLW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0VEQTEyREIxNTJDQkU2ODAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzOTgxMTFEMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBcmNoaXZl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQ0YwODI0QkYwMTAwOERGMDM4IC8qIFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwubSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEJDMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTRE
RjVFNTBFQzhEMTA0MDA2QkQ0QjQgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbSBpbiBT
b3VyY2VzICovLAotCQkJCTkzOTgxMEQzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYXNlUGx1Z2lu
UGFja2FnZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUyNDFBREY2MEIxQkM0OEEwMDQwMTJCRCAv
KiBXZWJDYWNoZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0RDgyNTMwMEFGOTU1MDkwMDA0RjA1
NyAvKiBXZWJDaHJvbWVDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2NTE4MjAz
MDBFMDAzNjg4M0EgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTM5ODEwRUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkNsaXBWaWV3Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDY1QUQ1QTQwQjBDMzJDNzAwNUEyQjFEIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkNvcmVT
dGF0aXN0aWNzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMkExQTUxMjNCMEIzQzAwOUZFMTJB
IC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tbSBpbiBTb3VyY2VzICovLApAQCAtMzQ3Niw4ICszNDYx
LDYgQEAKIAkJCQkxQUE4M0Y4MzFBNUM0QUU0MDAwMjZFQzYgLyogV2ViRGF0YWJhc2VQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJCREI1MzFDNDcxNTkxMDA2NDk0REYgLyogV2Vi
RGF0YWJhc2VQcm92aWRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1REVGQzEwMTFENTM0M0Uw
MDg4NTI3MyAvKiBXZWJEYXRhYmFzZVF1b3RhTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTkzOTgxMEVEMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJEYXRhU291cmNlLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJOTM5ODEwRUYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkRlZmF1bHRDb250ZXh0TWVu
dURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMUIwODI0QkYwMTAwOERGMDM4
IC8qIFdlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUubSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMx
RDE5MTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm0gaW4gU291cmNl
cyAqLywKIAkJCQlBMTBDMUQxQjE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZyYW1lTG9h
ZERlbGVnYXRlLm0gaW4gU291cmNlcyAqLywKQEAgLTM0OTcsMTMgKzM0ODAsOSBAQAogCQkJCURE
ODk2ODIxMDlBQTg3MjQwMDk3RTdGMCAvKiBXZWJFbGVtZW50RGljdGlvbmFyeS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUExMEMxRDY5MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGaXhlZFBvc2l0aW9u
Q29udGVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEZDMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJGb3JtRGVsZWdhdGUubSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEYyMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJGcmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMxRDZDMTgyMDMw
MEUwMDM2ODgzQSAvKiBXZWJGcmFtZUlPUy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzMTYzM0VG
MEFFREZGQUUwMDYyQjkyRCAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTkzOTFGMjc2MTIxQjM4QkQwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTM5ODExMDYwODI0QkYwMTAwOERGMDM4IC8qIFdl
YkZyYW1lVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMxRDdGMTgyMDMwM0QwMDM2ODgz
QSAvKiBXZWJGcmFtZVZpZXdXQUtDb21wYXRpYmlsaXR5Lm0gaW4gU291cmNlcyAqLywKLQkJCQlD
REE2MkFFMzEyNUY4N0MyMDA3RkQxMTggLyogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBMTBDMUQ2RTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViR2VvbG9jYXRp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzdGODg0QzEwQzg3NzVBMDBENjEzM0QgLyogV2Vi
R2VvbG9jYXRpb25DbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQzNTE4MjAyRkM1
MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbSBpbiBTb3Vy
Y2VzICovLApAQCAtMzUxMywxMSArMzQ5Miw4IEBACiAJCQkJOTM5ODEwQkQwODI0QkYwMTAwOERG
MDM4IC8qIFdlYkhpc3RvcnlJdGVtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjVGQzAwRURF
M0E5MjAwOEQ4ODNEIC8qIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzOTgxMEYzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MUmVwcmVzZW50YXRp
b24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTBGNDA4MjRCRjAxMDA4REYwMzggLyogV2Vi
SFRNTFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDMTA4MjRCRjAxMDA4REYwMzgg
LyogV2ViSWNvbkRhdGFiYXNlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTMyMUQ1OTQxQTM5MURG
OTAwODA1MkJFIC8qIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBNTYwOTQ2NzE0RDhBRDI2MDA3OTlBOEEgLyogV2ViSW5kaWNhdGVMYXllci5tbSBp
biBTb3VyY2VzICovLAotCQkJCTVEN0JGODE1MEMyQTFEOTAwMDhDRTA2RCAvKiBXZWJJbnNwZWN0
b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNjY5M0RERDBCRkJBODUyMDAyMTYwNzIgLyogV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM3QjBDNjYwRUIyNDY0RDAw
QTI4NTAyIC8qIFdlYkluc3BlY3RvckNsaWVudENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEx
MEMxRDcxMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJJbnNwZWN0b3JDbGllbnRJT1MubW0gaW4gU291
cmNlcyAqLywKQEAgLTM1NjcsMTUgKzM1NDMsMTAgQEAKIAkJCQk5Mzk4MTBEMDA4MjRCRjAxMDA4
REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIubSBpbiBTb3VyY2VzICovLAog
CQkJCTFBQjFGNzZGMUQxQjI2MEIwMDdDOUJEMSAvKiBXZWJQYXltZW50Q29vcmRpbmF0b3JDbGll
bnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0I2RkI0RjEwNjM1MzBDMDAwRkRCM0IgLyogV2Vi
UERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTExRjA4MjRCRjAx
MDA4REYwMzggLyogV2ViUERGUmVwcmVzZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk5
Mzk4MTExRTA4MjRCRjAxMDA4REYwMzggLyogV2ViUERGVmlldy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUExMEMxRDhCMTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3SU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTEwQzFEOEUxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhv
bGRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMEMxRDgyMTgyMDMwM0QwMDM2ODgzQSAvKiBX
ZWJQbGFpbldoaXRlVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTg3OUI3MTFDQkU5QkYw
MDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gaW4gU291cmNlcyAqLywKLQkJCQk5
Mzk4MTEyNjA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2subW0gaW4g
U291cmNlcyAqLywKLQkJCQk5Mzk4MTBEQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luQ29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMERCMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJQbHVnaW5EYXRhYmFzZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMDhGRUUwMUQ1OTM3
NkUwMDhCQThDQiAvKiBXZWJQbHVnaW5JbmZvUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5Mzk4MTBEQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBNzdCMDJGMEVFNzczMDUwMEM4QTFGOSAvKiBXZWJQbHVnaW5SZXF1ZXN0
Lm0gaW4gU291cmNlcyAqLywKQEAgLTM1ODMsMTMgKzM1NTQsOSBAQAogCQkJCTkzOTgxMEY4MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
NkEyMDhEMTg4NjE1NDYwMEU1MEY1RiAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5Mzk4MTExQTA4MjRCRjAxMDA4REYwMzggLyogV2ViUmVzb3VyY2Uu
bW0gaW4gU291cmNlcyAqLywKLQkJCQk3RTZGRUYwOTA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUMwMTY3QkY5MEQ3RjVERDAw
MDI4Njk2RSAvKiBXZWJTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICovLAotCQkJCUMwQjFG
N0U5MTBBQzhFMzEwMEM5MjVEOSAvKiBXZWJTY3JpcHRXb3JsZC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE1REVGQzBBMTFENTMzMUMwMDg4NTI3MyAvKiBXZWJTZWN1cml0eU9yaWdpbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUExMEMxRDc1MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJTZWxlY3Rpb25S
ZWN0Lm0gaW4gU291cmNlcyAqLywKIAkJCQkyREQ2MzJDMzE5RTVEMUYwMDAyRTlDN0IgLyogV2Vi
U2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkyRDI1Mzk2
NzE4Q0U4NUMyMDAyNzAyMjIgLyogV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJM0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3Jh
Z2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1OTFENDUxQTJFOTFCQjAwMDkwN0M0
IC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
QUJCM0M3QjEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQubW0gaW4g
U291cmNlcyAqLywKQEAgLTM2MDQsNyArMzU3MSw2IEBACiAJCQkJNDYxOERGRjkxREVGNzYwQTAw
MzNDM0FBIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzFEODExMjgyMDJDRDgwMDAwRUU3NEY5IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMUQ4MTEyQjIwMkNEQ0M0MDBFRTc0RjkgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTkzOTgxMTA3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMyRTQ2NEUwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQzMEMxMkMxQjJDNURGNzAwREVBMDFEIC8qIFdlYlZpZXdHcm91cC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTBDMUQ3NzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViVmlzaWJsZVBv
c2l0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTA1MjIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MDMgQEAKKzIwMTktMDktMzAgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVbmlmeSBtb3JlIFdl
YktpdExlZ2FjeSBzb3VyY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDIzOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAg
ICAgICAoZGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cGFnZUlE
IGNvbnN0KToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUlEIGNvbnN0KToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjptYWtlUmVwcmVzZW50YXRpb24pOgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0T25SZXN0b3JlRnJvbVBhZ2VD
YWNoZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QpOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6d2lsbENhY2hlUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgpOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAg
ICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSk6CisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKToKKyAgICAg
ICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQp
OgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWQpOgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVhY2hMYXlvdXRNaWxl
c3RvbmUpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRlUGFn
ZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JSZXNwb25zZSk6CisgICAgICAgIChzaG91bGRUcnlBcHBMaW5rKToKKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6
CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KToKKyAgICAgICAgKG1ha2VGb3JtRmllbGRWYWx1ZXNE
aWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxT
dWJtaXRGb3JtKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXZlcnRUb1Byb3Zp
c2lvbmFsU3RhdGUpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1
bWVudEVycm9yKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2Fk
KToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsQ2hhbmdlVGl0bGUpOgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSZXBsYWNlTXVsdGlwYXJ0Q29udGVudCk6CisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5KToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcyk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtIGNvbnN0KToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KToKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQpOgorICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgKFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpibG9ja2VkRXJyb3IpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyRXJyb3IpOgorICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcik6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNs
aWVudDo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6YmxvY2tlZEJ5Q29udGVudEZpbHRlckVycm9yKToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93TUlNRVR5cGVFcnJvcik6CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKToKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRGYWxsQmFjayk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y2FuSGFuZGxlUmVxdWVzdCBjb25zdCk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6c2F2ZVZpZXdTdGF0ZVRvSXRlbSk6CisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6cmVzdG9yZVZpZXdTdGF0ZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNs
aWVudDo6Y3JlYXRlRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzYXZlUGxhdGZv
cm1EYXRhVG9DYWNoZWRGcmFtZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJh
bnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKToKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRVcFBvbGljeUxpc3RlbmVyKToKKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjphY3Rpb25EaWN0aW9uYXJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UgY29uc3QpOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAgICAgIChQbHVnaW5XaWRnZXQ6OlBsdWdpbldpZGdl
dCk6CisgICAgICAgIChQbHVnaW5XaWRnZXQ6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKE5l
dHNjYXBlUGx1Z2luV2lkZ2V0OjpoYW5kbGVFdmVudCk6CisgICAgICAgIChOZXRzY2FwZVBsdWdp
bldpZGdldDo6bm90aWZ5V2lkZ2V0KToKKyAgICAgICAgKHNob3VsZEJsb2NrUGx1Z2luKToKKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKToKKyAgICAgICAgKFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKHNob3Vs
ZEJsb2NrV2ViR0wpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndlYkdMUG9saWN5
Rm9yVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXNvbHZlV2Vi
R0xQb2xpY3lGb3JVUkwgY29uc3QpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlUHJldmlld0xvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Z2V0TG9hZERlY2lzaW9uRm9ySWNvbnMpOgorICAgICAgICAod2ViR2V0
TlNJbWFnZSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5n
SWNvbik6CisgICAgICAgICgtW1dlYkZyYW1lUG9saWN5TGlzdGVuZXIgaW5pdFdpdGhGcmFtZTpp
ZGVudGlmaWVyOnBvbGljeUZ1bmN0aW9uOmRlZmF1bHRQb2xpY3k6XSk6CisgICAgICAgICgtW1dl
YkZyYW1lUG9saWN5TGlzdGVuZXIgaW5pdFdpdGhGcmFtZTppZGVudGlmaWVyOnBvbGljeUZ1bmN0
aW9uOmRlZmF1bHRQb2xpY3k6YXBwTGlua1VSTDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lciBpbnZhbGlkYXRlXSk6CisgICAgICAgICgtW1dlYkZyYW1lUG9saWN5TGlzdGVu
ZXIgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbjpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lciBpZ25vcmVdKToKKyAgICAgICAgKC1bV2ViRnJhbWVQb2xpY3lMaXN0ZW5lciBkb3du
bG9hZF0pOgorICAgICAgICAoLVtXZWJGcmFtZVBvbGljeUxpc3RlbmVyIHVzZV0pOgorICAgICAg
ICAoLVtXZWJGcmFtZVBvbGljeUxpc3RlbmVyIGNvbnRpbnVlXSk6CisgICAgICAgICogV2ViSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIHNob3dXaW5k
b3ddKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGV2YWx1YXRlSW5Gcm9udGVuZDpzY3JpcHQ6
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJDbGlwVmlldy5tbToKKyAgICAgICAgKC1bV2ViQ2xp
cFZpZXcgdmlzaWJsZVJlY3RdKToKKyAgICAgICAgKC1bV2ViQ2xpcFZpZXcgX2ltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJEYXRhU291cmNlLm1tOgorICAg
ICAgICAoLVtXZWJEYXRhU291cmNlIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6XSk6Cisg
ICAgICAgICgtW1dlYkRhdGFTb3VyY2UgX2RvY3VtZW50TG9hZGVyXSk6CisgICAgICAgICgtW1dl
YkRhdGFTb3VyY2UgaW5pdFdpdGhSZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJEYXRhU291cmNl
IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBkYXRhXSk6CisgICAgICAgICgt
W1dlYkRhdGFTb3VyY2Ugd2ViRnJhbWVdKToKKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBpbml0
aWFsUmVxdWVzdF0pOgorICAgICAgICAoLVtXZWJEYXRhU291cmNlIHJlcXVlc3RdKToKKyAgICAg
ICAgKC1bV2ViRGF0YVNvdXJjZSB3ZWJBcmNoaXZlXSk6CisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKGdldFdl
YlZpZXcpOgorICAgICAgICAoK1tXZWJGcmFtZSBfY3JlYXRlRnJhbWVXaXRoUGFnZTpmcmFtZU5h
bWU6ZnJhbWVWaWV3Om93bmVyRWxlbWVudDpdKToKKyAgICAgICAgKCtbV2ViRnJhbWUgX2NyZWF0
ZU1haW5GcmFtZVdpdGhQYWdlOmZyYW1lTmFtZTpmcmFtZVZpZXc6XSk6CisgICAgICAgICgrW1dl
YkZyYW1lIF9jcmVhdGVTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6ZnJhbWVOYW1lOmZyYW1lVmll
dzpdKToKKyAgICAgICAgKCtbV2ViRnJhbWUgX2NyZWF0ZU1haW5GcmFtZVdpdGhTaW1wbGVIVE1M
RG9jdW1lbnRXaXRoUGFnZTpmcmFtZVZpZXc6c3R5bGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
IF9hdHRhY2hTY3JpcHREZWJ1Z2dlcl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfdXBkYXRlQmFj
a2dyb3VuZEFuZFVwZGF0ZXNXaGlsZU9mZnNjcmVlbl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBf
dW5tYXJrQWxsQmFkR3JhbW1hcl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfdW5tYXJrQWxsTWlz
c3BlbGxpbmdzXSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9oYXNTZWxlY3Rpb25dKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX2F0TW9zdE9uZUZyYW1lSGFzU2VsZWN0aW9uXSk6CisgICAgICAgICgt
W1dlYkZyYW1lIF9maW5kRnJhbWVXaXRoU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkZyYW1l
IF9ub2Rlc0Zyb21MaXN0Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nRm9yUmFuZ2U6
XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9wYWludEJlaGF2aW9yRm9yRGVzdGluYXRpb25Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfZ2V0VmlzaWJsZVJlY3Q6XSk6CisgICAgICAgICgtW1dlYkZy
YW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJHZXN0
dXJlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2FyZXRSZWN0QXRQb3NpdGlvbjphZmZpbml0
eTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0p
OgorICAgICAgICAoLVtXZWJGcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpk
aXJlY3Rpb246Z3JhbnVsYXJpdHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25H
cmFudWxhcml0eV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKToK
KyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAoLVtX
ZWJGcmFtZSBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6CisgICAgICAg
ICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpiYXNlVVJMU3Ry
aW5nOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0Fz
UGFyYWdyYXBoczpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Zpc2libGVQb3NpdGlvbkZvclBv
aW50Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBvaW50Ol0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfdHlwaW5nU3R5bGVdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X3NldFR5cGluZ1N0eWxlOndpdGhVbmRvQWN0aW9uOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBf
ZHJhZ1NvdXJjZUVuZGVkQXQ6b3BlcmF0aW9uOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2Fu
UHJvdmlkZURvY3VtZW50U291cmNlXSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9jb21taXREYXRh
Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfaXNEZXNjZW5kYW50T2ZGcmFtZTpdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX2JvZHlCYWNrZ3JvdW5kQ29sb3JdKToKKyAgICAgICAgKC1bV2ViRnJh
bWUgX2lzRnJhbWVTZXRdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2lzVmlzdWFsbHlOb25FbXB0
eV0pOgorICAgICAgICAodG9XZWJGcmFtZUxvYWRUeXBlKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X3JlY3RzRm9yUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZv
ckZpcnN0UG9pbnQ6c2Vjb25kUG9pbnQ6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rp
b25SYW5nZUZvclBvaW50Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2VsZWN0TlNSYW5nZTpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2lzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZV0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfcmVjdXJzaXZlX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRz
Y2FwZVBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlY3Vyc2l2ZV9wYXVzZU51bGxF
dmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2V0VGlt
ZW91dHNQYXVzZWQ6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIHByZXBhcmVGb3JQYXVzZV0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSByZXN1bWVGcm9tUGF1c2VdKToKKyAgICAgICAgKC1bV2ViRnJh
bWUgc2VsZWN0V2l0aG91dENsb3NpbmdUeXBpbmdOU1JhbmdlOl0pOgorICAgICAgICAoLVtXZWJG
cmFtZSBfc2F2ZVZpZXdTdGF0ZV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBkZXZpY2VPcmllbnRh
dGlvbkNoYW5nZWRdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgcmVuZGVyZWRTaXplT2ZOb2RlOmNv
bnN0cmFpbmVkVG9XaWR0aDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZGVlcGVzdE5vZGVBdFZp
ZXdwb3J0TG9jYXRpb246XSk6CisgICAgICAgICgtW1dlYkZyYW1lIHNjcm9sbGFibGVOb2RlQXRW
aWV3cG9ydExvY2F0aW9uOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBhcHByb3hpbWF0ZU5vZGVB
dFZpZXdwb3J0TG9jYXRpb246XSk6CisgICAgICAgICgtW1dlYkZyYW1lIHJldmVhbFNlbGVjdGlv
bkF0RXh0ZW50Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBzZXRDYXJldENvbG9yOl0pOgorICAg
ICAgICAoLVtXZWJGcmFtZSBpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdBbGxvd2VkXSk6CisgICAg
ICAgICgtW1dlYkZyYW1lIGlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWRdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgc2V0U2VsZWN0ZWRET01SYW5nZTphZmZpbml0eTpjbG9zZVR5cGluZzpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0TlNSYW5nZTpvbkVsZW1lbnQ6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lIHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpdKToKKyAgICAgICAg
KC1bV2ViRnJhbWUgc2V0TWFya2VkVGV4dDpmb3JDYW5kaWRhdGVzOl0pOgorICAgICAgICAoLVtX
ZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6YW5kTWV0YWRhdGFzOl0pOgorICAgICAg
ICAoLVtXZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOl0pOgorICAgICAg
ICAoK1tXZWJGcmFtZSBzdHJpbmdXaXRoRGF0YTp0ZXh0RW5jb2RpbmdOYW1lOl0pOgorICAgICAg
ICAoLVtXZWJGcmFtZSBmb250Rm9yU2VsZWN0aW9uOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBf
dXNlclNjcm9sbGVkXSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6c2VsZWN0UmVwbGFjZW1lbnQ6c21hcnRSZXBsYWNlOm1hdGNoU3R5bGU6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lIHJlc2V0VGV4dEF1dG9zaXppbmdCZWZvcmVMYXlvdXRdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3NldFRleHRBdXRvc2l6aW5nV2lkdGg6XSk6CisgICAgICAgICgtW1dl
YkZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OnNlbGVjdFJlcGxhY2VtZW50OnNt
YXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnJlcGxhY2luZ1JhbmdlOmJlZm9y
ZVN0cmluZzphZnRlclN0cmluZzpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhY2hlYWJpbGl0
eURpY3Rpb25hcnldKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9iYWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX2dsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZDpdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgc2V0QWNjZXNzaWJsZU5hbWU6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
IGVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWRdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2V0
RW5oYW5jZWRBY2Nlc3NpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfbGF5ZXJUcmVl
QXNUZXh0XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGFjY2Vzc2liaWxpdHlSb290XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lIF9jbGVhck9wZW5lcl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29t
cHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxlRmFjdG9yOnBhZ2VTaXplOl0pOgorICAgICAgICAo
LVtXZWJGcmFtZSBmb2N1c2VkTm9kZUhhc0NvbnRlbnRdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X2Rpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBqc1dyYXBw
ZXJGb3JOb2RlOmluU2NyaXB0V29ybGQ6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGVsZW1lbnRB
dFBvaW50Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZSBuYW1lXSk6CisgICAgICAgIChuZWVkc01p
Y3Jvc29mdE1lc3NlbmdlckRPTURvY3VtZW50V29ya2Fyb3VuZCk6CisgICAgICAgICgtW1dlYkZy
YW1lIERPTURvY3VtZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGZyYW1lRWxlbWVudF0pOgor
ICAgICAgICAoLVtXZWJGcmFtZSBwcm92aXNpb25hbERhdGFTb3VyY2VdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgZGF0YVNvdXJjZV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBsb2FkUmVxdWVzdDpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2xvYWREYXRhOk1JTUVUeXBlOnRleHRFbmNvZGluZ05h
bWU6YmFzZVVSTDp1bnJlYWNoYWJsZVVSTDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZmluZEZy
YW1lTmFtZWQ6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIHBhcmVudEZyYW1lXSk6CisgICAgICAg
ICgtW1dlYkZyYW1lIGNoaWxkRnJhbWVzXSk6CisgICAgICAgICgtW1dlYkZyYW1lIHdpbmRvd09i
amVjdF0pOgorICAgICAgICAoLVtXZWJGcmFtZSBnbG9iYWxDb250ZXh0XSk6CisgICAgICAgICgt
W1dlYkZyYW1lIGphdmFTY3JpcHRDb250ZXh0XSk6CisgICAgICAgIChkYXRhU291cmNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWVWaWV3IF93ZWJfZnJhbWVdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zZXREb2N1
bWVudFZpZXc6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfdmVydGljYWxQYWdlU2Nyb2xs
RGlzdGFuY2VdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9pbnN0YWxsXSk6CisgICAgICAg
ICgtW1dlYkZyYW1lVmlldyBfZnJhbWVTaXplQ2hhbmdlZF0pOgorICAgICAgICAoLVtXZWJGcmFt
ZVZpZXcgaW5pdFdpdGhGcmFtZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IGRyYXdSZWN0
Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246
Z3JhbnVsYXJpdHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfaXNWZXJ0aWNhbERvY3Vt
ZW50XSk6CisgICAgICAgICgtW1dlYkZyYW1lVmlldyBfaXNGbGlwcGVkRG9jdW1lbnRdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnRdKToKKyAg
ICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0VuZE9mRG9jdW1lbnRdKToKKyAgICAgICAg
KC1bV2ViRnJhbWVWaWV3IF9ob3Jpem9udGFsUGFnZVNjcm9sbERpc3RhbmNlXSk6CisgICAgICAg
ICgtW1dlYkZyYW1lVmlldyBfcGFnZVZlcnRpY2FsbHk6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
VmlldyBfcGFnZUhvcml6b250YWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3Jv
bGxMaW5lVmVydGljYWxseTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxMaW5l
SG9yaXpvbnRhbGx5Ol0pOgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcga2V5RG93bjprZXlEb3du
Ol0pOgorICAgICAgICAoYWRkVHlwZXNGcm9tQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW06CisgICAgICAgIChzY3JlZW5SZWN0T2ZD
b250ZW50cyk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGVsZW1lbnRdKToK
KyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgc2V0RWxlbWVudDpdKToKKyAgICAg
ICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgX2RvY3VtZW50XSk6CisgICAgICAgICgtW1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKHRvQWN0aW9uKToKKyAgICAgICAgKHRvVGFnKToKKyAgICAg
ICAgKC1bTlNWaWV3IF93ZWJfc2V0TmVlZHNEaXNwbGF5SW5SZWN0Ol0pOgorICAgICAgICAocHJv
bWlzZWREYXRhQ2xpZW50KToKKyAgICAgICAgKCtbV2ViSFRNTFZpZXcgX2V4Y2x1ZGVkRWxlbWVu
dHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbl0pOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOmluQ29udGV4dDphbGxvd1BsYWluVGV4
dDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOl0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfcGFzdGVXaXRoUGFzdGVib2FyZDphbGxvd1BsYWlu
VGV4dDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJv
YXJkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc2VsZWN0ZWRSYW5nZV0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnRvUGFz
dGVib2FyZDpjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0
ZU1vdXNlb3ZlcldpdGhFdmVudDpdKToKKyAgICAgICAgKCtbV2ViSFRNTFZpZXcgX2luc2VydGFi
bGVQYXN0ZWJvYXJkVHlwZXNdKToKKyAgICAgICAgKCtbV2ViSFRNTFZpZXcgX3NlbGVjdGlvblBh
c3RlYm9hcmRUeXBlc10pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwYXN0ZWJvYXJkOnByb3Zp
ZGVEYXRhRm9yVHlwZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0U2NhbGU6XSk6Cisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IF9jYW5FZGl0XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9jYW5FZGl0UmljaGx5XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNTZWxlY3Rpb25d
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnRd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hhc0luc2VydGlvblBvaW50XSk6CisgICAgICAg
ICgtW1dlYkhUTUxWaWV3IF9pc0VkaXRhYmxlXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9z
ZWxlY3Rpb25EcmFnZ2luZ0ltYWdlXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbnNlcnRP
cmRlcmVkTGlzdF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaW5zZXJ0VW5vcmRlcmVkTGlz
dF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2NhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxP
cmRlcmVkXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9pbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbFVub3JkZXJlZF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3dyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0OnN1YnJlc291cmNlczpdKToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX2JlZ2luUHJpbnRNb2RlV2l0aE1pbmltdW1QYWdlV2lkdGg6aGVpZ2h0
Om1heGltdW1QYWdlV2lkdGg6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9iZWdpblByaW50
TW9kZVdpdGhQYWdlV2lkdGg6aGVpZ2h0OnNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfYmVnaW5TY3JlZW5QYWdpbmF0aW9uTW9kZVdpdGhQYWdlU2l6ZTpzaHJpbmtUb0Zp
dDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2FkanVzdGVkQm90dG9tT2ZQYWdlV2l0aFRv
cDpib3R0b206bGltaXQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNvcmVDb21tYW5kQnlT
ZWxlY3RvcjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY29yZUNvbW1hbmRCeU5hbWU6XSk6
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6cmV0dXJu
VHlwZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcganVtcFRvU2VsZWN0aW9uOl0pOgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVn
YXRlOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlv
bl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyByZWFwcGx5U3R5bGVzXSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDpoZWlnaHQ6b3JpZ2luYWxQYWdl
V2lkdGg6b3JpZ2luYWxQYWdlSGVpZ2h0Om1heGltdW1TaHJpbmtSYXRpbzphZGp1c3RpbmdWaWV3
U2l6ZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmlnaHRNb3VzZVVwOl0pOgorICAgICAg
ICAoZml4TWVudXNSZWNlaXZlZEZyb21PbGRDbGllbnRzKToKKyAgICAgICAgKGNyZWF0ZVNoYXJl
TWVudUl0ZW0pOgorICAgICAgICAoY3JlYXRlTWVudUl0ZW0pOgorICAgICAgICAoY3JlYXRlTWVu
dUl0ZW1zKToKKyAgICAgICAgKGN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgbWVudUZvckV2ZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBj
bGVhckZvY3VzXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNldExheWVyOl0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBzZXROZWVkc0xheW91dDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaW52
YWxpZGF0ZUdTdGF0ZXNGb3JUcmVlXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNjcm9sbFdo
ZWVsOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhY2NlcHRzRmlyc3RNb3VzZTpdKToKKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50Ol0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHRvdWNoOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZURyYWdnZWQ6XSk6
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza0Zvckxv
Y2FsOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBkcmFnZ2VkSW1hZ2U6ZW5kZWRBdDpvcGVy
YXRpb246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IG5hbWVzT2ZQcm9taXNlZEZpbGVzRHJv
cHBlZEF0RGVzdGluYXRpb246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGRyYWdnaW5nU2Vz
c2lvbjpzb3VyY2VPcGVyYXRpb25NYXNrRm9yRHJhZ2dpbmdDb250ZXh0Ol0pOgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBkcmFnZ2luZ1Nlc3Npb246ZW5kZWRBdFBvaW50Om9wZXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91c2VVcDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6XSk6CisgICAgICAgIChpc1RleHRJbnB1dCk6Cisg
ICAgICAgIChpc0luUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChjdXJyZW50S2V5Ym9hcmRFdmVu
dCk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGJlY29tZUZpcnN0UmVzcG9uZGVyXSk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXSk6CisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9zZXRQcmludGluZzptaW5pbXVtUGFnZUxvZ2ljYWxXaWR0aDpsb2dpY2FsSGVp
Z2h0Om9yaWdpbmFsUGFnZVdpZHRoOm9yaWdpbmFsUGFnZUhlaWdodDptYXhpbXVtU2hyaW5rUmF0
aW86YWRqdXN0Vmlld1NpemU6cGFnaW5hdGVTY3JlZW5Db250ZW50Ol0pOgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcga2V5RG93bjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcga2V5VXA6XSk6
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGZsYWdzQ2hhbmdlZDpdKToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTpdKToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURl0pOgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmRdKToKKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjp3aXRoVW5kb0FjdGlvbjpd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2FwcGx5RWRpdGluZ1N0eWxlVG9TZWxlY3Rpb246
d2l0aFVuZG9BY3Rpb246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHBlcmZvcm1LZXlFcXVp
dmFsZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBjb3B5Rm9udDpdKToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgcGFzdGVGb250Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBjaGFu
Z2VGb250Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBjaGFuZ2VBdHRyaWJ1dGVzOl0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVj
dG9yOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVj
dG9yOmluUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNoYW5nZUNvbG9yOl0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBjaGVja1NwZWxsaW5nOl0pOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBzaG93R3Vlc3NQYW5lbDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgdG9nZ2xl
QmFzZVdyaXRpbmdEaXJlY3Rpb246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNoYW5nZUJh
c2VXcml0aW5nRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfY2hhbmdlQmFz
ZVdyaXRpbmdEaXJlY3Rpb25UbzpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZUNv
bnRyb2xUaW50c10pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlRm9udFBhbmVsXSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IF9jYW5TbWFydENvcHlPckRlbGV0ZV0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6XSk6CisgICAgICAgICgtW1dlYkhUTUxW
aWV3IHF1aWNrTG9va1dpdGhFdmVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2V4ZWN1
dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2ludGVy
cHJldEtleUV2ZW50OnNhdmluZ0NvbW1hbmRzOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
aGFuZGxlRWRpdGluZ0tleUV2ZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfd2ViX3Vw
ZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmVdKToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6XSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IGhhc01hcmtlZFRleHRdKToKKyAgICAgICAgKGV4dHJhY3RVbmRlcmxpbmVz
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOl0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVj
dGlvblRleHRSZWN0c10pOgorICAgICAgICAoaW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChzZWxl
Y3Rpb25JbWFnZSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGlvbkltYWdlRm9yY2lu
Z0JsYWNrVGV4dDpzZWxlY3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6XSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IHNlbGVjdEFsbF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBkZXNlbGVj
dEFsbF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zy
b206b2Zmc2V0OnRvOm9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRl
ZFN0cmluZ10pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJp
bmddKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZWxlbWVudEF0UG9pbnQ6YWxsb3dTaGFkb3dD
b250ZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBjb3VudE1hdGNoZXNGb3JUZXh0Omlu
RE9NUmFuZ2U6b3B0aW9uczpsaW1pdDptYXJrTWF0Y2hlczpdKToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZF0pOgorICAgICAgICAo
LVtXZWJIVE1MVmlldyB1bm1hcmtBbGxUZXh0TWF0Y2hlc10pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyByZWN0c0ZvclRleHRNYXRjaGVzXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9maW5k
U3RyaW5nOm9wdGlvbnM6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIHdl
YlZpZXc6ZGlkSGFuZGxlU2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIgX2NhbmNlbEltbWVkaWF0ZUFjdGlvbl0pOgorICAgICAgICAoLVtXZWJJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIHBlcmZvcm1IaXRUZXN0QXRQb2ludDpdKToKKyAgICAg
ICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBpbW1lZGlhdGVBY3Rpb25SZWNvZ25p
emVyRGlkVXBkYXRlQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDYW5jZWxBbmltYXRpb246XSk6
CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1tZWRpYXRlQWN0aW9u
UmVjb2duaXplckRpZENvbXBsZXRlQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyIF9kZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcl0pOgorICAgICAg
ICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25J
dGVtXSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgbWVudUl0ZW1E
aWRDbG9zZTpdKToKKyAgICAgICAgKGVsZW1lbnRCb3VuZGluZ0JveEluV2luZG93Q29vcmRpbmF0
ZXNGcm9tTm9kZSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgbWVu
dUl0ZW06aXRlbUZyYW1lRm9yUG9pbnQ6XSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlv
bkNvbnRyb2xsZXIgbWVudUl0ZW06bWF4U2l6ZUZvclBvaW50Ol0pOgorICAgICAgICAoLVtXZWJJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVj
dGVkVGV4dF0pOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9hbmlt
YXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkTGlua10pOgorICAgICAgICAoK1tXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFt
ZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAg
ICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2FuaW1hdGlvbkNvbnRyb2xsZXJG
b3JUZXh0XSk6CisgICAgICAgICogV2ViVmlldy9XZWJQREZWaWV3Lm1tOgorICAgICAgICAoaXNG
cmFtZUluUmFuZ2UpOgorICAgICAgICAoLVtXZWJQREZWaWV3IHBhc3RlYm9hcmRUeXBlc0ZvclNl
bGVjdGlvbl0pOgorICAgICAgICAoLVtXZWJQREZWaWV3IHdyaXRlU2VsZWN0aW9uV2l0aFBhc3Rl
Ym9hcmRUeXBlczp0b1Bhc3RlYm9hcmQ6XSk6CisgICAgICAgICgtW1dlYlBERlZpZXcgUERGVmll
d1dpbGxDbGlja09uTGluazp3aXRoVVJMOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
Lm1tOgorICAgICAgICAodG9OU1N0cmluZyk6CisgICAgICAgICh0b1dlYkZyYW1lKToKKyAgICAg
ICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1Z2dlcik6CisgICAgICAgIChXZWJT
Y3JpcHREZWJ1Z2dlcjo6c291cmNlUGFyc2VkKToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2Vy
OjpoYW5kbGVQYXVzZSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5tbToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0V29ybGQgaW5pdFdpdGhXb3JsZDpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0V29ybGQgaW5pdF0pOgorICAgICAgICAoK1tXZWJTY3JpcHRXb3JsZCBzdGFuZGFyZFdv
cmxkXSk6CisgICAgICAgICgrW1dlYlNjcmlwdFdvcmxkIHNjcmlwdFdvcmxkRm9yR2xvYmFsQ29u
dGV4dDpdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoK1tXZWJTY3JpcHRXb3JsZCBmaW5k
T3JDcmVhdGVXb3JsZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
IChjb3JlT3B0aW9ucyk6CisgICAgICAgIChjb3JlTGF5b3V0TWlsZXN0b25lcyk6CisgICAgICAg
IChraXRMYXlvdXRNaWxlc3RvbmVzKToKKyAgICAgICAgKGtpdCk6CisgICAgICAgIChXZWJLaXQ6
OkRlZmVycmVkUGFnZURlc3RydWN0b3I6OmNyZWF0ZURlZmVycmVkUGFnZURlc3RydWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpEZWZlcnJlZFBhZ2VEZXN0cnVjdG9yOjpEZWZlcnJlZFBhZ2VEZXN0
cnVjdG9yKToKKyAgICAgICAgKC1bV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBpbml0V2l0aEltYWdl
OnRleHRJbmRpY2F0b3JEYXRhOnNjYWxlOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zdGFuZGFy
ZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWU6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX3Jl
cG9ydEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgIChzaG91bGRFbmFibGVMb2FkRGVm
ZXJyaW5nKToKKyAgICAgICAgKHNob3VsZFJlc3RyaWN0V2luZG93Rm9jdXMpOgorICAgICAgICAo
bmVlZHNPdXRsb29rUXVpcmtzU2NyaXB0KToKKyAgICAgICAgKC1bV2ViVmlldyBfaW5qZWN0T3V0
bG9va1F1aXJrc1NjcmlwdF0pOgorICAgICAgICAoc2hvdWxkVXNlTGVnYWN5QmFja2dyb3VuZFNp
emVTaG9ydGhhbmRCZWhhdmlvcik6CisgICAgICAgIChzaG91bGRBbGxvd1dpbmRvd09wZW5XaXRo
b3V0VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0SW5pdGlhbGl6ZUdhbWVwYWRQcm92aWRl
cklmTmVjZXNzYXJ5KToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25X
aXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBpbml0U2ltcGxl
SFRNTERvY3VtZW50V2l0aFN0eWxlOmZyYW1lOnByZWZlcmVuY2VzOmdyb3VwTmFtZTpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBfcmVwbGFjZUN1cnJlbnRIaXN0b3J5SXRlbTpdKToKKyAgICAgICAg
KC1bV2ViVmlldyB1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVTaGVldHNdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBfcmVxdWVzdFN0YXJ0RGF0YUludGVyYWN0aW9uOmdsb2JhbFBvc2l0aW9u
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF9zdGFydERyYWc6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgZHJhZ0RhdGFGb3JTZXNzaW9uOmNsaWVudDpnbG9iYWw6b3BlcmF0aW9uOl0pOgorICAgICAg
ICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6CisgICAgICAgICgrW1dlYlZpZXcg
X3NldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoOl0pOgorICAgICAgICAoK1tXZWJWaWV3
IGNhbkNsb3NlQWxsV2ViVmlld3NdKToKKyAgICAgICAgKCtbV2ViVmlldyBjbG9zZUFsbFdlYlZp
ZXdzXSk6CisgICAgICAgICgtW1dlYlZpZXcgX2Rpc3BhdGNoVW5sb2FkRXZlbnRdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBzdHlsZUF0U2VsZWN0aW9uU3RhcnRdKToKKyAgICAgICAgKC1bV2ViVmll
dyBfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29taW5nXSk6CisgICAgICAgICgtW1dlYlZpZXcgX2Ns
b3NlXSk6CisgICAgICAgICgtW1dlYlZpZXcgX2lzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlXSk6Cisg
ICAgICAgICgrW1dlYlZpZXcgX2VuYWJsZVJlbW90ZUluc3BlY3Rvcl0pOgorICAgICAgICAoK1tX
ZWJWaWV3IF9kaXNhYmxlUmVtb3RlSW5zcGVjdG9yXSk6CisgICAgICAgICgrW1dlYlZpZXcgX2Rp
c2FibGVBdXRvU3RhcnRSZW1vdGVJbnNwZWN0b3JdKToKKyAgICAgICAgKCtbV2ViVmlldyBfaXNS
ZW1vdGVJbnNwZWN0b3JFbmFibGVkXSk6CisgICAgICAgICgrW1dlYlZpZXcgX2hhc1JlbW90ZUlu
c3BlY3RvclNlc3Npb25dKToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0SG9zdEFwcGxpY2F0aW9u
UHJvY2Vzc0lkZW50aWZpZXI6YXVkaXRUb2tlbjpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfbG9h
ZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX25l
ZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzXSk6CisgICAgICAgIChuZWVkc1Nl
bGZSZXRhaW5XaGlsZUxvYWRpbmdRdWlyayk6CisgICAgICAgICgtW1dlYlZpZXcgX25lZWRzUHJl
SFRNTDVQYXJzZXJRdWlya3NdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFu
Z2VkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jYWNoZUZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25zXSk6CisgICAgICAgICgrW1dlYlZpZXcgX3VucmVnaXN0ZXJWaWV3Q2xhc3NBbmRS
ZXByZXNlbnRhdGlvbkNsYXNzRm9yTUlNRVR5cGU6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX3Jl
Z2lzdGVyVmlld0NsYXNzOnJlcHJlc2VudGF0aW9uQ2xhc3M6Zm9yVVJMU2NoZW1lOl0pOgorICAg
ICAgICAoK1tXZWJWaWV3IF9kZWNvZGVEYXRhOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jaGVj
a0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb25dKToKKyAgICAgICAgKC1bV2ViVmlldyBfY2FjaGVk
UmVzcG9uc2VGb3JVUkw6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX3NldFNob3VsZFVzZUZvbnRT
bW9vdGhpbmc6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmdd
KToKKyAgICAgICAgKCtbV2ViVmlldyBfc2V0VXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3I6XSk6
CisgICAgICAgICgrW1dlYlZpZXcgX3VzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yXSk6CisgICAg
ICAgICgtW1dlYlZpZXcgc2V0QWx3YXlzU2hvd1ZlcnRpY2FsU2Nyb2xsZXI6XSk6CisgICAgICAg
ICgtW1dlYlZpZXcgYWx3YXlzU2hvd1ZlcnRpY2FsU2Nyb2xsZXJdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBzZXRBbHdheXNTaG93SG9yaXpvbnRhbFNjcm9sbGVyOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IHNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGluZzpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBhbHdheXNTaG93SG9yaXpvbnRhbFNjcm9sbGVyXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3Nl
dE1lZGlhTGF5ZXI6Zm9yUGx1Z2luVmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfYXR0YWNo
U2NyaXB0RGVidWdnZXJUb0FsbEZyYW1lc10pOgorICAgICAgICAoLVtXZWJWaWV3IF9kZXRhY2hT
Y3JpcHREZWJ1Z2dlckZyb21BbGxGcmFtZXNdKToKKyAgICAgICAgKCtbV2ViVmlldyBfcHJvZHVj
dGl2aXR5RG9jdW1lbnRNSU1FVHlwZXNdKToKKyAgICAgICAgKC1bV2ViVmlldyBfc2V0Rml4ZWRM
YXlvdXRTaXplOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9zeW5jaHJvbml6ZUN1c3RvbUZpeGVk
UG9zaXRpb25MYXlvdXRSZWN0XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3ZpZXdHZW9tZXRyeURp
ZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJWaWV3IF9vdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hh
bmdlZFRvOmZvck5vZGU6aXNVc2VyU2Nyb2xsOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9kb05v
dFN0YXJ0T2JzZXJ2aW5nTmV0d29ya1JlYWNoYWJpbGl0eV0pOgorICAgICAgICAoLVtXZWJWaWV3
IF90b3VjaEV2ZW50UmVnaW9uc10pOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRJdGVyYXRvckZv
clJlY3Q6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTp2
YWx1ZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmddKToKKyAgICAgICAgKC1bV2ViVmlldyBfaXNTb2Z0d2FyZVJlbmRlcmFibGVdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBzZXRUcmFja3NSZXBhaW50czpdKToKKyAgICAgICAgKC1bV2ViVmlldyBp
c1RyYWNraW5nUmVwYWludHNdKToKKyAgICAgICAgKC1bV2ViVmlldyByZXNldFRyYWNrZWRSZXBh
aW50c10pOgorICAgICAgICAoLVtXZWJWaWV3IHRyYWNrZWRSZXBhaW50UmVjdHNdKToKKyAgICAg
ICAgKCtbV2ViVmlldyBfYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNlT3Jp
Z2luOmRlc3RpbmF0aW9uUHJvdG9jb2w6ZGVzdGluYXRpb25Ib3N0OmFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9yZW1vdmVPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeVdpdGhTb3VyY2VPcmlnaW46ZGVzdGluYXRpb25Qcm90b2NvbDpkZXN0aW5hdGlv
bkhvc3Q6YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6XSk6CisgICAgICAgICgrW1dlYlZpZXcg
X3Jlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0c10pOgorICAgICAgICAoK1tXZWJWaWV3IF9hZGRV
c2VyU2NyaXB0VG9Hcm91cDp3b3JsZDpzb3VyY2U6dXJsOndoaXRlbGlzdDpibGFja2xpc3Q6aW5q
ZWN0aW9uVGltZTppbmplY3RlZEZyYW1lczpdKToKKyAgICAgICAgKCtbV2ViVmlldyBfYWRkVXNl
clN0eWxlU2hlZXRUb0dyb3VwOndvcmxkOnNvdXJjZTp1cmw6d2hpdGVsaXN0OmJsYWNrbGlzdDpp
bmplY3RlZEZyYW1lczpdKToKKyAgICAgICAgKC1bV2ViVmlldyBhbGxvd3NOZXdDU1NBbmltYXRp
b25zV2hpbGVTdXNwZW5kZWRdKToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRBbGxvd3NOZXdDU1NB
bmltYXRpb25zV2hpbGVTdXNwZW5kZWQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgY3NzQW5pbWF0
aW9uc1N1c3BlbmRlZF0pOgorICAgICAgICAoLVtXZWJWaWV3IHNldENTU0FuaW1hdGlvbnNTdXNw
ZW5kZWQ6XSk6CisgICAgICAgICgrW1dlYlZpZXcgX3NldERvbWFpblJlbGF4YXRpb25Gb3JiaWRk
ZW46Zm9yVVJMU2NoZW1lOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9yZWdpc3RlclVSTFNjaGVt
ZUFzU2VjdXJlOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9yZWdpc3RlclVSTFNjaGVtZUFzQWxs
b3dpbmdEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IF9zY2FsZVdlYlZpZXc6YXRPcmlnaW46XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFVz
ZUZpeGVkTGF5b3V0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF91c2VGaXhlZExheW91dF0pOgor
ICAgICAgICAoLVtXZWJWaWV3IF9maXhlZExheW91dFNpemVdKToKKyAgICAgICAgKC1bV2ViVmll
dyBfc2V0UGFnaW5hdGlvbk1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3BhZ2luYXRpb25N
b2RlXSk6CisgICAgICAgICgtW1dlYlZpZXcgX2xpc3RlbkZvckxheW91dE1pbGVzdG9uZXM6XSk6
CisgICAgICAgICgtW1dlYlZpZXcgX2xheW91dE1pbGVzdG9uZXNdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uc10pOgorICAgICAgICAoLVtXZWJWaWV3
IF9zZXRQYWdlTGVuZ3RoOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9wYWdlTGVuZ3RoXSk6Cisg
ICAgICAgICgtW1dlYlZpZXcgX3NldEdhcEJldHdlZW5QYWdlczpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfZ2FwQmV0d2VlblBhZ2VzXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFBhZ2luYXRp
b25MaW5lR3JpZEVuYWJsZWQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3BhZ2luYXRpb25MaW5l
R3JpZEVuYWJsZWRdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcGFnZUNvdW50XSk6CisgICAgICAg
ICgrW1dlYlZpZXcgX0hUVFBQaXBlbGluaW5nRW5hYmxlZF0pOgorICAgICAgICAoK1tXZWJWaWV3
IF9zZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2hvdWxk
UmVxdWVzdENhbmRpZGF0ZXNdKToKKyAgICAgICAgKC1bV2ViVmlldyByZW1vdmVQbHVnaW5JbnN0
YW5jZVZpZXdzRm9yOl0pOgorICAgICAgICAoK1tXZWJWaWV3IHJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBkb1dpbmRvd0RpZENoYW5nZVNjcmVlbl0pOgor
ICAgICAgICAoLVtXZWJWaWV3IF91cGRhdGVTY3JlZW5TY2FsZUZyb21XaW5kb3ddKToKKyAgICAg
ICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJdGVtOl0pOgorICAgICAgICAoLVtXZWJWaWV3
IF9zZXRab29tTXVsdGlwbGllcjppc1RleHRPbmx5Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IHNl
dEN1c3RvbVRleHRFbmNvZGluZ05hbWU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgd2luZG93U2Ny
aXB0T2JqZWN0XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2V0SG9zdFdpbmRvdzpdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBhcHBsaWNhdGlvbkZsYWdzOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGFj
dGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86XSk6CisgICAgICAgICgtW1dlYlZpZXcgZHJhZ2dpbmdF
bnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAg
ICAgKC1bV2ViVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBwZXJm
b3JtRHJhZ09wZXJhdGlvbjpdKToKKyAgICAgICAgKGluY3JlbWVudEZyYW1lKToKKyAgICAgICAg
KCtbV2ViVmlldyByZWdpc3RlclZpZXdDbGFzczpyZXByZXNlbnRhdGlvbkNsYXNzOmZvck1JTUVU
eXBlOl0pOgorICAgICAgICAoLVtXZWJWaWV3IG1vdmVEcmFnQ2FyZXRUb1BvaW50Ol0pOgorICAg
ICAgICAoLVtXZWJWaWV3IHJlbW92ZURyYWdDYXJldF0pOgorICAgICAgICAoLVtXZWJWaWV3IG1h
aW5GcmFtZUljb25VUkxdKToKKyAgICAgICAgKGNvcmVUZXh0Q2hlY2tpbmdUeXBlKToKKyAgICAg
ICAgKHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVja2luZ1Jlc3VsdCk6CisgICAgICAg
ICgtW1dlYlZpZXcgY2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTplbmRTZWxlY3RpbmdDYW5kaWRh
dGVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RUb3VjaEJhckl0
ZW06Y2hhbmdlZENhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5Ol0pOgorICAgICAgICAoLVtXZWJWaWV3
IHNob3VsZENsb3NlXSk6CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisgICAgICAgICgt
W1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAg
ICAgICgtW1dlYlZpZXcgZWRpdGFibGVET01SYW5nZUZvclBvaW50Ol0pOgorICAgICAgICAoLVtX
ZWJWaWV3IHNldFNlbGVjdGVkRE9NUmFuZ2U6YWZmaW5pdHk6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgc2VsZWN0ZWRET01SYW5nZV0pOgorICAgICAgICAoLVtXZWJWaWV3IHNlbGVjdGlvbkFmZmlu
aXR5XSk6CisgICAgICAgICgtW1dlYlZpZXcgc2V0RWRpdGFibGU6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgc2V0VHlwaW5nU3R5bGU6XSk6CisgICAgICAgICgtW1dlYlZpZXcgZGVsZXRlU2VsZWN0
aW9uXSk6CisgICAgICAgICgtW1dlYlZpZXcgYXBwbHlTdHlsZTpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBpbnNlcnREaWN0YXRpb25QaHJhc2VzOm1ldGFkYXRhOl0pOgorICAgICAgICAoLVtXZWJW
aWV3IF9zZWxlY3Rpb25Jc0NhcmV0XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NlbGVjdGlvbklz
QWxsXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NpbXBsaWZ5TWFya3VwOmVuZE5vZGU6XSk6Cisg
ICAgICAgICgrW1dlYlZpZXcgX3NldENhY2hlTW9kZWw6XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X3NlYXJjaFdpdGhHb29nbGVGcm9tTWVudTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfcmV0cmll
dmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczpdKToKKyAgICAgICAgKC1bV2ViVmlldyBf
a2V5Ym9hcmRVSU1vZGVdKToKKyAgICAgICAgKC1bV2ViVmlldyBfbWFpbkNvcmVGcmFtZV0pOgor
ICAgICAgICAoLVtXZWJWaWV3IF9jbGVhckNyZWRlbnRpYWxzXSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX2ZsdXNoQ29tcG9zaXRpbmdDaGFuZ2VzXSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NjaGVk
dWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdUaWxlQ2FjaGVSZXBhaW50XSk6CisgICAgICAgICgtW1dl
YlZpZXcgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNJbnRlcmZhY2VdKToKKyAgICAgICAgKC1b
V2ViVmlldyBfc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlckZvck1lZGlhRWxlbWVudDpdKToK
KyAgICAgICAgKC1bV2ViVmlldyBoYW5kbGVBY2NlcHRlZEFsdGVybmF0aXZlVGV4dDpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBfZ2V0V2ViQ29yZURpY3RhdGlvbkFsdGVybmF0aXZlczpmcm9tVGV4
dEFsdGVybmF0aXZlczpdKToKKyAgICAgICAgKC1bV2ViVmlldyBfYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRpY3Rpb25hcnlMb29rdXBQb3B1cEluZm86XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3Nl
dFRleHRJbmRpY2F0b3I6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3I6
d2l0aExpZmV0aW1lOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JX
aXRoQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9zaG93RGljdGlvbmFyeUxvb2t1
cFBvcHVwOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWN0aW9uYXJ5TG9va3VwUG9wb3Zlcldp
bGxDbG9zZTpdKToKKyAgICAgICAgKC1bV2ViVmlldyBzaG93Rm9ybVZhbGlkYXRpb25NZXNzYWdl
OndpdGhBbmNob3JSZWN0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IHRleHRUb3VjaEJhcl0pOgor
ICAgICAgICAobnNUZXh0QWxpZ25tZW50RnJvbVJlbmRlclN0eWxlKToKKyAgICAgICAgKC1bV2Vi
VmlldyB1cGRhdGVUZXh0VG91Y2hCYXJdKToKKyAgICAgICAgKC1bV2ViVmlldyB1cGRhdGVUb3Vj
aEJhcl0pOgorICAgICAgICAoLVtXZWJWaWV3IGNhbmRpZGF0ZUxpc3RdKToKKyAgICAgICAgKC1b
V2ViVmlldyBfZ2VvbG9jYXRpb25EaWRGYWlsV2l0aE1lc3NhZ2U6XSk6CisgICAgICAgICgtW1dl
YlZpZXcgX3Jlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uXSk6CisgICAgICAgICgtW1dlYlZp
ZXcgX25vdGlmaWNhdGlvbklERm9yVGVzdGluZzpdKToKKwogMjAxOS0wOS0yNSAgTWVnYW4gR2Fy
ZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBzZWxlY3Rp
b25zIGFmdGVyIHNjcm9sbGluZyBmb3IgaWZyYW1lcyBhbmQgaGlkZSBzZWxlY3Rpb25zIHdoaWxl
IGlmcmFtZXMgYW5kIG92ZXJmbG93IHNjcm9sbHMgYXJlIHNjcm9sbGluZy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAyNTA1MjIpCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTY2LDkgKzE2Niw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BvbGljeUNoZWNr
ZXIuaD4KICNlbmRpZgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogQGludGVyZmFjZSBXZWJI
VE1MVmlldyAoSW5pdCkKIC0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZTsKQEAgLTE4
MSwyNSArMTc4LDI1IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5BdHRyaWJ1dGVzS2V5ID0gQCJXZWIK
IE5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJLZXkgPSBAIldlYlBsdWdpbkNvbnRhaW5lciI7
CiAKIEBpbnRlcmZhY2UgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lciA6IE5TT2JqZWN0IDxXZWJQb2xp
Y3lEZWNpc2lvbkxpc3RlbmVyLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyPiB7Ci0gICAgUmVm
UHRyPEZyYW1lPiBfZnJhbWU7Ci0gICAgUG9saWN5Q2hlY2tJZGVudGlmaWVyIF9pZGVudGlmaWVy
OwotICAgIEZyYW1lUG9saWN5RnVuY3Rpb24gX3BvbGljeUZ1bmN0aW9uOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpGcmFtZT4gX2ZyYW1lOworICAgIFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmll
ciBfaWRlbnRpZmllcjsKKyAgICBXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uIF9wb2xpY3lG
dW5jdGlvbjsKICNpZiBIQVZFKEFQUF9MSU5LUykKICAgICBSZXRhaW5QdHI8TlNVUkw+IF9hcHBM
aW5rVVJMOwogI2VuZGlmCi0gICAgUG9saWN5QWN0aW9uIF9kZWZhdWx0UG9saWN5OworICAgIFdl
YkNvcmU6OlBvbGljeUFjdGlvbiBfZGVmYXVsdFBvbGljeTsKIH0KIAotLSAoaWQpaW5pdFdpdGhG
cmFtZTooRnJhbWUqKWZyYW1lIGlkZW50aWZpZXI6KFBvbGljeUNoZWNrSWRlbnRpZmllcilpZGVu
dGlmaWVyIHBvbGljeUZ1bmN0aW9uOihGcmFtZVBvbGljeUZ1bmN0aW9uJiYpcG9saWN5RnVuY3Rp
b24gZGVmYXVsdFBvbGljeTooUG9saWN5QWN0aW9uKWRlZmF1bHRQb2xpY3k7CistIChpZClpbml0
V2l0aEZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgaWRlbnRpZmllcjooV2ViQ29yZTo6UG9s
aWN5Q2hlY2tJZGVudGlmaWVyKWlkZW50aWZpZXIgcG9saWN5RnVuY3Rpb246KFdlYkNvcmU6OkZy
YW1lUG9saWN5RnVuY3Rpb24mJilwb2xpY3lGdW5jdGlvbiBkZWZhdWx0UG9saWN5OihXZWJDb3Jl
OjpQb2xpY3lBY3Rpb24pZGVmYXVsdFBvbGljeTsKICNpZiBIQVZFKEFQUF9MSU5LUykKLS0gKGlk
KWluaXRXaXRoRnJhbWU6KEZyYW1lKilmcmFtZSBpZGVudGlmaWVyOihQb2xpY3lDaGVja0lkZW50
aWZpZXIpaWRlbnRpZmllciBwb2xpY3lGdW5jdGlvbjooRnJhbWVQb2xpY3lGdW5jdGlvbiYmKXBv
bGljeUZ1bmN0aW9uIGRlZmF1bHRQb2xpY3k6KFBvbGljeUFjdGlvbilkZWZhdWx0UG9saWN5IGFw
cExpbmtVUkw6KE5TVVJMICopdXJsOworLSAoaWQpaW5pdFdpdGhGcmFtZTooV2ViQ29yZTo6RnJh
bWUqKWZyYW1lIGlkZW50aWZpZXI6KFdlYkNvcmU6OlBvbGljeUNoZWNrSWRlbnRpZmllcilpZGVu
dGlmaWVyIHBvbGljeUZ1bmN0aW9uOihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uJiYpcG9s
aWN5RnVuY3Rpb24gZGVmYXVsdFBvbGljeTooV2ViQ29yZTo6UG9saWN5QWN0aW9uKWRlZmF1bHRQ
b2xpY3kgYXBwTGlua1VSTDooTlNVUkwgKil1cmw7CiAjZW5kaWYKIAogLSAodm9pZClpbnZhbGlk
YXRlOwogCiBAZW5kCiAKLXN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShE
b2N1bWVudExvYWRlciogbG9hZGVyKQorc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRh
U291cmNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgcmV0dXJuIGxv
YWRlciA/IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyTWFjKj4obG9hZGVyKS0+ZGF0YVNv
dXJjZSgpIDogbmlsOwogfQpAQCAtMjA5LDEyICsyMDYsMTIgQEAgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OldlYkZyYW1lTG9hZGVyQ2xpZQogewogfQogCi1PcHRpb25hbDxQYWdlSWRlbnRpZmllcj4g
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBhZ2VJRCgpIGNvbnN0CitPcHRpb25hbDxXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllcj4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBhZ2VJRCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZnJhbWVJRCgpIGNvbnN0CitPcHRpb25hbDxXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXI+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUlEKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtMjMwLDcgKzIyNyw3IEBAIGJvb2wgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6Omhhc1dlYlZpZXcoKSAKICAgICByZXR1cm4gW21fd2ViRnJhbWUu
Z2V0KCkgd2ViVmlld10gIT0gbmlsOwogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpt
YWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6Om1ha2VSZXByZXNlbnRhdGlvbihXZWJDb3JlOjpEb2N1bWVudExvYWRlciog
bG9hZGVyKQogewogICAgIFtkYXRhU291cmNlKGxvYWRlcikgX21ha2VSZXByZXNlbnRhdGlvbl07
CiB9CkBAIC0yNTAsOSArMjQ3LDkgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VM
YXlvdXRPbgogICAgIC8vIGxheW91dCBzZXR0aW5ncyBoZXJlLgogICAgIFdlYlZpZXcqIHdlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIGJvb2wgaXNNYWluRnJhbWUg
PSBbd2ViVmlldyBtYWluRnJhbWVdID09IG1fd2ViRnJhbWUuZ2V0KCk7Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgYXV0byogY29yZUZyYW1lID0g
Y29yZShtX3dlYkZyYW1lLmdldCgpKTsKICAgICBpZiAoaXNNYWluRnJhbWUgJiYgY29yZUZyYW1l
LT52aWV3KCkpIHsKLSAgICAgICAgSW50U2l6ZSBuZXdTaXplKFt3ZWJWaWV3IF9maXhlZExheW91
dFNpemVdKTsKKyAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBuZXdTaXplKFt3ZWJWaWV3IF9maXhl
ZExheW91dFNpemVdKTsKICAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldEZpeGVkTGF5b3V0
U2l6ZShuZXdTaXplKTsKICAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldFVzZUZpeGVkTGF5
b3V0KCFuZXdTaXplLmlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMzAyLDQ1ICsyOTksNDUgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUAogICAgIG1fd2ViRnJhbWUtPl9w
cml2YXRlLT53ZWJGcmFtZVZpZXcgPSBuaWw7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpjb252ZXJ0
TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwotICAgIFN1YnJlc291cmNlTG9h
ZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9h
ZGVyKCk7CisgICAgYXV0byogbWFpblJlc291cmNlTG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPm1h
aW5SZXNvdXJjZUxvYWRlcigpOwogCiAgICAgaWYgKCFtYWluUmVzb3VyY2VMb2FkZXIpIHsKICAg
ICAgICAgLy8gVGhlIHJlc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLCBvciB0aGUgY29u
dmVyc2lvbiBpcyBiZWluZyBhdHRtcHRlZCB3aGVuIG5vdCBjYWxsaW5nIFN1YnJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoKS4KICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfQkVHSU4KLSAgICAgICAgV2ViRG93bmxvYWQgKndlYkRvd25sb2FkID0gW1tXZWJE
b3dubG9hZCBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBC
b2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSkgZGVsZWdhdGU6W3dlYlZpZXcgZG93bmxv
YWREZWxlZ2F0ZV1dOworICAgICAgICBXZWJEb3dubG9hZCAqd2ViRG93bmxvYWQgPSBbW1dlYkRv
d25sb2FkIGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29y
ZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KSBkZWxlZ2F0ZTpbd2ViVmll
dyBkb3dubG9hZERlbGVnYXRlXV07CiAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAogICAgICAgICBbd2ViRG93bmxvYWQgYXV0b3JlbGVhc2VdOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IG1haW5SZXNvdXJjZUxv
YWRlci0+aGFuZGxlKCk7CisgICAgYXV0byogaGFuZGxlID0gbWFpblJlc291cmNlTG9hZGVyLT5o
YW5kbGUoKTsKIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBbV2Vi
RG93bmxvYWQgX2Rvd25sb2FkV2l0aExvYWRpbmdDb25uZWN0aW9uOmhhbmRsZS0+Y29ubmVjdGlv
bigpIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVw
ZGF0ZUhUVFBCb2R5KSByZXNwb25zZTpyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgZGVsZWdhdGU6
W3dlYlZpZXcgZG93bmxvYWREZWxlZ2F0ZV0gcHJveHk6bmlsXTsKKyAgICBbV2ViRG93bmxvYWQg
X2Rvd25sb2FkV2l0aExvYWRpbmdDb25uZWN0aW9uOmhhbmRsZS0+Y29ubmVjdGlvbigpIHJlcXVl
c3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVw
ZGF0ZUhUVFBCb2R5KSByZXNwb25zZTpyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgZGVsZWdhdGU6
W3dlYlZpZXcgZG93bmxvYWREZWxlZ2F0ZV0gcHJveHk6bmlsXTsKIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAogfQogCi1ib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBpbnQgbGVuZ3RoKQorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgaW50IGxlbmd0aCkKIHsKICAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNv
dXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmll
d0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkRGlk
TG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlRnVuYykgewotICAgICAgICBDYWxsUmVzb3VyY2VM
b2FkRGVsZWdhdGVJbldlYlRocmVhZChpbXBsZW1lbnRhdGlvbnMtPndlYlRocmVhZERpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJUaHJlYWRX
ZWJWaWV3OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTpyZXNwb25zZTpsZW5ndGg6ZnJv
bURhdGFTb3VyY2U6KSwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6
OlVwZGF0ZUhUVFBCb2R5KSwgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpLCBsZW5ndGgsIGRhdGFT
b3VyY2UobG9hZGVyKSk7CisgICAgICAgIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZUluV2ViVGhy
ZWFkKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlRocmVhZFdlYlZpZXc6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlOnJlc3BvbnNlOmxlbmd0aDpmcm9tRGF0YVNvdXJjZTopLCByZXF1
ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRU
UEJvZHkpLCByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCksIGxlbmd0aCwgZGF0YVNvdXJjZShsb2Fk
ZXIpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKICNlbmRpZgogICAgIGlmICghaW1w
bGVtZW50YXRpb25zLT5kaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVGdW5jKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoaW1wbGVtZW50
YXRpb25zLT5kaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGVGdW5jLCB3ZWJWaWV3LCBAc2Vs
ZWN0b3Iod2ViVmlldzpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGU6cmVzcG9uc2U6bGVu
Z3RoOmZyb21EYXRhU291cmNlOiksIHJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRl
UG9saWN5OjpVcGRhdGVIVFRQQm9keSksIHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSwgbGVuZ3Ro
LCBkYXRhU291cmNlKGxvYWRlcikpOworICAgIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZShpbXBs
ZW1lbnRhdGlvbnMtPmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZUZ1bmMsIHdlYlZpZXcs
IEBzZWxlY3Rvcih3ZWJWaWV3OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTpyZXNwb25z
ZTpsZW5ndGg6ZnJvbURhdGFTb3VyY2U6KSwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KSwgcmVzcG9uc2UubnNVUkxSZXNw
b25zZSgpLCBsZW5ndGgsIGRhdGFTb3VyY2UobG9hZGVyKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZp
ZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgV2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxlZ2F0
ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKQEAgLTM0OSwxOCArMzQ2LDE4IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50aWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkSWRlbnRpZmllckZvclJlcXVl
c3RGdW5jKSB7Ci0gICAgICAgIG9iamVjdCA9IENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZUluV2Vi
VGhyZWFkKGltcGxlbWVudGF0aW9ucy0+d2ViVGhyZWFkSWRlbnRpZmllckZvclJlcXVlc3RGdW5j
LCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVGhyZWFkV2ViVmlldzppZGVudGlmaWVyRm9ySW5pdGlh
bFJlcXVlc3Q6ZnJvbURhdGFTb3VyY2U6KSwgcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlV
cGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KSwgZGF0YVNvdXJjZShsb2FkZXIpKTsKKyAgICAg
ICAgb2JqZWN0ID0gQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlSW5XZWJUaHJlYWQoaW1wbGVtZW50
YXRpb25zLT53ZWJUaHJlYWRJZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMsIHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJUaHJlYWRXZWJWaWV3OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdDpmcm9tRGF0
YVNvdXJjZTopLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBv
bGljeTo6VXBkYXRlSFRUUEJvZHkpLCBkYXRhU291cmNlKGxvYWRlcikpOwogICAgIH0gZWxzZQog
I2VuZGlmCiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+aWRlbnRpZmllckZvclJlcXVlc3RGdW5j
KQotICAgICAgICBvYmplY3QgPSBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRp
b25zLT5pZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3
OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdDpmcm9tRGF0YVNvdXJjZTopLCByZXF1ZXN0Lm5z
VVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpLCBkYXRhU291
cmNlKGxvYWRlcikpOworICAgICAgICBvYmplY3QgPSBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUo
aW1wbGVtZW50YXRpb25zLT5pZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMsIHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdDpmcm9tRGF0YVNvdXJjZTop
LCByZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBk
YXRlSFRUUEJvZHkpLCBkYXRhU291cmNlKGxvYWRlcikpOwogICAgIGVsc2UKICAgICAgICAgb2Jq
ZWN0ID0gYWRvcHROUyhbW05TT2JqZWN0IGFsbG9jXSBpbml0XSk7CiAKICAgICBbd2ViVmlldyBf
YWRkT2JqZWN0Om9iamVjdC5nZXQoKSBmb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOwogfQogCi12
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVu
dExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3Zv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJW
aWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CkBAIC0zNjgsMTAgKzM2NSwxMCBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTCiAgICAgaWYgKHJlZGlyZWN0UmVzcG9u
c2UuaXNOdWxsKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyTWFjKj4o
bG9hZGVyKS0+aW5jcmVhc2VMb2FkQ291bnQoaWRlbnRpZmllcik7CiAKLSAgICBOU1VSTFJlcXVl
c3QgKmN1cnJlbnRVUkxSZXF1ZXN0ID0gcmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRh
dGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KTsKKyAgICBOU1VSTFJlcXVlc3QgKmN1cnJlbnRVUkxS
ZXF1ZXN0ID0gcmVxdWVzdC5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OlVwZGF0ZUhUVFBCb2R5KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoTWFjQXBw
bGljYXRpb246OmlzQXBwbGVNYWlsKCkgJiYgbG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFs
aWQoKSkgeworICAgIGlmIChXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNBcHBsZU1haWwoKSAm
JiBsb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIE1haWwu
YXBwIGNoZWNrcyBmb3IgdGhpcyBwcm9wZXJ0eSB0byBkZXRlY3QgZGF0YSAvIGFyY2hpdmUgbG9h
ZHMuCiAgICAgICAgIFtOU1VSTFByb3RvY29sIHNldFByb3BlcnR5OkAiIiBmb3JLZXk6QCJXZWJE
YXRhUmVxdWVzdCIgaW5SZXF1ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICopY3VycmVudFVSTFJl
cXVlc3RdOwogICAgIH0KQEAgLTM4NywxMCArMzg0LDEwIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFMKICAgICAgICAgbmV3VVJMUmVxdWVzdCA9IChOU1VSTFJlcXVl
c3QgKilDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aWxsU2VuZFJl
cXVlc3RGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJjZTp3aWxsU2VuZFJl
cXVlc3Q6cmVkaXJlY3RSZXNwb25zZTpmcm9tRGF0YVNvdXJjZTopLCBbd2ViVmlldyBfb2JqZWN0
Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXSwgY3VycmVudFVSTFJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UubnNVUkxSZXNwb25zZSgpLCBkYXRhU291cmNlKGxvYWRlcikpOwogCiAgICAgaWYgKG5l
d1VSTFJlcXVlc3QgIT0gY3VycmVudFVSTFJlcXVlc3QpCi0gICAgICAgIHJlcXVlc3QudXBkYXRl
RnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMoUmVzb3VyY2VSZXF1ZXN0KG5ld1VS
TFJlcXVlc3QpKTsKKyAgICAgICAgcmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5n
T2xkUHJvcGVydGllcyhXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QobmV3VVJMUmVxdWVzdCkpOwog
fQogCi1ib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCitib29s
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAg
ICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAg
V2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9
IFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsK
QEAgLTQwMyw3ICs0MDAsNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VD
cmVkCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBs
b2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0
V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERl
bGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwpAQCAtNDI0LDcgKzQyMSw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKIH0KIAogI2lmIFVTRShQUk9URUNU
SU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi1ib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0
aW9uU3BhY2UpCitib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiBwcm90
ZWN0aW9uU3BhY2UpCiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJG
cmFtZS5nZXQoKSk7CiAgICAgV2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUq
IGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZUltcGxlbWVu
dGF0aW9ucyh3ZWJWaWV3KTsKQEAgLTQ0MCwxMiArNDM3LDEyIEBAIGJvb2wgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2EKICAgICAvLyBJZiBvdXIgcmVzb3VyY2UgbG9hZCBkZWxl
Z2F0ZSBkb2Vzbid0IGhhbmRsZSB0aGUgcXVlc3Rpb24sIHRoZW4gb25seSBzZW5kIGF1dGhlbnRp
Y2F0aW9uCiAgICAgLy8gY2hhbGxlbmdlcyBmb3IgcHJlLWlPUy0zLjAsIHByZS0xMC42IHByb3Rl
Y3Rpb24gc3BhY2VzLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbgogICAgIC8vIGluIENGTmV0d29yay4KLSAgICByZXR1cm4gKHByb3RlY3Rpb25TcGFjZS5h
dXRoZW50aWNhdGlvblNjaGVtZSgpIDwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVDbGllbnRDZXJ0aWZpY2F0ZVJlcXVlc3RlZCk7CisgICAgcmV0dXJuIChwcm90ZWN0aW9uU3Bh
Y2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA8IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0ZWQpOwogfQogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNvbm5lY3Rpb25Qcm9wZXJ0aWVzKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK1JldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpjb25uZWN0aW9uUHJvcGVydGllcyhXZWJDb3JlOjpE
b2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAg
V2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgaWQg
cmVzb3VyY2UgPSBbd2ViVmlldyBfb2JqZWN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKQEAg
LTQ3Miw3ICs0NjksNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRQYWludEJy
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpE
b2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYlJlc291cmNlRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0UmVzb3Vy
Y2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CkBAIC00OTAsNyArNDg3LDcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZQogICAgIH0KIH0KIAot
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBOU0NhY2hlZFVSTFJlc3BvbnNl
KiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU0NhY2hlZFVSTFJlc3BvbnNlICop
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
d2lsbENhY2hlUmVzcG9uc2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChOU0NhY2hlZFVSTFJlc3BvbnNlICopPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJh
bWUuZ2V0KCkpOwogICAgIFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBp
bXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbnMod2ViVmlldyk7CkBAIC01MTAsNyArNTA3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6d2lsbENhY2hlUmVzcAogICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3BvbnNlKTsKIH0K
IAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExl
bmd0aChEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGlu
dCBkYXRhTGVuZ3RoKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNl
aXZlQ29udGVudExlbmd0aChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGludCBkYXRhTGVuZ3RoKQogewogICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYlJlc291cmNlRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0UmVzb3Vy
Y2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CkBAIC01MzIsNyArNTI5LDcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaQogfQogI2VuZGlmCiAK
LXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1
bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYlJlc291
cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3
R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CkBAIC01NTQs
NyArNTUxLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaQogICAg
IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyTWFjKj4obG9hZGVyKS0+ZGVjcmVhc2VMb2Fk
Q291bnQoaWRlbnRpZmllcik7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiBlcnJvcikKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dl
YkZyYW1lLmdldCgpKTsKICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
ZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25zKHdlYlZpZXcpOwpAQCAtNjAxLDcgKzU5OCw3IEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2EKICAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGlt
cGxlbWVudGF0aW9ucy0+ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZUZ1bmMsIHdlYlZp
ZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWU6KSwg
bV93ZWJGcmFtZS5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBVUkwmIHVybCwgZG91YmxlIGRlbGF5
LCBXYWxsVGltZSBmaXJlRGF0ZSwgTG9ja0JhY2tGb3J3YXJkTGlzdCkKK3ZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBVUkwm
IHVybCwgZG91YmxlIGRlbGF5LCBXYWxsVGltZSBmaXJlRGF0ZSwgV2ViQ29yZTo6TG9ja0JhY2tG
b3J3YXJkTGlzdCkKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZy
YW1lLmdldCgpKTsKICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUq
IGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0
aW9ucyh3ZWJWaWV3KTsKQEAgLTY4Niw3ICs2ODMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFN0CiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VGl0bGVM
ZW5ndGggPSAxMDAwOyAvLyBDbG9zZXN0IHBvd2VyIG9mIDEwIGFib3ZlIHRoZSBXM0MgcmVjb21t
ZW5kYXRpb24gZm9yIFRpdGxlIGxlbmd0aC4KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUp
Cit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKIHsKICAgICBhdXRvIHRydW5j
YXRlZFRpdGxlID0gdHJ1bmNhdGVGcm9tRW5kKHRpdGxlLCBtYXhUaXRsZUxlbmd0aCk7CiAKQEAg
LTY5OCw3ICs2OTUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJl
CiAgICAgfQogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1p
dExvYWQoT3B0aW9uYWw8SGFzSW5zZWN1cmVDb250ZW50PikKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZChPcHRpb25hbDxXZWJDb3JlOjpIYXNJbnNlY3Vy
ZUNvbnRlbnQ+KQogewogICAgIC8vIFRlbGwgdGhlIGNsaWVudCB3ZSd2ZSBjb21taXR0ZWQgdGhp
cyBVUkwuCiAgICAgQVNTRVJUKFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IGRv
Y3VtZW50Vmlld10gIT0gbmlsKTsKQEAgLTcxOCw3ICs3MTUsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvCiAgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShp
bXBsZW1lbnRhdGlvbnMtPmRpZENvbW1pdExvYWRGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmRpZENvbW1pdExvYWRGb3JGcmFtZTopLCBtX3dlYkZyYW1lLmdldCgpKTsK
IH0KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBXaWxsQ29udGludWVMb2FkaW5nKQor
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBXZWJDb3JlOjpXaWxsQ29udGlu
dWVMb2FkaW5nKQogewogICAgIG1fd2ViRnJhbWUtPl9wcml2YXRlLT5wcm92aXNpb25hbFVSTCA9
IG51bGxwdHI7CiAKQEAgLTczNCw3ICs3MzEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZEZhCiAgICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT5pbnRlcm5hbExvYWRE
ZWxlZ2F0ZSB3ZWJGcmFtZTptX3dlYkZyYW1lLmdldCgpIGRpZEZpbmlzaExvYWRXaXRoRXJyb3I6
ZXJyb3JdOwogfQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxM
b2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKICAgICBBU1NFUlQoIW1fd2ViRnJhbWUtPl9wcml2YXRlLT5wcm92aXNpb25hbFVSTCk7
CiAKQEAgLTgwNSw3ICs4MDIsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZFJlCiAgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRp
ZExheW91dEZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZExheW91dDopLCBraXRM
YXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsKICNlbmRpZgogCi0gICAgaWYgKG1pbGVzdG9u
ZXMgJiBEaWRGaXJzdExheW91dCkgeworICAgIGlmIChtaWxlc3RvbmVzICYgV2ViQ29yZTo6RGlk
Rmlyc3RMYXlvdXQpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciByZW1v
dmluZyB0aGUgb2xkIGRpZEZpcnN0TGF5b3V0IEFQSSBzaW5jZSB0aGlzIGlzIGRvaW5nIGRvdWJs
ZSBkdXR5IHdpdGggdGhlCiAgICAgICAgIC8vIG5ldyBkaWRMYXlvdXQgQVBJLgogICAgICAgICBp
ZiAoaW1wbGVtZW50YXRpb25zLT5kaWRGaXJzdExheW91dEluRnJhbWVGdW5jKQpAQCAtODI1LDcg
KzgyMiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKICNlbmRp
ZgogICAgIH0KIAotICAgIGlmIChtaWxlc3RvbmVzICYgRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0KSB7CisgICAgaWYgKG1pbGVzdG9uZXMgJiBXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBy
ZW1vdmluZyB0aGUgb2xkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lIEFQ
SSBzaW5jZSB0aGlzIGlzIGRvaW5nCiAgICAgICAgIC8vIGRvdWJsZSBkdXR5IHdpdGggdGhlIG5l
dyBkaWRMYXlvdXQgQVBJLgogICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRJbkZyYW1lRnVuYykKQEAgLTgzNyw3ICs4MzQsNyBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlCiAgICAgfQogfQogCi1GcmFtZSog
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBOYXZpZ2F0aW9u
QWN0aW9uJikKK1dlYkNvcmU6OkZyYW1lKiBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hD
cmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24mKQogewogICAgIFdlYlZp
ZXcgKmN1cnJlbnRXZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBO
U0RpY3Rpb25hcnkgKmZlYXR1cmVzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwpAQCAt
ODYwLDE5ICs4NTcsMTkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hTaG93
KAogICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld1Nob3c6d2ViVmll
d107CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyIGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYsIEZyYW1lUG9saWN5RnVuY3Rpb24mJiBmdW5jdGlvbikKK3Zv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24m
JiBmdW5jdGlvbikKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZy
YW1lLmdldCgpKTsKIAogICAgIFtbd2ViVmlldyBfcG9saWN5RGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldwotICAgICAgICAgICAgICAgICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTUlN
RVR5cGU6cmVzcG9uc2UubWltZVR5cGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xp
Y3k6OlVwZGF0ZUhUVFBCb2R5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWU6bV93ZWJGcmFtZS5nZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlY2lzaW9uTGlzdGVuZXI6c2V0VXBQb2xpY3lMaXN0ZW5lcihpZGVudGlmaWVyLCBXVEZN
b3ZlKGZ1bmN0aW9uKSwgUG9saWN5QWN0aW9uOjpVc2UpLmdldCgpXTsKKyAgICAgICAgZGVjaWRl
UG9saWN5Rm9yTUlNRVR5cGU6cmVzcG9uc2UubWltZVR5cGUoKQorICAgICAgICByZXF1ZXN0OnJl
cXVlc3QubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpVcGRhdGVI
VFRQQm9keSkKKyAgICAgICAgZnJhbWU6bV93ZWJGcmFtZS5nZXQoKQorICAgICAgICBkZWNpc2lv
bkxpc3RlbmVyOnNldFVwUG9saWN5TGlzdGVuZXIoaWRlbnRpZmllciwgV1RGTW92ZShmdW5jdGlv
biksIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlKS5nZXQoKV07CiB9CiAKIAotc3RhdGljIEJP
T0wgc2hvdWxkVHJ5QXBwTGluayhXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uJiBhY3Rpb24sIEZyYW1lKiB0YXJnZXRGcmFtZSkKK3N0YXRpYyBCT09MIHNob3VsZFRyeUFw
cExpbmsoV2ViVmlldyAqd2ViVmlldywgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYg
YWN0aW9uLCBXZWJDb3JlOjpGcmFtZSogdGFyZ2V0RnJhbWUpCiB7CiAjaWYgSEFWRShBUFBfTElO
S1MpCiAgICAgQk9PTCBtYWluRnJhbWVOYXZpZ2F0aW9uID0gIXRhcmdldEZyYW1lIHx8IHRhcmdl
dEZyYW1lLT5pc01haW5GcmFtZSgpOwpAQCAtODkxLDI4ICs4ODgsMjggQEAgc3RhdGljIEJPT0wg
c2hvdWxkVHJ5QXBwTGluayhXZWJWaWV3ICp3ZQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBGb3JtU3RhdGUqIGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUsIFdlYkNvcmU6
OlBvbGljeUNoZWNrSWRlbnRpZmllciBpZGVudGlmaWVyLCBGcmFtZVBvbGljeUZ1bmN0aW9uJiYg
ZnVuY3Rpb24pCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbihjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rp
b24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6Rm9y
bVN0YXRlKiBmb3JtU3RhdGUsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLCBXZWJDb3JlOjpQb2xp
Y3lDaGVja0lkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlv
biYmIGZ1bmN0aW9uKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2Vi
RnJhbWUuZ2V0KCkpOwogICAgIEJPT0wgdHJ5QXBwTGluayA9IHNob3VsZFRyeUFwcExpbmsod2Vi
VmlldywgYWN0aW9uLCBudWxscHRyKTsKIAogICAgIFtbd2ViVmlldyBfcG9saWN5RGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldwotICAgICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkoYWN0aW9uLCBmb3JtU3RhdGUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3Qo
SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3RnJhbWVOYW1lOmZyYW1lTmFtZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNpc2lvbkxpc3RlbmVyOnNldFVwUG9saWN5TGlzdGVuZXIoaWRlbnRpZmllciwgV1RG
TW92ZShmdW5jdGlvbiksIFBvbGljeUFjdGlvbjo6SWdub3JlLCB0cnlBcHBMaW5rID8gKE5TVVJM
ICopcmVxdWVzdC51cmwoKSA6IG5pbCkuZ2V0KCldOworICAgICAgICBkZWNpZGVQb2xpY3lGb3JO
ZXdXaW5kb3dBY3Rpb246YWN0aW9uRGljdGlvbmFyeShhY3Rpb24sIGZvcm1TdGF0ZSkKKyAgICAg
ICAgcmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBv
bGljeTo6VXBkYXRlSFRUUEJvZHkpCisgICAgICAgIG5ld0ZyYW1lTmFtZTpmcmFtZU5hbWUKKyAg
ICAgICAgZGVjaXNpb25MaXN0ZW5lcjpzZXRVcFBvbGljeUxpc3RlbmVyKGlkZW50aWZpZXIsIFdU
Rk1vdmUoZnVuY3Rpb24pLCBXZWJDb3JlOjpQb2xpY3lBY3Rpb246Oklnbm9yZSwgdHJ5QXBwTGlu
ayA/IChOU1VSTCAqKXJlcXVlc3QudXJsKCkgOiBuaWwpLmdldCgpXTsKIH0KIAotdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgRm9ybVN0YXRlKiBmb3JtU3RhdGUsIFBv
bGljeURlY2lzaW9uTW9kZSwgV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIEZyYW1lUG9saWN5RnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBXZWJD
b3JlOjpOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6
OkZvcm1TdGF0ZSogZm9ybVN0YXRlLCBXZWJDb3JlOjpQb2xpY3lEZWNpc2lvbk1vZGUsIFdlYkNv
cmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGcmFtZVBvbGlj
eUZ1bmN0aW9uJiYgZnVuY3Rpb24pCiB7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZp
ZXcobV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgQk9PTCB0cnlBcHBMaW5rID0gc2hvdWxkVHJ5QXBw
TGluayh3ZWJWaWV3LCBhY3Rpb24sIGNvcmUobV93ZWJGcmFtZS5nZXQoKSkpOwogCiAgICAgW1t3
ZWJWaWV3IF9wb2xpY3lEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3Ci0gICAgICAg
ICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjphY3Rpb25EaWN0aW9uYXJ5
KGFjdGlvbiwgZm9ybVN0YXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVw
ZGF0ZUhUVFBCb2R5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJhbWU6bV93ZWJGcmFtZS5nZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2lzaW9uTGlzdGVuZXI6c2V0VXBQb2xpY3lMaXN0ZW5lcihpZGVudGlmaWVyLCBXVEZNb3ZlKGZ1
bmN0aW9uKSwgUG9saWN5QWN0aW9uOjpJZ25vcmUsIHRyeUFwcExpbmsgPyAoTlNVUkwgKilyZXF1
ZXN0LnVybCgpIDogbmlsKS5nZXQoKV07CisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb246YWN0aW9uRGljdGlvbmFyeShhY3Rpb24sIGZvcm1TdGF0ZSkKKyAgICAgICAgcmVx
dWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6
VXBkYXRlSFRUUEJvZHkpCisgICAgICAgIGZyYW1lOm1fd2ViRnJhbWUuZ2V0KCkKKyAgICAgICAg
ZGVjaXNpb25MaXN0ZW5lcjpzZXRVcFBvbGljeUxpc3RlbmVyKGlkZW50aWZpZXIsIFdURk1vdmUo
ZnVuY3Rpb24pLCBXZWJDb3JlOjpQb2xpY3lBY3Rpb246Oklnbm9yZSwgdHJ5QXBwTGluayA/IChO
U1VSTCAqKXJlcXVlc3QudXJsKCkgOiBuaWwpLmdldCgpXTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y2FuY2VsUG9saWN5Q2hlY2soKQpAQCAtOTI0LDEzICs5MjEsMTMgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsUG9saWN5QwogICAgIG1fcG9saWN5TGlzdGVu
ZXIgPSBuaWw7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxl
VG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBn
ZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFtbd2ViVmlldyBfcG9saWN5RGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyB1bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhF
cnJvcjplcnJvciBmcmFtZTptX3dlYkZyYW1lLmdldCgpXTsgICAgCiB9CiAKLXN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKm1ha2VGb3JtRmllbGRWYWx1ZXNEaWN0aW9uYXJ5KEZvcm1TdGF0ZSYgZm9ybVN0
YXRlKQorc3RhdGljIE5TRGljdGlvbmFyeSAqbWFrZUZvcm1GaWVsZFZhbHVlc0RpY3Rpb25hcnko
V2ViQ29yZTo6Rm9ybVN0YXRlJiBmb3JtU3RhdGUpCiB7CiAgICAgYXV0byYgdGV4dEZpZWxkVmFs
dWVzID0gZm9ybVN0YXRlLnRleHRGaWVsZFZhbHVlcygpOwogICAgIHNpemVfdCBzaXplID0gdGV4
dEZpZWxkVmFsdWVzLnNpemUoKTsKQEAgLTk1MSw3ICs5NDgsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTCiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShnZXRXZWJWaWV3
KG1fd2ViRnJhbWUuZ2V0KCkpLCBAc2VsZWN0b3Iod2lsbFNlbmRTdWJtaXRFdmVudFRvRm9ybTpp
bkZyYW1lOndpdGhWYWx1ZXM6KSwgZm9ybUVsZW1lbnQsIG1fd2ViRnJhbWUuZ2V0KCksIHZhbHVl
cyk7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1pdEZv
cm0oRm9ybVN0YXRlJiBmb3JtU3RhdGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1
Ym1pdEZvcm0oV2ViQ29yZTo6Rm9ybVN0YXRlJiBmb3JtU3RhdGUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZCA8V2ViRm9ybURlbGVnYXRl
PiBmb3JtRGVsZWdhdGUgPSBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSBfZm9ybURlbGVn
YXRlXTsKICAgICBpZiAoIWZvcm1EZWxlZ2F0ZSkgewpAQCAtOTYwLDE3ICs5NTcsMTcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUwogICAgIH0KIAogICAgIE5TRGlj
dGlvbmFyeSAqdmFsdWVzID0gbWFrZUZvcm1GaWVsZFZhbHVlc0RpY3Rpb25hcnkoZm9ybVN0YXRl
KTsKLSAgICBDYWxsRm9ybURlbGVnYXRlKGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSksIEBz
ZWxlY3RvcihmcmFtZTpzb3VyY2VGcmFtZTp3aWxsU3VibWl0Rm9ybTp3aXRoVmFsdWVzOnN1Ym1p
c3Npb25MaXN0ZW5lcjopLCBtX3dlYkZyYW1lLmdldCgpLCBraXQoZm9ybVN0YXRlLnNvdXJjZURv
Y3VtZW50KCkuZnJhbWUoKSksIGtpdCgmZm9ybVN0YXRlLmZvcm0oKSksIHZhbHVlcywgc2V0VXBQ
b2xpY3lMaXN0ZW5lcihQb2xpY3lDaGVja0lkZW50aWZpZXIgeyB9LAotICAgICAgICBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oUG9saWN5QWN0aW9uLCBQ
b2xpY3lDaGVja0lkZW50aWZpZXIpIG11dGFibGUgeyBjb21wbGV0aW9uSGFuZGxlcigpOyB9LAot
ICAgICAgICBQb2xpY3lBY3Rpb246Oklnbm9yZSkuZ2V0KCkpOworICAgIENhbGxGb3JtRGVsZWdh
dGUoZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSwgQHNlbGVjdG9yKGZyYW1lOnNvdXJjZUZy
YW1lOndpbGxTdWJtaXRGb3JtOndpdGhWYWx1ZXM6c3VibWlzc2lvbkxpc3RlbmVyOiksIG1fd2Vi
RnJhbWUuZ2V0KCksIGtpdChmb3JtU3RhdGUuc291cmNlRG9jdW1lbnQoKS5mcmFtZSgpKSwga2l0
KCZmb3JtU3RhdGUuZm9ybSgpKSwgdmFsdWVzLCBzZXRVcFBvbGljeUxpc3RlbmVyKFdlYkNvcmU6
OlBvbGljeUNoZWNrSWRlbnRpZmllciB7IH0sCisgICAgICAgIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIFdlYkNv
cmU6OlBvbGljeUNoZWNrSWRlbnRpZmllcikgbXV0YWJsZSB7IGNvbXBsZXRpb25IYW5kbGVyKCk7
IH0sCisgICAgICAgIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6SWdub3JlKS5nZXQoKSk7CiB9CiAK
LXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1
bWVudExvYWRlciogbG9hZGVyKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Q
cm92aXNpb25hbFN0YXRlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAg
W2RhdGFTb3VyY2UobG9hZGVyKSBfcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlXTsKIH0KIAotdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihXZWJDb3JlOjpEb2N1bWVudExvYWRlciog
bG9hZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBbZGF0
YVNvdXJjZShsb2FkZXIpIF9zZXRNYWluRG9jdW1lbnRFcnJvcjplcnJvcl07CiB9CkBAIC05ODAs
MTMgKzk3NywxMyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVECiAg
ICAgW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFk
eTpyZWFkeV07CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIC8qIHN1Z2dlc3Rl
ZE5hbWUgKi8pCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiAvKiBzdWdn
ZXN0ZWROYW1lICovKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgZG93bmxvYWQgZnVsbCByZXF1
ZXN0LgogICAgIFtnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpIF9kb3dubG9hZFVSTDpyZXF1
ZXN0LnVybCgpXTsKIH0KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2lsbENoYW5nZVRp
dGxlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3
aWxsQ2hhbmdlVGl0bGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIHRoaXMgb25seSBp
biBtYWluIGZyYW1lIGNhc2UsIHJpZ2h0PwpAQCAtOTk0LDcgKzk5MSw3IEBAIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OndpbGxDaGFuZ2VUaXQKICNlbmRpZgogfQogCi12b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlVGl0bGUoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqIGxvYWRlcikKIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBGSVhN
RTogU2hvdWxkIGRvIHRoaXMgb25seSBpbiBtYWluIGZyYW1lIGNhc2UsIHJpZ2h0PwpAQCAtMTAw
NSwxOSArMTAwMiwxOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VUaXRs
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSZXBsYWNlTXVsdGlwYXJ0Q29udGVudCgp
CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoRnJhbWVWaWV3ICp2aWV3ID0g
Y29yZShtX3dlYkZyYW1lLmdldCgpKS0+dmlldygpKQorICAgIGlmIChXZWJDb3JlOjpGcmFtZVZp
ZXcgKnZpZXcgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT52aWV3KCkpCiAgICAgICAgIHZpZXct
PmRpZFJlcGxhY2VNdWx0aXBhcnRDb250ZW50KCk7CiAjZW5kaWYKIH0KIAotdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29t
bWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQogewogICAgIE5TRGF0YSAqbnNEYXRhID0gW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXNOb0NvcHk6KHZvaWQqKWRhdGEgbGVuZ3RoOmxlbmd0aCBmcmVlV2hlbkRv
bmU6Tk9dOwogICAgIFtkYXRhU291cmNlKGxvYWRlcikgX3JlY2VpdmVkRGF0YTpuc0RhdGFdOwog
ICAgIFtuc0RhdGEgcmVsZWFzZV07CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZp
bmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiB7CiAgICAgW2RhdGFTb3VyY2UobG9hZGVyKSBfZmluaXNoZWRMb2FkaW5nXTsKIH0KQEAgLTEw
MzIsNyArMTAyOSw3IEBAIHN0YXRpYyBpbmxpbmUgTlNTdHJpbmcgKm5pbE9yTlNTdHJpbmcoY28K
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQogewogICAg
IFdlYlZpZXcqIHZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwotICAgIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpOworICAgIGF1dG8qIGxvYWRlciA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSkt
PmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAobG9hZGVyLT51cmxGb3JIaXN0b3J5KCkgPT0gV1RGOjpibGFua1VSTCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMDQyLDExICsxMDM5LDExIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnVwZGF0ZUdsb2JhbEgKICAgICAgICAgV2ViSGlzdG9yeURlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEhpc3RvcnlEZWxlZ2F0ZUltcGxl
bWVudGF0aW9ucyh2aWV3KTsKICAgICAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+bmF2aWdhdGVk
RnVuYykgewogICAgICAgICAgICAgV2ViTmF2aWdhdGlvbkRhdGEgKmRhdGEgPSBbW1dlYk5hdmln
YXRpb25EYXRhIGFsbG9jXSBpbml0V2l0aFVSTFN0cmluZzpsb2FkZXItPnVybCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpdGxlOm5pbE9yTlNTdHJpbmcobG9hZGVyLT50aXRsZSgpLnN0cmluZykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3Q6bG9hZGVyLT5vcmlnaW5hbFJlcXVlc3RDb3B5KCku
bnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2U6bG9hZGVyLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNTdWJzdGl0dXRlRGF0YTpsb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxp
ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaWVudFJlZGlyZWN0U291cmNlOmxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3Vy
Y2VGb3JIaXN0b3J5KCldOworICAgICAgICAgICAgICAgIHRpdGxlOm5pbE9yTlNTdHJpbmcobG9h
ZGVyLT50aXRsZSgpLnN0cmluZykKKyAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3Q6bG9h
ZGVyLT5vcmlnaW5hbFJlcXVlc3RDb3B5KCkubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5
VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSkKKyAgICAgICAgICAgICAgICByZXNwb25zZTps
b2FkZXItPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpCisgICAgICAgICAgICAgICAgaGFzU3Vi
c3RpdHV0ZURhdGE6bG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKQorICAgICAgICAg
ICAgICAgIGNsaWVudFJlZGlyZWN0U291cmNlOmxvYWRlci0+Y2xpZW50UmVkaXJlY3RTb3VyY2VG
b3JIaXN0b3J5KCldOwogCiAgICAgICAgICAgICBDYWxsSGlzdG9yeURlbGVnYXRlKGltcGxlbWVu
dGF0aW9ucy0+bmF2aWdhdGVkRnVuYywgdmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGE6aW5GcmFtZTopLCBkYXRhLCBtX3dlYkZyYW1lLmdldCgpKTsK
ICAgICAgICAgICAgIFtkYXRhIHJlbGVhc2VdOwpAQCAtMTA3NCw3ICsxMDcxLDcgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSAogICAgIFdlYlZpZXcqIHZpZXcgPSBn
ZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYkhpc3RvcnlEZWxlZ2F0ZUltcGxl
bWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFt2aWV3IGhpc3RvcnlEZWxlZ2F0ZV0g
PyBXZWJWaWV3R2V0SGlzdG9yeURlbGVnYXRlSW1wbGVtZW50YXRpb25zKHZpZXcpIDogMDsKICAg
ICAKLSAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gY29yZShtX3dlYkZyYW1lLmdldCgpKS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBhdXRvKiBsb2FkZXIgPSBjb3JlKG1fd2Vi
RnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogICAgIEFTU0VSVChsb2Fk
ZXItPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKTsKIAogICAgIGlmICghbG9hZGVyLT5jbGll
bnRSZWRpcmVjdFNvdXJjZUZvckhpc3RvcnkoKS5pc051bGwoKSkgewpAQCAtMTA5OCw3ICsxMDk1
LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSAogICAgIH0KIH0K
IAotYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtKEhpc3Rv
cnlJdGVtJiBpdGVtKSBjb25zdAorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkR29U
b0hpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtJiBpdGVtKSBjb25zdAogewogICAgIFdl
YlZpZXcqIHZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIHJldHVybiBb
W3ZpZXcgX3BvbGljeURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnZpZXcgc2hvdWxkR29Ub0hp
c3RvcnlJdGVtOmtpdCgmaXRlbSldOwpAQCAtMTEwNiwxMyArMTEwMywxMyBAQCBib29sIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpzaG91bGRHb1RvSGlzCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKQogewotICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOyAgIAorICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFdlYkZyYW1lTG9hZERlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9h
ZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwogICAgIGlmIChpbXBsZW1lbnRhdGlv
bnMtPmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGdW5jKQogICAgICAgICBDYWxsRnJhbWVMb2Fk
RGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWREaXNwbGF5SW5zZWN1cmVDb250ZW50RnVuYywg
d2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXdEaWREaXNwbGF5SW5zZWN1cmVDb250ZW50OikpOwog
fQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2Vj
dXJpdHlPcmlnaW4mIG9yaWdpbiwgY29uc3QgVVJMJiBpbnNlY3VyZVVSTCkKK3ZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRpZFJ1bkluc2VjdXJlQ29udGVudChXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiYgb3JpZ2luLCBjb25zdCBVUkwmIGluc2VjdXJlVVJMKQogewogICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOyAgIAogICAgIFdlYkZyYW1lTG9h
ZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dl
dEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwpAQCAtMTEzMyw0OSAr
MTEzMCw0OSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWREZXRlY3RYU1MoCiAgICAg
fQogfQogCi1SZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJv
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitXZWJDb3JlOjpSZXNvdXJjZUVycm9y
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJv
cldpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JDYW5jZWxsZWQgVVJM
OnJlcXVlc3QudXJsKCldOwogfQogICAgIAotUmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNs
aWVudDo6YmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK1dlYkNv
cmU6OlJlc291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFtOU0Vy
cm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRF
cnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0IFVSTDpyZXF1ZXN0LnVybCgpXTsKIH0KIAotUmVz
b3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6YmxvY2tlZEJ5Q29udGVudEJsb2NrZXJF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpibG9ja2VkQnlDb250ZW50QmxvY2tlckVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBDb250ZW50IGJsb2NrZXJzIGFyZSBub3QgZW5hYmxlZCBp
biBXZWJLaXQxLgogfQogCi1SZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5u
b3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd1VSTEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICByZXR1cm4gW05T
RXJyb3IgX3dlYktpdEVycm9yV2l0aERvbWFpbjpXZWJLaXRFcnJvckRvbWFpbiBjb2RlOldlYktp
dEVycm9yQ2Fubm90U2hvd1VSTCBVUkw6cmVxdWVzdC51cmwoKV07CiB9CiAKLVJlc291cmNlRXJy
b3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFtOU0Vy
cm9yIF93ZWJLaXRFcnJvcldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRF
cnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgVVJMOnJlcXVlc3QudXJsKCld
OwogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQotUmVzb3VyY2VFcnJvciBXZWJG
cmFtZUxvYWRlckNsaWVudDo6YmxvY2tlZEJ5Q29udGVudEZpbHRlckVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK1dlYkNvcmU6OlJlc291cmNlRXJyb3IgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmJsb2NrZWRCeUNvbnRlbnRGaWx0ZXJFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIFtOU0Vycm9yIF93ZWJLaXRFcnJv
cldpdGhEb21haW46V2ViS2l0RXJyb3JEb21haW4gY29kZTpXZWJLaXRFcnJvckZyYW1lTG9hZEJs
b2NrZWRCeUNvbnRlbnRGaWx0ZXIgVVJMOnJlcXVlc3QudXJsKCldOwogfQogI2VuZGlmCiAKLVJl
c291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgcmV0dXJuIFtOU0Vycm9y
IF93ZWJLaXRFcnJvcldpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOldlYktpdEVycm9y
Q2Fubm90U2hvd01JTUVUeXBlIFVSTDpyZXNwb25zZS51cmwoKV07CiB9CiAKLVJlc291cmNlRXJy
b3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK1dlYkNvcmU6OlJlc291cmNlRXJyb3IgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICByZXR1cm4gW05TRXJyb3IgX3dlYktpdEVycm9y
V2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluIGNvZGU6TlNVUkxFcnJvckZpbGVEb2VzTm90RXhp
c3QgVVJMOnJlc3BvbnNlLnVybCgpXTsgICAgCiB9CiAKLVJlc291cmNlRXJyb3IgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCitXZWJDb3JlOjpSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQogewogICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9j
XSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6V2ViS2l0RXJyb3JQbHVnSW5XaWxsSGFuZGxlTG9h
ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRVUkw6cmVzcG9uc2UudXJsKCkKQEAgLTExODUsNyArMTE4Miw3IEBAIFJlc291cmNlRXJy
b3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBsdWcKICAgICByZXR1cm4gW2Vycm9yIGF1dG9yZWxl
YXNlXTsKIH0KIAotYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkRmFsbEJhY2soY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCitib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91
bGRGYWxsQmFjayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICAv
LyBGSVhNRTogTmVlZHMgdG8gY2hlY2sgZG9tYWluLgogICAgIC8vIEZJWE1FOiBXZWJLaXRFcnJv
clBsdWdJbldpbGxIYW5kbGVMb2FkIGlzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGNhbmNlbCB3ZSBk
byB0byBwcmV2ZW50CkBAIC0xMTkzLDkgKzExOTAsOSBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpzaG91bGRGYWxsQmFjCiAgICAgcmV0dXJuIGVycm9yLmVycm9yQ29kZSgpICE9IE5TVVJM
RXJyb3JDYW5jZWxsZWQgJiYgZXJyb3IuZXJyb3JDb2RlKCkgIT0gV2ViS2l0RXJyb3JQbHVnSW5X
aWxsSGFuZGxlTG9hZDsKIH0KIAotYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuSGFuZGxl
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpIGNvbnN0Citib29sIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKIHsKLSAgICByZXR1cm4gW1dlYlZpZXcgX2NhbkhhbmRs
ZVJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0
ZUhUVFBCb2R5KSBmb3JNYWluRnJhbWU6Y29yZShtX3dlYkZyYW1lLmdldCgpKS0+aXNNYWluRnJh
bWUoKV07CisgICAgcmV0dXJuIFtXZWJWaWV3IF9jYW5IYW5kbGVSZXF1ZXN0OnJlcXVlc3QubnNV
UkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSkg
Zm9yTWFpbkZyYW1lOmNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmlzTWFpbkZyYW1lKCldOwogfQog
CiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBNSU1FVHlwZSkgY29uc3QKQEAgLTEyMjcsNyArMTIyNCw3IEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmZyYW1lTG9hZENvbXAKICAgICAgICAgW1ttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+
d2ViRnJhbWVWaWV3IF9zY3JvbGxWaWV3XSBzZXREcmF3c0JhY2tncm91bmQ6WUVTXTsKIH0KIAot
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRl
bSYgaXRlbSkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVWaWV3U3RhdGVUb0l0ZW0o
V2ViQ29yZTo6SGlzdG9yeUl0ZW0mIGl0ZW0pCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAvLyBMZXQgVUlLaXQgaGFuZGxlIHRoZSBzY3JvbGwgcG9pbnQgZm9yIHRoZSBtYWluIGZy
YW1lLgpAQCAtMTI0OSw3ICsxMjQ2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2F2
ZVZpZXdTdGF0ZQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRl
KCkKIHsKLSAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0
KCkpLT5sb2FkZXIoKS5oaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKKyAgICBXZWJDb3JlOjpIaXN0
b3J5SXRlbSogY3VycmVudEl0ZW0gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS5o
aXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKICAgICBBU1NFUlQoY3VycmVudEl0ZW0pOwogCiAgICAg
Ly8gRklYTUU6IEFzIHRoZSBBU1NFUlQgYXR0ZXN0cywgaXQgc2VlbXMgd2Ugc2hvdWxkIGFsd2F5
cyBoYXZlIGEgY3VycmVudEl0ZW0gaGVyZS4KQEAgLTEzMzMsNyArMTMzMCw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnByZXBhcmVGb3JEYXQKICNlbmRpZgogfQogCi1SZWY8RG9jdW1l
bnRMb2FkZXI+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0
dXRlRGF0YSkKK1JlZjxXZWJDb3JlOjpEb2N1bWVudExvYWRlcj4gV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQog
ewogICAgIGF1dG8gbG9hZGVyID0gV2ViRG9jdW1lbnRMb2FkZXJNYWM6OmNyZWF0ZShyZXF1ZXN0
LCBzdWJzdGl0dXRlRGF0YSk7CiAKQEAgLTEzNDQsNyArMTM0MSw3IEBAIFJlZjxEb2N1bWVudExv
YWRlcj4gV2ViRnJhbWVMb2FkZXJDbGllbnQKICAgICByZXR1cm4gV1RGTW92ZShsb2FkZXIpOwog
fQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRUaXRsZShjb25zdCBTdHJpbmdXaXRo
RGlyZWN0aW9uJiB0aXRsZSwgY29uc3QgVVJMJiB1cmwpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpzZXRUaXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSwg
Y29uc3QgVVJMJiB1cmwpCiB7CiAgICAgV2ViVmlldyogdmlldyA9IGdldFdlYlZpZXcobV93ZWJG
cmFtZS5nZXQoKSk7CiAgICAgCkBAIC0xMzcyLDcgKzEzNjksNyBAQCBJR05PUkVfV0FSTklOR1Nf
RU5ECiAgICAgW1tbV2ViSGlzdG9yeSBvcHRpb25hbFNoYXJlZEhpc3RvcnldIGl0ZW1Gb3JVUkw6
bnNVUkxdIHNldFRpdGxlOnRpdGxlLnN0cmluZ107CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKiBjYWNoZWRG
cmFtZSkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hl
ZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKiBjYWNoZWRGcmFtZSkKIHsKICAgICBjYWNoZWRG
cmFtZS0+c2V0Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEobWFrZVVuaXF1ZTxXZWJDYWNoZWRGcmFt
ZVBsYXRmb3JtRGF0YT4obV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldy5kb2N1bWVu
dFZpZXcpKTsKIApAQCAtMTM4Myw3ICsxMzgwLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6c2F2ZVBsYXRmb3JtRAogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSogY2FjaGVk
RnJhbWUpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRG
cm9tQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUqIGNhY2hlZEZyYW1lKQogewogICAg
IFdlYkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBzdGF0aWNfY2FzdDxX
ZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YSo+KGNhY2hlZEZyYW1lLT5jYWNoZWRGcmFtZVBsYXRm
b3JtRGF0YSgpKTsKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmNhY2hlZFZpZXcgPSBw
bGF0Zm9ybURhdGEtPndlYkRvY3VtZW50VmlldygpOwpAQCAtMTQ1OSwxMyArMTQ1NiwxMyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiAgICAgLy8gRklYTUU6IENv
dWxkIHdlIHNraXAgc29tZSBvZiB0aGlzIHdvcmsgZm9yIGEgdG9wLWxldmVsIHZpZXcgdGhhdCBp
cyBub3QgYSBXZWJIVE1MVmlldz8KIAogICAgIC8vIElmIHdlIG93biB0aGUgdmlldywgZGVsZXRl
IHRoZSBvbGQgb25lIC0gb3RoZXJ3aXNlIHRoZSByZW5kZXIgbV9mcmFtZSB3aWxsIHRha2UgY2Fy
ZSBvZiBkZWxldGluZyB0aGUgdmlldy4KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShtX3dl
YkZyYW1lLmdldCgpKTsKLSAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7CisgICAg
YXV0byogY29yZUZyYW1lID0gY29yZShtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBhdXRvKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCk7CiAgICAgYm9vbCBpc01haW5GcmFtZSA9IGNvcmVGcmFtZS0+
aXNNYWluRnJhbWUoKTsKICAgICBpZiAoaXNNYWluRnJhbWUgJiYgY29yZUZyYW1lLT52aWV3KCkp
CiAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zZXRQYXJlbnRWaXNpYmxlKGZhbHNlKTsKICAg
ICBjb3JlRnJhbWUtPnNldFZpZXcobnVsbHB0cik7Ci0gICAgYXV0byBjb3JlVmlldyA9IEZyYW1l
Vmlldzo6Y3JlYXRlKCpjb3JlRnJhbWUpOworICAgIGF1dG8gY29yZVZpZXcgPSBXZWJDb3JlOjpG
cmFtZVZpZXc6OmNyZWF0ZSgqY29yZUZyYW1lKTsKICAgICBjb3JlRnJhbWUtPnNldFZpZXcoY29y
ZVZpZXcuY29weVJlZigpKTsKIAogICAgIFttX3dlYkZyYW1lLmdldCgpIF91cGRhdGVCYWNrZ3Jv
dW5kQW5kVXBkYXRlc1doaWxlT2Zmc2NyZWVuXTsKQEAgLTE0ODYsMTAgKzE0ODMsMTAgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQwogICAgIC8vIGxpa2UgdGhlIG9u
ZXMgdGhhdCBTYWZhcmkgdXNlcyBmb3IgYm9va21hcmtzIGl0IGlzIHRoZSBvbmx5IHdheSB0aGUg
RG9jdW1lbnRMb2FkZXIKICAgICAvLyB3aWxsIGdldCB0aGUgcHJvcGVyIHRpdGxlLgogICAgIGlm
IChhdXRvKiBkb2N1bWVudExvYWRlciA9IFtkYXRhU291cmNlIF9kb2N1bWVudExvYWRlcl0pCi0g
ICAgICAgIGRvY3VtZW50TG9hZGVyLT5zZXRUaXRsZSh7IFtkYXRhU291cmNlIHBhZ2VUaXRsZV0s
IFRleHREaXJlY3Rpb246OkxUUiB9KTsKKyAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFRpdGxl
KHsgW2RhdGFTb3VyY2UgcGFnZVRpdGxlXSwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbjo6TFRSIH0p
OwogCiAgICAgaWYgKGF1dG8qIG93bmVyRWxlbWVudCA9IGNvcmVGcmFtZS0+b3duZXJFbGVtZW50
KCkpCi0gICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zZXRDYW5IYXZlU2Nyb2xsYmFycyhvd25l
ckVsZW1lbnQtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpOworICAgICAg
ICBjb3JlRnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXJFbGVtZW50LT5z
Y3JvbGxpbmdNb2RlKCkgIT0gV2ViQ29yZTo6U2Nyb2xsYmFyQWx3YXlzT2ZmKTsKIAogICAgIC8v
IElmIHRoZSBkb2N1bWVudCB2aWV3IGltcGxpY2l0bHkgYmVjYW1lIGZpcnN0IHJlc3BvbmRlciwg
bWFrZSBzdXJlIHRvIHNldCB0aGUgZm9jdXNlZCBmcmFtZSBwcm9wZXJseS4KICAgICBpZiAoW1tk
b2N1bWVudFZpZXcgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0gPT0gZG9jdW1lbnRWaWV3KSB7CkBA
IC0xNTE1LDcgKzE1MTIsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZEJlCiB7CiB9CiAKLVJldGFpblB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyPiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6c2V0VXBQb2xpY3lMaXN0ZW5lcihQb2xpY3lDaGVja0lkZW50aWZpZXIgaWRl
bnRpZmllciwgRnJhbWVQb2xpY3lGdW5jdGlvbiYmIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gZGVm
YXVsdFBvbGljeSwgTlNVUkwgKmFwcExpbmtVUkwpCitSZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lM
aXN0ZW5lcj4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFVwUG9saWN5TGlzdGVuZXIoV2ViQ29y
ZTo6UG9saWN5Q2hlY2tJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZyYW1lUG9saWN5
RnVuY3Rpb24mJiBmdW5jdGlvbiwgV2ViQ29yZTo6UG9saWN5QWN0aW9uIGRlZmF1bHRQb2xpY3ks
IE5TVVJMICphcHBMaW5rVVJMKQogewogICAgIC8vIEZJWE1FOiA8cmRhcjovLzU2MzQzODE+IFdl
IG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBhY3RpdmUgcG9saWN5IGxpc3RlbmVycy4KICAgICBb
bV9wb2xpY3lMaXN0ZW5lciBpbnZhbGlkYXRlXTsKQEAgLTE1NDgsNyArMTU0NSw3IEBAIFN0cmlu
ZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXNlckFnZW50KGMKICAgICByZXR1cm4gW3dlYlZpZXcg
X3VzZXJBZ2VudFN0cmluZ107CiB9CiAKLU5TRGljdGlvbmFyeSAqV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmFjdGlvbkRpY3Rpb25hcnkoY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBGb3Jt
U3RhdGUqIGZvcm1TdGF0ZSkgY29uc3QKK05TRGljdGlvbmFyeSAqV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmFjdGlvbkRpY3Rpb25hcnkoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYgYWN0
aW9uLCBXZWJDb3JlOjpGb3JtU3RhdGUqIGZvcm1TdGF0ZSkgY29uc3QKIHsKICAgICB1bnNpZ25l
ZCBtb2RpZmllckZsYWdzID0gMDsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE1Nzgs
NyArMTU3NSw3IEBAIE5TRGljdGlvbmFyeSAqV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjdGkKIAog
ICAgIGlmIChhdXRvIG1vdXNlRXZlbnREYXRhID0gYWN0aW9uLm1vdXNlRXZlbnREYXRhKCkpIHsK
ICAgICAgICAgV2ViRWxlbWVudERpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0
aW9uYXJ5IGFsbG9jXQotICAgICAgICAgICAgaW5pdFdpdGhIaXRUZXN0UmVzdWx0OmNvcmUobV93
ZWJGcmFtZS5nZXQoKSktPmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KG1vdXNl
RXZlbnREYXRhLT5hYnNvbHV0ZUxvY2F0aW9uLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50
U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50KV07
CisgICAgICAgICAgICBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6Y29yZShtX3dlYkZyYW1lLmdldCgp
KS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQobW91c2VFdmVudERhdGEtPmFi
c29sdXRlTG9jYXRpb24sIFdlYkNvcmU6OkhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IFdlYkNv
cmU6OkhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBXZWJDb3JlOjpIaXRUZXN0UmVxdWVzdDo6RGlz
YWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50IHwgV2ViQ29yZTo6SGl0VGVzdFJlcXVlc3Q6OkFs
bG93Q2hpbGRGcmFtZUNvbnRlbnQpXTsKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6ZWxlbWVu
dCBmb3JLZXk6V2ViQWN0aW9uRWxlbWVudEtleV07CiAgICAgICAgIFtlbGVtZW50IHJlbGVhc2Vd
OwogCkBAIC0xNjAxLDExICsxNTk4LDExIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNh
bkNhY2hlUGFnZSgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFdlIG9ubHkg
Y2FjaGUgcGFnZXMgaWYgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IGlzIGVuYWJsZWQgYW5kIGhhcyBh
IG5vbi16ZXJvIGNhcGFjaXR5LgotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0
KCkpLT5wYWdlKCk7CisgICAgYXV0byogcGFnZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPnBh
Z2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBC
YWNrRm9yd2FyZExpc3QmIGJhY2tGb3J3YXJkTGlzdCA9IHN0YXRpY19jYXN0PEJhY2tGb3J3YXJk
TGlzdCY+KHBhZ2UtPmJhY2tGb3J3YXJkKCkuY2xpZW50KCkpOworICAgIGF1dG8mIGJhY2tGb3J3
YXJkTGlzdCA9IHN0YXRpY19jYXN0PEJhY2tGb3J3YXJkTGlzdCY+KHBhZ2UtPmJhY2tGb3J3YXJk
KCkuY2xpZW50KCkpOwogICAgIGlmICghYmFja0ZvcndhcmRMaXN0LmVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMTYxNSw3ICsxNjEyLDcgQEAgYm9vbCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y2FuQ2FjaGVQYWdlKAogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQ
dHI8RnJhbWU+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZShjb25zdCBVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQmIG93bmVyRWxlbWVu
dCwKK1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZy
YW1lKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFt
ZU93bmVyRWxlbWVudCYgb3duZXJFbGVtZW50LAogICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTYyNCw3ICsxNjIxLDcg
QEAgUmVmUHRyPEZyYW1lPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYQogICAgIAogICAgIFdl
YkZyYW1lVmlldyAqY2hpbGRWaWV3ID0gW1tXZWJGcmFtZVZpZXcgYWxsb2NdIGluaXRdOwogICAg
IAotICAgIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0gW1dlYkZyYW1lIF9jcmVhdGVTdWJmcmFtZVdp
dGhPd25lckVsZW1lbnQ6Jm93bmVyRWxlbWVudCBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6Y2hp
bGRWaWV3XTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IHJlc3VsdCA9IFtXZWJGcmFtZSBf
Y3JlYXRlU3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OiZvd25lckVsZW1lbnQgZnJhbWVOYW1lOm5h
bWUgZnJhbWVWaWV3OmNoaWxkVmlld107CiAgICAgW2NoaWxkVmlldyByZWxlYXNlXTsKIAogICAg
IFdlYkZyYW1lICpuZXdGcmFtZSA9IGtpdChyZXN1bHQuZ2V0KCkpOwpAQCAtMTY0OSw3ICsxNjQ2
LDcgQEAgUmVmUHRyPEZyYW1lPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYQogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1PYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6
b2JqZWN0Q29udGVudFR5cGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
CitXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0
Q29udGVudFR5cGUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xNjY0LDMyICsxNjYxLDMyIEBA
IE9iamVjdENvbnRlbnRUeXBlIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjoKICAgICAgICAgICAgIGlm
ICh0eXBlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIElmIG5vIE1JTUUgdHlwZSBp
cyBzcGVjaWZpZWQsIHVzZSBhIHBsdWctaW4gaWYgd2UgaGF2ZSBvbmUgdGhhdCBjYW4gaGFuZGxl
IHRoZSBleHRlbnNpb24uCiAgICAgICAgICAgICAgICAgaWYgKFtnZXRXZWJWaWV3KG1fd2ViRnJh
bWUuZ2V0KCkpIF9wbHVnaW5Gb3JFeHRlbnNpb246ZXh0ZW5zaW9uXSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlOjpQbHVnSW47CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6UGx1Z0luOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGU6OkZyYW1lOyAvLyBHbyBhaGVhZCBhbmQgaG9wZSB0
aGF0IHdlIGNhbiBkaXNwbGF5IHRoZSBjb250ZW50LgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6
T2JqZWN0Q29udGVudFR5cGU6OkZyYW1lOyAvLyBHbyBhaGVhZCBhbmQgaG9wZSB0aGF0IHdlIGNh
biBkaXNwbGF5IHRoZSBjb250ZW50LgogCi0gICAgT2JqZWN0Q29udGVudFR5cGUgcGx1Z0luVHlw
ZSA9IE9iamVjdENvbnRlbnRUeXBlOjpOb25lOworICAgIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRU
eXBlIHBsdWdJblR5cGUgPSBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6Tm9uZTsKICAgICBp
ZiAoW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX3BsdWdpbkZvck1JTUVUeXBlOnR5cGVd
KQotICAgICAgICBwbHVnSW5UeXBlID0gT2JqZWN0Q29udGVudFR5cGU6OlBsdWdJbjsKKyAgICAg
ICAgcGx1Z0luVHlwZSA9IFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlOjpQbHVnSW47CiAKLSAg
ICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQot
ICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudFR5cGU6OkltYWdlOworICAgIGlmIChXZWJDb3Jl
OjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6SW1hZ2U7CiAKLSAgICBpZiAo
cGx1Z0luVHlwZSAhPSBPYmplY3RDb250ZW50VHlwZTo6Tm9uZSkKKyAgICBpZiAocGx1Z0luVHlw
ZSAhPSBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIHBs
dWdJblR5cGU7CiAKICAgICBpZiAoW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcg
X3ZpZXdDbGFzc0Zvck1JTUVUeXBlOnR5cGVdKQotICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVu
dFR5cGU6OkZyYW1lOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGU6
OkZyYW1lOwogICAgIAotICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZTo6Tm9uZTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudFR5cGU6Ok5vbmU7CiAKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlOjpOb25lOwor
ICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZTo6Tm9uZTsKIH0KIAogc3RhdGlj
IE5TTXV0YWJsZUFycmF5KiBraXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikKQEAgLTE3
NTgsMTUgKzE3NTUsMTUgQEAgSUdOT1JFX1dBUk5JTkdTX0VORAogICAgIHJldHVybiB2aWV3Owog
fQogCi1jbGFzcyBQbHVnaW5XaWRnZXQgOiBwdWJsaWMgUGx1Z2luVmlld0Jhc2UgeworY2xhc3Mg
UGx1Z2luV2lkZ2V0IDogcHVibGljIFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlIHsKIHB1YmxpYzoK
LSAgICBQbHVnaW5XaWRnZXQoTlNWaWV3ICp2aWV3ID0gMCkKLSAgICAgICAgOiBQbHVnaW5WaWV3
QmFzZSh2aWV3KQorICAgIFBsdWdpbldpZGdldChOU1ZpZXcgKnZpZXcgPSBuaWwpCisgICAgICAg
IDogV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2UodmlldykKICAgICB7CiAgICAgfQogICAgIAogcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKICAgICB7CiAgICAgICAgIFtwbGF0Zm9ybVdpZGdldCgpIHNldE5lZWRzRGlzcGxh
eUluUmVjdDpyZWN0XTsKICAgICB9CkBAIC0xODQyLDIwICsxODM5LDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVu
dChFdmVudCYgZXZlbnQpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OkV2
ZW50JiBldmVudCkKICAgICB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IEZyYW1lOjpmcmFtZUZv
cldpZGdldCgqdGhpcyk7CisgICAgICAgIGF1dG8qIGZyYW1lID0gV2ViQ29yZTo6RnJhbWU6OmZy
YW1lRm9yV2lkZ2V0KCp0aGlzKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgICAgIE5TRXZlbnQqIGN1cnJlbnROU0V2ZW50ID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLmN1cnJlbnROU0V2ZW50KCk7Ci0gICAgICAgIGlmIChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KQorICAgICAgICBpZiAoZXZlbnQudHlw
ZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkKICAgICAgICAgICAg
IFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lkZ2V0KCkgaGFuZGxlTW91
c2VNb3ZlZDpjdXJyZW50TlNFdmVudF07Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCisgICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5
cGUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpCiAgICAgICAgICAg
ICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilwbGF0Zm9ybVdpZGdldCgpIGhhbmRsZU1v
dXNlRW50ZXJlZDpjdXJyZW50TlNFdmVudF07Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQu
dHlwZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQogICAgICAgICAg
ICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopcGxhdGZvcm1XaWRnZXQoKSBoYW5kbGVN
b3VzZUV4aXRlZDpjdXJyZW50TlNFdmVudF07Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKKyAgICAgICAgZWxzZSBpZiAoZXZl
bnQudHlwZSgpID09IFdlYkNvcmU6OmV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KQogICAg
ICAgICAgICAgZXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0
aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNv
bnRleHQgbWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25l
LgogICAgIH0KIApAQCAtMTg2NiwxNiArMTg2MywxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlXaWRnZXQoV2lkZ2V0Tm90aWZpY2F0aW9uIG5v
dGlmaWNhdGlvbikKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5V2lkZ2V0KFdlYkNvcmU6OldpZGdl
dE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vdGlm
aWNhdGlvbikgewotICAgICAgICBjYXNlIFdpbGxQYWludEZsYXR0ZW5lZDogeworICAgICAgICBj
YXNlIFdlYkNvcmU6OldpbGxQYWludEZsYXR0ZW5lZDogewogICAgICAgICAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3ICopcGxhdGZvcm1XaWRnZXQoKSBjYWNoZVNuYXBzaG90XTsKICAgICAgICAgICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIERpZFBhaW50RmxhdHRlbmVkOiB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlk
UGFpbnRGbGF0dGVuZWQ6IHsKICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKICAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXBsYXRmb3JtV2lk
Z2V0KCkgY2xlYXJDYWNoZWRTbmFwc2hvdF07CiAgICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwpAQCAtMTg5NiwxNSArMTg5MywxNSBAQCBwcml2YXRlOgogc3RhdGljIGJvb2wg
c2hvdWxkQmxvY2tQbHVnaW4oV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBsdWdpblBhY2thZ2UpCiB7
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGF1dG8gbG9hZFBvbGljeSA9IFBsdWdpbkJsYWNrbGlz
dDo6bG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24ocGx1Z2luUGFja2FnZS5idW5kbGVJZGVudGlm
aWVyLCBwbHVnaW5QYWNrYWdlLmJ1bmRsZVZlcnNpb24pOwotICAgIHJldHVybiBsb2FkUG9saWN5
ID09IFBsdWdpbkJsYWNrbGlzdDo6TG9hZFBvbGljeTo6QmxvY2tlZEZvclNlY3VyaXR5IHx8IGxv
YWRQb2xpY3kgPT0gUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5OjpCbG9ja2VkRm9yQ29tcGF0
aWJpbGl0eTsKKyAgICBhdXRvIGxvYWRQb2xpY3kgPSBXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OmxvYWRQb2xpY3lGb3JQbHVnaW5WZXJzaW9uKHBsdWdpblBhY2thZ2UuYnVuZGxlSWRlbnRpZmll
ciwgcGx1Z2luUGFja2FnZS5idW5kbGVWZXJzaW9uKTsKKyAgICByZXR1cm4gbG9hZFBvbGljeSA9
PSBXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0
eSB8fCBsb2FkUG9saWN5ID09IFdlYkNvcmU6OlBsdWdpbkJsYWNrbGlzdDo6TG9hZFBvbGljeTo6
QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwbHVnaW5Q
YWNrYWdlKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotUmVmUHRyPFdpZGdldD4g
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBI
VE1MUGx1Z0luRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsCitSZWZQdHI8V2ViQ29y
ZTo6V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50JiBlbGVtZW50LCBj
b25zdCBVUkwmIHVybCwKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBA
IC0xOTE0LDcgKzE5MTEsNyBAQCBSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlCiAgICAgaW50IGVycm9yQ29kZSA9IDA7CiAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0
V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3Jl
KG1fd2ViRnJhbWUuZ2V0KCkpLT5kb2N1bWVudCgpOworICAgIGF1dG8qIGRvY3VtZW50ID0gY29y
ZShtX3dlYkZyYW1lLmdldCgpKS0+ZG9jdW1lbnQoKTsKICAgICBOU1VSTCAqYmFzZVVSTCA9IGRv
Y3VtZW50LT5iYXNlVVJMKCk7CiAgICAgTlNVUkwgKnBsdWdpblVSTCA9IHVybDsKICAgICBOU011
dGFibGVBcnJheSAqYXR0cmlidXRlS2V5cyA9IGtpdChwYXJhbU5hbWVzKTsKQEAgLTE5NzMsOCAr
MTk3MCw4IEBAIFJlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKICAgICBp
ZiAocGx1Z2luUGFja2FnZSkgewogICAgICAgICBpZiAoc2hvdWxkQmxvY2tQbHVnaW4ocGx1Z2lu
UGFja2FnZSkpIHsKICAgICAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQmxvY2tlZFBs
dWdJblZlcnNpb247Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KGVs
ZW1lbnQucmVuZGVyZXIoKSkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRk
ZWRPYmplY3Q+KCplbGVtZW50LnJlbmRlcmVyKCkpLnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVh
c29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNpb24pOworICAgICAg
ICAgICAgaWYgKGlzPFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0PihlbGVtZW50LnJlbmRl
cmVyKCkpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0PigqZWxlbWVudC5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bihXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRP
ZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pCiAgICAgICAgICAgICAgICAgdmlldyA9
IHBsdWdpblZpZXcobV93ZWJGcmFtZS5nZXQoKSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5Q
YWNrYWdlLCBhdHRyaWJ1dGVLZXlzLCBraXQocGFyYW1WYWx1ZXMpLCBiYXNlVVJMLCBraXQoJmVs
ZW1lbnQpLCBsb2FkTWFudWFsbHkpOwpAQCAtMjAwNCw3ICsyMDAxLDcgQEAgUmVmUHRyPFdpZGdl
dD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogICAgIGlmIChlcnJvckNvZGUgJiYgbV93ZWJG
cmFtZSkgewogICAgICAgICBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSog
aW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25zKHdlYlZpZXcpOwogICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5wbHVnSW5GYWls
ZWRXaXRoRXJyb3JGdW5jKSB7Ci0gICAgICAgICAgICBVUkwgcGx1Z2luUGFnZVVSTCA9IGRvY3Vt
ZW50LT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMocGFyYW1l
dGVyVmFsdWUocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJwbHVnaW5zcGFnZSIpKSk7CisgICAg
ICAgICAgICBVUkwgcGx1Z2luUGFnZVVSTCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChXZWJDb3Jl
OjpzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMocGFyYW1ldGVyVmFsdWUocGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMsICJwbHVnaW5zcGFnZSIpKSk7CiAgICAgICAgICAgICBpZiAoIXBs
dWdpblBhZ2VVUkwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICAgICAgICAgIHBs
dWdpblBhZ2VVUkwgPSBVUkwoKTsKICAgICAgICAgICAgIE5TU3RyaW5nICpwbHVnaW5OYW1lID0g
cGx1Z2luUGFja2FnZSA/IChOU1N0cmluZyAqKVtwbHVnaW5QYWNrYWdlIHBsdWdpbkluZm9dLm5h
bWUgOiBuaWw7CkBAIC0yMDMxLDcgKzIwMjgsNyBAQCBSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y3JlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCYgcGx1Z2luV2lkZ2V0KQor
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2ViQ29yZTo6
V2lkZ2V0JiBwbHVnaW5XaWRnZXQpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogCkBAIC0yMDUzLDcgKzIwNTAsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRp
cmVjdERhdGFUCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KICAgICAKLVJlZlB0
cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNv
bnN0IEludFNpemUmIHNpemUsIEhUTUxBcHBsZXRFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwm
IGJhc2VVUkwsCitSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBXZWJD
b3JlOjpIVE1MQXBwbGV0RWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiBiYXNlVVJMLAogICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMjA3
MSw4ICsyMDY4LDggQEAgUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQog
ICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CiAgICAgICAgIGlmIChzaG91bGRCbG9ja1BsdWdpbihw
bHVnaW5QYWNrYWdlKSkgewogICAgICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JCbG9j
a2VkUGx1Z0luVmVyc2lvbjsKLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVj
dD4oZWxlbWVudC5yZW5kZXJlcigpKSkKLSAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJF
bWJlZGRlZE9iamVjdD4oKmVsZW1lbnQucmVuZGVyZXIoKSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7Cisg
ICAgICAgICAgICBpZiAoaXM8V2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q+KGVsZW1lbnQu
cmVuZGVyZXIoKSkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyRW1i
ZWRkZWRPYmplY3Q+KCplbGVtZW50LnJlbmRlcmVyKCkpLnNldFBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNlY3VyZVBsdWdpblZlcnNp
b24pOwogICAgICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQog
ICAgICAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBl
UGx1Z2luUGFja2FnZSBjbGFzc11dKSB7CkBAIC0yMTIwLDcgKzIxMTcsNyBAQCBTdHJpbmcgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkCiBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja1dl
YkdMKCkKIHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFdlYkdMQmxhY2tsaXN0Ojpz
aG91bGRCbG9ja1dlYkdMKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OldlYkdMQmxhY2tsaXN0Ojpz
aG91bGRCbG9ja1dlYkdMKCk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAt
MjEyOCwxNiArMjEyNSwxNiBAQCBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja1dlYkdMKCkKIAogV2Vi
Q29yZTo6V2ViR0xMb2FkUG9saWN5IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3ZWJHTFBvbGljeUZv
clVSTChjb25zdCBVUkwmKSBjb25zdAogewotICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkg
PyBXZWJHTEJsb2NrQ3JlYXRpb24gOiBXZWJHTEFsbG93Q3JlYXRpb247CisgICAgcmV0dXJuIHNo
b3VsZEJsb2NrV2ViR0woKSA/IFdlYkNvcmU6OldlYkdMQmxvY2tDcmVhdGlvbiA6IFdlYkNvcmU6
OldlYkdMQWxsb3dDcmVhdGlvbjsKIH0KIAogV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpyZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoY29uc3QgVVJMJikgY29u
c3QKIHsKLSAgICByZXR1cm4gc2hvdWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0aW9u
IDogV2ViR0xBbGxvd0NyZWF0aW9uOworICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkgPyBX
ZWJDb3JlOjpXZWJHTEJsb2NrQ3JlYXRpb24gOiBXZWJDb3JlOjpXZWJHTEFsbG93Q3JlYXRpb247
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCi12b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmIHdv
cmxkKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKICAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJGcmFt
ZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZp
ZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKQEAgLTIxNDgs
MTEgKzIxNDUsMTEgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCZ3b3JsZCAhPSAmbWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpCisgICAgaWYgKCZ3b3JsZCAhPSAmV2ViQ29yZTo6bWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lICpmcmFtZSA9IGNvcmUobV93
ZWJGcmFtZS5nZXQoKSk7Ci0gICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0ID0gZnJhbWUtPnNj
cmlwdCgpOworICAgIGF1dG8qIGZyYW1lID0gY29yZShtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBh
dXRvJiBzY3JpcHQgPSBmcmFtZS0+c2NyaXB0KCk7CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAogICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Rm9y
RnJhbWVGdW5jKSB7CkBAIC0yMTc0LDcgKzIxNzEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZENsCiAgICAgfQogfQogCi1SZWY8RnJhbWVOZXR3b3JraW5nQ29udGV4
dD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkKK1JlZjwg
V2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkKIHsKICAgICByZXR1cm4gV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6Y3JlYXRlKGNvcmUobV93ZWJGcmFtZS5nZXQoKSkpOwogfQpAQCAtMjE5Myw3ICsy
MTkwLDcgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkTG9hZE1lZAogI2VuZGlm
CiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKLVJlZlB0cjxQcmV2aWV3TG9hZGVyQ2xpZW50PiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUHJldmlld0xvYWRlckNsaWVudChjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHV0aSkKK1JlZlB0cjxXZWJDb3JlOjpQcmV2aWV3TG9h
ZGVyQ2xpZW50PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUHJldmlld0xvYWRlckNsaWVu
dChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHV0aSkKIHsKICAgICBjbGFz
cyBRdWlja0xvb2tEb2N1bWVudFdyaXRlciA6IHB1YmxpYyBXZWJDb3JlOjpQcmV2aWV3TG9hZGVy
Q2xpZW50IHsKICAgICBwdWJsaWM6CkBAIC0yMjMzLDcgKzIyMzAsNyBAQCBSZWZQdHI8UHJldmll
d0xvYWRlckNsaWVudD4gV2ViRnJhbWVMb2FkCiAgICAgaWYgKCFbbV93ZWJGcmFtZSB3ZWJWaWV3
XS5wcmVmZXJlbmNlcy5xdWlja0xvb2tEb2N1bWVudFNhdmluZ0VuYWJsZWQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gY3JlYXRlVGVtcG9yYXJ5
RmlsZUZvclF1aWNrTG9vayhmaWxlTmFtZSk7CisgICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gV2Vi
Q29yZTo6Y3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1aWNrTG9vayhmaWxlTmFtZSk7CiAgICAgaWYg
KCFmaWxlUGF0aCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTIyNjAsNyArMjI1Nyw3
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKGMKIHZvaWQgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmdldExvYWREZWNpc2lvbkZvckljb25zKGNvbnN0IFZlY3RvcjxzdGQ6
OnBhaXI8V2ViQ29yZTo6TGlua0ljb24mLCB1aW50NjRfdD4+JiBpY29ucykKIHsKICAgICBhdXRv
KiBmcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSk7Ci0gICAgRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CisgICAgYXV0
byogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAg
ICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMjI4OSw3
ICsyMjg2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Z2V0TG9hZERlY2lzaQogICAg
IC8vIFdlYktpdCAxLCB3aGljaCBvbmx5IHN1cHBvcnRzIG9uZSBpY29uIHBlciBwYWdlIFVSTCwg
dHJhZGl0aW9uYWxseSBoYXMgcHJlZmVycmVkIHRoZSBsYXN0IGljb24gaW4gY2FzZSBvZiBtdWx0
aXBsZSBpY29ucyBsaXN0ZWQuCiAgICAgLy8gVG8gcHJlc2VydmUgdGhhdCBiZWhhdmlvciB3ZSB3
YWxrIHRoZSBsaXN0IGJhY2t3YXJkcy4KICAgICBmb3IgKGF1dG8gaWNvbiA9IGljb25zLnJiZWdp
bigpOyBpY29uICE9IGljb25zLnJlbmQoKTsgKytpY29uKSB7Ci0gICAgICAgIGlmIChpY29uLT5m
aXJzdC50eXBlICE9IExpbmtJY29uVHlwZTo6RmF2aWNvbiB8fCBtX2FjdGl2ZUljb25Mb2FkQ2Fs
bGJhY2tJRCkgeworICAgICAgICBpZiAoaWNvbi0+Zmlyc3QudHlwZSAhPSBXZWJDb3JlOjpMaW5r
SWNvblR5cGU6OkZhdmljb24gfHwgbV9hY3RpdmVJY29uTG9hZENhbGxiYWNrSUQpIHsKICAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyLT5kaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGZhbHNlLCBp
Y29uLT5zZWNvbmQsIDApOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTIz
MDUsNyArMjMwMiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmdldExvYWREZWNpc2kK
IH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotc3RhdGljIE5TSW1hZ2UgKndlYkdldE5T
SW1hZ2UoSW1hZ2UqIGltYWdlLCBOU1NpemUgc2l6ZSkKK3N0YXRpYyBOU0ltYWdlICp3ZWJHZXRO
U0ltYWdlKFdlYkNvcmU6OkltYWdlKiBpbWFnZSwgTlNTaXplIHNpemUpCiB7CiAgICAgQVNTRVJU
KHNpemUud2lkdGgpOwogICAgIEFTU0VSVChzaXplLmhlaWdodCk7CkBAIC0yMzI4LDcgKzIzMjUs
NyBAQCBzdGF0aWMgTlNJbWFnZSAqd2ViR2V0TlNJbWFnZShJbWFnZSogaW1hCiB9CiAjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZp
bmlzaGVkTG9hZGluZ0ljb24odWludDY0X3QgY2FsbGJhY2tJRCwgU2hhcmVkQnVmZmVyKiBpY29u
RGF0YSkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZ0ljb24odWlu
dDY0X3QgY2FsbGJhY2tJRCwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiBpY29uRGF0YSkKIHsKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBBU1NFUlQobV9hY3RpdmVJY29uTG9hZENhbGxi
YWNrSUQpOwpAQCAtMjMzOSw4ICsyMzM2LDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZmluaXNoZWRMb2FkaQogICAgIGlmICghd2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKLSAgICBpZiAoaW1hZ2UtPnNldERh
dGEoaWNvbkRhdGEsIHRydWUpIDwgRW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCisg
ICAgYXV0byBpbWFnZSA9IFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBpZiAo
aW1hZ2UtPnNldERhdGEoaWNvbkRhdGEsIHRydWUpIDwgV2ViQ29yZTo6RW5jb2RlZERhdGFTdGF0
dXM6OlNpemVBdmFpbGFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TSW1hZ2UgKmljb24g
PSB3ZWJHZXROU0ltYWdlKGltYWdlLnB0cigpLCBOU01ha2VTaXplKDE2LCAxNikpOwpAQCAtMjM2
Myw3ICsyMzYwLDcgQEAgKyAodm9pZClpbml0aWFsaXplCiAjZW5kaWYKIH0KIAotLSAoaWQpaW5p
dFdpdGhGcmFtZTooRnJhbWUqKWZyYW1lIGlkZW50aWZpZXI6KFBvbGljeUNoZWNrSWRlbnRpZmll
cilpZGVudGlmaWVyIHBvbGljeUZ1bmN0aW9uOihGcmFtZVBvbGljeUZ1bmN0aW9uJiYpcG9saWN5
RnVuY3Rpb24gZGVmYXVsdFBvbGljeTooUG9saWN5QWN0aW9uKWRlZmF1bHRQb2xpY3kKKy0gKGlk
KWluaXRXaXRoRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSBpZGVudGlmaWVyOihXZWJDb3Jl
OjpQb2xpY3lDaGVja0lkZW50aWZpZXIpaWRlbnRpZmllciBwb2xpY3lGdW5jdGlvbjooV2ViQ29y
ZTo6RnJhbWVQb2xpY3lGdW5jdGlvbiYmKXBvbGljeUZ1bmN0aW9uIGRlZmF1bHRQb2xpY3k6KFdl
YkNvcmU6OlBvbGljeUFjdGlvbilkZWZhdWx0UG9saWN5CiB7CiAgICAgc2VsZiA9IFtzZWxmIGlu
aXRdOwogICAgIGlmICghc2VsZikKQEAgLTIzNzgsNyArMjM3NSw3IEBAIC0gKGlkKWluaXRXaXRo
RnJhbWU6KEZyYW1lKilmcmFtZSBpZGVudGkKIH0KIAogI2lmIEhBVkUoQVBQX0xJTktTKQotLSAo
aWQpaW5pdFdpdGhGcmFtZTooRnJhbWUqKWZyYW1lIGlkZW50aWZpZXI6KFBvbGljeUNoZWNrSWRl
bnRpZmllcilpZGVudGlmaWVyIHBvbGljeUZ1bmN0aW9uOihGcmFtZVBvbGljeUZ1bmN0aW9uJiYp
cG9saWN5RnVuY3Rpb24gZGVmYXVsdFBvbGljeTooUG9saWN5QWN0aW9uKWRlZmF1bHRQb2xpY3kg
YXBwTGlua1VSTDooTlNVUkwgKilhcHBMaW5rVVJMCistIChpZClpbml0V2l0aEZyYW1lOihXZWJD
b3JlOjpGcmFtZSopZnJhbWUgaWRlbnRpZmllcjooV2ViQ29yZTo6UG9saWN5Q2hlY2tJZGVudGlm
aWVyKWlkZW50aWZpZXIgcG9saWN5RnVuY3Rpb246KFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rp
b24mJilwb2xpY3lGdW5jdGlvbiBkZWZhdWx0UG9saWN5OihXZWJDb3JlOjpQb2xpY3lBY3Rpb24p
ZGVmYXVsdFBvbGljeSBhcHBMaW5rVVJMOihOU1VSTCAqKWFwcExpbmtVUkwKIHsKICAgICBzZWxm
ID0gW3NlbGYgaW5pdFdpdGhGcmFtZTpmcmFtZSBpZGVudGlmaWVyOmlkZW50aWZpZXIgcG9saWN5
RnVuY3Rpb246V1RGTW92ZShwb2xpY3lGdW5jdGlvbikgZGVmYXVsdFBvbGljeTpkZWZhdWx0UG9s
aWN5XTsKICAgICBpZiAoIXNlbGYpCkBAIC0yMzk0LDcgKzIzOTEsNyBAQCAtICh2b2lkKWludmFs
aWRhdGUKIHsKICAgICBfZnJhbWUgPSBudWxscHRyOwogICAgIGlmIChhdXRvIHBvbGljeUZ1bmN0
aW9uID0gc3RkOjpleGNoYW5nZShfcG9saWN5RnVuY3Rpb24sIG51bGxwdHIpKQotICAgICAgICBw
b2xpY3lGdW5jdGlvbihQb2xpY3lBY3Rpb246Oklnbm9yZSwgX2lkZW50aWZpZXIpOworICAgICAg
ICBwb2xpY3lGdW5jdGlvbihXZWJDb3JlOjpQb2xpY3lBY3Rpb246Oklnbm9yZSwgX2lkZW50aWZp
ZXIpOwogfQogCiAtICh2b2lkKWRlYWxsb2MKQEAgLTI0MTMsNyArMjQxMCw3IEBAIC0gKHZvaWQp
ZGVhbGxvYwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAodm9pZClyZWNlaXZlZFBvbGlj
eURlY2lzaW9uOihQb2xpY3lBY3Rpb24pYWN0aW9uCistICh2b2lkKXJlY2VpdmVkUG9saWN5RGVj
aXNpb246KFdlYkNvcmU6OlBvbGljeUFjdGlvbilhY3Rpb24KIHsKICAgICBhdXRvIGZyYW1lID0g
V1RGTW92ZShfZnJhbWUpOwogICAgIGlmICghZnJhbWUpCkBAIC0yNDI1LDEyICsyNDIyLDEyIEBA
IC0gKHZvaWQpcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbjooUG9saWN5QWMKIAogLSAodm9pZClpZ25v
cmUKIHsKLSAgICBbc2VsZiByZWNlaXZlZFBvbGljeURlY2lzaW9uOlBvbGljeUFjdGlvbjo6SWdu
b3JlXTsKKyAgICBbc2VsZiByZWNlaXZlZFBvbGljeURlY2lzaW9uOldlYkNvcmU6OlBvbGljeUFj
dGlvbjo6SWdub3JlXTsKIH0KIAogLSAodm9pZClkb3dubG9hZAogewotICAgIFtzZWxmIHJlY2Vp
dmVkUG9saWN5RGVjaXNpb246UG9saWN5QWN0aW9uOjpEb3dubG9hZF07CisgICAgW3NlbGYgcmVj
ZWl2ZWRQb2xpY3lEZWNpc2lvbjpXZWJDb3JlOjpQb2xpY3lBY3Rpb246OkRvd25sb2FkXTsKIH0K
IAogLSAodm9pZCl1c2UKQEAgLTI0NDAsMjEgKzI0MzcsMjEgQEAgLSAodm9pZCl1c2UKICAgICAg
ICAgW0xTQXBwTGluayBvcGVuV2l0aFVSTDpfYXBwTGlua1VSTC5nZXQoKSBjb21wbGV0aW9uSGFu
ZGxlcjpeKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSB7CiAgICAgICAgICAgICBXZWJUaHJlYWRS
dW4oXnsKICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgICAgICAgICAgICAg
W3NlbGYgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbjpQb2xpY3lBY3Rpb246Oklnbm9yZV07CisgICAg
ICAgICAgICAgICAgICAgIFtzZWxmIHJlY2VpdmVkUG9saWN5RGVjaXNpb246V2ViQ29yZTo6UG9s
aWN5QWN0aW9uOjpJZ25vcmVdOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgW3NlbGYgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbjpQb2xpY3lBY3Rpb246OlVzZV07Cisg
ICAgICAgICAgICAgICAgICAgIFtzZWxmIHJlY2VpdmVkUG9saWN5RGVjaXNpb246V2ViQ29yZTo6
UG9saWN5QWN0aW9uOjpVc2VdOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH1dOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBbc2VsZiByZWNlaXZlZFBvbGljeURlY2lz
aW9uOlBvbGljeUFjdGlvbjo6VXNlXTsKKyAgICBbc2VsZiByZWNlaXZlZFBvbGljeURlY2lzaW9u
OldlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlXTsKIH0KIAogLSAodm9pZCljb250aW51ZQogewot
ICAgIFtzZWxmIHJlY2VpdmVkUG9saWN5RGVjaXNpb246UG9saWN5QWN0aW9uOjpVc2VdOworICAg
IFtzZWxmIHJlY2VpdmVkUG9saWN5RGVjaXNpb246V2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2Vd
OwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
Ykluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0JKHJldmlzaW9uIDI1MDUyMikKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDggKzM3LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xs
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KIE5TU3RyaW5nICpXZWJJbnNwZWN0b3JEaWRTdGFydFNlYXJjaGluZ0Zvck5vZGUgPSBA
IldlYkluc3BlY3RvckRpZFN0YXJ0U2VhcmNoaW5nRm9yTm9kZSI7CiBOU1N0cmluZyAqV2ViSW5z
cGVjdG9yRGlkU3RvcFNlYXJjaGluZ0Zvck5vZGUgPSBAIldlYkluc3BlY3RvckRpZFN0b3BTZWFy
Y2hpbmdGb3JOb2RlIjsKIApAQCAtNjYsNyArNjQsNyBAQCAtICh2b2lkKWluc3BlY3RlZFdlYlZp
ZXdDbG9zZWQKIAogLSAodm9pZClzaG93V2luZG93CiB7Ci0gICAgaWYgKFBhZ2UqIGluc3BlY3Rl
ZFBhZ2UgPSBjb3JlKF9pbnNwZWN0ZWRXZWJWaWV3KSkKKyAgICBpZiAoYXV0byogaW5zcGVjdGVk
UGFnZSA9IGNvcmUoX2luc3BlY3RlZFdlYlZpZXcpKQogICAgICAgICBpbnNwZWN0ZWRQYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwogfQogCkBAIC0xNzMsNyArMTcxLDcgQEAgLSAo
dm9pZClkZXRhY2g6KGlkKXNlbmRlcgogCiAtICh2b2lkKWV2YWx1YXRlSW5Gcm9udGVuZDooaWQp
c2VuZGVyIHNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKIHsKLSAgICBpZiAoUGFnZSogaW5zcGVj
dGVkUGFnZSA9IGNvcmUoX2luc3BlY3RlZFdlYlZpZXcpKQorICAgIGlmIChhdXRvKiBpbnNwZWN0
ZWRQYWdlID0gY29yZShfaW5zcGVjdGVkV2ViVmlldykpCiAgICAgICAgIGluc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQ2xpcFZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJDbGlw
Vmlldy5tbQkocmV2aXNpb24gMjUwNTIyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJDbGlwVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAj
aW1wb3J0ICJXZWJDbGlwVmlldy5oIgogCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisKICNp
bXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgogI2lt
cG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKQEAgLTQyLDggKzQ0LDYgQEAKIAogLy8gRklYTUU6IENo
YW5nZSB0ZXJtaW5vbG9neSBmcm9tICJhZGRpdGlvbmFsIGNsaXAiIHRvICJmb2N1cyByaW5nIGNs
aXAiLgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogQGludGVyZmFjZSBOU1ZpZXcgKFdl
YlZpZXdNZXRob2QpCiAtIChXZWJWaWV3ICopX3dlYlZpZXc7CiBAZW5kCkBAIC05MSw4ICs5MSw4
IEBAIC0gKE5TUmVjdCl2aXNpYmxlUmVjdAogICAgIGlmICghW3dlYkZyYW1lVmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJGcmFtZVZpZXcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNp
YmxlUmVjdF07CiAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3dlYkZyYW1lVmll
dyB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVG
cmFtZS0+dmlldygpKSB7CisgICAgaWYgKGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3dlYkZyYW1l
VmlldyB3ZWJGcmFtZV0pKSB7CisgICAgICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBjb3JlRnJh
bWUtPnZpZXcoKSkgewogICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+aXNFbmNsb3NlZEluQ29t
cG9zaXRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBbc2VsZiBib3VuZHNdOwog
ICAgICAgICB9CkBAIC0xMTQsMTAgKzExNCwxMCBAQCAtICh2b2lkKV9pbW1lZGlhdGVTY3JvbGxU
b1BvaW50OihOU1BvaW50CiAKICAgICAvLyBXZSBtYXkgaGl0IHRoaXMgaW1tZWRpYXRlIHNjcm9s
bGluZyBjb2RlIGR1cmluZyBhIGxheW91dCBvcGVyYXRpb24gdHJpZ2dlZCBieSBhbiBBcHBLaXQg
Y2FsbC4gV2hlbgogICAgIC8vIHRoaXMgaGFwcGVucywgV2ViQ29yZSB3aWxsIG5vdCBwYWludC4g
U28sIHdlIG5lZWQgdG8gbWFyayB0aGlzIHJlZ2lvbiBkaXJ0eSBzbyB0aGF0IGl0IHBhaW50cyBw
cm9wZXJseS4KLSAgICBXZWJGcmFtZVZpZXcgKndlYkZyYW1lVmlldyA9IChXZWJGcmFtZVZpZXcg
KilbW3NlbGYgc3VwZXJ2aWV3XSBzdXBlcnZpZXddOworICAgIGF1dG8gKndlYkZyYW1lVmlldyA9
IChXZWJGcmFtZVZpZXcgKilbW3NlbGYgc3VwZXJ2aWV3XSBzdXBlcnZpZXddOwogICAgIGlmIChb
d2ViRnJhbWVWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkZyYW1lVmlldyBjbGFzc11dKSB7Ci0gICAg
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbd2ViRnJhbWVWaWV3IHdlYkZyYW1lXSkp
IHsKLSAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVGcmFtZS0+dmll
dygpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFt3ZWJGcmFtZVZpZXcg
d2ViRnJhbWVdKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IGNvcmVGcmFt
ZS0+dmlldygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZVZpZXctPmxheW91dENvbnRl
eHQoKS5pblBhaW50YWJsZVN0YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHNldE5l
ZWRzRGlzcGxheTpZRVNdOwogICAgICAgICAgICAgfQpAQCAtMTcxLDMgKzE3MSw1IEBAIC0gKE5T
UmVjdClfZm9jdXNSaW5nVmlzaWJsZVJlY3QKIH0KIAogQGVuZAorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0JKHJl
dmlzaW9uIDI1MDUyMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0
YVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNiBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9RdWlja0xvb2suaD4KICNlbmRpZgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQog
Y2xhc3MgV2ViRGF0YVNvdXJjZVByaXZhdGUKIHsKIHB1YmxpYzoKQEAgLTMyMCw3ICszMTgsNyBA
QCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAgICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiB3ZWJGcmFtZV0gX2RvY3VtZW50
RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOltbbWFp
blJlc291cmNlIFVSTF0gX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ11dOwogICAgICAgICAgICAg
W21hcmt1cFN0cmluZyByZWxlYXNlXTsKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAg
ICAgICAgfSBlbHNlIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGUoTUlNRVR5cGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoV2ViQ29yZTo6TUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKE1JTUVUeXBlKSkgewogICAgICAgICAgICAg
cmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6bWFpblJlc291
cmNlXTsKICAgICAgICAgICAgIAogICAgICAgICB9CkBAIC0zOTcsNyArMzk1LDcgQEAgLSAodm9p
ZClfbWFrZVJlcHJlc2VudGF0aW9uCiAjZW5kaWYKIH0KIAotLSAoRG9jdW1lbnRMb2FkZXIqKV9k
b2N1bWVudExvYWRlcgorLSAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKV9kb2N1bWVudExvYWRl
cgogewogICAgIHJldHVybiB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXIucHRyKCk7CiB9CkBA
IC00NDEsNyArNDM5LDcgQEAgLSAodm9pZClfc2V0UXVpY2tMb29rUHJldmlld0xvYWRlckNsaWVu
dAogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1
ZXN0CiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9pbml0V2l0aERvY3VtZW50TG9hZGVyOldlYkRvY3Vt
ZW50TG9hZGVyTWFjOjpjcmVhdGUocmVxdWVzdCwgU3Vic3RpdHV0ZURhdGEoKSldOworICAgIHJl
dHVybiBbc2VsZiBfaW5pdFdpdGhEb2N1bWVudExvYWRlcjpXZWJEb2N1bWVudExvYWRlck1hYzo6
Y3JlYXRlKHJlcXVlc3QsIFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhKCkpXTsKIH0KIAogLSAodm9p
ZClkZWFsbG9jCkBAIC00NTUsNyArNDUzLDcgQEAgLSAodm9pZClkZWFsbG9jCiAjaWYgVVNFKFFV
SUNLX0xPT0spCiAgICAgLy8gQWRkZWQgaW4gLVtXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZVJlc3BvbnNlOl0uCiAgICAgaWYgKE5TVVJMICp1cmwg
PSBbW3NlbGYgcmVzcG9uc2VdIFVSTF0pCi0gICAgICAgIHJlbW92ZVFMUHJldmlld0NvbnZlcnRl
ckZvclVSTCh1cmwpOworICAgICAgICBXZWJDb3JlOjpyZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJG
b3JVUkwodXJsKTsKICNlbmRpZgogCiAgICAgZGVsZXRlIHRvUHJpdmF0ZShfcHJpdmF0ZSk7CkBA
IC00NjUsNyArNDYzLDcgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKE5TRGF0YSAqKWRhdGEKIHsK
LSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtYWluUmVzb3VyY2VEYXRhID0gdG9Qcml2YXRlKF9w
cml2YXRlKS0+bG9hZGVyLT5tYWluUmVzb3VyY2VEYXRhKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4gbWFpblJlc291cmNlRGF0YSA9IHRvUHJpdmF0ZShfcHJpdmF0ZSktPmxv
YWRlci0+bWFpblJlc291cmNlRGF0YSgpOwogICAgIGlmICghbWFpblJlc291cmNlRGF0YSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gbWFpblJlc291cmNlRGF0YS0+Y3JlYXRlTlNE
YXRhKCkuYXV0b3JlbGVhc2UoKTsKQEAgLTQ3OCw3ICs0NzYsNyBAQCAtIChpZCA8V2ViRG9jdW1l
bnRSZXByZXNlbnRhdGlvbj4pcmVwcmVzCiAKIC0gKFdlYkZyYW1lICopd2ViRnJhbWUKIHsKLSAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gdG9Qcml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5mcmFtZSgp
KQorICAgIGlmIChhdXRvKiBmcmFtZSA9IHRvUHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+ZnJh
bWUoKSkKICAgICAgICAgcmV0dXJuIGtpdChmcmFtZSk7CiAKICAgICByZXR1cm4gbmlsOwpAQCAt
NDg2LDE3ICs0ODQsMTcgQEAgLSAoV2ViRnJhbWUgKil3ZWJGcmFtZQogCiAtIChOU1VSTFJlcXVl
c3QgKilpbml0aWFsUmVxdWVzdAogewotICAgIHJldHVybiB0b1ByaXZhdGUoX3ByaXZhdGUpLT5s
b2FkZXItPm9yaWdpbmFsUmVxdWVzdCgpLm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGlj
eTo6VXBkYXRlSFRUUEJvZHkpOworICAgIHJldHVybiB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2Fk
ZXItPm9yaWdpbmFsUmVxdWVzdCgpLm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0
ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOwogfQogCiAtIChOU011dGFibGVVUkxSZXF1ZXN0ICop
cmVxdWVzdAogewotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IHRvUHJpdmF0ZShfcHJp
dmF0ZSktPmxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICBhdXRvKiBmcmFtZUxvYWRlciA9IHRv
UHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKICAgICBpZiAoIWZyYW1l
TG9hZGVyIHx8ICFmcmFtZUxvYWRlci0+ZnJhbWVIYXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIC8vIEZJWE1FOiB0aGlzIGNhc3QgaXMgZHViaW91cwotICAgIHJldHVybiAo
TlNNdXRhYmxlVVJMUmVxdWVzdCAqKXRvUHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+cmVxdWVz
dCgpLm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkpOwor
ICAgIHJldHVybiAoTlNNdXRhYmxlVVJMUmVxdWVzdCAqKXRvUHJpdmF0ZShfcHJpdmF0ZSktPmxv
YWRlci0+cmVxdWVzdCgpLm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGlj
eTo6VXBkYXRlSFRUUEJvZHkpOwogfQogCiAtIChOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UKQEAg
LTUzNyw3ICs1MzUsNyBAQCAtIChXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQogICAgIGlmICghdG9Q
cml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5pc0NvbW1pdHRlZCgpKQogICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICAKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRo
Q29yZUxlZ2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCpjb3JlKFtzZWxm
IHdlYkZyYW1lXSkpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1dlYkFyY2hpdmUgYWxs
b2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOldlYkNvcmU6OkxlZ2FjeVdlYkFyY2hp
dmU6OmNyZWF0ZSgqY29yZShbc2VsZiB3ZWJGcmFtZV0pKV0gYXV0b3JlbGVhc2VdOwogfQogCiAt
IChXZWJSZXNvdXJjZSAqKW1haW5SZXNvdXJjZQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAyNTA1MjIpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgs
OSArMTI4LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmg+CiAj
ZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotCiB1c2luZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiAK
QEAgLTE5OSw4ICsxOTYsOSBAQCAtICh2b2lkKXNldFdlYkZyYW1lVmlldzooV2ViRnJhbWVWaWV3
ICopCiAKIEBlbmQKIAotRWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0YWJsZUxp
bmtCZWhhdmlvciBlZGl0YWJsZUxpbmtCZWhhdmlvcikKK1dlYkNvcmU6OkVkaXRhYmxlTGlua0Jl
aGF2aW9yIGNvcmUoV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3IgZWRpdGFibGVMaW5rQmVoYXZp
b3IpCiB7CisgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgc3dpdGNoIChlZGl0YWJs
ZUxpbmtCZWhhdmlvcikgewogICAgICAgICBjYXNlIFdlYktpdEVkaXRhYmxlTGlua0RlZmF1bHRC
ZWhhdmlvcjoKICAgICAgICAgICAgIHJldHVybiBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7
CkBAIC0yMTcsOCArMjE1LDkgQEAgRWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0
YWJsZQogICAgIHJldHVybiBFZGl0YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiB9CiAKLVRleHRE
aXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IgY29yZShXZWJUZXh0RGlyZWN0aW9uU3Vi
bWVudUluY2x1c2lvbkJlaGF2aW9yIGJlaGF2aW9yKQorV2ViQ29yZTo6VGV4dERpcmVjdGlvblN1
Ym1lbnVJbmNsdXNpb25CZWhhdmlvciBjb3JlKFdlYlRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVz
aW9uQmVoYXZpb3IgYmVoYXZpb3IpCiB7CisgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAg
ICAgc3dpdGNoIChiZWhhdmlvcikgewogICAgICAgICBjYXNlIFdlYlRleHREaXJlY3Rpb25TdWJt
ZW51TmV2ZXJJbmNsdWRlZDoKICAgICAgICAgICAgIHJldHVybiBUZXh0RGlyZWN0aW9uU3VibWVu
dU5ldmVySW5jbHVkZWQ7CkBAIC0yNTUsMjkgKzI1NCwyOSBAQCBWZWN0b3I8VmVjdG9yPFN0cmlu
Zz4+IHZlY3RvckZvckRpY3RhdGlvCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZSAoV2ViSW50
ZXJuYWwpCiAKLUZyYW1lKiBjb3JlKFdlYkZyYW1lICpmcmFtZSkKK1dlYkNvcmU6OkZyYW1lKiBj
b3JlKFdlYkZyYW1lICpmcmFtZSkKIHsKICAgICByZXR1cm4gZnJhbWUgPyBmcmFtZS0+X3ByaXZh
dGUtPmNvcmVGcmFtZSA6IDA7CiB9CiAKLVdlYkZyYW1lICpraXQoRnJhbWUqIGZyYW1lKQorV2Vi
RnJhbWUgKmtpdChXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lTG9hZGVyQ2xpZW50JiBmcmFtZUxvYWRlckNs
aWVudCA9IGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudCYgZnJhbWVMb2FkZXJDbGllbnQgPSBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCk7CiAg
ICAgaWYgKGZyYW1lTG9hZGVyQ2xpZW50LmlzRW1wdHlGcmFtZUxvYWRlckNsaWVudCgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVy
Q2xpZW50Jj4oZnJhbWVMb2FkZXJDbGllbnQpLndlYkZyYW1lKCk7CiB9CiAKLVBhZ2UqIGNvcmUo
V2ViVmlldyAqd2ViVmlldykKK1dlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViVmlldyAqd2ViVmlldykK
IHsKICAgICByZXR1cm4gW3dlYlZpZXcgcGFnZV07CiB9CiAKLVdlYlZpZXcgKmtpdChQYWdlKiBw
YWdlKQorV2ViVmlldyAqa2l0KFdlYkNvcmU6OlBhZ2UqIHBhZ2UpCiB7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMjkwLDE4ICsyODksMTggQEAgV2ViVmlldyAqa2l0
KFBhZ2UqIHBhZ2UpCiAKIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKQog
ewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKKyAgICBhdXRvKiBjb3Jl
RnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+cGFnZSgpKTsKIH0KIAotKyAoUmVm
PFdlYkNvcmU6OkZyYW1lPilfY3JlYXRlRnJhbWVXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5h
bWU6KGNvbnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmll
dyBvd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50CisrIChS
ZWY8V2ViQ29yZTo6RnJhbWU+KV9jcmVhdGVGcmFtZVdpdGhQYWdlOihXZWJDb3JlOjpQYWdlKilw
YWdlIGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3
ICopZnJhbWVWaWV3IG93bmVyRWxlbWVudDooV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50
Kilvd25lckVsZW1lbnQKIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0ga2l0KHBhZ2UpOwogCiAg
ICAgV2ViRnJhbWUgKmZyYW1lID0gW1tzZWxmIGFsbG9jXSBfaW5pdFdpdGhXZWJGcmFtZVZpZXc6
ZnJhbWVWaWV3IHdlYlZpZXc6d2ViVmlld107Ci0gICAgYXV0byBjb3JlRnJhbWUgPSBGcmFtZTo6
Y3JlYXRlKHBhZ2UsIG93bmVyRWxlbWVudCwgbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1l
KSk7CisgICAgYXV0byBjb3JlRnJhbWUgPSBXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKHBhZ2UsIG93
bmVyRWxlbWVudCwgbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lKSk7CiAgICAgW2ZyYW1l
IHJlbGVhc2VdOwogICAgIGZyYW1lLT5fcHJpdmF0ZS0+Y29yZUZyYW1lID0gY29yZUZyYW1lLnB0
cigpOwogCkBAIC0zMTgsNyArMzE3LDcgQEAgKyAoUmVmPFdlYkNvcmU6OkZyYW1lPilfY3JlYXRl
RnJhbWVXaXRoUAogICAgIHJldHVybiBjb3JlRnJhbWU7CiB9CiAKLSsgKHZvaWQpX2NyZWF0ZU1h
aW5GcmFtZVdpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJiluYW1l
IGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CisrICh2b2lkKV9jcmVhdGVNYWlu
RnJhbWVXaXRoUGFnZTooV2ViQ29yZTo6UGFnZSopcGFnZSBmcmFtZU5hbWU6KGNvbnN0IFN0cmlu
ZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldwogewogICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBraXQocGFnZSk7CiAKQEAgLTMzMyw3ICszMzIsNyBAQCArICh2b2lkKV9j
cmVhdGVNYWluRnJhbWVXaXRoUGFnZTooUGFnZSopCiAgICAgW3dlYlZpZXcgX3NldFpvb21NdWx0
aXBsaWVyOlt3ZWJWaWV3IF9yZWFsWm9vbU11bHRpcGxpZXJdIGlzVGV4dE9ubHk6W3dlYlZpZXcg
X3JlYWxab29tTXVsdGlwbGllcklzVGV4dE9ubHldXTsKIH0KIAotKyAoUmVmPFdlYkNvcmU6OkZy
YW1lPilfY3JlYXRlU3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25lckVsZW1l
bnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6
KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldworKyAoUmVmPFdlYkNvcmU6OkZyYW1lPilfY3JlYXRl
U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQq
KW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdl
YkZyYW1lVmlldyAqKWZyYW1lVmlldwogewogICAgIHJldHVybiBbc2VsZiBfY3JlYXRlRnJhbWVX
aXRoUGFnZTpvd25lckVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+cGFnZSgpIGZyYW1lTmFt
ZTpuYW1lIGZyYW1lVmlldzpmcmFtZVZpZXcgb3duZXJFbGVtZW50Om93bmVyRWxlbWVudF07CiB9
CkBAIC0zNDYsNyArMzQ1LDcgQEAgLSAoQk9PTClfaXNJbmNsdWRlZEluV2ViS2l0U3RhdGlzdGlj
cwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiBzdGF0aWMgTlNVUkwgKmNyZWF0ZVVuaXF1ZVdl
YkRhdGFVUkwoKTsKIAotKyAodm9pZClfY3JlYXRlTWFpbkZyYW1lV2l0aFNpbXBsZUhUTUxEb2N1
bWVudFdpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVW
aWV3IHN0eWxlOihOU1N0cmluZyAqKXN0eWxlCisrICh2b2lkKV9jcmVhdGVNYWluRnJhbWVXaXRo
U2ltcGxlSFRNTERvY3VtZW50V2l0aFBhZ2U6KFdlYkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVWaWV3
OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcgc3R5bGU6KE5TU3RyaW5nICopc3R5bGUKIHsKICAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0ga2l0KHBhZ2UpOwogICAgIApAQCAtMzY2LDEwICszNjUsMTAg
QEAgLSAodm9pZClfYXR0YWNoU2NyaXB0RGVidWdnZXIKICAgICAvLyBDYWxsaW5nIFNjcmlwdENv
bnRyb2xsZXI6Omdsb2JhbE9iamVjdCgpIHdvdWxkIGNyZWF0ZSBhIHdpbmRvdyBwcm94eSwgYW5k
IGRpc3BhdGNoIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2tzLCB3aGljaCBtYXkgYmUgcHJlbWF0dXJl
CiAgICAgLy8gaWYgdGhlIHNjcmlwdCBkZWJ1Z2dlciBpcyBhdHRhY2hlZCBiZWZvcmUgYSBkb2N1
bWVudCBpcyBjcmVhdGVkLiAgVGhlc2UgY2FsbHMgdXNlIHRoZSBkZWJ1Z2dlcldvcmxkKCksIHdl
IHdpbGwgbmVlZCB0byBwYXNzIGEgd29ybGQKICAgICAvLyB0byBiZSBhYmxlIHRvIGRlYnVnIGlz
b2xhdGVkIHdvcmxkcy4KLSAgICBpZiAoIXdpbmRvd1Byb3h5LmV4aXN0aW5nSlNXaW5kb3dQcm94
eShkZWJ1Z2dlcldvcmxkKCkpKQorICAgIGlmICghd2luZG93UHJveHkuZXhpc3RpbmdKU1dpbmRv
d1Byb3h5KFdlYkNvcmU6OmRlYnVnZ2VyV29ybGQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IHdpbmRvd1Byb3h5Lmdsb2JhbE9iamVjdChkZWJ1Z2dlcldv
cmxkKCkpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHdpbmRvd1Byb3h5Lmdsb2JhbE9iamVj
dChXZWJDb3JlOjpkZWJ1Z2dlcldvcmxkKCkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQzMCw4ICs0MjksOCBAQCAtICh2b2lkKV91cGRhdGVCYWNrZ3Jv
dW5kQW5kVXBkYXRlc1doaWxlCiAgICAgQ0dDb2xvclJlZiBiYWNrZ3JvdW5kQ29sb3IgPSBbd2Vi
VmlldyBiYWNrZ3JvdW5kQ29sb3JdOwogI2VuZGlmCiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
X3ByaXZhdGUtPmNvcmVGcmFtZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgewor
ICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CisgICAgZm9yIChhdXRv
KiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoY29yZUZyYW1lKSkgewogICAgICAgICAvLyBEb24ndCBjYWxsIHNldERyYXdzQmFja2dy
b3VuZDpZRVMgaGVyZSBiZWNhdXNlIGl0IG1heSBiZSBOTyBiZWNhdXNlIG9mIGEgbG9hZAogICAg
ICAgICAvLyBpbiBwcm9ncmVzczsgV2ViRnJhbWVMb2FkZXJDbGllbnQga2VlcHMgaXQgc2V0IHRv
IE5PIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzLgogICAgICAgICBXZWJGcmFtZSAqd2ViRnJhbWUg
PSBraXQoZnJhbWUpOwpAQCAtNDQxLDE0ICs0NDAsMTQgQEAgLSAodm9pZClfdXBkYXRlQmFja2dy
b3VuZEFuZFVwZGF0ZXNXaGlsZQogICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZpZXddIF9zY3Jv
bGxWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKICNlbmRpZgogCi0g
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgIGlm
IChhdXRvKiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewogICAgICAgICAgICAgdmlldy0+c2V0VHJh
bnNwYXJlbnQoIWRyYXdzQmFja2dyb3VuZCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAg
ICAgQ29sb3IgY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtiYWNrZ3JvdW5kQ29sb3IgY29sb3JV
c2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0pOworICAgICAgICAgICAg
V2ViQ29yZTo6Q29sb3IgY29sb3IgPSBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKFtiYWNrZ3Jv
dW5kQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0p
OwogICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAjZWxzZQot
ICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAgICAg
ICAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3IgPSBXZWJDb3JlOjpDb2xvcihiYWNrZ3JvdW5kQ29s
b3IpOwogI2VuZGlmCiAgICAgICAgICAgICB2aWV3LT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKGNv
bG9yKTsKICAgICAgICAgICAgIHZpZXctPnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKFt3
ZWJWaWV3IHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuXSk7CkBAIC00NjgsMjAgKzQ2NywyMCBA
QCAtIChpZClfaW50ZXJuYWxMb2FkRGVsZWdhdGUKIAogLSAodm9pZClfdW5tYXJrQWxsQmFkR3Jh
bW1hcgogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgYXV0byogY29y
ZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBmb3IgKGF1dG8qIGZyYW1lID0gY29y
ZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJh
bWUpKSB7CisgICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICB9CiB9CiAKIC0gKHZvaWQpX3VubWFya0FsbE1p
c3NwZWxsaW5ncwogewogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29y
ZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJh
bWUpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3Jl
RnJhbWU7CisgICAgZm9yIChhdXRvKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgeworICAgICAgICBpZiAoYXV0
byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
OwogICAgIH0KICNlbmRpZgogfQpAQCAtNDkyLDcgKzQ5MSw3IEBAIC0gKEJPT0wpX2hhc1NlbGVj
dGlvbgogCiAgICAgLy8gb3B0aW1pemF0aW9uIGZvciBjb21tb24gY2FzZSB0byBhdm9pZCBjcmVh
dGluZyBwb3RlbnRpYWxseSBsYXJnZSBzZWxlY3Rpb24gc3RyaW5nCiAgICAgaWYgKFtkb2N1bWVu
dFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICBpZiAoYXV0byog
Y29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKIAogICAgIGlmIChbZG9jdW1lbnRWaWV3IGNv
bmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRUZXh0KV0pCkBAIC01MTMsMjEg
KzUxMiwyMiBAQCAtIChCT09MKV9hdE1vc3RPbmVGcmFtZUhhc1NlbGVjdGlvbgogewogICAgIC8v
IEZJWE1FOiA0MTg2MDUwIGlzIG9uZSBrbm93biBjYXNlIHRoYXQgbWFrZXMgdGhpcyBkZWJ1ZyBj
aGVjayBmYWlsLgogICAgIEJPT0wgZm91bmQgPSBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
X3ByaXZhdGUtPmNvcmVGcmFtZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkKKyAg
ICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGZvciAoYXV0byog
ZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KGNvcmVGcmFtZSkpIHsKICAgICAgICAgaWYgKFtraXQoZnJhbWUpIF9oYXNTZWxlY3Rpb25d
KSB7CiAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5POwog
ICAgICAgICAgICAgZm91bmQgPSBZRVM7CiAgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIFlF
UzsKIH0KICNlbmRpZgogCiAtIChXZWJGcmFtZSAqKV9maW5kRnJhbWVXaXRoU2VsZWN0aW9uCiB7
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGZvciAoYXV0byogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKICAgICAgICAgV2Vi
RnJhbWUgKndlYkZyYW1lID0ga2l0KGZyYW1lKTsKICAgICAgICAgaWYgKFt3ZWJGcmFtZSBfaGFz
U2VsZWN0aW9uXSkKICAgICAgICAgICAgIHJldHVybiB3ZWJGcmFtZTsKQEAgLTU0OCwxMSArNTQ4
LDYgQEAgLSAodm9pZClfY2xlYXJTZWxlY3Rpb25Jbk90aGVyRnJhbWVzCiAgICAgQVNTRVJUKFtb
Z2V0V2ViVmlldyhzZWxmKSBtYWluRnJhbWVdIF9hdE1vc3RPbmVGcmFtZUhhc1NlbGVjdGlvbl0p
OwogfQogCi1zdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlcikKLXsKLSAgICByZXR1cm4gbG9hZGVyID8gc3RhdGljX2Nhc3Q8V2ViRG9j
dW1lbnRMb2FkZXJNYWMqPihsb2FkZXIpLT5kYXRhU291cmNlKCkgOiBuaWw7Ci19Ci0KIC0gKFdl
YkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQogewogICAgIHJldHVybiBkYXRhU291cmNlKF9wcml2
YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwpAQCAtNTcyLDcgKzU2
Nyw3IEBAIC0gKHZvaWQpX3NldElzQ29tbWl0dGluZzooQk9PTCl2YWx1ZQogCiAjZW5kaWYKIAot
LSAoTlNBcnJheSAqKV9ub2Rlc0Zyb21MaXN0OihWZWN0b3I8Tm9kZSo+ICopbm9kZXNWZWN0b3IK
Ky0gKE5TQXJyYXkgKilfbm9kZXNGcm9tTGlzdDooVmVjdG9yPFdlYkNvcmU6Ok5vZGUqPiAqKW5v
ZGVzVmVjdG9yCiB7CiAgICAgc2l6ZV90IHNpemUgPSBub2Rlc1ZlY3Rvci0+c2l6ZSgpOwogICAg
IE5TTXV0YWJsZUFycmF5ICpub2RlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0
eTpzaXplXTsKQEAgLTU4OCwzMyArNTgzLDMzIEBAIC0gKE5TU3RyaW5nICopX3NlbGVjdGVkU3Ry
aW5nCiAKIC0gKE5TU3RyaW5nICopX3N0cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7
Ci0gICAgcmV0dXJuIHBsYWluVGV4dChjb3JlKHJhbmdlKSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJl
aGF2aW9yLCB0cnVlKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KGNvcmUocmFuZ2UpLCBXZWJDb3Jl
OjpUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOwogfQogCi0tIChPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4pX3BhaW50QmVoYXZpb3JGb3JEZXN0aW5hdGlvbkNvbnRleHQ6KENHQ29u
dGV4dFJlZiljb250ZXh0CistIChPcHRpb25TZXQ8V2ViQ29yZTo6UGFpbnRCZWhhdmlvcj4pX3Bh
aW50QmVoYXZpb3JGb3JEZXN0aW5hdGlvbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIC1jdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVl
biByZXR1cm5zIFlFUyBmb3IgYml0bWFwIGNvbnRleHRzLgogICAgIEJPT0wgaXNQcmludGluZyA9
ICFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOwogICAg
IGlmIChpc1ByaW50aW5nKQotICAgICAgICByZXR1cm4gT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+
KFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykgfCBQYWludEJlaGF2aW9y
OjpTbmFwc2hvdHRpbmc7CisgICAgICAgIHJldHVybiBPcHRpb25TZXQ8V2ViQ29yZTo6UGFpbnRC
ZWhhdmlvcj4oV2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
KSB8IFdlYkNvcmU6OlBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZzsKICNlbmRpZgogCiAgICAg
aWYgKENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCi0g
ICAgICAgIHJldHVybiBQYWludEJlaGF2aW9yOjpOb3JtYWw7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpQYWludEJlaGF2aW9yOjpOb3JtYWw7CiAKICAgICAvLyBJZiB3ZSdyZSBkcmF3aW5nIGlu
dG8gYSBiaXRtYXAsIHdlIGNvdWxkIGJlIHNuYXBzaG90dGluZyBvciBkcmF3aW5nIGludG8gYSBs
YXllci1iYWNrZWQgdmlldy4KICAgICBpZiAoV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IFtz
ZWxmIF93ZWJIVE1MRG9jdW1lbnRWaWV3XSkgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIHJldHVybiBbW2RvY3VtZW50VmlldyB3aW5kb3ddIGlzSW5TbmFwc2hvdHRpbmdQYWlu
dF0gPyBQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgOiBQYWludEJlaGF2aW9yOjpOb3JtYWw7
CisgICAgICAgIHJldHVybiBbW2RvY3VtZW50VmlldyB3aW5kb3ddIGlzSW5TbmFwc2hvdHRpbmdQ
YWludF0gPyBXZWJDb3JlOjpQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcgOiBXZWJDb3JlOjpQ
YWludEJlaGF2aW9yOjpOb3JtYWw7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IGlmIChbZG9jdW1lbnRWaWV3IF93ZWJfaXNEcmF3aW5nSW50b0xheWVyXSkKLSAgICAgICAgICAg
IHJldHVybiBQYWludEJlaGF2aW9yOjpOb3JtYWw7CisgICAgICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6UGFpbnRCZWhhdmlvcjo6Tm9ybWFsOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIHJldHVy
biBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4oUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0
aW5nTGF5ZXJzKSB8IFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZzsKKyAgICByZXR1cm4gT3B0
aW9uU2V0PFdlYkNvcmU6OlBhaW50QmVoYXZpb3I+KFdlYkNvcmU6OlBhaW50QmVoYXZpb3I6OkZs
YXR0ZW5Db21wb3NpdGluZ0xheWVycykgfCBXZWJDb3JlOjpQYWludEJlaGF2aW9yOjpTbmFwc2hv
dHRpbmc7CiB9CiAKIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c09ubHk6
KEJPT0wpY29udGVudHNPbmx5CkBAIC02MjgsNyArNjIzLDcgQEAgLSAodm9pZClfZHJhd1JlY3Q6
KE5TUmVjdClyZWN0IGNvbnRlbnRzTwogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0gV0tH
ZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dChjdHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGN0eCk7
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9
IGNvcmUoc2VsZik7CkBAIC02MzksMjIgKzYzNCwyMiBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNS
ZWN0KXJlY3QgY29udGVudHNPCiAgICAgICAgIGNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoW2h0bWxEb2N1bWVudFZpZXcgX3dlYl9pc0RyYXdpbmdJbnRvQWNjZWxlcmF0ZWRMYXllcl0p
OwogI2VuZGlmCiAKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52
aWV3KCk7CisgICAgYXV0byogdmlldyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKTsKICAg
ICAKLSAgICBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gb2xkQmVoYXZpb3IgPSB2aWV3LT5wYWlu
dEJlaGF2aW9yKCk7Ci0gICAgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Ig
PSBvbGRCZWhhdmlvcjsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UGFpbnRCZWhhdmlvcj4gb2xk
QmVoYXZpb3IgPSB2aWV3LT5wYWludEJlaGF2aW9yKCk7CisgICAgT3B0aW9uU2V0PFdlYkNvcmU6
OlBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IgPSBvbGRCZWhhdmlvcjsKICAgICAKLSAgICBp
ZiAoRnJhbWUqIHBhcmVudEZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dHJlZSgpLnBhcmVu
dCgpKSB7CisgICAgaWYgKGF1dG8qIHBhcmVudEZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
dHJlZSgpLnBhcmVudCgpKSB7CiAgICAgICAgIC8vIEZvciBzdWJmcmFtZXMsIHdlIG5lZWQgdG8g
aW5oZXJpdCB0aGUgcGFpbnQgYmVoYXZpb3IgZnJvbSBvdXIgcGFyZW50Ci0gICAgICAgIGlmIChG
cmFtZVZpZXcqIHBhcmVudFZpZXcgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1lLT52aWV3KCkg
OiBudWxscHRyKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50Vmlldy0+cGFpbnRCZWhhdmlvcigp
LmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykpCi0gICAg
ICAgICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBv
c2l0aW5nTGF5ZXJzKTsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFZpZXcgPSBwYXJlbnRGcmFt
ZSA/IHBhcmVudEZyYW1lLT52aWV3KCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBpZiAocGFy
ZW50Vmlldy0+cGFpbnRCZWhhdmlvcigpLmNvbnRhaW5zKFdlYkNvcmU6OlBhaW50QmVoYXZpb3I6
OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykpCisgICAgICAgICAgICAgICAgcGFpbnRCZWhhdmlv
ci5hZGQoV2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHBhcmVudFZpZXctPnBhaW50QmVoYXZpb3Io
KS5jb250YWlucyhQYWludEJlaGF2aW9yOjpTbmFwc2hvdHRpbmcpKQotICAgICAgICAgICAgICAg
IHBhaW50QmVoYXZpb3IuYWRkKFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyk7CisgICAgICAg
ICAgICBpZiAocGFyZW50Vmlldy0+cGFpbnRCZWhhdmlvcigpLmNvbnRhaW5zKFdlYkNvcmU6OlBh
aW50QmVoYXZpb3I6OlNuYXBzaG90dGluZykpCisgICAgICAgICAgICAgICAgcGFpbnRCZWhhdmlv
ci5hZGQoV2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6U25hcHNob3R0aW5nKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHBhcmVudFZpZXctPnBhaW50QmVoYXZpb3IoKS5jb250YWlucyhQ
YWludEJlaGF2aW9yOjpUaWxlRmlyc3RQYWludCkpCi0gICAgICAgICAgICAgICAgcGFpbnRCZWhh
dmlvci5hZGQoUGFpbnRCZWhhdmlvcjo6VGlsZUZpcnN0UGFpbnQpOworICAgICAgICAgICAgaWYg
KHBhcmVudFZpZXctPnBhaW50QmVoYXZpb3IoKS5jb250YWlucyhXZWJDb3JlOjpQYWludEJlaGF2
aW9yOjpUaWxlRmlyc3RQYWludCkpCisgICAgICAgICAgICAgICAgcGFpbnRCZWhhdmlvci5hZGQo
V2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6VGlsZUZpcnN0UGFpbnQpOwogICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIHBhaW50QmVoYXZpb3IuYWRkKFtzZWxmIF9wYWludEJlaGF2aW9yRm9y
RGVzdGluYXRpb25Db250ZXh0OmN0eF0pOwpAQCAtNjYyLDkgKzY1Nyw5IEBAIC0gKHZvaWQpX2Ry
YXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c08KICAgICB2aWV3LT5zZXRQYWludEJlaGF2aW9y
KHBhaW50QmVoYXZpb3IpOwogCiAgICAgaWYgKGNvbnRlbnRzT25seSkKLSAgICAgICAgdmlldy0+
cGFpbnRDb250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKKyAgICAgICAg
dmlldy0+cGFpbnRDb250ZW50cyhjb250ZXh0LCBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpKTsKICAgICBlbHNlCi0gICAgICAgIHZpZXctPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0lu
dFJlY3QocmVjdCkpOworICAgICAgICB2aWV3LT5wYWludChjb250ZXh0LCBXZWJDb3JlOjplbmNs
b3NpbmdJbnRSZWN0KHJlY3QpKTsKIAogICAgIHZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkQmVo
YXZpb3IpOwogfQpAQCAtNjcyLDcgKzY2Nyw3IEBAIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3Qp
cmVjdCBjb250ZW50c08KIC0gKEJPT0wpX2dldFZpc2libGVSZWN0OihOU1JlY3QqKXJlY3QKIHsK
ICAgICBBU1NFUlRfQVJHKHJlY3QsIHJlY3QpOwotICAgIGlmIChSZW5kZXJXaWRnZXQqIG93bmVy
UmVuZGVyZXIgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5vd25lclJlbmRlcmVyKCkpIHsKKyAgICBp
ZiAoYXV0byogb3duZXJSZW5kZXJlciA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPm93bmVyUmVuZGVy
ZXIoKSkgewogICAgICAgICBpZiAob3duZXJSZW5kZXJlci0+bmVlZHNMYXlvdXQoKSkKICAgICAg
ICAgICAgIHJldHVybiBOTzsKICAgICAgICAgKnJlY3QgPSBvd25lclJlbmRlcmVyLT5waXhlbFNu
YXBwZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKQEAgLTY5OSw3ICs2OTQsNyBAQCAt
IChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkp
OwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwor
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCku
Z2xvYmFsT2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGpzY0xvY2soZXhlYyk7CiAjZW5kaWYKIApAQCAt
NzE1LDE1ICs3MTAsMTUgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cgogICAgICAgICByZXR1cm4gQCIiOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QoV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICNlbmRpZgogICAgIHJldHVybiByZXN1
bHQudG9XVEZTdHJpbmcoZXhlYyk7CiB9CiAKLS0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlv
bjooY29uc3QgUG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZp
bml0eQorLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBXZWJDb3JlOjpQb3Np
dGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIHN0YXRpY19jYXN0PEVBZmZpbml0
eT4oYWZmaW5pdHkpKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uKHBvcywgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RUFmZmluaXR5PihhZmZpbml0eSkpOwogICAg
IHJldHVybiB2aXNpYmxlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCkBAIC03
MzYsMTYgKzczMSwxNiBAQCAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFu
CiB7CiAgICAgYm9vbCBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTogZ2V0IHZpYSBmaXJz
dFJlY3RGb3JSYW5nZSgpLgogICAgIE5TUmVjdCByYW5nZVJlY3QgPSBbc2VsZiBfZmlyc3RSZWN0
Rm9yRE9NUmFuZ2U6cmFuZ2VdOyAgICAKLSAgICBOb2RlICpzdGFydE5vZGUgPSBjb3JlKFtyYW5n
ZSBzdGFydENvbnRhaW5lcl0pOworICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGNvcmUoW3JhbmdlIHN0
YXJ0Q29udGFpbmVyXSk7CiAgICAgICAgIAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2Rl
LT5yZW5kZXJlcigpKSB7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHN0YXJ0
Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShlbmNsb3NpbmdJbnRSZWN0KHJh
bmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsK
KyAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNv
cmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6
U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJ
Zk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0p
OwogI2Vsc2UKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJl
cigpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKSB7CiAgICAg
ICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwot
ICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGVu
Y2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgU2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNj
cm9sbGluZzo6WWVzIH0pOworICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5z
aWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3Jl
OjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFs
aWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09y
aWdpblNjcm9sbGluZzo6WWVzIH0pOwogICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAg
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwpAQCAt
NzU5LDE4ICs3NTQsMTggQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJh
bgogewogICAgIGJvb2wgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGdldCB2aWEgZmly
c3RSZWN0Rm9yUmFuZ2UoKS4KICAgICBOU1JlY3QgcmFuZ2VSZWN0ID0gTlNJbnNldFJlY3QoW3Nl
bGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXSwgaW5zZXQsIGluc2V0KTsKLSAgICBOb2Rl
ICpzdGFydE5vZGUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOworICAgIGF1dG8qIHN0
YXJ0Tm9kZSA9IGNvcmUoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CiAKICAgICBpZiAoc3RhcnRO
b2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICBSZW5kZXJMYXllciogbGF5
ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgIGF1
dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAg
ICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0gICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCkt
PnNjcm9sbFJlY3RUb1Zpc2libGUoZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVG
aXhlZCwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxp
Z25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBT
aG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXN9KTsKKyAgICAgICAgICAgIHN0YXJ0
Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJ
bnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVl
ZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNv
cmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwogICAgICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAKLSAgICAg
ICAgICAgIEZyYW1lICpjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOworICAgICAgICAgICAgYXV0byog
Y29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBjb3JlRnJhbWUt
PnNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIGF1dG8mIGZyYW1lU2VsZWN0aW9uID0gY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBmcmFtZVNlbGVjdGlvbi5zZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnVw
ZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgICAgIH0KQEAgLTc4NSw0MiArNzgwLDQyIEBAIC0g
KEJPT0wpX25lZWRzTGF5b3V0CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLS0gKERP
TVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KEZyYW1lU2VsZWN0aW9u
OjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooU2VsZWN0aW9uRGlyZWN0aW9uKWRp
cmVjdGlvbiBncmFudWxhcml0eTooVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5CistIChET01S
YW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVj
dGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxh
cml0eSlncmFudWxhcml0eQogewogICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lU2VsZWN0aW9u
IHNlbGVjdGlvbjsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAg
c2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24s
IGdyYW51bGFyaXR5KTsKICAgICByZXR1cm4ga2l0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKTsKIH0KICNlbmRpZgogCi0tIChUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdy
YW51bGFyaXR5CistIChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFy
aXR5CiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51
bGFyaXR5KCk7CiB9CiAKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopcmFu
Z2UKKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UK
IHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CiAKICAgICBzaXplX3QgbG9jYXRpb247CiAgICAgc2l6ZV90IGxlbmd0aDsKLSAgICBp
ZiAoIVRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoX3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVt
ZW50KCksIHJhbmdlLCBsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICBpZiAoIVdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCksIHJh
bmdlLCBsb2NhdGlvbiwgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90
Rm91bmQsIDApOwogCiAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpOwog
fQogCi0tIChSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3Jhbmdl
CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlu
c3JhbmdlCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpuc3JhbmdlIHJh
bmdlSXNSZWxhdGl2ZVRvOldlYlJhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3RdOwogfQog
Ci0tIChSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlIHJh
bmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbwor
LSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNy
YW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0
aXZlVG8KIHsKICAgICBpZiAobnNyYW5nZS5sb2NhdGlvbiA+IElOVF9NQVgpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtODM0LDI2ICs4MjksMjYgQEAgLSAoUmVmUHRyPFJhbmdlPilfY29u
dmVydFRvRE9NUmFuZ2U6KE5TUgogICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQg
RE9NLCBzbyBzZXJpYWxpemF0aW9uIGlzIHByb2JsZW1hdGljLiBPdXIgc29sdXRpb24gaXMKICAg
ICAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgb2YgdGhlIHNlbGVjdGlv
biBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAgICAgICAvLyBUaGF0IGZpdHMgd2l0
aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCi0gICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgYXV0byogZWxlbWVudCA9IF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpOwogICAgICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwot
ICAgICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChl
bGVtZW50LCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGVsZW1l
bnQsIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NF
UlQocmFuZ2VJc1JlbGF0aXZlVG8gPT0gV2ViUmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFncmFwaCk7
CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBjb25zdCBhdXRv
JiBzZWxlY3Rpb24gPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VS
YW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIHNlbGVjdGlv
bi52aXNpYmxlRW5kKCkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkp
LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICBpZiAoIXBhcmFncmFwaFJhbmdlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlID0gcGFy
YWdyYXBoUmFuZ2UuZ2V0KCktPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUo
KTsKLSAgICBpbnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoUmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAsICZwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpLnB0cigpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyBzdGF0aWNfY2FzdDxpbnQ+
KG5zcmFuZ2UubG9jYXRpb24pLCBuc3JhbmdlLmxlbmd0aCk7CisgICAgYXV0byYgcm9vdE5vZGUg
PSBwYXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOworICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50
KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOworICAgIHJldHVybiBXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdy
YXBoU3RhcnRJbmRleCArIHN0YXRpY19jYXN0PGludD4obnNyYW5nZS5sb2NhdGlvbiksIG5zcmFu
Z2UubGVuZ3RoKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdl
OihOU1JhbmdlKW5zcmFuZ2UKQEAgLTg3MywyOSArODY4LDI5IEBAIC0gKERPTVJhbmdlICopX21h
cmtET01SYW5nZQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRX
aXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihO
U1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGF1dG8qIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0
dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmRvY3VtZW50LCBtYXJrdXBTdHJpbmcs
IGJhc2VVUkxTdHJpbmcsIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkucHRyKCkpOworICAgIHJl
dHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwgbWFya3VwU3RyaW5n
LCBiYXNlVVJMU3RyaW5nLCBXZWJDb3JlOjpEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpLnB0cigp
KTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5v
ZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXMKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBf
cHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFt
ZTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmlsOwog
CiAgICAgTlNFbnVtZXJhdG9yICpub2RlRW51bSA9IFtub2RlcyBvYmplY3RFbnVtZXJhdG9yXTsK
LSAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVmVjdG9yOworICAgIFZlY3RvcjxXZWJDb3JlOjpOb2Rl
Kj4gbm9kZXNWZWN0b3I7CiAgICAgRE9NTm9kZSAqbm9kZTsKICAgICB3aGlsZSAoKG5vZGUgPSBb
bm9kZUVudW0gbmV4dE9iamVjdF0pKQogICAgICAgICBub2Rlc1ZlY3Rvci5hcHBlbmQoY29yZShu
b2RlKSk7CkBAIC05MjYsMzMgKzkyMSwzMyBAQCAtICh2b2lkKV9pbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JJblF1b3RlCiAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CiB9CiAKLS0gKFZpc2libGVQb3NpdGlv
bilfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKKy0gKFdlYkNvcmU6OlZp
c2libGVQb3NpdGlvbilfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsK
ICAgICAvLyBGSVhNRTogU29tZW9uZSB3aXRoIGFjY2VzcyB0byBBcHBsZSdzIHNvdXJjZXMgY291
bGQgcmVtb3ZlIHRoaXMgbmVlZGxlc3Mgd3JhcHBlciBjYWxsLgotICAgIHJldHVybiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludCkpOwor
ICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChX
ZWJDb3JlOjpJbnRQb2ludChwb2ludCkpOwogfQogCiAtIChET01SYW5nZSAqKV9jaGFyYWN0ZXJS
YW5nZUF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5j
b3JlRnJhbWUtPnJhbmdlRm9yUG9pbnQoSW50UG9pbnQocG9pbnQpKS5nZXQoKSk7CisgICAgcmV0
dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5yYW5nZUZvclBvaW50KFdlYkNvcmU6OkludFBv
aW50KHBvaW50KSkuZ2V0KCkpOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5
cGluZ1N0eWxlCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiB0eXBpbmdTdHlsZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmNvcHlUeXBpbmdTdHlsZSgpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiB0eXBpbmdTdHlsZSA9IF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmNvcHlUeXBpbmdTdHlsZSgpOwogICAgIGlm
ICghdHlwaW5nU3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIGtpdCgmdHlw
aW5nU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSk7CiB9CiAKLS0gKHZvaWQpX3Nl
dFR5cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rp
b246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgorLSAodm9pZClfc2V0VHlwaW5nU3R5bGU6KERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooV2ViQ29yZTo6RWRpdEFj
dGlvbil1bmRvQWN0aW9uCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFzdHls
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBj
cmVhdGUgYSBjb3B5IGhlcmUuCi0gICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHByb3Bl
cnRpZXMoY29yZShzdHlsZSktPmNvcHlQcm9wZXJ0aWVzKCkpOworICAgIFJlZjxXZWJDb3JlOjpN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJvcGVy
dGllcygpKTsKICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUocHJvcGVydGllcy5nZXQoKSwgdW5kb0FjdGlvbik7CiB9CiAKQEAgLTk2MSwy
NiArOTU2LDI2IEBAIC0gKHZvaWQpX2RyYWdTb3VyY2VFbmRlZEF0OihOU1BvaW50KXdpbmQKIHsK
ICAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCk7CisgICAgYXV0byogdmll
dyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybjsKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJl
LCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCi0gICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIEludFBvaW50KGdsb2JhbFBvaW50KHdp
bmRvd0xvYywgW3ZpZXctPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAw
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgV2FsbFRpbWU6Om5vdygpLCBXZWJDb3JlOjpG
b3JjZUF0Q2xpY2ssIFdlYkNvcmU6Ok5vVGFwKTsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS5kcmFnU291cmNlRW5kZWRBdChldmVudCwgKERyYWdPcGVyYXRpb24pb3Bl
cmF0aW9uKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoV2ViQ29yZTo6
SW50UG9pbnQod2luZG93TG9jKSwgV2ViQ29yZTo6SW50UG9pbnQoV2ViQ29yZTo6Z2xvYmFsUG9p
bnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddKSksCisgICAgICAg
IFdlYkNvcmU6OkxlZnRCdXR0b24sIFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQs
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXYWxsVGltZTo6bm93KCksIFdlYkNvcmU6
OkZvcmNlQXRDbGljaywgV2ViQ29yZTo6Tm9UYXApOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLmRyYWdTb3VyY2VFbmRlZEF0KGV2ZW50LCAoV2ViQ29yZTo6RHJhZ09w
ZXJhdGlvbilvcGVyYXRpb24pOwogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYm
IFBMQVRGT1JNKE1BQykKIAogLSAoQk9PTClfY2FuUHJvdmlkZURvY3VtZW50U291cmNlCiB7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBmcmFtZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gZnJhbWUtPmRvY3Vt
ZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS5taW1lVHlwZSgpOwotICAgIFBsdWdpbkRhdGEqIHBs
dWdpbkRhdGEgPSBmcmFtZS0+cGFnZSgpID8gJmZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKSA6
IDA7CisgICAgYXV0byogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCkgPyAmZnJhbWUtPnBhZ2Uo
KS0+cGx1Z2luRGF0YSgpIDogMDsKIAogICAgIGlmIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkKLSAgICAgICAgfHwgSW1hZ2U6OnN1cHBvcnRzVHlw
ZShtaW1lVHlwZSkKLSAgICAgICAgfHwgKHBsdWdpbkRhdGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9y
dHNXZWJWaXNpYmxlTWltZVR5cGUobWltZVR5cGUsIFBsdWdpbkRhdGE6OkFsbFBsdWdpbnMpICYm
IGZyYW1lLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmFsbG93UGx1Z2lucygpKQotICAgICAg
ICB8fCAocGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c1dlYlZpc2libGVNaW1lVHlw
ZShtaW1lVHlwZSwgUGx1Z2luRGF0YTo6T25seUFwcGxpY2F0aW9uUGx1Z2lucykpKQorICAgICAg
ICB8fCBXZWJDb3JlOjpJbWFnZTo6c3VwcG9ydHNUeXBlKG1pbWVUeXBlKQorICAgICAgICB8fCAo
cGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c1dlYlZpc2libGVNaW1lVHlwZShtaW1l
VHlwZSwgV2ViQ29yZTo6UGx1Z2luRGF0YTo6QWxsUGx1Z2lucykgJiYgZnJhbWUtPmxvYWRlcigp
LnN1YmZyYW1lTG9hZGVyKCkuYWxsb3dQbHVnaW5zKCkpCisgICAgICAgIHx8IChwbHVnaW5EYXRh
ICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzV2ViVmlzaWJsZU1pbWVUeXBlKG1pbWVUeXBlLCBXZWJD
b3JlOjpQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRpb25QbHVnaW5zKSkpCiAgICAgICAgIHJldHVy
biBOTzsKIAogICAgIHJldHVybiBZRVM7CkBAIC05OTYsNyArOTkxLDcgQEAgLSAoQk9PTClfY2Fu
U2F2ZUFzV2ViQXJjaGl2ZQogLSAodm9pZClfY29tbWl0RGF0YTooTlNEYXRhICopZGF0YQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIHJlYWxseSBzaG91bGQgYmUgYSBzZXR0aW5nLgotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0
byogZG9jdW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGRvY3Vt
ZW50LT5zZXRTaG91bGRDcmVhdGVSZW5kZXJlcnMoX3ByaXZhdGUtPnNob3VsZENyZWF0ZVJlbmRl
cmVycyk7CiAKICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRl
cigpLT5jb21taXREYXRhKChjb25zdCBjaGFyICopW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhd
KTsKQEAgLTEwMDksNyArMTAwNCw3IEBAIC0gKHZvaWQpX2NvbW1pdERhdGE6KE5TRGF0YSAqKWRh
dGEKIC8vIEZJWE1FOiBUaGlzIGV4aXN0cyBvbmx5IGFzIGEgY29udmVuaWVuY2UgZm9yIFNhZmFy
aSwgY29uc2lkZXIgbW92aW5nIHRoZXJlLgogLSAoQk9PTClfaXNEZXNjZW5kYW50T2ZGcmFtZToo
V2ViRnJhbWUgKilhbmNlc3RvcgogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAg
ICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnRyZWUoKS5pc0Rlc2NlbmRhbnRPZihj
b3JlKGFuY2VzdG9yKSk7CiB9CiAKQEAgLTEwMjQsMTYgKzEwMTksMTYgQEAgLSAoTlNDb2xvciAq
KV9ib2R5QmFja2dyb3VuZENvbG9yCiAtIChDR0NvbG9yUmVmKV9ib2R5QmFja2dyb3VuZENvbG9y
CiAjZW5kaWYKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kb2N1bWVudCgpOworICAgIGF1dG8qIGRvY3VtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IGF1dG8qIGJvZHkgPSBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICBpZiAoIWJvZHkp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgUmVuZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBi
b2R5LT5yZW5kZXJlcigpOworICAgIGF1dG8qIGJvZHlSZW5kZXJlciA9IGJvZHktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFib2R5UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgQ29s
b3IgY29sb3IgPSBib2R5UmVuZGVyZXItPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0
aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICBXZWJDb3JlOjpD
b2xvciBjb2xvciA9IGJvZHlSZW5kZXJlci0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JX
aXRoQ29sb3JGaWx0ZXIoV2ViQ29yZTo6Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAg
IGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gbmlsOwogI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQpAQCAtMTA0NSw3ICsxMDQwLDcgQEAgLSAoQ0dDb2xvclJlZilfYm9keUJh
Y2tncm91bmRDb2xvcgogCiAtIChCT09MKV9pc0ZyYW1lU2V0CiB7Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1
bWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCk7CiAgICAgcmV0dXJuIGRvY3Vt
ZW50ICYmIGRvY3VtZW50LT5pc0ZyYW1lU2V0KCk7CiB9CiAKQEAgLTEwNTYsMTMgKzEwNTEsMTQg
QEAgLSAoQk9PTClfZmlyc3RMYXlvdXREb25lCiAKIC0gKEJPT0wpX2lzVmlzdWFsbHlOb25FbXB0
eQogewotICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3
KCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCkpCiAg
ICAgICAgIHJldHVybiB2aWV3LT5pc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKICAgICByZXR1cm4gTk87
CiB9CiAKLXN0YXRpYyBXZWJGcmFtZUxvYWRUeXBlIHRvV2ViRnJhbWVMb2FkVHlwZShGcmFtZUxv
YWRUeXBlIGZyYW1lTG9hZFR5cGUpCitzdGF0aWMgV2ViRnJhbWVMb2FkVHlwZSB0b1dlYkZyYW1l
TG9hZFR5cGUoV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSBmcmFtZUxvYWRUeXBlKQogeworICAgIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHN3aXRjaCAoZnJhbWVMb2FkVHlwZSkgewogICAg
IGNhc2UgRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQ6CiAgICAgICAgIHJldHVybiBXZWJGcmFtZUxv
YWRUeXBlU3RhbmRhcmQ7CkBAIC0xMTE0LDEwICsxMTEwLDkgQEAgLSAoQk9PTClfbG9hZHNTeW5j
aHJvbm91c2x5CiAKIC0gKE5TQXJyYXkgKilfcmVjdHNGb3JSYW5nZTooRE9NUmFuZ2UgKilkb21S
YW5nZQogewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoZG9tUmFuZ2UpOwotICAgIAorICAgIGF1
dG8qIHJhbmdlID0gY29yZShkb21SYW5nZSk7CiAgICAgCi0gICAgVmVjdG9yPEludFJlY3Q+IGlu
dFJlY3RzOworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0czsKICAgICByYW5n
ZS0+YWJzb2x1dGVUZXh0UmVjdHMoaW50UmVjdHMsIE5PKTsKICAgICB1bnNpZ25lZCBzaXplID0g
aW50UmVjdHMuc2l6ZSgpOwogICAgIApAQCAtMTEzMSwxNyArMTEyNiwxNyBAQCAtIChOU0FycmF5
ICopX3JlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopCiAKIC0gKERPTVJhbmdlICopX3NlbGVjdGlv
blJhbmdlRm9yRmlyc3RQb2ludDooQ0dQb2ludClmaXJzdCBzZWNvbmRQb2ludDooQ0dQb2ludClz
ZWNvbmQKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RQb3MgPSBbc2VsZiBfdmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwotICAgIFZpc2libGVQb3NpdGlvbiBzZWNvbmRQb3MgPSBb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbihmaXJzdFBvcywgc2Vjb25kUG9zKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxl
UG9zaXRpb24gZmlyc3RQb3MgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3Rd
OworICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBzZWNvbmRQb3MgPSBbc2VsZiBfdmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbihmaXJzdFBvcywgc2Vjb25kUG9zKTsKICAgICBET01SYW5nZSAqcmFuZ2UgPSBr
aXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogICAgIHJldHVybiByYW5n
ZTsgICAgCiB9CiAKIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9p
bnQpcG9pbnQKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgX3Zpc2libGVQb3Np
dGlvbkZvclBvaW50OnBvaW50XTsgICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24o
cG9zKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgX3Zpc2libGVQ
b3NpdGlvbkZvclBvaW50OnBvaW50XTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihwb3MpOwogICAgIERPTVJhbmdlICpyYW5nZSA9IGtpdChzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAgICAgcmV0dXJuIHJhbmdlOwogfQpAQCAtMTE1NSwxNCAr
MTE1MCwxNCBAQCAtIChOU1JhbmdlKV9zZWxlY3RlZE5TUmFuZ2UKIAogLSAodm9pZClfc2VsZWN0
TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFJlZlB0cjxSYW5nZT4gZG9tUmFuZ2UgPSBb
c2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdOwogICAgIGlmIChk
b21SYW5nZSkKLSAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKmRvbVJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbigqZG9tUmFuZ2UsIFdlYkNvcmU6OlNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CiB9CiAKIC0gKEJPT0wpX2lzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZQog
ewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50
KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgp
OwogICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCk7CiB9
CiAKQEAgLTExNzQsOCArMTE2OSw4IEBAIC0gKHVuc2lnbmVkKV9wZW5kaW5nRnJhbWVVbmxvYWRF
dmVudENvdW4KICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIC0gKHZvaWQpX3JlY3Vy
c2l2ZV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zCiB7Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlRnJh
bWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkp
IHsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGZvciAoYXV0byogZnJh
bWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KGNvcmVGcmFtZSkpIHsKICAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVu
dFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwogICAgICAgICBp
ZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQogICAg
ICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfcmVzdW1lTnVsbEV2ZW50c0Zv
ckFsbE5ldHNjYXBlUGx1Z2luc107CkBAIC0xMTg0LDggKzExNzksOCBAQCAtICh2b2lkKV9yZWN1
cnNpdmVfcmVzdW1lTnVsbEV2ZW50c0ZvckFsCiAKIC0gKHZvaWQpX3JlY3Vyc2l2ZV9wYXVzZU51
bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShzZWxmKTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgeworICAgIGF1dG8q
IGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CisgICAgZm9yIChhdXRvKiBmcmFtZSA9IGNvcmVGcmFt
ZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkg
ewogICAgICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtba2l0
KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgICAgIGlmIChbZG9jdW1lbnRW
aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAgICAgICBbKFdl
YkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBs
dWdpbnNdOwpAQCAtMTIwMyw3ICsxMTk4LDcgQEAgLSAodW5zaWduZWQpZm9ybUVsZW1lbnRzQ2hh
cmFjdGVyQ291bnQKIC0gKHZvaWQpc2V0VGltZW91dHNQYXVzZWQ6KEJPT0wpZmxhZwogewogICAg
IGlmIChbc2VsZiBfd2ViSFRNTERvY3VtZW50Vmlld10pIHsKLSAgICAgICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICBpZiAoYXV0byogY29yZUZy
YW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKICAgICAgICAgICAgIGNvcmVGcmFtZS0+c2V0VGlt
ZXJzUGF1c2VkKGZsYWcpOwogICAgIH0KIH0KQEAgLTEyMjMsNyArMTIxOCw3IEBAIC0gKHZvaWQp
c2V0UGx1Z2luc1BhdXNlZDooQk9PTClmbGFnCiAtICh2b2lkKXByZXBhcmVGb3JQYXVzZQogewog
ICAgIGlmIChbc2VsZiBfd2ViSFRNTERvY3VtZW50Vmlld10pIHsKLSAgICAgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICBpZiAoYXV0byogY29y
ZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZGlz
cGF0Y2hQYWdlSGlkZUV2ZW50QmVmb3JlUGF1c2UoKTsKICAgICB9CiB9CkBAIC0xMjMxLDcgKzEy
MjYsNyBAQCAtICh2b2lkKXByZXBhcmVGb3JQYXVzZQogLSAodm9pZClyZXN1bWVGcm9tUGF1c2UK
IHsKICAgICBpZiAoW3NlbGYgX3dlYkhUTUxEb2N1bWVudFZpZXddKSB7Ci0gICAgICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKKyAgICAgICAgaWYgKGF1dG8q
IGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUpCiAgICAgICAgICAgICBjb3JlRnJhbWUt
PmRpc3BhdGNoUGFnZVNob3dFdmVudEJlZm9yZVJlc3VtZSgpOwogICAgIH0KIH0KQEAgLTEyNDMs
OSArMTIzOCw5IEBAIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogCiAtICh2
b2lkKXNlbGVjdFdpdGhvdXRDbG9zaW5nVHlwaW5nTlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewot
ICAgIFJlZlB0cjxSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFu
Z2VdOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVy
dFRvRE9NUmFuZ2U6cmFuZ2VdOwogICAgIGlmIChkb21SYW5nZSkgewotICAgICAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKCpkb21SYW5n
ZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICBjb25zdCBhdXRvJiBuZXdTZWxlY3Rp
b24gPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCpkb21SYW5nZSwgV2ViQ29yZTo6U0VMX0RF
RkFVTFRfQUZGSU5JVFkpOwogICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCB7IH0pOwogICAgICAgICAKICAgICAgICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVu
dFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKTsKQEAgLTEyODgsNyArMTI4Myw3IEBAIC0g
KHZvaWQpX3Jlc3RvcmVWaWV3U3RhdGUKIC0gKHZvaWQpX3NhdmVWaWV3U3RhdGUKIHsKICAgICBB
U1NFUlQoIVdlYlRocmVhZElzRW5hYmxlZCgpIHx8IFdlYlRocmVhZElzTG9ja2VkKCkpOwotICAg
IEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigp
OworICAgIGF1dG8mIGZyYW1lTG9hZGVyID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCk7
CiAgICAgYXV0byogaXRlbSA9IGZyYW1lTG9hZGVyLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwog
ICAgIGlmIChpdGVtKQogICAgICAgICBmcmFtZUxvYWRlci5jbGllbnQoKS5zYXZlVmlld1N0YXRl
VG9JdGVtKCppdGVtKTsKQEAgLTEzMDEsNyArMTI5Niw3IEBAIC0gKHZvaWQpZGV2aWNlT3JpZW50
YXRpb25DaGFuZ2VkCiAgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KHNlbGYp
OwogICAgICAgICBbd2ViVmlldyBfc2V0RGV2aWNlT3JpZW50YXRpb246W1t3ZWJWaWV3IF9VSUtp
dERlbGVnYXRlRm9yd2FyZGVyXSBkZXZpY2VPcmllbnRhdGlvbl1dOwogI2VuZGlmCi0gICAgICAg
IGlmIChXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKHNlbGYpKQorICAgICAgICBpZiAoYXV0
byogZnJhbWUgPSBjb3JlKHNlbGYpKQogICAgICAgICAgICAgZnJhbWUtPm9yaWVudGF0aW9uQ2hh
bmdlZCgpOwogICAgIH0pOwogfQpAQCAtMTMxNSwzMCArMTMxMCwzMCBAQCAtICh2b2lkKXNldE5l
ZWRzTGF5b3V0CiAKIC0gKENHU2l6ZSlyZW5kZXJlZFNpemVPZk5vZGU6KERPTU5vZGUgKilub2Rl
IGNvbnN0cmFpbmVkVG9XaWR0aDooZmxvYXQpd2lkdGgKIHsKLSAgICBOb2RlKiBuID0gY29yZShu
b2RlKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbiA/IG4tPnJlbmRlcmVyKCkgOiBu
dWxscHRyOworICAgIFdlYkNvcmU6Ok5vZGUqIG4gPSBjb3JlKG5vZGUpOworICAgIGF1dG8qIHJl
bmRlcmVyID0gbiA/IG4tPnJlbmRlcmVyKCkgOiBudWxscHRyOwogICAgIGZsb2F0IHcgPSBzdGQ6
Om1pbigoZmxvYXQpcmVuZGVyZXItPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCB3aWR0aCk7
Ci0gICAgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIpID8gQ0dTaXplTWFrZSh3LCBkb3du
Y2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcikuaGVpZ2h0KCkpIDogQ0dTaXplTWFrZSgwLCAwKTsK
KyAgICByZXR1cm4gaXM8V2ViQ29yZTo6UmVuZGVyQm94PihyZW5kZXJlcikgPyBDR1NpemVNYWtl
KHcsIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5oZWlnaHQoKSkgOiBD
R1NpemVNYWtlKDAsIDApOwogfQogCiAtIChET01Ob2RlICopZGVlcGVzdE5vZGVBdFZpZXdwb3J0
TG9jYXRpb246KENHUG9pbnQpYVZpZXdwb3J0TG9jYXRpb24KIHsKICAgICBXZWJDb3JlOjpGcmFt
ZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIHJldHVybiBraXQoZnJhbWUtPmRlZXBlc3ROb2Rl
QXRMb2NhdGlvbihGbG9hdFBvaW50KGFWaWV3cG9ydExvY2F0aW9uKSkpOworICAgIHJldHVybiBr
aXQoZnJhbWUtPmRlZXBlc3ROb2RlQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KGFWaWV3
cG9ydExvY2F0aW9uKSkpOwogfQogCiAtIChET01Ob2RlICopc2Nyb2xsYWJsZU5vZGVBdFZpZXdw
b3J0TG9jYXRpb246KENHUG9pbnQpYVZpZXdwb3J0TG9jYXRpb24KIHsKICAgICBXZWJDb3JlOjpG
cmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBmcmFt
ZS0+bm9kZVJlc3BvbmRpbmdUb1Njcm9sbFdoZWVsRXZlbnRzKEZsb2F0UG9pbnQoYVZpZXdwb3J0
TG9jYXRpb24pKTsKKyAgICBXZWJDb3JlOjpOb2RlICpub2RlID0gZnJhbWUtPm5vZGVSZXNwb25k
aW5nVG9TY3JvbGxXaGVlbEV2ZW50cyhXZWJDb3JlOjpGbG9hdFBvaW50KGFWaWV3cG9ydExvY2F0
aW9uKSk7CiAgICAgcmV0dXJuIGtpdChub2RlKTsKIH0KIAogLSAoRE9NTm9kZSAqKWFwcHJveGlt
YXRlTm9kZUF0Vmlld3BvcnRMb2NhdGlvbjooQ0dQb2ludCAqKWFWaWV3cG9ydExvY2F0aW9uCiB7
CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBGbG9hdFBvaW50
IHZpZXdwb3J0TG9jYXRpb24oKmFWaWV3cG9ydExvY2F0aW9uKTsKLSAgICBGbG9hdFBvaW50IGFk
anVzdGVkTG9jYXRpb247CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB2aWV3cG9ydExvY2F0aW9u
KCphVmlld3BvcnRMb2NhdGlvbik7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBhZGp1c3RlZExv
Y2F0aW9uOwogICAgIFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBmcmFtZS0+YXBwcm94aW1hdGVOb2Rl
QXRWaWV3cG9ydExvY2F0aW9uTGVnYWN5KHZpZXdwb3J0TG9jYXRpb24sIGFkanVzdGVkTG9jYXRp
b24pOwogICAgICphVmlld3BvcnRMb2NhdGlvbiA9IGFkanVzdGVkTG9jYXRpb247CiAgICAgcmV0
dXJuIGtpdChub2RlKTsKQEAgLTEzNjIsOCArMTM1Nyw4IEBAIC0gKHZvaWQpX3NldFByb2hpYml0
c1Njcm9sbGluZzooQk9PTClmbGEKIC0gKHZvaWQpcmV2ZWFsU2VsZWN0aW9uQXRFeHRlbnQ6KEJP
T0wpcmV2ZWFsRXh0ZW50CiB7CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxm
KTsKLSAgICBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uID0gcmV2ZWFsRXh0
ZW50ID8gUmV2ZWFsRXh0ZW50IDogRG9Ob3RSZXZlYWxFeHRlbnQ7Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKKyAg
ICBXZWJDb3JlOjpSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uID0gcmV2ZWFs
RXh0ZW50ID8gV2ViQ29yZTo6UmV2ZWFsRXh0ZW50IDogV2ViQ29yZTo6RG9Ob3RSZXZlYWxFeHRl
bnQ7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihXZWJDb3JlOjpTZWxl
Y3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCwgcmV2ZWFsRXh0ZW50T3B0aW9uKTsKIH0KIAogLSAodm9pZClyZXNldFNl
bGVjdGlvbgpAQCAtMTQyOCw3ICsxNDIzLDcgQEAgLSAoTlNSZWN0KXJlY3RGb3JTY3JvbGxUb1Zp
c2libGUKIAogLSAodm9pZClzZXRDYXJldENvbG9yOihDR0NvbG9yUmVmKWNvbG9yCiB7Ci0gICAg
Q29sb3IgcUNvbG9yID0gY29sb3IgPyBDb2xvcihjb2xvcikgOiBDb2xvcjo6YmxhY2s7CisgICAg
V2ViQ29yZTo6Q29sb3IgcUNvbG9yID0gY29sb3IgPyBXZWJDb3JlOjpDb2xvcihjb2xvcikgOiBX
ZWJDb3JlOjpDb2xvcjo6YmxhY2s7CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShz
ZWxmKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0Q2FyZXRDb2xvcihxQ29sb3IpOwogfQpA
QCAtMTQ0OSwxMyArMTQ0NCwxMyBAQCAtIChpbnQpbGF5b3V0Q291bnQKIAogLSAoQk9PTClpc1Rl
bGVwaG9uZU51bWJlclBhcnNpbmdBbGxvd2VkCiB7Ci0gICAgRG9jdW1lbnQgKmRvY3VtZW50ID0g
Y29yZShzZWxmKS0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGNvcmUoc2VsZikt
PmRvY3VtZW50KCk7CiAgICAgcmV0dXJuIGRvY3VtZW50LT5pc1RlbGVwaG9uZU51bWJlclBhcnNp
bmdBbGxvd2VkKCk7CiB9CiAKIC0gKEJPT0wpaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxl
ZAogewotICAgIERvY3VtZW50ICpkb2N1bWVudCA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCk7Cisg
ICAgYXV0byogZG9jdW1lbnQgPSBjb3JlKHNlbGYpLT5kb2N1bWVudCgpOwogICAgIHJldHVybiBk
b2N1bWVudC0+aXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpOwogfQogCkBAIC0xNDcz
LDE2ICsxNDY4LDE2IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKikK
ICAgICAvLyBFbnN1cmUgdGhlIHZpZXcgYmVjb21lcyBmaXJzdCByZXNwb25kZXIuCiAgICAgLy8g
VGhpcyBkb2VzIG5vdCBoYXBwZW4gYXV0b21hdGljYWxseSBvbiBpT1MgYmVjYXVzZSB3ZSBkb24n
dCBmb3J3YXJkCiAgICAgLy8gYWxsIHRoZSBjbGljayBldmVudHMgdG8gV2ViS2l0LgotICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpIHsKKyAgICBpZiAoYXV0byog
ZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewogICAgICAgICBpZiAoTlNWaWV3ICpkb2N1bWVu
dFZpZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50VmlldygpKSB7Ci0gICAgICAgICAgICBQYWdlKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpOwogICAgICAgICAgICAgaWYgKCFwYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmZvY3VzTlNWaWV3KGRvY3VtZW50Vmlldyk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShj
b3JlKHJhbmdlKSwgKEVBZmZpbml0eSlhZmZpbml0eSwgY2xvc2VUeXBpbmcgPyBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcyA6IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6Tm8pOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNv
cmUocmFuZ2UpLCAoV2ViQ29yZTo6RUFmZmluaXR5KWFmZmluaXR5LCBjbG9zZVR5cGluZyA/IFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzIDogV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpObyk7CiAgICAgaWYgKCFjbG9zZVR5
cGluZykKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1
cnJlbnRTZWxlY3Rpb25JZk9wZW5Gb3JNb3JlVHlwaW5nKCk7CiB9CkBAIC0xNjE2LDExICsxNjEx
LDExIEBAIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZSBvbkUKIHsKICAgICBX
ZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwogCi0gICAgRG9jdW1lbnQgKmRvYyA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2MgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSog
bm9kZSA9IGNvcmUoZWxlbWVudCk7CisgICAgYXV0byogbm9kZSA9IGNvcmUoZWxlbWVudCk7CiAg
ICAgaWYgKCFub2RlLT5pc0Nvbm5lY3RlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2NDIs
NyArMTYzNyw3IEBAIC0gKHZvaWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0IHMKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPENvbXBvc2l0
aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lczsKICAgICBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGll
bnQoKS5zdXBwcmVzc0Zvcm1Ob3RpZmljYXRpb25zKCk7CiAgICAgZnJhbWUtPmVkaXRvcigpLnNl
dENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBOU01h
eFJhbmdlKG5ld1NlbFJhbmdlKSk7CiAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50
KCkucmVzdG9yZUZvcm1Ob3RpZmljYXRpb25zKCk7CkBAIC0xNjU0LDcgKzE2NDksNyBAQCAtICh2
b2lkKXNldE1hcmtlZFRleHQ6KE5TU3RyaW5nICopdGV4dCBmCiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1
bmRlcmxpbmVzOwogICAgIGZyYW1lLT5lZGl0b3IoKS5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRl
cmxpbmVzLCAwLCBbdGV4dCBsZW5ndGhdKTsKIH0KIApAQCAtMTcyMywyMCArMTcxOCwyMCBAQCAt
ICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJhbmdlczooTlNBcnJhCiAgICAgTlNNdXRhYmxlQXJy
YXkgKnJhbmdlcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgTlNNdXRhYmxlQXJyYXkg
Km1ldGFkYXRhcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAgICAgCi0gICAgRnJhbWUqIGZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBFbGVtZW50KiByb290
ID0gc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVj
dGlvbiA/IGZyYW1lLT5kb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpIDogc2VsZWN0aW9uLnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBjb25zdCBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogcm9vdCA9IHNl
bGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6Tm9T
ZWxlY3Rpb24gPyBmcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKSA6IHNlbGVjdGlv
bi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgCiAgICAgRE9NUmFuZ2UgKnByZXZpb3VzRE9N
UmFuZ2UgPSBuaWw7CiAgICAgaWQgcHJldmlvdXNNZXRhZGF0YSA9IG5pbDsKICAgICAKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
bm9kZSkpIHsKKyAgICBmb3IgKFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2Rl
ID0gV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgYXV0byBt
YXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKTsKICAgICAgICAg
Zm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAKLSAgICAgICAgICAgIGlmIChtYXJrZXIt
PnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KQorICAgICAgICAgICAg
aWYgKG1hcmtlci0+dHlwZSgpICE9IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25S
ZXN1bHQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlkIG1ldGFkYXRhID0gbWFya2VyLT5tZXRhZGF0YSgpOwpAQCAtMTc0Niw3ICsxNzQxLDcg
QEAgLSAodm9pZClnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6KE5TQXJyYQogICAgICAgICAgICAg
aWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCBub2RlLCBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOworICAgICAg
ICAgICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCBub2Rl
LCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0ga2l0KHJhbmdlLnB0cigpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG1ldGFkYXRhICE9IHByZXZpb3VzTWV0YWRhdGEpIHsKQEAg
LTE3ODAsNyArMTc3NSw3IEBAIC0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6
KEQKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGF1dG8g
bWFya2VycyA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5n
ZSgqY29yZShyYW5nZSksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpOworICAgIGF1
dG8gbWFya2VycyA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5S
YW5nZSgqY29yZShyYW5nZSksIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1
bHQpOwogICAgIAogICAgIC8vIFVJS2l0IHNob3VsZCBvbmx5IGV2ZXIgZ2l2ZSB1cyBhIERPTVJh
bmdlIGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcywgd2hpY2ggc2hvdWxkIG5vdCBiZSBw
YXJ0IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0LgogICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA8
PSAxKTsKQEAgLTE4MDQsNyArMTc5OSw3IEBAICsgKE5TU3RyaW5nICopc3RyaW5nV2l0aERhdGE6
KE5TRGF0YSAqKWQKIHsKICAgICBXZWJDb3JlOjpUZXh0RW5jb2RpbmcgZW5jb2RpbmcodGV4dEVu
Y29kaW5nTmFtZSk7CiAgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgIGVuY29k
aW5nID0gV2luZG93c0xhdGluMUVuY29kaW5nKCk7CisgICAgICAgIGVuY29kaW5nID0gV2ViQ29y
ZTo6V2luZG93c0xhdGluMUVuY29kaW5nKCk7CiAgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhd
KTsKIH0KIApAQCAtMTgzOCw4ICsxODMzLDcgQEAgLSAoQ1RGb250UmVmKWZvbnRGb3JTZWxlY3Rp
b246KEJPT0wgKiloYQogICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNlOwogICAgIENURm9u
dFJlZiBmb250ID0gbmlsOwogICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lKSB7Ci0gICAgICAg
IGNvbnN0IEZvbnQKLSAgICAgICAgKiBmZCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigp
LmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cyk7CisgICAgICAgIGNvbnN0IFdlYkNvcmU6
OkZvbnQqIGZkID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZm9udEZvclNlbGVjdGlv
bihtdWx0aXBsZUZvbnRzKTsKICAgICAgICAgaWYgKGZkKQogICAgICAgICAgICAgZm9udCA9IGZk
LT5nZXRDVEZvbnQoKTsKICAgICB9CkBAIC0xODU4LDcgKzE4NTIsNyBAQCAtICh2b2lkKXNlbmRT
Y3JvbGxFdmVudAogLSAodm9pZClfdXNlclNjcm9sbGVkCiB7CiAgICAgQVNTRVJUKFdlYlRocmVh
ZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+dmlldygpKQorICAgIGlmIChhdXRvKiB2aWV3ID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+dmlldygpKQogICAgICAgICB2aWV3LT5zZXRXYXNTY3JvbGxlZEJ5VXNlcih0cnVl
KTsKIH0KIApAQCAtMTg4NSw3ICsxODc5LDcgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5n
ZTooRE9NUmFuZ2UgKgogLy8gCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBz
bWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHls
ZQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
cmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogCiAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChj
cmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtz
ZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2Vt
ZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHls
ZTptYXRjaFN0eWxlXTsKQEAgLTE5MTEsOSArMTkwNSw5IEBAIC0gKHZvaWQpcmVzZXRUZXh0QXV0
b3NpemluZ0JlZm9yZUxheW91dAogICAgIGlmICghW3NlbGYgX3dlYkhUTUxEb2N1bWVudFZpZXdd
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoc2Vs
Zik7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgRG9jdW1lbnQg
KmRvYyA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoc2Vs
Zik7CisgICAgZm9yIChhdXRvKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgeworICAgICAgICBXZWJDb3JlOjpE
b2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9jIHx8ICFk
b2MtPnJlbmRlclZpZXcoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkb2MtPnJl
bmRlclZpZXcoKS0+cmVzZXRUZXh0QXV0b3NpemluZygpOwpAQCAtMTkyNyw4ICsxOTIxLDggQEAg
LSAodm9pZClfc2V0VmlzaWJsZVNpemU6KENHU2l6ZSlzaXplCiAKIC0gKHZvaWQpX3NldFRleHRB
dXRvc2l6aW5nV2lkdGg6KENHRmxvYXQpd2lkdGgKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBjb3JlKHNlbGYpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGF1
dG8qIGZyYW1lID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTk1Miw3ICsxOTQ2LDcgQEAg
LSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRAogewogICAgIGlmIChfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhZnJhZ21lbnQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5yZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50KCpjb3JlKGZyYWdtZW50KSwgc2VsZWN0UmVwbGFjZW1lbnQgPyBF
ZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50OjpZZXMgOiBFZGl0b3I6OlNlbGVjdFJlcGxhY2VtZW50
OjpObywgc21hcnRSZXBsYWNlID8gRWRpdG9yOjpTbWFydFJlcGxhY2U6OlllcyA6IEVkaXRvcjo6
U21hcnRSZXBsYWNlOjpObywgbWF0Y2hTdHlsZSA/IEVkaXRvcjo6TWF0Y2hTdHlsZTo6WWVzIDog
RWRpdG9yOjpNYXRjaFN0eWxlOjpObyk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkucmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgqY29yZShmcmFnbWVudCksIHNlbGVjdFJl
cGxhY2VtZW50ID8gV2ViQ29yZTo6RWRpdG9yOjpTZWxlY3RSZXBsYWNlbWVudDo6WWVzIDogV2Vi
Q29yZTo6RWRpdG9yOjpTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIHNtYXJ0UmVwbGFjZSA/IFdlYkNv
cmU6OkVkaXRvcjo6U21hcnRSZXBsYWNlOjpZZXMgOiBXZWJDb3JlOjpFZGl0b3I6OlNtYXJ0UmVw
bGFjZTo6Tm8sIG1hdGNoU3R5bGUgPyBXZWJDb3JlOjpFZGl0b3I6Ok1hdGNoU3R5bGU6OlllcyA6
IFdlYkNvcmU6OkVkaXRvcjo6TWF0Y2hTdHlsZTo6Tm8pOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKQEAgLTE5NjksNyArMTk2Myw3IEBAIC0gKEJPT0wpaGFzUmljaGx5RWRpdGFibGVT
ZWxlY3Rpb24KIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAq
KXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBs
YWNlOihCT09MKXNtYXJ0UmVwbGFjZQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIAogICAgIERPTURvY3VtZW50RnJhZ21lbnQq
IGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRl
eHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVTXTsKQEAgLTE5OTUsMjggKzE5ODksMjggQEAg
LSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nIAogICAgICAgICAqYWZ0ZXJT
dHJpbmcgPSBuaWw7CiAgICAgICAgIAogICAgIC8vIGluc3BlY3QgZGVzdGluYXRpb24KLSAgICBO
b2RlICpzdGFydENvbnRhaW5lciA9IGNvcmUoW3JhbmdlVG9SZXBsYWNlIHN0YXJ0Q29udGFpbmVy
XSk7Ci0gICAgTm9kZSAqZW5kQ29udGFpbmVyID0gY29yZShbcmFuZ2VUb1JlcGxhY2UgZW5kQ29u
dGFpbmVyXSk7CisgICAgV2ViQ29yZTo6Tm9kZSAqc3RhcnRDb250YWluZXIgPSBjb3JlKFtyYW5n
ZVRvUmVwbGFjZSBzdGFydENvbnRhaW5lcl0pOworICAgIFdlYkNvcmU6Ok5vZGUgKmVuZENvbnRh
aW5lciA9IGNvcmUoW3JhbmdlVG9SZXBsYWNlIGVuZENvbnRhaW5lcl0pOwogCi0gICAgUG9zaXRp
b24gc3RhcnRQb3Moc3RhcnRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBzdGFydE9mZnNldF0s
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwotICAgIFBvc2l0aW9uIGVuZFBv
cyhlbmRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBlbmRPZmZzZXRdLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICBXZWJDb3JlOjpQb3NpdGlvbiBzdGFydFBvcyhz
dGFydENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIHN0YXJ0T2Zmc2V0XSwgV2ViQ29yZTo6UG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgV2ViQ29yZTo6UG9zaXRpb24g
ZW5kUG9zKGVuZENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIGVuZE9mZnNldF0sIFdlYkNvcmU6
OlBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihzdGFydFBvcywgVlBfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3MgPSBWaXNpYmxl
UG9zaXRpb24oZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zID0gV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uKHN0
YXJ0UG9zLCBXZWJDb3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvcyA9IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbihlbmRQ
b3MsIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIAogICAgIC8vIHRoaXMgY2hl
Y2sgYWxzbyBlbnN1cmVzIHN0YXJ0Q29udGFpbmVyLCBzdGFydFBvcywgZW5kQ29udGFpbmVyLCBh
bmQgZW5kUG9zIGFyZSBub24tbnVsbAogICAgIGlmIChzdGFydFZpc2libGVQb3MuaXNOdWxsKCkg
fHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBh
ZGRMZWFkaW5nU3BhY2UgPSBzdGFydFBvcy5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RF
RkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3Rh
cnRWaXNpYmxlUG9zKTsKKyAgICBib29sIGFkZExlYWRpbmdTcGFjZSA9IHN0YXJ0UG9zLmxlYWRp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSku
aXNOdWxsKCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydFZpc2libGVQb3MpOwogICAgIGlm
IChhZGRMZWFkaW5nU3BhY2UpCiAgICAgICAgIGlmIChVQ2hhciBwcmV2aW91c0NoYXIgPSBzdGFy
dFZpc2libGVQb3MucHJldmlvdXMoKS5jaGFyYWN0ZXJBZnRlcigpKQotICAgICAgICAgICAgYWRk
TGVhZGluZ1NwYWNlID0gIWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KHByZXZpb3VzQ2hh
ciwgdHJ1ZSk7CisgICAgICAgICAgICBhZGRMZWFkaW5nU3BhY2UgPSAhV2ViQ29yZTo6aXNDaGFy
YWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXNDaGFyLCB0cnVlKTsKICAgICAKLSAgICBi
b29sIGFkZFRyYWlsaW5nU3BhY2UgPSBlbmRQb3MudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24o
VlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kVmlzaWJsZVBvcyk7CisgICAgYm9vbCBhZGRUcmFpbGluZ1NwYWNlID0gZW5kUG9zLnRyYWls
aW5nV2hpdGVzcGFjZVBvc2l0aW9uKFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUp
LmlzTnVsbCgpICYmICFpc0VuZE9mUGFyYWdyYXBoKGVuZFZpc2libGVQb3MpOwogICAgIGlmIChh
ZGRUcmFpbGluZ1NwYWNlKQogICAgICAgICBpZiAoVUNoYXIgdGhpc0NoYXIgPSBlbmRWaXNpYmxl
UG9zLmNoYXJhY3RlckFmdGVyKCkpCi0gICAgICAgICAgICBhZGRUcmFpbGluZ1NwYWNlID0gIWlz
Q2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KHRoaXNDaGFyLCBmYWxzZSk7CisgICAgICAgICAg
ICBhZGRUcmFpbGluZ1NwYWNlID0gIVdlYkNvcmU6OmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhl
bXB0KHRoaXNDaGFyLCBmYWxzZSk7CiAgICAgCiAgICAgLy8gaW5zcGVjdCBzb3VyY2UKICAgICBi
b29sIGhhc1doaXRlc3BhY2VBdFN0YXJ0ID0gZmFsc2U7CkBAIC0yMDQ1LDIzICsyMDM5LDIzIEBA
IC0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKilfY2FjaGVhYmlsaXR5RGkKIHsKICAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpyZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsK
ICAgICAKLSAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5sb2FkZXIoKTsKLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxv
YWRlci5kb2N1bWVudExvYWRlcigpOworICAgIGF1dG8mIGZyYW1lTG9hZGVyID0gX3ByaXZhdGUt
PmNvcmVGcmFtZS0+bG9hZGVyKCk7CisgICAgYXV0byogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxv
YWRlci5kb2N1bWVudExvYWRlcigpOwogICAgIGlmIChkb2N1bWVudExvYWRlciAmJiAhZG9jdW1l
bnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkpCiAgICAgICAgIFtyZXN1bHQg
c2V0T2JqZWN0OihOU0Vycm9yICopZG9jdW1lbnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkg
Zm9yS2V5OldlYkZyYW1lTWFpbkRvY3VtZW50RXJyb3JdOwogICAgICAgICAKICAgICBpZiAoZnJh
bWVMb2FkZXIuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKICAgICAgICAgW3Jl
c3VsdCBzZXRPYmplY3Q6QFlFUyBmb3JLZXk6V2ViRnJhbWVIYXNQbHVnaW5zXTsKICAgICAKLSAg
ICBpZiAoRE9NV2luZG93KiBkb21XaW5kb3cgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKSkgewotICAgICAgICBpZiAoZG9tV2luZG93LT5oYXNFdmVudExpc3Rl
bmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQorICAgIGlmIChXZWJDb3JlOjpET01XaW5k
b3cqIGRvbVdpbmRvdyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRv
dygpKSB7CisgICAgICAgIGlmIChkb21XaW5kb3ctPmhhc0V2ZW50TGlzdGVuZXJzKFdlYkNvcmU6
OmV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCiAgICAgICAgICAgICBbcmVzdWx0IHNldE9iamVj
dDpAWUVTIGZvcktleTpXZWJGcmFtZUhhc1VubG9hZExpc3RlbmVyXTsKICAgICAgICAgaWYgKGRv
bVdpbmRvdy0+b3B0aW9uYWxBcHBsaWNhdGlvbkNhY2hlKCkpCiAgICAgICAgICAgICBbcmVzdWx0
IHNldE9iamVjdDpAWUVTIGZvcktleTpXZWJGcmFtZVVzZXNBcHBsaWNhdGlvbkNhY2hlXTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3JlRnJh
bWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKERhdGFiYXNlTWFuYWdlcjo6c2luZ2xldG9u
KCkuaGFzT3BlbkRhdGFiYXNlcygqZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiBkb2N1bWVudCA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6c2luZ2xldG9uKCkuaGFzT3BlbkRhdGFiYXNlcygqZG9jdW1lbnQp
KQogICAgICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6QFlFUyBmb3JLZXk6V2ViRnJhbWVVc2Vz
RGF0YWJhc2VzXTsKICAgICAgICAgaWYgKCFkb2N1bWVudC0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNGb3JEb2N1bWVudFN1c3BlbnNpb24oKSkKICAgICAgICAgICAgIFtyZXN1bHQgc2V0T2Jq
ZWN0OkBZRVMgZm9yS2V5OldlYkZyYW1lQ2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHNdOwpAQCAt
MjA4NiwxOSArMjA4MCwxOSBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyCiAgICAgICAgIHJldHVybiBAIiI7CiAKICAgICAvLyBTdGFydCBvZmYgd2l0aCBzb21lIGd1
ZXNzIGF0IGEgZnJhbWUgYW5kIGEgZ2xvYmFsIG9iamVjdCwgd2UnbGwgdHJ5IHRvIGRvIGJldHRl
ci4uLiEKLSAgICBKU0RPTVdpbmRvdyogYW55V29ybGRHbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
OworICAgIGF1dG8qIGFueVdvcmxkR2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsK
IAogICAgIC8vIFRoZSBnbG9iYWwgb2JqZWN0IGlzIHByb2JhYmx5IGEgcHJveHkgb2JqZWN0PyAt
IGlmIHNvLCB3ZSBrbm93IGhvdyB0byB1c2UgdGhpcyEKICAgICBKU0M6OkpTT2JqZWN0KiBnbG9i
YWxPYmplY3RPYmogPSB0b0pTKGdsb2JhbE9iamVjdFJlZik7CiAgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3RPYmotPnZtKCk7CiAgICAgaWYgKCFzdHJjbXAoZ2xvYmFsT2JqZWN0T2JqLT5j
bGFzc0luZm8odm0pLT5jbGFzc05hbWUsICJKU1dpbmRvd1Byb3h5IikpCi0gICAgICAgIGFueVdv
cmxkR2xvYmFsT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4odm0sIHN0
YXRpY19jYXN0PEpTV2luZG93UHJveHkqPihnbG9iYWxPYmplY3RPYmopLT53aW5kb3coKSk7Cisg
ICAgICAgIGFueVdvcmxkR2xvYmFsT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PFdlYkNvcmU6
OkpTRE9NV2luZG93Kj4odm0sIHN0YXRpY19jYXN0PFdlYkNvcmU6OkpTV2luZG93UHJveHkqPihn
bG9iYWxPYmplY3RPYmopLT53aW5kb3coKSk7CiAKICAgICBpZiAoIWFueVdvcmxkR2xvYmFsT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gQCIiOwogCiAgICAgLy8gR2V0IHRoZSBmcmFtZSBmcm9tZSB0
aGUgZ2xvYmFsIG9iamVjdCB3ZSd2ZSBzZXR0bGVkIG9uLgotICAgIEZyYW1lKiBmcmFtZSA9IGFu
eVdvcmxkR2xvYmFsT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKKyAgICBhdXRvKiBmcmFtZSA9
IGFueVdvcmxkR2xvYmFsT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKICAgICBBU1NFUlQoZnJh
bWUtPmRvY3VtZW50KCkpOwogICAgIFJldGFpblB0cjxXZWJGcmFtZT4gd2ViRnJhbWUoa2l0KGZy
YW1lKSk7IC8vIFJ1bm5pbmcgYXJiaXRyYXJ5IEphdmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIGZy
YW1lLgogCkBAIC0yMTIwLDEwICsyMTE0LDEwIEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3IKIAogLSAoSlNHbG9iYWxDb250ZXh0UmVmKV9nbG9iYWxDb250ZXh0Rm9y
U2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKIHsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0
ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBET01XcmFwcGVyV29ybGQqIGNvcmVXb3JsZCA9IGNvcmUod29ybGQpOworICAgIGF1dG8qIGNv
cmVXb3JsZCA9IGNvcmUod29ybGQpOwogICAgIGlmICghY29yZVdvcmxkKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QoKmNvcmVXb3JsZCktPmdsb2JhbEV4ZWMoKSk7CkBAIC0yMTYxLDEzICsyMTU1LDEzIEBA
IC0gKHZvaWQpc2V0QWx3YXlzSGlkZVZlcnRpY2FsU2Nyb2xsZXI6KEIKIC0gKHZvaWQpc2V0QWNj
ZXNzaWJsZU5hbWU6KE5TU3RyaW5nICopbmFtZQogewogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZ
KQotICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICBp
ZiAoIVdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2
YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiByb290T2JqZWN0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9j
dW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0KCk7CisgICAgYXV0byogcm9vdE9i
amVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
cm9vdE9iamVjdCgpOwogICAgIGlmIChyb290T2JqZWN0KSB7CiAgICAgICAgIFN0cmluZyBzdHJO
YW1lKG5hbWUpOwogICAgICAgICByb290T2JqZWN0LT5zZXRBY2Nlc3NpYmxlTmFtZShzdHJOYW1l
KTsKQEAgLTIxNzgsNyArMjE3Miw3IEBAIC0gKHZvaWQpc2V0QWNjZXNzaWJsZU5hbWU6KE5TU3Ry
aW5nICopbmEKIC0gKEJPT0wpZW5oYW5jZWRBY2Nlc3NpYmlsaXR5RW5hYmxlZAogewogI2lmIEVO
QUJMRShBQ0NFU1NJQklMSVRZKQotICAgIHJldHVybiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCgp
OwogI2Vsc2UKICAgICByZXR1cm4gTk87CiAjZW5kaWYKQEAgLTIxODcsMTMgKzIxODEsMTMgQEAg
LSAoQk9PTCllbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFibGVkCiAtICh2b2lkKXNldEVuaGFuY2Vk
QWNjZXNzaWJpbGl0eTooQk9PTCllbmFibGUKIHsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkK
LSAgICBBWE9iamVjdENhY2hlOjpzZXRFbmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nlc3NpYmlsaXR5
KGVuYWJsZSk7CisgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c2V0RW5oYW5jZWRVc2VySW50
ZXJmYWNlQWNjZXNzaWJpbGl0eShlbmFibGUpOwogI2VuZGlmCiB9CiAKIC0gKE5TU3RyaW5nKilf
bGF5ZXJUcmVlQXNUZXh0CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3Jl
RnJhbWU7CisgICAgYXV0byogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgICBp
ZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIEAiIjsKIApAQCAtMjIwMywxMSArMjE5Nywx
MSBAQCAtIChOU1N0cmluZyopX2xheWVyVHJlZUFzVGV4dAogLSAoaWQpYWNjZXNzaWJpbGl0eVJv
b3QKIHsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5hYmxl
QWNjZXNzaWJpbGl0eSgpOworICAgIGlmICghV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkgeworICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFi
bGVBY2Nlc3NpYmlsaXR5KCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgIEFYT2JqZWN0Q2FjaGU6
OnNldEVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoW1tOU0FwcCBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6TlNBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlQXR0
cmlidXRlXSBib29sVmFsdWVdKTsKKyAgICAgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c2V0
RW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNzaWJpbGl0eShbW05TQXBwIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VBdHRyaWJ1
dGVdIGJvb2xWYWx1ZV0pOwogICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19F
TkQKICNlbmRpZgogICAgIH0KQEAgLTIyMTUsMTEgKzIyMDksMTEgQEAgLSAoaWQpYWNjZXNzaWJp
bGl0eVJvb3QKICAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUo
KSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBy
b290T2JqZWN0ID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+cm9vdE9iamVjdEZvckZyYW1l
KF9wcml2YXRlLT5jb3JlRnJhbWUpOworICAgIGF1dG8qIHJvb3RPYmplY3QgPSBkb2N1bWVudC0+
YXhPYmplY3RDYWNoZSgpLT5yb290T2JqZWN0Rm9yRnJhbWUoX3ByaXZhdGUtPmNvcmVGcmFtZSk7
CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjIz
Niw3ICsyMjMwLDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eVJvb3QKIAogLSAodm9pZClfY2xlYXJP
cGVuZXIKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAg
ICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmIChjb3JlRnJh
bWUpCiAgICAgICAgIGNvcmVGcmFtZS0+bG9hZGVyKCkuc2V0T3BlbmVyKDApOwogfQpAQCAtMjI2
NSwxNyArMjI1OSwxNyBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRT
CiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCktPmRvY3VtZW50VmlldygpKQog
ICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwogCi0gICAgUmVuZGVyVmlldyogcm9vdCA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKTsKKyAgICBhdXRv
KiByb290ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpOwog
ICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKIAotICAgIGNv
bnN0IExheW91dFJlY3QmIGRvY3VtZW50UmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgpOworICAg
IGNvbnN0IGF1dG8mIGRvY3VtZW50UmVjdCA9IHJvb3QtPmRvY3VtZW50UmVjdCgpOwogICAgIGZs
b2F0IHByaW50V2lkdGggPSByb290LT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBzdGF0aWNfY2FzdDxmbG9hdD4oZG9jdW1lbnRSZWN0LndpZHRoKCkpIC8gcHJpbnRTY2FsZUZh
Y3RvciA6IHBhZ2VTaXplLndpZHRoOwogICAgIGZsb2F0IHByaW50SGVpZ2h0ID0gcm9vdC0+c3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGFnZVNpemUuaGVpZ2h0IDogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGRvY3VtZW50UmVjdC5oZWlnaHQoKSkgLyBwcmludFNjYWxlRmFjdG9yOwog
Ci0gICAgUHJpbnRDb250ZXh0IHByaW50Q29udGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lKTsKLSAg
ICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShGbG9hdFNpemUocHJp
bnRXaWR0aCwgcHJpbnRIZWlnaHQpLCB0cnVlKTsKLSAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHBhZ2VSZWN0cyA9IHByaW50Q29udGV4dC5wYWdlUmVjdHMoKTsKKyAgICBXZWJDb3JlOjpQcmlu
dENvbnRleHQgcHJpbnRDb250ZXh0KF9wcml2YXRlLT5jb3JlRnJhbWUpOworICAgIHByaW50Q29u
dGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShwcmlu
dFdpZHRoLCBwcmludEhlaWdodCksIHRydWUpOworICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiYgcGFnZVJlY3RzID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0cygpOwogCiAgICAgc2l6
ZV90IHNpemUgPSBwYWdlUmVjdHMuc2l6ZSgpOwogICAgIE5TTXV0YWJsZUFycmF5ICpwYWdlcyA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKQEAgLTIzMTAsMTAgKzIz
MDQsMTAgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogCiAtIChC
T09MKWZvY3VzZWROb2RlSGFzQ29udGVudAogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJh
bWU7CiAgICAKLSAgICBFbGVtZW50KiByb290OwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogcm9vdDsKKyAgICBjb25zdCBhdXRvJiBzZWxlY3Rpb24gPSBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkg
fHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByb290ID0gY29yZUZy
YW1lLT5kb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpOwogICAgIGVsc2UgewpAQCAtMjMyNSwz
MSArMjMxOSwzMSBAQCAtIChCT09MKWZvY3VzZWROb2RlSGFzQ29udGVudAogICAgIGlmICghcm9v
dCB8fCAhcm9vdC0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBW
aXNpYmxlUG9zaXRpb24gZmlyc3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDAp
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
cm9vdCwgcm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb24gZmlyc3QoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDApKTsKKyAgICBX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24gbGFzdChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
cm9vdCwgcm9vdC0+Y291bnRDaGlsZE5vZGVzKCkpKTsKICAgICByZXR1cm4gZmlyc3QgIT0gbGFz
dDsKIH0KIAogLSAodm9pZClfZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGU6KE5TU3RyaW5nICopdGl0
bGUKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBh
dXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1l
KQogICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaXNw
YXRjaERpZFJlY2VpdmVUaXRsZSh7IHRpdGxlLCBUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CisgICAg
Y29yZUZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERpZFJlY2VpdmVUaXRsZSh7IHRp
dGxlLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uOjpMVFIgfSk7CiB9CiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQogCiAtIChKU1ZhbHVlUmVmKWpzV3JhcHBlckZvck5vZGU6KERPTU5v
ZGUgKilub2RlIGluU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29ybGQKIHsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmICghd29ybGQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNE
T01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0
KCpjb3JlKHdvcmxkKSk7CisgICAgV2ViQ29yZTo6SlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9
IGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KCpjb3JlKHdvcmxkKSk7CiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CkBAIC0yMzU4LDEwICsyMzUyLDEwIEBAIC0gKEpT
VmFsdWVSZWYpanNXcmFwcGVyRm9yTm9kZTooRE9NTm9kZSAKIAogLSAoTlNEaWN0aW9uYXJ5ICop
ZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
X3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29y
ZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0
OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQo
cG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZl
IHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2Fs
bG93VXNlckFnZW50U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJh
bWVDb250ZW50KV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJFbGVtZW50RGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBXZWJDb3Jl
OjpIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBXZWJDb3JlOjpIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlIHwgV2ViQ29yZTo6SGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nIHwgV2ViQ29yZTo6
SGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCB8IFdlYkNvcmU6
OkhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50KV0gYXV0b3JlbGVhc2VdOwog
fQogCiAtIChOU1VSTCAqKV91bnJlYWNoYWJsZVVSTApAQCAtMjM5Niw3ICsyMzkwLDcgQEAgLSAo
dm9pZClkZWFsbG9jCiAKIC0gKE5TU3RyaW5nICopbmFtZQogewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgcmV0dXJuIGNvcmVGcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUoKTsKQEAgLTI0MTcsNyArMjQx
MSw3IEBAIHN0YXRpYyBib29sIG5lZWRzTWljcm9zb2Z0TWVzc2VuZ2VyRE9NRG8KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgc3RhdGljIGJv
b2wgbmVlZHNXb3JrYXJvdW5kID0gTWFjQXBwbGljYXRpb246OmlzTWljcm9zb2Z0TWVzc2VuZ2Vy
KCkgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6
KE5TU3RyaW5nICopa0NGQnVuZGxlVmVyc2lvbktleV0gY29tcGFyZTpAIjcuMSIgb3B0aW9uczpO
U051bWVyaWNTZWFyY2hdID09IE5TT3JkZXJlZEFzY2VuZGluZzsKKyAgICBzdGF0aWMgYm9vbCBu
ZWVkc1dvcmthcm91bmQgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNNaWNyb3NvZnRNZXNz
ZW5nZXIoKSAmJiBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBvYmplY3RGb3JJbmZvRGljdGlvbmFy
eUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XSBjb21wYXJlOkAiNy4xIiBvcHRp
b25zOk5TTnVtZXJpY1NlYXJjaF0gPT0gTlNPcmRlcmVkQXNjZW5kaW5nOwogICAgIHJldHVybiBu
ZWVkc1dvcmthcm91bmQ7CiAjZW5kaWYKIH0KQEAgLTI0MjcsNyArMjQyMSw3IEBAIC0gKERPTURv
Y3VtZW50ICopRE9NRG9jdW1lbnQKICAgICBpZiAobmVlZHNNaWNyb3NvZnRNZXNzZW5nZXJET01E
b2N1bWVudFdvcmthcm91bmQoKSAmJiAhcHRocmVhZF9tYWluX25wKCkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAg
ICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZy
YW1lKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjQzNyw3ICsyNDMxLDcgQEAgLSAo
RE9NRG9jdW1lbnQgKilET01Eb2N1bWVudAogICAgIGlmICghW1tzZWxmIF9kYXRhU291cmNlXSBf
aXNEb2N1bWVudEhUTUxdKSAKICAgICAgICAgcmV0dXJuIG5pbDsgCiAKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7CiAgICAgCiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2N1
bWVudGF0aW9uLCB3ZSBzaG91bGQgcmV0dXJuIG5pbCBpZiB0aGUgZnJhbWUgZG9lc24ndCBoYXZl
IGEgZG9jdW1lbnQuCiAgICAgLy8gV2hpbGUgZnVsbC1mcmFtZSBpbWFnZXMgYW5kIHBsdWdpbnMg
ZG8gaGF2ZSBhbiB1bmRlcmx5aW5nIEhUTUwgZG9jdW1lbnQsIHdlIHJldHVybiBuaWwgaGVyZSB0
byBiZQpAQCAtMjQ1MCw3ICsyNDQ0LDcgQEAgLSAoRE9NRG9jdW1lbnQgKilET01Eb2N1bWVudAog
CiAtIChET01IVE1MRWxlbWVudCAqKWZyYW1lRWxlbWVudAogewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPm93bmVyRWxlbWVudCgpKTsKQEAgLTI0NTgsMjMgKzI0
NTIsMjMgQEAgLSAoRE9NSFRNTEVsZW1lbnQgKilmcmFtZUVsZW1lbnQKIAogLSAoV2ViRGF0YVNv
dXJjZSAqKXByb3Zpc2lvbmFsRGF0YVNvdXJjZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBf
cHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3Jl
RnJhbWU7CiAgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGRhdGFTb3VyY2UoY29yZUZyYW1lLT5sb2Fk
ZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpIDogbmlsOwogfQogCiAtIChXZWJEYXRh
U291cmNlICopZGF0YVNvdXJjZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAg
ICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLmZyYW1lSGFzTG9hZGVk
KCkgPyBbc2VsZiBfZGF0YVNvdXJjZV0gOiBuaWw7CiB9CiAKIC0gKHZvaWQpbG9hZFJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZh
dGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
OwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXNvdXJjZVJl
cXVlc3QgcmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCByZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7CiAgICAgCiAgICAgLy8gU29tZSB1c2VycyBv
ZiBXZWJLaXQgQVBJIGluY29ycmVjdGx5IHVzZSAiZmlsZSBwYXRoIGFzIFVSTCIgc3R5bGUgcmVx
dWVzdHMgd2hpY2ggYXJlIGludmFsaWQuCiAgICAgLy8gQnkgcmUtd3JpdGluZyB0aG9zZSBVUkxz
IGhlcmUgd2UgdGVjaG5pY2FsbHkgYnJlYWsgdGhlIC1bV2ViRGF0YVNvdXJjZSBpbml0aWFsUmVx
dWVzdF0gQVBJCkBAIC0yNDg0LDcgKzI0NzgsNyBAQCAtICh2b2lkKWxvYWRSZXF1ZXN0OihOU1VS
TFJlcXVlc3QgKilyZXF1CiAgICAgaWYgKCFyZXNvdXJjZVJlcXVlc3QudXJsKCkuaXNWYWxpZCgp
ICYmICFyZXNvdXJjZVJlcXVlc3QudXJsKCkuaXNFbXB0eSgpKQogICAgICAgICByZXNvdXJjZVJl
cXVlc3Quc2V0VVJMKFtOU1VSTCBVUkxXaXRoU3RyaW5nOltAImZpbGU6IiBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpbW3JlcXVlc3QgVVJMXSBhYnNvbHV0ZVN0cmluZ11dXSk7CiAKLSAgICBjb3Jl
RnJhbWUtPmxvYWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdCgqY29yZUZyYW1lLCByZXNvdXJj
ZVJlcXVlc3QsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93KSk7
CisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS5sb2FkKFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3Qo
KmNvcmVGcmFtZSwgcmVzb3VyY2VSZXF1ZXN0LCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5OjpTaG91bGROb3RBbGxvdykpOwogfQogCiBzdGF0aWMgTlNVUkwgKmNyZWF0ZVVu
aXF1ZVdlYkRhdGFVUkwoKQpAQCAtMjUxMywyMSArMjUwNywyMSBAQCAtICh2b2lkKV9sb2FkRGF0
YTooTlNEYXRhICopZGF0YSBNSU1FVHlwCiAgICAgfQogICAgIAogI2lmIFVTRShRVUlDS19MT09L
KQotICAgIGlmIChzaG91bGRVc2VRdWlja0xvb2tGb3JNSU1FVHlwZShNSU1FVHlwZSkpIHsKKyAg
ICBpZiAoV2ViQ29yZTo6c2hvdWxkVXNlUXVpY2tMb29rRm9yTUlNRVR5cGUoTUlNRVR5cGUpKSB7
CiAgICAgICAgIE5TVVJMICpxdWlja0xvb2tVUkwgPSByZXNwb25zZVVSTCA/IHJlc3BvbnNlVVJM
IDogYmFzZVVSTDsKLSAgICAgICAgaWYgKGF1dG8gcmVxdWVzdCA9IHJlZ2lzdGVyUUxQcmV2aWV3
Q29udmVydGVySWZOZWVkZWQocXVpY2tMb29rVVJMLCBNSU1FVHlwZSwgZGF0YSkpIHsKLSAgICAg
ICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmxvYWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVz
dCgqX3ByaXZhdGUtPmNvcmVGcmFtZSwgcmVxdWVzdC5nZXQoKSwgU2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cpKTsKKyAgICAgICAgaWYgKGF1dG8gcmVxdWVzdCA9
IFdlYkNvcmU6OnJlZ2lzdGVyUUxQcmV2aWV3Q29udmVydGVySWZOZWVkZWQocXVpY2tMb29rVVJM
LCBNSU1FVHlwZSwgZGF0YSkpIHsKKyAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmxv
YWRlcigpLmxvYWQoV2ViQ29yZTo6RnJhbWVMb2FkUmVxdWVzdCgqX3ByaXZhdGUtPmNvcmVGcmFt
ZSwgcmVxdWVzdC5nZXQoKSwgV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkTm90QWxsb3cpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
ICNlbmRpZgogCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoYmFzZVVSTCk7CisgICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoYmFzZVVSTCk7CiAKLSAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlKHJlc3BvbnNlVVJMLCBNSU1FVHlwZSwgW2RhdGEgbGVuZ3RoXSwgZW5j
b2RpbmdOYW1lKTsKLSAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRlRGF0YShXZWJDb3JlOjpT
aGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhKSwgW3VucmVhY2hhYmxlVVJMIGFic29sdXRlVVJMXSwg
cmVzcG9uc2UsIFN1YnN0aXR1dGVEYXRhOjpTZXNzaW9uSGlzdG9yeVZpc2liaWxpdHk6OkhpZGRl
bik7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShyZXNwb25zZVVSTCwg
TUlNRVR5cGUsIFtkYXRhIGxlbmd0aF0sIGVuY29kaW5nTmFtZSk7CisgICAgV2ViQ29yZTo6U3Vi
c3RpdHV0ZURhdGEgc3Vic3RpdHV0ZURhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZGF0YSksIFt1bnJlYWNoYWJsZVVSTCBhYnNvbHV0ZVVSTF0sIHJlc3BvbnNlLCBXZWJDb3JlOjpT
dWJzdGl0dXRlRGF0YTo6U2Vzc2lvbkhpc3RvcnlWaXNpYmlsaXR5OjpIaWRkZW4pOwogCi0gICAg
X3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCkubG9hZChGcmFtZUxvYWRSZXF1ZXN0KCpfcHJp
dmF0ZS0+Y29yZUZyYW1lLCByZXF1ZXN0LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpT
aG91bGROb3RBbGxvdywgc3Vic3RpdHV0ZURhdGEpKTsKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5sb2FkZXIoKS5sb2FkKFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3QoKl9wcml2YXRlLT5jb3Jl
RnJhbWUsIHJlcXVlc3QsIFdlYkNvcmU6OlNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNo
b3VsZE5vdEFsbG93LCBzdWJzdGl0dXRlRGF0YSkpOwogfQogCiAtICh2b2lkKWxvYWREYXRhOihO
U0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRFbmNvZGluZ05h
bWU6KE5TU3RyaW5nICopZW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTApAQCAt
MjU4NCw3ICsyNTc4LDcgQEAgLSAodm9pZClyZWxvYWRGcm9tT3JpZ2luCiAKIC0gKFdlYkZyYW1l
ICopZmluZEZyYW1lTmFtZWQ6KE5TU3RyaW5nICopbmFtZQogewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnRyZWUoKS5maW5kKG5hbWUsICpjb3JlRnJhbWUpKTsK
QEAgLTI1OTIsNyArMjU4Niw3IEBAIC0gKFdlYkZyYW1lICopZmluZEZyYW1lTmFtZWQ6KE5TU3Ry
aW5nICoKIAogLSAoV2ViRnJhbWUgKilwYXJlbnRGcmFtZQogewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRl
LT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgcmV0dXJuIFtba2l0KGNvcmVGcmFtZS0+dHJlZSgpLnBhcmVudCgpKSByZXRhaW5dIGF1dG9y
ZWxlYXNlXTsKQEAgLTI2MDAsMTggKzI1OTQsMTggQEAgLSAoV2ViRnJhbWUgKilwYXJlbnRGcmFt
ZQogCiAtIChOU0FycmF5ICopY2hpbGRGcmFtZXMKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
X3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29y
ZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJy
YXldOwogICAgIE5TTXV0YWJsZUFycmF5ICpjaGlsZHJlbiA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpjb3JlRnJhbWUtPnRyZWUoKS5jaGlsZENvdW50KCldOwotICAgIGZvciAo
RnJhbWUqIGNoaWxkID0gY29yZUZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChXZWJDb3JlOjpGcmFt
ZSogY2hpbGQgPSBjb3JlRnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKICAgICAgICAgW2NoaWxkcmVuIGFkZE9iamVj
dDpraXQoY2hpbGQpXTsKICAgICByZXR1cm4gY2hpbGRyZW47CiB9CiAKIC0gKFdlYlNjcmlwdE9i
amVjdCAqKXdpbmRvd09iamVjdAogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjb3JlRnJh
bWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE9iamVjdCgpOwpAQCAtMjYxOSwxNiArMjYxMywxNiBA
QCAtIChXZWJTY3JpcHRPYmplY3QgKil3aW5kb3dPYmplY3QKIAogLSAoSlNHbG9iYWxDb250ZXh0
UmVmKWdsb2JhbENvbnRleHQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNv
cmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAg
IGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdG9HbG9iYWxS
ZWYoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpLT5nbG9iYWxFeGVjKCkpOworICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNj
cmlwdCgpLmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmds
b2JhbEV4ZWMoKSk7CiB9CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogLSAoSlNDb250ZXh0
ICopamF2YVNjcmlwdENvbnRleHQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUt
PmNvcmVGcmFtZTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwog
ICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY29yZUZy
YW1lLT5zY3JpcHQoKS5qYXZhU2NyaXB0Q29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHJldmlzaW9uIDI1MDUyMikK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw4ICs4Miw2IEBACiAjaW1wb3J0ICJXZWJOU1dpbmRvd0V4dHJhcy5o
IgogI2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiAjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCiBAaW50ZXJmYWNlIE5TV2luZG93IChXaW5kb3dQcml2YXRlKQogLSAoQk9PTClf
bmVlZHNUb1Jlc2V0RHJhZ01hcmdpbnM7CkBAIC0xMzUsNyArMTMzLDcgQEAgLSAoZmxvYXQpX3Zl
cnRpY2FsS2V5Ym9hcmRTY3JvbGxEaXN0YW5jZQogICAgIHJldHVybiBbW3NlbGYgX3Njcm9sbFZp
ZXddIHZlcnRpY2FsTGluZVNjcm9sbF07CiB9CiAKLS0gKEZyYW1lKilfd2ViX2ZyYW1lCistIChX
ZWJDb3JlOjpGcmFtZSopX3dlYl9mcmFtZQogewogICAgIHJldHVybiBjb3JlKF9wcml2YXRlLT53
ZWJGcmFtZSk7CiB9CkBAIC0xODEsNyArMTc5LDcgQEAgLSAodm9pZClfc2V0RG9jdW1lbnRWaWV3
OihOU1ZpZXcgPFdlYkRvYwogI2Vsc2UKICAgICBBU1NFUlQoX3ByaXZhdGUtPndlYkZyYW1lKTsK
IAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoX3ByaXZhdGUtPndlYkZyYW1lKTsKKyAgICBhdXRv
KiBmcmFtZSA9IGNvcmUoX3ByaXZhdGUtPndlYkZyYW1lKTsKIAogICAgIEFTU0VSVChmcmFtZSk7
CiAgICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOwpAQCAtMjQ1LDE5ICsyNDMsNyBAQCAtIChXZWJE
eW5hbWljU2Nyb2xsQmFyc1ZpZXcgKilfc2Nyb2xsVmllCiAtIChmbG9hdClfdmVydGljYWxQYWdl
U2Nyb2xsRGlzdGFuY2UKIHsKICAgICBmbG9hdCBoZWlnaHQgPSBbW3NlbGYgX2NvbnRlbnRWaWV3
XSBib3VuZHNdLnNpemUuaGVpZ2h0OwotICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4oaGVpZ2h0
ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgaGVpZ2h0IC0gU2Ny
b2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNdXRhYmxlRGljdGlvbmFyeSAqYWxsVHlwZXMsIENsYXNz
IG9iakNDbGFzcywgTlNBcnJheSAqc3VwcG9ydFR5cGVzKQotewotICAgIE5TRW51bWVyYXRvciAq
ZW51bWVyYXRvciA9IFtzdXBwb3J0VHlwZXMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgQVNTRVJU
KGVudW1lcmF0b3IgIT0gbmlsKTsKLSAgICBOU1N0cmluZyAqbWltZSA9IG5pbDsKLSAgICB3aGls
ZSAoKG1pbWUgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIC8v
IERvbid0IGNsb2JiZXIgcHJldmlvdXNseS1yZWdpc3RlcmVkIGNsYXNzZXMuCi0gICAgICAgIGlm
IChbYWxsVHlwZXMgb2JqZWN0Rm9yS2V5Om1pbWVdID09IG5pbCkKLSAgICAgICAgICAgIFthbGxU
eXBlcyBzZXRPYmplY3Q6b2JqQ0NsYXNzIGZvcktleTptaW1lXTsKLSAgICB9CisgICAgcmV0dXJu
IHN0ZDo6bWF4PGZsb2F0PihoZWlnaHQgKiBXZWJDb3JlOjpTY3JvbGxiYXI6Om1pbkZyYWN0aW9u
VG9TdGVwV2hlblBhZ2luZygpLCBoZWlnaHQgLSBXZWJDb3JlOjpTY3JvbGxiYXI6Om1heE92ZXJs
YXBCZXR3ZWVuUGFnZXMoKSk7CiB9CiAKICsgKE5TTXV0YWJsZURpY3Rpb25hcnkgKilfdmlld1R5
cGVzQWxsb3dJbWFnZVR5cGVPbWlzc2lvbjooQk9PTClhbGxvd0ltYWdlVHlwZU9taXNzaW9uCkBA
IC0zMTgsNyArMzA0LDcgQEAgLSAodm9pZClfaW5zdGFsbAogICAgIEFTU0VSVChfcHJpdmF0ZS0+
d2ViRnJhbWUpOwogICAgIEFTU0VSVChfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3KTsKIAotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoX3ByaXZhdGUtPndlYkZyYW1lKTsKKyAgICBhdXRvKiBmcmFt
ZSA9IGNvcmUoX3ByaXZhdGUtPndlYkZyYW1lKTsKIAogICAgIEFTU0VSVChmcmFtZSk7CiAgICAg
QVNTRVJUKGZyYW1lLT5wYWdlKCkpOwpAQCAtMzI3LDEyICszMTMsMTIgQEAgLSAodm9pZClfaW5z
dGFsbAogICAgIC8vIHdvbid0IGV2ZXIgZ2V0IGluc3RhbGxlZCBpbiB0aGUgdmlldyBoaWVyYXJj
aHkuCiAgICAgQVNTRVJUKGZyYW1lLT5pc01haW5GcmFtZSgpIHx8IGZyYW1lLT5vd25lckVsZW1l
bnQoKSk7CiAKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGF1dG8q
IHZpZXcgPSBmcmFtZS0+dmlldygpOwogCiAgICAgdmlldy0+c2V0UGxhdGZvcm1XaWRnZXQoX3By
aXZhdGUtPmZyYW1lU2Nyb2xsVmlldyk7CiAKICAgICAvLyBGSVhNRTogRnJhbWUgdHJpZXMgdG8g
ZG8gdGhpcyB0b28uIElzIHRoaXMgY29kZSBuZWVkZWQ/Ci0gICAgaWYgKFJlbmRlcldpZGdldCog
b3duZXIgPSBmcmFtZS0+b3duZXJSZW5kZXJlcigpKSB7CisgICAgaWYgKFdlYkNvcmU6OlJlbmRl
cldpZGdldCogb3duZXIgPSBmcmFtZS0+b3duZXJSZW5kZXJlcigpKSB7CiAgICAgICAgIG93bmVy
LT5zZXRXaWRnZXQodmlldyk7CiAgICAgICAgIC8vIE5vdyB0aGUgUmVuZGVyV2lkZ2V0IG93bnMg
dGhlIHZpZXcsIHNvIHdlIGRvbid0IGFueSBtb3JlLgogICAgIH0KQEAgLTM0NSw5ICszMzEsOSBA
QCAtICh2b2lkKV9mcmFtZVNpemVDaGFuZ2VkCiAgICAgLy8gU2VlIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojpwcm92aXNpb25hbExvYWRTdGFydGVkLgogICAgIGlmIChbW1tzZWxmIHdlYkZyYW1lXSB3
ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdKQogICAgICAgICBbW3NlbGYgX3Njcm9sbFZpZXddIHNl
dERyYXdzQmFja2dyb3VuZDpZRVNdOwotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gW3NlbGYg
X3dlYl9mcmFtZV0pIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogY29yZUZyYW1lVmlldyA9IGNv
cmVGcmFtZS0+dmlldygpKQotICAgICAgICAgICAgY29yZUZyYW1lVmlldy0+YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKFNjcm9sbGFibGVBcmVhOjpBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29u
OjpBcmVhU2l6ZUNoYW5nZWQpOworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfd2Vi
X2ZyYW1lXSkgeworICAgICAgICBpZiAoYXV0byogY29yZUZyYW1lVmlldyA9IGNvcmVGcmFtZS0+
dmlldygpKQorICAgICAgICAgICAgY29yZUZyYW1lVmlldy0+YXZhaWxhYmxlQ29udGVudFNpemVD
aGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29u
OjpBcmVhU2l6ZUNoYW5nZWQpOwogICAgIH0KIH0KIApAQCAtMzcxLDE1ICszNTcsMTUgQEAgLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJ
T05fV0lUSF9NQUlOX1RIUkVBRF9FWENFUFRJT05TKSkKLSAgICAgICAgICAgIHNldERlZmF1bHRU
aHJlYWRWaW9sYXRpb25CZWhhdmlvcihMb2dPbkZpcnN0VGhyZWFkVmlvbGF0aW9uLCBUaHJlYWRW
aW9sYXRpb25Sb3VuZE9uZSk7CisgICAgICAgICAgICBzZXREZWZhdWx0VGhyZWFkVmlvbGF0aW9u
QmVoYXZpb3IoV2ViQ29yZTo6TG9nT25GaXJzdFRocmVhZFZpb2xhdGlvbiwgV2ViQ29yZTo6VGhy
ZWFkVmlvbGF0aW9uUm91bmRPbmUpOwogCiAgICAgICAgIGJvb2wgdGhyb3dFeGNlcHRpb25zRm9y
Um91bmRUd28gPSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lU
SF9ST1VORF9UV09fTUFJTl9USFJFQURfRVhDRVBUSU9OUyk7CiAgICAgICAgIGlmICghdGhyb3dF
eGNlcHRpb25zRm9yUm91bmRUd28pCi0gICAgICAgICAgICBzZXREZWZhdWx0VGhyZWFkVmlvbGF0
aW9uQmVoYXZpb3IoTG9nT25GaXJzdFRocmVhZFZpb2xhdGlvbiwgVGhyZWFkVmlvbGF0aW9uUm91
bmRUd28pOworICAgICAgICAgICAgc2V0RGVmYXVsdFRocmVhZFZpb2xhdGlvbkJlaGF2aW9yKFdl
YkNvcmU6OkxvZ09uRmlyc3RUaHJlYWRWaW9sYXRpb24sIFdlYkNvcmU6OlRocmVhZFZpb2xhdGlv
blJvdW5kVHdvKTsKIAogICAgICAgICBib29sIHRocm93RXhjZXB0aW9uc0ZvclJvdW5kVGhyZWUg
PSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9ST1VORF9U
SFJFRV9NQUlOX1RIUkVBRF9FWENFUFRJT05TKTsKICAgICAgICAgaWYgKCF0aHJvd0V4Y2VwdGlv
bnNGb3JSb3VuZFRocmVlKQotICAgICAgICAgICAgc2V0RGVmYXVsdFRocmVhZFZpb2xhdGlvbkJl
aGF2aW9yKExvZ09uRmlyc3RUaHJlYWRWaW9sYXRpb24sIFRocmVhZFZpb2xhdGlvblJvdW5kVGhy
ZWUpOworICAgICAgICAgICAgc2V0RGVmYXVsdFRocmVhZFZpb2xhdGlvbkJlaGF2aW9yKFdlYkNv
cmU6OkxvZ09uRmlyc3RUaHJlYWRWaW9sYXRpb24sIFdlYkNvcmU6OlRocmVhZFZpb2xhdGlvblJv
dW5kVGhyZWUpOwogI2VuZGlmCiAgICAgfQogCkBAIC0zOTYsNyArMzgyLDcgQEAgLSAoaWQpaW5p
dFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCiAgICAgW3Njcm9sbFZpZXcgc2V0SGFzVmVydGljYWxT
Y3JvbGxlcjpOT107CiAgICAgW3Njcm9sbFZpZXcgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5P
XTsKICAgICBbc2Nyb2xsVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJs
ZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotICAgIFtzY3JvbGxWaWV3IHNldExpbmVTY3JvbGw6
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpXTsKKyAgICBbc2Nyb2xsVmlldyBzZXRMaW5l
U2Nyb2xsOldlYkNvcmU6OlNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKV07CiAgICAgW3Nl
bGYgYWRkU3VidmlldzpzY3JvbGxWaWV3XTsKIAogICAgIC8vIERvbid0IGNhbGwgb3VyIG92ZXJy
aWRkZW4gdmVyc2lvbiBvZiBzZXROZXh0S2V5VmlldyBoZXJlOyB3ZSBuZWVkIHRvIG1ha2UgdGhl
IHN0YW5kYXJkIE5TVmlldwpAQCAtNTE3LDcgKzUwMyw3IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5T
UmVjdClyZWN0CiAgICAgICAgICAgICBOU1JlY3RGaWxsKHJlY3QpOwogI2Vsc2UKICAgICAgICAg
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBXS0dldEN1cnJlbnRHcmFwaGljc0NvbnRleHQo
KTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjZ0NvbnRleHQs
IGNhY2hlZENHQ29sb3IoQ29sb3I6OndoaXRlKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRG
aWxsQ29sb3JXaXRoQ29sb3IoY2dDb250ZXh0LCBXZWJDb3JlOjpjYWNoZWRDR0NvbG9yKFdlYkNv
cmU6OkNvbG9yOjp3aGl0ZSkpOwogICAgICAgICAgICAgV0tSZWN0RmlsbChjZ0NvbnRleHQsIHJl
Y3QpOwogI2VuZGlmCiAgICAgICAgIH0KQEAgLTUyOSw3ICs1MTUsNyBAQCAtICh2b2lkKWRyYXdS
ZWN0OihOU1JlY3QpcmVjdAogICAgICAgICAgICAgTlNSZWN0RmlsbChyZWN0KTsKICNlbHNlCiAg
ICAgICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gV0tHZXRDdXJyZW50R3JhcGhpY3ND
b250ZXh0KCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY2dD
b250ZXh0LCBjYWNoZWRDR0NvbG9yKENvbG9yOjpjeWFuKSk7CisgICAgICAgICAgICBDR0NvbnRl
eHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY2dDb250ZXh0LCBXZWJDb3JlOjpjYWNoZWRDR0NvbG9y
KFdlYkNvcmU6OkNvbG9yOjpjeWFuKSk7CiAgICAgICAgICAgICBXS1JlY3RGaWxsKGNnQ29udGV4
dCwgcmVjdCk7CiAjZW5kaWYKICAgICAgICAgfQpAQCAtNjEzLDEyICs1OTksMTIgQEAgLSAodm9p
ZCl2aWV3RGlkTW92ZVRvV2luZG93CiAgICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOwog
fQogCi0tIChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvbGxEaXJlY3Rpb24p
ZGlyZWN0aW9uIGdyYW51bGFyaXR5OihTY3JvbGxHcmFudWxhcml0eSlncmFudWxhcml0eQorLSAo
Qk9PTClfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9u
KWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVs
YXJpdHkKIHsKICAgICAvLyBzY3JvbGxpbmcgb3ZlcmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRNTFZpZXcKICAgICBpZiAoIVtbc2VsZiBkb2N1
bWVudFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCiAgICAgICAgIHJl
dHVybiBOTzsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7CisgICAg
YXV0byogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIE5POwogICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2Nyb2xs
T3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CkBAIC02MjcsMTMgKzYxMywxMyBAQCAt
IChCT09MKV9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOihTY3JvCiAKIC0gKEJPT0wpX2lzVmVy
dGljYWxEb2N1bWVudAogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfd2ViX2ZyYW1l
XTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfd2ViX2ZyYW1lXTsKICAgICBpZiAoIWNv
cmVGcmFtZSkKICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICBS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKKyAgICBhdXRv
KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZp
ZXcpCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgcmV0dXJuIHJlbmRlclZpZXctPnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKQEAgLTY0MSwxMyArNjI3LDEzIEBAIC0gKEJPT0wp
X2lzVmVydGljYWxEb2N1bWVudAogCiAtIChCT09MKV9pc0ZsaXBwZWREb2N1bWVudAogewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfd2ViX2ZyYW1lXTsKKyAgICBhdXRvKiBjb3JlRnJh
bWUgPSBbc2VsZiBfd2ViX2ZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuIE5POwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBhdXRvKiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRv
Y3VtZW50KQogICAgICAgICByZXR1cm4gTk87Ci0gICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IGRvY3VtZW50LT5yZW5kZXJWaWV3KCk7CisgICAgYXV0byogcmVuZGVyVmlldyA9IGRvY3VtZW50
LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gTk87
CiAgICAgcmV0dXJuIHJlbmRlclZpZXctPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKTsKQEAgLTY1NSw3ICs2NDEsNyBAQCAtIChCT09MKV9pc0ZsaXBwZWREb2N1bWVudAogCiAt
IChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnQKIHsKLSAgICBpZiAoW3NlbGYgX3Nj
cm9sbE92ZXJmbG93SW5EaXJlY3Rpb246U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1
bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOldlYkNvcmU6
OlNjcm9sbFVwIGdyYW51bGFyaXR5OldlYkNvcmU6OlNjcm9sbEJ5RG9jdW1lbnRdKQogICAgICAg
ICByZXR1cm4gWUVTOwogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCiAgICAgICAgIHJl
dHVybiBOTzsKQEAgLTY2Nyw3ICs2NTMsNyBAQCAtIChCT09MKV9zY3JvbGxUb0JlZ2lubmluZ09m
RG9jdW1lbnQKIAogLSAoQk9PTClfc2Nyb2xsVG9FbmRPZkRvY3VtZW50CiB7Ci0gICAgaWYgKFtz
ZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6U2Ny
b2xsQnlEb2N1bWVudF0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9u
OldlYkNvcmU6OlNjcm9sbERvd24gZ3JhbnVsYXJpdHk6V2ViQ29yZTo6U2Nyb2xsQnlEb2N1bWVu
dF0pCiAgICAgICAgIHJldHVybiBZRVM7CiAgICAgaWYgKCFbc2VsZiBfaXNTY3JvbGxhYmxlXSkK
ICAgICAgICAgcmV0dXJuIE5POwpAQCAtNzU5LDEyICs3NDUsMTIgQEAgLSAoZmxvYXQpX2hvcml6
b250YWxLZXlib2FyZFNjcm9sbERpc3RhbgogLSAoZmxvYXQpX2hvcml6b250YWxQYWdlU2Nyb2xs
RGlzdGFuY2UKIHsKICAgICBmbG9hdCB3aWR0aCA9IFtbc2VsZiBfY29udGVudFZpZXddIGJvdW5k
c10uc2l6ZS53aWR0aDsKLSAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KHdpZHRoICogU2Nyb2xs
YmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgd2lkdGggLSBTY3JvbGxiYXI6Om1h
eE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWF4PGZsb2F0Pih3aWR0
aCAqIFdlYkNvcmU6OlNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHdp
ZHRoIC0gV2ViQ29yZTo6U2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpOwogfQog
CiAtIChCT09MKV9wYWdlVmVydGljYWxseTooQk9PTCl1cAogewotICAgIGlmIChbc2VsZiBfc2Ny
b2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxh
cml0eTpTY3JvbGxCeVBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjp1cCA/IFdlYkNvcmU6OlNjcm9sbFVwIDogV2ViQ29yZTo6U2Nyb2xsRG93biBncmFudWxh
cml0eTpXZWJDb3JlOjpTY3JvbGxCeVBhZ2VdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIAog
ICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkBAIC03NzYsNyArNzYyLDcgQEAgLSAoQk9P
TClfcGFnZVZlcnRpY2FsbHk6KEJPT0wpdXAKIAogLSAoQk9PTClfcGFnZUhvcml6b250YWxseToo
Qk9PTClsZWZ0CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxl
ZnQgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlXSkK
KyAgICBpZiAoW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246bGVmdCA/IFdlYkNvcmU6
OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxSaWdodCBncmFudWxhcml0eTpXZWJDb3JlOjpT
Y3JvbGxCeVBhZ2VdKQogICAgICAgICByZXR1cm4gWUVTOwogCiAgICAgaWYgKCFbc2VsZiBfaXNT
Y3JvbGxhYmxlXSkKQEAgLTc5OCw3ICs3ODQsNyBAQCAtIChCT09MKV9wYWdlSW5CbG9ja1Byb2dy
ZXNzaW9uRGlyZWN0aW9uCiAKIC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVw
CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xs
VXAgOiBTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxm
IF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gV2ViQ29yZTo6U2Nyb2xsVXAgOiBXZWJD
b3JlOjpTY3JvbGxEb3duIGdyYW51bGFyaXR5OldlYkNvcmU6OlNjcm9sbEJ5TGluZV0pCiAgICAg
ICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9pc1Njcm9sbGFibGVdKQpAQCAtODEw
LDcgKzc5Niw3IEBAIC0gKEJPT0wpX3Njcm9sbExpbmVWZXJ0aWNhbGx5OihCT09MKXVwCiAKIC0g
KEJPT0wpX3Njcm9sbExpbmVIb3Jpem9udGFsbHk6KEJPT0wpbGVmdAogewotICAgIGlmIChbc2Vs
ZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFJp
Z2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOmxlZnQgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Ny
b2xsUmlnaHQgZ3JhbnVsYXJpdHk6V2ViQ29yZTo6U2Nyb2xsQnlMaW5lXSkKICAgICAgICAgcmV0
dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2lzU2Nyb2xsYWJsZV0pCkBAIC05MDksNyArODk1
LDcgQEAgLSAodm9pZClrZXlEb3duOihXZWJFdmVudCAqKWV2ZW50CiAjZW5kaWYKICAgICBpbnQg
aW5kZXgsIGNvdW50OwogICAgIEJPT0wgY2FsbFN1cGVyID0gWUVTOwotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBbc2VsZiBfd2ViX2ZyYW1lXTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBf
d2ViX2ZyYW1lXTsKICAgICBCT09MIG1haW50YWluc0JhY2tGb3J3YXJkTGlzdCA9IGNvcmVGcmFt
ZSAmJiBzdGF0aWNfY2FzdDxCYWNrRm9yd2FyZExpc3QmPihjb3JlRnJhbWUtPnBhZ2UoKS0+YmFj
a0ZvcndhcmQoKS5jbGllbnQoKSkuZW5hYmxlZCgpID8gWUVTIDogTk87CiAKICAgICBjb3VudCA9
IFtjaGFyYWN0ZXJzIGxlbmd0aF07CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0JKHJldmlzaW9u
IDI1MDUyMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE1ICs0NywxMyBAQAogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCiBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZGVmYXVs
dEFuaW1hdGlvbkR1cmF0aW9uID0gMC41OwogCi1zdGF0aWMgSW50UmVjdCBzY3JlZW5SZWN0T2ZD
b250ZW50cyhFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIFdlYkNvcmU6OkludFJlY3Qgc2NyZWVu
UmVjdE9mQ29udGVudHMoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVy
ZXIoKS0+aGFzTGF5ZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
LT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBGbG9hdFF1YWQgY29udGVudHNCb3ggPSBzdGF0
aWNfY2FzdDxGbG9hdFJlY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkt
PmJhY2tpbmcoKS0+Y29udGVudHNCb3goKSk7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBj
b250ZW50c0JveCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZsb2F0UmVjdD4oZWxlbWVudC0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+YmFja2luZygpLT5jb250ZW50c0JveCgpKTsKICAg
ICAgICAgY29udGVudHNCb3ggPSBlbGVtZW50LT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKGNvbnRlbnRzQm94KTsKICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPnJlbmRlcmVyKCktPnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvU2NyZWVuKGNvbnRlbnRzQm94LmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpOwogICAgIH0KQEAgLTY1LDggKzYzLDggQEAgc3RhdGljIEludFJlY3Qgc2Ny
ZWVuUmVjdE9mQ29udGVudHMoRWxlbQogQGludGVyZmFjZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxl
cihQcml2YXRlKTxOU0FuaW1hdGlvbkRlbGVnYXRlPgogLSAodm9pZClfdXBkYXRlTWVudUFuZERv
Y2tGb3JGdWxsU2NyZWVuOwogLSAodm9pZClfc3dhcFZpZXc6KE5TVmlldyopdmlldyB3aXRoOihO
U1ZpZXcqKW90aGVyVmlldzsKLS0gKERvY3VtZW50KilfZG9jdW1lbnQ7Ci0tIChGdWxsc2NyZWVu
TWFuYWdlciopX21hbmFnZXI7CistIChXZWJDb3JlOjpEb2N1bWVudCopX2RvY3VtZW50OworLSAo
V2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXIqKV9tYW5hZ2VyOwogLSAodm9pZClfc3RhcnRFbnRl
ckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
OwogLSAodm9pZClfc3RhcnRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbldpdGhEdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb247CiBAZW5kCkBAIC0xMzQsMTIgKzEzMiwxMiBAQCAtIChOU1Zp
ZXcqKXdlYlZpZXdQbGFjZWhvbGRlcgogICAgIHJldHVybiBfd2ViVmlld1BsYWNlaG9sZGVyLmdl
dCgpOwogfQogCi0tIChFbGVtZW50KillbGVtZW50CistIChXZWJDb3JlOjpFbGVtZW50KillbGVt
ZW50CiB7CiAgICAgcmV0dXJuIF9lbGVtZW50LmdldCgpOwogfQogCi0tICh2b2lkKXNldEVsZW1l
bnQ6KFJlZlB0cjxFbGVtZW50PiYmKWVsZW1lbnQKKy0gKHZvaWQpc2V0RWxlbWVudDooUmVmUHRy
PFdlYkNvcmU6OkVsZW1lbnQ+JiYpZWxlbWVudAogewogICAgIF9lbGVtZW50ID0gV1RGTW92ZShl
bGVtZW50KTsKIH0KQEAgLTQ1MiwxMiArNDUwLDEyIEBAIC0gKHZvaWQpX3VwZGF0ZU1lbnVBbmRE
b2NrRm9yRnVsbFNjcmVlbgogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBVdGlsaXR5IEZ1
bmN0aW9ucwogCi0tIChEb2N1bWVudCopX2RvY3VtZW50IAorLSAoV2ViQ29yZTo6RG9jdW1lbnQq
KV9kb2N1bWVudAogewogICAgIHJldHVybiAmX2VsZW1lbnQtPmRvY3VtZW50KCk7CiB9CiAKLS0g
KEZ1bGxzY3JlZW5NYW5hZ2VyKilfbWFuYWdlcgorLSAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFn
ZXIqKV9tYW5hZ2VyCiB7CiAgICAgcmV0dXJuICZfZWxlbWVudC0+ZG9jdW1lbnQoKS5mdWxsc2Ny
ZWVuTWFuYWdlcigpOwogfQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAyNTA1MjIpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTAg
KzE3MCw2IEBACiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2VzU1BJLmg+CiAj
ZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAK
IEBpbnRlcmZhY2UgTlNPYmplY3QgKEFjY2Vzc2liaWxpdHkpCkBAIC0yNDgsOCArMjQ0LDkgQEAg
LSAodm9pZClzZXRNZW51Q29udHJvbGxlcjooV2ViQ29yZTo6Q29udAogLSAodm9pZClmb3J3YXJk
Q29udGV4dE1lbnVBY3Rpb246KGlkKXNlbmRlcjsKIEBlbmQKIAotc3RhdGljIE9wdGlvbmFsPENv
bnRleHRNZW51QWN0aW9uPiB0b0FjdGlvbihOU0ludGVnZXIgdGFnKQorc3RhdGljIE9wdGlvbmFs
PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPiB0b0FjdGlvbihOU0ludGVnZXIgdGFnKQogewor
ICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIGlmICh0YWcgPj0gQ29udGV4dE1lbnVJ
dGVtQmFzZUN1c3RvbVRhZyAmJiB0YWcgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZykg
ewogICAgICAgICAvLyBKdXN0IHBhc3MgdGhlc2UgdGhyb3VnaC4KICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPih0YWcpOwpAQCAtNDI2LDggKzQyMyw5IEBAIHN0
YXRpYyBPcHRpb25hbDxDb250ZXh0TWVudUFjdGlvbj4gdG9BY3QKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8TlNJbnRlZ2VyPiB0b1RhZyhDb250ZXh0TWVu
dUFjdGlvbiBhY3Rpb24pCitzdGF0aWMgT3B0aW9uYWw8TlNJbnRlZ2VyPiB0b1RhZyhXZWJDb3Jl
OjpDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCiB7CisgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAgICAgc3dpdGNoIChhY3Rpb24pIHsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05v
QWN0aW9uOgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNzY4LDE1ICs3NjYsMTUg
QEAgLSAodm9pZClfd2ViX3NldE5lZWRzRGlzcGxheUluUmVjdDooTlNSZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2VuY2xvc2luZ1dlYkZy
YW1lVmlldyB3ZWJGcmFtZV0pOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29yZUZyYW1l
ID8gY29yZUZyYW1lLT52aWV3KCkgOiAwOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW2Vu
Y2xvc2luZ1dlYkZyYW1lVmlldyB3ZWJGcmFtZV0pOworICAgIGF1dG8qIGZyYW1lVmlldyA9IGNv
cmVGcmFtZSA/IGNvcmVGcmFtZS0+dmlldygpIDogMDsKICAgICBpZiAoIWZyYW1lVmlldyB8fCAh
ZnJhbWVWaWV3LT5pc0VuY2xvc2VkSW5Db21wb3NpdGluZ0xheWVyKCkpIHsKICAgICAgICAgW3Nl
bGYgX3dlYl9zZXROZWVkc0Rpc3BsYXlJblJlY3Q6aW52YWxpZFJlY3RdOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgTlNSZWN0IGludmFsaWRSZWN0SW5XZWJGcmFtZVZpZXdDb29yZGlu
YXRlcyA9IFtlbmNsb3NpbmdXZWJGcmFtZVZpZXcgY29udmVydFJlY3Q6aW52YWxpZFJlY3QgZnJv
bVZpZXc6c2VsZl07Ci0gICAgSW50UmVjdCBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0
ZXMoaW52YWxpZFJlY3RJbldlYkZyYW1lVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcyhpbnZhbGlkUmVjdEluV2Vi
RnJhbWVWaWV3Q29vcmRpbmF0ZXMpOwogICAgIGlmICghW2VuY2xvc2luZ1dlYkZyYW1lVmlldyBp
c0ZsaXBwZWRdKQogICAgICAgICBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0
WShmcmFtZVZpZXctPmZyYW1lUmVjdCgpLnNpemUoKS5oZWlnaHQoKSAtIGludmFsaWRSZWN0SW5G
cmFtZVZpZXdDb29yZGluYXRlcy5tYXhZKCkpOwogCkBAIC03ODcsOCArNzg1LDggQEAgLSAodm9p
ZClfd2ViX3NldE5lZWRzRGlzcGxheUluUmVjdDooTlNSZQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQogCi1jb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0
b3IgPSBQcmludENvbnRleHQ6Om1pbmltdW1TaHJpbmtGYWN0b3IoKTsKLWNvbnN0IGZsb2F0IF9X
ZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciA9IFByaW50Q29udGV4dDo6bWF4
aW11bVNocmlua0ZhY3RvcigpOworY29uc3QgZmxvYXQgX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5p
bXVtU2hyaW5rRmFjdG9yID0gV2ViQ29yZTo6UHJpbnRDb250ZXh0OjptaW5pbXVtU2hyaW5rRmFj
dG9yKCk7Citjb25zdCBmbG9hdCBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0
b3IgPSBXZWJDb3JlOjpQcmludENvbnRleHQ6Om1heGltdW1TaHJpbmtGYWN0b3IoKTsKIAogLy8g
QW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVjb2duaXph
YmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXkuCiAjZGVmaW5lIFRSQUNLSU5HX1JFQ1Rf
VEFHIDB4QkFERkFDRQpAQCAtODExLDkgKzgwOSw5IEBAIEBpbnRlcmZhY2UgV2ViQ29yZVNjcm9s
bFZpZXcgOiBOU1Njcm9sbFYKIEBlbmQKIAogLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8g
c2FmZWx5IHJlZmVyZW5jZSB0aGUgQ2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFnIGRh
dGEKLXN0YXRpYyBDYWNoZWRJbWFnZUNsaWVudCYgcHJvbWlzZWREYXRhQ2xpZW50KCkKK3N0YXRp
YyBXZWJDb3JlOjpDYWNoZWRJbWFnZUNsaWVudCYgcHJvbWlzZWREYXRhQ2xpZW50KCkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FjaGVkSW1hZ2VDbGllbnQ+IHN0YXRpY0NhY2hlZFJl
c291cmNlQ2xpZW50OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJDb3JlOjpDYWNoZWRJ
bWFnZUNsaWVudD4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CiAgICAgcmV0dXJuIHN0YXRp
Y0NhY2hlZFJlc291cmNlQ2xpZW50LmdldCgpOwogfQogCkBAIC05MTYsNyArOTE0LDcgQEAgLSAo
dm9pZClfd2ViX2FkZERlc2NlbmRlbnRXZWJIVE1MVmlld3NUbwogQGVuZAogCiBzdHJ1Y3QgV2Vi
SFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHsKLSAgICBLZXlib2FyZEV2ZW50
KiBldmVudDsKKyAgICBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBldmVudDsKICAgICBib29sIGV2
ZW50SW50ZXJwcmV0YXRpb25IYWRTaWRlRWZmZWN0czsKICAgICBib29sIHNob3VsZFNhdmVDb21t
YW5kczsKICAgICBib29sIGNvbnN1bWVkQnlJTTsKQEAgLTExNTUsNyArMTE1Myw3IEBAICsgKE5T
QXJyYXkgKilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnUKICAgICAgICAgbmlsXTsKIAogI2lm
IEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpKQorICAgIGlm
ICghV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQoKSkKICAgICAgICAgW2VsZW1lbnRzIGFkZE9iamVjdDpAIm9i
amVjdCJdOwogI2VuZGlmCiAKQEAgLTExNjQsMzcgKzExNjIsMzggQEAgKyAoTlNBcnJheSAqKV9l
eGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBp
bkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1Bs
YWluVGV4dAogeworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIE5TQXJyYXkgKnR5
cGVzID0gW3Bhc3RlYm9hcmQgdHlwZXNdOwogICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gbmlsOwogCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJv
YXJkVHlwZV0gJiYgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGUgaW5Db250ZXh0OmNv
bnRleHQgc3VicmVzb3VyY2VzOjBdKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogCi0gICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgp
XSAmJiAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBh
c3RlYm9hcmQgZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpIGluQ29udGV4
dDpjb250ZXh0IHN1YnJlc291cmNlczowXSkpCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpXZWJDb3JlOjpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXSAmJiAoZnJhZ21lbnQg
PSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgZm9yVHlw
ZTpXZWJDb3JlOjpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpIGluQ29udGV4dDpjb250
ZXh0IHN1YnJlc291cmNlczowXSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICAKLSAg
ICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeUhUTUxQYXN0ZWJvYXJkVHlwZSgpXSAm
JiAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgZm9yVHlwZTpsZWdhY3lIVE1MUGFzdGVib2FyZFR5cGUoKSBpbkNvbnRleHQ6Y29udGV4
dCBzdWJyZXNvdXJjZXM6MF0pKQorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQ29y
ZTo6bGVnYWN5SFRNTFBhc3RlYm9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1
bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOldlYkNvcmU6Omxl
Z2FjeUhUTUxQYXN0ZWJvYXJkVHlwZSgpIGluQ29udGV4dDpjb250ZXh0IHN1YnJlc291cmNlczow
XSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRh
aW5zT2JqZWN0OmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpXSAmJiAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgZm9yVHlwZTpsZWdh
Y3lSVEZEUGFzdGVib2FyZFR5cGUoKSBpbkNvbnRleHQ6Y29udGV4dCBzdWJyZXNvdXJjZXM6MF0p
KQorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQ29yZTo6bGVnYWN5UlRGRFBhc3Rl
Ym9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVJURkRQYXN0ZWJvYXJk
VHlwZSgpIGluQ29udGV4dDpjb250ZXh0IHN1YnJlc291cmNlczowXSkpCiAgICAgICAgIHJldHVy
biBmcmFnbWVudDsKICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVJU
RlBhc3RlYm9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBl
KCkgaW5Db250ZXh0OmNvbnRleHQgc3VicmVzb3VyY2VzOjBdKSkKKyAgICBpZiAoW3R5cGVzIGNv
bnRhaW5zT2JqZWN0OldlYkNvcmU6OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldICYmIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBm
b3JUeXBlOldlYkNvcmU6OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCkgaW5Db250ZXh0OmNvbnRl
eHQgc3VicmVzb3VyY2VzOjBdKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogCi0gICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpsZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKV0gJiYgKGZy
YWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IGZvclR5cGU6bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCkgaW5Db250ZXh0OmNvbnRleHQgc3Vi
cmVzb3VyY2VzOjBdKSkKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkNvcmU6Omxl
Z2FjeVRJRkZQYXN0ZWJvYXJkVHlwZSgpXSAmJiAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRG
cmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgZm9yVHlwZTpXZWJDb3JlOjpsZWdhY3lU
SUZGUGFzdGVib2FyZFR5cGUoKSBpbkNvbnRleHQ6Y29udGV4dCBzdWJyZXNvdXJjZXM6MF0pKQog
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OmxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOmxlZ2FjeVBERlBhc3Rl
Ym9hcmRUeXBlKCkgaW5Db250ZXh0OmNvbnRleHQgc3VicmVzb3VyY2VzOjBdKSkKKyAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkNvcmU6OmxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCld
ICYmIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCBmb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCkgaW5Db250
ZXh0OmNvbnRleHQgc3VicmVzb3VyY2VzOjBdKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50Owog
CiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlUE5HXSAm
JiAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgZm9yVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HIGluQ29udGV4dDpjb250ZXh0IHN1
YnJlc291cmNlczowXSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKIAotICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6bGVnYWN5VVJMUGFzdGVib2FyZFR5cGUoKV0gJiYgKGZyYWdtZW50
ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGZvclR5
cGU6bGVnYWN5VVJMUGFzdGVib2FyZFR5cGUoKSBpbkNvbnRleHQ6Y29udGV4dCBzdWJyZXNvdXJj
ZXM6MF0pKQorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQ29yZTo6bGVnYWN5VVJM
UGFzdGVib2FyZFR5cGUoKV0gJiYgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGZvclR5cGU6V2ViQ29yZTo6bGVnYWN5VVJMUGFzdGVi
b2FyZFR5cGUoKSBpbkNvbnRleHQ6Y29udGV4dCBzdWJyZXNvdXJjZXM6MF0pKQogICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7CiAKLSAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNvbnRh
aW5zT2JqZWN0OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtz
ZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOmxl
Z2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkgaW5Db250ZXh0OmNvbnRleHQgc3VicmVzb3VyY2Vz
OjBdKSkKKyAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Oldl
YkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldICYmIChmcmFnbWVudCA9IFtzZWxm
IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBmb3JUeXBlOldlYkNv
cmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkgaW5Db250ZXh0OmNvbnRleHQgc3VicmVz
b3VyY2VzOjBdKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogICAgIAogICAgIHJldHVybiBu
aWw7CkBAIC0xMjA0LDE5ICsxMjAzLDE5IEBAIC0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21Q
YXN0ZWJvYXJkOigKIHsKICAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsK
ICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVN0cmluZ1Bhc3RlYm9h
cmRUeXBlKCldKQotICAgICAgICByZXR1cm4gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6bGVn
YWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2Fs
TWFwcGluZ107CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJDb3JlOjpsZWdhY3lT
dHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSkKKyAgICAgICAgcmV0dXJuIFtbcGFzdGVib2FyZCBzdHJp
bmdGb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldIHByZWNvbXBv
c2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwogCiAgICAgUmV0YWluUHRyPE5TQXR0cmli
dXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZzsKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0OmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpXSkKLSAgICAgICAgYXR0cmlidXRlZFN0cmlu
ZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFz
dGVib2FyZCBkYXRhRm9yVHlwZTpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV0gZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdKTsKLSAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwgJiYgW3R5
cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldKQotICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6bGVnYWN5UlRGUGFzdGVib2FyZFR5cGUo
KV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0OldlYkNvcmU6OmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpXSkKKyAgICAgICAgYXR0cmli
dXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
UlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpXZWJDb3JlOjpsZWdhY3lSVEZEUGFzdGVib2Fy
ZFR5cGUoKV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAgICBpZiAoYXR0cmlidXRlZFN0
cmluZyA9PSBuaWwgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkNvcmU6OmxlZ2FjeVJURlBh
c3RlYm9hcmRUeXBlKCldKQorICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6V2ViQ29yZTo6bGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKV0gZG9jdW1lbnRBdHRyaWJ1dGVz
Ok5VTExdKTsKICAgICBpZiAoYXR0cmlidXRlZFN0cmluZykKICAgICAgICAgcmV0dXJuIFtbW2F0
dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjb3B5XSBhdXRvcmVsZWFzZV07CiAKLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCldKSB7Ci0g
ICAgICAgIGlmIChOU1N0cmluZyAqc3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZv
clR5cGU6bGVnYWN5RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKV0gY29tcG9uZW50c0pvaW5lZEJ5
U3RyaW5nOkAiXG4iXSkKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkNvcmU6Omxl
Z2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCldKSB7CisgICAgICAgIGlmIChOU1N0cmluZyAq
c3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6V2ViQ29yZTo6bGVnYWN5
RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4i
XSkKICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgfQogCkBAIC0xMjM1LDcgKzEyMzQs
NyBAQCAtICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hCiAgICAgW3dlYlZp
ZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CiAKICAgICBET01SYW5nZSAq
cmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKIAogICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxv
d1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CiAgICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9z
aG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZl
bkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKQEAgLTEyNjcsNyArMTI2Niw3IEBA
IC0gKHZvaWQpX3Bvc3RGYWtlTW91c2VNb3ZlZEV2ZW50Rm9yRmxhZ3MKIC8vIFRoaXMgbWV0aG9k
IGlzIG5lZWRlZCB0byBzdXBwb3J0IG1hY09TIHNlcnZpY2VzLgogLSAoQk9PTClyZWFkU2VsZWN0
aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgCiB7IAotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOyAKKyAgICBhdXRvKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKSAKICAgICAgICAg
cmV0dXJuIE5POyAKICAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQpAQCAtMTMzNCw3ICsxMzMzLDcgQEAgLSAoQk9PTClf
c2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OgogCiAtIChET01SYW5nZSAqKV9zZWxlY3Rl
ZFJhbmdlCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkgOiBuaWw7CiB9CiAKQEAgLTEzNDQsMzQgKzEzNDMsMzQgQEAgLSAodm9pZClfd3JpdGVT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cAogewogICAgIC8vIFB1dCBIVE1MIG9uIHRoZSBwYXN0
ZWJvYXJkLgogICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5
cGVdKSB7Ci0gICAgICAgIGlmIChhdXRvIGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbihjb3JlKFtzZWxmIF9mcmFtZV0pKSkgeworICAgICAgICBpZiAo
YXV0byBjb3JlQXJjaGl2ZSA9IFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21T
ZWxlY3Rpb24oY29yZShbc2VsZiBfZnJhbWVdKSkpIHsKICAgICAgICAgICAgIGlmIChSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhID0gY29yZUFyY2hpdmUgPyBjb3JlQXJjaGl2ZS0+cmF3RGF0YVJl
cHJlc2VudGF0aW9uKCkgOiAwKQogICAgICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6
KF9fYnJpZGdlIE5TRGF0YSAqKWRhdGEuZ2V0KCkgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV07CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQgc3RyaW5n
IG9uIHRoZSBwYXN0ZWJvYXJkIChSVEYvUlRGRCBmb3JtYXQpLgotICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6bGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCldKSB7CisgICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDpXZWJDb3JlOjpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV0pIHsK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsKSB7CiAgICAgICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKICAgICAgICAg
fSAgICAgICAgCiAgICAgICAgIE5TRGF0YSAqUlRGRERhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBS
VEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRv
Y3VtZW50QXR0cmlidXRlczpAeyB9XTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZE
RGF0YSBmb3JUeXBlOmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVJURkRQYXN0ZWJv
YXJkVHlwZSgpXTsKICAgICB9ICAgICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldKSB7CisgICAgaWYgKFt0eXBlcyBjb250YWluc09i
amVjdDpXZWJDb3JlOjpsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpXSkgewogICAgICAgICBpZiAo
IWF0dHJpYnV0ZWRTdHJpbmcpCiAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYg
c2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKICAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5n
IGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGF0
dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRT
dHJpbmcpOworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFdlYkNvcmU6OmF0dHJpYnV0
ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcp
OwogICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZGcm9tUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRy
aWJ1dGVzOkB7IH1dOwotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9yVHlw
ZTpsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0
YTpSVEZEYXRhIGZvclR5cGU6V2ViQ29yZTo6bGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKV07CiAg
ICAgfQogCiAgICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBp
ZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldKSB7
CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0
ZWJvYXJkVHlwZSgpXSkgewogICAgICAgICAvLyBNYXAgJm5ic3A7IHRvIGEgcGxhaW4gb2xkIHNw
YWNlIGJlY2F1c2UgdGhpcyBpcyBiZXR0ZXIgZm9yIHNvdXJjZSBjb2RlLCBvdGhlciBicm93c2Vy
cyBkbyBpdCwgYW5kCiAgICAgICAgIC8vIGJlY2F1c2UgSFRNTCBmb3JjZXMgY29udGVudCBjcmVh
dG9ycyBhbmQgZWRpdG9ycyB0byB1c2UgdGhpcyBjaGFyYWN0ZXIgYW55IHRpbWUgdGhleSB3YW50
IHR3byBzcGFjZXMgaW4gYSByb3cuCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpbW3Nl
bGYgc2VsZWN0ZWRTdHJpbmddIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpA
Ilx1MDBBMCIgd2l0aFN0cmluZzpAIiAiXSBmb3JUeXBlOmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRU
eXBlKCldOworICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1tzZWxmIHNlbGVjdGVkU3Ry
aW5nXSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCJcdTAwQTAiIHdpdGhT
dHJpbmc6QCIgIl0gZm9yVHlwZTpXZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgp
XTsKICAgICB9CiAKICAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSAmJiBbdHlw
ZXMgY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdKQpAQCAtMTUyNiwxMCAr
MTUyNSwxMCBAQCAtICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAogCiAgICAgTlNQb2ludCBv
cmlnaW4gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsKICAgICBpZiAoIU5TRXF1
YWxQb2ludHMoX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiwgb3JpZ2luKSAmJiAhW3Njcm9s
bFZpZXcgaW5Qcm9ncmFtbWF0aWNTY3JvbGxdKSB7Ci0gICAgICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICAgICAgaWYgKEZyYW1lVmlldyog
Y29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkgeworICAgICAgICBpZiAoYXV0byogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGNvcmVW
aWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+aW5T
Y3JvbGxQb3NpdGlvbkNoYW5nZWQgPSBZRVM7Ci0gICAgICAgICAgICAgICAgY29yZVZpZXctPnNj
cm9sbE9mZnNldENoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChJbnRQb2ludChfcHJpdmF0ZS0+bGFz
dFNjcm9sbFBvc2l0aW9uKSwgSW50UG9pbnQob3JpZ2luKSk7CisgICAgICAgICAgICAgICAgY29y
ZVZpZXctPnNjcm9sbE9mZnNldENoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChXZWJDb3JlOjpJbnRQ
b2ludChfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uKSwgV2ViQ29yZTo6SW50UG9pbnQob3Jp
Z2luKSk7CiAgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmluU2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
ID0gTk87CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5NDgsMTQgKzE5NDcsMTQgQEAg
LSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZQogICAgICAgICAgICAgY29u
dGV4dDpudWxscHRyCiAgICAgICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVz
c3VyZTowXTsKIAotICAgICAgICBpZiAoRnJhbWUqIGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFts
YXN0SGl0VmlldyBfZnJhbWVdKSkKKyAgICAgICAgaWYgKGF1dG8qIGxhc3RIaXRDb3JlRnJhbWUg
PSBjb3JlKFtsYXN0SGl0VmlldyBfZnJhbWVdKSkKICAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJh
bWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3By
ZXNzdXJlRXZlbnRdKTsKICAgICB9CiAKICAgICBsYXN0SGl0VmlldyA9IHZpZXc7CiAKICAgICBp
ZiAodmlldykgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3ZpZXcgX2Zy
YW1lXSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3ZpZXcgX2ZyYW1l
XSkpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBmdWxsLCBub3JtYWwgaGl0IHRl
c3QgZHVyaW5nIHRoaXMgbW91c2UgZXZlbnQgaWYgdGhlIHBhZ2UgaXMgYWN0aXZlIG9yIGlmIGEg
bW91c2UKICAgICAgICAgICAgIC8vIGJ1dHRvbiBpcyBjdXJyZW50bHkgcHJlc3NlZC4gSXQgaXMg
cG9zc2libGUgdGhhdCBuZWl0aGVyIG9mIHRob3NlIHRoaW5ncyB3aWxsIGJlIHRydWUgb24gTGlv
biBhbmQKICAgICAgICAgICAgIC8vIG5ld2VyIHdoZW4gbGVnYWN5IHNjcm9sbGJhcnMgYXJlIGVu
YWJsZWQsIGJlY2F1c2UgdGhlbiBXZWJLaXQgcmVjZWl2ZXMgbW91c2UgZXZlbnRzIGFsbCB0aGUg
dGltZS4gCkBAIC0xOTgzLDggKzE5ODIsOCBAQCArIChOU0FycmF5ICopX2luc2VydGFibGVQYXN0
ZWJvYXJkVHlwZXMKIHsKICAgICBzdGF0aWMgTlNBcnJheSAqdHlwZXMgPSBuaWw7CiAgICAgaWYg
KCF0eXBlcykgewotICAgICAgICB0eXBlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmpl
Y3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBsZWdhY3lIVE1MUGFzdGVib2FyZFR5cGUoKSwgbGVn
YWN5RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKSwgbGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCks
IGxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCksCi0gICAgICAgICAgICBsZWdhY3lVUkxQYXN0ZWJv
YXJkVHlwZSgpLCBsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSwgbGVnYWN5UlRGUGFzdGVib2Fy
ZFR5cGUoKSwgbGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSwgbGVnYWN5Q29sb3JQYXN0ZWJv
YXJkVHlwZSgpLCBrVVRUeXBlUE5HLCBuaWxdOworICAgICAgICB0eXBlcyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBXZWJDb3JlOjpsZWdh
Y3lIVE1MUGFzdGVib2FyZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5RmlsZW5hbWVzUGFzdGVib2Fy
ZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCksIFdlYkNvcmU6Omxl
Z2FjeVBERlBhc3RlYm9hcmRUeXBlKCksCisgICAgICAgICAgICBXZWJDb3JlOjpsZWdhY3lVUkxQ
YXN0ZWJvYXJkVHlwZSgpLCBXZWJDb3JlOjpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSwgV2Vi
Q29yZTo6bGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5U3RyaW5nUGFz
dGVib2FyZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5Q29sb3JQYXN0ZWJvYXJkVHlwZSgpLCBrVVRU
eXBlUE5HLCBuaWxdOwogICAgICAgICBDRlJldGFpbih0eXBlcyk7CiAgICAgfQogICAgIHJldHVy
biB0eXBlczsKQEAgLTE5OTMsNyArMTk5Miw3IEBAICsgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBh
c3RlYm9hcmRUeXBlcwogKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMKIHsK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHB1dCBkYXRhIGZvciBOU0hUTUxQYm9hcmRUeXBlIG9u
IHRoZSBwYXN0ZWJvYXJkIGJ1dCBNaWNyb3NvZnQgRXhjZWwgZG9lc24ndCBsaWtlIG91ciBmb3Jt
YXQgb2YgSFRNTCAoMzY0MDQyMykuCi0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpLCBsZWdh
Y3lSVEZQYXN0ZWJvYXJkVHlwZSgpLCBsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpLCBuaWxd
OworICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRU
eXBlLCBXZWJDb3JlOjpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5
UlRGUGFzdGVib2FyZFR5cGUoKSwgV2ViQ29yZTo6bGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUo
KSwgbmlsXTsKIH0KIAogLSAodm9pZClwYXN0ZWJvYXJkQ2hhbmdlZE93bmVyOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkCkBAIC0yMDAzLDEyICsyMDAyLDEyIEBAIC0gKHZvaWQpcGFzdGVib2Fy
ZENoYW5nZWRPd25lcjooTlNQYXN0ZWIKIAogLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCiB7Ci0g
ICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV0g
JiYgW1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV0pIHsKKyAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVJURkRQ
YXN0ZWJvYXJkVHlwZSgpXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Oldl
YkFyY2hpdmVQYm9hcmRUeXBlXSkgewogICAgICAgICBhdXRvIGFyY2hpdmUgPSBhZG9wdE5TKFtb
V2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldl
YkFyY2hpdmVQYm9hcmRUeXBlXV0pOwotICAgICAgICBbcGFzdGVib2FyZCBfd2ViX3dyaXRlUHJv
bWlzZWRSVEZERnJvbUFyY2hpdmU6YXJjaGl2ZS5nZXQoKSBjb250YWluc0ltYWdlOltbcGFzdGVi
b2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCldXTsK
LSAgICB9IGVsc2UgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpsZWdhY3lUSUZGUGFzdGVib2Fy
ZFR5cGUoKV0gJiYgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKSB7CisgICAg
ICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZl
LmdldCgpIGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpX
ZWJDb3JlOjpsZWdhY3lUSUZGUGFzdGVib2FyZFR5cGUoKV1dOworICAgIH0gZWxzZSBpZiAoW3R5
cGUgaXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVRJRkZQYXN0ZWJvYXJkVHlwZSgpXSAm
JiBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpIHsKICAgICAgICAgaWYgKGF1
dG8qIGltYWdlID0gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5pbWFnZSgp
KQotICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooX19icmlkZ2UgTlNEYXRhICopaW1h
Z2UtPnRpZmZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBl
KCldOworICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooX19icmlkZ2UgTlNEYXRhICop
aW1hZ2UtPnRpZmZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6V2ViQ29yZTo6bGVnYWN5VElGRlBh
c3RlYm9hcmRUeXBlKCldOwogICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZTpudWxscHRyXTsKICAgICB9CiB9CkBAIC0yMDMzLDEyICsyMDMyLDEyIEBAIC0gKHZvaWQp
bGF5b3V0SWZOZWVkZWQKIC0gKHZvaWQpc2V0U2NhbGU6KGZsb2F0KXNjYWxlCiB7CiAgICAgW3N1
cGVyIHNldFNjYWxlOnNjYWxlXTsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAg
IGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2Nh
bGUsIEludFBvaW50KCkpOworICAgIGlmIChhdXRvKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkp
CisgICAgICAgIHBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgV2ViQ29yZTo6SW50UG9p
bnQoKSk7CiAKICAgICBbW3NlbGYgX3dlYlZpZXddIF9kb2N1bWVudFNjYWxlQ2hhbmdlZF07CiB9
CkBAIC0yMTE0LDEzICsyMTEzLDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAogCiAtIChCT09MKV9jYW5FZGl0CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
ICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2FuRWRpdCgpOwog
fQogCiAtIChCT09MKV9jYW5FZGl0UmljaGx5CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCkuY2FuRWRp
dFJpY2hseSgpOwogfQogCkBAIC0yMTMxLDI1ICsyMTMwLDI1IEBAIC0gKEJPT0wpX2NhbkFsdGVy
Q3VycmVudFNlbGVjdGlvbgogCiAtIChCT09MKV9oYXNTZWxlY3Rpb24KIHsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7CiB9CiAKIC0gKEJPT0wpX2hhc1NlbGVj
dGlvbk9ySW5zZXJ0aW9uUG9pbnQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwog
ICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiAtIChCT09MKV9oYXNJbnNlcnRpb25Qb2ludAogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKIH0KIAogLSAoQk9P
TClfaXNFZGl0YWJsZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCk7CiB9CiAKQEAgLTIxNzAsMTMgKzIxNjksMTMgQEAgLSAoTlNJbWFnZSAq
KV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCiAgICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RlZENvcmVGcmFtZSgqY29yZUZyYW1lKTsKKyAgICBSZWY8V2ViQ29yZTo6RnJhbWU+
IHByb3RlY3RlZENvcmVGcmFtZSgqY29yZUZyYW1lKTsKIAotICAgIFRleHRJbmRpY2F0b3JEYXRh
IHRleHRJbmRpY2F0b3I7CisgICAgV2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGEgdGV4dEluZGlj
YXRvcjsKICAgICBhdXRvIGRyYWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbigq
Y29yZUZyYW1lLCB0ZXh0SW5kaWNhdG9yKTsKICAgICBbZHJhZ0ltYWdlIF93ZWJfZGlzc29sdmVU
b0ZyYWN0aW9uOldlYkRyYWdJbWFnZUFscGhhXTsKIApAQCAtMjE5Myw0OSArMjE5Miw0OSBAQCAt
IChOU1JlY3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAogCiAtIChET01Ob2RlICopX2luc2VydE9y
ZGVyZWRMaXN0CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICByZXR1cm4g
Y29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0T3JkZXJlZExpc3QoKS5n
ZXQoKSkgOiBuaWw7CiB9CiAKIC0gKERPTU5vZGUgKilfaW5zZXJ0VW5vcmRlcmVkTGlzdAogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtp
dChjb3JlRnJhbWUtPmVkaXRvcigpLmluc2VydFVub3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7
CiB9CiAKIC0gKEJPT0wpX2NhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCiB7Ci0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKIH0KIAogLSAoQk9P
TClfY2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKIHsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwogICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS5j
YW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwogfQogCiAtIChET01Ob2RlICopX2luY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
ICAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoKS5nZXQoKSkgOiBuaWw7CiB9CiAKIC0gKERPTU5vZGUgKilfaW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKICAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCku
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkuZ2V0KCkpIDogbmlsOwogfQogCiAt
IChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkCiB7Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNv
cmVGcmFtZS0+ZWRpdG9yKCkuaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKS5n
ZXQoKSkgOiBuaWw7CiB9CiAKIC0gKHZvaWQpX2RlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCiB7
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoY29yZUZyYW1lKQogICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiB9
CkBAIC0yMjUyLDcgKzIyNTEsNyBAQCAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZDooTlNQCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtdXRhYmxlVHlwZXM7CiAgICAg
aWYgKCFbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgewogICAgICAgICBt
dXRhYmxlVHlwZXMgPSBhZG9wdE5TKFt0eXBlcyBtdXRhYmxlQ29weV0pOwotICAgICAgICBbbXV0
YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV07CisgICAg
ICAgIFttdXRhYmxlVHlwZXMgcmVtb3ZlT2JqZWN0OldlYkNvcmU6OmxlZ2FjeVJURkRQYXN0ZWJv
YXJkVHlwZSgpXTsKICAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXMuZ2V0KCk7CiAgICAgfQog
CkBAIC0yMzE3LDExICsyMzE2LDExIEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWUKICAgICAgICAgcmV0dXJuIFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJh
Z21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlLmdldCgpXTsKICAgICB9CiAKLSAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOmxlZ2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCldKQot
ICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6W3Bhc3RlYm9h
cmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXV07
CisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJDb3JlOjpsZWdhY3lGaWxl
bmFtZXNQYXN0ZWJvYXJkVHlwZSgpXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZy
YWdtZW50V2l0aFBhdGhzOltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6V2ViQ29yZTo6
bGVnYWN5RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKV1dOwogCi0gICAgaWYgKFtwYm9hcmRUeXBl
IGlzRXF1YWxUb1N0cmluZzpsZWdhY3lIVE1MUGFzdGVib2FyZFR5cGUoKV0pIHsKLSAgICAgICAg
TlNTdHJpbmcgKkhUTUxTdHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOmxlZ2FjeUhU
TUxQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5n
OldlYkNvcmU6OmxlZ2FjeUhUTUxQYXN0ZWJvYXJkVHlwZSgpXSkgeworICAgICAgICBOU1N0cmlu
ZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6V2ViQ29yZTo6bGVnYWN5
SFRNTFBhc3RlYm9hcmRUeXBlKCldOwogICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtl
IE1pY3Jvc29mdCdzIEhUTUwgcGFzdGVib2FyZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgogICAg
ICAgICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJlZml4OkAiVmVyc2lvbjoiXSkgewogICAgICAgICAg
ICAgTlNSYW5nZSByYW5nZSA9IFtIVE1MU3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIgb3B0
aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF07CkBAIC0yMzMzLDEyICsyMzMyLDEyIEBAIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWUKICAgICAgICAgcmV0dXJuIFtb
c2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpIVE1MU3RyaW5n
IGJhc2VVUkxTdHJpbmc6bmlsXTsKICAgICB9CiAKLSAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVh
bFRvU3RyaW5nOmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldIHx8IFtwYm9hcmRUeXBlIGlzRXF1
YWxUb1N0cmluZzpsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV0pIHsKKyAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCld
IHx8IFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJDb3JlOjpsZWdhY3lSVEZEUGFzdGVi
b2FyZFR5cGUoKV0pIHsKICAgICAgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3Ry
aW5nOwotICAgICAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOmxlZ2FjeVJURkRQ
YXN0ZWJvYXJkVHlwZSgpXSkKLSAgICAgICAgICAgIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTps
ZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKTsKKyAg
ICAgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJDb3JlOjpsZWdhY3lSVEZE
UGFzdGVib2FyZFR5cGUoKV0pCisgICAgICAgICAgICBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
V2ViQ29yZTo6bGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCldIGRvY3VtZW50QXR0cmlidXRlczpO
VUxMXSk7CiAgICAgICAgIGlmICghc3RyaW5nKQotICAgICAgICAgICAgc3RyaW5nID0gYWRvcHRO
UyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0
YUZvclR5cGU6bGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5V
TExdKTsKKyAgICAgICAgICAgIHN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkNvcmU6OmxlZ2Fj
eVJURlBhc3RlYm9hcmRUeXBlKCldIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXSk7CiAgICAgICAg
IGlmICghc3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMjM2NiwxNCArMjM2
NSwxNCBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAgICAg
IHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRv
U3RyaW5nOmxlZ2FjeVRJRkZQYXN0ZWJvYXJkVHlwZSgpXSkKLSAgICAgICAgcmV0dXJuIFtzZWxm
IF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgcGFzdGVib2Fy
ZFR5cGU6bGVnYWN5VElGRlBhc3RlYm9hcmRUeXBlKCkgaW1hZ2VNSU1FVHlwZTpAImltYWdlL3Rp
ZmYiXTsKLSAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOmxlZ2FjeVBERlBhc3Rl
Ym9hcmRUeXBlKCldKQotICAgICAgICByZXR1cm4gW3NlbGYgX3dlYl9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZTpsZWdhY3lQREZQYXN0ZWJv
YXJkVHlwZSgpIGltYWdlTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiXTsKKyAgICBpZiAoW3Bi
b2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVRJRkZQYXN0ZWJvYXJkVHlw
ZSgpXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF93ZWJfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgcGFzdGVib2FyZFR5cGU6V2ViQ29yZTo6bGVnYWN5VElGRlBhc3Rl
Ym9hcmRUeXBlKCkgaW1hZ2VNSU1FVHlwZTpAImltYWdlL3RpZmYiXTsKKyAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVBERlBhc3RlYm9hcmRUeXBlKCld
KQorICAgICAgICByZXR1cm4gW3NlbGYgX3dlYl9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9h
cmQ6cGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZTpXZWJDb3JlOjpsZWdhY3lQREZQYXN0ZWJvYXJk
VHlwZSgpIGltYWdlTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiXTsKICAgICBpZiAoW3Bib2Fy
ZFR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVQTkddKQogICAgICAgICBy
ZXR1cm4gW3NlbGYgX3dlYl9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZCBwYXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HIGltYWdlTUlNRVR5cGU6QCJp
bWFnZS9wbmciXTsKIAotICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6bGVnYWN5
VVJMUGFzdGVib2FyZFR5cGUoKV0pIHsKKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3Ry
aW5nOldlYkNvcmU6OmxlZ2FjeVVSTFBhc3RlYm9hcmRUeXBlKCldKSB7CiAgICAgICAgIE5TVVJM
ICpVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CiAgICAgICAgIERP
TURvY3VtZW50KiBkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKICAgICAg
ICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTIzOTIsMTAgKzIzOTEsMTAgQEAgLSAoRE9NRG9jdW1l
bnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZQogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAg
ICAgfQogCi0gICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpsZWdhY3lTdHJpbmdQ
YXN0ZWJvYXJkVHlwZSgpXSkgeworICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6
V2ViQ29yZTo6bGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV0pIHsKICAgICAgICAgaWYgKCFj
b250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9y
VHlwZTpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhD
YW5vbmljYWxNYXBwaW5nXSkucHRyKCkpOworICAgICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoKmNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldl
YkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldIHByZWNvbXBvc2VkU3RyaW5nV2l0
aENhbm9uaWNhbE1hcHBpbmddKS5wdHIoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKQEAg
LTI0MzQsNyArMjQzMyw3IEBAIC0gKEJPT0wpX2lzSW5QcmludE1vZGUKIAogLSAoQk9PTClfYmVn
aW5QcmludE1vZGVXaXRoTWluaW11bVBhZ2VXaWR0aDooQ0dGbG9hdCltaW5pbXVtUGFnZVdpZHRo
IGhlaWdodDooQ0dGbG9hdCltaW5pbXVtUGFnZUhlaWdodCBtYXhpbXVtUGFnZVdpZHRoOihDR0Zs
b2F0KW1heGltdW1QYWdlV2lkdGgKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIGF1dG8qIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gTk87CiAKQEAgLTI0NTMsMjIgKzI0NTIsMjIgQEAgLSAo
Qk9PTClfYmVnaW5QcmludE1vZGVXaXRoTWluaW11bVBhZ2VXaQogCiAtIChCT09MKV9iZWdpblBy
aW50TW9kZVdpdGhQYWdlV2lkdGg6KGZsb2F0KXBhZ2VXaWR0aCBoZWlnaHQ6KGZsb2F0KXBhZ2VI
ZWlnaHQgc2hyaW5rVG9GaXQ6KEJPT0wpc2hyaW5rVG9GaXQKIHsKLSAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gIWRvY3VtZW50IHx8ICFk
b2N1bWVudC0+cmVuZGVyVmlldygpIHx8IGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKIAogICAgIGZsb2F0IHBhZ2VMb2dpY2FsV2lkdGgg
PSBpc0hvcml6b250YWwgPyBwYWdlV2lkdGggOiBwYWdlSGVpZ2h0OwogICAgIGZsb2F0IHBhZ2VM
b2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gcGFnZUhlaWdodCA6IHBhZ2VXaWR0aDsKLSAg
ICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhl
aWdodCk7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1pbkxheW91dFNpemUocGFnZUxvZ2ljYWxX
aWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbyA9
IDE7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxh
eW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNocmlua1RvRml0ICYmICghZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpKSB7Ci0gICAgICAg
IG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0
U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEZsb2F0U2l6ZShwYWdl
TG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBw
YWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3Rv
cikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBp
bmdSYXRpbyhXZWJDb3JlOjpGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxI
ZWlnaHQpLCBXZWJDb3JlOjpGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmll
d1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRN
TFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAgbWF4aW11bVNocmlu
a1JhdGlvID0gX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gX1dlYkhU
TUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApAQCAtMjQ4OSwyMiAr
MjQ4OCwyMiBAQCAtIChCT09MKV9pc0luU2NyZWVuUGFnaW5hdGlvbk1vZGUKIAogLSAoQk9PTClf
YmVnaW5TY3JlZW5QYWdpbmF0aW9uTW9kZVdpdGhQYWdlU2l6ZTooQ0dTaXplKXBhZ2VTaXplIHNo
cmlua1RvRml0OihCT09MKXNocmlua1RvRml0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9ICFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PnJlbmRlclZpZXcoKSB8fCBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5zdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCk7CiAKICAgICBmbG9hdCBwYWdlTG9naWNhbFdpZHRoID0gaXNIb3Jp
em9udGFsID8gcGFnZVNpemUud2lkdGggOiBwYWdlU2l6ZS5oZWlnaHQ7CiAgICAgZmxvYXQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwgPyBwYWdlU2l6ZS5oZWlnaHQgOiBwYWdlU2l6
ZS53aWR0aDsKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBw
YWdlTG9naWNhbEhlaWdodCk7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1pbkxheW91dFNpemUo
cGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZsb2F0IG1heGltdW1T
aHJpbmtSYXRpbyA9IDE7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50
IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKICAg
ICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNocmlua1RvRml0ICYm
ICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkp
KSB7Ci0gICAgICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGlu
Z1JhdGlvKEZsb2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEZs
b2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hy
aW5rRmFjdG9yLCBwYWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11
bVNocmlua0ZhY3RvcikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBh
Z2VSZWN0c0tlZXBpbmdSYXRpbyhXZWJDb3JlOjpGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCwg
cGFnZUxvZ2ljYWxIZWlnaHQpLCBXZWJDb3JlOjpGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCAq
IF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWln
aHQgKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAg
bWF4aW11bVNocmlua1JhdGlvID0gX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFj
dG9yIC8gX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApA
QCAtMjUyMCwxMSArMjUxOSwxMSBAQCAtICh2b2lkKV9lbmRTY3JlZW5QYWdpbmF0aW9uTW9kZQog
CiAtIChDR0Zsb2F0KV9hZGp1c3RlZEJvdHRvbU9mUGFnZVdpdGhUb3A6KENHRmxvYXQpdG9wIGJv
dHRvbTooQ0dGbG9hdClib3R0b20gbGltaXQ6KENHRmxvYXQpYm90dG9tTGltaXQKIHsKLSAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gYm90dG9t
OwogCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3
ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBib3R0b207
CiAKQEAgLTI2OTAsMTkgKzI2ODksMTkgQEAgc3RhdGljIFN0cmluZyBjb21tYW5kTmFtZUZvclNl
bGVjdG9yKFNFTAogICAgIHJldHVybiBTdHJpbmcoc2VsZWN0b3JOYW1lLCBzZWxlY3Rvck5hbWVM
ZW5ndGggLSAxKTsKIH0KIAotLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5kQnlTZWxlY3Rv
cjooU0VMKXNlbGVjdG9yCistIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRC
eVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwogICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQoKTsKICAgICByZXR1cm4g
Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0
b3IpKTsKIH0KIAotLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5kQnlOYW1lOihjb25zdCBj
aGFyKiluYW1lCistIChXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeU5hbWU6
KGNvbnN0IGNoYXIqKW5hbWUKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAg
IGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpFZGl0b3I6OkNvbW1hbmQoKTsKICAgICByZXR1cm4gY29yZUZy
YW1lLT5lZGl0b3IoKS5jb21tYW5kKG5hbWUpOwogfQogCkBAIC0yODY0LDcgKzI4NjMsNyBAQCAt
IChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmluCiAgICAgICAgIGlzUmV0dXJu
VHlwZU9LID0gWUVTOwogICAgIGVsc2UgaWYgKFtbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFz
dGVib2FyZFR5cGVzXSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBbc2VsZiBfaXNFZGl0
YWJsZV0pIHsKICAgICAgICAgLy8gV2UgY2FuIGluc2VydCBzdHJpbmdzIGluIGFueSBlZGl0YWJs
ZSBjb250ZXh0LiAgV2UgY2FuIGluc2VydCBvdGhlciB0eXBlcywgbGlrZSBpbWFnZXMsIG9ubHkg
aW4gcmljaCBlZGl0IGNvbnRleHRzLgotICAgICAgICBpc1JldHVyblR5cGVPSyA9IFtyZXR1cm5U
eXBlIGlzRXF1YWxUb1N0cmluZzpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSB8fCBbc2Vs
ZiBfY2FuRWRpdFJpY2hseV07CisgICAgICAgIGlzUmV0dXJuVHlwZU9LID0gW3JldHVyblR5cGUg
aXNFcXVhbFRvU3RyaW5nOldlYkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldIHx8
IFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKICAgICB9CiAgICAgaWYgKGlzU2VuZFR5cGVPSyAmJiBp
c1JldHVyblR5cGVPSykKICAgICAgICAgcmV0dXJuIHNlbGY7CkBAIC0yODgyLDggKzI4ODEsOCBA
QCAtICh2b2lkKWp1bXBUb1NlbGVjdGlvbjooaWQpc2VuZGVyCiB7CiAgICAgQ09NTUFORF9QUk9M
T0dVRQogCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQot
ICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25S
ZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOwor
ICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25S
ZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJB
bHdheXMpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMjg5MSwxMiArMjg5MCwxMiBAQCAt
ICh2b2lkKWp1bXBUb1NlbGVjdGlvbjooaWQpc2VuZGVyCiAtIChCT09MKXZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJ
dGVtPilpdGVtCiB7CiAgICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFjdGlvbl07Ci0gICAgUmVmUHRy
PEZyYW1lPiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkZyYW1lPiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1
bWVudCgpKSB7CisgICAgaWYgKFdlYkNvcmU6OkRvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkgewogICAgICAgICBpZiAoZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gTk87CiAgICAgICAgIGlmIChkb2MtPmlzSW1hZ2VEb2N1bWVudCgpKSB7ICAgICAg
ICAgICAgCkBAIC0yOTQyLDcgKzI5NDEsNyBAQCBJR05PUkVfV0FSTklOR1NfRU5ECiAgICAgICAg
IE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAo
W21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewogICAgICAgICAg
ICAgU3RyaW5nIGRpcmVjdGlvbiA9IHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiOwotICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOmZyYW1lLT5lZGl0b3IoKS5zZWxlY3Rpb25IYXNTdHlsZShDU1NQcm9wZXJ0eURpcmVj
dGlvbiwgZGlyZWN0aW9uKV07CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6ZnJhbWUt
PmVkaXRvcigpLnNlbGVjdGlvbkhhc1N0eWxlKFdlYkNvcmU6OkNTU1Byb3BlcnR5RGlyZWN0aW9u
LCBkaXJlY3Rpb24pXTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OwogICAgIH0KQEAgLTI5NTksNyArMjk1OCw3IEBAIElHTk9SRV9XQVJOSU5HU19FTkQKICAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKICAg
ICAgICAgICAgIC8vIFRha2UgY29udHJvbCBvZiB0aGUgdGl0bGUgb2YgdGhlIG1lbnUgaXRlbSBp
bnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcvdW5jaGVja2luZyBpdCBiZWNhdXNlCiAgICAgICAgICAg
ICAvLyBhIGNoZWNrIHdvdWxkIGJlIGFtYmlndW91cy4KLSAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRUaXRsZTpmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlEaXJl
Y3Rpb24sICJydGwiKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOmZyYW1lLT5lZGl0
b3IoKS5zZWxlY3Rpb25IYXNTdHlsZShXZWJDb3JlOjpDU1NQcm9wZXJ0eURpcmVjdGlvbiwgInJ0
bCIpCiAgICAgICAgICAgICAgICAgPyBVSV9TVFJJTkdfSU5URVJOQUwoIkxlZnQgdG8gUmlnaHQi
LCAiTGVmdCB0byBSaWdodCBjb250ZXh0IG1lbnUgaXRlbSIpCiAgICAgICAgICAgICAgICAgOiBV
SV9TVFJJTkdfSU5URVJOQUwoIlJpZ2h0IHRvIExlZnQiLCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0
IG1lbnUgaXRlbSIpXTsKICAgICAgICAgfQpAQCAtMzEyNCw3ICszMTIzLDcgQEAgLSAoQk9PTClt
YWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgogICAgIGlmIChbW3NlbGYgd2luZG93XSBfbmV3Rmly
c3RSZXNwb25kZXJBZnRlclJlc2lnbmluZ10gPT0gc2VsZikKICAgICAgICAgcmV0dXJuIFlFUzsK
ICAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBh
dXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpOwogI2Vsc2UKICAgICAvLyBUaGlzIG1ldGhvZCBoZWxwcyB0byBkZXRlcm1pbmUgd2hldGhl
ciB0aGUgV2ViSFRNTFZpZXcgc2hvdWxkIG1haW50YWluCkBAIC0zMTU1LDcgKzMxNTQsNyBAQCAt
IChCT09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uCiAgICAgaWYgKG5leHRSZXNwb25kZXIg
PT0gc2VsZikKICAgICAgICAgcmV0dXJuIFlFUzsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CiAgICAgYm9vbCBzZWxlY3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICAgICBi
b29sIG5leHRSZXNwb25kZXJJc0luV2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xh
c3M6W05TVmlldyBjbGFzc11dCiAgICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFu
dE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XV07CkBAIC0zMzI2LDcg
KzMzMjUsNyBAQCAtICh2b2lkKXJlYXBwbHlTdHlsZXMKICAgICBkb3VibGUgc3RhcnQgPSBDRkFi
c29sdXRlVGltZUdldEN1cnJlbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgaWYgKGF1dG8qIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKICAgICAgICAgY29yZUZyYW1lLT5kb2N1bWVudCgpLT5zdHls
ZVNjb3BlKCkuZGlkQ2hhbmdlU3R5bGVTaGVldEVudmlyb25tZW50KCk7CiAgICAgICAgIGNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KQEAgLTMzNDEs
MTEgKzMzNDAsMTEgQEAgLSAodm9pZClyZWFwcGx5U3R5bGVzCiAvLyBtaW5QYWdlV2lkdGg9PTAg
aW1wbGllcyBhIG5vbi1wcmludGluZyBsYXlvdXQKIC0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFn
ZVdpZHRoOihmbG9hdCltaW5QYWdlTG9naWNhbFdpZHRoIGhlaWdodDooZmxvYXQpbWluUGFnZUxv
Z2ljYWxIZWlnaHQgb3JpZ2luYWxQYWdlV2lkdGg6KGZsb2F0KW9yaWdpbmFsUGFnZVdpZHRoIG9y
aWdpbmFsUGFnZUhlaWdodDooZmxvYXQpb3JpZ2luYWxQYWdlSGVpZ2h0IG1heGltdW1TaHJpbmtS
YXRpbzooZmxvYXQpbWF4aW11bVNocmlua1JhdGlvIGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFk
anVzdFZpZXdTaXplCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAo
IWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50
KCkpIHsKLSAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZUNhY2hlU3RhdGUo
KSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCisgICAgICAgIGlmIChjb3JlRnJhbWUtPmRv
Y3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgIT0gV2ViQ29yZTo6RG9jdW1lbnQ6Ok5vdEluUGFn
ZUNhY2hlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb3JlRnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICB9CkBAIC0zMzU5LDE1ICszMzU4LDE1IEBA
IC0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCkKIAogICAgIExPRyhWaWV3
LCAiJUAgZG9pbmcgbGF5b3V0Iiwgc2VsZik7CiAKLSAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmll
dyA9IGNvcmVGcmFtZS0+dmlldygpKSB7CisgICAgaWYgKGF1dG8qIGNvcmVWaWV3ID0gY29yZUZy
YW1lLT52aWV3KCkpIHsKICAgICAgICAgaWYgKG1pblBhZ2VMb2dpY2FsV2lkdGggPiAwLjApIHsK
LSAgICAgICAgICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZShtaW5QYWdlTG9naWNhbFdpZHRoLCBtaW5Q
YWdlTG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb3JpZ2luYWxQYWdlU2l6
ZShvcmlnaW5hbFBhZ2VXaWR0aCwgb3JpZ2luYWxQYWdlSGVpZ2h0KTsKKyAgICAgICAgICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSBwYWdlU2l6ZShtaW5QYWdlTG9naWNhbFdpZHRoLCBtaW5QYWdlTG9n
aWNhbEhlaWdodCk7CisgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFNpemUgb3JpZ2luYWxQYWdl
U2l6ZShvcmlnaW5hbFBhZ2VXaWR0aCwgb3JpZ2luYWxQYWdlSGVpZ2h0KTsKICAgICAgICAgICAg
IGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkgJiYgY29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCkgJiYgIWNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9
IEZsb2F0U2l6ZShtaW5QYWdlTG9naWNhbEhlaWdodCwgbWluUGFnZUxvZ2ljYWxXaWR0aCk7Ci0g
ICAgICAgICAgICAgICAgb3JpZ2luYWxQYWdlU2l6ZSA9IEZsb2F0U2l6ZShvcmlnaW5hbFBhZ2VI
ZWlnaHQsIG9yaWdpbmFsUGFnZVdpZHRoKTsKKyAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IFdl
YkNvcmU6OkZsb2F0U2l6ZShtaW5QYWdlTG9naWNhbEhlaWdodCwgbWluUGFnZUxvZ2ljYWxXaWR0
aCk7CisgICAgICAgICAgICAgICAgb3JpZ2luYWxQYWdlU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6
ZShvcmlnaW5hbFBhZ2VIZWlnaHQsIG9yaWdpbmFsUGFnZVdpZHRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24ocGFnZVNpemUs
IG9yaWdpbmFsUGFnZVNpemUsIG1heGltdW1TaHJpbmtSYXRpbywgYWRqdXN0Vmlld1NpemUgPyBB
ZGp1c3RWaWV3U2l6ZSA6IERvTm90QWRqdXN0Vmlld1NpemUpOworICAgICAgICAgICAgY29yZVZp
ZXctPmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihwYWdlU2l6ZSwgb3JpZ2luYWxQYWdlU2l6ZSwg
bWF4aW11bVNocmlua1JhdGlvLCBhZGp1c3RWaWV3U2l6ZSA/IFdlYkNvcmU6OkFkanVzdFZpZXdT
aXplIDogV2ViQ29yZTo6RG9Ob3RBZGp1c3RWaWV3U2l6ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVzdFZpZXdTaXplKTsKICAgICAg
ICAgICAgIGlmIChhZGp1c3RWaWV3U2l6ZSkKQEAgLTMzOTgsOCArMzM5Nyw4IEBAIC0gKHZvaWQp
cmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIAogICAgIFtzdXBlciByaWdodE1vdXNlVXA6
ZXZlbnRdOwogCi0gICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQotICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlVXAoZXZlbnQsIFtbc2Vs
ZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKKyAgICBpZiAoYXV0byogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5t
b3VzZVVwKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiB9CiAKIHN0
YXRpYyBCT09MIGlzUHJlVmVyc2lvbjNDbGllbnQodm9pZCkKQEAgLTM0ODUsNiArMzQ4NCw3IEBA
IHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZml4TWVudXNUb1NlbmQKIAogc3RhdGljIFJldGFp
blB0cjxOU0FycmF5PiBmaXhNZW51c1JlY2VpdmVkRnJvbU9sZENsaWVudHMoTlNBcnJheSAqZGVs
ZWdhdGVTdXBwbGllZEl0ZW1zLCBOU0FycmF5ICpzYXZlZEl0ZW1zKQogeworICAgIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogICAgIGF1dG8gbmV3TWVudUl0ZW1zID0gYWRvcHROUyhbZGVsZWdh
dGVTdXBwbGllZEl0ZW1zIG11dGFibGVDb3B5XSk7CiAKICAgICBpZiAoc2F2ZWRJdGVtcykKQEAg
LTM2MDQsNyArMzYwNCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZml4TWVudXNSZWNl
aXYKICAgICByZXR1cm4gbmV3TWVudUl0ZW1zOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTWVu
dUl0ZW0+IGNyZWF0ZVNoYXJlTWVudUl0ZW0oY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCkKK3N0YXRpYyBSZXRhaW5QdHI8TlNNZW51SXRlbT4gY3JlYXRlU2hhcmVNZW51SXRlbShj
b25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQogewogICAgIGF1dG8g
aXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAtMzYx
OCw4ICszNjE4LDggQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVTaGFyZQog
ICAgICAgICBbaXRlbXMgYWRkT2JqZWN0OmRvd25sb2FkYWJsZU1lZGlhVVJMXTsKICAgICB9CiAK
LSAgICBpZiAoSW1hZ2UqIGltYWdlID0gaGl0VGVzdFJlc3VsdC5pbWFnZSgpKSB7Ci0gICAgICAg
IGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBpbWFnZS0+ZGF0YSgpKQorICAgIGlm
IChhdXRvKiBpbWFnZSA9IGhpdFRlc3RSZXN1bHQuaW1hZ2UoKSkgeworICAgICAgICBpZiAoUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaW1hZ2UtPmRhdGEoKSkKICAgICAg
ICAgICAgIFtpdGVtcyBhZGRPYmplY3Q6YWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRo
RGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6YnVmZmVyLT5kYXRhKCkgbGVuZ3RoOmJ1ZmZlci0+
c2l6ZSgpXV0pLmdldCgpXTsKICAgICB9CiAKQEAgLTM2MzQsMTEgKzM2MzQsMTEgQEAgc3RhdGlj
IFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVTaGFyZQogICAgIHJldHVybiBbTlNNZW51SXRl
bSBzdGFuZGFyZFNoYXJlTWVudUl0ZW1Gb3JJdGVtczppdGVtcy5nZXQoKV07CiB9CiAKLXN0YXRp
YyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mKTsKK3N0YXRpYyBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0
UmVzdWx0JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mKTsKIAotc3Rh
dGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRlbShjb25zdCBIaXRUZXN0UmVz
dWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCitzdGF0aWMg
UmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGNvbnN0IFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYg
aXRlbSkKIHsKLSAgICBpZiAoaXRlbS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1UYWdTaGFy
ZU1lbnUpCisgICAgaWYgKGl0ZW0uYWN0aW9uKCkgPT0gV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVt
VGFnU2hhcmVNZW51KQogICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVNZW51SXRlbShoaXRUZXN0
UmVzdWx0KTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKQEAgLTM2NTUsMTAgKzM2NTUs
MTAgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SQogICAgICAgICBy
ZXR1cm4gbWVudUl0ZW07CiAgICAgfQogCi0gICAgY2FzZSBTZXBhcmF0b3JUeXBlOgorICAgIGNh
c2UgV2ViQ29yZTo6U2VwYXJhdG9yVHlwZToKICAgICAgICAgcmV0dXJuIFtOU01lbnVJdGVtIHNl
cGFyYXRvckl0ZW1dOwogCi0gICAgY2FzZSBTdWJtZW51VHlwZTogeworICAgIGNhc2UgV2ViQ29y
ZTo6U3VibWVudVR5cGU6IHsKICAgICAgICAgYXV0byBtZW51ID0gYWRvcHROUyhbW05TTWVudSBh
bGxvY10gaW5pdF0pOwogCiAgICAgICAgIGF1dG8gc3VibWVudUl0ZW1zID0gY3JlYXRlTWVudUl0
ZW1zKGhpdFRlc3RSZXN1bHQsIGl0ZW0uc3ViTWVudUl0ZW1zKCkpOwpAQCAtMzY3Nyw3ICszNjc3
LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SQogICAgIH0KIH0K
IAotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY3JlYXRlTWVudUl0ZW1zKGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0+JiBpdGVtcykKK3N0YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJ
dGVtcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCiB7CiAgICAgYXV0byBtZW51
SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAtMzY4
OSw3ICszNjg5LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY3JlYXRlTQog
ICAgIHJldHVybiBtZW51SXRlbXM7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY3Vz
dG9tTWVudUZyb21EZWZhdWx0SXRlbXMoV2ViVmlldyAqd2ViVmlldywgY29uc3QgQ29udGV4dE1l
bnUmIGRlZmF1bHRNZW51KQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBjdXN0b21NZW51RnJv
bURlZmF1bHRJdGVtcyhXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVu
dSYgZGVmYXVsdE1lbnUpCiB7CiAgICAgY29uc3QgYXV0byYgaGl0VGVzdFJlc3VsdCA9IHdlYlZp
ZXcucGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuaGl0VGVzdFJlc3VsdCgpOwogICAgIGF1
dG8gZGVmYXVsdE1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVtcyhoaXRUZXN0UmVzdWx0LCBkZWZh
dWx0TWVudS5pdGVtcygpKTsKQEAgLTM3MzEsMTEgKzM3MzEsMTEgQEAgLSAoTlNNZW51ICopbWVu
dUZvckV2ZW50OihOU0V2ZW50ICopZXZlbgogCiAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29u
dHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogCi0gICAgUmVmUHRy
PEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIFJlZlB0cjxXZWJD
b3JlOjpGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNv
cmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJh
bWUtPnBhZ2UoKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7CiAgICAgaWYg
KCFwYWdlKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0zNzQzLDcgKzM3NDMsNyBAQCAtIChO
U01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVuCiAgICAgX3ByaXZhdGUtPmhhbmRs
aW5nTW91c2VEb3duRXZlbnQgPSBZRVM7CiAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCkuY2xlYXJDb250ZXh0TWVudSgpOwogICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91
c2VEb3duKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7Ci0gICAgQk9P
TCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnNlbmRDb250ZXh0TWVu
dUV2ZW50KFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdLCBwYWdlLT5jaHJvbWUoKS5wbGF0
Zm9ybVBhZ2VDbGllbnQoKSkpOworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS5zZW5kQ29udGV4dE1lbnVFdmVudChXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50
RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXdd
IF9wcmVzc3VyZUV2ZW50XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsK
ICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POwogCiAgICAgaWYgKCFo
YW5kbGVkRXZlbnQpCkBAIC0zNzU0LDcgKzM3NTQsNyBAQCAtIChOU01lbnUgKiltZW51Rm9yRXZl
bnQ6KE5TRXZlbnQgKilldmVuCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgQ29udGV4dE1lbnUqIGNvbnRleHRNZW51ID0gcGFnZS0+Y29udGV4dE1lbnVDb250cm9s
bGVyKCkuY29udGV4dE1lbnUoKTsKKyAgICBhdXRvKiBjb250ZXh0TWVudSA9IHBhZ2UtPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFjb250ZXh0TWVudSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMzc2Nyw3ICszNzY3LDcgQEAgLSAoTlNNZW51ICop
bWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbgogICAgIGZvciAoTlNNZW51SXRlbSAqaXRlbSBp
biBtZW51SXRlbXMuZ2V0KCkpIHsKICAgICAgICAgW21lbnUgYWRkSXRlbTppdGVtXTsKIAotICAg
ICAgICBpZiAoaXRlbS50YWcgPT0gQ29udGV4dE1lbnVJdGVtVGFnU2hhcmVNZW51KSB7CisgICAg
ICAgIGlmIChpdGVtLnRhZyA9PSBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW1UYWdTaGFyZU1lbnUp
IHsKICAgICAgICAgICAgIEFTU0VSVChbaXRlbS5yZXByZXNlbnRlZE9iamVjdCBpc0tpbmRPZkNs
YXNzOltOU1NoYXJpbmdTZXJ2aWNlUGlja2VyIGNsYXNzXV0pOwogI2lmIEVOQUJMRShTRVJWSUNF
X0NPTlRST0xTKQogICAgICAgICAgICAgX3ByaXZhdGUtPmN1cnJlbnRTaGFyaW5nU2VydmljZVBp
Y2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9s
bGVyIGFsbG9jXSBpbml0V2l0aFNoYXJpbmdTZXJ2aWNlUGlja2VyOml0ZW0ucmVwcmVzZW50ZWRP
YmplY3QgY2xpZW50OnN0YXRpY19jYXN0PFdlYkNvbnRleHRNZW51Q2xpZW50Jj4ocGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCkuY2xpZW50KCkpXSk7CkBAIC0zNzg5LDEwICszNzg5LDEwIEBA
IC0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXIKIAogLSAodm9pZCljbGVh
ckZvY3VzCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0zODA4LDgg
KzM4MDgsOCBAQCAtIChCT09MKWlzT3BhcXVlCiAKIC0gKHZvaWQpc2V0TGF5ZXI6KENBTGF5ZXIg
KilsYXllcgogewotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7
Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQorICAgIGlmIChh
dXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHZp
ZXcgPSBmcmFtZS0+dmlldygpKQogICAgICAgICAgICAgdmlldy0+c2V0UGFpbnRzRW50aXJlQ29u
dGVudHMobGF5ZXIpOwogICAgIH0KIApAQCAtMzg1NSwxMCArMzg1NSwxMCBAQCAtICh2b2lkKXNl
dE5lZWRzTGF5b3V0OiAoQk9PTClmbGFnCiAgICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc0xheW91
dDolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CiAgICAgaWYgKCFmbGFnKQogICAg
ICAgICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIHNheSB5b3UgZG9uJ3QgbmVlZCBhIGxh
eW91dC4KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VDYWNo
ZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgIGlmIChhdXRvKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgp
ICYmIGZyYW1lLT5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9IFdlYkNvcmU6OkRvY3Vt
ZW50OjpOb3RJblBhZ2VDYWNoZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAgICAgIGlmIChhdXRvKiB2aWV3ID0g
ZnJhbWUtPnZpZXcoKSkKICAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0QWZ0ZXJWaWV3
Q29uZmlndXJhdGlvbkNoYW5nZSgpOwogICAgIH0KIH0KQEAgLTM4NjgsOCArMzg2OCw4IEBAIC0g
KHZvaWQpc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiAoQk9PTClmbGEKICAgICBMT0coVmlldywgIiVA
IHNldE5lZWRzVG9BcHBseVN0eWxlczolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7
CiAgICAgaWYgKCFmbGFnKQogICAgICAgICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIHNh
eSB5b3UgZG9uJ3QgbmVlZCBhIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYg
ZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFn
ZUNhY2hlKQorICAgIGlmIChhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5wYWdlQ2Fj
aGVTdGF0ZSgpICE9IFdlYkNvcmU6OkRvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRnVsbFN0eWxl
UmVidWlsZCgpOwogICAgIH0KQEAgLTQwMzEsNyArNDAzMSw3IEBAIC0gKHZvaWQpX2ludmFsaWRh
dGVHU3RhdGVzRm9yVHJlZQogICAgIC8vIGRlc2NlbmRhbnRzLCBpbmNsdWRpbmcgcGx1Zy1pbiB2
aWV3cy4gVGhpcyBjYW4gcmVzdWx0IGluIGNhbGxzIG91dCB0byBwbHVnLWluIGNvZGUgYW5kIGJh
Y2sgaW50bwogICAgIC8vIFdlYkNvcmUgdmlhIEphdmFTY3JpcHQsIHdoaWNoIGNvdWxkIG5vcm1h
bGx5IG11dGF0ZSB0aGUgTlNWaWV3IHRyZWUgd2hpbGUgaXQgaXMgYmVpbmcgdHJhdmVyc2VkLgog
ICAgIC8vIERlZmVyIHRob3NlIG11dGF0aW9ucyB3aGlsZSBkZXNjZW5kYW50cyBhcmUgYmVpbmcg
dHJhdmVyZXNlZC4KLSAgICBXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlIHN1
c3BlbmRXaWRnZXRIaWVyYXJjaHlVcGRhdGVzOworICAgIFdlYkNvcmU6OldpZGdldEhpZXJhcmNo
eVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7CiAg
ICAgW3N1cGVyIF9pbnZhbGlkYXRlR1N0YXRlc0ZvclRyZWVdOwogfQogCkBAIC00MDkxLDcgKzQw
OTEsNyBAQCAtICh2b2lkKXNjcm9sbFdoZWVsOihXZWJFdmVudCAqKWV2ZW50CiAgICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKICNlbmRpZgogCi0gICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigpLndoZWVsRXZlbnQoZXZl
bnQpKSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZl
bnRdOwpAQCAtNDEzNSwxMyArNDEzNSwxMyBAQCAtIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihO
U0V2ZW50ICopZXZlCiAKICAgICBpZiAoaGl0SFRNTFZpZXcpIHsKICAgICAgICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1M
VmlldyBfZnJhbWVdKSkgeworICAgICAgICBpZiAoYXV0byogY29yZUZyYW1lID0gY29yZShbaGl0
SFRNTFZpZXcgX2ZyYW1lXSkpIHsKICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuc2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVyKFtldmVudCBldmVudE51bWJlcl0pOwogICAgICAg
ICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07CiAgICAgICAgICAg
ICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkgewogI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpCi0gICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJh
bWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRl
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50
XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFdl
YkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdLCBwYWdlLT5jaHJvbWUoKS5wbGF0
Zm9ybVBhZ2VDbGllbnQoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgaWYgKFtoaXRI
VE1MVmlldyBfaXNTY3JvbGxCYXJFdmVudDpldmVudF0pCiAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKQEAgLTQxNjYsOSArNDE2Niw5IEBAIC0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dP
cmRlcmluZ0ZvckV2ZW4KICAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVu
dDpldmVudF0pIHsKICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6
ZXZlbnRdOwogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgICAgICAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3Nl
bGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdl
Q2xpZW50KCkpKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRI
VE1MVmlldyBfZnJhbWVdKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gY29y
ZUZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZh
Y3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBf
cHJlc3N1cmVFdmVudF0sIHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7CiAg
ICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VE
b3duRXZlbnQ6bmlsXTsKQEAgLTQyMTMsOCArNDIxMyw4IEBAIC0gKHZvaWQpbW91c2VEb3duOihX
ZWJFdmVudCAqKWV2ZW50CiAKICAgICAvLyBMZXQgV2ViQ29yZSBnZXQgYSBjaGFuY2UgdG8gZGVh
bCB3aXRoIHRoZSBldmVudC4gVGhpcyB3aWxsIGNhbGwgYmFjayB0byB1cwogICAgIC8vIHRvIHN0
YXJ0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgotICAgIGlmIChGcmFtZSog
Y29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZWZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5tb3VzZURvd24oZXZlbnQpOworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLm1v
dXNlRG93bihldmVudCk7CiAjZWxzZQogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiAgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1
dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CkBAIC00MjMwLDggKzQyMzAsOCBAQCAtICh2
b2lkKW1vdXNlRG93bjooV2ViRXZlbnQgKilldmVudAogCiAgICAgICAgICAgICAvLyBMZXQgV2Vi
Q29yZSBnZXQgYSBjaGFuY2UgdG8gZGVhbCB3aXRoIHRoZSBldmVudC4gVGhpcyB3aWxsIGNhbGwg
YmFjayB0byB1cwogICAgICAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIg
aWYgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIo
KS5tb3VzZURvd24oZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAg
ICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3duKGV2ZW50LCBb
W3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiAgICAgICAgIH0KICAgICB9CiAjZW5k
aWYKQEAgLTQyNDcsOCArNDI0Nyw4IEBAIC0gKHZvaWQpdG91Y2g6KFdlYkV2ZW50ICopZXZlbnQK
IAogICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNoYW5jZSB0byBkZWFsIHdpdGggdGhlIGV2ZW50
LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCiAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3Jv
bGwgdGltZXIgaWYgYXBwcm9wcmlhdGUuCi0gICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLnRvdWNo
RXZlbnQoZXZlbnQpOworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnRvdWNoRXZlbnQoZXZlbnQp
OwogfQogCiAjZW5kaWYKQEAgLTQyODYsOCArNDI4Niw4IEBAIC0gKHZvaWQpbW91c2VEcmFnZ2Vk
OihOU0V2ZW50ICopZXZlbnQKICAgICBbc2VsZiByZXRhaW5dOwogCiAgICAgaWYgKCFfcHJpdmF0
ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgaWYgKGF1dG8qIGZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQogICAg
ICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLm1vdXNlRHJhZ2dl
ZChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNDMwMSw3ICs0MzAxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiB7CiAgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRN
TFZpZXddKTsKICAgICAKLSAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOwor
ICAgIGF1dG8qIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uTm9uZTsKIApAQCAtNDMxNyw3ICs0MzE3LDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgTlNQb2ludCB3aW5k
b3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50XTsK
ICAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7CiAgICAgCi0gICAg
aWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsKKyAgICBpZiAoYXV0byog
cGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKSkgewogICAgICAgICB3aW5kb3dNb3VzZUxvYyA9
IE5TTWFrZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRy
YWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBwYWdlLT5kcmFnQ29udHJvbGxlcigp
LmRyYWdPZmZzZXQoKS55KCkpOwogICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdF
bmRlZCgpOwogICAgIH0KQEAgLTQzNjksNyArNDM2OSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgIAogICAgIGlmICghd3JhcHBlcikgewogICAgICAgICBBU1NF
UlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgICAgICBQ
YWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOworICAgICAgICBhdXRvKiBwYWdlID0g
Y29yZShbc2VsZiBfd2ViVmlld10pOwogICAgICAgICAKICAgICAgICAgLy9JZiBhIGxvYWQgb2Nj
dXJzIG1pZHdheSB0aHJvdWdoIGEgZHJhZywgdGhlIHZpZXcgbWF5IGJlIGRldGFjaGVkLCB3aGlj
aCBnaXZlcwogICAgICAgICAvL3VzIG5vIGFiaWxpdHkgdG8gZ2V0IHRvIHRoZSBvcmlnaW5hbCBQ
YWdlLCBzbyB3ZSBjYW5ub3QgYWNjZXNzIGFueSBkcmFnIHN0YXRlCkBAIC00NDA3LDcgKzQ0MDcs
NyBAQCAtIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTZXNzaW9uOihOU0RyCiB7CiAgICAgQVNT
RVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKIAotICAgIFBh
Z2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgYXV0byogcGFnZSA9IGNvcmUo
W3NlbGYgX3dlYlZpZXddKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBOU0RyYWdP
cGVyYXRpb25Ob25lOwogCkBAIC00NDIwLDcgKzQ0MjAsNyBAQCAtICh2b2lkKWRyYWdnaW5nU2Vz
c2lvbjooTlNEcmFnZ2luZ1Nlc3NpCiAKICAgICBOU1BvaW50IHdpbmRvd0xvY2F0aW9uID0gW3Nl
bGYud2luZG93IGNvbnZlcnRSZWN0RnJvbVNjcmVlbjp7IHNjcmVlblBvaW50LCBOU1plcm9TaXpl
IH1dLm9yaWdpbjsKIAotICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10p
KQorICAgIGlmIChhdXRvKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKQogICAgICAgICBw
YWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFbmRlZCgpOwogCiAgICAgW1tzZWxmIF9mcmFtZV0g
X2RyYWdTb3VyY2VFbmRlZEF0OndpbmRvd0xvY2F0aW9uIG9wZXJhdGlvbjpvcGVyYXRpb25dOwpA
QCAtNDQ2Miw4ICs0NDYyLDggQEAgLSAodm9pZCltb3VzZVVwOihXZWJFdmVudCAqKWV2ZW50CiAg
ICAgW3NlbGYgcmV0YWluXTsKIAogICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAo
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICBpZiAoYXV0byogZnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KSkgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICBwYWdlLT5tYWluRnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5tb3VzZVVwKGV2ZW50KTsKICNlbHNlCkBAIC00NDk1LDcgKzQ0
OTUsNyBAQCAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihOU0V2ZW50CiAgICAgaWYg
KGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUNoYW5nZWQgJiYgZXZlbnQucGhhc2UgIT0gTlNF
dmVudFBoYXNlQmVnYW4gJiYgZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlRW5kZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDUxNywyNCArNDUxNywyNCBAQCAtIChCT09MKW5lZWRzUGFuZWxUb0JlY29tZUtleQogCiAvLyBV
dGlsaXR5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55dGhpbmcgdGhy
b3VnaCB0aGUgTlNUZXh0SW5wdXQKIC8vIEFQSSB3aGVuIGFuIGVkaXRhYmxlIHJlZ2lvbiBpcyBu
b3QgY3VycmVudGx5IGZvY3VzZWQuCi1zdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29y
ZUZyYW1lKQorc3RhdGljIEJPT0wgaXNUZXh0SW5wdXQoV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFt
ZSkKIHsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAmJiBzZWxl
Y3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3Rh
dGljIEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFtZSkKK3N0YXRpYyBCT09M
IGlzSW5QYXNzd29yZEZpZWxkKFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5Q
YXNzd29yZEZpZWxkKCk7CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgUmVmUHRyPEtleWJvYXJkRXZl
bnQ+IGN1cnJlbnRLZXlib2FyZEV2ZW50KEZyYW1lKiBjb3JlRnJhbWUpCitzdGF0aWMgUmVmUHRy
PFdlYkNvcmU6OktleWJvYXJkRXZlbnQ+IGN1cnJlbnRLZXlib2FyZEV2ZW50KFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TRXZlbnQgKmV2ZW50
ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CkBAIC00NTQzLDEyICs0NTQzLDEyIEBAIHN0YXRpYyBS
ZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtleWIKIAogICAgIHN3aXRjaCAoW2V2ZW50IHR5
cGVdKSB7CiAgICAgY2FzZSBOU0V2ZW50VHlwZUtleURvd246IHsKLSAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRl
UGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgcGxhdGZvcm1FdmVudC5kaXNh
bWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bik7Ci0gICAgICAg
IHJldHVybiBLZXlib2FyZEV2ZW50OjpjcmVhdGUocGxhdGZvcm1FdmVudCwgJmNvcmVGcmFtZS0+
d2luZG93UHJveHkoKSk7CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBw
bGF0Zm9ybUV2ZW50ID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtS2V5Ym9hcmRFdmVudChldmVudCk7CisgICAgICAgIHBsYXRmb3JtRXZlbnQuZGlzYW1iaWd1
YXRlS2V5RG93bkV2ZW50KFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pOworICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQs
ICZjb3JlRnJhbWUtPndpbmRvd1Byb3h5KCkpOwogICAgIH0KICAgICBjYXNlIE5TRXZlbnRUeXBl
S2V5VXA6Ci0gICAgICAgIHJldHVybiBLZXlib2FyZEV2ZW50OjpjcmVhdGUoUGxhdGZvcm1FdmVu
dEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCksICZjb3JlRnJhbWUt
PndpbmRvd1Byb3h5KCkpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6
Y3JlYXRlKFdlYkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybUtleWJv
YXJkRXZlbnQoZXZlbnQpLCAmY29yZUZyYW1lLT53aW5kb3dQcm94eSgpKTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00NTU4LDggKzQ1NTgsOCBAQCBz
dGF0aWMgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGN1cnJlbnRLZXliCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIFdlYkV2ZW50VHlwZSB0eXBlID0gZXZlbnQudHlwZTsKICAgICBpZiAodHlw
ZSA9PSBXZWJFdmVudEtleURvd24gfHwgdHlwZSA9PSBXZWJFdmVudEtleVVwKSB7Ci0gICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgcmV0
dXJuIEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxh
dGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSwgZG9jdW1lbnQgPyBkb2N1bWVudC0+d2luZG93UHJv
eHkoKSA6IDApOworICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmNyZWF0ZShXZWJDb3Jl
OjpQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50
KSwgZG9jdW1lbnQgPyBkb2N1bWVudC0+d2luZG93UHJveHkoKSA6IDApOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKICNlbmRpZgpAQCAtNDU3NSw3ICs0NTc1LDcgQEAgLSAoQk9PTCliZWNv
bWVGaXJzdFJlc3BvbmRlcgogICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwogI2VuZGlmCiAg
ICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBm
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIFlFUzsKIApAQCAtNDU5NCw3ICs0NTk0LDcgQEAgLSAoQk9PTCliZWNvbWVGaXJzdFJlc3Bv
bmRlcgogICAgIC8vIEZJWE1FOiBLaWxsIHJpbmcgaGFuZGxpbmcgaXMgbW9zdGx5IGluIFdlYkNv
cmUsIHNvIHRoaXMgY2FsbCBzaG91bGQgYWxzbyBiZSBtb3ZlZCB0aGVyZS4KICAgICBmcmFtZS0+
ZWRpdG9yKCkuc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwogCi0gICAgUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgYXV0byogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gWUVTOwogCkBAIC00NjA2LDkgKzQ2MDYsOSBA
QCAtIChCT09MKWJlY29tZUZpcnN0UmVzcG9uZGVyCiAgICAgaWYgKGRpcmVjdGlvbiA9PSBOU0Rp
cmVjdFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuIFlFUzsKIAotICAgIGlmIChEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWRFbGVtZW50KDAp
OwotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEluaXRpYWxGb2N1cyhkaXJlY3Rpb24g
PT0gTlNTZWxlY3RpbmdOZXh0ID8gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNEaXJlY3Rp
b25CYWNrd2FyZCwKKyAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRJbml0aWFsRm9jdXMo
ZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCA/IFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uRm9y
d2FyZCA6IFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uQmFja3dhcmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50S2V5Ym9hcmRFdmVudChmcmFtZSku
Z2V0KCkpOwogICAgIHJldHVybiBZRVM7CiB9CkBAIC00NjI0LDE4ICs0NjI0LDE4IEBAIC0gKEJP
T0wpcmVzaWduRmlyc3RSZXNwb25kZXIKICAgICAgICAgfQogICAgICAgICBbX3ByaXZhdGUtPmNv
bXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CiAj
ZW5kaWYKLSAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIHJlc2lnbjsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUt
PmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LT5tYXJrZXJzKCkucmVtb3ZlTWFy
a2VycyhEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyk7Ci0g
ICAgICAgICAgICBkb2N1bWVudC0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvblJlc3VsdCk7CisgICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGNvcmVG
cmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKICAgICAgICAgfQog
I2VuZGlmCiAKLSAgICAgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgICAg
ICBhdXRvKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7CiAgICAgICAgIGlmICghcGFnZSkKICAg
ICAgICAgICAgIHJldHVybiByZXNpZ247CiAgICAgICAgIGlmICghW3NlbGYgbWFpbnRhaW5zSW5h
Y3RpdmVTZWxlY3Rpb25dKSB7IApAQCAtNDcxMSwxNCArNDcxMSwxNCBAQCAtICh2b2lkKV9zZXRQ
cmludGluZzooQk9PTClwcmludGluZyBtaW5pCiAgICAgX3ByaXZhdGUtPnByaW50aW5nID0gcHJp
bnRpbmc7CiAgICAgX3ByaXZhdGUtPnBhZ2luYXRlU2NyZWVuQ29udGVudCA9IHBhZ2luYXRlU2Ny
ZWVuQ29udGVudDsKICAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlm
IChjb3JlRnJhbWUpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJh
bWUtPnZpZXcoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3
KCkpCiAgICAgICAgICAgICBjb3JlVmlldy0+c2V0TWVkaWFUeXBlKF9wcml2YXRlLT5wcmludGlu
ZyA/ICJwcmludCIgOiAic2NyZWVuIik7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBjb3JlRnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
Y29yZUZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBJbiBzZXR0aW5nIHByaW50
aW5nLCB3ZSBzaG91bGQgbm90IHZhbGlkYXRlIHJlc291cmNlcyBhbHJlYWR5IGNhY2hlZCBmb3Ig
dGhlIGRvY3VtZW50LgogICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MzcwNAotICAgICAgICAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRp
b25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKGRvY3VtZW50LT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlQ2FjaGVWYWxpZGF0aW9u
U3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSk7CiAKICAgICAgICAgICAgIGRvY3VtZW50LT5zZXRQYWdpbmF0ZWRGb3JTY3JlZW4o
X3ByaXZhdGUtPnBhZ2luYXRlU2NyZWVuQ29udGVudCk7CiAgICAgICAgICAgICBkb2N1bWVudC0+
c2V0UHJpbnRpbmcoX3ByaXZhdGUtPnByaW50aW5nKTsKQEAgLTQ3NjcsOSArNDc2Nyw5IEBAIC0g
KHZvaWQpYWRqdXN0UGFnZUhlaWdodE5ldzooQ0dGbG9hdCAqKW4KIC0gKGZsb2F0KV9zY2FsZUZh
Y3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24K
IHsKICAgICBib29sIHVzZVZpZXdXaWR0aCA9IHRydWU7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgYXV0byogZG9jdW1lbnQgPSBjb3Jl
RnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+cmVu
ZGVyVmlldygpKQogICAgICAgICAgICAgdXNlVmlld1dpZHRoID0gZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKS0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIH0KQEAgLTQ5Mzks
NyArNDkzOSw3IEBAIC0gKHZvaWQpa2V5RG93bjooV2ViRXZlbnQgKilldmVudAogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRlLT5j
b21wbGV0aW9uQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIHBv
cHVwV2luZG93SXNPcGVuXTsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlm
ICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50
SGFuZGxlcigpLmtleUV2ZW50KGV2ZW50KSkgewogICAgICAgICAvLyBXZWJDb3JlIHByb2Nlc3Nl
ZCBhIGtleSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29tcGxldGU6IFVJCiAgICAg
ICAgIGlmIChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQpAQCAtNDk1MCw3ICs0OTUwLDcgQEAgLSAo
dm9pZClrZXlEb3duOihXZWJFdmVudCAqKWV2ZW50CiAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsK
ICAgICB9CiAjZWxzZQotICAgIEZyYW1lICpjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFl
dmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lKQogICAgICAgICBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLmtleUV2ZW50KGV2ZW50KTsKICNlbmRpZgpAQCAtNDk3Niw3ICs0OTc2LDcg
QEAgLSAodm9pZClrZXlVcDooV2ViRXZlbnQgKilldmVudAogICAgIEJPT0wgZXZlbnRXYXNTZW50
VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwogCiAgICAgUmV0
YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKLSAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwogICAgIGlmIChjb3JlRnJhbWUgJiYgIWV2ZW50V2FzU2VudFRvV2Vi
Q29yZSkKICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChldmVudCk7
CiAgICAgZWxzZQpAQCAtNDk5NCwxMiArNDk5NCwxMiBAQCAtICh2b2lkKWZsYWdzQ2hhbmdlZDoo
TlNFdmVudCAqKWV2ZW50CiAKICAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0
b3IgPSBzZWxmOwogCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICB1bnNpZ25l
ZCBzaG9ydCBrZXlDb2RlID0gW2V2ZW50IGtleUNvZGVdOwogCiAgICAgLy8gRG9uJ3QgbWFrZSBh
biBldmVudCBmcm9tIHRoZSBudW0gbG9jayBhbmQgZnVuY3Rpb24ga2V5cy4KICAgICBpZiAoY29y
ZUZyYW1lICYmIGtleUNvZGUgIT0gMCAmJiBrZXlDb2RlICE9IDEwICYmIGtleUNvZGUgIT0gNjMp
IHsKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5rZXlFdmVudChQbGF0Zm9ybUV2
ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkua2V5RXZlbnQoV2ViQ29yZTo6UGxhdGZvcm1FdmVu
dEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTUwNjAsMTUgKzUwNjAsMTUgQEAgLSAodm9pZClj
ZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOihpZAogewogICAgIENPTU1BTkRfUFJPTE9HVUUK
IAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAg
ICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKKyAgICBp
ZiAoYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlz
KTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAogLSAoTlNEYXRhICopX3NlbGVjdGlvblN0YXJ0
Rm9udEF0dHJpYnV0ZXNBc1JURgogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpAIngiCiAgICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29yZUZyYW1l
LT5lZGl0b3IoKS5mb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoKS5jcmVhdGVEaWN0aW9u
YXJ5KCkuZ2V0KCkgOiBuaWxdKTsKICAgICByZXR1cm4gW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CkBA
IC01MDgxLDcgKzUwODEsNyBAQCAtIChOU0RpY3Rpb25hcnkgKilfZm9udEF0dHJpYnV0ZXNGcm9t
Rm9uCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgaWYgKGZvbnRQ
YXN0ZWJvYXJkID09IG5pbCkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBOU0RhdGEgKmRhdGEg
PSBbZm9udFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6bGVnYWN5Rm9udFBhc3RlYm9hcmRUeXBlKCld
OworICAgIE5TRGF0YSAqZGF0YSA9IFtmb250UGFzdGVib2FyZCBkYXRhRm9yVHlwZTpXZWJDb3Jl
OjpsZWdhY3lGb250UGFzdGVib2FyZFR5cGUoKV07CiAgICAgaWYgKGRhdGEgPT0gbmlsIHx8IFtk
YXRhIGxlbmd0aF0gPT0gMCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAvLyBOU1RleHRWaWV3
IGRvZXMgc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50IGJ5IHBhcnNpbmcgdGhlIGF0dHJpYnV0ZXMg
b25seSwgYnV0IHRoYXQncyBub3QgYXZhaWxhYmxlIGluIEFQSS4KQEAgLTUyMDIsMTUgKzUyMDIs
MTUgQEAgLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21GbwogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQogCi0tICh2b2lkKV9hcHBseVN0eWxlVG9TZWxlY3Rpb246KERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRv
QWN0aW9uCistICh2b2lkKV9hcHBseVN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooV2ViQ29yZTo6RWRpdEFjdGlvbil1bmRvQWN0
aW9uCiB7Ci0gICAgW3NlbGYgX2FwcGx5RWRpdGluZ1N0eWxlVG9TZWxlY3Rpb246RWRpdGluZ1N0
eWxlOjpjcmVhdGUoY29yZShzdHlsZSkpIHdpdGhVbmRvQWN0aW9uOnVuZG9BY3Rpb25dOworICAg
IFtzZWxmIF9hcHBseUVkaXRpbmdTdHlsZVRvU2VsZWN0aW9uOldlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6Y3JlYXRlKGNvcmUoc3R5bGUpKSB3aXRoVW5kb0FjdGlvbjp1bmRvQWN0aW9uXTsKIH0KIAot
LSAodm9pZClfYXBwbHlFZGl0aW5nU3R5bGVUb1NlbGVjdGlvbjooUmVmPEVkaXRpbmdTdHlsZT4m
JillZGl0aW5nU3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgorLSAo
dm9pZClfYXBwbHlFZGl0aW5nU3R5bGVUb1NlbGVjdGlvbjooUmVmPFdlYkNvcmU6OkVkaXRpbmdT
dHlsZT4mJillZGl0aW5nU3R5bGUgd2l0aFVuZG9BY3Rpb246KFdlYkNvcmU6OkVkaXRBY3Rpb24p
dW5kb0FjdGlvbgogewotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlVG9TZWxlY3Rpb24o
V1RGTW92ZShlZGl0aW5nU3R5bGUpLCB1bmRvQWN0aW9uLCBFZGl0b3I6OkNvbG9yRmlsdGVyTW9k
ZTo6SW52ZXJ0Q29sb3IpOworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGVUb1NlbGVjdGlv
bihXVEZNb3ZlKGVkaXRpbmdTdHlsZSksIHVuZG9BY3Rpb24sIFdlYkNvcmU6OkVkaXRvcjo6Q29s
b3JGaWx0ZXJNb2RlOjpJbnZlcnRDb2xvcik7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01
MjYyLDcgKzUyNjIsNyBAQCAtIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICop
CiAgICAgLy8gQnV0IGRvbid0IGRvIGl0IGlmIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBl
dmVudC4KICAgICAvLyBQcmVzc2luZyBFc2MgcmVzdWx0cyBpbiBhIGZha2UgZXZlbnQgYmVpbmcg
c2VudCAtIGRvbid0IHBhc3MgaXQgdG8gV2ViQ29yZS4KICAgICBpZiAoIWV2ZW50V2FzU2VudFRv
V2ViQ29yZSAmJiBldmVudCA9PSBbTlNBcHAgY3VycmVudEV2ZW50XSAmJiBzZWxmID09IFtbc2Vs
ZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSkKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGlmIChhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCiAgICAgICAgICAgICByZXQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkua2V5RXZl
bnQoZXZlbnQpOwogCiAgICAgaWYgKHJldCkgewpAQCAtNTI4Niw4ICs1Mjg2LDggQEAgLSAodm9p
ZCljb3B5Rm9udDooaWQpc2VuZGVyCiAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCiAgICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9h
cmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07CiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECi0gICAgW2ZvbnRQYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNB
cnJheSBhcnJheVdpdGhPYmplY3Q6bGVnYWN5Rm9udFBhc3RlYm9hcmRUeXBlKCldIG93bmVyOm5p
bF07Ci0gICAgW2ZvbnRQYXN0ZWJvYXJkIHNldERhdGE6W3NlbGYgX3NlbGVjdGlvblN0YXJ0Rm9u
dEF0dHJpYnV0ZXNBc1JURl0gZm9yVHlwZTpsZWdhY3lGb250UGFzdGVib2FyZFR5cGUoKV07Cisg
ICAgW2ZvbnRQYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6
V2ViQ29yZTo6bGVnYWN5Rm9udFBhc3RlYm9hcmRUeXBlKCldIG93bmVyOm5pbF07CisgICAgW2Zv
bnRQYXN0ZWJvYXJkIHNldERhdGE6W3NlbGYgX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNB
c1JURl0gZm9yVHlwZTpXZWJDb3JlOjpsZWdhY3lGb250UGFzdGVib2FyZFR5cGUoKV07CiB9CiAK
IC0gKHZvaWQpcGFzdGVGb250OihpZClzZW5kZXIKQEAgLTUyOTYsNyArNTI5Niw3IEBAIC0gKHZv
aWQpcGFzdGVGb250OihpZClzZW5kZXIKIAogICAgIC8vIFJlYWQgUlRGIHdpdGggZm9udCBhdHRy
aWJ1dGVzIGZyb20gdGhlIHBhc3RlYm9hcmQuCiAgICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxk
IGFkZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZl
IiBjb3B5IGFuZCBwYXN0ZSBmb250LgotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246
W3NlbGYgX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOltzZWxmIF9mb250QXR0cmlidXRlc0Zyb21G
b250UGFzdGVib2FyZF1dIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb246OlBhc3RlRm9udF07Cisg
ICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udEF0dHJp
YnV0ZXM6W3NlbGYgX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkXV0gd2l0aFVuZG9B
Y3Rpb246V2ViQ29yZTo6RWRpdEFjdGlvbjo6UGFzdGVGb250XTsKIH0KIAogLSAodm9pZClwYXN0
ZUFzUmljaFRleHQ6KGlkKXNlbmRlcgpAQCAtNTMxMiwxNCArNTMxMiwxNCBAQCAtICh2b2lkKWNo
YW5nZUZvbnQ6KGlkKXNlbmRlcgogewogICAgIENPTU1BTkRfUFJPTE9HVUUKIAotICAgIFtzZWxm
IF9hcHBseUVkaXRpbmdTdHlsZVRvU2VsZWN0aW9uOmNvbXB1dGVkRm9udENoYW5nZXMoTlNGb250
TWFuYWdlci5zaGFyZWRGb250TWFuYWdlcikuY3JlYXRlRWRpdGluZ1N0eWxlKCkgd2l0aFVuZG9B
Y3Rpb246RWRpdEFjdGlvbjo6U2V0Rm9udF07CisgICAgW3NlbGYgX2FwcGx5RWRpdGluZ1N0eWxl
VG9TZWxlY3Rpb246V2ViQ29yZTo6Y29tcHV0ZWRGb250Q2hhbmdlcyhOU0ZvbnRNYW5hZ2VyLnNo
YXJlZEZvbnRNYW5hZ2VyKS5jcmVhdGVFZGl0aW5nU3R5bGUoKSB3aXRoVW5kb0FjdGlvbjpXZWJD
b3JlOjpFZGl0QWN0aW9uOjpTZXRGb250XTsKIH0KIAogLSAodm9pZCljaGFuZ2VBdHRyaWJ1dGVz
OihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xPR1VFCiAKLSAgICBbc2VsZiBfYXBwbHlF
ZGl0aW5nU3R5bGVUb1NlbGVjdGlvbjpjb21wdXRlZEZvbnRBdHRyaWJ1dGVDaGFuZ2VzKE5TRm9u
dE1hbmFnZXIuc2hhcmVkRm9udE1hbmFnZXIsIHNlbmRlcikuY3JlYXRlRWRpdGluZ1N0eWxlKCkg
d2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvbjo6Q2hhbmdlQXR0cmlidXRlc107CisgICAgW3NlbGYg
X2FwcGx5RWRpdGluZ1N0eWxlVG9TZWxlY3Rpb246V2ViQ29yZTo6Y29tcHV0ZWRGb250QXR0cmli
dXRlQ2hhbmdlcyhOU0ZvbnRNYW5hZ2VyLnNoYXJlZEZvbnRNYW5hZ2VyLCBzZW5kZXIpLmNyZWF0
ZUVkaXRpbmdTdHlsZSgpIHdpdGhVbmRvQWN0aW9uOldlYkNvcmU6OkVkaXRBY3Rpb246OkNoYW5n
ZUF0dHJpYnV0ZXNdOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJv
bUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgpAQCAtNTMzMiwxMSArNTMzMiwx
MSBAQCAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUNvCiAgICAgcmV0dXJu
IHN0eWxlOwogfQogCi0tIChFZGl0QWN0aW9uKV91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRo
U2VsZWN0b3I6KFNFTClzZWxlY3RvcgorLSAoV2ViQ29yZTo6RWRpdEFjdGlvbilfdW5kb0FjdGlv
bkZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsKICAgICBpZiAoc2Vs
ZWN0b3IgPT0gQHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopKQotICAgICAgICByZXR1cm4g
RWRpdEFjdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOwotICAgIHJldHVybiBFZGl0QWN0aW9uOjpT
ZXRDb2xvcjsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkVkaXRBY3Rpb246OlNldEJhY2tncm91
bmRDb2xvcjsKKyAgICByZXR1cm4gV2ViQ29yZTo6RWRpdEFjdGlvbjo6U2V0Q29sb3I7CiB9CiAK
IC0gKHZvaWQpX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjooU0VMKXNlbGVjdG9yIGluUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTUzNDQsOSArNTM0NCw5IEBAIC0gKHZvaWQpX2NoYW5n
ZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjooU0UKICAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpz
dHlsZSA9IFtzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXTsK
ICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwogICAgIGlmIChbW3dlYlZp
ZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5
U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6cmFuZ2VdKSB7Ci0gICAgICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoYXV0
byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewogICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IGhlcmUuCi0gICAgICAgICAgICBS
ZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllcyhjb3JlKHN0eWxlKS0+Y29weVBy
b3BlcnRpZXMoKSk7CisgICAgICAgICAgICBSZWY8V2ViQ29yZTo6TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gcHJvcGVydGllcyhjb3JlKHN0eWxlKS0+Y29weVByb3BlcnRpZXMoKSk7CiAgICAgICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUocHJvcGVydGllcy5wdHIoKSwgW3Nl
bGYgX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl0pOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNTM4MCw3ICs1MzgwLDcgQEAgLSAodm9pZCljaGFuZ2VDb2xvcjoo
aWQpc2VuZGVyCiAgICAgLy8gQXBwS2l0IHdpbGwgaGF2ZSB0byBiZSByZXZpc2VkIHRvIGFsbG93
IHRoaXMgdG8gd29yayB3aXRoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYW4gCiAgICAgLy8gTlNUZXh0
Vmlldy4gSG93ZXZlciwgdGhpcyBtaWdodCBub3QgYmUgcmVxdWlyZWQgZm9yIFRpZ2VyLCBzaW5j
ZSB0aGUgYmFja2dyb3VuZC1jb2xvciAKICAgICAvLyBjaGFuZ2luZyBib3ggaW4gdGhlIGZvbnQg
cGFuZWwgZG9lc24ndCB3b3JrIGluIE1haWwgKDM2NzQ0ODEpLCB0aG91Z2ggaXQgZG9lcyBpbiBU
ZXh0RWRpdC4KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZy
b21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOkBzZWxlY3RvcihzZXRDb2xvcjopXSB3aXRoVW5kb0Fj
dGlvbjpFZGl0QWN0aW9uOjpTZXRDb2xvcl07CisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVj
dGlvbjpbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0
Q29sb3I6KV0gd2l0aFVuZG9BY3Rpb246V2ViQ29yZTo6RWRpdEFjdGlvbjo6U2V0Q29sb3JdOwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpAQCAtNTQzNiw3ICs1NDM2LDcgQEAgLSAodm9p
ZCljaGVja1NwZWxsaW5nOihpZClzZW5kZXIKIHsKICAgICBDT01NQU5EX1BST0xPR1VFCiAKLSAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgaWYgKGF1
dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCiAgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCkuYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKCk7CiB9CiAKQEAgLTU0NTYsNyArNTQ1
Niw3IEBAIC0gKHZvaWQpc2hvd0d1ZXNzUGFuZWw6KGlkKXNlbmRlcgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkKKyAgICBpZiAoYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKICAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcodHJ1ZSk7
CiAgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOwogfQpAQCAtNTUwMiwyNSAr
NTUwMiwyNSBAQCAtICh2b2lkKXRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOihpZClzCiAgICAg
aWYgKCFbc2VsZiBfY2FuRWRpdF0pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGRpcmVjdGlvbiA9IFdyaXRpbmdEaXJlY3Rpb246OlJpZ2h0VG9MZWZ0Owor
ICAgIGF1dG8gZGlyZWN0aW9uID0gV2ViQ29yZTo6V3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRUb0xl
ZnQ7CiAgICAgc3dpdGNoIChjb3JlRnJhbWUtPmVkaXRvcigpLmJhc2VXcml0aW5nRGlyZWN0aW9u
Rm9yU2VsZWN0aW9uU3RhcnQoKSkgewotICAgIGNhc2UgV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRv
UmlnaHQ6CisgICAgY2FzZSBXZWJDb3JlOjpXcml0aW5nRGlyZWN0aW9uOjpMZWZ0VG9SaWdodDoK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXcml0aW5nRGlyZWN0aW9uOjpSaWdodFRvTGVmdDoK
LSAgICAgICAgZGlyZWN0aW9uID0gV3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CisgICAg
Y2FzZSBXZWJDb3JlOjpXcml0aW5nRGlyZWN0aW9uOjpSaWdodFRvTGVmdDoKKyAgICAgICAgZGly
ZWN0aW9uID0gV2ViQ29yZTo6V3JpdGluZ0RpcmVjdGlvbjo6TGVmdFRvUmlnaHQ7CiAgICAgICAg
IGJyZWFrOwogICAgIC8vIFRoZSB3cml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgbWV0
aG9kIHdpbGwgbmV2ZXIgcmV0dXJuICJuYXR1cmFsIi4gSXQKICAgICAvLyB3aWxsIGFsd2F5cyBy
ZXR1cm4gYSBjb25jcmV0ZSBkaXJlY3Rpb24uIFNvLCBrZWVwIHRoZSBjb21waWxlciBoYXBweSwg
YW5kIGFzc2VydCBub3QgcmVhY2hlZC4KLSAgICBjYXNlIFdyaXRpbmdEaXJlY3Rpb246Ok5hdHVy
YWw6CisgICAgY2FzZSBXZWJDb3JlOjpXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsOgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgIGlmIChhdXRvKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQogICAgICAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbik7CiB9CiAKQEAgLTU1MzcsOCAr
NTUzNyw4IEBAIC0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KGlkKXMKICAgICAv
LyBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsJ3MgYmVoYXZpb3IgdXNpbmcgQ1NTLgogICAgIEFT
U0VSVCh3cml0aW5nRGlyZWN0aW9uICE9IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpOwogCi0g
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBj
b3JlRnJhbWUtPmVkaXRvcigpLnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKHdyaXRpbmdEaXJlY3Rp
b24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyBXcml0aW5nRGlyZWN0aW9uOjpM
ZWZ0VG9SaWdodCA6IFdyaXRpbmdEaXJlY3Rpb246OlJpZ2h0VG9MZWZ0KTsKKyAgICBpZiAoYXV0
byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbih3cml0aW5nRGlyZWN0aW9uID09IE5TV3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gV2ViQ29yZTo6V3JpdGluZ0RpcmVjdGlvbjo6TGVm
dFRvUmlnaHQgOiBXZWJDb3JlOjpXcml0aW5nRGlyZWN0aW9uOjpSaWdodFRvTGVmdCk7CiB9CiAK
IHN0YXRpYyBCT09MIHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKQpAQCAtNTU1
OCw4ICs1NTU4LDggQEAgLSAodm9pZClfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzooTgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLnNldEJhc2VXcml0
aW5nRGlyZWN0aW9uKGRpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/
IFdyaXRpbmdEaXJlY3Rpb246OkxlZnRUb1JpZ2h0IDogV3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRU
b0xlZnQpOworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQor
ICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVj
dGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/IFdlYkNvcmU6OldyaXRpbmdE
aXJlY3Rpb246OkxlZnRUb1JpZ2h0IDogV2ViQ29yZTo6V3JpdGluZ0RpcmVjdGlvbjo6UmlnaHRU
b0xlZnQpOwogfQogCiAtICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0
OihpZClzZW5kZXIKQEAgLTU2MzEsMTAgKzU2MzEsMTAgQEAgLSAoQk9PTClfYXV0b21hdGljRm9j
dXNSaW5nRGlzYWJsZWQKIAogLSAodm9pZClfdXBkYXRlQ29udHJvbFRpbnRzCiB7Ci0gICAgRnJh
bWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgYXV0byogdmlldyA9IGZyYW1lLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAgICAgdmlldy0+dXBkYXRl
Q29udHJvbFRpbnRzKCk7CkBAIC01NzAwLDcgKzU3MDAsNyBAQCAtICh2b2lkKV9zZWxlY3Rpb25D
aGFuZ2VkCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFtzZWxmIF91cGRhdGVTZWxlY3Rpb25Gb3JJ
bnB1dE1hbmFnZXJdOwogICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwotICAgIGlmIChGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgIGlmIChhdXRvKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CiAgICAgICAgIGlmICghY29yZUZyYW1lLT5l
ZGl0b3IoKS5pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUoKSkKICAgICAgICAgICAgIF9wcml2
YXRlLT5zb2Z0U3BhY2VSYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAgIH0K
QEAgLTU3MjUsOCArNTcyNSw4IEBAIC0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAogICAgIGJvb2wg
bXVsdGlwbGVGb250cyA9IGZhbHNlOwogICAgIE5TRm9udCAqZm9udCA9IG5pbDsKICAgICBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzOwotICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29uc3QgRm9udCogZmQgPSBj
b3JlRnJhbWUtPmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCisgICAg
aWYgKGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYg
KGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS5mb250Rm9yU2Vs
ZWN0aW9uKG11bHRpcGxlRm9udHMpKQogICAgICAgICAgICAgZm9udCA9IChOU0ZvbnQgKilmZC0+
cGxhdGZvcm1EYXRhKCkucmVnaXN0ZXJlZEZvbnQoKTsKICAgICAgICAgYXR0cmlidXRlcyA9IGNv
cmVGcmFtZS0+ZWRpdG9yKCkuZm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KCkuY3JlYXRl
RGljdGlvbmFyeSgpOwogICAgIH0KQEAgLTU3NTMsOCArNTc1Myw4IEBAIC0gKEJPT0wpX2NhblNt
YXJ0Q29weU9yRGVsZXRlCiB7CiAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZF0pCiAgICAgICAgIHJldHVybiBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7CisgICAgYXV0
byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXZWJDb3JlOjpXb3Jk
R3JhbnVsYXJpdHk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01OTE5LDIwICs1OTE5LDIw
IEBAIC0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW8KIAogLSAodm9pZClf
bG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgogewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNl
bGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJh
bmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W1tzZWxmIF93ZWJWaWV3XSBfc2hvd0RpY3Rpb25hcnlMb29rdXBQb3B1cDpbV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOipzZWxlY3Rpb25S
YW5nZSBpbkZyYW1lOmNvcmVGcmFtZSB3aXRoTG9va3VwT3B0aW9uczpuaWwgaW5kaWNhdG9yT3B0
aW9uczpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hs
aWdodCB0cmFuc2l0aW9uOlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3Vu
Y2VBbmRDcm9zc2ZhZGVdXTsKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9zaG93RGljdGlvbmFyeUxv
b2t1cFBvcHVwOltXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2U6KnNlbGVjdGlvblJhbmdlIGluRnJhbWU6Y29yZUZyYW1lIHdpdGhMb29rdXBP
cHRpb25zOm5pbCBpbmRpY2F0b3JPcHRpb25zOldlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25J
bmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0IHRyYW5zaXRpb246V2ViQ29yZTo6
VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZUFuZENyb3NzZmFkZV1d
OwogfQogCiAtICh2b2lkKXF1aWNrTG9va1dpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50CiB7Ci0g
ICAgW1tzZWxmIF93ZWJWaWV3XSBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0
SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKKyAgICBbW3NlbGYg
X3dlYlZpZXddIF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uOldlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZhZGVPdXRdOwogICAgIFtzdXBlciBx
dWlja0xvb2tXaXRoRXZlbnQ6ZXZlbnRdOwogfQogCkBAIC01OTU2LDcgKzU5NTYsNyBAQCAtICh2
b2lkKV9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCiAgICAgcGFyYW1ldGVycy0+c2hvdWxk
U2F2ZUNvbW1hbmRzID0gZmFsc2U7CiAgICAgcGFyYW1ldGVycy0+ZXhlY3V0aW5nU2F2ZWRLZXlw
cmVzc0NvbW1hbmRzID0gdHJ1ZTsKICAgICAKLSAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21t
YW5kPiYgY29tbWFuZHMgPSBwYXJhbWV0ZXJzLT5ldmVudC0+a2V5cHJlc3NDb21tYW5kcygpOwor
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcyA9IHBh
cmFtZXRlcnMtPmV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbW1hbmRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCkBAIC01OTc1LDkgKzU5NzUsOSBAQCAtICh2b2lkKV9leGVj
dXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCiAKICNpZiBQTEFURk9STShNQUMpCiAKLS0gKEJPT0wp
X2ludGVycHJldEtleUV2ZW50OihLZXlib2FyZEV2ZW50KilldmVudCBzYXZpbmdDb21tYW5kczoo
Qk9PTClzYXZpbmdDb21tYW5kcworLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYkNvcmU6
OktleWJvYXJkRXZlbnQqKWV2ZW50IHNhdmluZ0NvbW1hbmRzOihCT09MKXNhdmluZ0NvbW1hbmRz
CiB7Ci0gICAgQVNTRVJUKGNvcmUoW3NlbGYgX2ZyYW1lXSkgPT0gZG93bmNhc3Q8Tm9kZT4oZXZl
bnQtPnRhcmdldCgpKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBBU1NFUlQoY29yZShbc2Vs
ZiBfZnJhbWVdKSA9PSBkb3duY2FzdDxXZWJDb3JlOjpOb2RlPihldmVudC0+dGFyZ2V0KCkpLT5k
b2N1bWVudCgpLmZyYW1lKCkpOwogICAgIEFTU0VSVCghc2F2aW5nQ29tbWFuZHMgfHwgZXZlbnQt
PmtleXByZXNzQ29tbWFuZHMoKS5pc0VtcHR5KCkpOyAvLyBTYXZlIGNvbW1hbmRzIG9uY2UgZm9y
IGVhY2ggZXZlbnQuCiAKICAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMgcGFyYW1ldGVyczsKQEAgLTYwMDIsNyArNjAwMiw3IEBAIC0gKEJPT0wpX2ludGVycHJldEtl
eUV2ZW50OihLZXlib2FyZEV2ZW4KICAgICAKICAgICBwYXJhbWV0ZXJzLmV2ZW50ID0gZXZlbnQ7
CiAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAmcGFyYW1ldGVy
czsKLSAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+
a2V5cHJlc3NDb21tYW5kcygpOworICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0Nv
bW1hbmQ+JiBjb21tYW5kcyA9IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7CiAKICAgICBpZiAo
c2F2aW5nQ29tbWFuZHMpIHsKICAgICAgICAgLy8gQXBwS2l0IHdpbGwgcmVzcG9uZCB3aXRoIGEg
c2VyaWVzIG9mIE5TVGV4dElucHV0IHByb3RvY29sIG1ldGhvZCBjYWxscy4gVGhlcmUgYXJlIHRo
cmVlIGdyb3VwcyB0aGF0IHdlIGhldXJpc3RpY2FsbHkgZGlmZmVyZW50aWF0ZToKQEAgLTYwMjYs
NyArNjAyNiw3IEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihLZXlib2FyZEV2ZW4KICAg
ICAgICAgfQogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdGV4dCBpbnNlcnRpb24gY29tbWFu
ZHMsIGRlZmF1bHQga2V5ZG93biBoYW5kbGVyIGlzIHRoZSByaWdodCB0aW1lIHRvIGV4ZWN1dGUg
dGhlIGNvbW1hbmRzLgogICAgICAgICAvLyBLZXlwcmVzcyAoQ2hhciBldmVudCkgaGFuZGxlciBp
cyB0aGUgbGF0ZXN0IG9wcG9ydHVuaXR5IHRvIGV4ZWN1dGUuCi0gICAgICAgIGlmICghaGF2ZVRl
eHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1F
dmVudDo6Q2hhcikKKyAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBs
YXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpDaGFyKQogICAg
ICAgICAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogICAgIH0KICAg
ICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IG51bGxwdHI7CkBAIC02
MDUwLDcgKzYwNTAsNyBAQCAtIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooS2V5Ym9hcmRFdmVu
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIAotLSAoQk9PTClfaGFuZGxlRWRpdGlu
Z0tleUV2ZW50OihLZXlib2FyZEV2ZW50ICopd2NFdmVudAorLSAoQk9PTClfaGFuZGxlRWRpdGlu
Z0tleUV2ZW50OihXZWJDb3JlOjpLZXlib2FyZEV2ZW50ICopd2NFdmVudAogewogICAgIC8vIFVz
ZSB0aGUgaXNFZGl0YWJsZSBzdGF0ZSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gcHJv
Y2VzcyB0YWIga2V5IGV2ZW50cy4KICAgICAvLyBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgaXNFZGl0
YWJsZSB3aWxsIGJlIE5PIHdoZW4gdGhpcyBXZWJWaWV3IGlzIGJlaW5nIHVzZWQKQEAgLTYwNjgs
NyArNjA2OCw3IEBAIC0gKEJPT0wpX2hhbmRsZUVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmQKICAg
ICAgICAgaWYgKCF3ZWJWaWV3LmlzRWRpdGFibGUgJiYgZXZlbnQuaXNUYWJLZXkpCiAgICAgICAg
ICAgICByZXR1cm4gTk87CiAKLSAgICAgICAgYm9vbCBpc0NoYXJFdmVudCA9IHBsYXRmb3JtRXZl
bnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXI7CisgICAgICAgIGJvb2wg
aXNDaGFyRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gV2ViQ29yZTo6UGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpDaGFyOwogCiAgICAgICAgIGlmICghaXNDaGFyRXZlbnQgJiYgW3dlYlZp
ZXcuX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXIgaGFuZGxlS2V5VGV4dENvbW1hbmRGb3JDdXJyZW50
RXZlbnRdKQogICAgICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTYxMjksNyArNjEyOSw3IEBAIC0g
KHZvaWQpX2xheW91dElmTmVlZGVkCiAtICh2b2lkKV93ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJ
Zk5lZWRlZFJlY3Vyc2l2ZQogewogICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9mcmFt
ZV07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOworICAgIGF1dG8qIGNv
cmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOwogICAgIGlmIChjb3JlRnJhbWUgJiYgY29yZUZyYW1l
LT52aWV3KCkpCiAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiB9CkBAIC02MzkyLDcgKzYzOTIsNyBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBbc2VsZiBfZXhlY3V0ZVNhdmVkS2V5cHJl
c3NDb21tYW5kc107CiAKICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOwot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKKyAgICBhdXRvKiBjb3JlRnJh
bWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKDAsIDApOwogICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252
ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgp
XTsKQEAgLTY0MTAsMTIgKzY0MTAsMTIgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgW3NlbGYgX2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHNdOwogCiAgICAg
V2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShmcmFtZSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CiAgICAgaWYg
KCFpc1RleHRJbnB1dChjb3JlRnJhbWUpIHx8IGlzSW5QYXNzd29yZEZpZWxkKGNvcmVGcmFtZSkp
IHsKICAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6
KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIH0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW2ZyYW1l
IF9jb252ZXJ0VG9ET01SYW5nZTpuc1JhbmdlXTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0VG9ET01SYW5nZTpuc1JhbmdlXTsKICAgICBpZiAoIXJh
bmdlKSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsK
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTY0NDYsNyArNjQ0Niw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAtIChCT09MKWhhc01hcmtlZFRleHQKIHsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIEJPT0wgcmVzdWx0ID0gY29yZUZyYW1lICYm
IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKTsKIAogICAgIGlmIChyZXN1bHQp
IHsKQEAgLTY0NzUsMTMgKzY0NzUsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IGZhbHNlOwogICAgIH0K
ICAgICAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisg
ICAgaWYgKGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCiAgICAgICAgIGNv
cmVGcmFtZS0+ZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKCk7CiB9CiAKICNpZiBQTEFURk9S
TShNQUMpCiAKLXN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmlu
ZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1bHQpCitzdGF0aWMg
dm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgcmVzdWx0KQogewogICAgIGludCBsZW5n
dGggPSBbW3N0cmluZyBzdHJpbmddIGxlbmd0aF07CiAKQEAgLTY0OTEsMTMgKzY0OTEsMTMgQEAg
c3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgICAgICBOU0RpY3Rp
b25hcnkgKmF0dHJzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRleDppIGxvbmdlc3RFZmZlY3Rp
dmVSYW5nZTomcmFuZ2UgaW5SYW5nZTpOU01ha2VSYW5nZShpLCBsZW5ndGggLSBpKV07CiAKICAg
ICAgICAgaWYgKE5TTnVtYmVyICpzdHlsZSA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxp
bmVTdHlsZUF0dHJpYnV0ZU5hbWVdKSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvciA9IENvbG9y
OjpibGFjazsKLSAgICAgICAgICAgIENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3IgY29tcG9zaXRp
b25VbmRlcmxpbmVDb2xvciA9IENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xvcjsK
KyAgICAgICAgICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yID0gV2ViQ29yZTo6Q29sb3I6OmJsYWNr
OworICAgICAgICAgICAgYXV0byBjb21wb3NpdGlvblVuZGVybGluZUNvbG9yID0gV2ViQ29yZTo6
Q29tcG9zaXRpb25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9yOwogICAgICAgICAgICAgaWYgKE5T
Q29sb3IgKmNvbG9yQXR0ciA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVDb2xvckF0
dHJpYnV0ZU5hbWVdKSB7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21OU0NvbG9y
KGNvbG9yQXR0cik7Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9
IENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OkdpdmVuQ29sb3I7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKGNvbG9yQXR0cik7CisgICAgICAgICAg
ICAgICAgY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9IFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lQ29sb3I6OkdpdmVuQ29sb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKHJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdl
KHJhbmdlKSwgY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciwgY29sb3IsIFtzdHlsZSBpbnRWYWx1
ZV0gPiAxKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdlYkNvcmU6OkNvbXBvc2l0aW9u
VW5kZXJsaW5lKHJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJhbmdlKSwgY29tcG9zaXRpb25V
bmRlcmxpbmVDb2xvciwgY29sb3IsIFtzdHlsZSBpbnRWYWx1ZV0gPiAxKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7CkBAIC02NTI3LDE0
ICs2NTI3LDE0IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFbc2VsZiBfaXNFZGl0YWJsZV0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKKyAgICBWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CiAgICAgTlNTdHJpbmcg
KnRleHQ7CiAgICAgTlNSYW5nZSByZXBsYWNlbWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07
CiAKQEAgLTY1NTIsNyArNjU1Miw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICBleHRyYWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIHRleHQgPSBzdHJpbmc7Ci0gICAgICAgIHVuZGVybGluZXMuYXBw
ZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIFt0ZXh0IGxlbmd0aF0sIENvbXBvc2l0aW9uVW5k
ZXJsaW5lQ29sb3I6OlRleHRDb2xvciwgQ29sb3I6OmJsYWNrLCBmYWxzZSkpOworICAgICAgICB1
bmRlcmxpbmVzLmFwcGVuZChXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZSgwLCBbdGV4dCBs
ZW5ndGhdLCBXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZUNvbG9yOjpUZXh0Q29sb3IsIFdl
YkNvcmU6OkNvbG9yOjpibGFjaywgZmFsc2UpKTsKICAgICB9CiAjZWxzZQogICAgIHRleHQgPSBz
dHJpbmc7CkBAIC02NTc2LDE1ICs2NTc2LDE1IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBwYXJhbWV0ZXJzLT5jb25z
dW1lZEJ5SU0gPSBmYWxzZTsKIAotICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVy
cyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKKyAgICBhdXRvKiBldmVudCA9IHBhcmFtZXRlcnMg
PyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7CiAgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBh
cmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmRzOwogCiAgICAgLy8gQXMg
aW4gaW5zZXJ0VGV4dDosIHdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsIGNvbWVzIGZyb20gYW4gaW5w
dXQgbWV0aG9kIGlmIHRoZXJlIGlzIG1hcmtlZCB0ZXh0LgotICAgIFJlZlB0cjxGcmFtZT4gY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgYm9vbCBpc0Zyb21JbnB1dE1l
dGhvZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCk7
CiAKICAgICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNvbW1hbmQgJiYgIWlzRnJvbUlucHV0TWV0
aG9kKQotICAgICAgICBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0Nv
bW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAgICAgIGV2ZW50LT5r
ZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5kKFdlYkNvcmU6OktleXByZXNzQ29tbWFuZChOU1N0cmlu
Z0Zyb21TZWxlY3RvcihzZWxlY3RvcikpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgb25seSBkaXJlY3QgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRo
ZSBwYXJhbWV0ZXJzIGJ5IHNldHRpbmcgdG8gMC4KICAgICAgICAgX3ByaXZhdGUtPmludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwpAQCAtNjU5NSw3ICs2NTk1LDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIGlmIChbW3dlYlZpZXcgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6
c2VsZWN0b3JdKQogICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVD
b21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgICAgICAgICBXZWJDb3JlOjpFZGl0b3I6
OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07
CiAgICAgICAgICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKQogICAgICAgICAgICAgICAg
IGV2ZW50V2FzSGFuZGxlZCA9IGNvbW1hbmQuZXhlY3V0ZShldmVudCk7CiAgICAgICAgICAgICBl
bHNlIHsKQEAgLTY2MzksNyArNjYzOSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIGlmIChwYXJhbWV0ZXJzKQogICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1l
ZEJ5SU0gPSBmYWxzZTsKIAotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CiAgICAgTlNTdHJpbmcgKnRleHQ7CiAgICAgTlNSYW5nZSByZXBsYWNl
bWVudFJhbmdlID0geyBOU05vdEZvdW5kLCAwIH07CiAgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhv
ZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCk7CkBA
IC02NjQ3LDcgKzY2NDcsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICBib29sIHJlZ2lzdGVyVW5kb0dyb3VwID0gZmFsc2U7CiAjZW5kaWYKIAotICAgIFZlY3Rv
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnM7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiBkaWN0YXRpb25BbHRlcm5h
dGl2ZUxvY2F0aW9uczsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKGlzQXR0cmlidXRlZFN0
cmluZykgewogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQpAQCAtNjY1Nyw3ICs2NjU3
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBb
W3NlbGYgX3dlYlZpZXddIF9nZXRXZWJDb3JlRGljdGF0aW9uQWx0ZXJuYXRpdmVzOmRpY3RhdGlv
bkFsdGVybmF0aXZlTG9jYXRpb25zIGZyb21UZXh0QWx0ZXJuYXRpdmVzOnRleHRBbHRlcm5hdGl2
ZXNdOwogI2VuZGlmCiAjaWYgVVNFKElOU0VSVElPTl9VTkRPX0dST1VQSU5HKQotICAgICAgICBy
ZWdpc3RlclVuZG9Hcm91cCA9IHNob3VsZFJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwKHN0cmlu
Zyk7CisgICAgICAgIHJlZ2lzdGVyVW5kb0dyb3VwID0gV2ViQ29yZTo6c2hvdWxkUmVnaXN0ZXJJ
bnNlcnRpb25VbmRvR3JvdXAoc3RyaW5nKTsKICNlbmRpZgogICAgICAgICAvLyBGSVhNRTogV2Ug
aWdub3JlIG1vc3QgYXR0cmlidXRlcyBmcm9tIHRoZSBzdHJpbmcsIHNvIGZvciBleGFtcGxlIGlu
c2VydGluZyBmcm9tIENoYXJhY3RlciBQYWxldHRlIGxvc2VzIGZvbnQgYW5kIGdseXBoIHZhcmlh
dGlvbiBkYXRhLgogICAgICAgICAvLyBJdCBkb2VzIG5vdCBsb29rIGxpa2UgYW55IGlucHV0IG1l
dGhvZHMgZXZlciB1c2UgaW5zZXJ0VGV4dDogd2l0aCBhdHRyaWJ1dGVzIG90aGVyIHRoYW4gTlNU
ZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZS4KQEAgLTY2NzIsNyArNjY3Miw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogI2VuZGlmCiAgICAgICAg
IHRleHQgPSBzdHJpbmc7CiAKLSAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBhcmFtZXRlcnMg
PyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7CisgICAgYXV0byogZXZlbnQgPSBwYXJhbWV0ZXJzID8g
cGFyYW1ldGVycy0+ZXZlbnQgOiAwOwogCiAgICAgLy8gaW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVk
IGZvciBzZXZlcmFsIHJlYXNvbnM6CiAgICAgLy8gLSBJZiBpdCdzIGZyb20gbm9ybWFsIGtleSBl
dmVudCBwcm9jZXNzaW5nIChpbmNsdWRpbmcga2V5IGJpbmRpbmdzKSwgd2UgbWF5IG5lZWQgdG8g
c2F2ZSB0aGUgYWN0aW9uIHRvIHBlcmZvcm0gaXQgbGF0ZXIuCkBAIC02NjgyLDcgKzY2ODIsNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAvLyB0aGVuIHdlIGFs
c28gZXhlY3V0ZSBpdCBpbW1lZGlhdGVseSwgYXMgdGhlcmUgd2lsbCBiZSBubyBvdGhlciBjaGFu
Y2UuCiAgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVy
cy0+c2hvdWxkU2F2ZUNvbW1hbmRzOwogICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFu
ZCAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsKLSAgICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFu
ZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKKyAgICAg
ICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoV2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NjcwMiw3ICs2NzAyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewogICAgICAg
ICBXZWJSYW5nZUlzUmVsYXRpdmVUbyByYW5nZUlzUmVsYXRpdmVUbyA9IG5lZWRUb1JlbW92ZVNv
ZnRTcGFjZSA/IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGggOiBXZWJSYW5nZUlzUmVs
YXRpdmVUbzo6RWRpdGFibGVSb290OwogICAgICAgICBpZiAoYXV0byBkb21SYW5nZSA9IFtbc2Vs
ZiBfZnJhbWVdIF9jb252ZXJ0VG9ET01SYW5nZTpyZXBsYWNlbWVudFJhbmdlIHJhbmdlSXNSZWxh
dGl2ZVRvOnJhbmdlSXNSZWxhdGl2ZVRvXSkgewotICAgICAgICAgICAgY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqZG9tUmFuZ2UsIFNFTF9ERUZB
VUxUX0FGRklOSVRZKSk7CisgICAgICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCpkb21SYW5nZSwgV2ViQ29yZTo6U0VM
X0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgICAgIHJlcGxhY2VzVGV4dCA9IHJlcGxhY2Vt
ZW50UmFuZ2UubGVuZ3RoOwogICAgICAgICB9CiAgICAgfQpAQCAtNjcxNywxMSArNjcxNywxMSBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgaWYgKCFkaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBldmVudEhh
bmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmluc2VydERpY3RhdGVkVGV4dChldmVudFRleHQs
IGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zLCBldmVudCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dChl
dmVudFRleHQsIGV2ZW50LCByZXBsYWNlc1RleHQgPyBUZXh0RXZlbnRJbnB1dEF1dG9jb21wbGV0
aW9uIDogVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CisgICAgICAgICAgICBldmVudEhhbmRsZWQg
PSBjb3JlRnJhbWUtPmVkaXRvcigpLmluc2VydFRleHQoZXZlbnRUZXh0LCBldmVudCwgcmVwbGFj
ZXNUZXh0ID8gV2ViQ29yZTo6VGV4dEV2ZW50SW5wdXRBdXRvY29tcGxldGlvbiA6IFdlYkNvcmU6
OlRleHRFdmVudElucHV0S2V5Ym9hcmQpOwogICAgICAgICAKICNpZiBVU0UoSU5TRVJUSU9OX1VO
RE9fR1JPVVBJTkcpCiAgICAgICAgIGlmIChyZWdpc3RlclVuZG9Hcm91cCkKLSAgICAgICAgICAg
IHJlZ2lzdGVySW5zZXJ0aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFtbc2VsZiBfd2Vi
Vmlld10gdW5kb01hbmFnZXJdKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OnJlZ2lzdGVySW5zZXJ0
aW9uVW5kb0dyb3VwaW5nV2l0aFVuZG9NYW5hZ2VyKFtbc2VsZiBfd2ViVmlld10gdW5kb01hbmFn
ZXJdKTsKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7
CkBAIC02NzQ0LDcgKzY3NDQsNyBAQCAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwog
ICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTY3NjcsNyArNjc2Nyw3
IEBAIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKIAogLSAodm9pZClfdXBkYXRlU2Vs
ZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02ODI0LDggKzY4MjQs
OCBAQCAtIChOU0FycmF5ICopc2VsZWN0aW9uVGV4dFJlY3RzCiAgICAgaWYgKCFbc2VsZiBfaGFz
U2VsZWN0aW9uXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IGxpc3Q7Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQor
ICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IGxpc3Q7CisgICAgaWYgKGF1dG8qIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCiAgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhsaXN0KTsKIAogICAgIHNpemVfdCBz
aXplID0gbGlzdC5zaXplKCk7CkBAIC02ODQ1LDkgKzY4NDUsOSBAQCAtIChOU1ZpZXcgKilzZWxl
Y3Rpb25WaWV3CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi1zdGF0aWMgQ0dJbWFnZVJl
ZiBpbWFnZUZyb21SZWN0KEZyYW1lKiBmcmFtZSwgQ0dSZWN0IHJlY3QpCitzdGF0aWMgQ0dJbWFn
ZVJlZiBpbWFnZUZyb21SZWN0KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgQ0dSZWN0IHJlY3QpCiB7
Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgYXV0byogcGFnZSA9IGZyYW1l
LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIFdBS1Zp
ZXcqIGRvY3VtZW50VmlldyA9IGZyYW1lLT52aWV3KCktPmRvY3VtZW50VmlldygpOwpAQCAtNjg1
OCw4ICs2ODU4LDggQEAgc3RhdGljIENHSW1hZ2VSZWYgaW1hZ2VGcm9tUmVjdChGcmFtZSogZgog
ICAgIAogICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3
OwogICAgIAotICAgIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBvbGRQYWludEJlaGF2aW9yID0g
ZnJhbWUtPnZpZXcoKS0+cGFpbnRCZWhhdmlvcigpOwotICAgIGZyYW1lLT52aWV3KCktPnNldFBh
aW50QmVoYXZpb3Iob2xkUGFpbnRCZWhhdmlvciB8IFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21w
b3NpdGluZ0xheWVycyB8IFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGluZyk7CisgICAgT3B0aW9u
U2V0PFdlYkNvcmU6OlBhaW50QmVoYXZpb3I+IG9sZFBhaW50QmVoYXZpb3IgPSBmcmFtZS0+dmll
dygpLT5wYWludEJlaGF2aW9yKCk7CisgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhhdmlv
cihvbGRQYWludEJlaGF2aW9yIHwgV2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBv
c2l0aW5nTGF5ZXJzIHwgV2ViQ29yZTo6UGFpbnRCZWhhdmlvcjo6U25hcHNob3R0aW5nKTsKIAog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTY4ODAsNyArNjg4MCw3
IEBAIHN0YXRpYyBDR0ltYWdlUmVmIGltYWdlRnJvbVJlY3QoRnJhbWUqIGYKICAgICBzaXplX3Qg
Yml0c1BlckNvbXBvbmVudCA9IDg7CiAgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDQgKiBiaXRz
UGVyQ29tcG9uZW50OwogICAgIHNpemVfdCBieXRlc1BlclJvdyA9ICgoYml0c1BlclBpeGVsICsg
NykgLyA4KSAqIHdpZHRoOwotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShOVUxMLCB3aWR0aCwgaGVpZ2h0LCBiaXRzUGVy
Q29tcG9uZW50LCBieXRlc1BlclJvdywgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKE5VTEwsIHdpZHRoLCBoZWlnaHQsIGJp
dHNQZXJDb21wb25lbnQsIGJ5dGVzUGVyUm93LCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKICAgICBpZiAoIWNvbnRleHQpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC02OTExLDEzICs2OTExLDEzIEBAIHN0YXRpYyBD
R0ltYWdlUmVmIGltYWdlRnJvbVJlY3QoRnJhbWUqIGYKICAgICByZXR1cm4gbmlsOwogfQogCi1z
dGF0aWMgQ0dJbWFnZVJlZiBzZWxlY3Rpb25JbWFnZShGcmFtZSogZnJhbWUsIGJvb2wgZm9yY2VC
bGFja1RleHQpCitzdGF0aWMgQ0dJbWFnZVJlZiBzZWxlY3Rpb25JbWFnZShXZWJDb3JlOjpGcmFt
ZSogZnJhbWUsIGJvb2wgZm9yY2VCbGFja1RleHQpCiB7CiAgICAgQVNTRVJUKCFXZWJUaHJlYWRJ
c0VuYWJsZWQoKSB8fCBXZWJUaHJlYWRJc0xvY2tlZCgpKTsKLSAgICBmcmFtZS0+dmlldygpLT5z
ZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OlNlbGVjdGlvbk9ubHkgfCAoZm9yY2VCbGFj
a1RleHQgPyBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4oUGFpbnRCZWhhdmlvcjo6Rm9yY2VCbGFj
a1RleHQpIDogT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+KCkpKTsKKyAgICBmcmFtZS0+dmlldygp
LT5zZXRQYWludEJlaGF2aW9yKFdlYkNvcmU6OlBhaW50QmVoYXZpb3I6OlNlbGVjdGlvbk9ubHkg
fCAoZm9yY2VCbGFja1RleHQgPyBPcHRpb25TZXQ8V2ViQ29yZTo6UGFpbnRCZWhhdmlvcj4oV2Vi
Q29yZTo6UGFpbnRCZWhhdmlvcjo6Rm9yY2VCbGFja1RleHQpIDogT3B0aW9uU2V0PFdlYkNvcmU6
OlBhaW50QmVoYXZpb3I+KCkpKTsKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7CiAgICAgQ0dJbWFnZVJlZiByZXN1bHQgPSBpbWFnZUZyb21SZWN0KGZyYW1lLCBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwotICAgIGZyYW1lLT52aWV3KCktPnNldFBh
aW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6Tm9ybWFsKTsKKyAgICBmcmFtZS0+dmlldygpLT5z
ZXRQYWludEJlaGF2aW9yKFdlYkNvcmU6OlBhaW50QmVoYXZpb3I6Ok5vcm1hbCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtNjkzMiwxNiArNjkzMiwxNiBAQCAtIChDR0ltYWdlUmVmKXNl
bGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrCiAgICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RlZENvcmVGcmFtZSgqY29yZUZyYW1lKTsKKyAgICBSZWY8V2ViQ29yZTo6RnJhbWU+
IHByb3RlY3RlZENvcmVGcmFtZSgqY29yZUZyYW1lKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgcmV0dXJuIHNlbGVjdGlvbkltYWdlKGNvcmVGcmFtZSwgZm9yY2VCbGFja1RleHQp
OwogI2Vsc2UKLSAgICBUZXh0SW5kaWNhdG9yRGF0YSB0ZXh0SW5kaWNhdG9yOworICAgIFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JEYXRhIHRleHRJbmRpY2F0b3I7CiAgICAgcmV0dXJuIGNyZWF0ZURy
YWdJbWFnZUZvclNlbGVjdGlvbigqY29yZUZyYW1lLCB0ZXh0SW5kaWNhdG9yLCBmb3JjZUJsYWNr
VGV4dCkuYXV0b3JlbGVhc2UoKTsKICNlbmRpZgogfQpAQCAtNjk3NCwxNCArNjk3NCwxNCBAQCAt
ICh2b2lkKXdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlCiAKIC0gKHZvaWQpc2VsZWN0
QWxsCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
YXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoY29yZUZyYW1l
KQogICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdEFsbCgpOwogfQogCiAtICh2
b2lkKWRlc2VsZWN0QWxsCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBp
ZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuY2xlYXIoKTsKQEAgLTcwMTMsOCArNzAxMyw4IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KV9hdHRyaWJ1dGVkU3RyaW4KIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRyaWJ1
dGVkU3RyaW5nRnJvbTooRE9NTm9kZSopc3RhcnRDb250YWluZXIgb2Zmc2V0OihpbnQpc3RhcnRP
ZmZzZXQgdG86KERPTU5vZGUqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQKIHsK
ICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZCgKLSAgICAgICAg
UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSwKLSAgICAgICAgUG9zaXRpb24geyBjb3JlKGVuZENv
bnRhaW5lciksIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB9
KTsKKyAgICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3Rh
cnRPZmZzZXQsIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSwK
KyAgICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3JlKGVuZENvbnRhaW5lciksIGVuZE9mZnNl
dCwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB9KTsKIH0KIAog
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwpAQCAtNzAyMiw4ICs3MDIy
LDggQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwogICAgIERPTURv
Y3VtZW50ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKICAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmlu
Z0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXTsKICAgICBpZiAoIWF0dHJp
YnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9IGNvcmUoZG9j
dW1lbnQpOwotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAs
IGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jb3VudENoaWxkTm9kZXMoKSkpOworICAgICAg
ICBhdXRvKiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKKyAgICAgICAgYXR0cmlidXRl
ZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdl
OjpjcmVhdGUoKmNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNv
cmVEb2N1bWVudC0+Y291bnRDaGlsZE5vZGVzKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGF0dHJp
YnV0ZWRTdHJpbmc7CiB9CkBAIC03MDMyLDkgKzcwMzIsOSBAQCAtIChOU0F0dHJpYnV0ZWRTdHJp
bmcgKilzZWxlY3RlZEF0dHJpYnV0CiB7CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1
dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdXTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgICAgIGF1dG8qIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFu
Z2UpOwogICAgICAgICAgICAgZWxzZQpAQCAtNzA3MiwxNyArNzA3MiwxNyBAQCAtIChOU0RpY3Rp
b25hcnkgKillbGVtZW50QXRQb2ludDooTlNQb2luCiAKIC0gKE5TRGljdGlvbmFyeSAqKWVsZW1l
bnRBdFBvaW50OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93Q29udGVudDooQk9PTClhbGxvdwog
ewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8q
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlw
ZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFj
dGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50Ci0gICAgICAgIHwg
KGFsbG93ID8gMCA6IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRl
bnQpOwotICAgIHJldHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhI
aXRUZXN0UmVzdWx0OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQoSW50UG9pbnQocG9pbnQpLCBoaXRUeXBlKV0gYXV0b3JlbGVhc2VdOworICAgIFdlYkNvcmU6
OkhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IFdlYkNvcmU6Okhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IFdlYkNvcmU6OkhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUg
fCBXZWJDb3JlOjpIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudAorICAgICAg
ICB8IChhbGxvdyA/IDAgOiBXZWJDb3JlOjpIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdl
bnRTaGFkb3dDb250ZW50KTsKKyAgICByZXR1cm4gW1tbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxs
b2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmhpdFRl
c3RSZXN1bHRBdFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgaGl0VHlwZSldIGF1dG9y
ZWxlYXNlXTsKIH0KIAogLSAoTlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cmlu
ZyAqKXN0cmluZyBpbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIG9wdGlvbnM6KFdlYkZpbmRP
cHRpb25zKW9wdGlvbnMgbGltaXQ6KE5TVUludGVnZXIpbGltaXQgbWFya01hdGNoZXM6KEJPT0wp
bWFya01hdGNoZXMKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNzA5MSw3ICs3MDkxLDcgQEAgLSAo
TlNVSW50ZWdlciljb3VudE1hdGNoZXNGb3JUZXh0OihOU1N0cgogCiAtICh2b2lkKXNldE1hcmtl
ZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKIHsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47
CiAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKG5ld1ZhbHVlKTsKQEAgLTcwOTksMzEgKzcwOTksMzEgQEAgLSAodm9pZClzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodAogCiAtIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
KyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIHJldHVybiBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCk7CiB9CiAKIC0gKHZvaWQpdW5tYXJrQWxsVGV4dE1hdGNoZXMKIHsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1
cm47Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAg
IGF1dG8qIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+bWFya2VycygpLnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgZG9jdW1lbnQtPm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogfQogCiAt
IChOU0FycmF5ICopcmVjdHNGb3JUZXh0TWF0Y2hlcwogewotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBh
cnJheV07Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwor
ICAgIGF1dG8qIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBWZWN0b3I8Rmxv
YXRSZWN0PiByZWN0cyA9IGRvY3VtZW50LT5tYXJrZXJzKCkucmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4gcmVjdHMgPSBkb2N1bWVudC0+bWFya2VycygpLnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJz
KFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogICAgIHVuc2lnbmVkIGNvdW50
ID0gcmVjdHMuc2l6ZSgpOwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOwogICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQpAQCAtNzEzNSw3ICs3MTM1LDcgQEAgLSAoQk9P
TClfZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbwogewogICAgIGlmICghW3N0cmluZyBs
ZW5ndGhdKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKICAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCkuZmluZFN0cmlu
ZyhzdHJpbmcsIGNvcmVPcHRpb25zKG9wdGlvbnMpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gMjUwNTIyKQorKysgU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw4ICs3Miw2IEBAIEBpbnRlcmZhY2UgV2ViQW5pbWF0aW9uQ29udHJvbGxlciA6
IE5TT2IKIEBpbXBsZW1lbnRhdGlvbiBXZWJBbmltYXRpb25Db250cm9sbGVyCiBAZW5kCiAKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBAaW1wbGVtZW50YXRpb24gV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlcgogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldyByZWNvZ25pemVyOihOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
ICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcgpAQCAtMTA2LDcgKzEwNCw3IEBAIC0gKHZvaWQp
d2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkSGEKIHsKICAgICBbX2N1cnJlbnRRTFByZXZp
ZXdNZW51SXRlbSBjbG9zZV07CiAgICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGVd
OwotICAgIFtfd2ViVmlldyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5k
aWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpOb25lXTsKKyAgICBbX3dlYlZpZXcgX2Ns
ZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb246V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRv
d0Rpc21pc3NhbEFuaW1hdGlvbjo6Tm9uZV07CiB9CiAKIC0gKE5TSW1tZWRpYXRlQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyCkBAIC0xMjEsNyArMTE5
LDcgQEAgLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uCiAgICAgW19pbW1lZGlhdGVBY3Rp
b25SZWNvZ25pemVyIHNldEVuYWJsZWQ6WUVTXTsKIAogICAgIFtzZWxmIF9jbGVhckltbWVkaWF0
ZUFjdGlvblN0YXRlXTsKLSAgICBbX3dlYlZpZXcgX2NsZWFyVGV4dEluZGljYXRvcldpdGhBbmlt
YXRpb246VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbjo6RmFkZU91dF07Cisg
ICAgW193ZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uOldlYkNvcmU6OlRl
eHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZhZGVPdXRdOwogfQogCiAtICh2
b2lkKV9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlCkBAIC0xNDUsMTQgKzE0MywxNCBAQCAtICh2
b2lkKV9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlCiAKIC0gKHZvaWQpcGVyZm9ybUhpdFRlc3RB
dFBvaW50OihOU1BvaW50KXZpZXdQb2ludAogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtfd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIFdlYkNvcmU6OkZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtfd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBfaGl0VGVzdFJlc3VsdCA9IGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQodmll
d1BvaW50KSwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2
ZSB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQgfCBIaXRU
ZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCk7Ci0gICAgY29yZUZyYW1lLT5tYWlu
RnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVB
Y3Rpb25TdGFnZTo6UGVyZm9ybWVkSGl0VGVzdCk7CisgICAgX2hpdFRlc3RSZXN1bHQgPSBjb3Jl
RnJhbWUtPmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KFdlYkNvcmU6OkludFBv
aW50KHZpZXdQb2ludCksIFdlYkNvcmU6OkhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IFdlYkNv
cmU6OkhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBXZWJDb3JlOjpIaXRUZXN0UmVxdWVzdDo6RGlz
YWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50IHwgV2ViQ29yZTo6SGl0VGVzdFJlcXVlc3Q6OkFs
bG93Q2hpbGRGcmFtZUNvbnRlbnQpOworICAgIGNvcmVGcmFtZS0+bWFpbkZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoV2ViQ29yZTo6SW1tZWRpYXRlQWN0aW9u
U3RhZ2U6OlBlcmZvcm1lZEhpdFRlc3QpOwogCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBf
aGl0VGVzdFJlc3VsdC50YXJnZXRFbGVtZW50KCkpCisgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBf
aGl0VGVzdFJlc3VsdC50YXJnZXRFbGVtZW50KCkpCiAgICAgICAgIF9jb250ZW50UHJldmVudHNE
ZWZhdWx0ID0gZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCk7CiB9CiAKQEAg
LTIwNiw4ICsyMDQsOCBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRVcGRh
CiAgICAgaWYgKGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJl
Y29nbml6ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
W193ZWJWaWV3IF9tYWluQ29yZUZyYW1lXSkKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9u
VXBkYXRlZCk7CisgICAgaWYgKFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBbX3dlYlZpZXcg
X21haW5Db3JlRnJhbWVdKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldElt
bWVkaWF0ZUFjdGlvblN0YWdlKFdlYkNvcmU6OkltbWVkaWF0ZUFjdGlvblN0YWdlOjpBY3Rpb25V
cGRhdGVkKTsKIAogICAgIGlmIChfY29udGVudFByZXZlbnRzRGVmYXVsdCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjIwLDE3ICsyMTgsMTcgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25p
emVyRGlkQ2FuYwogICAgIGlmIChpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyICE9IF9pbW1lZGlh
dGVBY3Rpb25SZWNvZ25pemVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IFtfd2ViVmlldyBfbWFpbkNvcmVGcmFtZV0pIHsKLSAgICAgICAgSW1tZWRpYXRl
QWN0aW9uU3RhZ2UgbGFzdFN0YWdlID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5pbW1lZGlh
dGVBY3Rpb25TdGFnZSgpOwotICAgICAgICBpZiAobGFzdFN0YWdlID09IEltbWVkaWF0ZUFjdGlv
blN0YWdlOjpBY3Rpb25VcGRhdGVkKQotICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9u
Q2FuY2VsbGVkQWZ0ZXJVcGRhdGUpOworICAgIGlmIChXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1l
ID0gW193ZWJWaWV3IF9tYWluQ29yZUZyYW1lXSkgeworICAgICAgICBXZWJDb3JlOjpJbW1lZGlh
dGVBY3Rpb25TdGFnZSBsYXN0U3RhZ2UgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmltbWVk
aWF0ZUFjdGlvblN0YWdlKCk7CisgICAgICAgIGlmIChsYXN0U3RhZ2UgPT0gV2ViQ29yZTo6SW1t
ZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlvblVwZGF0ZWQpCisgICAgICAgICAgICBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKFdlYkNvcmU6OkltbWVkaWF0
ZUFjdGlvblN0YWdlOjpBY3Rpb25DYW5jZWxsZWRBZnRlclVwZGF0ZSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9u
U3RhZ2UoSW1tZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlvbkNhbmNlbGxlZFdpdGhvdXRVcGRhdGUp
OworICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rp
b25TdGFnZShXZWJDb3JlOjpJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9uQ2FuY2VsbGVkV2l0
aG91dFVwZGF0ZSk7CiAgICAgfQogCiAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yQW5p
bWF0aW9uUHJvZ3Jlc3M6MF07CiAgICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGVd
OwotICAgIFtfd2ViVmlldyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5k
aWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpOb25lXTsKKyAgICBbX3dlYlZpZXcgX2Ns
ZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb246V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRv
d0Rpc21pc3NhbEFuaW1hdGlvbjo6Tm9uZV07CiAgICAgW193ZWJWaWV3IF9zZXRNYWludGFpbnNJ
bmFjdGl2ZVNlbGVjdGlvbjpOT107CiB9CiAKQEAgLTIzOSw4ICsyMzcsOCBAQCAtICh2b2lkKWlt
bWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDb21wCiAgICAgaWYgKGltbWVkaWF0ZUFjdGlvblJl
Y29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gW193ZWJWaWV3IF9tYWluQ29yZUZyYW1lXSkK
LSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFn
ZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9uQ29tcGxldGVkKTsKKyAgICBpZiAoV2ViQ29y
ZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFtfd2ViVmlldyBfbWFpbkNvcmVGcmFtZV0pCisgICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoV2ViQ29y
ZTo6SW1tZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlvbkNvbXBsZXRlZCk7CiAKICAgICBbX3dlYlZp
ZXcgX3NldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzczoxXTsKICAgICBbX3dlYlZpZXcg
X3NldE1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uOk5PXTsKQEAgLTI2OSwxMCArMjY3LDEwIEBA
IC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2wKICAgICAgICAgaWYgKFdU
Rjo6cHJvdG9jb2xJc0luSFRUUEZhbWlseShhYnNvbHV0ZVVSTFN0cmluZykpIHsKICAgICAgICAg
ICAgIF90eXBlID0gV2ViSW1tZWRpYXRlQWN0aW9uTGlua1ByZXZpZXc7CiAKLSAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3Vs
dC5VUkxFbGVtZW50KCkpOwotICAgICAgICAgICAgYXV0byBpbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmxpbmtSYW5nZSwgVGV4dEluZGljYXRvck9wdGlvblVzZUJv
dW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMsIFRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOworICAgICAgICAgICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiBsaW5rUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoKl9oaXRUZXN0UmVzdWx0
LlVSTEVsZW1lbnQoKSk7CisgICAgICAgICAgICBhdXRvIGluZGljYXRvciA9IFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbGlua1JhbmdlLCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJh
bmdlcywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJ
bik7CiAgICAgICAgICAgICBpZiAoaW5kaWNhdG9yKQotICAgICAgICAgICAgICAgIFtfd2ViVmll
dyBfc2V0VGV4dEluZGljYXRvcjoqaW5kaWNhdG9yIHdpdGhMaWZldGltZTpUZXh0SW5kaWNhdG9y
V2luZG93TGlmZXRpbWU6OlBlcm1hbmVudF07CisgICAgICAgICAgICAgICAgW193ZWJWaWV3IF9z
ZXRUZXh0SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6OlRleHRJbmRp
Y2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKIAogICAgICAgICAgICAgUUxQcmV2aWV3
TWVudUl0ZW0gKml0ZW0gPSBbTlNNZW51SXRlbSBzdGFuZGFyZFF1aWNrTG9va01lbnVJdGVtXTsK
ICAgICAgICAgICAgIGl0ZW0ucHJldmlld1N0eWxlID0gUUxQcmV2aWV3U3R5bGVQb3BvdmVyOwpA
QCAtMjgyLDcgKzI4MCw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRy
b2wKICAgICAgICAgfQogICAgIH0KIAotICAgIE5vZGUqIG5vZGUgPSBfaGl0VGVzdFJlc3VsdC5p
bm5lck5vZGUoKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBub2RlID0gX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb2RlKCk7CiAgICAgaWYgKChub2RlICYmIG5vZGUtPmlzVGV4dE5vZGUoKSkgfHwgX2hpdFRl
c3RSZXN1bHQuaXNPdmVyVGV4dEluc2lkZUZvcm1Db250cm9sRWxlbWVudCgpKSB7CiAgICAgICAg
IGlmIChhdXRvIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBbc2VsZiBfYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRhdGFEZXRlY3RlZFRleHRdKSB7CiAgICAgICAgICAgICBfdHlwZSA9IFdlYkltbWVkaWF0
ZUFjdGlvbkRhdGFEZXRlY3RlZEl0ZW07CkBAIC0zMjMsNyArMzIxLDcgQEAgLSAodm9pZClfdXBk
YXRlSW1tZWRpYXRlQWN0aW9uSXRlbQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IHBlcm1hbmVudGx5IGRpc2FibGUgdGhpcyBmb3IgaVR1bmVzLiByZGFy
Oi8vcHJvYmxlbS8xOTQ2MTM1OAotICAgIGlmIChNYWNBcHBsaWNhdGlvbjo6aXNJVHVuZXMoKSkg
eworICAgIGlmIChXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNJVHVuZXMoKSkgewogICAgICAg
ICBbc2VsZiBfY2FuY2VsSW1tZWRpYXRlQWN0aW9uXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM1OCwyNSArMzU2LDI1IEBAIC0gKE5TUmVjdEVkZ2UpbWVudUl0ZW06KE5TTWVudUl0ZW0g
KiltZW4KIC0gKHZvaWQpbWVudUl0ZW1EaWRDbG9zZTooTlNNZW51SXRlbSAqKW1lbnVJdGVtCiB7
CiAgICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGVdOwotICAgIFtfd2ViVmlldyBf
Y2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlz
c2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKKyAgICBbX3dlYlZpZXcgX2NsZWFyVGV4dEluZGljYXRv
cldpdGhBbmltYXRpb246V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1h
dGlvbjo6RmFkZU91dF07CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGVsZW1lbnRCb3VuZGluZ0JveElu
V2luZG93Q29vcmRpbmF0ZXNGcm9tTm9kZShOb2RlKiBub2RlKQorc3RhdGljIFdlYkNvcmU6Oklu
dFJlY3QgZWxlbWVudEJvdW5kaW5nQm94SW5XaW5kb3dDb29yZGluYXRlc0Zyb21Ob2RlKFdlYkNv
cmU6Ok5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwogICAg
IGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAg
IFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiB9CkBAIC0zODYsNyArMzg0LDcgQEAgLSAoTlNSZWN0
KW1lbnVJdGVtOihOU01lbnVJdGVtICopbWVudUl0ZQogICAgIGlmICghX3dlYlZpZXcpCiAgICAg
ICAgIHJldHVybiBOU1plcm9SZWN0OwogCi0gICAgTm9kZSogbm9kZSA9IF9oaXRUZXN0UmVzdWx0
LmlubmVyTm9kZSgpOworICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBfaGl0VGVzdFJlc3VsdC5p
bm5lck5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBOU1plcm9SZWN0Owog
CkBAIC0zOTksNyArMzk3LDcgQEAgLSAoTlNTaXplKW1lbnVJdGVtOihOU01lbnVJdGVtICopbWVu
dUl0ZQogICAgICAgICByZXR1cm4gTlNaZXJvU2l6ZTsKIAogICAgIE5TU2l6ZSBzY3JlZW5TaXpl
ID0gX3dlYlZpZXcud2luZG93LnNjcmVlbi5mcmFtZS5zaXplOwotICAgIEZsb2F0UmVjdCBsYXJn
ZXN0UmVjdCA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdChzY3JlZW5TaXpl
LndpZHRoIC8gc2NyZWVuU2l6ZS5oZWlnaHQsIF93ZWJWaWV3LmJvdW5kcyk7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IGxhcmdlc3RSZWN0ID0gV2ViQ29yZTo6bGFyZ2VzdFJlY3RXaXRoQXNwZWN0
UmF0aW9JbnNpZGVSZWN0KHNjcmVlblNpemUud2lkdGggLyBzY3JlZW5TaXplLmhlaWdodCwgX3dl
YlZpZXcuYm91bmRzKTsKICAgICByZXR1cm4gTlNNYWtlU2l6ZShsYXJnZXN0UmVjdC53aWR0aCgp
ICogMC43NSwgbGFyZ2VzdFJlY3QuaGVpZ2h0KCkgKiAwLjc1KTsKIH0KIApAQCAtNDEwLDggKzQw
OCw4IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2wKICAgICBpZiAo
IURhdGFEZXRlY3RvcnNMaWJyYXJ5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IGRldGVjdGVkRGF0YVJhbmdlOwotICAgIEZsb2F0UmVjdCBkZXRlY3RlZERhdGFC
b3VuZGluZ0JveDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGRldGVjdGVkRGF0YVJhbmdl
OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKICAgICBS
ZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0OwogCiAgICAgaWYgKFtbX3dl
YlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzph
Y3Rpb25Db250ZXh0Rm9ySGl0VGVzdFJlc3VsdDpyYW5nZTopXSkgewpAQCAtNDI2LDcgKzQyNCw3
IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2wKIAogICAgIC8vIElm
IHRoZSBjbGllbnQgZGlkbid0IGdpdmUgdXMgYW4gYWN0aW9uIGNvbnRleHQsIHRyeSB0byBzY2Fu
IGFyb3VuZCB0aGUgaGl0IHBvaW50LgogICAgIGlmICghYWN0aW9uQ29udGV4dCB8fCAhZGV0ZWN0
ZWREYXRhUmFuZ2UpCi0gICAgICAgIGFjdGlvbkNvbnRleHQgPSBEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChfaGl0VGVzdFJlc3VsdCwgZGV0ZWN0ZWREYXRhQm91
bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKKyAgICAgICAgYWN0aW9uQ29udGV4dCA9IFdl
YkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KF9oaXRU
ZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOwog
CiAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFkZXRlY3RlZERhdGFSYW5nZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKQEAgLTQzNiwxNCArNDM0LDE0IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlv
bkFuaW1hdGlvbkNvbnRyb2wKICAgICBpZiAoIVtbZ2V0RERBY3Rpb25zTWFuYWdlckNsYXNzKCkg
c2hhcmVkTWFuYWdlcl0gaGFzQWN0aW9uc0ZvclJlc3VsdDpbYWN0aW9uQ29udGV4dCBtYWluUmVz
dWx0XSBhY3Rpb25Db250ZXh0OmFjdGlvbkNvbnRleHQuZ2V0KCldKQogICAgICAgICByZXR1cm4g
bmlsOwogCi0gICAgYXV0byBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UoKmRldGVjdGVkRGF0YVJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVsdCwgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CisgICAgYXV0byBpbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmRldGVjdGVkRGF0
YVJhbmdlLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVsdCwgV2ViQ29yZTo6VGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKICAgICBfY3VycmVu
dEFjdGlvbkNvbnRleHQgPSBbYWN0aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBh
bHRNb2RlOllFUyBpbnRlcmFjdGlvblN0YXJ0ZWRIYW5kbGVyOl4oKSB7CiAgICAgfSBpbnRlcmFj
dGlvbkNoYW5nZWRIYW5kbGVyOl4oKSB7CiAgICAgICAgIGlmIChpbmRpY2F0b3IpCi0gICAgICAg
ICAgICBbX3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3I6KmluZGljYXRvciB3aXRoTGlmZXRpbWU6
VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lOjpQZXJtYW5lbnRdOworICAgICAgICAgICAgW193
ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6
OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKICAgICB9IGludGVyYWN0
aW9uU3RvcHBlZEhhbmRsZXI6XigpIHsKLSAgICAgICAgW193ZWJWaWV3IF9jbGVhclRleHRJbmRp
Y2F0b3JXaXRoQW5pbWF0aW9uOlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246
OkZhZGVPdXRdOworICAgICAgICBbX3dlYlZpZXcgX2NsZWFyVGV4dEluZGljYXRvcldpdGhBbmlt
YXRpb246V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbjo6RmFk
ZU91dF07CiAgICAgfV07CiAKICAgICBbX2N1cnJlbnRBY3Rpb25Db250ZXh0IHNldEhpZ2hsaWdo
dEZyYW1lOltfd2ViVmlldy53aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjpkZXRlY3RlZERhdGFC
b3VuZGluZ0JveF1dOwpAQCAtNDY4LDE3ICs0NjYsMTcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uQ29udHJvbAogICAgIFthY3Rpb25Db250ZXh0IHNldEFsdE1vZGU6WUVTXTsK
ICAgICBbYWN0aW9uQ29udGV4dCBzZXRJbW1lZGlhdGU6WUVTXTsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50
KCkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRl
bnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOwogICAgIGlmICghbGlua1JhbmdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGluZGljYXRvciA9IFRleHRJbmRpY2F0
b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbGlua1JhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVs
dCwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CisgICAgYXV0
byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmxp
bmtSYW5nZSwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkRlZmF1bHQsIFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOwogCiAgICAgX2N1cnJl
bnRBY3Rpb25Db250ZXh0ID0gW2FjdGlvbkNvbnRleHQgY29udGV4dEZvclZpZXc6X3dlYlZpZXcg
YWx0TW9kZTpZRVMgaW50ZXJhY3Rpb25TdGFydGVkSGFuZGxlcjpeKCkgewogICAgIH0gaW50ZXJh
Y3Rpb25DaGFuZ2VkSGFuZGxlcjpeKCkgewogICAgICAgICBpZiAoaW5kaWNhdG9yKQotICAgICAg
ICAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1l
OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKKyAgICAgICAgICAgIFtf
d2ViVmlldyBfc2V0VGV4dEluZGljYXRvcjoqaW5kaWNhdG9yIHdpdGhMaWZldGltZTpXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBlcm1hbmVudF07CiAgICAgfSBpbnRlcmFj
dGlvblN0b3BwZWRIYW5kbGVyOl4oKSB7Ci0gICAgICAgIFtfd2ViVmlldyBfY2xlYXJUZXh0SW5k
aWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9u
OjpGYWRlT3V0XTsKKyAgICAgICAgW193ZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5p
bWF0aW9uOldlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZh
ZGVPdXRdOwogICAgIH1dOwogCiAgICAgW19jdXJyZW50QWN0aW9uQ29udGV4dCBzZXRIaWdobGln
aHRGcmFtZTpbX3dlYlZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9TY3JlZW46ZWxlbWVudEJvdW5k
aW5nQm94SW5XaW5kb3dDb29yZGluYXRlc0Zyb21Ob2RlKF9oaXRUZXN0UmVzdWx0LlVSTEVsZW1l
bnQoKSldXTsKQEAgLTQ5MiwzNSArNDkwLDM1IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2wKIAogI3ByYWdtYSBtYXJrIFRleHQgYWN0aW9uCiAKLSsgKERpY3Rpb25h
cnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooUmFuZ2UmKXJhbmdlIGlu
RnJhbWU6KEZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9v
a3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0
b3JPcHRpb25zIHRyYW5zaXRpb246KFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
KXByZXNlbnRhdGlvblRyYW5zaXRpb24KKysgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8p
X2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJh
bWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5
ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
T3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KIHsKLSAgICBF
ZGl0b3ImIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKyAgICBXZWJDb3JlOjpFZGl0b3ImIGVk
aXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFy
eVBvcHVwSW5mbyh0cnVlKTsKIAogICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0IGEg
d2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwg
dGV4dCwKICAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBhdm9pZCB0aGF0LgotICAgIERpY3Rp
b25hcnlQb3B1cEluZm8gcG9wdXBJbmZvOworICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8gcG9wdXBJbmZvOwogICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZv
KGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7
CisgICAgY29uc3QgV2ViQ29yZTo6UmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250
YWluZXIoKS5yZW5kZXJTdHlsZSgpOwogICAgIGZsb2F0IHNjYWxlZERlc2NlbnQgPSBzdHlsZSA/
IHN0eWxlLT5mb250TWV0cmljcygpLmRlc2NlbnQoKSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2Fs
ZUZhY3RvcigpIDogMDsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFF1YWQ+IHF1YWRzOwogICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRz
KHF1YWRzKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJ
c0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVw
SW5mbzsKICAgICB9CiAKLSAgICBJbnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCiAgICAgcG9wdXBJbmZvLm9yaWdp
biA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWREZXNj
ZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxvb2t1cE9wdGlvbnM7CiAKLSAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZzo6Tm8pOwogICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJp
bmddXSk7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl07CiAKQEAgLTUzOCw3ICs1MzYsNyBAQCArIChEaWN0aW9uYXJ5UG9w
dXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJCiAKICAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
ZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKIAotICAgIGlmIChhdXRvIHRleHRJ
bmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRv
ck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQorICAgIGlmIChhdXRvIHRleHRJbmRp
Y2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGlu
ZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cElu
Zm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5z
ZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKQEAgLTU1MCwxOSArNTQ4LDE5
IEBAIC0gKGlkPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGwKICAgICBpZiAoIVBB
TDo6Z2V0TFVMb29rdXBEZWZpbml0aW9uTW9kdWxlQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIE5vZGUqIG5vZGUgPSBfaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBX
ZWJDb3JlOjpOb2RlKiBub2RlID0gX2hpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+
ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgYXV0byBbZGljdGlvbmFyeVJhbmdlLCBvcHRpb25zXSA9IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlQXRIaXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0KTsKKyAgICBhdXRvIFtkaWN0aW9u
YXJ5UmFuZ2UsIG9wdGlvbnNdID0gV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQoX2hpdFRlc3RSZXN1bHQpOwogICAgIGlmICghZGljdGlvbmFyeVJhbmdlKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBkaWN0aW9uYXJ5UG9wdXBJbmZvID0gW1dl
YkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZToq
ZGljdGlvbmFyeVJhbmdlIGluRnJhbWU6ZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6b3B0aW9ucyBp
bmRpY2F0b3JPcHRpb25zOlRleHRJbmRpY2F0b3JPcHRpb25EZWZhdWx0IHRyYW5zaXRpb246IFRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW5dOworICAgIGF1dG8gZGlj
dGlvbmFyeVBvcHVwSW5mbyA9IFtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KmRpY3Rpb25hcnlSYW5nZSBpbkZyYW1lOmZyYW1lIHdpdGhM
b29rdXBPcHRpb25zOm9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczpXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yT3B0aW9uRGVmYXVsdCB0cmFuc2l0aW9uOiBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluXTsKICAgICBpZiAoIWRpY3Rpb25hcnlQb3B1cEluZm8u
YXR0cmlidXRlZFN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsKIApJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUERGVmlldy5tbQkocmV2aXNpb24gMjUwNTIy
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw4ICs3MSw2IEBAIGV4dGVybiAiQyIgewogICAgIGJvb2wgQ0dDb250
ZXh0R2V0QWxsb3dzRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKENHQ29udGV4dFJlZiBjb250ZXh0
KTsKIH0KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIC8vIFJlZGVjbGFyYXRpb25zIG9m
IFBERktpdCBub3RpZmljYXRpb25zLiBXZSBjYW4ndCB1c2UgdGhlIEFQSSBzaW5jZSB3ZSB1c2Ug
YSB3ZWFrIGxpbmsgdG8gdGhlIGZyYW1ld29yay4KICNkZWZpbmUgX3dlYmtpdF9QREZWaWV3RGlz
cGxheU1vZGVDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmlld0Rpc3BsYXlNb2RlQ2hhbmdlZCIK
ICNkZWZpbmUgX3dlYmtpdF9QREZWaWV3U2NhbGVDaGFuZ2VkTm90aWZpY2F0aW9uIEAiUERGVmll
d1NjYWxlQ2hhbmdlZCIKQEAgLTY0OSw3ICs2NDcsNyBAQCAtIChCT09MKW1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQKIHN0YXRpYyBCT09MIGlzRnJhbWVJblJhbmdlKFdlYkZyYW1lICpm
cmFtZSwgRE9NUmFuZ2UgKnJhbmdlKQogewogICAgIEJPT0wgaW5SYW5nZSA9IE5POwotICAgIGZv
ciAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBjb3JlKGZyYW1lKS0+b3du
ZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5k
b2N1bWVudCgpLmZyYW1lKCktPm93bmVyRWxlbWVudCgpKSB7CisgICAgZm9yIChhdXRvKiBvd25l
ckVsZW1lbnQgPSBjb3JlKGZyYW1lKS0+b3duZXJFbGVtZW50KCk7IG93bmVyRWxlbWVudDsgb3du
ZXJFbGVtZW50ID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPm93bmVyRWxlbWVu
dCgpKSB7CiAgICAgICAgIGlmICgmb3duZXJFbGVtZW50LT5kb2N1bWVudCgpID09ICZjb3JlKHJh
bmdlKS0+b3duZXJEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBpblJhbmdlID0gW3JhbmdlIGlu
dGVyc2VjdHNOb2RlOmtpdChvd25lckVsZW1lbnQpXTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
OTI3LDI4ICs5MjUsMjggQEAgLSAoTlNSZWN0KXNlbGVjdGlvbkltYWdlUmVjdAogCiAtIChOU0Fy
cmF5ICopcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdHM6bGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCksIGxlZ2FjeVJURlBh
c3RlYm9hcmRUeXBlKCksIGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCksIG5pbF07CisgICAg
cmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6V2ViQ29yZTo6bGVnYWN5UlRGRFBhc3Rl
Ym9hcmRUeXBlKCksIFdlYkNvcmU6OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCksIFdlYkNvcmU6
OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCksIG5pbF07CiB9CiAKIC0gKHZvaWQpd3JpdGVT
ZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJk
OihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCiB7CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKICAgICAK
LSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgp
XSkgeworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQ29yZTo6bGVnYWN5UlRGRFBh
c3RlYm9hcmRUeXBlKCldKSB7CiAgICAgICAgIE5TRGF0YSAqUlRGRERhdGEgPSBbYXR0cmlidXRl
ZFN0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxl
bmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0
RGF0YTpSVEZERGF0YSBmb3JUeXBlOmxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVJU
RkRQYXN0ZWJvYXJkVHlwZSgpXTsKICAgICB9ICAgICAgICAKICAgICAKLSAgICBpZiAoW3R5cGVz
IGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldKSB7CisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpXZWJDb3JlOjpsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpXSkg
ewogICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0g
ICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5n
QXR0YWNobWVudENoYXJhY3RlcnMoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nID0gV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNo
bWVudENoYXJhY3RlcnMoYXR0cmlidXRlZFN0cmluZyk7CiAKICAgICAgICAgTlNEYXRhICpSVEZE
YXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRy
aWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKLSAgICAgICAg
W3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZEYXRhIGZvclR5cGU6bGVnYWN5UlRGUGFzdGVib2FyZFR5
cGUoKV07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOldlYkNv
cmU6OmxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCldOwogICAgIH0KICAgICAKLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldKQotICAgICAg
ICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W3NlbGYgc2VsZWN0ZWRTdHJpbmddIGZvclR5cGU6bGVn
YWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV07CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpXZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSkKKyAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0U3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSBmb3JUeXBlOldlYkNvcmU6Omxl
Z2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldOwogfQogCiAvLyBNQVJLOiBQREZWaWV3IERFTEVH
QVRFIE1FVEhPRFMKQEAgLTk2Miw3ICs5NjAsNyBAQCAtICh2b2lkKVBERlZpZXdXaWxsQ2xpY2tP
bkxpbms6KFBERlZpZXcgCiAgICAgTlNFdmVudCAqbnNFdmVudCA9IFt3aW5kb3cgY3VycmVudEV2
ZW50XTsKICAgICBjb25zdCBpbnQgbm9CdXR0b24gPSAtMjsKICAgICBpbnQgYnV0dG9uID0gbm9C
dXR0b247Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZl
bnQ+IGV2ZW50OwogICAgIHN3aXRjaCAoW25zRXZlbnQgdHlwZV0pIHsKICAgICBjYXNlIE5TRXZl
bnRUeXBlTGVmdE1vdXNlVXA6CiAgICAgICAgIGJ1dHRvbiA9IDA7CkBAIC05NzQsOSArOTcyLDkg
QEAgLSAodm9pZClQREZWaWV3V2lsbENsaWNrT25MaW5rOihQREZWaWV3IAogICAgICAgICBidXR0
b24gPSBbbnNFdmVudCBidXR0b25OdW1iZXJdOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5T
RXZlbnRUeXBlS2V5RG93bjogewotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGUgPSBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KG5zRXZlbnQp
OwotICAgICAgICBwZS5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6UmF3
S2V5RG93bik7Ci0gICAgICAgIGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBlLCBudWxs
cHRyKTsKKyAgICAgICAgYXV0byBwZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5Ojpj
cmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQobnNFdmVudCk7CisgICAgICAgIHBlLmRpc2FtYmln
dWF0ZUtleURvd25FdmVudChXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKTsKKyAg
ICAgICAgZXZlbnQgPSBXZWJDb3JlOjpLZXlib2FyZEV2ZW50OjpjcmVhdGUocGUsIG51bGxwdHIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTk4NCwxNCArOTgyLDE0
IEBAIC0gKHZvaWQpUERGVmlld1dpbGxDbGlja09uTGluazooUERGVmlldyAKICAgICB9CiAgICAg
aWYgKGJ1dHRvbiAhPSBub0J1dHRvbikgewogICAgICAgICAvLyBGSVhNRTogVXNlIGNyZWF0ZVBs
YXRmb3JtTW91c2VFdmVudCBpbnN0ZWFkLgotICAgICAgICBldmVudCA9IE1vdXNlRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6WWVzLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpZZXMsIEV2ZW50OjpJc0NvbXBvc2VkOjpZZXMsCi0gICAgICAgICAg
ICBNb25vdG9uaWNUaW1lOjpub3coKSwgbnVsbHB0ciwgW25zRXZlbnQgY2xpY2tDb3VudF0sIHsg
fSwgeyB9LCB7IH0sIG1vZGlmaWVyc0ZvckV2ZW50KG5zRXZlbnQpLAotICAgICAgICAgICAgYnV0
dG9uLCBbTlNFdmVudCBwcmVzc2VkTW91c2VCdXR0b25zXSwgbnVsbHB0ciwgV2ViQ29yZTo6Rm9y
Y2VBdENsaWNrLCAwLCBudWxscHRyLCBNb3VzZUV2ZW50OjpJc1NpbXVsYXRlZDo6WWVzKTsKKyAg
ICAgICAgZXZlbnQgPSBXZWJDb3JlOjpNb3VzZUV2ZW50OjpjcmVhdGUoV2ViQ29yZTo6ZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQsIFdlYkNvcmU6OkV2ZW50OjpDYW5CdWJibGU6OlllcywgV2ViQ29y
ZTo6RXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCBXZWJDb3JlOjpFdmVudDo6SXNDb21wb3NlZDo6
WWVzLAorICAgICAgICAgICAgTW9ub3RvbmljVGltZTo6bm93KCksIG51bGxwdHIsIFtuc0V2ZW50
IGNsaWNrQ291bnRdLCB7IH0sIHsgfSwgeyB9LCBXZWJDb3JlOjptb2RpZmllcnNGb3JFdmVudChu
c0V2ZW50KSwKKyAgICAgICAgICAgIGJ1dHRvbiwgW05TRXZlbnQgcHJlc3NlZE1vdXNlQnV0dG9u
c10sIG51bGxwdHIsIFdlYkNvcmU6OkZvcmNlQXRDbGljaywgMCwgbnVsbHB0ciwgV2ViQ29yZTo6
TW91c2VFdmVudDo6SXNTaW11bGF0ZWQ6Olllcyk7CiAgICAgfQogCiAgICAgLy8gQ2FsbCB0byB0
aGUgZnJhbWUgbG9hZGVyIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBvdXIgc2VjdXJpdHkgY2hlY2tz
IGFyZSBtYWRlLgotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW2RhdGFTb3VyY2Ugd2ViRnJhbWVd
KTsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QgeyAqZnJhbWUtPmRvY3Vt
ZW50KCksIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCB7IFVSTCB9LCB7IH0s
IExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIE5ldmVyU2VuZFJlZmVy
cmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xp
Y3k6OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywg
SW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUo
W2RhdGFTb3VyY2Ugd2ViRnJhbWVdKTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QgeyAqZnJhbWUtPmRvY3VtZW50KCksIGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLCB7IFVSTCB9LCB7IH0sIFdlYkNvcmU6OkxvY2tIaXN0b3J5OjpObywg
V2ViQ29yZTo6TG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIFdlYkNvcmU6Ok5ldmVyU2VuZFJlZmVy
cmVyLCBXZWJDb3JlOjpBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgV2ViQ29yZTo6
TmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgV2ViQ29yZTo6SW5pdGlhdGVkQnlNYWluRnJhbWU6
OlVua25vd24gfTsKICAgICBmcmFtZS0+bG9hZGVyKCkubG9hZEZyYW1lUmVxdWVzdChXVEZNb3Zl
KGZyYW1lTG9hZFJlcXVlc3QpLCBldmVudC5nZXQoKSwgbnVsbHB0cik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDI1MDUyMikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTUgKzQzLDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvcnVudGltZV9yb290Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBK
U0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogLy8gRklYTUU6IHRoZXNlIGVycm9yIHN0
cmluZ3Mgc2hvdWxkIGJlIHB1YmxpYyBmb3IgZnV0dXJlIHVzZSBieSBXZWJTY3JpcHRPYmplY3Qg
YW5kIGluIFdlYlNjcmlwdE9iamVjdC5oCiBOU1N0cmluZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9y
RG9tYWluID0gQCJXZWJTY3JpcHRFcnJvckRvbWFpbiI7CiBOU1N0cmluZyAqIGNvbnN0IFdlYlNj
cmlwdEVycm9yRGVzY3JpcHRpb25LZXkgPSBAIldlYlNjcmlwdEVycm9yRGVzY3JpcHRpb24iOwog
TlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRFcnJvckxpbmVOdW1iZXJLZXkgPSBAIldlYlNjcmlw
dEVycm9yTGluZU51bWJlciI7CiAKLUBpbnRlcmZhY2UgV2ViU2NyaXB0Q2FsbEZyYW1lIChXZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlSW50ZXJuYWwpCitAaW50ZXJmYWNlIFdlYlNjcmlwdENhbGxGcmFt
ZSAoV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUludGVybmFsRm9yRGVsZWdhdGUpCiAKIC0gKGlkKV9j
b252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKXZhbHVlOwogCkBAIC0xMDMsMTEg
KzEwMCwxMSBAQCAtIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWCiAgICAg
aWYgKHZhbHVlID09IFtnbG9iYWxPYmplY3QgX2ltcF0pCiAgICAgICAgIHJldHVybiBnbG9iYWxP
YmplY3Q7CiAKLSAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDEgPSBbZ2xvYmFsT2JqZWN0
IF9vcmlnaW5Sb290T2JqZWN0XTsKKyAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
MSA9IFtnbG9iYWxPYmplY3QgX29yaWdpblJvb3RPYmplY3RdOwogICAgIGlmICghcm9vdDEpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDIgPSBb
Z2xvYmFsT2JqZWN0IF9yb290T2JqZWN0XTsKKyAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0
KiByb290MiA9IFtnbG9iYWxPYmplY3QgX3Jvb3RPYmplY3RdOwogICAgIGlmICghcm9vdDIpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkocmV2aXNpb24gMjUwNTIyKQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTQgKzQyLDExIEBACiAjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENv
bnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJmYWNlIFdlYlNjcmlwdENhbGxGcmFt
ZSAoV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUludGVybmFsKQorQGludGVyZmFjZSBXZWJTY3JpcHRD
YWxsRnJhbWUgKFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbnRlcm5hbEZvckRlYnVnZ2VyKQogLSAo
V2ViU2NyaXB0Q2FsbEZyYW1lICopX2luaXRXaXRoR2xvYmFsT2JqZWN0OihXZWJTY3JpcHRPYmpl
Y3QgKilnbG9iYWxPYmogZnVuY3Rpb25OYW1lOihTdHJpbmcpZnVuY3Rpb25OYW1lIGV4Y2VwdGlv
blZhbHVlOihKU0M6OkpTVmFsdWUpZXhjZXB0aW9uVmFsdWU7CiBAZW5kCiAKLXN0YXRpYyBOU1N0
cmluZyAqdG9OU1N0cmluZyhTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIpCitzdGF0aWMg
TlNTdHJpbmcgKnRvTlNTdHJpbmcoSlNDOjpTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcgPSBzb3VyY2VQcm92aWRlci0+c291
cmNlKCkudG9TdHJpbmcoKTsKICAgICBpZiAoc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKQEAgLTY1
LDEzICs2MiwxMyBAQCBzdGF0aWMgTlNVUkwgKnRvTlNVUkwoY29uc3QgU3RyaW5nJiBzKQogICAg
IHJldHVybiBVUkwoeyB9LCBzKTsKIH0KIAotc3RhdGljIFdlYkZyYW1lICp0b1dlYkZyYW1lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitzdGF0aWMgV2ViRnJhbWUgKnRvV2ViRnJhbWUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEpTRE9NV2luZG93KiB3
aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGdsb2JhbE9iamVjdCk7CisgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkpTRE9NV2lu
ZG93Kj4oZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4ga2l0KHdpbmRvdy0+d3JhcHBlZCgpLmZy
YW1lKCkpOwogfQogCi1XZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK1dlYlNjcmlwdERlYnVnZ2VyOjpXZWJTY3JpcHREZWJ1
Z2dlcihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgOiBEZWJ1Z2dlcihn
bG9iYWxPYmplY3QtPnZtKCkpCiAgICAgLCBtX2NhbGxpbmdEZWxlZ2F0ZShmYWxzZSkKICAgICAs
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KQpAQCAtODIs
NyArNzksNyBAQCBXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlNHCiB9CiAK
IC8vIGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCi12b2lkIFdlYlNjcmlwdERlYnVnZ2Vy
Ojpzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiBleGVjLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJv
dmlkZXIsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNc2cpCit2b2lkIFdlYlNj
cmlwdERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U291
cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcm
IGVycm9yTXNnKQogewogICAgIGlmIChtX2NhbGxpbmdEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtOTMsNyArOTAsNyBAQCB2b2lkIFdlYlNjcmlwdERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQo
RXhlCiAgICAgTlNVUkwgKm5zVVJMID0gdG9OU1VSTChzb3VyY2VQcm92aWRlci0+dXJsKCkpOwog
ICAgIGludCBmaXJzdExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fbGlu
ZS5vbmVCYXNlZEludCgpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZSh2
bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpKTsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3dl
YkZyYW1lIHdlYlZpZXddOwogICAgIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUlt
cGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKQEAgLTEyMCw3ICsxMTcsNyBAQCB2b2lkIFdlYlNjcmlw
dERlYnVnZ2VyOjpzb3VyY2VQYXJzZWQoRXhlCiAgICAgbV9jYWxsaW5nRGVsZWdhdGUgPSBmYWxz
ZTsKIH0KIAotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6aGFuZGxlUGF1c2UoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRGVidWdnZXI6OlJlYXNvbkZvclBhdXNlIHJlYXNvbikKK3ZvaWQg
V2ViU2NyaXB0RGVidWdnZXI6OmhhbmRsZVBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRGVidWdnZXI6OlJlYXNvbkZvclBhdXNlIHJlYXNvbikKIHsKICAgICBpZiAobV9j
YWxsaW5nRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMiw4ICsxMjksOCBAQCB2b2lk
IFdlYlNjcmlwdERlYnVnZ2VyOjpoYW5kbGVQYXVzZShKU0dsCiAKICAgICBXZWJGcmFtZSAqd2Vi
RnJhbWUgPSB0b1dlYkZyYW1lKGdsb2JhbE9iamVjdCk7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9
IFt3ZWJGcmFtZSB3ZWJWaWV3XTsKLSAgICBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlv
blZhbHVlID0gY3VycmVudEV4Y2VwdGlvbigpOworICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
IGRlYnVnZ2VyQ2FsbEZyYW1lID0gY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCk7CisgICAgSlND
OjpKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gY3VycmVudEV4Y2VwdGlvbigpOwogICAgIFN0cmlu
ZyBmdW5jdGlvbk5hbWUgPSBkZWJ1Z2dlckNhbGxGcmFtZS5mdW5jdGlvbk5hbWUoKTsKICAgICBS
ZXRhaW5QdHI8V2ViU2NyaXB0Q2FsbEZyYW1lPiB3ZWJDYWxsRnJhbWUgPSBhZG9wdE5TKFtbV2Vi
U2NyaXB0Q2FsbEZyYW1lIGFsbG9jXSBfaW5pdFdpdGhHbG9iYWxPYmplY3Q6Y29yZSh3ZWJGcmFt
ZSktPnNjcmlwdCgpLndpbmRvd1NjcmlwdE9iamVjdCgpIGZ1bmN0aW9uTmFtZTpmdW5jdGlvbk5h
bWUgZXhjZXB0aW9uVmFsdWU6ZXhjZXB0aW9uVmFsdWVdKTsKIApJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1tCShyZXZpc2lvbiAy
NTA1MjIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxk
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMSArMjksMTggQEAKICNpbXBvcnQgPFdlYkNvcmUv
U2NyaXB0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KLQogI2ltcG9ydCA8
d3RmL1JlZlB0ci5oPgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogQGludGVyZmFjZSBX
ZWJTY3JpcHRXb3JsZFByaXZhdGUgOiBOU09iamVjdCB7CiBAcHVibGljCi0gICAgUmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4gd29ybGQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdyYXBwZXJXb3Js
ZD4gd29ybGQ7CiB9CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTY3JpcHRXb3JsZFByaXZh
dGUKIEBlbmQKIAotdHlwZWRlZiBIYXNoTWFwPERPTVdyYXBwZXJXb3JsZCosIFdlYlNjcmlwdFdv
cmxkKj4gV29ybGRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6RE9NV3JhcHBlcldvcmxk
KiwgV2ViU2NyaXB0V29ybGQqPiBXb3JsZE1hcDsKIHN0YXRpYyBXb3JsZE1hcCYgYWxsV29ybGRz
KCkKIHsKICAgICBzdGF0aWMgV29ybGRNYXAmIG1hcCA9ICpuZXcgV29ybGRNYXA7CkBAIC01Miw3
ICs0OSw3IEBAIHN0YXRpYyBXb3JsZE1hcCYgYWxsV29ybGRzKCkKIAogQGltcGxlbWVudGF0aW9u
IFdlYlNjcmlwdFdvcmxkCiAKLS0gKGlkKWluaXRXaXRoV29ybGQ6KFJlZjxET01XcmFwcGVyV29y
bGQ+JiYpd29ybGQKKy0gKGlkKWluaXRXaXRoV29ybGQ6KFJlZjxXZWJDb3JlOjpET01XcmFwcGVy
V29ybGQ+JiYpd29ybGQKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2Vs
ZikKQEAgLTY5LDcgKzY2LDcgQEAgLSAoaWQpaW5pdFdpdGhXb3JsZDooUmVmPERPTVdyYXBwZXJX
b3JsZAogCiAtIChpZClpbml0CiB7Ci0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoV29ybGQ6U2Ny
aXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKV07CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRo
V29ybGQ6V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoKV07CiB9CiAKIC0g
KHZvaWQpdW5yZWdpc3RlcldvcmxkCkBAIC04OSw3ICs4Niw3IEBAIC0gKHZvaWQpZGVhbGxvYwog
CiArIChXZWJTY3JpcHRXb3JsZCAqKXN0YW5kYXJkV29ybGQKIHsKLSAgICBzdGF0aWMgV2ViU2Ny
aXB0V29ybGQgKndvcmxkID0gW1tXZWJTY3JpcHRXb3JsZCBhbGxvY10gaW5pdFdpdGhXb3JsZDpt
YWluVGhyZWFkTm9ybWFsV29ybGQoKV07CisgICAgc3RhdGljIFdlYlNjcmlwdFdvcmxkICp3b3Js
ZCA9IFtbV2ViU2NyaXB0V29ybGQgYWxsb2NdIGluaXRXaXRoV29ybGQ6V2ViQ29yZTo6bWFpblRo
cmVhZE5vcm1hbFdvcmxkKCldOwogICAgIHJldHVybiB3b3JsZDsKIH0KIApAQCAtMTAwLDcgKzk3
LDcgQEAgKyAoV2ViU2NyaXB0V29ybGQgKil3b3JsZAogCiArIChXZWJTY3JpcHRXb3JsZCAqKXNj
cmlwdFdvcmxkRm9yR2xvYmFsQ29udGV4dDooSlNHbG9iYWxDb250ZXh0UmVmKWNvbnRleHQKIHsK
LSAgICByZXR1cm4gW3NlbGYgZmluZE9yQ3JlYXRlV29ybGQ6Y3VycmVudFdvcmxkKCp0b0pTKGNv
bnRleHQpKV07CisgICAgcmV0dXJuIFtzZWxmIGZpbmRPckNyZWF0ZVdvcmxkOldlYkNvcmU6OmN1
cnJlbnRXb3JsZCgqdG9KUyhjb250ZXh0KSldOwogfQogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKQEAgLTExNCwxNCArMTExLDE0IEBAICsgKFdlYlNjcmlwdFdvcmxkICopc2NyaXB0V29ybGRG
b3JKYXZhU2MKIAogQGltcGxlbWVudGF0aW9uIFdlYlNjcmlwdFdvcmxkIChXZWJJbnRlcm5hbCkK
IAotRE9NV3JhcHBlcldvcmxkKiBjb3JlKFdlYlNjcmlwdFdvcmxkICp3b3JsZCkKK1dlYkNvcmU6
OkRPTVdyYXBwZXJXb3JsZCogY29yZShXZWJTY3JpcHRXb3JsZCAqd29ybGQpCiB7CiAgICAgcmV0
dXJuIHdvcmxkID8gd29ybGQtPl9wcml2YXRlLT53b3JsZC5nZXQoKSA6IDA7CiB9CiAKLSsgKFdl
YlNjcmlwdFdvcmxkICopZmluZE9yQ3JlYXRlV29ybGQ6KERPTVdyYXBwZXJXb3JsZCYpd29ybGQK
KysgKFdlYlNjcmlwdFdvcmxkICopZmluZE9yQ3JlYXRlV29ybGQ6KFdlYkNvcmU6OkRPTVdyYXBw
ZXJXb3JsZCYpd29ybGQKIHsKLSAgICBpZiAoJndvcmxkID09ICZtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSkKKyAgICBpZiAoJndvcmxkID09ICZXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQo
KSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHN0YW5kYXJkV29ybGRdOwogCiAgICAgaWYgKFdlYlNj
cmlwdFdvcmxkICpleGlzdGluZ1dvcmxkID0gYWxsV29ybGRzKCkuZ2V0KCZ3b3JsZCkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAy
NTA1MjIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM3MCwxMCArMzcwLDYgQEAgLSAoQk9PTClfaGFzS2V5QXBwZWFyYW5j
ZTsKIAogI2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KICNkZWZpbmUgRk9SX0VBQ0hfUkVT
UE9OREVSX1NFTEVDVE9SKG1hY3JvKSBcCiBtYWNybyhhbGlnbkNlbnRlcikgXAogbWFjcm8oYWxp
Z25KdXN0aWZpZWQpIFwKQEAgLTU2OCwyMSArNTY0LDIxIEBAIC0gKGlkKWFzeW5jRm9yd2FyZGVy
OwogI2VuZGlmCiBAZW5kCiAKLUZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25z
IG9wdGlvbnMpCitXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlT3B0aW9ucyhXZWJGaW5kT3B0aW9u
cyBvcHRpb25zKQogewotICAgIEZpbmRPcHRpb25zIGZpbmRPcHRpb25zOworICAgIFdlYkNvcmU6
OkZpbmRPcHRpb25zIGZpbmRPcHRpb25zOwogICAgIGlmIChvcHRpb25zICYgV2ViRmluZE9wdGlv
bnNDYXNlSW5zZW5zaXRpdmUpCi0gICAgICAgIGZpbmRPcHRpb25zLmFkZChDYXNlSW5zZW5zaXRp
dmUpOworICAgICAgICBmaW5kT3B0aW9ucy5hZGQoV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlKTsK
ICAgICBpZiAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKQotICAgICAgICBm
aW5kT3B0aW9ucy5hZGQoQXRXb3JkU3RhcnRzKTsKKyAgICAgICAgZmluZE9wdGlvbnMuYWRkKFdl
YkNvcmU6OkF0V29yZFN0YXJ0cyk7CiAgICAgaWYgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1Ry
ZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0KQotICAgICAgICBmaW5kT3B0aW9ucy5hZGQoVHJl
YXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpOworICAgICAgICBmaW5kT3B0aW9ucy5hZGQoV2Vi
Q29yZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpOwogICAgIGlmIChvcHRpb25zICYg
V2ViRmluZE9wdGlvbnNCYWNrd2FyZHMpCi0gICAgICAgIGZpbmRPcHRpb25zLmFkZChCYWNrd2Fy
ZHMpOworICAgICAgICBmaW5kT3B0aW9ucy5hZGQoV2ViQ29yZTo6QmFja3dhcmRzKTsKICAgICBp
ZiAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCkKLSAgICAgICAgZmluZE9wdGlv
bnMuYWRkKFdyYXBBcm91bmQpOworICAgICAgICBmaW5kT3B0aW9ucy5hZGQoV2ViQ29yZTo6V3Jh
cEFyb3VuZCk7CiAgICAgaWYgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rp
b24pCi0gICAgICAgIGZpbmRPcHRpb25zLmFkZChTdGFydEluU2VsZWN0aW9uKTsKKyAgICAgICAg
ZmluZE9wdGlvbnMuYWRkKFdlYkNvcmU6OlN0YXJ0SW5TZWxlY3Rpb24pOwogICAgIHJldHVybiBm
aW5kT3B0aW9uczsKIH0KIApAQCAtNTkwLDI5ICs1ODYsMjkgQEAgT3B0aW9uU2V0PFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZT4gY29yZQogewogICAgIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRN
aWxlc3RvbmU+IGxheW91dE1pbGVzdG9uZTsKICAgICBpZiAobWlsZXN0b25lcyAmIFdlYkRpZEZp
cnN0TGF5b3V0KQotICAgICAgICBsYXlvdXRNaWxlc3RvbmUuYWRkKERpZEZpcnN0TGF5b3V0KTsK
KyAgICAgICAgbGF5b3V0TWlsZXN0b25lLmFkZChXZWJDb3JlOjpEaWRGaXJzdExheW91dCk7CiAg
ICAgaWYgKG1pbGVzdG9uZXMgJiBXZWJEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCi0g
ICAgICAgIGxheW91dE1pbGVzdG9uZS5hZGQoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
KTsKKyAgICAgICAgbGF5b3V0TWlsZXN0b25lLmFkZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQpOwogICAgIGlmIChtaWxlc3RvbmVzICYgV2ViRGlkSGl0UmVsZXZhbnRS
ZXBhaW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCkKLSAgICAgICAgbGF5b3V0TWlsZXN0b25lLmFk
ZChEaWRIaXRSZWxldmFudFJlcGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkKTsKKyAgICAgICAg
bGF5b3V0TWlsZXN0b25lLmFkZChXZWJDb3JlOjpEaWRIaXRSZWxldmFudFJlcGFpbnRlZE9iamVj
dHNBcmVhVGhyZXNob2xkKTsKICAgICByZXR1cm4gbGF5b3V0TWlsZXN0b25lOwogfQogCiBXZWJM
YXlvdXRNaWxlc3RvbmVzIGtpdExheW91dE1pbGVzdG9uZXMoT3B0aW9uU2V0PFdlYkNvcmU6Okxh
eW91dE1pbGVzdG9uZT4gbWlsZXN0b25lcykKIHsKLSAgICByZXR1cm4gKG1pbGVzdG9uZXMgJiBE
aWRGaXJzdExheW91dCA/IFdlYkRpZEZpcnN0TGF5b3V0IDogMCkKLSAgICAgICAgfCAobWlsZXN0
b25lcyAmIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCA/IFdlYkRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dCA6IDApCi0gICAgICAgIHwgKG1pbGVzdG9uZXMgJiBEaWRIaXRSZWxl
dmFudFJlcGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkID8gV2ViRGlkSGl0UmVsZXZhbnRSZXBh
aW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCA6IDApOworICAgIHJldHVybiAobWlsZXN0b25lcyAm
IFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0ID8gV2ViRGlkRmlyc3RMYXlvdXQgOiAwKQorICAgICAg
ICB8IChtaWxlc3RvbmVzICYgV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
ID8gV2ViRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0IDogMCkKKyAgICAgICAgfCAobWls
ZXN0b25lcyAmIFdlYkNvcmU6OkRpZEhpdFJlbGV2YW50UmVwYWludGVkT2JqZWN0c0FyZWFUaHJl
c2hvbGQgPyBXZWJEaWRIaXRSZWxldmFudFJlcGFpbnRlZE9iamVjdHNBcmVhVGhyZXNob2xkIDog
MCk7CiB9CiAKLXN0YXRpYyBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIGtpdChWaXNpYmlsaXR5U3Rh
dGUgdmlzaWJpbGl0eVN0YXRlKQorc3RhdGljIFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUga2l0KFdl
YkNvcmU6OlZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUpCiB7CiAgICAgc3dpdGNoICh2
aXNpYmlsaXR5U3RhdGUpIHsKLSAgICBjYXNlIFZpc2liaWxpdHlTdGF0ZTo6VmlzaWJsZToKKyAg
ICBjYXNlIFdlYkNvcmU6OlZpc2liaWxpdHlTdGF0ZTo6VmlzaWJsZToKICAgICAgICAgcmV0dXJu
IFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOwotICAgIGNhc2UgVmlzaWJpbGl0eVN0YXRl
OjpIaWRkZW46CisgICAgY2FzZSBXZWJDb3JlOjpWaXNpYmlsaXR5U3RhdGU6OkhpZGRlbjoKICAg
ICAgICAgcmV0dXJuIFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW47Ci0gICAgY2FzZSBWaXNp
YmlsaXR5U3RhdGU6OlByZXJlbmRlcjoKKyAgICBjYXNlIFdlYkNvcmU6OlZpc2liaWxpdHlTdGF0
ZTo6UHJlcmVuZGVyOgogICAgICAgICByZXR1cm4gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVByZXJl
bmRlcjsKICAgICB9CiAKQEAgLTYyNCwxMyArNjIwLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBEZWZlcnJlZFBhZ2VEZXN0cnVjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVEZWZlcnJlZFBhZ2VEZXN0cnVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxQYWdlPiBwYWdl
KQorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZURlZmVycmVkUGFnZURlc3RydWN0b3Ioc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlBhZ2U+IHBhZ2UpCiAgICAgewogICAgICAgICBuZXcgRGVmZXJyZWRQ
YWdlRGVzdHJ1Y3RvcihXVEZNb3ZlKHBhZ2UpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGVm
ZXJyZWRQYWdlRGVzdHJ1Y3RvcihzdGQ6OnVuaXF1ZV9wdHI8UGFnZT4gcGFnZSkKKyAgICBEZWZl
cnJlZFBhZ2VEZXN0cnVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpQYWdlPiBwYWdlKQog
ICAgICAgICA6IG1fcGFnZShXVEZNb3ZlKHBhZ2UpKQogICAgIHsKICAgICAgICAgdHJ5RGVzdHJ1
Y3Rpb24oKTsKQEAgLTY0Nyw3ICs2NDMsNyBAQCBwcml2YXRlOgogICAgICAgICBkZWxldGUgdGhp
czsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZT4gbV9wYWdlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpQYWdlPiBtX3BhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKQEAgLTY4Miw3ICs2NzgsNyBAQCAtICh2b2lkKWRlYWxsb2MKIAogQGltcGxlbWVudGF0
aW9uIFdlYlVJVGV4dEluZGljYXRvckRhdGEgKFdlYlVJVGV4dEluZGljYXRvckludGVybmFsKQog
Ci0tIChXZWJVSVRleHRJbmRpY2F0b3JEYXRhICopaW5pdFdpdGhJbWFnZTooQ0dJbWFnZVJlZilp
bWFnZSB0ZXh0SW5kaWNhdG9yRGF0YTooY29uc3QgVGV4dEluZGljYXRvckRhdGEmKWluZGljYXRv
ckRhdGEgc2NhbGU6KENHRmxvYXQpc2NhbGUKKy0gKFdlYlVJVGV4dEluZGljYXRvckRhdGEgKilp
bml0V2l0aEltYWdlOihDR0ltYWdlUmVmKWltYWdlIHRleHRJbmRpY2F0b3JEYXRhOihjb25zdCBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YSYpaW5kaWNhdG9yRGF0YSBzY2FsZTooQ0dGbG9hdClz
Y2FsZQogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4g
bmlsOwpAQCAtNzA5LDcgKzcwNSw3IEBAIC0gKFdlYlVJVGV4dEluZGljYXRvckRhdGEgKilpbml0
V2l0aEltYWcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpbmRpY2F0b3JEYXRhLm9wdGlv
bnMgJiBUZXh0SW5kaWNhdG9yT3B0aW9uQ29tcHV0ZUVzdGltYXRlZEJhY2tncm91bmRDb2xvcikK
KyAgICBpZiAoaW5kaWNhdG9yRGF0YS5vcHRpb25zICYgV2ViQ29yZTo6VGV4dEluZGljYXRvck9w
dGlvbkNvbXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IpCiAgICAgICAgIF9lc3RpbWF0ZWRC
YWNrZ3JvdW5kQ29sb3IgPSBbUEFMOjphbGxvY1VJQ29sb3JJbnN0YW5jZSgpIGluaXRXaXRoQ0dD
b2xvcjpjYWNoZWRDR0NvbG9yKGluZGljYXRvckRhdGEuZXN0aW1hdGVkQmFja2dyb3VuZENvbG9y
KV07CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTExMzksNyArMTEzNSw3IEBAIC0gKHZvaWQpX2Fk
ZFRvQWxsV2ViVmlld3NTZXQKIAogKyAoTlNTdHJpbmcgKilfc3RhbmRhcmRVc2VyQWdlbnRXaXRo
QXBwbGljYXRpb25OYW1lOihOU1N0cmluZyAqKWFwcGxpY2F0aW9uTmFtZQogewotICAgIHJldHVy
biBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1l
KGFwcGxpY2F0aW9uTmFtZSk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTE2
MywxNCArMTE1OSwxNCBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhj
CiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pT
KGNvbnRleHQpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250
ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0
IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAg
aWYgKCF0b0pTRE9NV2luZG93KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KSkKKyAg
ICBpZiAoIVdlYkNvcmU6OnRvSlNET01XaW5kb3coZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxP
YmplY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlY1N0YXRl
LCB0b0pTKGV4ZWNTdGF0ZSwgZXhjZXB0aW9uKSk7CisgICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0
aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVjU3RhdGUsIGV4Y2VwdGlvbikpOwogfQogCiBzdGF0aWMg
Ym9vbCBzaG91bGRFbmFibGVMb2FkRGVmZXJyaW5nKCkKQEAgLTExNzgsNyArMTE3NCw3IEBAIHN0
YXRpYyBib29sIHNob3VsZEVuYWJsZUxvYWREZWZlcnJpbmcoKQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAgIHJldHVybiAhTWFjQXBwbGljYXRp
b246OmlzQWRvYmVJbnN0YWxsZXIoKTsKKyAgICByZXR1cm4gIVdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc0Fkb2JlSW5zdGFsbGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtMTE4Nyw3ICsxMTgzLDcg
QEAgc3RhdGljIGJvb2wgc2hvdWxkUmVzdHJpY3RXaW5kb3dGb2N1cygpCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgcmV0dXJuICFNYWNBcHBs
aWNhdGlvbjo6aXNIUkJsb2NrKCk7CisgICAgcmV0dXJuICFXZWJDb3JlOjpNYWNBcHBsaWNhdGlv
bjo6aXNIUkJsb2NrKCk7CiAjZW5kaWYKIH0KIApAQCAtMTIxMiw3ICsxMjA4LDcgQEAgLSAodm9p
ZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHN0YXRpYyBib29sIG5lZWRzT3V0bG9va1F1aXJrc1Nj
cmlwdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaXNPdXRsb29rTmVlZGluZ1F1aXJrc1NjcmlwdCA9
ICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSF9IVE1MNV9Q
QVJTRVIpCi0gICAgICAgICYmIE1hY0FwcGxpY2F0aW9uOjppc01pY3Jvc29mdE91dGxvb2soKTsK
KyAgICAgICAgJiYgV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzTWljcm9zb2Z0T3V0bG9vaygp
OwogICAgIHJldHVybiBpc091dGxvb2tOZWVkaW5nUXVpcmtzU2NyaXB0OwogfQogCkBAIC0xMjI2
LDcgKzEyMjIsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKmxlYWtPdXRsb29rUXVpcmtzVXNlclNjCiAt
KHZvaWQpX2luamVjdE91dGxvb2tRdWlya3NTY3JpcHQKIHsKICAgICBzdGF0aWMgTlNTdHJpbmcg
Km91dGxvb2tRdWlya3NTY3JpcHRDb250ZW50cyA9IGxlYWtPdXRsb29rUXVpcmtzVXNlclNjcmlw
dENvbnRlbnRzKCk7Ci0gICAgX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5hZGRVc2VyU2NyaXB0KCpjb3JlKFtXZWJTY3JpcHRXb3JsZCB3b3JsZF0pLCBtYWtlVW5pcXVl
PFVzZXJTY3JpcHQ+KG91dGxvb2tRdWlya3NTY3JpcHRDb250ZW50cywgVVJMKCksIFZlY3RvcjxT
dHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIEluamVjdEF0RG9jdW1lbnRFbmQsIEluamVjdElu
QWxsRnJhbWVzKSk7CisgICAgX3ByaXZhdGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIo
KS5hZGRVc2VyU2NyaXB0KCpjb3JlKFtXZWJTY3JpcHRXb3JsZCB3b3JsZF0pLCBtYWtlVW5pcXVl
PFdlYkNvcmU6OlVzZXJTY3JpcHQ+KG91dGxvb2tRdWlya3NTY3JpcHRDb250ZW50cywgVVJMKCks
IFZlY3RvcjxTdHJpbmc+KCksIFZlY3RvcjxTdHJpbmc+KCksIFdlYkNvcmU6OkluamVjdEF0RG9j
dW1lbnRFbmQsIFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzKSk7CiAKIH0KICNlbmRpZgpAQCAt
MTI1Nyw3ICsxMjUzLDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlTGVnYWN5QmFja2dyb3VuZFNp
egogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9ICFXZWJLaXRMaW5rZWRPbk9yQWZ0
ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9MRUdBQ1lfQkFDS0dST1VORFNJWkVfU0hP
UlRIQU5EX0JFSEFWSU9SKTsKICNlbHNlCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlTGVnYWN5
QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9IE1hY0FwcGxpY2F0aW9uOjppc1ZlcnNp
b25zKCkKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzVmVyc2lvbnMoKQogICAg
ICAgICAmJiAhV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhP
VVRfTEVHQUNZX0JBQ0tHUk9VTkRTSVpFX1NIT1JUSEFORF9CRUhBVklPUik7CiAjZW5kaWYKICAg
ICByZXR1cm4gc2hvdWxkVXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcjsK
QEAgLTEyOTIsNyArMTI4OCw3IEBAIHN0YXRpYyBib29sIHNob3VsZEFsbG93Q29udGVudFNlY3Vy
aXR5UG8KIHN0YXRpYyBib29sIHNob3VsZEFsbG93V2luZG93T3BlbldpdGhvdXRVc2VyR2VzdHVy
ZSgpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRB
bGxvd1dpbmRvd09wZW5XaXRob3V0VXNlckdlc3R1cmUgPSBJT1NBcHBsaWNhdGlvbjo6aXNUaGVT
ZWNyZXRTb2NpZXR5SGlkZGVuTXlzdGVyeSgpICYmIGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNp
b24oKSA8IERZTERfSU9TX1ZFUlNJT05fMTBfMDsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRBbGxv
d1dpbmRvd09wZW5XaXRob3V0VXNlckdlc3R1cmUgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6
aXNUaGVTZWNyZXRTb2NpZXR5SGlkZGVuTXlzdGVyeSgpICYmIGR5bGRfZ2V0X3Byb2dyYW1fc2Rr
X3ZlcnNpb24oKSA8IERZTERfSU9TX1ZFUlNJT05fMTBfMDsKICAgICByZXR1cm4gc2hvdWxkQWxs
b3dXaW5kb3dPcGVuV2l0aG91dFVzZXJHZXN0dXJlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMzMwLDkgKzEzMjYsOSBAQCBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplR2FtZXBh
ZFByb3ZpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBHYW1lcGFk
UHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldFNoYXJlZFByb3ZpZGVyKEhJREdhbWVwYWRQcm92aWRl
cjo6c2luZ2xldG9uKCkpOworICAgIFdlYkNvcmU6OkdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9u
KCkuc2V0U2hhcmVkUHJvdmlkZXIoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKSk7CiAjZWxzZQotICAgIEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuc2V0U2hhcmVk
UHJvdmlkZXIoR2FtZUNvbnRyb2xsZXJHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpKTsKKyAg
ICBXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldFNoYXJlZFByb3ZpZGVy
KFdlYkNvcmU6OkdhbWVDb250cm9sbGVyR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKSk7CiAj
ZW5kaWYKIAogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKQEAgLTEzNTYsNyArMTM1Miw3IEBAIC0g
KHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBfcHJpdmF0ZS0+YmFja2dyb3VuZENvbG9yID0gW1tOU0NvbG9yIGNvbG9y
V2l0aERldmljZVdoaXRlOjEgYWxwaGE6MV0gcmV0YWluXTsKICNlbHNlCi0gICAgX3ByaXZhdGUt
PmJhY2tncm91bmRDb2xvciA9IENHQ29sb3JSZXRhaW4oY2FjaGVkQ0dDb2xvcihDb2xvcjo6d2hp
dGUpKTsKKyAgICBfcHJpdmF0ZS0+YmFja2dyb3VuZENvbG9yID0gQ0dDb2xvclJldGFpbihXZWJD
b3JlOjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp3aGl0ZSkpOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC0xMzk3LDcgKzEzOTMsNyBAQCAtICh2b2lkKV9jb21tb25Jbml0
aWFsaXphdGlvbldpdGhGcmFtZU5hCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAg
ICAvLyBTZXQgdGhlIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC4KLSAgICAgICAgU1FM
aXRlRGF0YWJhc2VUcmFja2VyOjpzZXRDbGllbnQoJldlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudDo6c2hhcmVkV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KCkpOworICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZVRyYWNrZXI6OnNldENsaWVudCgmV2ViQ29yZTo6V2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQoKSk7CiAKICAgICAgICAgaWYgKFtzdGFuZGFyZFByZWZlcmVuY2VzIGRhdGFiYXNlc0Vu
YWJsZWRdKQogI2VuZGlmCkBAIC0xNDE0LDE1ICsxNDEwLDE1IEBAIC0gKHZvaWQpX2NvbW1vbklu
aXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFdlYkNv
cmU6OlN3aXRjaGluZ0dQVUNsaWVudDo6c2V0U2luZ2xldG9uKFdlYktpdDo6V2ViU3dpdGNoaW5n
R1BVQ2xpZW50OjpzaW5nbGV0b24oKSk7CiAjZW5kaWYKLSAgICAgICAgRGVwcmVjYXRlZEdsb2Jh
bFNldHRpbmdzOjpzZXRTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMo
c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkpOworICAgICAgICBX
ZWJDb3JlOjpEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0
eUluQ1NTQXR0cmlidXRlU2V0dGVycyhzaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0
ZVNldHRlcnMoKSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoSU9T
QXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkpCi0gICAgICAgICAgICBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OnNldFNob3VsZE1hbmFnZUF1ZGlvU2Vzc2lvbkNhdGVnb3J5KHRydWUpOwor
ICAgICAgICBpZiAoV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkpCisg
ICAgICAgICAgICBXZWJDb3JlOjpEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldFNob3VsZE1h
bmFnZUF1ZGlvU2Vzc2lvbkNhdGVnb3J5KHRydWUpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAg
ICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpA
IldlYktpdEVuYWJsZUxlZ2FjeVRMUyJdKQotICAgICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbDo6c2V0TGVnYWN5VExTRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnNldExlZ2FjeVRMU0VuYWJsZWQodHJ1ZSk7CiAKICAgICAg
ICAgZGlkT25lVGltZUluaXRpYWxpemF0aW9uID0gdHJ1ZTsKICAgICB9CkBAIC0xNDMxLDE0ICsx
NDI3LDE0IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICBf
cHJpdmF0ZS0+Z3JvdXAtPmFkZFdlYlZpZXcoc2VsZik7CiAKICAgICBhdXRvIHN0b3JhZ2VQcm92
aWRlciA9IFBhZ2VTdG9yYWdlU2Vzc2lvblByb3ZpZGVyOjpjcmVhdGUoKTsKLSAgICBQYWdlQ29u
ZmlndXJhdGlvbiBwYWdlQ29uZmlndXJhdGlvbigKKyAgICBXZWJDb3JlOjpQYWdlQ29uZmlndXJh
dGlvbiBwYWdlQ29uZmlndXJhdGlvbigKICAgICAgICAgW1tzZWxmIHByZWZlcmVuY2VzXSBwcml2
YXRlQnJvd3NpbmdFbmFibGVkXSA/IFBBTDo6U2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lv
bklEKCkgOiBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLAogICAgICAgICBtYWtl
VW5pcXVlUmVmPFdlYkVkaXRvckNsaWVudD4oc2VsZiksCi0gICAgICAgIFNvY2tldFByb3ZpZGVy
OjpjcmVhdGUoKSwKLSAgICAgICAgTGliV2ViUlRDUHJvdmlkZXI6OmNyZWF0ZSgpLAorICAgICAg
ICBXZWJDb3JlOjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlKCksCisgICAgICAgIFdlYkNvcmU6Okxp
YldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUoKSwKICAgICAgICAgV2ViQ29yZTo6Q2FjaGVTdG9yYWdl
UHJvdmlkZXI6OmNyZWF0ZSgpLAogICAgICAgICBCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZShzZWxm
KSwKLSAgICAgICAgQ29va2llSmFyOjpjcmVhdGUoc3RvcmFnZVByb3ZpZGVyLmNvcHlSZWYoKSkK
KyAgICAgICAgV2ViQ29yZTo6Q29va2llSmFyOjpjcmVhdGUoc3RvcmFnZVByb3ZpZGVyLmNvcHlS
ZWYoKSkKICAgICApOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHBhZ2VDb25maWd1
cmF0aW9uLmNocm9tZUNsaWVudCA9IG5ldyBXZWJDaHJvbWVDbGllbnQoc2VsZik7CkBAIC0xNDY4
LDcgKzE0NjQsNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hCiAg
ICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gJl9wcml2YXRl
LT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRp
b24udXNlckNvbnRlbnRQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3By
aXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7Ci0gICAgX3ByaXZhdGUtPnBhZ2UgPSBu
ZXcgUGFnZShXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uKSk7CisgICAgX3ByaXZhdGUtPnBhZ2Ug
PSBuZXcgV2ViQ29yZTo6UGFnZShXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uKSk7CiAgICAgc3Rv
cmFnZVByb3ZpZGVyLT5zZXRQYWdlKCpfcHJpdmF0ZS0+cGFnZSk7CiAKICAgICBfcHJpdmF0ZS0+
cGFnZS0+c2V0R3JvdXBOYW1lKGdyb3VwTmFtZSk7CkBAIC0xNTcxLDE3ICsxNTY3LDE3IEBAIC0g
KHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAoIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVS
U0lPTl9XSVRIX0xPQ0FMX1JFU09VUkNFX1NFQ1VSSVRZX1JFU1RSSUNUSU9OKSkgewogICAgICAg
ICAvLyBPcmlnaW5hbGx5LCB3ZSBhbGxvd2VkIGFsbCBsb2NhbCBsb2Fkcy4KLSAgICAgICAgU2Vj
dXJpdHlQb2xpY3k6OnNldExvY2FsTG9hZFBvbGljeShTZWN1cml0eVBvbGljeTo6QWxsb3dMb2Nh
bExvYWRzRm9yQWxsKTsKKyAgICAgICAgV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnNldExvY2Fs
TG9hZFBvbGljeShXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6QWxsb3dMb2NhbExvYWRzRm9yQWxs
KTsKICAgICB9IGVsc2UgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZF
UlNJT05fV0lUSF9NT1JFX1NUUklDVF9MT0NBTF9SRVNPVVJDRV9TRUNVUklUWV9SRVNUUklDVElP
TikpIHsKICAgICAgICAgLy8gTGF0ZXIsIHdlIGFsbG93ZWQgbG9jYWwgbG9hZHMgZm9yIGxvY2Fs
IFVSTHMgYW5kIGRvY3VtZW50cyBsb2FkZWQKICAgICAgICAgLy8gd2l0aCBzdWJzdGl0dXRlIGRh
dGEuCi0gICAgICAgIFNlY3VyaXR5UG9saWN5OjpzZXRMb2NhbExvYWRQb2xpY3koU2VjdXJpdHlQ
b2xpY3k6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2FsQW5kU3Vic3RpdHV0ZURhdGEpOworICAgICAg
ICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6c2V0TG9jYWxMb2FkUG9saWN5KFdlYkNvcmU6OlNl
Y3VyaXR5UG9saWN5OjpBbGxvd0xvY2FsTG9hZHNGb3JMb2NhbEFuZFN1YnN0aXR1dGVEYXRhKTsK
ICAgICB9CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIVdlYktpdExpbmtl
ZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0NPTlRFTlRfU05JRkZJTkdf
Rk9SX0ZJTEVfVVJMUykpCi0gICAgICAgIFJlc291cmNlSGFuZGxlOjpmb3JjZUNvbnRlbnRTbmlm
ZmluZygpOworICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Zm9yY2VDb250ZW50U25p
ZmZpbmcoKTsKIAogICAgIF9wcml2YXRlLT5wYWdlLT5zZXREZXZpY2VTY2FsZUZhY3Rvcihbc2Vs
ZiBfZGV2aWNlU2NhbGVGYWN0b3JdKTsKICNlbmRpZgpAQCAtMTY4OCw3ICsxNjg0LDcgQEAgLSAo
aWQpaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTooTgogICAgIF9wcml2YXRlLT5wcmVm
ZXJlbmNlcyA9IFtwcmVmZXJlbmNlcyByZXRhaW5dOwogICAgIF9wcml2YXRlLT5tYWluRnJhbWVE
b2N1bWVudFJlYWR5ID0gTk87CiAgICAgX3ByaXZhdGUtPmRyYXdzQmFja2dyb3VuZCA9IFlFUzsK
LSAgICBfcHJpdmF0ZS0+YmFja2dyb3VuZENvbG9yID0gQ0dDb2xvclJldGFpbihjYWNoZWRDR0Nv
bG9yKENvbG9yOjp3aGl0ZSkpOworICAgIF9wcml2YXRlLT5iYWNrZ3JvdW5kQ29sb3IgPSBDR0Nv
bG9yUmV0YWluKFdlYkNvcmU6OmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OndoaXRlKSk7
CiAKICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IG5pbDsKICAgICBmcmFtZVZpZXcgPSBb
W1dlYkZyYW1lVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTogQ0dSZWN0TWFrZSgwLDAsZnJhbWUu
c2l6ZS53aWR0aCxmcmFtZS5zaXplLmhlaWdodCldOwpAQCAtMTcwMCwxNCArMTY5NiwxNCBAQCAt
IChpZClpbml0U2ltcGxlSFRNTERvY3VtZW50V2l0aFN0eWxlOihOCiAgICAgX3ByaXZhdGUtPmdy
b3VwLT5hZGRXZWJWaWV3KHNlbGYpOwogCiAgICAgYXV0byBzdG9yYWdlUHJvdmlkZXIgPSBQYWdl
U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6Y3JlYXRlKCk7Ci0gICAgUGFnZUNvbmZpZ3VyYXRpb24g
cGFnZUNvbmZpZ3VyYXRpb24oCisgICAgV2ViQ29yZTo6UGFnZUNvbmZpZ3VyYXRpb24gcGFnZUNv
bmZpZ3VyYXRpb24oCiAgICAgICAgIFtbc2VsZiBwcmVmZXJlbmNlc10gcHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZF0gPyBQQUw6OlNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpIDogUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwKICAgICAgICAgbWFrZVVuaXF1ZVJlZjxX
ZWJFZGl0b3JDbGllbnQ+KHNlbGYpLAotICAgICAgICBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlKCks
Ci0gICAgICAgIExpYldlYlJUQ1Byb3ZpZGVyOjpjcmVhdGUoKSwKKyAgICAgICAgV2ViQ29yZTo6
U29ja2V0UHJvdmlkZXI6OmNyZWF0ZSgpLAorICAgICAgICBXZWJDb3JlOjpMaWJXZWJSVENQcm92
aWRlcjo6Y3JlYXRlKCksCiAgICAgICAgIFdlYkNvcmU6OkNhY2hlU3RvcmFnZVByb3ZpZGVyOjpj
cmVhdGUoKSwKICAgICAgICAgQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUoc2VsZiksCi0gICAgICAg
IENvb2tpZUphcjo6Y3JlYXRlKHN0b3JhZ2VQcm92aWRlci5jb3B5UmVmKCkpCisgICAgICAgIFdl
YkNvcmU6OkNvb2tpZUphcjo6Y3JlYXRlKHN0b3JhZ2VQcm92aWRlci5jb3B5UmVmKCkpCiAgICAg
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5jaHJvbWVDbGllbnQgPSBuZXcgV2ViQ2hyb21lQ2xp
ZW50SU9TKHNlbGYpOwogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0xNzI4LDcgKzE3MjQs
NyBAQCAtIChpZClpbml0U2ltcGxlSFRNTERvY3VtZW50V2l0aFN0eWxlOihOCiAgICAgcGFnZUNv
bmZpZ3VyYXRpb24udmlzaXRlZExpbmtTdG9yZSA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRM
aW5rU3RvcmUoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wbHVnaW5JbmZvUHJvdmlkZXIgPSAm
V2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpzaW5nbGV0b24oKTsKIAotICAgIF9wcml2YXRlLT5wYWdl
ID0gbmV3IFBhZ2UoV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOworICAgIF9wcml2YXRlLT5w
YWdlID0gbmV3IFdlYkNvcmU6OlBhZ2UoV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwogICAg
IHN0b3JhZ2VQcm92aWRlci0+c2V0UGFnZSgqX3ByaXZhdGUtPnBhZ2UpOwogICAgIAogICAgIFtz
ZWxmIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDpZRVNdOwpAQCAtMTc3NCw5ICsxNzcwLDkg
QEAgLSAoaWQpaW5pdFNpbXBsZUhUTUxEb2N1bWVudFdpdGhTdHlsZTooTgogICAgIAogICAgICsr
V2ViVmlld0NvdW50OwogICAgIAotICAgIFNlY3VyaXR5UG9saWN5OjpzZXRMb2NhbExvYWRQb2xp
Y3koU2VjdXJpdHlQb2xpY3k6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2FsQW5kU3Vic3RpdHV0ZURh
dGEpOworICAgIFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5OjpzZXRMb2NhbExvYWRQb2xpY3koV2Vi
Q29yZTo6U2VjdXJpdHlQb2xpY3k6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2FsQW5kU3Vic3RpdHV0
ZURhdGEpOwogICAgIAotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkuc2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkKHNlbGYucHJlZmVyZW5jZXMuYXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkKTsKKyAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnNldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChzZWxmLnByZWZlcmVu
Y2VzLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KQEAg
LTE3OTAsNyArMTc4Niw3IEBAICsgKHZvaWQpX3JlbGVhc2VNZW1vcnlOb3cKIAogLSAodm9pZClf
cmVwbGFjZUN1cnJlbnRIaXN0b3J5SXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtCiB7Ci0gICAg
RnJhbWUqIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOworICAgIGF1dG8qIGZyYW1lID0g
W3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmIChmcmFtZSkKICAgICAgICAgZnJhbWUtPmxv
YWRlcigpLmhpc3RvcnkoKS5yZXBsYWNlQ3VycmVudEl0ZW0oY29yZShpdGVtKSk7CiB9CkBAIC0x
ODExLDggKzE4MDcsOCBAQCArIChCT09MKWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0Oih1
CiAtICh2b2lkKXVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZVNoZWV0cwogewogICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29y
ZUZyYW1lXTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewot
ICAgICAgICAgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAg
ICAgIGZvciAoYXV0byogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGF1dG8gKmRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQpCiAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogICAgICAgICB9CkBAIC0xODI3LDEwICsxODIzLDEwIEBAIC0gKHZvaWQpdXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlU2gKIC0gKEJPT0wpX3JlcXVlc3RTdGFydERhdGFJbnRl
cmFjdGlvbjooQ0dQb2ludCljbGllbnRQb3NpdGlvbiBnbG9iYWxQb3NpdGlvbjooQ0dQb2ludCln
bG9iYWxQb3NpdGlvbgogewogICAgIFdlYlRocmVhZExvY2soKTsKLSAgICByZXR1cm4gX3ByaXZh
dGUtPnBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLnRyeVRvQmVnaW5EcmFnQXRQb2lu
dChJbnRQb2ludChjbGllbnRQb3NpdGlvbiksIEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSk7Cisg
ICAgcmV0dXJuIF9wcml2YXRlLT5wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS50cnlU
b0JlZ2luRHJhZ0F0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQoY2xpZW50UG9zaXRpb24pLCBXZWJD
b3JlOjpJbnRQb2ludChnbG9iYWxQb3NpdGlvbikpOwogfQogCi0tICh2b2lkKV9zdGFydERyYWc6
KGNvbnN0IERyYWdJdGVtJilkcmFnSXRlbQorLSAodm9pZClfc3RhcnREcmFnOihjb25zdCBXZWJD
b3JlOjpEcmFnSXRlbSYpZHJhZ0l0ZW0KIHsKICAgICBhdXRvJiBkcmFnSW1hZ2UgPSBkcmFnSXRl
bS5pbWFnZTsKICAgICBhdXRvIGltYWdlID0gZHJhZ0ltYWdlLmdldCgpLmdldCgpOwpAQCAtMTg5
MCwxMSArMTg4NiwxMSBAQCAtIChXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24pZHJhZ0Rlc3RpbmF0
CiAgICAgcmV0dXJuIFtzZWxmLl9VSURlbGVnYXRlRm9yd2FyZGVyIHdlYlZpZXc6c2VsZiBkcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrRm9yU2Vzc2lvbjpzZXNzaW9uXTsKIH0KIAotLSAoRHJhZ0Rh
dGEpZHJhZ0RhdGFGb3JTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBjbGllbnQ6
KENHUG9pbnQpY2xpZW50UG9zaXRpb24gZ2xvYmFsOihDR1BvaW50KWdsb2JhbFBvc2l0aW9uIG9w
ZXJhdGlvbjoodWludDY0X3Qpb3BlcmF0aW9uCistIChXZWJDb3JlOjpEcmFnRGF0YSlkcmFnRGF0
YUZvclNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uIGNsaWVudDooQ0dQb2ludClj
bGllbnRQb3NpdGlvbiBnbG9iYWw6KENHUG9pbnQpZ2xvYmFsUG9zaXRpb24gb3BlcmF0aW9uOih1
aW50NjRfdClvcGVyYXRpb24KIHsKLSAgICBhdXRvIGRyYWdPcGVyYXRpb25NYXNrID0gc3RhdGlj
X2Nhc3Q8RHJhZ09wZXJhdGlvbj4ob3BlcmF0aW9uKTsKLSAgICBhdXRvIGRyYWdEZXN0aW5hdGlv
bk1hc2sgPSBzdGF0aWNfY2FzdDxEcmFnRGVzdGluYXRpb25BY3Rpb24+KFtzZWxmIGRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JTZXNzaW9uOnNlc3Npb25dKTsKLSAgICByZXR1cm4geyBzZXNz
aW9uLCByb3VuZGVkSW50UG9pbnQoY2xpZW50UG9zaXRpb24pLCByb3VuZGVkSW50UG9pbnQoZ2xv
YmFsUG9zaXRpb24pLCBkcmFnT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uTm9uZSwgZHJh
Z0Rlc3RpbmF0aW9uTWFzayB9OworICAgIGF1dG8gZHJhZ09wZXJhdGlvbk1hc2sgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihvcGVyYXRpb24pOworICAgIGF1dG8gZHJhZ0Rl
c3RpbmF0aW9uTWFzayA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlv
bj4oW3NlbGYgZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTWFza0ZvclNlc3Npb246c2Vzc2lvbl0pOwor
ICAgIHJldHVybiB7IHNlc3Npb24sIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChjbGllbnRQb3Np
dGlvbiksIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChnbG9iYWxQb3NpdGlvbiksIGRyYWdPcGVy
YXRpb25NYXNrLCBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25Ob25lLCBkcmFnRGVzdGluYXRpb25N
YXNrIH07CiB9CiAKIC0gKHVpbnQ2NF90KV9lbnRlcmVkRGF0YUludGVyYWN0aW9uOihpZCA8VUlE
cm9wU2Vzc2lvbj4pc2Vzc2lvbiBjbGllbnQ6KENHUG9pbnQpY2xpZW50UG9zaXRpb24gZ2xvYmFs
OihDR1BvaW50KWdsb2JhbFBvc2l0aW9uIG9wZXJhdGlvbjoodWludDY0X3Qpb3BlcmF0aW9uCkBA
IC0xOTQ2LDEwICsxOTQyLDEwIEBAIC0gKHZvaWQpX2RpZENvbmNsdWRlRWRpdERyYWcKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpYyBhdXRvIGRlZmF1bHRFZGl0
RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zID0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFw
c2hvdE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0U2VsZWN0aW9uIHwgVGV4dEluZGljYXRvck9w
dGlvbkV4cGFuZENsaXBCZXlvbmRWaXNpYmxlUmVjdCB8IFRleHRJbmRpY2F0b3JPcHRpb25QYWlu
dEFsbENvbnRlbnQgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRj
aGVzU2VsZWN0aW9uIHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QmFja2dyb3VuZHMgfCBUZXh0
SW5kaWNhdG9yT3B0aW9uVXNlU2VsZWN0aW9uUmVjdEZvclNpemluZyB8IFRleHRJbmRpY2F0b3JP
cHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0IHwgVGV4dEluZGljYXRv
ck9wdGlvblJlc3BlY3RUZXh0Q29sb3I7CisgICAgc3RhdGljIGF1dG8gZGVmYXVsdEVkaXREcmFn
VGV4dEluZGljYXRvck9wdGlvbnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVk
ZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgV2ViQ29yZTo6
VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29yZTo6VGV4dEluZGljYXRv
ck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQgfCBXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yT3B0aW9uUmVzcGVjdFRleHRDb2xvcjsKICAgICBhdXRvJiBmcmFtZSA9IHBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChhdXRv
IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBGbG9hdFNpemUoKSkp
CisgICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0
aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUs
IFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKICAgICAgICAgICAgIF9wcml2YXRlLT5kYXRhT3BlcmF0
aW9uVGV4dEluZGljYXRvciA9IGFkb3B0TlMoW1tXZWJVSVRleHRJbmRpY2F0b3JEYXRhIGFsbG9j
XSBpbml0V2l0aEltYWdlOm5pbCB0ZXh0SW5kaWNhdG9yRGF0YTp0ZXh0SW5kaWNhdG9yLT5kYXRh
KCkgc2NhbGU6cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKV0pOwogICAgIH0KIH0KQEAgLTIxMTcs
MTcgKzIxMTMsMTcgQEAgLSAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFzcyBhbmRSZQog
CiArICh2b2lkKV9zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aDooQk9PTClmCiB7Ci0g
ICAgRm9udENhc2NhZGU6OnNldENvZGVQYXRoKGYgPyBGb250Q2FzY2FkZTo6Q29tcGxleCA6IEZv
bnRDYXNjYWRlOjpBdXRvKTsKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0Q29kZVBhdGgo
ZiA/IFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpDb21wbGV4IDogV2ViQ29yZTo6Rm9udENhc2NhZGU6
OkF1dG8pOwogfQogCiArIChCT09MKWNhbkNsb3NlQWxsV2ViVmlld3MKIHsKLSAgICByZXR1cm4g
RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMoKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMoKTsKIH0KIAogKyAodm9pZCljbG9zZUFsbFdlYlZpZXdzCiB7Ci0gICAgRE9NV2luZG93
OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMoKTsKKyAgICBXZWJDb3JlOjpET01XaW5k
b3c6OmRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cygpOwogCiAgICAgLy8gVGhpcyB3aWxs
IGNsb3NlIHRoZSBXZWJWaWV3cyBpbiBhIHJhbmRvbSBvcmRlci4gQ2hhbmdlIHRoaXMgaWYgY2xv
c2Ugb3JkZXIgaXMgaW1wb3J0YW50LgogICAgIGZvciAoV2ViVmlldyAqd2ViVmlldyBpbiBbKF9f
YnJpZGdlIE5TU2V0ICopYWxsV2ViVmlld3NTZXQgYWxsT2JqZWN0c10pCkBAIC0yMTU3LDExICsy
MTUzLDExIEBAIC0gKHZvaWQpX2Rpc3BhdGNoVW5sb2FkRXZlbnQKIHsKICAgICBXZWJUaHJlYWRS
dW4oXnsKICAgICAgICAgV2ViRnJhbWUgKm1haW5GcmFtZSA9IFtzZWxmIG1haW5GcmFtZV07Ci0g
ICAgICAgIEZyYW1lICpjb3JlTWFpbkZyYW1lID0gY29yZShtYWluRnJhbWUpOworICAgICAgICBh
dXRvKiBjb3JlTWFpbkZyYW1lID0gY29yZShtYWluRnJhbWUpOwogICAgICAgICBpZiAoY29yZU1h
aW5GcmFtZSkgewotICAgICAgICAgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gY29yZU1haW5GcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gY29yZU1haW5GcmFt
ZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIGlmIChkb2N1bWVudCkKLSAgICAgICAgICAgICAg
ICBkb2N1bWVudC0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS51bmxvYWRFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6
Ok5vKSk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQtPmRpc3BhdGNoV2luZG93RXZlbnQoV2Vi
Q29yZTo6RXZlbnQ6OmNyZWF0ZShXZWJDb3JlOjpldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIFdl
YkNvcmU6OkV2ZW50OjpDYW5CdWJibGU6Ok5vLCBXZWJDb3JlOjpFdmVudDo6SXNDYW5jZWxhYmxl
OjpObykpOwogICAgICAgICB9CiAgICAgfSk7CiB9CkBAIC0yMTcxLDcgKzIxNjcsNyBAQCAtIChE
T01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGVBdFNlbGVjCiAgICAgYXV0byogbWFpbkZyYW1l
ID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghbWFpbkZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1haW5GcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHls
ZSA9IFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KG1haW5GcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGlmICghZWRpdGluZ1N0eWxlKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIGF1dG8qIHN0eWxlID0gZWRpdGluZ1N0eWxlLT5zdHlsZSgp
OwpAQCAtMjIyOSw3ICsyMjI1LDcgQEAgLSAodm9pZClfZGlkRmluaXNoU2Nyb2xsaW5nT3Jab29t
aW5nCiAgICAgX3ByaXZhdGUtPm1haW5WaWV3SXNTY3JvbGxpbmdPclpvb21pbmcgPSBOTzsKICAg
ICBbc2VsZiBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOwogICAgIFtbc2VsZiBtYWluRnJhbWVdIHNl
dFRpbWVvdXRzUGF1c2VkOk5PXTsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gW3NlbGYgX21h
aW5Db3JlRnJhbWVdLT52aWV3KCkpCisgICAgaWYgKGF1dG8qIHZpZXcgPSBbc2VsZiBfbWFpbkNv
cmVGcmFtZV0tPnZpZXcoKSkKICAgICAgICAgdmlldy0+cmVzdW1lVmlzaWJsZUltYWdlQW5pbWF0
aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygpOwogfQogCkBAIC0yMzQzLDcgKzIzMzksNyBAQCAtICh2
b2lkKV9jbG9zZQogICAgIF9wcml2YXRlLT5jbG9zaW5nID0gWUVTOwogI2VuZGlmCiAKLSAgICBp
ZiAoRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKKyAgICBpZiAoYXV0
byogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdKQogICAgICAgICBtYWluRnJhbWUt
PmxvYWRlcigpLmRldGFjaEZyb21QYXJlbnQoKTsKIAogICAgIFtzZWxmIHNldEhvc3RXaW5kb3c6
bmlsXTsKQEAgLTIzNzMsOSArMjM2OSw5IEBAIC0gKHZvaWQpX2Nsb3NlCiAgICAgLy8gRGVsZXRl
aW5nIHRoZSBXZWJDb3JlOjpQYWdlIHdpbGwgY2xlYXIgdGhlIHBhZ2UgY2FjaGUgc28gd2UgY2Fs
bCBkZXN0cm95IG9uCiAgICAgLy8gYWxsIHRoZSBwbHVnLWlucyBpbiB0aGUgcGFnZSBjYWNoZSB0
byBicmVhayBhbnkgcmV0YWluIGN5Y2xlcy4KICAgICAvLyBTZWUgY29tbWVudCBpbiBIaXN0b3J5
SXRlbTo6cmVsZWFzZUFsbFBlbmRpbmdQYWdlQ2FjaGVzKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24u
Ci0gICAgUGFnZSogcGFnZSA9IF9wcml2YXRlLT5wYWdlOworICAgIGF1dG8qIHBhZ2UgPSBfcHJp
dmF0ZS0+cGFnZTsKICAgICBfcHJpdmF0ZS0+cGFnZSA9IG51bGxwdHI7Ci0gICAgV2ViS2l0OjpE
ZWZlcnJlZFBhZ2VEZXN0cnVjdG9yOjpjcmVhdGVEZWZlcnJlZFBhZ2VEZXN0cnVjdG9yKHN0ZDo6
dW5pcXVlX3B0cjxQYWdlPihwYWdlKSk7CisgICAgV2ViS2l0OjpEZWZlcnJlZFBhZ2VEZXN0cnVj
dG9yOjpjcmVhdGVEZWZlcnJlZFBhZ2VEZXN0cnVjdG9yKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpQYWdlPihwYWdlKSk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoX3By
aXZhdGUtPmhhc1NwZWxsQ2hlY2tlckRvY3VtZW50VGFnKSB7CkBAIC0yNDI4LDcgKzI0MjQsNyBA
QCAtICh2b2lkKV9jbG9zZQogLy8gSW5kaWNhdGVzIGlmIHRoZSBXZWJWaWV3IGlzIGluIHRoZSBt
aWRzdCBvZiBhIHVzZXIgZ2VzdHVyZS4KIC0gKEJPT0wpX2lzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
CiB7Ci0gICAgcmV0dXJuIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6VXNlckdlc3R1cmVJbmRpY2F0b3I6OnByb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpOwogfQogCiArIChOU1N0cmluZyAqKV9NSU1FVHlwZUZvckZpbGU6KE5T
U3RyaW5nICopcGF0aApAQCAtMjU0OSwyNyArMjU0NSwyNyBAQCAtIChXZWJJbnNwZWN0b3IgKilp
bnNwZWN0b3IKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICsgKHZvaWQpX2VuYWJsZVJl
bW90ZUluc3BlY3RvcgogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc3RhcnQo
KTsKKyAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc3RhcnQoKTsK
IH0KIAogKyAodm9pZClfZGlzYWJsZVJlbW90ZUluc3BlY3RvcgogewotICAgIFJlbW90ZUluc3Bl
Y3Rvcjo6c2luZ2xldG9uKCkuc3RvcCgpOworICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9y
OjpzaW5nbGV0b24oKS5zdG9wKCk7CiB9CiAKICsgKHZvaWQpX2Rpc2FibGVBdXRvU3RhcnRSZW1v
dGVJbnNwZWN0b3IKIHsKLSAgICBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0RGlzYWJsZWQoKTsKKyAg
ICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RhcnREaXNhYmxlZCgpOwogfQogCiArIChC
T09MKV9pc1JlbW90ZUluc3BlY3RvckVuYWJsZWQKIHsKLSAgICByZXR1cm4gUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS5lbmFibGVkKCk7CisgICAgcmV0dXJuIEluc3BlY3Rvcjo6UmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKS5lbmFibGVkKCk7CiB9CiAKICsgKEJPT0wpX2hhc1JlbW90
ZUluc3BlY3RvclNlc3Npb24KIHsKLSAgICByZXR1cm4gUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0
b24oKS5oYXNBY3RpdmVEZWJ1Z1Nlc3Npb24oKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpSZW1v
dGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLmhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOwogfQogCiAt
IChCT09MKWFsbG93c1JlbW90ZUluc3BlY3Rpb24KQEAgLTI2MDcsNyArMjYwMyw3IEBAIC0gKHZv
aWQpc2V0U2hvd2luZ0luc3BlY3RvckluZGljYXRpb246KEIKIC0gKHZvaWQpX3NldEhvc3RBcHBs
aWNhdGlvblByb2Nlc3NJZGVudGlmaWVyOihwaWRfdClwaWQgYXVkaXRUb2tlbjooYXVkaXRfdG9r
ZW5fdClhdWRpdFRva2VuCiB7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gYXVkaXREYXRhID0g
YWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgKGNvbnN0IFVJbnQ4KikmYXVkaXRUb2tlbiwg
c2l6ZW9mKGF1ZGl0VG9rZW4pKSk7Ci0gICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5z
ZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24ocGlkLCBhdWRpdERhdGEpOworICAgIEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5zZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRp
b24ocGlkLCBhdWRpdERhdGEpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAj
ZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0yNjY2LDE0ICsyNjYyLDE0IEBA
IC0gKHZvaWQpX2xvYWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJWaWUKICAgICAvLyB0eXBlLiAg
KFNlZSBiZWhhdmlvciBtYXRyaXggYXQgdGhlIHRvcCBvZiBXZWJGcmFtZVByaXZhdGUuKSAgU28g
d2UgY29weSBhbGwgdGhlIGl0ZW1zCiAgICAgLy8gaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0LCBh
bmQgZ28gdG8gdGhlIGN1cnJlbnQgb25lLgogCi0gICAgQmFja0ZvcndhcmRDb250cm9sbGVyJiBi
YWNrRm9yd2FyZCA9IF9wcml2YXRlLT5wYWdlLT5iYWNrRm9yd2FyZCgpOworICAgIGF1dG8mIGJh
Y2tGb3J3YXJkID0gX3ByaXZhdGUtPnBhZ2UtPmJhY2tGb3J3YXJkKCk7CiAgICAgQVNTRVJUKCFi
YWNrRm9yd2FyZC5jdXJyZW50SXRlbSgpKTsgLy8gZGVzdGluYXRpb24gbGlzdCBzaG91bGQgYmUg
ZW1wdHkKIAotICAgIEJhY2tGb3J3YXJkQ29udHJvbGxlciYgb3RoZXJCYWNrRm9yd2FyZCA9IG90
aGVyVmlldy0+X3ByaXZhdGUtPnBhZ2UtPmJhY2tGb3J3YXJkKCk7CisgICAgYXV0byYgb3RoZXJC
YWNrRm9yd2FyZCA9IG90aGVyVmlldy0+X3ByaXZhdGUtPnBhZ2UtPmJhY2tGb3J3YXJkKCk7CiAg
ICAgaWYgKCFvdGhlckJhY2tGb3J3YXJkLmN1cnJlbnRJdGVtKCkpCiAgICAgICAgIHJldHVybjsg
Ly8gZW1wdHkgYmFjayBmb3J3YXJkIGxpc3QsIGJhaWwKICAgICAKLSAgICBIaXN0b3J5SXRlbSog
bmV3SXRlbVRvR29UbyA9IG51bGxwdHI7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIG5ld0l0
ZW1Ub0dvVG8gPSBudWxscHRyOwogCiAgICAgaW50IGxhc3RJdGVtSW5kZXggPSBvdGhlckJhY2tG
b3J3YXJkLmZvcndhcmRDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAtb3RoZXJCYWNrRm9yd2Fy
ZC5iYWNrQ291bnQoKTsgaSA8PSBsYXN0SXRlbUluZGV4OyArK2kpIHsKQEAgLTI2ODMsMTQgKzI2
NzksMTQgQEAgLSAodm9pZClfbG9hZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZQogICAgICAg
ICAgICAgLy8gdW50aWwgd2UgbGVhdmUgdGhhdCBwYWdlLgogICAgICAgICAgICAgb3RoZXJWaWV3
LT5fcHJpdmF0ZS0+cGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuaGlzdG9yeSgpLnNhdmVEb2N1
bWVudEFuZFNjcm9sbFN0YXRlKCk7CiAgICAgICAgIH0KLSAgICAgICAgUmVmPEhpc3RvcnlJdGVt
PiBuZXdJdGVtID0gb3RoZXJCYWNrRm9yd2FyZC5pdGVtQXRJbmRleChpKS0+Y29weSgpOworICAg
ICAgICBSZWY8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IG5ld0l0ZW0gPSBvdGhlckJhY2tGb3J3YXJk
Lml0ZW1BdEluZGV4KGkpLT5jb3B5KCk7CiAgICAgICAgIGlmIChpID09IDApIAogICAgICAgICAg
ICAgbmV3SXRlbVRvR29UbyA9IG5ld0l0ZW0ucHRyKCk7CiAgICAgICAgIGJhY2tGb3J3YXJkLmNs
aWVudCgpLmFkZEl0ZW0oV1RGTW92ZShuZXdJdGVtKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKG5l
d0l0ZW1Ub0dvVG8pOwotICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbSgqbmV3SXRlbVRvR29U
bywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGlu
dWluZ0xvYWQ6Ok5vKTsKKyAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oKm5ld0l0ZW1Ub0dv
VG8sIFdlYkNvcmU6OkZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCwgV2ViQ29yZTo6
U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObyk7CiB9CiAKIC0gKHZvaWQpX3NldEZvcm1E
ZWxlZ2F0ZTogKGlkPFdlYkZvcm1EZWxlZ2F0ZT4pZGVsZWdhdGUKQEAgLTI3NzIsNyArMjc2OCw3
IEBAIC0gKEJPT0wpX25lZWRzSXNMb2FkaW5nSW5BUElTZW5zZVF1aXJrCiAKIC0gKEJPT0wpX25l
ZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzCiB7Ci0gICAgc3RhdGljIEJPT0wg
bmVlZHNRdWlya3MgPSAhV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9O
X1dJVEhfSUVfQ09NUEFUSUJMRV9LRVlCT0FSRF9FVkVOVF9ESVNQQVRDSCkgJiYgIU1hY0FwcGxp
Y2F0aW9uOjppc1NhZmFyaSgpOworICAgIHN0YXRpYyBCT09MIG5lZWRzUXVpcmtzID0gIVdlYktp
dExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIX0lFX0NPTVBBVElCTEVf
S0VZQk9BUkRfRVZFTlRfRElTUEFUQ0gpICYmICFXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNT
YWZhcmkoKTsKICAgICByZXR1cm4gbmVlZHNRdWlya3M7CiB9CiAKQEAgLTI3ODQsNyArMjc4MCw3
IEBAIC0gKEJPT0wpX25lZWRzRnJhbWVMb2FkRGVsZWdhdGVSZXRhaW5RdWkKIAogc3RhdGljIGJv
b2wgbmVlZHNTZWxmUmV0YWluV2hpbGVMb2FkaW5nUXVpcmsoKQogewotICAgIHN0YXRpYyBib29s
IG5lZWRzUXVpcmsgPSBNYWNBcHBsaWNhdGlvbjo6aXNBcGVydHVyZSgpOworICAgIHN0YXRpYyBi
b29sIG5lZWRzUXVpcmsgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNBcGVydHVyZSgpOwog
ICAgIHJldHVybiBuZWVkc1F1aXJrOwogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZ
KQpAQCAtMjc5OSwxMCArMjc5NSwxMCBAQCAtIChCT09MKV9uZWVkc1ByZUhUTUw1UGFyc2VyUXVp
cmtzCiAgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjEz
ND4gYW5kCiAgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NjMzND4uCiAgICAgc3RhdGljIGJvb2wgaXNBcHBsaWNhdGlvbk5lZWRpbmdQYXJzZXJRdWlya3Mg
PSAhV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhfSFRNTDVf
UEFSU0VSKQotICAgICAgICAmJiAoTWFjQXBwbGljYXRpb246OmlzQU9MSW5zdGFudE1lc3Nlbmdl
cigpIHx8IE1hY0FwcGxpY2F0aW9uOjppc01pY3Jvc29mdE15RGF5KCkpOworICAgICAgICAmJiAo
V2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzQU9MSW5zdGFudE1lc3NlbmdlcigpIHx8IFdlYkNv
cmU6Ok1hY0FwcGxpY2F0aW9uOjppc01pY3Jvc29mdE15RGF5KCkpOwogICAgIAogICAgIC8vIE1h
aWwuYXBwIG11c3QgY29udGludWUgdG8gZGlzcGxheSBIVE1MIGVtYWlsIHRoYXQgY29udGFpbnMg
cXVpcmt5IG1hcmt1cC4KLSAgICBzdGF0aWMgYm9vbCBpc0FwcGxlTWFpbCA9IE1hY0FwcGxpY2F0
aW9uOjppc0FwcGxlTWFpbCgpOworICAgIHN0YXRpYyBib29sIGlzQXBwbGVNYWlsID0gV2ViQ29y
ZTo6TWFjQXBwbGljYXRpb246OmlzQXBwbGVNYWlsKCk7CiAKICAgICByZXR1cm4gaXNBcHBsaWNh
dGlvbk5lZWRpbmdQYXJzZXJRdWlya3MgfHwgaXNBcHBsZU1haWwgfHwgW1tzZWxmIHByZWZlcmVu
Y2VzXSB1c2VQcmVIVE1MNVBhcnNlclF1aXJrc107CiAjZWxzZQpAQCAtMjgzOSw3ICsyODM1LDgg
QEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOgogfQogCiAtICh2b2lk
KV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKLXsgICAg
Cit7CisgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgQVNTRVJUKHByZWZlcmVuY2Vz
ID09IFtzZWxmIHByZWZlcmVuY2VzXSk7CiAgICAgaWYgKCFfcHJpdmF0ZS0+dXNlckFnZW50T3Zl
cnJpZGRlbikKICAgICAgICAgW3NlbGYgX2ludmFsaWRhdGVVc2VyQWdlbnRDYWNoZV07CkBAIC0y
ODY4LDcgKzI4NjUsNyBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVu
CiAgICAgfQogI2VuZGlmCiAKLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBfcHJpdmF0ZS0+cGFn
ZS0+c2V0dGluZ3MoKTsKKyAgICBhdXRvJiBzZXR0aW5ncyA9IF9wcml2YXRlLT5wYWdlLT5zZXR0
aW5ncygpOwogCiAgICAgc2V0dGluZ3Muc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoW3ByZWZlcmVuY2Vz
IGN1cnNpdmVGb250RmFtaWx5XSk7CiAgICAgc2V0dGluZ3Muc2V0RGVmYXVsdEZpeGVkRm9udFNp
emUoW3ByZWZlcmVuY2VzIGRlZmF1bHRGaXhlZEZvbnRTaXplXSk7CkBAIC0yOTcxLDEzICsyOTY4
LDEzIEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW4KICAgICBzZXR0
aW5ncy5zZXRTdXBwcmVzc2VzSW5jcmVtZW50YWxSZW5kZXJpbmcoW3ByZWZlcmVuY2VzIHN1cHBy
ZXNzZXNJbmNyZW1lbnRhbFJlbmRlcmluZ10pOwogICAgIHNldHRpbmdzLnNldEJhY2tzcGFjZUtl
eU5hdmlnYXRpb25FbmFibGVkKFtwcmVmZXJlbmNlcyBiYWNrc3BhY2VLZXlOYXZpZ2F0aW9uRW5h
YmxlZF0pOwogICAgIHNldHRpbmdzLnNldFdhbnRzQmFsYW5jZWRTZXREZWZlcnNMb2FkaW5nQmVo
YXZpb3IoW3ByZWZlcmVuY2VzIHdhbnRzQmFsYW5jZWRTZXREZWZlcnNMb2FkaW5nQmVoYXZpb3Jd
KTsKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldE1vY2tTY3JvbGxiYXJzRW5hYmxl
ZChbcHJlZmVyZW5jZXMgbW9ja1Njcm9sbGJhcnNFbmFibGVkXSk7CisgICAgV2ViQ29yZTo6RGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoW3ByZWZlcmVu
Y2VzIG1vY2tTY3JvbGxiYXJzRW5hYmxlZF0pOwogCiAgICAgc2V0dGluZ3Muc2V0U2hvdWxkUmVz
cGVjdEltYWdlT3JpZW50YXRpb24oW3ByZWZlcmVuY2VzIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uXSk7CiAKICAgICBzZXR0aW5ncy5zZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVk
KFtwcmVmZXJlbmNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVkXSk7CiAgICAgc2V0dGlu
Z3Muc2V0RGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKFtwcmVmZXJlbmNlcyBkaWFnbm9zdGljTG9n
Z2luZ0VuYWJsZWRdKTsKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldExvd1Bvd2Vy
VmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKFtwcmVmZXJlbmNlcyBsb3dQb3dlclZpZGVvQXVk
aW9CdWZmZXJTaXplRW5hYmxlZF0pOworICAgIFdlYkNvcmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0
aW5nczo6c2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoW3ByZWZlcmVuY2Vz
IGxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkXSk7CiAKICAgICBzZXR0aW5ncy5z
ZXRVc2VMZWdhY3lUZXh0QWxpZ25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKFtwcmVmZXJlbmNl
cyB1c2VMZWdhY3lUZXh0QWxpZ25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yXSk7CiAKQEAgLTI5
OTYsMTMgKzI5OTMsMTMgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJl
bgogCiAgICAgc3dpdGNoIChbcHJlZmVyZW5jZXMgc3RvcmFnZUJsb2NraW5nUG9saWN5XSkgewog
ICAgIGNhc2UgV2ViQWxsb3dBbGxTdG9yYWdlOgotICAgICAgICBzZXR0aW5ncy5zZXRTdG9yYWdl
QmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZSk7CisgICAgICAg
IHNldHRpbmdzLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bjo6QWxsb3dBbGxTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJCbG9ja1Ro
aXJkUGFydHlTdG9yYWdlOgotICAgICAgICBzZXR0aW5ncy5zZXRTdG9yYWdlQmxvY2tpbmdQb2xp
Y3koU2VjdXJpdHlPcmlnaW46OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpOworICAgICAgICBzZXR0
aW5ncy5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJs
b2NrVGhpcmRQYXJ0eVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYkJsb2Nr
QWxsU3RvcmFnZToKLSAgICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNl
Y3VyaXR5T3JpZ2luOjpCbG9ja0FsbFN0b3JhZ2UpOworICAgICAgICBzZXR0aW5ncy5zZXRTdG9y
YWdlQmxvY2tpbmdQb2xpY3koV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFn
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzAzMywxMSArMzAzMCwxMSBAQCAtICh2
b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuCiAgICAgc2V0dGluZ3Muc2V0TWF4
UGFyc2VEdXJhdGlvbihbcHJlZmVyZW5jZXMgX21heFBhcnNlRHVyYXRpb25dKTsKICAgICBzZXR0
aW5ncy5zZXRBbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKFtwcmVmZXJlbmNlcyBf
YWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbF0pOwogICAgIHNldHRpbmdzLnNldENv
bnRlbnRDaGFuZ2VPYnNlcnZlckVuYWJsZWQoW3ByZWZlcmVuY2VzIGNvbnRlbnRDaGFuZ2VPYnNl
cnZlckVuYWJsZWRdKTsKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldEF1ZGlvU2Vz
c2lvbkNhdGVnb3J5T3ZlcnJpZGUoW3ByZWZlcmVuY2VzIGF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3Zl
cnJpZGVdKTsKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldE5ldHdvcmtEYXRhVXNh
Z2VUcmFja2luZ0VuYWJsZWQoW3ByZWZlcmVuY2VzIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0Vu
YWJsZWRdKTsKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZh
Y2VOYW1lKFtwcmVmZXJlbmNlcyBuZXR3b3JrSW50ZXJmYWNlTmFtZV0pOworICAgIFdlYkNvcmU6
OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlk
ZShbcHJlZmVyZW5jZXMgYXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZV0pOworICAgIFdlYkNv
cmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5n
RW5hYmxlZChbcHJlZmVyZW5jZXMgbmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZF0pOwor
ICAgIFdlYkNvcmU6OkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0TmV0d29ya0ludGVyZmFj
ZU5hbWUoW3ByZWZlcmVuY2VzIG5ldHdvcmtJbnRlcmZhY2VOYW1lXSk7CiAjaWYgSEFWRShBVktJ
VCkKLSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldEFWS2l0RW5hYmxlZChbcHJlZmVy
ZW5jZXMgYXZLaXRFbmFibGVkXSk7CisgICAgV2ViQ29yZTo6RGVwcmVjYXRlZEdsb2JhbFNldHRp
bmdzOjpzZXRBVktpdEVuYWJsZWQoW3ByZWZlcmVuY2VzIGF2S2l0RW5hYmxlZF0pOwogI2VuZGlm
CiAKICAgICBzZXR0aW5ncy5zZXRQYXNzd29yZEVjaG9FbmFibGVkKFtwcmVmZXJlbmNlcyBfYWxs
b3dQYXNzd29yZEVjaG9dKTsKQEAgLTMwOTEsOCArMzA4OCw4IEBAIC0gKHZvaWQpX3ByZWZlcmVu
Y2VzQ2hhbmdlZDooV2ViUHJlZmVyZW4KICNlbmRpZgogCiAjaWYgVVNFKEFWRk9VTkRBVElPTikK
LSAgICBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoW3By
ZWZlcmVuY2VzIGlzQVZGb3VuZGF0aW9uRW5hYmxlZF0pOwotICAgIERlcHJlY2F0ZWRHbG9iYWxT
ZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChbcHJlZmVyZW5jZXMg
aXNBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkXSk7CisgICAgV2ViQ29yZTo6RGVwcmVj
YXRlZEdsb2JhbFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKFtwcmVmZXJlbmNlcyBp
c0FWRm91bmRhdGlvbkVuYWJsZWRdKTsKKyAgICBXZWJDb3JlOjpEZXByZWNhdGVkR2xvYmFsU2V0
dGluZ3M6OnNldEFWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQoW3ByZWZlcmVuY2VzIGlz
QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZF0pOwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQpAQCAtMzEyMyw3ICszMTIwLDcgQEAgLSAodm9pZClfcHJlZmVyZW5jZXND
aGFuZ2VkOihXZWJQcmVmZXJlbgogCiAgICAgc2V0dGluZ3Muc2V0SGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25FbmFibGVkKFtwcmVmZXJlbmNlcyBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWRdKTsKIAotICAgIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkXSk7CisgICAgV2ViQ29yZTo6RGVwcmVjYXRlZEdsb2JhbFNldHRpbmdz
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChbcHJlZmVyZW5jZXMgcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWRdKTsKIAogICAgIHNldHRpbmdzLnNldFZpZXdwb3J0Rml0RW5h
YmxlZChbcHJlZmVyZW5jZXMgdmlld3BvcnRGaXRFbmFibGVkXSk7CiAgICAgc2V0dGluZ3Muc2V0
Q29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZChbcHJlZmVyZW5jZXMgY29uc3RhbnRQcm9wZXJ0aWVz
RW5hYmxlZF0pOwpAQCAtMzM1MywxNCArMzM1MCwxNCBAQCAtICh2b2lkKV9jYWNoZUZyYW1lTG9h
ZERlbGVnYXRlSW1wbGVtZW50CiAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBnZXQgcmlkIG9m
IHRoaXMgY29kZSBhbmQgdHJhbnNpdGlvbiBhbGwgY2xpZW50cyB0byB1c2luZyBkaWRMYXlvdXQg
aW5zdGVhZCBvZgogICAgIC8vIGRpZEZpcnN0TGF5b3V0SW5GcmFtZSBhbmQgZGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZS4gSW4gdGhlIG1lYW50aW1lLCB0aGlzIGlzIHJlcXVp
cmVkCiAgICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotICAgIFBhZ2UqIHBhZ2Ug
PSBjb3JlKHNlbGYpOworICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmIChwYWdl
KSB7Ci0gICAgICAgIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9u
ZXMgeyBEaWRGaXJzdExheW91dCB9OworICAgICAgICBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0
TWlsZXN0b25lPiBtaWxlc3RvbmVzIHsgV2ViQ29yZTo6RGlkRmlyc3RMYXlvdXQgfTsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBtaWxlc3RvbmVzLmFkZChEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQpOworICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwogI2Vsc2UKICAgICAgICAgaWYgKGNhY2hlLT5k
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRJbkZyYW1lRnVuYykKLSAgICAgICAgICAgIG1p
bGVzdG9uZXMuYWRkKERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisgICAgICAgICAg
ICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQp
OwogI2VuZGlmCiAgICAgICAgIHBhZ2UtPmFkZExheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcyk7
CiAgICAgfQpAQCAtMzQ3Niw3ICszNDczLDcgQEAgKyAodm9pZClfdW5yZWdpc3RlclZpZXdDbGFz
c0FuZFJlcHJlc2VudAogICAgIC8vIEZJWE1FOiBXZSBhbHNvIG5lZWQgdG8gbWFpbnRhaW4gTUlN
RVR5cGUgcmVnaXN0cmF0aW9ucyAod2hpY2ggY2FuIGJlIGR5bmFtaWNhbGx5IGNoYW5nZWQpCiAg
ICAgLy8gaW4gdGhlIFdlYkNvcmUgTUlNRVR5cGUgcmVnaXN0cnkuICBGb3Igbm93IHdlJ3JlIGRv
aW5nIHRoaXMgaW4gYSBzYWZlLCBsaW1pdGVkIG1hbm5lcgogICAgIC8vIHRvIGZpeCA8cmRhcjov
L3Byb2JsZW0vNTM3Mjk4OT4gLSBhIGZ1dHVyZSByZXZhbXBpbmcgb2YgdGhlIGVudGlyZSBzeXN0
ZW0gaXMgbmVjY2VzYXJ5IGZvciBmdXR1cmUgcm9idXN0bmVzcwotICAgIE1JTUVUeXBlUmVnaXN0
cnk6OnN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzKCkucmVtb3ZlKE1JTUVUeXBlKTsKKyAgICBX
ZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpzdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlcygpLnJl
bW92ZShNSU1FVHlwZSk7CiB9CiAKICsgKHZvaWQpX3JlZ2lzdGVyVmlld0NsYXNzOihDbGFzcyl2
aWV3Q2xhc3MgcmVwcmVzZW50YXRpb25DbGFzczooQ2xhc3MpcmVwcmVzZW50YXRpb25DbGFzcyBm
b3JVUkxTY2hlbWU6KE5TU3RyaW5nICopVVJMU2NoZW1lCkBAIC0zNDg4LDcgKzM0ODUsNyBAQCAr
ICh2b2lkKV9yZWdpc3RlclZpZXdDbGFzczooQ2xhc3Mpdmlld0NsCiAgICAgLy8gaW4gdGhlIFdl
YkNvcmUgTUlNRVR5cGUgcmVnaXN0cnkuICBGb3Igbm93IHdlJ3JlIGRvaW5nIHRoaXMgaW4gYSBz
YWZlLCBsaW1pdGVkIG1hbm5lcgogICAgIC8vIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNTM3Mjk4
OT4gLSBhIGZ1dHVyZSByZXZhbXBpbmcgb2YgdGhlIGVudGlyZSBzeXN0ZW0gaXMgbmVjY2VzYXJ5
IGZvciBmdXR1cmUgcm9idXN0bmVzcwogICAgIGlmIChbdmlld0NsYXNzIGNsYXNzXSA9PSBbV2Vi
SFRNTFZpZXcgY2xhc3NdKQotICAgICAgICBNSU1FVHlwZVJlZ2lzdHJ5OjpzdXBwb3J0ZWROb25J
bWFnZU1JTUVUeXBlcygpLmFkZChNSU1FVHlwZSk7CisgICAgICAgIFdlYkNvcmU6Ok1JTUVUeXBl
UmVnaXN0cnk6OnN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzKCkuYWRkKE1JTUVUeXBlKTsKICAg
ICAKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gbWFrZSBfcmVwcmVzZW50YXRpb25FeGlzdHNGb3JV
UkxTY2hlbWUgZmFzdGVyLgogICAgIC8vIFdpdGhvdXQgdGhpcyBzZXQsIHdlJ2QgaGF2ZSB0byBj
cmVhdGUgdGhlIE1JTUUgdHlwZSBlYWNoIHRpbWUuCkBAIC0zNTM5LDggKzM1MzYsOCBAQCArIChC
T09MKV9jYW5IYW5kbGVSZXF1ZXN0OihOU1VSTFJlcXVlc3QgCiAKICsgKE5TU3RyaW5nICopX2Rl
Y29kZURhdGE6KE5TRGF0YSAqKWRhdGEKIHsKLSAgICBIVE1MTmFtZXM6OmluaXQoKTsgLy8gdGhp
cyBtZXRob2QgaXMgdXNlZCBmb3IgaW1wb3J0aW5nIGJvb2ttYXJrcyBhdCBzdGFydHVwLCBzbyBI
VE1MTmFtZXMgYXJlIGxpa2VseSB0byBiZSB1bmluaXRpYWxpemVkIHlldAotICAgIHJldHVybiBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvaHRtbCIpLT5kZWNvZGVBbmRGbHVzaChz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7IC8v
IGJvb2ttYXJrIGZpbGVzIGFyZSBIVE1MCisgICAgV2ViQ29yZTo6SFRNTE5hbWVzOjppbml0KCk7
IC8vIHRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yIGltcG9ydGluZyBib29rbWFya3MgYXQgc3RhcnR1
cCwgc28gSFRNTE5hbWVzIGFyZSBsaWtlbHkgdG8gYmUgdW5pbml0aWFsaXplZCB5ZXQKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2h0bWwiKS0+
ZGVjb2RlQW5kRmx1c2goc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KFtkYXRhIGJ5dGVzXSksIFtk
YXRhIGxlbmd0aF0pOyAvLyBib29rbWFyayBmaWxlcyBhcmUgSFRNTAogfQogCiAtICh2b2lkKV9w
dXNoUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzCkBAIC0zNjIxLDggKzM2MTgsOCBAQCAtICh2
b2lkKV9kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCiAgICAgW05TQXBwIHNldFdpbmRv
d3NOZWVkVXBkYXRlOllFU107CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZShbZnJhbWUgRE9NRG9jdW1lbnRdKTsKLSAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPmZ1bGxzY3JlZW5NYW5hZ2VyKCku
Y3VycmVudEZ1bGxzY3JlZW5FbGVtZW50KCkgOiAwKSB7CisgICAgYXV0byogZG9jdW1lbnQgPSBj
b3JlKFtmcmFtZSBET01Eb2N1bWVudF0pOworICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9jdW1l
bnQgPyBkb2N1bWVudC0+ZnVsbHNjcmVlbk1hbmFnZXIoKS5jdXJyZW50RnVsbHNjcmVlbkVsZW1l
bnQoKSA6IDApIHsKICAgICAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYlZpZXc6Y2xv
c2VGdWxsU2NyZWVuV2l0aExpc3RlbmVyOik7CiAgICAgICAgIGlmIChbX3ByaXZhdGUtPlVJRGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewogICAgICAgICAgICAgV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyICpsaXN0ZW5lciA9IFtbV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVy
IGFsbG9jXSBpbml0V2l0aEVsZW1lbnQ6ZWxlbWVudF07CkBAIC0zNjQwLDcgKzM2MzcsNyBAQCAt
ICh2b2lkKV9jaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24KICAgICBpZiAoX3ByaXZhdGUt
Pl9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBQYWdl
KiBwYWdlID0gX3ByaXZhdGUtPnBhZ2U7CisgICAgYXV0byogcGFnZSA9IF9wcml2YXRlLT5wYWdl
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNzE5LDcgKzM3MTYsNyBA
QCAtIChOU0NhY2hlZFVSTFJlc3BvbnNlICopX2NhY2hlZFJlc3BvbnNlCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9IF9wcml2YXRlLT5wYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5uZXR3b3JraW5nQ29udGV4dCgpLT5zdG9yYWdlU2Vzc2lvbigp
LT5wbGF0Zm9ybVNlc3Npb24oKSkKLSAgICAgICAgY2FjaGVkUmVzcG9uc2UgPSBjYWNoZWRSZXNw
b25zZUZvclJlcXVlc3Qoc3RvcmFnZVNlc3Npb24sIHJlcXVlc3QuZ2V0KCkpOworICAgICAgICBj
YWNoZWRSZXNwb25zZSA9IFdlYkNvcmU6OmNhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChzdG9yYWdl
U2Vzc2lvbiwgcmVxdWVzdC5nZXQoKSk7CiAgICAgZWxzZQogICAgICAgICBjYWNoZWRSZXNwb25z
ZSA9IFtbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0
OnJlcXVlc3QuZ2V0KCldOwogCkBAIC0zNzkxLDIzICszNzg4LDIzIEBAIC0gKEJPT0wpX2Rhc2hi
b2FyZEJlaGF2aW9yOihXZWJEYXNoYm9hcmQKIAogKyAodm9pZClfc2V0U2hvdWxkVXNlRm9udFNt
b290aGluZzooQk9PTClmCiB7Ci0gICAgRm9udENhc2NhZGU6OnNldFNob3VsZFVzZVNtb290aGlu
ZyhmKTsKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZTo6c2V0U2hvdWxkVXNlU21vb3RoaW5nKGYp
OwogfQogCiArIChCT09MKV9zaG91bGRVc2VGb250U21vb3RoaW5nCiB7Ci0gICAgcmV0dXJuIEZv
bnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OnNob3VsZFVzZVNtb290aGluZygpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiArICh2b2lkKV9zZXRVc2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcjooQk9PTClmCiB7
Ci0gICAgc2V0VXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoZik7CisgICAgV2ViQ29yZTo6c2V0
VXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoZik7CiB9CiAKICsgKEJPT0wpX3VzZXNUZXN0TW9k
ZUZvY3VzUmluZ0NvbG9yCiB7Ci0gICAgcmV0dXJuIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9y
KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiB9
CiAjZW5kaWYKIApAQCAtMzkxOCw0MCArMzkxNSw0MCBAQCAtICh2b2lkKXNldEFsd2F5c1Nob3dW
ZXJ0aWNhbFNjcm9sbGVyOihCCiB7CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3ICpzY3Jv
bGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddOwogICAg
IGlmIChmbGFnKSB7Ci0gICAgICAgIFtzY3JvbGx2aWV3IHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9k
ZTpTY3JvbGxiYXJBbHdheXNPbiBhbmRMb2NrOllFU107CisgICAgICAgIFtzY3JvbGx2aWV3IHNl
dFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTpXZWJDb3JlOjpTY3JvbGxiYXJBbHdheXNPbiBhbmRMb2Nr
OllFU107CiAgICAgfSBlbHNlIHsKICAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxTY3Jv
bGxpbmdNb2RlTG9ja2VkOk5PXTsKLSAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxTY3Jv
bGxpbmdNb2RlOlNjcm9sbGJhckF1dG8gYW5kTG9jazpOT107CisgICAgICAgIFtzY3JvbGx2aWV3
IHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTpXZWJDb3JlOjpTY3JvbGxiYXJBdXRvIGFuZExvY2s6
Tk9dOwogICAgIH0KIH0KIAogLSAoQk9PTClhbHdheXNTaG93VmVydGljYWxTY3JvbGxlcgogewog
ICAgIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAqc2Nyb2xsdmlldyA9IFtbW3NlbGYgbWFpbkZy
YW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XTsKLSAgICByZXR1cm4gW3Njcm9sbHZpZXcgdmVy
dGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkXSAmJiBbc2Nyb2xsdmlldyB2ZXJ0aWNhbFNjcm9sbGlu
Z01vZGVdID09IFNjcm9sbGJhckFsd2F5c09uOworICAgIHJldHVybiBbc2Nyb2xsdmlldyB2ZXJ0
aWNhbFNjcm9sbGluZ01vZGVMb2NrZWRdICYmIFtzY3JvbGx2aWV3IHZlcnRpY2FsU2Nyb2xsaW5n
TW9kZV0gPT0gV2ViQ29yZTo6U2Nyb2xsYmFyQWx3YXlzT247CiB9CiAKIC0gKHZvaWQpc2V0QWx3
YXlzU2hvd0hvcml6b250YWxTY3JvbGxlcjooQk9PTClmbGFnCiB7CiAgICAgV2ViRHluYW1pY1Nj
cm9sbEJhcnNWaWV3ICpzY3JvbGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10g
X3Njcm9sbFZpZXddOwogICAgIGlmIChmbGFnKSB7Ci0gICAgICAgIFtzY3JvbGx2aWV3IHNldEhv
cml6b250YWxTY3JvbGxpbmdNb2RlOlNjcm9sbGJhckFsd2F5c09uIGFuZExvY2s6WUVTXTsKKyAg
ICAgICAgW3Njcm9sbHZpZXcgc2V0SG9yaXpvbnRhbFNjcm9sbGluZ01vZGU6V2ViQ29yZTo6U2Ny
b2xsYmFyQWx3YXlzT24gYW5kTG9jazpZRVNdOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFtzY3Jv
bGx2aWV3IHNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlTG9ja2VkOk5PXTsKLSAgICAgICAgW3Nj
cm9sbHZpZXcgc2V0SG9yaXpvbnRhbFNjcm9sbGluZ01vZGU6U2Nyb2xsYmFyQXV0byBhbmRMb2Nr
Ok5PXTsKKyAgICAgICAgW3Njcm9sbHZpZXcgc2V0SG9yaXpvbnRhbFNjcm9sbGluZ01vZGU6V2Vi
Q29yZTo6U2Nyb2xsYmFyQXV0byBhbmRMb2NrOk5PXTsKICAgICB9CiB9CiAKIC0gKHZvaWQpc2V0
UHJvaGliaXRzTWFpbkZyYW1lU2Nyb2xsaW5nOihCT09MKXByb2hpYml0cwogewotICAgIGlmIChG
cmFtZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdKQorICAgIGlmIChhdXRvKiBt
YWluRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCiAgICAgICAgIG1haW5GcmFtZS0+dmll
dygpLT5zZXRQcm9oaWJpdHNTY3JvbGxpbmcocHJvaGliaXRzKTsKIH0KIAogLSAoQk9PTClhbHdh
eXNTaG93SG9yaXpvbnRhbFNjcm9sbGVyCiB7CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3
ICpzY3JvbGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXdd
OwotICAgIHJldHVybiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxvY2tlZF0g
JiYgW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdID09IFNjcm9sbGJhckFsd2F5
c09uOworICAgIHJldHVybiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxvY2tl
ZF0gJiYgW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdID09IFdlYkNvcmU6OlNj
cm9sbGJhckFsd2F5c09uOwogfQogI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogCkBA
IC00MDcyLDE5ICs0MDY5LDE5IEBAIC0gKEJPT0wpX3NldE1lZGlhTGF5ZXI6KENBTGF5ZXIqKWxh
eWVyIGYKIHsKICAgICBXZWJUaHJlYWRMb2NrKCk7CiAKLSAgICBGcmFtZSogbWFpbkNvcmVGcmFt
ZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5D
b3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgRnJhbWVWaWV3KiBjb3JlVmlldyA9IGZyYW1lID8gZnJhbWUtPnZpZXcoKSA6IDA7
CisgICAgYXV0byogbWFpbkNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBm
b3IgKGF1dG8qIGZyYW1lID0gbWFpbkNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBhdXRvKiBjb3JlVmlldyA9IGZyYW1lID8g
ZnJhbWUtPnZpZXcoKSA6IDA7CiAgICAgICAgIGlmICghY29yZVZpZXcpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICAvLyBHZXQgdGhlIEdyYXBoaWNzTGF5ZXIgZm9yIHRoaXMgd2lk
Z2V0LgotICAgICAgICBHcmFwaGljc0xheWVyKiBsYXllckZvcldpZGdldCA9IGNvcmVWaWV3LT5n
cmFwaGljc0xheWVyRm9yUGxhdGZvcm1XaWRnZXQocGx1Z2luVmlldyk7CisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yV2lkZ2V0ID0gY29yZVZpZXctPmdyYXBoaWNzTGF5
ZXJGb3JQbGF0Zm9ybVdpZGdldChwbHVnaW5WaWV3KTsKICAgICAgICAgaWYgKCFsYXllckZvcldp
ZGdldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKGxheWVy
Rm9yV2lkZ2V0LT5jb250ZW50c0xheWVyRm9yTWVkaWEoKSAhPSBsYXllcikgewotICAgICAgICAg
ICAgbGF5ZXJGb3JXaWRnZXQtPnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGxheWVyLCBHcmFw
aGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6TWVkaWEpOworICAgICAgICAgICAgbGF5
ZXJGb3JXaWRnZXQtPnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGxheWVyLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6TWVkaWEpOwogICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGxheWVyIGhpZXJhcmNoeSBjaGFuZ2UgaXMgYXBw
bGllZCBpbW1lZGlhdGVseS4KICAgICAgICAgICAgIGlmIChtYWluQ29yZUZyYW1lLT52aWV3KCkp
CiAgICAgICAgICAgICAgICAgbWFpbkNvcmVGcmFtZS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKQEAgLTQxMDQsMTMgKzQxMDEsMTMgQEAgLSAodm9p
ZClfc2V0TmVlZHNVbnJlc3RyaWN0ZWRHZXRNYXRjaGVkQwogCiAtICh2b2lkKV9hdHRhY2hTY3Jp
cHREZWJ1Z2dlclRvQWxsRnJhbWVzCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBbc2VsZiBf
bWFpbkNvcmVGcmFtZV07IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpCisgICAgZm9yIChhdXRvKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgW2tpdChmcmFt
ZSkgX2F0dGFjaFNjcmlwdERlYnVnZ2VyXTsKIH0KIAogLSAodm9pZClfZGV0YWNoU2NyaXB0RGVi
dWdnZXJGcm9tQWxsRnJhbWVzCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFp
bkNvcmVGcmFtZV07IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
CisgICAgZm9yIChhdXRvKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgW2tpdChmcmFtZSkg
X2RldGFjaFNjcmlwdERlYnVnZ2VyXTsKIH0KIApAQCAtNDE5Niw3ICs0MTkzLDcgQEAgLSAoTlNV
SW50ZWdlcilfZGV2aWNlT3JpZW50YXRpb24KICsgKE5TQXJyYXkgKilfcHJvZHVjdGl2aXR5RG9j
dW1lbnRNSU1FVHlwZXMKIHsKICNpZiBVU0UoUVVJQ0tfTE9PSykKLSAgICByZXR1cm4gW1FMUHJl
dmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGFsbE9iamVjdHNdOworICAgIHJldHVybiBb
V2ViQ29yZTo6UUxQcmV2aWV3R2V0U3VwcG9ydGVkTUlNRVR5cGVzU2V0KCkgYWxsT2JqZWN0c107
CiAjZWxzZQogICAgIHJldHVybiBuaWw7CiAjZW5kaWYKQEAgLTQyMTYsOCArNDIxMyw4IEBAIC0g
KHZvaWQpX3NldEZpeGVkTGF5b3V0U2l6ZTooQ0dTaXplKXNpemUKIHsKICAgICBBU1NFUlQoV2Vi
VGhyZWFkSXNMb2NrZWQoKSk7CiAgICAgX3ByaXZhdGUtPmZpeGVkTGF5b3V0U2l6ZSA9IHNpemU7
Ci0gICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pKSB7Ci0g
ICAgICAgIEludFNpemUgbmV3U2l6ZShzaXplKTsKKyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0g
Y29yZShbc2VsZiBtYWluRnJhbWVdKSkgeworICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG5ld1Np
emUoc2l6ZSk7CiAgICAgICAgIG1haW5GcmFtZS0+dmlldygpLT5zZXRGaXhlZExheW91dFNpemUo
bmV3U2l6ZSk7CiAgICAgICAgIG1haW5GcmFtZS0+dmlldygpLT5zZXRVc2VGaXhlZExheW91dCgh
bmV3U2l6ZS5pc0VtcHR5KCkpOwogICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsK
QEAgLTQyMzMsMTYgKzQyMzAsMTYgQEAgLSAodm9pZClfc3luY2hyb25pemVDdXN0b21GaXhlZFBv
c2l0aW9uTAogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKIAotICAgIEludFJl
Y3QgbmV3UmVjdDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG5ld1JlY3Q7CiAgICAgewogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihfcHJpdmF0ZS0+cGVuZGluZ0ZpeGVkUG9zaXRpb25MYXlvdXRS
ZWN0TXV0ZXgpOwogICAgICAgICBpZiAoQ0dSZWN0SXNOdWxsKF9wcml2YXRlLT5wZW5kaW5nRml4
ZWRQb3NpdGlvbkxheW91dFJlY3QpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXdS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChfcHJpdmF0ZS0+cGVuZGluZ0ZpeGVkUG9zaXRpb25MYXlv
dXRSZWN0KTsKKyAgICAgICAgbmV3UmVjdCA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QoX3By
aXZhdGUtPnBlbmRpbmdGaXhlZFBvc2l0aW9uTGF5b3V0UmVjdCk7CiAgICAgICAgIF9wcml2YXRl
LT5wZW5kaW5nRml4ZWRQb3NpdGlvbkxheW91dFJlY3QgPSBDR1JlY3ROdWxsOwogICAgIH0KIAot
ICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKSkKKyAgICBp
ZiAoYXV0byogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKSkKICAgICAgICAgbWFp
bkZyYW1lLT52aWV3KCktPnNldEN1c3RvbUZpeGVkUG9zaXRpb25MYXlvdXRSZWN0KG5ld1JlY3Qp
OwogfQogCkBAIC00Mjg0LDM5ICs0MjgxLDM5IEBAIC0gKHZvaWQpX3ZpZXdHZW9tZXRyeURpZENo
YW5nZQogewogICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZCgpKTsKICAgICAKLSAgICBpZiAo
RnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKLSAgICAgICAgY29yZUZy
YW1lLT52aWV3cG9ydE9mZnNldENoYW5nZWQoRnJhbWU6OkluY3JlbWVudGFsU2Nyb2xsT2Zmc2V0
KTsKKyAgICBpZiAoYXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdKQorICAg
ICAgICBjb3JlRnJhbWUtPnZpZXdwb3J0T2Zmc2V0Q2hhbmdlZChXZWJDb3JlOjpGcmFtZTo6SW5j
cmVtZW50YWxTY3JvbGxPZmZzZXQpOwogfQogCiAtICh2b2lkKV9vdmVyZmxvd1Njcm9sbFBvc2l0
aW9uQ2hhbmdlZFRvOihDR1BvaW50KW9mZnNldCBmb3JOb2RlOihET01Ob2RlICopZG9tTm9kZSBp
c1VzZXJTY3JvbGw6KEJPT0wpdXNlclNjcm9sbAogewogICAgIC8vIEZpbmQgdGhlIGZyYW1lCi0g
ICAgTm9kZSogbm9kZSA9IGNvcmUoZG9tTm9kZSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+
ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8qIG5vZGUgPSBjb3JlKGRvbU5vZGUpOworICAg
IGF1dG8qIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZyYW1lLT5vdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hh
bmdlZEZvck5vZGUocm91bmRlZEludFBvaW50KG9mZnNldCksIG5vZGUsIHVzZXJTY3JvbGwpOwor
ICAgIGZyYW1lLT5vdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoV2ViQ29yZTo6
cm91bmRlZEludFBvaW50KG9mZnNldCksIG5vZGUsIHVzZXJTY3JvbGwpOwogfQogCiArICh2b2lk
KV9kb05vdFN0YXJ0T2JzZXJ2aW5nTmV0d29ya1JlYWNoYWJpbGl0eQogewotICAgIERlcHJlY2F0
ZWRHbG9iYWxTZXR0aW5nczo6c2V0U2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlv
bih0cnVlKTsKKyAgICBXZWJDb3JlOjpEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnNldFNob3Vs
ZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24odHJ1ZSk7CiB9CiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAtIChOU0FycmF5
ICopX3RvdWNoRXZlbnRSZWdpb25zCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOworICAgIGF1dG8qIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBy
ZWN0czsKICAgICBkb2N1bWVudC0+Z2V0VG91Y2hSZWN0cyhyZWN0cyk7CiAKICAgICBpZiAocmVj
dHMuc2l6ZSgpID09IDApCkBAIC00MzI1LDI2ICs0MzIyLDI0IEBAIC0gKE5TQXJyYXkgKilfdG91
Y2hFdmVudFJlZ2lvbnMKICAgICBOU011dGFibGVBcnJheSAqZXZlbnRSZWdpb25BcnJheSA9IFtb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlY3RzLnNpemUoKV0gYXV0
b3JlbGVhc2VdOwogCiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcg
PSBbW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIFZlY3Rv
cjxJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVjdHMuZW5kKCk7Ci0gICAgZm9yIChW
ZWN0b3I8SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVjdHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSAqaXQ7CisgICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZWN0cy5lbmQoKTsK
KyAgICBmb3IgKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgcmVjdCA9ICppdDsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gVGhlIHRvdWNoIHJlY3RhbmdsZXMgYXJlIGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgZG9jdW1lbnQgKGluc2lkZSB0aGUgV2ViSFRN
TFZpZXcpLCB3aGljaCBpcyBub3QKICAgICAgICAgLy8gdGhlIHNhbWUgYXMgdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBXZWJWaWV3LiBVSVdlYlZpZXcgY3VycmVudGx5IGV4cGVjdHMgdmll
dyBjb29yZGluYXRlcywgc28gd2UnbGwKICAgICAgICAgLy8gY29udmVydCB0aGVtIGhlcmUgbm93
LgotICAgICAgICBJbnRSZWN0IHZpZXdSZWN0ID0gSW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZl
cnRSZWN0OnJlY3QgdG9WaWV3OnNlbGZdKTsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB2aWV3
UmVjdCA9IFdlYkNvcmU6OkludFJlY3QoW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IHRv
VmlldzpzZWxmXSk7CiAKICAgICAgICAgLy8gVGhlIGV2ZW50IHJlZ2lvbiB3YW50cyB0aGlzIHBv
aW50cyBpbiB0aGlzIG9yZGVyOgogICAgICAgICAvLyAgcDItLS0tLS1wMwogICAgICAgICAvLyAg
fCAgICAgICB8CiAgICAgICAgIC8vICBwMS0tLS0tLXA0CiAgICAgICAgIC8vCi0gICAgICAgIFdl
YkV2ZW50UmVnaW9uICpldmVudFJlZ2lvbiA9IFtbV2ViRXZlbnRSZWdpb24gYWxsb2NdIGluaXRX
aXRoUG9pbnRzOkZsb2F0UG9pbnQodmlld1JlY3QueCgpLCB2aWV3UmVjdC5tYXhZKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOkZsb2F0UG9pbnQodmlld1JlY3QueCgpLCB2aWV3UmVjdC55KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOkZsb2F0UG9pbnQodmlld1JlY3QubWF4WCgpLCB2aWV3UmVjdC55
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOkZsb2F0UG9pbnQodmlld1JlY3QubWF4WCgpLCB2aWV3
UmVjdC5tYXhZKCkpXTsKKyAgICAgICAgV2ViRXZlbnRSZWdpb24gKmV2ZW50UmVnaW9uID0gW1tX
ZWJFdmVudFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhQb2ludHM6V2ViQ29yZTo6RmxvYXRQb2ludCh2
aWV3UmVjdC54KCksIHZpZXdSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIDogV2ViQ29yZTo6Rmxv
YXRQb2ludCh2aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSkgOiBXZWJDb3JlOjpGbG9hdFBvaW50
KHZpZXdSZWN0Lm1heFgoKSwgdmlld1JlY3QueSgpKSA6IFdlYkNvcmU6OkZsb2F0UG9pbnQodmll
d1JlY3QubWF4WCgpLCB2aWV3UmVjdC5tYXhZKCkpXTsKICAgICAgICAgaWYgKGV2ZW50UmVnaW9u
KSB7CiAgICAgICAgICAgICBbZXZlbnRSZWdpb25BcnJheSBhZGRPYmplY3Q6ZXZlbnRSZWdpb25d
OwogICAgICAgICAgICAgW2V2ZW50UmVnaW9uIHJlbGVhc2VdOwpAQCAtNDM3NCwxNCArNDM2OSwx
NCBAQCAtICh2b2lkKXNldFVzZXNQYWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VDCiAKIC0gKFdlYlRl
eHRJdGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdClyZWN0CiB7Ci0gICAgSW50
UG9pbnQgcmVjdFN0YXJ0KHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnkpOwotICAgIEludFBv
aW50IHJlY3RFbmQocmVjdC5vcmlnaW4ueCArIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5vcmlnaW4u
eSArIHJlY3Quc2l6ZS5oZWlnaHQpOworICAgIFdlYkNvcmU6OkludFBvaW50IHJlY3RTdGFydChy
ZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0
RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0LnNpemUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0
LnNpemUuaGVpZ2h0KTsKICAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lkZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50
KHJlY3RFbmQpKTsKKyAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lk
ZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3Jl
RnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RFbmQpKTsKICAgICAKICAgICByZXR1
cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChzZWxlY3Rpb25J
bnNpZGVSZWN0LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CiB9CkBA
IC00Mzk3LDcgKzQzOTIsNyBAQCAtICh2b2lkKV9jbGVhclVuZG9SZWRvT3BlcmF0aW9ucwogCiAt
ICh2b2lkKV9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6KE5TU3RyaW5nICopbmFtZSB2YWx1ZToo
TlNTdHJpbmcgKil2YWx1ZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNv
cmVGcmFtZV07CisgICAgYXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwog
ICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS5jb21tYW5kKG5hbWUpLmV4ZWN1dGUodmFsdWUpOwpAQCAtNDQ0Miw4ICs0NDM3LDggQEAg
LSAodm9pZClfc2V0UG9zdHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nTgogCiAtIChCT09MKV9pc1Vz
aW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZwogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2Vs
ZiBfbWFpbkNvcmVGcmFtZV07Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKKyAg
ICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgZm9yIChhdXRv
KiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoY29yZUZyYW1lKSkgewogICAgICAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtba2l0
KGZyYW1lKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiAgICAgICAgIGlmIChbZG9jdW1lbnRW
aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYgWyhXZWJIVE1MVmlldyAq
KWRvY3VtZW50VmlldyBfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmddKQogICAgICAgICAg
ICAgcmV0dXJuIFlFUzsKQEAgLTQ0OTEsOSArNDQ4Niw5IEBAIC0gKE5TRGljdGlvbmFyeSAqKV9j
b250ZW50c09mVXNlckludGVyZmEKIAogLSAoQk9PTClfaXNTb2Z0d2FyZVJlbmRlcmFibGUKIHsK
LSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpKSB7CisgICAgYXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJh
bWVdOworICAgIGZvciAoYXV0byogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHZpZXcgPSBmcmFtZS0+dmlldygpKSB7CiAgICAgICAgICAgICBpZiAoIXZpZXctPmlzU29mdHdh
cmVSZW5kZXJhYmxlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5POwogICAgICAgICB9CkBA
IC00NTA0LDE1ICs0NDk5LDE1IEBAIC0gKEJPT0wpX2lzU29mdHdhcmVSZW5kZXJhYmxlCiAKIC0g
KHZvaWQpc2V0VHJhY2tzUmVwYWludHM6KEJPT0wpZmxhZwogewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07Ci0gICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNv
cmVGcmFtZS0+dmlldygpKQorICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZy
YW1lXTsKKyAgICBpZiAoYXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpKQogICAgICAgICB2
aWV3LT5zZXRUcmFja3NSZXBhaW50cyhmbGFnKTsKIH0KIAogLSAoQk9PTClpc1RyYWNraW5nUmVw
YWludHMKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwot
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkKKyAgICBhdXRvKiBj
b3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgaWYgKGF1dG8qIHZpZXcgPSBj
b3JlRnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIHZpZXctPmlzVHJhY2tpbmdSZXBhaW50
cygpOwogICAgIAogICAgIHJldHVybiBOTzsKQEAgLTQ1MjAsMjMgKzQ1MTUsMjMgQEAgLSAoQk9P
TClpc1RyYWNraW5nUmVwYWludHMKIAogLSAodm9pZClyZXNldFRyYWNrZWRSZXBhaW50cwogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07Ci0gICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpKQorICAgIGF1dG8qIGNvcmVGcmFtZSA9
IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBpZiAoYXV0byogdmlldyA9IGNvcmVGcmFtZS0+
dmlldygpKQogICAgICAgICB2aWV3LT5yZXNldFRyYWNrZWRSZXBhaW50cygpOwogfQogCiAtIChO
U0FycmF5Kil0cmFja2VkUmVwYWludFJlY3RzCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtz
ZWxmIF9tYWluQ29yZUZyYW1lXTsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBjb3JlRnJhbWUtPnZp
ZXcoKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAg
YXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmlldyB8fCAhdmlldy0+
aXNUcmFja2luZ1JlcGFpbnRzKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gdmlldy0+dHJhY2tlZFJlcGFpbnRSZWN0
cygpOworICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMg
PSB2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgTlNNdXRhYmxlQXJyYXkqIHJlY3Rz
QXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlcGFpbnRS
ZWN0cy5zaXplKCldOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXBhaW50
UmVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIFtyZWN0c0FycmF5IGFkZE9iamVjdDpbTlNWYWx1
ZSB2YWx1ZVdpdGhSZWN0OnNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QocmVwYWludFJlY3RzW2ld
KSldXTsKKyAgICAgICAgW3JlY3RzQXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJl
Y3Q6c25hcHBlZEludFJlY3QoV2ViQ29yZTo6TGF5b3V0UmVjdChyZXBhaW50UmVjdHNbaV0pKV1d
OwogCiAgICAgcmV0dXJuIFtyZWN0c0FycmF5IGF1dG9yZWxlYXNlXTsKIH0KQEAgLTQ1NTAsMTcg
KzQ1NDUsMTcgQEAgLSAoTlNQYXN0ZWJvYXJkICopX2luc2VydGlvblBhc3RlYm9hcmQKIAogKyAo
dm9pZClfYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnlXaXRoU291cmNlT3JpZ2luOihOU1N0
cmluZyAqKXNvdXJjZU9yaWdpbiBkZXN0aW5hdGlvblByb3RvY29sOihOU1N0cmluZyAqKWRlc3Rp
bmF0aW9uUHJvdG9jb2wgZGVzdGluYXRpb25Ib3N0OihOU1N0cmluZyAqKWRlc3RpbmF0aW9uSG9z
dCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczooQk9PTClhbGxvd0Rlc3RpbmF0aW9uU3ViZG9t
YWlucwogewotICAgIFNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRy
eShTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhzb3VyY2VPcmlnaW4pLmdldCgpLCBk
ZXN0aW5hdGlvblByb3RvY29sLCBkZXN0aW5hdGlvbkhvc3QsIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKTsKKyAgICBXZWJDb3JlOjpTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoc291
cmNlT3JpZ2luKS5nZXQoKSwgZGVzdGluYXRpb25Qcm90b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKICsgKHZvaWQpX3JlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5V2l0aFNvdXJjZU9yaWdpbjooTlNTdHJpbmcgKilzb3VyY2VPcmln
aW4gZGVzdGluYXRpb25Qcm90b2NvbDooTlNTdHJpbmcgKilkZXN0aW5hdGlvblByb3RvY29sIGRl
c3RpbmF0aW9uSG9zdDooTlNTdHJpbmcgKilkZXN0aW5hdGlvbkhvc3QgYWxsb3dEZXN0aW5hdGlv
blN1YmRvbWFpbnM6KEJPT0wpYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMKIHsKLSAgICBTZWN1
cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoc291cmNlT3JpZ2luKS5nZXQoKSwgZGVzdGluYXRpb25Qcm90
b2NvbCwgZGVzdGluYXRpb25Ib3N0LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAg
V2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHNvdXJjZU9yaWdpbiku
Z2V0KCksIGRlc3RpbmF0aW9uUHJvdG9jb2wsIGRlc3RpbmF0aW9uSG9zdCwgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpOwogfQogCiArICh2b2lkKV9yZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlz
dHMKIHsKLSAgICBTZWN1cml0eVBvbGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7
CisgICAgV2ViQ29yZTo6U2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0
cygpOwogfQogCiAtIChCT09MKV9pc1ZpZXdWaXNpYmxlCkBAIC00NjM2LDcgKzQ2MzEsNyBAQCAr
ICh2b2lkKV9hZGRVc2VyU2NyaXB0VG9Hcm91cDooTlNTdHJpbmcgCiAgICAgaWYgKCF3b3JsZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB1c2VyU2NyaXB0ID0gbWFrZVVuaXF1ZTxVc2Vy
U2NyaXB0Pihzb3VyY2UsIHVybCwgdG9TdHJpbmdWZWN0b3Iod2hpdGVsaXN0KSwgdG9TdHJpbmdW
ZWN0b3IoYmxhY2tsaXN0KSwgaW5qZWN0aW9uVGltZSA9PSBXZWJJbmplY3RBdERvY3VtZW50U3Rh
cnQgPyBJbmplY3RBdERvY3VtZW50U3RhcnQgOiBJbmplY3RBdERvY3VtZW50RW5kLCBpbmplY3Rl
ZEZyYW1lcyA9PSBXZWJJbmplY3RJbkFsbEZyYW1lcyA/IEluamVjdEluQWxsRnJhbWVzIDogSW5q
ZWN0SW5Ub3BGcmFtZU9ubHkpOworICAgIGF1dG8gdXNlclNjcmlwdCA9IG1ha2VVbmlxdWU8V2Vi
Q29yZTo6VXNlclNjcmlwdD4oc291cmNlLCB1cmwsIHRvU3RyaW5nVmVjdG9yKHdoaXRlbGlzdCks
IHRvU3RyaW5nVmVjdG9yKGJsYWNrbGlzdCksIGluamVjdGlvblRpbWUgPT0gV2ViSW5qZWN0QXRE
b2N1bWVudFN0YXJ0ID8gV2ViQ29yZTo6SW5qZWN0QXREb2N1bWVudFN0YXJ0IDogV2ViQ29yZTo6
SW5qZWN0QXREb2N1bWVudEVuZCwgaW5qZWN0ZWRGcmFtZXMgPT0gV2ViSW5qZWN0SW5BbGxGcmFt
ZXMgPyBXZWJDb3JlOjpJbmplY3RJbkFsbEZyYW1lcyA6IFdlYkNvcmU6OkluamVjdEluVG9wRnJh
bWVPbmx5KTsKICAgICB2aWV3R3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJT
Y3JpcHQoKmNvcmUod29ybGQpLCBXVEZNb3ZlKHVzZXJTY3JpcHQpKTsKIH0KIApAQCAtNDY1OSw4
ICs0NjU0LDggQEAgKyAodm9pZClfYWRkVXNlclN0eWxlU2hlZXRUb0dyb3VwOihOU1N0cgogICAg
IGlmICghd29ybGQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3R5bGVTaGVldCA9IG1h
a2VVbmlxdWU8VXNlclN0eWxlU2hlZXQ+KHNvdXJjZSwgdXJsLCB0b1N0cmluZ1ZlY3Rvcih3aGl0
ZWxpc3QpLCB0b1N0cmluZ1ZlY3RvcihibGFja2xpc3QpLCBpbmplY3RlZEZyYW1lcyA9PSBXZWJJ
bmplY3RJbkFsbEZyYW1lcyA/IEluamVjdEluQWxsRnJhbWVzIDogSW5qZWN0SW5Ub3BGcmFtZU9u
bHksIFVzZXJTdHlsZVVzZXJMZXZlbCk7Ci0gICAgdmlld0dyb3VwLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKS5hZGRVc2VyU3R5bGVTaGVldCgqY29yZSh3b3JsZCksIFdURk1vdmUoc3R5bGVTaGVl
dCksIEluamVjdEluRXhpc3RpbmdEb2N1bWVudHMpOworICAgIGF1dG8gc3R5bGVTaGVldCA9IG1h
a2VVbmlxdWU8V2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+KHNvdXJjZSwgdXJsLCB0b1N0cmluZ1Zl
Y3Rvcih3aGl0ZWxpc3QpLCB0b1N0cmluZ1ZlY3RvcihibGFja2xpc3QpLCBpbmplY3RlZEZyYW1l
cyA9PSBXZWJJbmplY3RJbkFsbEZyYW1lcyA/IFdlYkNvcmU6OkluamVjdEluQWxsRnJhbWVzIDog
V2ViQ29yZTo6SW5qZWN0SW5Ub3BGcmFtZU9ubHksIFdlYkNvcmU6OlVzZXJTdHlsZVVzZXJMZXZl
bCk7CisgICAgdmlld0dyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVT
aGVldCgqY29yZSh3b3JsZCksIFdURk1vdmUoc3R5bGVTaGVldCksIFdlYkNvcmU6OkluamVjdElu
RXhpc3RpbmdEb2N1bWVudHMpOwogfQogCiArICh2b2lkKV9yZW1vdmVVc2VyU2NyaXB0RnJvbUdy
b3VwOihOU1N0cmluZyAqKWdyb3VwTmFtZSB3b3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZCB1
cmw6KE5TVVJMICopdXJsCkBAIC00NzQyLDcgKzQ3MzcsNyBAQCArICh2b2lkKV9yZW1vdmVBbGxV
c2VyQ29udGVudEZyb21Hcm91cDooCiAKIC0gKEJPT0wpYWxsb3dzTmV3Q1NTQW5pbWF0aW9uc1do
aWxlU3VzcGVuZGVkCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVd
KTsKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CiAgICAgaWYgKGZy
YW1lKQogICAgICAgICByZXR1cm4gZnJhbWUtPmFuaW1hdGlvbigpLmFsbG93c05ld0FuaW1hdGlv
bnNXaGlsZVN1c3BlbmRlZCgpOwogCkBAIC00NzUxLDcgKzQ3NDYsNyBAQCAtIChCT09MKWFsbG93
c05ld0NTU0FuaW1hdGlvbnNXaGlsZVN1c3BlCiAKIC0gKHZvaWQpc2V0QWxsb3dzTmV3Q1NTQW5p
bWF0aW9uc1doaWxlU3VzcGVuZGVkOihCT09MKWFsbG93ZWQKIHsKLSAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgIGF1dG8qIGZyYW1lID0gY29yZShbc2VsZiBt
YWluRnJhbWVdKTsKICAgICBpZiAoZnJhbWUpCiAgICAgICAgIGZyYW1lLT5hbmltYXRpb24oKS5z
ZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYWxsb3dlZCk7CiB9CkBAIC00NzU5
LDcgKzQ3NTQsNyBAQCAtICh2b2lkKXNldEFsbG93c05ld0NTU0FuaW1hdGlvbnNXaGlsZVN1CiAt
IChCT09MKWNzc0FuaW1hdGlvbnNTdXNwZW5kZWQKIHsKICAgICAvLyBzaG91bGQgYXNrIHRoZSBw
YWdlIQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgYXV0
byogZnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAgIGlmIChmcmFtZSkKICAgICAg
ICAgcmV0dXJuIGZyYW1lLT5hbmltYXRpb24oKS5pc1N1c3BlbmRlZCgpOwogCkBAIC00NzY4LDcg
KzQ3NjMsNyBAQCAtIChCT09MKWNzc0FuaW1hdGlvbnNTdXNwZW5kZWQKIAogLSAodm9pZClzZXRD
U1NBbmltYXRpb25zU3VzcGVuZGVkOihCT09MKXN1c3BlbmRlZAogewotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgYXV0byogZnJhbWUgPSBjb3JlKFtzZWxm
IG1haW5GcmFtZV0pOwogICAgIGlmIChzdXNwZW5kZWQgPT0gZnJhbWUtPmFuaW1hdGlvbigpLmlz
U3VzcGVuZGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC00NzgwLDEyICs0Nzc1
LDEyIEBAIC0gKHZvaWQpc2V0Q1NTQW5pbWF0aW9uc1N1c3BlbmRlZDooQk9PTCkKIAogKyAodm9p
ZClfc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbjooQk9PTClmb3JiaWRkZW4gZm9yVVJMU2No
ZW1lOihOU1N0cmluZyAqKXNjaGVtZQogewotICAgIFNjaGVtZVJlZ2lzdHJ5OjpzZXREb21haW5S
ZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGZvcmJpZGRlbiwgc2NoZW1lKTsKKyAgICBX
ZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVS
TFNjaGVtZShmb3JiaWRkZW4sIHNjaGVtZSk7CiB9CiAKICsgKHZvaWQpX3JlZ2lzdGVyVVJMU2No
ZW1lQXNTZWN1cmU6KE5TU3RyaW5nICopc2NoZW1lCiB7Ci0gICAgU2NoZW1lUmVnaXN0cnk6OnJl
Z2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoc2NoZW1lKTsKKyAgICBXZWJDb3JlOjpTY2hlbWVSZWdp
c3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShzY2hlbWUpOwogfQogCiArICh2b2lkKV9y
ZWdpc3RlclVSTFNjaGVtZUFzQWxsb3dpbmdMb2NhbFN0b3JhZ2VBY2Nlc3NJblByaXZhdGVCcm93
c2luZzooTlNTdHJpbmcgKilzY2hlbWUKQEAgLTQ3OTQsMTQgKzQ3ODksMTQgQEAgKyAodm9pZClf
cmVnaXN0ZXJVUkxTY2hlbWVBc0FsbG93aW5nTG9jYQogCiArICh2b2lkKV9yZWdpc3RlclVSTFNj
aGVtZUFzQWxsb3dpbmdEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nOihOU1N0cmluZyAq
KXNjaGVtZQogewotICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzQWxsb3dp
bmdEYXRhYmFzZUFjY2Vzc0luUHJpdmF0ZUJyb3dzaW5nKHNjaGVtZSk7CisgICAgV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNBbGxvd2luZ0RhdGFiYXNlQWNjZXNz
SW5Qcml2YXRlQnJvd3Npbmcoc2NoZW1lKTsKIH0KIAogLSAodm9pZClfc2NhbGVXZWJWaWV3Oihm
bG9hdClzY2FsZSBhdE9yaWdpbjooTlNQb2ludClvcmlnaW4KIHsKICAgICBbc2VsZiBoaWRlRm9y
bVZhbGlkYXRpb25NZXNzYWdlXTsKIAotICAgIF9wcml2YXRlLT5wYWdlLT5zZXRQYWdlU2NhbGVG
YWN0b3Ioc2NhbGUsIEludFBvaW50KG9yaWdpbikpOworICAgIF9wcml2YXRlLT5wYWdlLT5zZXRQ
YWdlU2NhbGVGYWN0b3Ioc2NhbGUsIFdlYkNvcmU6OkludFBvaW50KG9yaWdpbikpOwogfQogCiAt
IChmbG9hdClfdmlld1NjYWxlRmFjdG9yCkBAIC00ODExLDQyICs0ODA2LDQyIEBAIC0gKGZsb2F0
KV92aWV3U2NhbGVGYWN0b3IKIAogLSAodm9pZClfc2V0VXNlRml4ZWRMYXlvdXQ6KEJPT0wpZml4
ZWQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOworICAg
IGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gY29yZUZyYW1l
LT52aWV3KCk7CisgICAgYXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgdmlldy0+c2V0VXNlRml4ZWRMYXlvdXQoZml4
ZWQpOwogICAgIGlmICghZml4ZWQpCi0gICAgICAgIHZpZXctPnNldEZpeGVkTGF5b3V0U2l6ZShJ
bnRTaXplKCkpOworICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2ViQ29yZTo6SW50
U2l6ZSgpKTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogLSAodm9pZClfc2V0Rml4
ZWRMYXlvdXRTaXplOihOU1NpemUpc2l6ZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2Vs
ZiBfbWFpbkNvcmVGcmFtZV07CisgICAgYXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3Jl
RnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
RnJhbWVWaWV3KiB2aWV3ID0gY29yZUZyYW1lLT52aWV3KCk7CisgICAgYXV0byogdmlldyA9IGNv
cmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIHZpZXctPnNldEZpeGVkTGF5b3V0U2l6ZShJbnRTaXplKHNpemUpKTsKKyAgICB2aWV3LT5z
ZXRGaXhlZExheW91dFNpemUoV2ViQ29yZTo6SW50U2l6ZShzaXplKSk7CiAgICAgdmlldy0+Zm9y
Y2VMYXlvdXQoKTsKIH0KICNlbmRpZgogCiAtIChCT09MKV91c2VGaXhlZExheW91dAogewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgYXV0byogY29y
ZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAg
ICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gY29yZUZyYW1lLT52
aWV3KCk7CisgICAgYXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmll
dykKICAgICAgICAgcmV0dXJuIE5POwogICAgIApAQCAtNDg1NiwxMyArNDg1MSwxMyBAQCAtIChC
T09MKV91c2VGaXhlZExheW91dAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogLSAoTlNTaXpl
KV9maXhlZExheW91dFNpemUKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsK
ICAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkludFNpemUoKTsKICAgICAKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBj
b3JlRnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvKiB2aWV3ID0gY29yZUZyYW1lLT52aWV3KCk7CiAg
ICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworICAgICAgICByZXR1cm4g
V2ViQ29yZTo6SW50U2l6ZSgpOwogCiAgICAgcmV0dXJuIHZpZXctPmZpeGVkTGF5b3V0U2l6ZSgp
OwogfQpAQCAtNDg3MCwyNiArNDg2NSwyNiBAQCAtIChOU1NpemUpX2ZpeGVkTGF5b3V0U2l6ZQog
CiAtICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooV2ViUGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlv
bk1vZGUKIHsKLSAgICBQYWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0g
Y29yZShzZWxmKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhZ2lu
YXRpb24gcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICBhdXRvIHBhZ2luYXRp
b24gPSBwYWdlLT5wYWdpbmF0aW9uKCk7CiAgICAgc3dpdGNoIChwYWdpbmF0aW9uTW9kZSkgewog
ICAgIGNhc2UgV2ViUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDoKLSAgICAgICAgcGFnaW5hdGlv
bi5tb2RlID0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7CisgICAgICAgIHBhZ2luYXRpb24ubW9k
ZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdlYlBhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ6Ci0gICAgICAgIHBhZ2luYXRpb24u
bW9kZSA9IFBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVkOworICAgICAgICBwYWdpbmF0
aW9uLm1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OgotICAg
ICAgICBwYWdpbmF0aW9uLm1vZGUgPSBQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDsK
KyAgICAgICAgcGFnaW5hdGlvbi5tb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xl
ZnRQYWdpbmF0ZWQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViUGFnaW5hdGlvbk1vZGVU
b3BUb0JvdHRvbToKLSAgICAgICAgcGFnaW5hdGlvbi5tb2RlID0gUGFnaW5hdGlvbjo6VG9wVG9C
b3R0b21QYWdpbmF0ZWQ7CisgICAgICAgIHBhZ2luYXRpb24ubW9kZSA9IFdlYkNvcmU6OlBhZ2lu
YXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdl
YlBhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Ci0gICAgICAgIHBhZ2luYXRpb24ubW9kZSA9IFBh
Z2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOworICAgICAgICBwYWdpbmF0aW9uLm1vZGUg
PSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwpAQCAtNDkwMCwyMCArNDg5NSwyMCBA
QCAtICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooV2ViUGFnaW5hdGlvCiAKIC0gKFdlYlBhZ2lu
YXRpb25Nb2RlKV9wYWdpbmF0aW9uTW9kZQogewotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYp
OworICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIFdlYlBhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CiAKICAgICBzd2l0Y2ggKHBhZ2Ut
PnBhZ2luYXRpb24oKS5tb2RlKSB7Ci0gICAgY2FzZSBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDoK
KyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOgogICAgICAgICByZXR1
cm4gV2ViUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZDsKLSAgICBjYXNlIFBhZ2luYXRpb246Okxl
ZnRUb1JpZ2h0UGFnaW5hdGVkOgorICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6TGVmdFRv
UmlnaHRQYWdpbmF0ZWQ6CiAgICAgICAgIHJldHVybiBXZWJQYWdpbmF0aW9uTW9kZUxlZnRUb1Jp
Z2h0OwotICAgIGNhc2UgUGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ6CisgICAgY2Fz
ZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRlZDoKICAgICAgICAgcmV0
dXJuIFdlYlBhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7Ci0gICAgY2FzZSBQYWdpbmF0aW9uOjpU
b3BUb0JvdHRvbVBhZ2luYXRlZDoKKyAgICBjYXNlIFdlYkNvcmU6OlBhZ2luYXRpb246OlRvcFRv
Qm90dG9tUGFnaW5hdGVkOgogICAgICAgICByZXR1cm4gV2ViUGFnaW5hdGlvbk1vZGVUb3BUb0Jv
dHRvbTsKLSAgICBjYXNlIFBhZ2luYXRpb246OkJvdHRvbVRvVG9wUGFnaW5hdGVkOgorICAgIGNh
c2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ6CiAgICAgICAgIHJl
dHVybiBXZWJQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOwogICAgIH0KIApAQCAtNDkyMyw3ICs0
OTE4LDcgQEAgLSAoV2ViUGFnaW5hdGlvbk1vZGUpX3BhZ2luYXRpb25Nb2RlCiAKIC0gKHZvaWQp
X2xpc3RlbkZvckxheW91dE1pbGVzdG9uZXM6KFdlYkxheW91dE1pbGVzdG9uZXMpbGF5b3V0TWls
ZXN0b25lcwogewotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8qIHBhZ2Ug
PSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00OTMy
LDcgKzQ5MjcsNyBAQCAtICh2b2lkKV9saXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzOihXZWJMCiAK
IC0gKFdlYkxheW91dE1pbGVzdG9uZXMpX2xheW91dE1pbGVzdG9uZXMKIHsKLSAgICBQYWdlKiBw
YWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00OTc3LDExICs0OTcyLDExIEBAIC0gKHZv
aWQpc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmwKIAogLSAodm9pZClfc2V0UGFnaW5h
dGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCliZWhhdmVzTGlrZUNvbHVtbnMKIHsKLSAgICBQ
YWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhZ2luYXRpb24gcGFnaW5hdGlv
biA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICBhdXRvIHBhZ2luYXRpb24gPSBwYWdlLT5wYWdp
bmF0aW9uKCk7CiAgICAgcGFnaW5hdGlvbi5iZWhhdmVzTGlrZUNvbHVtbnMgPSBiZWhhdmVzTGlr
ZUNvbHVtbnM7CiAKICAgICBwYWdlLT5zZXRQYWdpbmF0aW9uKHBhZ2luYXRpb24pOwpAQCAtNDk4
OSw3ICs0OTg0LDcgQEAgLSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucwog
CiAtIChCT09MKV9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCiB7Ci0gICAgUGFnZSogcGFn
ZSA9IGNvcmUoc2VsZik7CisgICAgYXV0byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gTk87CiAKQEAgLTQ5OTgsMTEgKzQ5OTMsMTEgQEAgLSAoQk9P
TClfcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucwogCiAtICh2b2lkKV9zZXRQYWdlTGVuZ3Ro
OihDR0Zsb2F0KXBhZ2VMZW5ndGgKIHsKLSAgICBQYWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAg
ICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFBhZ2luYXRpb24gcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAg
ICBhdXRvIHBhZ2luYXRpb24gPSBwYWdlLT5wYWdpbmF0aW9uKCk7CiAgICAgcGFnaW5hdGlvbi5w
YWdlTGVuZ3RoID0gcGFnZUxlbmd0aDsKIAogICAgIHBhZ2UtPnNldFBhZ2luYXRpb24ocGFnaW5h
dGlvbik7CkBAIC01MDEwLDcgKzUwMDUsNyBAQCAtICh2b2lkKV9zZXRQYWdlTGVuZ3RoOihDR0Zs
b2F0KXBhZ2VMZW5nCiAKIC0gKENHRmxvYXQpX3BhZ2VMZW5ndGgKIHsKLSAgICBQYWdlKiBwYWdl
ID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiAxOwogCkBAIC01MDE5LDE4ICs1MDE0LDE4IEBAIC0gKENHRmxv
YXQpX3BhZ2VMZW5ndGgKIAogLSAodm9pZClfc2V0R2FwQmV0d2VlblBhZ2VzOihDR0Zsb2F0KXBh
Z2VHYXAKIHsKLSAgICBQYWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0g
Y29yZShzZWxmKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhZ2lu
YXRpb24gcGFnaW5hdGlvbiA9IHBhZ2UtPnBhZ2luYXRpb24oKTsKKyAgICBhdXRvIHBhZ2luYXRp
b24gPSBwYWdlLT5wYWdpbmF0aW9uKCk7CiAgICAgcGFnaW5hdGlvbi5nYXAgPSBwYWdlR2FwOwog
ICAgIHBhZ2UtPnNldFBhZ2luYXRpb24ocGFnaW5hdGlvbik7CiB9CiAKIC0gKENHRmxvYXQpX2dh
cEJldHdlZW5QYWdlcwogewotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8q
IHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAK
QEAgLTUwMzksNyArNTAzNCw3IEBAIC0gKENHRmxvYXQpX2dhcEJldHdlZW5QYWdlcwogCiAtICh2
b2lkKV9zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkOihCT09MKWxpbmVHcmlkRW5hYmxlZAog
ewotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNl
bGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtNTA0OCw3ICs1
MDQzLDcgQEAgLSAodm9pZClfc2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZDooQgogCiAtIChC
T09MKV9wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkCiB7Ci0gICAgUGFnZSogcGFnZSA9IGNvcmUo
c2VsZik7CisgICAgYXV0byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm4gTk87CiAgICAgCkBAIC01MDU3LDcgKzUwNTIsNyBAQCAtIChCT09MKV9wYWdp
bmF0aW9uTGluZUdyaWRFbmFibGVkCiAKIC0gKE5TVUludGVnZXIpX3BhZ2VDb3VudAogewotICAg
IFBhZ2UqIHBhZ2UgPSBjb3JlKHNlbGYpOworICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTUxMDUsMTIgKzUxMDAsMTIg
QEAgKyAodm9pZClfc2V0TG9hZFJlc291cmNlc1NlcmlhbGx5OihCT09MKQogCiArIChCT09MKV9I
VFRQUGlwZWxpbmluZ0VuYWJsZWQKIHsKLSAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpodHRw
UGlwZWxpbmluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
OjpodHRwUGlwZWxpbmluZ0VuYWJsZWQoKTsKIH0KIAogKyAodm9pZClfc2V0SFRUUFBpcGVsaW5p
bmdFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKLSAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQ
aXBlbGluaW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6
OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogLSAodm9pZClfZGlkU2Ny
b2xsRG9jdW1lbnRJbkZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CkBAIC01MjU2
LDcgKzUyNTEsNyBAQCAtICh2b2lkKXNob3dDYW5kaWRhdGVzOihOU0FycmF5PE5TVGV4dENoCiAK
IC0gKEJPT0wpc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMKIHsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuIE5POwogCkBAIC01NTkxLDcgKzU1ODYsNyBAQCAtICh2b2lkKXJl
bW92ZVBsdWdpbkluc3RhbmNlVmlldzooTlNWaWV3CiAgICAgICAgIFtfcHJpdmF0ZS0+cGx1Z2lu
RGF0YWJhc2UgcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3OnZpZXddOyAgICAKIH0KIAotLSAodm9p
ZClyZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXdzRm9yOihXZWJGcmFtZSopd2ViRnJhbWUgCistICh2
b2lkKXJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6KFdlYkZyYW1lKil3ZWJGcmFtZQogewog
ICAgIGlmIChfcHJpdmF0ZS0+cGx1Z2luRGF0YWJhc2UpCiAgICAgICAgIFtfcHJpdmF0ZS0+cGx1
Z2luRGF0YWJhc2UgcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3c0Zvcjp3ZWJGcmFtZV07ICAgIApA
QCAtNTY3Myw3ICs1NjY4LDcgQEAgKyAoTlNTdHJpbmcgKilVUkxUaXRsZUZyb21QYXN0ZWJvYXJk
OihOUwogCiArICh2b2lkKXJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbDooTlNTdHJpbmcgKilwcm90
b2NvbAogewotICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwocHJv
dG9jb2wpOworICAgIFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFz
TG9jYWwocHJvdG9jb2wpOwogfQogCiAtIChpZClfaW5pdFdpdGhBcmd1bWVudHM6KE5TRGljdGlv
bmFyeSAqKSBhcmd1bWVudHMKQEAgLTYwNDUsNyArNjA0MCw3IEBAIC0gKHZvaWQpdmlld0RpZE1v
dmVUb1dpbmRvdwogLSAodm9pZClkb1dpbmRvd0RpZENoYW5nZVNjcmVlbgogewogICAgIGlmIChf
cHJpdmF0ZSAmJiBfcHJpdmF0ZS0+cGFnZSkKLSAgICAgICAgX3ByaXZhdGUtPnBhZ2UtPmNocm9t
ZSgpLndpbmRvd1NjcmVlbkRpZENoYW5nZSgoUGxhdGZvcm1EaXNwbGF5SUQpW1tbW1tzZWxmIHdp
bmRvd10gc2NyZWVuXSBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5OkAiTlNTY3JlZW5O
dW1iZXIiXSBpbnRWYWx1ZV0pOworICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+Y2hyb21lKCkud2lu
ZG93U2NyZWVuRGlkQ2hhbmdlKChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRClbW1tbW3NlbGYg
d2luZG93XSBzY3JlZW5dIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6QCJOU1NjcmVl
bk51bWJlciJdIGludFZhbHVlXSk7CiB9CiAKIC0gKHZvaWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0
ZQpAQCAtNjEzNSw3ICs2MTMwLDcgQEAgLSAodm9pZClfdXBkYXRlU2NyZWVuU2NhbGVGcm9tV2lu
ZG93CiAgICAgaWYgKFdBS1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XSkKICAgICAgICAg
c2NhbGVGYWN0b3IgPSBbd2luZG93IHNjcmVlblNjYWxlXTsKICAgICBlbHNlCi0gICAgICAgIHNj
YWxlRmFjdG9yID0gc2NyZWVuU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgc2NhbGVGYWN0b3IgPSBX
ZWJDb3JlOjpzY3JlZW5TY2FsZUZhY3RvcigpOwogCiAgICAgX3ByaXZhdGUtPnBhZ2UtPnNldERl
dmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKTsKIH0KQEAgLTYzNzUsNyArNjM3MCw3IEBAIC0g
KEJPT0wpZ29Ub0JhY2tGb3J3YXJkSXRlbTooV2ViSGlzdG9yeUkKICAgICAgICAgcmV0dXJuIE5P
OwogCiAgICAgQVNTRVJUKGl0ZW0pOwotICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbSgqY29y
ZShpdGVtKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQ6Ok5vKTsKKyAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oKmNvcmUo
aXRlbSksIFdlYkNvcmU6OkZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCwgV2ViQ29y
ZTo6U2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObyk7CiAgICAgcmV0dXJuIFlFUzsKIH0K
IApAQCAtNjM5OSw3ICs2Mzk0LDcgQEAgLSAodm9pZClfc2V0Wm9vbU11bHRpcGxpZXI6KGZsb2F0
KW11bHRpcAogCiAgICAgLy8gRklYTUU6IEl0IG1pZ2h0IGJlIG5pY2UgdG8gcmV3b3JrIHRoaXMg
Y29kZSBzbyB0aGF0IF9wcml2YXRlLT56b29tTXVsdGlwbGllciBkb2Vzbid0IGV4aXN0CiAgICAg
Ly8gYW5kIGluc3RlYWQgdGhlIHpvb20gZmFjdG9ycyBzdG9yZWQgaW4gRnJhbWUgYXJlIHVzZWQu
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBhdXRv
KiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgaWYgKGNvcmVGcmFtZSkg
ewogICAgICAgICBpZiAoX3ByaXZhdGUtPnpvb21zVGV4dE9ubHkpCiAgICAgICAgICAgICBjb3Jl
RnJhbWUtPnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoMSwgbXVsdGlwbGllcik7CkBAIC02NTYz
LDcgKzY1NTgsNyBAQCAtICh2b2lkKXNldEN1c3RvbVRleHRFbmNvZGluZ05hbWU6KE5TU3RyCiAg
ICAgTlNTdHJpbmcgKm9sZEVuY29kaW5nID0gW3NlbGYgY3VzdG9tVGV4dEVuY29kaW5nTmFtZV07
CiAgICAgaWYgKGVuY29kaW5nID09IG9sZEVuY29kaW5nIHx8IFtlbmNvZGluZyBpc0VxdWFsVG9T
dHJpbmc6b2xkRW5jb2RpbmddKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZyYW1lKiBtYWlu
RnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCisgICAgaWYgKGF1dG8qIG1haW5GcmFtZSA9
IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKICAgICAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS5yZWxv
YWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhlbmNvZGluZyk7CiB9CiAKQEAgLTY2MTAsNyArNjYwNSw3
IEBAIC0gKFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd1NjcmlwdE9iamVjdAogewogICAgIFdlYkNv
cmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kVGhyZWUoKTsKIAotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgYXV0byogY29yZUZyYW1lID0gW3NlbGYg
X21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE9iamVjdCgpOwpA
QCAtNjYzNyw5ICs2NjMyLDkgQEAgLSAodm9pZClzZXRIb3N0V2luZG93OihOU1dpbmRvdyAqKWhv
c3RXaQogICAgIGlmIChob3N0V2luZG93ID09IF9wcml2YXRlLT5ob3N0V2luZG93KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVd
OworICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkKKyAgICBm
b3IgKGF1dG8qIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKQogICAgICAgICBbW1traXQoZnJhbWUpIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XSB2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6aG9zdFdpbmRvd107CiAg
ICAgaWYgKF9wcml2YXRlLT5ob3N0V2luZG93ICYmIFtzZWxmIHdpbmRvd10gIT0gX3ByaXZhdGUt
Pmhvc3RXaW5kb3cpCiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9u
IG9iamVjdDpfcHJpdmF0ZS0+aG9zdFdpbmRvd107CkBAIC02NjQ4LDcgKzY2NDMsNyBAQCAtICh2
b2lkKXNldEhvc3RXaW5kb3c6KE5TV2luZG93ICopaG9zdFdpCiAjZW5kaWYKICAgICBbX3ByaXZh
dGUtPmhvc3RXaW5kb3cgcmVsZWFzZV07CiAgICAgX3ByaXZhdGUtPmhvc3RXaW5kb3cgPSBbaG9z
dFdpbmRvdyByZXRhaW5dOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKQorICAgIGZv
ciAoYXV0byogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpCiAgICAgICAgIFtbW2tpdChmcmFtZSkgZnJhbWVWaWV3
XSBkb2N1bWVudFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93XTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBfcHJpdmF0ZS0+cGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoW3Nl
bGYgX2RldmljZVNjYWxlRmFjdG9yXSk7CkBAIC02NzA1LDU2ICs2NzAwLDU2IEBAIC0gKEJPT0wp
X3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm8KICAgICByZXR1cm4gW2RvY3VtZW50Vmll
dyBfc2hvdWxkQXV0b3Njcm9sbEZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dOwogfQogCi0t
IChEcmFnQXBwbGljYXRpb25GbGFncylhcHBsaWNhdGlvbkZsYWdzOihpZCA8TlNEcmFnZ2luZ0lu
Zm8+KWRyYWdnaW5nSW5mbworLSAoV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGlj
YXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICB1aW50
MzJfdCBmbGFncyA9IDA7CiAgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCi0gICAgICAgIGZs
YWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICAgICAgZmxhZ3MgPSBXZWJDb3JlOjpE
cmFnQXBwbGljYXRpb25Jc01vZGFsOwogICAgIGlmIChbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNo
ZWV0XSkKLSAgICAgICAgZmxhZ3MgfD0gRHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldDsK
KyAgICAgICAgZmxhZ3MgfD0gV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVl
dDsKICAgICBpZiAoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZV0gPT0gc2VsZikKLSAgICAg
ICAgZmxhZ3MgfD0gRHJhZ0FwcGxpY2F0aW9uSXNTb3VyY2U7CisgICAgICAgIGZsYWdzIHw9IFdl
YkNvcmU6OkRyYWdBcHBsaWNhdGlvbklzU291cmNlOwogICAgIGlmIChbW05TQXBwIGN1cnJlbnRF
dmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0V2ZW50TW9kaWZpZXJGbGFnT3B0aW9uKQotICAgICAg
ICBmbGFncyB8PSBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpOworICAgICAgICBmbGFncyB8PSBX
ZWJDb3JlOjpEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpOwogfQogCi0tIChEcmFn
RGVzdGluYXRpb25BY3Rpb24pYWN0aW9uTWFza0ZvckRyYWdnaW5nSW5mbzooaWQgPE5TRHJhZ2dp
bmdJbmZvPilkcmFnZ2luZ0luZm8KKy0gKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbilh
Y3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5m
bwogewotICAgIHJldHVybiAoRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtbc2VsZiBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzpzZWxmIGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFn
Z2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKKyAgICByZXR1cm4gKFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbilbW3NlbGYgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBkcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb107CiB9CiAK
IC0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ0VudGVyZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4p
ZHJhZ2dpbmdJbmZvCiB7Ci0gICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdMb2NhdGlvbl0pOwotICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJ
bmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOworICAgIFdlYkNv
cmU6OkludFBvaW50IGdsb2JhbChXZWJDb3JlOjpnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRy
YWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAKLSAgICBEcmFnRGF0YSBkcmFnRGF0
YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9u
PihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBs
aWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10sIFtzZWxmIGFjdGlvbk1hc2tGb3JEcmFnZ2luZ0lu
Zm86ZHJhZ2dpbmdJbmZvXSk7CisgICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dp
bmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlv
bj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBw
bGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dLCBbc2VsZiBhY3Rpb25NYXNrRm9yRHJhZ2dpbmdJ
bmZvOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBjb3JlKHNlbGYpLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKIH0KIAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdn
aW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKLSAgICBQYWdl
KiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZShzZWxmKTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Ob25lOwogCi0gICAgSW50
UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwotICAgIEludFBv
aW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBb
c2VsZiB3aW5kb3ddKSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0lu
Zm8gZHJhZ2dpbmdMb2NhdGlvbl0pOworICAgIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbChXZWJD
b3JlOjpnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3
aW5kb3ddKSk7CiAKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwg
Z2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5m
b10sIFtzZWxmIGFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXSk7CisgICAg
V2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwg
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0lu
Zm9dLCBbc2VsZiBhY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb10pOwogICAg
IHJldHVybiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKTsKIH0K
IAogLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0lu
Zm8KIHsKLSAgICBQYWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29y
ZShzZWxmKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50
IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKLSAgICBJbnRQb2ludCBn
bG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYg
d2luZG93XSkpOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBn
bG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZv
XSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdM
b2NhdGlvbl0pOworICAgIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbChXZWJDb3JlOjpnbG9iYWxQ
b2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7Cisg
ICAgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2Jh
bCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2lu
Z0luZm9dKTsKICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0ZWQoZHJhZ0RhdGEp
OwogfQogCkBAIC02NzY1LDE3ICs2NzYwLDE3IEBAIC0gKEJPT0wpcHJlcGFyZUZvckRyYWdPcGVy
YXRpb246KGlkIDxOU0QKIAogLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJh
Z2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKLSAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7Ci0gICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50
KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKLSAgICBE
cmFnRGF0YSAqZHJhZ0RhdGEgPSBuZXcgRHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGds
b2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9d
KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xv
Y2F0aW9uXSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsKFdlYkNvcmU6Omdsb2JhbFBv
aW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKKyAg
ICBhdXRvKiBkcmFnRGF0YSA9IG5ldyBXZWJDb3JlOjpEcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNs
aWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEcmFnT3BlcmF0aW9uPihbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZs
YWdzOmRyYWdnaW5nSW5mb10pOwogCiAgICAgTlNBcnJheSogdHlwZXMgPSBkcmFnZ2luZ0luZm8u
ZHJhZ2dpbmdQYXN0ZWJvYXJkLnR5cGVzOwotICAgIGlmICghW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6bGVnYWN5Rmls
ZXNQcm9taXNlUGFzdGVib2FyZFR5cGUoKV0pIHsKKyAgICBpZiAoIVt0eXBlcyBjb250YWluc09i
amVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkNv
cmU6OmxlZ2FjeUZpbGVzUHJvbWlzZVBhc3RlYm9hcmRUeXBlKCldKSB7CiAgICAgICAgIAogICAg
ICAgICAvLyBGSVhNRTogbGVnYWN5RmlsZXNQcm9taXNlUGFzdGVib2FyZFR5cGUoKSBjb250YWlu
cyBVVElzLCBub3QgcGF0aCBuYW1lcy4gQWxzbywgaXQncyBub3QKICAgICAgICAgLy8gZ3VhcmFu
dGVlZCB0aGF0IHRoZSBjb3VudCBvZiBVVElzIGVxdWFscyB0aGUgY291bnQgb2YgZmlsZXMsIHNp
bmNlIHNvbWUgY2xpZW50cyBvbmx5IHdyaXRlCiAgICAgICAgIC8vIHVuaXF1ZSBVVElzLgotICAg
ICAgICBOU0FycmF5ICpmaWxlcyA9IFtkcmFnZ2luZ0luZm8uZHJhZ2dpbmdQYXN0ZWJvYXJkIHBy
b3BlcnR5TGlzdEZvclR5cGU6bGVnYWN5RmlsZXNQcm9taXNlUGFzdGVib2FyZFR5cGUoKV07Cisg
ICAgICAgIE5TQXJyYXkgKmZpbGVzID0gW2RyYWdnaW5nSW5mby5kcmFnZ2luZ1Bhc3RlYm9hcmQg
cHJvcGVydHlMaXN0Rm9yVHlwZTpXZWJDb3JlOjpsZWdhY3lGaWxlc1Byb21pc2VQYXN0ZWJvYXJk
VHlwZSgpXTsKICAgICAgICAgaWYgKCFbZmlsZXMgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFz
c11dKSB7CiAgICAgICAgICAgICBkZWxldGUgZHJhZ0RhdGE7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC02OTA1LDggKzY5MDAsOCBAQCAtICh2b2lkKXNldE5leHRLZXlWaWV3OihOU1Zp
ZXcgKil2aWV3CiAKIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUgKmZy
YW1lLCBXZWJGaW5kT3B0aW9ucyBvcHRpb25zID0gMCkKIHsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShmcmFtZSk7Ci0gICAgQ2FuV3JhcCBjYW5XcmFwID0gb3B0aW9ucyAmIFdlYkZpbmRP
cHRpb25zV3JhcEFyb3VuZCA/IENhbldyYXA6OlllcyA6IENhbldyYXA6Ok5vOworICAgIGF1dG8q
IGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIFdlYkNvcmU6OkNhbldyYXAgY2FuV3JhcCA9
IG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQgPyBXZWJDb3JlOjpDYW5XcmFwOjpZ
ZXMgOiBXZWJDb3JlOjpDYW5XcmFwOjpObzsKICAgICByZXR1cm4ga2l0KChvcHRpb25zICYgV2Vi
RmluZE9wdGlvbnNCYWNrd2FyZHMpCiAgICAgICAgID8gY29yZUZyYW1lLT50cmVlKCkudHJhdmVy
c2VQcmV2aW91cyhjYW5XcmFwKQogICAgICAgICA6IGNvcmVGcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dChjYW5XcmFwKSk7CkBAIC02OTI2LDcgKzY5MjEsNyBAQCArICh2b2lkKXJlZ2lzdGVyVmll
d0NsYXNzOihDbGFzcyl2aWV3Q2xhCiAgICAgLy8gaW4gdGhlIFdlYkNvcmUgTUlNRVR5cGUgcmVn
aXN0cnkuICBGb3Igbm93IHdlJ3JlIGRvaW5nIHRoaXMgaW4gYSBzYWZlLCBsaW1pdGVkIG1hbm5l
cgogICAgIC8vIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNTM3Mjk4OT4gLSBhIGZ1dHVyZSByZXZh
bXBpbmcgb2YgdGhlIGVudGlyZSBzeXN0ZW0gaXMgbmVjY2VzYXJ5IGZvciBmdXR1cmUgcm9idXN0
bmVzcwogICAgIGlmIChbdmlld0NsYXNzIGNsYXNzXSA9PSBbV2ViSFRNTFZpZXcgY2xhc3NdKQot
ICAgICAgICBNSU1FVHlwZVJlZ2lzdHJ5OjpzdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlcygpLmFk
ZChNSU1FVHlwZSk7CisgICAgICAgIFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnN1cHBvcnRl
ZE5vbkltYWdlTUlNRVR5cGVzKCkuYWRkKE1JTUVUeXBlKTsKIH0KIAogLSAodm9pZClzZXRHcm91
cE5hbWU6KE5TU3RyaW5nICopZ3JvdXBOYW1lCkBAIC03MDA3LDE1ICs3MDAyLDE1IEBAIC0gKHZv
aWQpd3JpdGVFbGVtZW50OihOU0RpY3Rpb25hcnkgKillbGUKIC0gKHZvaWQpbW92ZURyYWdDYXJl
dFRvUG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAg
IGlmIChQYWdlKiBwYWdlID0gY29yZShzZWxmKSkKLSAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5wbGFjZURyYWdDYXJldChJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9W
aWV3Om5pbF0pKTsKKyAgICBpZiAoYXV0byogcGFnZSA9IGNvcmUoc2VsZikpCisgICAgICAgIHBh
Z2UtPmRyYWdDb250cm9sbGVyKCkucGxhY2VEcmFnQ2FyZXQoV2ViQ29yZTo6SW50UG9pbnQoW3Nl
bGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdKSk7CiAjZW5kaWYKIH0KIAogLSAodm9p
ZClyZW1vdmVEcmFnQ2FyZXQKIHsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIGlmIChQ
YWdlKiBwYWdlID0gY29yZShzZWxmKSkKKyAgICBpZiAoYXV0byogcGFnZSA9IGNvcmUoc2VsZikp
CiAgICAgICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VuZGVkKCk7CiAjZW5kaWYKIH0K
QEAgLTcwODksNyArNzA4NCw3IEBAIC0gKHZvaWQpX3NldE1haW5GcmFtZUljb246KE5TSW1hZ2Ug
KilpY28KIC0gKE5TVVJMICopbWFpbkZyYW1lSWNvblVSTAogewogICAgIFdlYkZyYW1lICptYWlu
RnJhbWUgPSBbc2VsZiBtYWluRnJhbWVdOwotICAgIEZyYW1lICpjb3JlTWFpbkZyYW1lID0gY29y
ZShtYWluRnJhbWUpOworICAgIGF1dG8qIGNvcmVNYWluRnJhbWUgPSBjb3JlKG1haW5GcmFtZSk7
CiAgICAgaWYgKCFjb3JlTWFpbkZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAt
NzIxMCwyNSArNzIwNSwyNSBAQCAtIChOU1RvdWNoQmFySXRlbSAqKXRvdWNoQmFyOihOU1RvdWNo
QmFyCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotY29uc3RleHByIFRleHRDaGVja2luZ1R5cGUgY29y
ZVRleHRDaGVja2luZ1R5cGUoTlNUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCitjb25zdGV4cHIgV2Vi
Q29yZTo6VGV4dENoZWNraW5nVHlwZSBjb3JlVGV4dENoZWNraW5nVHlwZShOU1RleHRDaGVja2lu
Z1R5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIE5TVGV4dENoZWNr
aW5nVHlwZUNvcnJlY3Rpb246Ci0gICAgICAgIHJldHVybiBUZXh0Q2hlY2tpbmdUeXBlOjpDb3Jy
ZWN0aW9uOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbjsKICAgICBjYXNlIE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OgotICAgICAgICBy
ZXR1cm4gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAgICBjYXNlIE5TVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nOgotICAgICAgICByZXR1cm4gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxp
bmc7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsK
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gVGV4dENoZWNraW5nVHlwZTo6Tm9uZTsKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU6Ok5vbmU7CiAgICAgfQogfQog
Ci1zdGF0aWMgVGV4dENoZWNraW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRD
aGVja2luZ1Jlc3VsdChOU1RleHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCitzdGF0aWMgV2Vi
Q29yZTo6VGV4dENoZWNraW5nUmVzdWx0IHRleHRDaGVja2luZ1Jlc3VsdEZyb21OU1RleHRDaGVj
a2luZ1Jlc3VsdChOU1RleHRDaGVja2luZ1Jlc3VsdCAqbnNSZXN1bHQpCiB7CiAgICAgTlNSYW5n
ZSByZXN1bHRSYW5nZSA9IG5zUmVzdWx0LnJhbmdlOwogCi0gICAgVGV4dENoZWNraW5nUmVzdWx0
IHJlc3VsdDsKKyAgICBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgIHJl
c3VsdC50eXBlID0gY29yZVRleHRDaGVja2luZ1R5cGUobnNSZXN1bHQucmVzdWx0VHlwZSk7CiAg
ICAgcmVzdWx0LmxvY2F0aW9uID0gcmVzdWx0UmFuZ2UubG9jYXRpb247CiAgICAgcmVzdWx0Lmxl
bmd0aCA9IHJlc3VsdFJhbmdlLmxlbmd0aDsKQEAgLTcyNTEsNyArNzI0Niw3IEBAIC0gKHZvaWQp
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW4KICAgICBpZCBjYW5kaWRhdGUgPSBjYW5k
aWRhdGVzW2luZGV4XTsKICAgICBBU1NFUlQoW2NhbmRpZGF0ZSBpc0tpbmRPZkNsYXNzOltOU1Rl
eHRDaGVja2luZ1Jlc3VsdCBjbGFzc11dKTsKIAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
Y29yZShzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lKSkKKyAgICBpZiAoYXV0byogY29yZUZyYW1l
ID0gY29yZShzZWxmLl9zZWxlY3RlZE9yTWFpbkZyYW1lKSkKICAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS5jbGllbnQoKS0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGVXaXRoU29mdFNwYWNlcyh0
ZXh0Q2hlY2tpbmdSZXN1bHRGcm9tTlNUZXh0Q2hlY2tpbmdSZXN1bHQoKE5TVGV4dENoZWNraW5n
UmVzdWx0ICopY2FuZGlkYXRlKSk7CiB9CiAKQEAgLTcyNjEsNyArNzI1Niw3IEBAIC0gKHZvaWQp
Y2FuZGlkYXRlTGlzdFRvdWNoQmFySXRlbTooTlNDYW4KICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGlzVmlzaWJsZSkgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKSkKKyAgICAgICAgaWYgKGF1dG8qIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKSkKICAgICAgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY2xpZW50KCktPnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIH0KIApAQCAtNzgyMSwxNSArNzgx
NiwxNiBAQCAtIChpZCloaXN0b3J5RGVsZWdhdGUKIAogLSAoQk9PTClzaG91bGRDbG9zZQogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CisgICAgYXV0byog
Y29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm4gWUVTOwogICAgIHJldHVybiBjb3JlRnJhbWUtPmxvYWRlcigpLnNob3Vs
ZENsb3NlKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXN0YXRpYyBOU0FwcGxl
RXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKQorc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zy
b21KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsK
KyAgICB1c2luZyBuYW1lc3BhY2UgSlNDOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCkBAIC03ODgzLDcgKzc4Nzks
NyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAKIC0gKE5TQXBw
bGVFdmVudERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmlu
ZzooTlNTdHJpbmcgKilzY3JpcHQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21h
aW5Db3JlRnJhbWVdOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1l
XTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBpZiAoIWNv
cmVGcmFtZS0+ZG9jdW1lbnQoKSkKQEAgLTc4OTEsOCArNzg4Nyw4IEBAIC0gKE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWwKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gY29y
ZUZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSk7CiAgICAgaWYgKCFy
ZXN1bHQpIC8vIEZJWE1FOiBwYXNzIGVycm9ycwogICAgICAgICByZXR1cm4gMDsKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgcmV0dXJuIGFlRGVzY0Zyb21KU1Zh
bHVlKGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
Y29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QoV2ViQ29yZTo6bWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOworICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShj
b3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFs
V29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0KTsKIH0KICNlbmRpZgogCkBAIC04MjQ1LDEw
ICs4MjQxLDEwIEBAIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKiljb21wdXRlZFN0eWwKIAog
LSAoRE9NUmFuZ2UgKillZGl0YWJsZURPTVJhbmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsK
LSAgICBQYWdlKiBwYWdlID0gY29yZShzZWxmKTsKKyAgICBhdXRvKiBwYWdlID0gY29yZShzZWxm
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChw
YWdlLT5tYWluRnJhbWUoKS5lZGl0b3IoKS5yYW5nZUZvclBvaW50KEludFBvaW50KFtzZWxmIGNv
bnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KHBh
Z2UtPm1haW5GcmFtZSgpLmVkaXRvcigpLnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQo
W3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdKSkuZ2V0KCkpOwogfQogCiAtIChC
T09MKV9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5n
ZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZwpA
QCAtODI3Myw3ICs4MjY5LDcgQEAgLSAoQk9PTCltYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgog
CiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6
KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKIHsKLSAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGF1dG8qIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNv
cmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04MjkzLDcgKzgyODksNyBAQCAtICh2b2lk
KXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopCiAKIC0gKERPTVJhbmdlICopc2VsZWN0
ZWRET01SYW5nZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3Rl
ZE9yTWFpbkZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0
ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKTsKQEAgLTgzMDEsNyArODI5Nyw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRE
T01SYW5nZQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5CiB7Ci0g
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsK
KyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbTsKICAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuYWZmaW5pdHkoKSk7CkBAIC04MzIwLDcgKzgzMTYsNyBAQCAtICh2b2lkKXNldEVkaXRh
YmxlOihCT09MKWZsYWcKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAg
ICAgRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICAgICAgYXV0
byogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgICAgICBpZiAobWFpbkZy
YW1lKSB7CiAgICAgICAgICAgICBpZiAoZmxhZykgewogICAgICAgICAgICAgICAgIG1haW5GcmFt
ZS0+ZWRpdG9yKCkuYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CkBAIC04MzQxLDcg
KzgzMzcsNyBAQCAtICh2b2lkKXNldFR5cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2xhCiB7CiAg
ICAgLy8gV2UgZG9uJ3Qga25vdyBlbm91Z2ggYXQgdGhscyBsZXZlbCB0byBwYXNzIGluIGEgcmVs
ZXZhbnQgV2ViVW5kb0FjdGlvbjsgd2UnZCBoYXZlIHRvCiAgICAgLy8gY2hhbmdlIHRoZSBBUEkg
dG8gYWxsb3cgdGhpcy4KLSAgICBbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIF9zZXRUeXBp
bmdTdHlsZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uOjpVbnNwZWNpZmllZF07Cisg
ICAgW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBfc2V0VHlwaW5nU3R5bGU6c3R5bGUgd2l0
aFVuZG9BY3Rpb246V2ViQ29yZTo6RWRpdEFjdGlvbjo6VW5zcGVjaWZpZWRdOwogfQogCiAtIChE
T01DU1NTdHlsZURlY2xhcmF0aW9uICopdHlwaW5nU3R5bGUKQEAgLTg2NDEsNyArODYzNyw3IEBA
IC0gKHZvaWQpcmVwbGFjZVNlbGVjdGlvbldpdGhBcmNoaXZlOihXZWIKIC0gKHZvaWQpZGVsZXRl
U2VsZWN0aW9uCiB7CiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX3NlbGVjdGVkT3JN
YWluRnJhbWVdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKKyAgICBh
dXRvKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoY29yZUZyYW1lKQogICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShb
KFdlYkhUTUxWaWV3ICopW1t3ZWJGcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gX2NhblNt
YXJ0Q29weU9yRGVsZXRlXSk7CiB9CkBAIC04NjUxLDkgKzg2NDcsOSBAQCAtICh2b2lkKWFwcGx5
U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpCiAgICAgLy8gV2UgZG9uJ3Qga25vdyBlbm91Z2gg
YXQgdGhscyBsZXZlbCB0byBwYXNzIGluIGEgcmVsZXZhbnQgV2ViVW5kb0FjdGlvbjsgd2UnZCBo
YXZlIHRvCiAgICAgLy8gY2hhbmdlIHRoZSBBUEkgdG8gYWxsb3cgdGhpcy4KICAgICBXZWJGcmFt
ZSAqd2ViRnJhbWUgPSBbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV07Ci0gICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKSkgeworICAgIGlmIChhdXRvKiBjb3JlRnJhbWUg
PSBjb3JlKHdlYkZyYW1lKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUg
dG8gbWFrZSBhIGNvcHkgaGVyZS4KLSAgICAgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IHByb3BlcnRpZXMoY29yZShzdHlsZSktPmNvcHlQcm9wZXJ0aWVzKCkpOworICAgICAgICBSZWY8
V2ViQ29yZTo6TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcHJvcGVydGllcyhjb3JlKHN0eWxlKS0+
Y29weVByb3BlcnRpZXMoKSk7CiAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHls
ZShwcm9wZXJ0aWVzLnB0cigpKTsKICAgICB9CiB9CkBAIC04NzAxLDcgKzg2OTcsNyBAQCBGT1JX
QVJEKHRvZ2dsZVVuZGVybGluZSkKIAogLSAodm9pZClpbnNlcnREaWN0YXRpb25QaHJhc2VzOihO
U0FycmF5ICopZGljdGF0aW9uUGhyYXNlcyBtZXRhZGF0YTooaWQpbWV0YWRhdGEKIHsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAg
IGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAg
ICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtODczOCw3ICs4NzM0
LDcgQEAgLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhOb2RlOihET01ObwogCiAtIChCT09M
KV9zZWxlY3Rpb25Jc0NhcmV0CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJl
dHVybiBOTzsKICAgICByZXR1cm4gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CkBA
IC04NzQ2LDE4ICs4NzQyLDE4IEBAIC0gKEJPT0wpX3NlbGVjdGlvbklzQ2FyZXQKIAogLSAoQk9P
TClfc2VsZWN0aW9uSXNBbGwKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
c2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuIE5POwotICAgIHJldHVybiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQWxsKENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0Fs
bChXZWJDb3JlOjpDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiB9CiAKIC0gKHZvaWQpX3NpbXBs
aWZ5TWFya3VwOihET01Ob2RlICopc3RhcnROb2RlIGVuZE5vZGU6KERPTU5vZGUgKillbmROb2Rl
CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAg
YXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVG
cmFtZSB8fCAhc3RhcnROb2RlKQogICAgICAgICByZXR1cm47Ci0gICAgTm9kZSogY29yZVN0YXJ0
Tm9kZT0gY29yZShzdGFydE5vZGUpOworICAgIGF1dG8qIGNvcmVTdGFydE5vZGU9IGNvcmUoc3Rh
cnROb2RlKTsKICAgICBpZiAoJmNvcmVTdGFydE5vZGUtPmRvY3VtZW50KCkgIT0gY29yZUZyYW1l
LT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRp
dG9yKCkuc2ltcGxpZnlNYXJrdXAoY29yZVN0YXJ0Tm9kZSwgY29yZShlbmROb2RlKSk7CkBAIC04
OTYwLDExICs4OTU2LDExIEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwp
Y2EKICAgICAvLyBEb24ndCBzaHJpbmsgYSBiaWcgZGlzayBjYWNoZSwgc2luY2UgdGhhdCB3b3Vs
ZCBjYXVzZSBjaHVybi4KICAgICBuc3VybENhY2hlRGlza0NhcGFjaXR5ID0gc3RkOjptYXgobnN1
cmxDYWNoZURpc2tDYXBhY2l0eSwgW25zdXJsQ2FjaGUgZGlza0NhcGFjaXR5XSk7CiAKLSAgICBh
dXRvJiBtZW1vcnlDYWNoZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBhdXRvJiBt
ZW1vcnlDYWNoZSA9IFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKICAgICBtZW1v
cnlDYWNoZS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRD
YXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZS5zZXREZWFkRGVj
b2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwp
OwogCi0gICAgYXV0byYgcGFnZUNhY2hlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBh
dXRvJiBwYWdlQ2FjaGUgPSBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpOwogICAgIHBh
Z2VDYWNoZS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgbnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gc3RkOjptYXgobnN1cmxDYWNoZU1l
bW9yeUNhcGFjaXR5LCBbbnN1cmxDYWNoZSBtZW1vcnlDYXBhY2l0eV0pOwpAQCAtOTAyMCwxMiAr
OTAxNiwxMiBAQCAtICh2b2lkKV9zZWFyY2hXaXRoR29vZ2xlRnJvbU1lbnU6KGlkKXNlCiAgICAg
fQogICAgIAogICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFz
dGVib2FyZFdpdGhVbmlxdWVOYW1lXTsKLSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6W05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldIG93bmVy
Om5pbF07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9i
amVjdDpXZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSBvd25lcjpuaWxdOwog
ICAgIE5TTXV0YWJsZVN0cmluZyAqcyA9IFtzZWxlY3RlZFN0cmluZyBtdXRhYmxlQ29weV07CiAg
ICAgY29uc3QgdW5pY2hhciBub25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKICAgICBO
U1N0cmluZyAqbm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hh
cmFjdGVyczombm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07CiAgICAgW3MgcmVw
bGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6bm9uQnJlYWtpbmdTcGFjZVN0cmluZyB3aXRoU3RyaW5n
OkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzIGxlbmd0aF0pXTsKLSAgICBb
cGFzdGVib2FyZCBzZXRTdHJpbmc6cyBmb3JUeXBlOmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBl
KCldOworICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpzIGZvclR5cGU6V2ViQ29yZTo6bGVnYWN5
U3RyaW5nUGFzdGVib2FyZFR5cGUoKV07CiAgICAgW3MgcmVsZWFzZV07CiAgICAgCiAgICAgLy8g
RklYTUU6IHNlZW1zIGZyYWdpbGUgdG8gdXNlIHRoZSBzZXJ2aWNlIGJ5IG5hbWUsIGJ1dCB0aGlz
IGlzIHdoYXQgQXBwS2l0IGRvZXMKQEAgLTkxMDAsMTUgKzkwOTYsMTUgQEAgLSAodm9pZClfcmV0
cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZQogICAgIC8vIFRoZSBrZXlib2FyZCBhY2Nlc3Mg
bW9kZSBoYXMgdHdvIGJpdHM6CiAgICAgLy8gQml0IDAgaXMgc2V0IGlmIHVzZXIgY2FuIHNldCB0
aGUgZm9jdXMgdG8gbWVudXMsIHRoZSBkb2NrLCBhbmQgdmFyaW91cyB3aW5kb3dzIHVzaW5nIHRo
ZSBrZXlib2FyZC4KICAgICAvLyBCaXQgMSBpcyBzZXQgaWYgY29udHJvbHMgb3RoZXIgdGhhbiB0
ZXh0IGZpZWxkcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHRhYiBvcmRlciAoV2ViS2l0IGFsc28gYWx3
YXlzIGluY2x1ZGVzIGxpc3RzKS4KLSAgICBfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlID0gKG1v
ZGUgJiAweDIpID8gS2V5Ym9hcmRBY2Nlc3NGdWxsIDogS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0Owor
ICAgIF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGUgPSAobW9kZSAmIDB4MikgPyBXZWJDb3JlOjpL
ZXlib2FyZEFjY2Vzc0Z1bGwgOiBXZWJDb3JlOjpLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7CiAjaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gY2hlY2sgZm9yIHRhYmJpbmcgdG8gbGlua3MK
ICAgICBpZiAoW19wcml2YXRlLT5wcmVmZXJlbmNlcyB0YWJzVG9MaW5rc10pCi0gICAgICAgIF9w
cml2YXRlLT5fa2V5Ym9hcmRVSU1vZGUgPSAoS2V5Ym9hcmRVSU1vZGUpKF9wcml2YXRlLT5fa2V5
Ym9hcmRVSU1vZGUgfCBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzKTsKKyAgICAgICAgX3ByaXZh
dGUtPl9rZXlib2FyZFVJTW9kZSA9IChXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSkoX3ByaXZhdGUt
Pl9rZXlib2FyZFVJTW9kZSB8IFdlYkNvcmU6OktleWJvYXJkQWNjZXNzVGFic1RvTGlua3MpOwog
I2VuZGlmCiB9CiAKLS0gKEtleWJvYXJkVUlNb2RlKV9rZXlib2FyZFVJTW9kZQorLSAoV2ViQ29y
ZTo6S2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+
X2tleWJvYXJkVUlNb2RlQWNjZXNzZWQpIHsKICAgICAgICAgX3ByaXZhdGUtPl9rZXlib2FyZFVJ
TW9kZUFjY2Vzc2VkID0gWUVTOwpAQCAtOTEzNSw3ICs5MTMxLDcgQEAgLSAodm9pZClfc2V0SW5z
ZXJ0aW9uUGFzdGVib2FyZDooTlNQYXN0ZQogfQogI2VuZGlmCiAKLS0gKEZyYW1lKilfbWFpbkNv
cmVGcmFtZQorLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lCiB7CiAgICAgcmV0dXJu
IChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+cGFnZSkgPyAmX3ByaXZhdGUtPnBhZ2UtPm1haW5GcmFt
ZSgpIDogMDsKIH0KQEAgLTkxNTAsMTEgKzkxNDYsMTEgQEAgLSAoV2ViRnJhbWUgKilfc2VsZWN0
ZWRPck1haW5GcmFtZQogCiAtICh2b2lkKV9jbGVhckNyZWRlbnRpYWxzCiB7Ci0gICAgRnJhbWUq
IGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOworICAgIGF1dG8qIGZyYW1lID0gW3NlbGYg
X21haW5Db3JlRnJhbWVdOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCA9IGZyYW1lLT5sb2FkZXIoKS5u
ZXR3b3JraW5nQ29udGV4dCgpOworICAgIGF1dG8qIG5ldHdvcmtpbmdDb250ZXh0ID0gZnJhbWUt
PmxvYWRlcigpLm5ldHdvcmtpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFuZXR3b3JraW5nQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05MjUzLDcgKzkyNDksNyBAQCAtICh2b2lkKV9zY2hl
ZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaAogCiAtIChCT09MKV9mbHVzaENvbXBvc2l0aW5nQ2hh
bmdlcwogewotICAgIEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBh
dXRvKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoZnJhbWUgJiYgZnJh
bWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIGZyYW1lLT52aWV3KCktPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogCkBAIC05MjYzLDggKzkyNTksOCBAQCAtIChC
T09MKV9mbHVzaENvbXBvc2l0aW5nQ2hhbmdlcwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAt
ICh2b2lkKV9zY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nVGlsZUNhY2hlUmVwYWludAogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07Ci0gICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpKQorICAgIGF1dG8qIGNvcmVGcmFtZSA9
IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBpZiAoYXV0byogdmlldyA9IGNvcmVGcmFtZS0+
dmlldygpKQogICAgICAgICB2aWV3LT5zY2hlZHVsZUxheWVyRmx1c2hBbGxvd2luZ1Rocm90dGxp
bmcoKTsKIH0KICNlbmRpZgpAQCAtOTMxNCw3ICs5MzEwLDcgQEAgLSAoQk9PTClfaGFzQWN0aXZl
VmlkZW9Gb3JDb250cm9sc0ludGVyZgogICAgIGlmICghX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lv
bk1vZGVsKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwtPm1lZGlhRWxlbWVu
dCgpOworICAgIGF1dG8qIG1lZGlhRWxlbWVudCA9IF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25N
b2RlbC0+bWVkaWFFbGVtZW50KCk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtOTMyNywxMSArOTMyMywxMSBAQCAtICh2b2lkKV9zZXRVcFBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyRm9yCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghX3ByaXZh
dGUtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKQotICAgICAgICBfcHJpdmF0ZS0+cGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6Y3JlYXRlKCk7Cisg
ICAgICAgIF9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCA9IFdlYkNvcmU6OlBsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpjcmVhdGUoKTsKICAgICBfcHJpdmF0ZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwtPnNldE1lZGlhRWxlbWVudCgmbWVkaWFFbGVtZW50KTsKIAogICAgIGlm
ICghX3ByaXZhdGUtPnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLSAgICAgICAgX3ByaXZhdGUt
PnBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6
Y3JlYXRlKCpfcHJpdmF0ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwpOworICAgICAgICBfcHJpdmF0
ZS0+cGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlID0gV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjcmVhdGUoKl9wcml2YXRlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCk7CiAKICAg
ICBbc2VsZiB1cGRhdGVUb3VjaEJhcl07CiB9CkBAIC05MzgyLDIwICs5Mzc4LDIwIEBAIC0gKHZv
aWQpX2V4aXRGdWxsU2NyZWVuRm9yRWxlbWVudDooV2ViQ28KIC0gKHZvaWQpaGFuZGxlQWNjZXB0
ZWRBbHRlcm5hdGl2ZVRleHQ6KE5TU3RyaW5nKil0ZXh0CiB7CiAgICAgV2ViRnJhbWUgKndlYkZy
YW1lID0gW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKHdlYkZyYW1lKTsKKyAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsK
ICAgICBpZiAoY29yZUZyYW1lKQogICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLmhhbmRsZUFs
dGVybmF0aXZlVGV4dFVJUmVzdWx0KHRleHQpOwogfQogI2VuZGlmCiAKICNpZiBVU0UoRElDVEFU
SU9OX0FMVEVSTkFUSVZFUykKLS0gKHZvaWQpX2dldFdlYkNvcmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXM6KFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4mKWFsdGVybmF0aXZlcyBmcm9tVGV4dEFs
dGVybmF0aXZlczooY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mKWFsdGVy
bmF0aXZlc1dpdGhSYW5nZQorLSAodm9pZClfZ2V0V2ViQ29yZURpY3RhdGlvbkFsdGVybmF0aXZl
czooVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiYpYWx0ZXJuYXRpdmVzIGZy
b21UZXh0QWx0ZXJuYXRpdmVzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZl
V2l0aFJhbmdlPiYpYWx0ZXJuYXRpdmVzV2l0aFJhbmdlCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhbHRlcm5hdGl2ZXNXaXRoUmFuZ2Uuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlJiBhbHRlcm5hdGl2ZVdpdGhSYW5nZSA9IGFsdGVy
bmF0aXZlc1dpdGhSYW5nZVtpXTsKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6VGV4dEFsdGVybmF0
aXZlV2l0aFJhbmdlJiBhbHRlcm5hdGl2ZVdpdGhSYW5nZSA9IGFsdGVybmF0aXZlc1dpdGhSYW5n
ZVtpXTsKICAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IF9wcml2YXRlLT5tX2Fs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci0+YWRkQWx0ZXJuYXRpdmVzKGFsdGVybmF0aXZlV2l0
aFJhbmdlLmFsdGVybmF0aXZlcyk7CiAgICAgICAgIGlmIChkaWN0YXRpb25Db250ZXh0KQotICAg
ICAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5h
dGl2ZVdpdGhSYW5nZS5yYW5nZS5sb2NhdGlvbiwgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UucmFuZ2Uu
bGVuZ3RoLCBkaWN0YXRpb25Db250ZXh0KSk7CisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBw
ZW5kKFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJh
bmdlLmxvY2F0aW9uLCBhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlv
bkNvbnRleHQpKTsKICAgICB9CiB9CiAKQEAgLTk0NDYsMTkgKzk0NDIsMTkgQEAgLSAoV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciAqKV9pbW1lZAogICAgIHJldHVybiBfcHJpdmF0ZS0+aW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKIH0KIAotLSAoaWQpX2FuaW1hdGlvbkNvbnRyb2xsZXJG
b3JEaWN0aW9uYXJ5TG9va3VwUG9wdXBJbmZvOihjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJilk
aWN0aW9uYXJ5UG9wdXBJbmZvCistIChpZClfYW5pbWF0aW9uQ29udHJvbGxlckZvckRpY3Rpb25h
cnlMb29rdXBQb3B1cEluZm86KGNvbnN0IFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8mKWRp
Y3Rpb25hcnlQb3B1cEluZm8KIHsKICAgICBpZiAoIWRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZykKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFtzZWxmIF9wcmVwYXJlRm9y
RGljdGlvbmFyeUxvb2t1cF07CiAKLSAgICByZXR1cm4gRGljdGlvbmFyeUxvb2t1cDo6YW5pbWF0
aW9uQ29udHJvbGxlckZvclBvcHVwKGRpY3Rpb25hcnlQb3B1cEluZm8sIHNlbGYsIFtzZWxmXShU
ZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKSB7Ci0gICAgICAgIFtzZWxmIF9zZXRUZXh0SW5k
aWNhdG9yOnRleHRJbmRpY2F0b3Igd2l0aExpZmV0aW1lOlRleHRJbmRpY2F0b3JXaW5kb3dMaWZl
dGltZTo6UGVybWFuZW50XTsKLSAgICB9LCBbc2VsZl0oRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMpIHsKKyAgICByZXR1cm4gV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1cDo6YW5p
bWF0aW9uQ29udHJvbGxlckZvclBvcHVwKGRpY3Rpb25hcnlQb3B1cEluZm8sIHNlbGYsIFtzZWxm
XShXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKSB7CisgICAgICAgIFtzZWxm
IF9zZXRUZXh0SW5kaWNhdG9yOnRleHRJbmRpY2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6OlRl
eHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKKyAgICB9LCBbc2VsZl0oV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpIHsKICAgICAgICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0UmVjdEZyb21Sb290VmlldzpyZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzXTsKICAgICB9LCBbc2VsZl0oKSB7Ci0gICAgICAgIFtzZWxmIF9jbGVhclRleHRJbmRpY2F0
b3JXaXRoQW5pbWF0aW9uOlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb246OkZh
ZGVPdXRdOworICAgICAgICBbc2VsZiBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsK
ICAgICB9KTsKIH0KIApAQCAtOTQ3MiwyNSArOTQ2OCwyNSBAQCAtICh2b2lkKV9zZXRQcmVzc3Vy
ZUV2ZW50OihOU0V2ZW50ICopZXZlCiAgICAgX3ByaXZhdGUtPnByZXNzdXJlRXZlbnQgPSBldmVu
dDsKIH0KIAotLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooVGV4dEluZGljYXRvciYpdGV4dElu
ZGljYXRvcgorLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooV2ViQ29yZTo6VGV4dEluZGljYXRv
ciYpdGV4dEluZGljYXRvcgogewotICAgIFtzZWxmIF9zZXRUZXh0SW5kaWNhdG9yOnRleHRJbmRp
Y2F0b3Igd2l0aExpZmV0aW1lOlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50
XTsKKyAgICBbc2VsZiBfc2V0VGV4dEluZGljYXRvcjp0ZXh0SW5kaWNhdG9yIHdpdGhMaWZldGlt
ZTpXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBlcm1hbmVudF07CiB9CiAK
LS0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3Ig
d2l0aExpZmV0aW1lOihUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUpbGlmZXRpbWUKKy0gKHZv
aWQpX3NldFRleHRJbmRpY2F0b3I6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0
b3Igd2l0aExpZmV0aW1lOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUpbGlm
ZXRpbWUKIHsKICAgICBpZiAoIV9wcml2YXRlLT50ZXh0SW5kaWNhdG9yV2luZG93KQotICAgICAg
ICBfcHJpdmF0ZS0+dGV4dEluZGljYXRvcldpbmRvdyA9IG1ha2VVbmlxdWU8VGV4dEluZGljYXRv
cldpbmRvdz4oc2VsZik7CisgICAgICAgIF9wcml2YXRlLT50ZXh0SW5kaWNhdG9yV2luZG93ID0g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PihzZWxmKTsKIAogICAgIE5T
UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRS
ZWN0OltzZWxmIF9jb252ZXJ0UmVjdEZyb21Sb290Vmlldzp0ZXh0SW5kaWNhdG9yLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKV0gdG9WaWV3Om5pbF07CiAgICAgTlNSZWN0
IHRleHRCb3VuZGluZ1JlY3RJblNjcmVlbkNvb3JkaW5hdGVzID0gW3NlbGYud2luZG93IGNvbnZl
cnRSZWN0VG9TY3JlZW46dGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXNdOwogICAg
IF9wcml2YXRlLT50ZXh0SW5kaWNhdG9yV2luZG93LT5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRp
Y2F0b3IsIE5TUmVjdFRvQ0dSZWN0KHRleHRCb3VuZGluZ1JlY3RJblNjcmVlbkNvb3JkaW5hdGVz
KSwgbGlmZXRpbWUpOwogfQogCi0tICh2b2lkKV9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0
aW9uOihUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uKWFuaW1hdGlvbgorLSAo
dm9pZClfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjooV2ViQ29yZTo6VGV4dEluZGlj
YXRvcldpbmRvd0Rpc21pc3NhbEFuaW1hdGlvbilhbmltYXRpb24KIHsKICAgICBpZiAoX3ByaXZh
dGUtPnRleHRJbmRpY2F0b3JXaW5kb3cpCi0gICAgICAgIF9wcml2YXRlLT50ZXh0SW5kaWNhdG9y
V2luZG93LT5jbGVhclRleHRJbmRpY2F0b3IoVGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3NhbEFu
aW1hdGlvbjo6RmFkZU91dCk7CisgICAgICAgIF9wcml2YXRlLT50ZXh0SW5kaWNhdG9yV2luZG93
LT5jbGVhclRleHRJbmRpY2F0b3IoV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3Nh
bEFuaW1hdGlvbjo6RmFkZU91dCk7CiAgICAgX3ByaXZhdGUtPnRleHRJbmRpY2F0b3JXaW5kb3cg
PSBudWxscHRyOwogfQogCkBAIC05NTE0LDI2ICs5NTEwLDI2IEBAIC0gKHZvaWQpX3ByZXBhcmVG
b3JEaWN0aW9uYXJ5TG9va3VwCiAgICAgCiB9CiAKLS0gKHZvaWQpX3Nob3dEaWN0aW9uYXJ5TG9v
a3VwUG9wdXA6KGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKWRpY3Rpb25hcnlQb3B1cEluZm8K
Ky0gKHZvaWQpX3Nob3dEaWN0aW9uYXJ5TG9va3VwUG9wdXA6KGNvbnN0IFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8mKWRpY3Rpb25hcnlQb3B1cEluZm8KIHsKICAgICBpZiAoIWRpY3Rpb25h
cnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgW3Nl
bGYgX3ByZXBhcmVGb3JEaWN0aW9uYXJ5TG9va3VwXTsKIAotICAgIERpY3Rpb25hcnlMb29rdXA6
OnNob3dQb3B1cChkaWN0aW9uYXJ5UG9wdXBJbmZvLCBzZWxmLCBbc2VsZl0oVGV4dEluZGljYXRv
ciYgdGV4dEluZGljYXRvcikgewotICAgICAgICBbc2VsZiBfc2V0VGV4dEluZGljYXRvcjp0ZXh0
SW5kaWNhdG9yIHdpdGhMaWZldGltZTpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWU6OlBlcm1h
bmVudF07Ci0gICAgfSwgW3NlbGZdKEZsb2F0UmVjdCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
KSB7CisgICAgV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1cDo6c2hvd1BvcHVwKGRpY3Rpb25hcnlQ
b3B1cEluZm8sIHNlbGYsIFtzZWxmXShXZWJDb3JlOjpUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNh
dG9yKSB7CisgICAgICAgIFtzZWxmIF9zZXRUZXh0SW5kaWNhdG9yOnRleHRJbmRpY2F0b3Igd2l0
aExpZmV0aW1lOldlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50
XTsKKyAgICB9LCBbc2VsZl0oV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMpIHsKICAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0UmVjdEZyb21Sb290Vmlldzpy
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzXTsKICAgICB9LCBbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0
cjxXZWJWaWV3PihzZWxmKV0oKSB7Ci0gICAgICAgIFt3ZWFrU2VsZi5nZXQoKSBfY2xlYXJUZXh0
SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0
aW9uOjpGYWRlT3V0XTsKKyAgICAgICAgW3dlYWtTZWxmLmdldCgpIF9jbGVhclRleHRJbmRpY2F0
b3JXaXRoQW5pbWF0aW9uOldlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmlt
YXRpb246OkZhZGVPdXRdOwogICAgIH0pOwogfQogCiAjaWYgIUVOQUJMRShSRVZFQUwpCiAtICh2
b2lkKV9kaWN0aW9uYXJ5TG9va3VwUG9wb3ZlcldpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KIHsKLSAgICBbc2VsZiBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlv
bjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKKyAgICBb
c2VsZiBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoUkVWRUFMKQogCkBAIC05NTQ0LDggKzk1NDAsOCBAQCAtICh2b2lkKXNob3dGb3JtVmFsaWRh
dGlvbk1lc3NhZ2U6KE5TU3RyCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlbmFibGUgdGhpcyBv
biBpT1MgYXMgd2VsbC4KICNpZiBQTEFURk9STShNQUMpCiAgICAgZG91YmxlIG1pbmltdW1Gb250
U2l6ZSA9IF9wcml2YXRlLT5wYWdlID8gX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkubWluaW11
bUZvbnRTaXplKCkgOiAwOwotICAgIF9wcml2YXRlLT5mb3JtVmFsaWRhdGlvbkJ1YmJsZSA9IFZh
bGlkYXRpb25CdWJibGU6OmNyZWF0ZShzZWxmLCBtZXNzYWdlLCB7IG1pbmltdW1Gb250U2l6ZSB9
KTsKLSAgICBfcHJpdmF0ZS0+Zm9ybVZhbGlkYXRpb25CdWJibGUtPnNob3dSZWxhdGl2ZVRvKGVu
Y2xvc2luZ0ludFJlY3QoW3NlbGYgX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3OmFuY2hvclJlY3Rd
KSk7CisgICAgX3ByaXZhdGUtPmZvcm1WYWxpZGF0aW9uQnViYmxlID0gV2ViQ29yZTo6VmFsaWRh
dGlvbkJ1YmJsZTo6Y3JlYXRlKHNlbGYsIG1lc3NhZ2UsIHsgbWluaW11bUZvbnRTaXplIH0pOwor
ICAgIF9wcml2YXRlLT5mb3JtVmFsaWRhdGlvbkJ1YmJsZS0+c2hvd1JlbGF0aXZlVG8oV2ViQ29y
ZTo6ZW5jbG9zaW5nSW50UmVjdChbc2VsZiBfY29udmVydFJlY3RGcm9tUm9vdFZpZXc6YW5jaG9y
UmVjdF0pKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOwogICAgIFVOVVNFRF9Q
QVJBTShhbmNob3JSZWN0KTsKQEAgLTk3MTEsNyArOTcwNyw3IEBAIC0gKEJPT0wpX2lzUmljaGx5
RWRpdGFibGUKIAogLSAoTlNUb3VjaEJhciAqKXRleHRUb3VjaEJhcgogewotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgYXV0byog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC05NzIxLDI5ICs5NzE3LDI5IEBA
IC0gKE5TVG91Y2hCYXIgKil0ZXh0VG91Y2hCYXIKICAgICByZXR1cm4gc2VsZi5faXNSaWNobHlF
ZGl0YWJsZSA/IF9wcml2YXRlLT5fcmljaFRleHRUb3VjaEJhci5nZXQoKSA6IF9wcml2YXRlLT5f
cGxhaW5UZXh0VG91Y2hCYXIuZ2V0KCk7CiB9CiAKLXN0YXRpYyBOU1RleHRBbGlnbm1lbnQgbnNU
ZXh0QWxpZ25tZW50RnJvbVJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0
YXRpYyBOU1RleHRBbGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50RnJvbVJlbmRlclN0eWxlKGNvbnN0
IFdlYkNvcmU6OlJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBOU1RleHRBbGlnbm1lbnQgdGV4
dEFsaWdubWVudDsKICAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkgewotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdo
dDoKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgV2Vi
Q29yZTo6VGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CiAgICAgICAgIHRleHRBbGlnbm1lbnQg
PSBOU1RleHRBbGlnbm1lbnRSaWdodDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICBj
YXNlIFdlYkNvcmU6OlRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0
QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgogICAgICAgICB0ZXh0QWxpZ25tZW50ID0gTlNUZXh0QWxp
Z25tZW50TGVmdDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50
ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgY2FzZSBXZWJD
b3JlOjpUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0QWxpZ25N
b2RlOjpXZWJLaXRDZW50ZXI6CiAgICAgICAgIHRleHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1l
bnRDZW50ZXI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlm
eToKKyAgICBjYXNlIFdlYkNvcmU6OlRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CiAgICAgICAgIHRl
eHRBbGlnbm1lbnQgPSBOU1RleHRBbGlnbm1lbnRKdXN0aWZpZWQ7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0QWxp
Z25Nb2RlOjpTdGFydDoKICAgICAgICAgdGV4dEFsaWdubWVudCA9IHN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBOU1RleHRBbGlnbm1lbnRMZWZ0IDogTlNUZXh0QWxpZ25tZW50Umln
aHQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgIGNh
c2UgV2ViQ29yZTo6VGV4dEFsaWduTW9kZTo6RW5kOgogICAgICAgICB0ZXh0QWxpZ25tZW50ID0g
c3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IE5TVGV4dEFsaWdubWVudFJpZ2h0IDog
TlNUZXh0QWxpZ25tZW50TGVmdDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTk3
NTUsNiArOTc1MSw3IEBAIHN0YXRpYyBOU1RleHRBbGlnbm1lbnQgbnNUZXh0QWxpZ25tZW50RnIK
IAogLSAodm9pZCl1cGRhdGVUZXh0VG91Y2hCYXIKIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKICAgICBCT09MIHRvdWNoQmFyc1JlcXVpcmVJbml0aWFsaXphdGlvbiA9ICFfcHJpdmF0
ZS0+X3JpY2hUZXh0VG91Y2hCYXIgfHwgIV9wcml2YXRlLT5fcGxhaW5UZXh0VG91Y2hCYXI7CiAg
ICAgaWYgKF9wcml2YXRlLT5faXNEZWZlcnJpbmdUZXh0VG91Y2hCYXJVcGRhdGVzICYmICF0b3Vj
aEJhcnNSZXF1aXJlSW5pdGlhbGl6YXRpb24pIHsKICAgICAgICAgX3ByaXZhdGUtPl9uZWVkc0Rl
ZmVycmVkVGV4dFRvdWNoQmFyVXBkYXRlID0gWUVTOwpAQCAtOTc2OSw3ICs5NzY2LDcgQEAgLSAo
dm9pZCl1cGRhdGVUZXh0VG91Y2hCYXIKICAgICBpZiAoIVt3ZWJIVE1MVmlldyBfaXNFZGl0YWJs
ZV0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTk4OTQsNyArOTg5MSw3IEBAIC0gKHZvaWQpdXBkYXRlVG91Y2hCYXIKICAg
ICBpZiAoIV9wcml2YXRlLT5fY2FuQ3JlYXRlVG91Y2hCYXJzKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0p
OworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVd
KTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTQ2LDcgKzk5
NDMsNyBAQCAtICh2b2lkKXByZXBhcmVGb3JNb3VzZVVwCiAKIC0gKE5TQ2FuZGlkYXRlTGlzdFRv
dWNoQmFySXRlbSAqKWNhbmRpZGF0ZUxpc3QKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMTAwMzIsNyArMTAwMjksNyBAQCAtICh2b2lkKV9nZW9s
b2NhdGlvbkRpZEZhaWxXaXRoTWVzc2FnZTooCiB7CiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQog
ICAgIGlmIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+cGFnZSkgewotICAgICAgICBhdXRvIGdlb2xv
Y2F0aW9FcnJvciA9IEdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0ZShHZW9sb2NhdGlvbkVycm9yOjpQ
b3NpdGlvblVuYXZhaWxhYmxlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBhdXRvIGdlb2xvY2F0
aW9FcnJvciA9IFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0ZShXZWJDb3JlOjpHZW9s
b2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlLCBlcnJvck1lc3NhZ2UpOwogICAgICAg
ICBXZWJDb3JlOjpHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmZyb20oX3ByaXZhdGUtPnBhZ2UpLT5l
cnJvck9jY3VycmVkKGdlb2xvY2F0aW9FcnJvci5nZXQoKSk7CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShHRU9MT0NBVElPTikKQEAgLTEwMDQyLDcgKzEwMDM5LDcgQEAgLSAodm9pZClfZ2VvbG9j
YXRpb25EaWRGYWlsV2l0aE1lc3NhZ2U6KAogLSAodm9pZClfcmVzZXRBbGxHZW9sb2NhdGlvblBl
cm1pc3Npb24KIHsKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgRnJhbWUqIGZyYW1lID0g
W3NlbGYgX21haW5Db3JlRnJhbWVdOworICAgIGF1dG8qIGZyYW1lID0gW3NlbGYgX21haW5Db3Jl
RnJhbWVdOwogICAgIGlmIChmcmFtZSkKICAgICAgICAgZnJhbWUtPnJlc2V0QWxsR2VvbG9jYXRp
b25QZXJtaXNzaW9uKCk7CiAjZW5kaWYKQEAgLTEwMDg5LDggKzEwMDg2LDggQEAgLSAodWludDY0
X3QpX25vdGlmaWNhdGlvbklERm9yVGVzdGluZzooSgogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBbW3NlbGYgbWFpbkZyYW1lXSBn
bG9iYWxDb250ZXh0XTsKLSAgICBhdXRvKiBub3RpZmljYXRpb24gPSBKU05vdGlmaWNhdGlvbjo6
dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRvSlModG9KUyhjb250ZXh0KSwganNOb3Rp
ZmljYXRpb24pKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViTm90aWZpY2F0aW9uQ2xpZW50
Kj4oTm90aWZpY2F0aW9uQ29udHJvbGxlcjo6Y2xpZW50RnJvbSgqcGFnZSkpLT5ub3RpZmljYXRp
b25JREZvclRlc3Rpbmcobm90aWZpY2F0aW9uKTsKKyAgICBhdXRvKiBub3RpZmljYXRpb24gPSBX
ZWJDb3JlOjpKU05vdGlmaWNhdGlvbjo6dG9XcmFwcGVkKHRvSlMoY29udGV4dCktPnZtKCksIHRv
SlModG9KUyhjb250ZXh0KSwganNOb3RpZmljYXRpb24pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViTm90aWZpY2F0aW9uQ2xpZW50Kj4oV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ29udHJvbGxl
cjo6Y2xpZW50RnJvbSgqcGFnZSkpLT5ub3RpZmljYXRpb25JREZvclRlc3Rpbmcobm90aWZpY2F0
aW9uKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvc2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9zY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaAko
cmV2aXNpb24gMjUwNTIyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9zY3JpcHRzL2dlbmVyYXRl
LXVuaWZpZWQtc291cmNlcy5zaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQCBpZiBb
IC16ICIke0JVSUxEX1NDUklQVFNfRElSfSIgXTsgdGhlbgogZmkKIAogVW5pZmllZFNvdXJjZUNw
cEZpbGVDb3VudD01Ci1VbmlmaWVkU291cmNlTW1GaWxlQ291bnQ9MTgKK1VuaWZpZWRTb3VyY2VN
bUZpbGVDb3VudD0yMAogCiBpZiBbICQjIC1lcSAwIF07IHRoZW4KICAgICBlY2hvICJVc2luZyB1
bmlmaWVkIHNvdXJjZSBsaXN0IGZpbGVzOiBTb3VyY2VzLnR4dCwgU291cmNlc0NvY29hLnR4dCIK
</data>
<flag name="review"
          id="395604"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>