<?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>197106</bug_id>
          
          <creation_ts>2019-04-19 10:36:25 -0700</creation_ts>
          <short_desc>Eagerly parse immediately invoked functions</short_desc>
          <delta_ts>2020-01-30 12:41:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>206706</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mjs</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1528786</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-19 10:36:25 -0700</bug_when>
    <thetext>We should develop a heuristic around doing this. This will help parsing time for such code because we won&apos;t spend the extra time syntax checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528787</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-19 10:41:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/50052023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581798</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-10-20 21:56:35 -0700</bug_when>
    <thetext>*** Bug 202674 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610243</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-23 12:09:20 -0800</bug_when>
    <thetext>Gonna give this a go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611090</commentid>
    <comment_count>4</comment_count>
      <attachid>388785</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-25 12:00:41 -0800</bug_when>
    <thetext>Created attachment 388785
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611765</commentid>
    <comment_count>5</comment_count>
      <attachid>388954</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-27 18:11:14 -0800</bug_when>
    <thetext>Created attachment 388954
WIP

it eagerly parsed something, but crashed in emitting debug info</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611775</commentid>
    <comment_count>6</comment_count>
      <attachid>388957</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-27 18:40:29 -0800</bug_when>
    <thetext>Created attachment 388957
WIP

no longer crashing in emitExpressionInfo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612208</commentid>
    <comment_count>7</comment_count>
      <attachid>389073</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-28 15:17:36 -0800</bug_when>
    <thetext>Created attachment 389073
WIP

seems to work for functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612570</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-29 11:17:05 -0800</bug_when>
    <thetext>Seems neutral on major benchmarks. It is a speedup on microbenchmarks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612792</commentid>
    <comment_count>9</comment_count>
      <attachid>389208</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-29 17:58:22 -0800</bug_when>
    <thetext>Created attachment 389208
WIP

Seems to work, but isn&apos;t really a speedup :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388785</attachid>
            <date>2020-01-25 12:00:41 -0800</date>
            <delta_ts>2020-01-27 18:11:14 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>49393</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lv
biAyNTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw2IEBAIHB1YmxpYzoKICAgICBKU0M6OlNvdXJj
ZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgSlNDOjpTb3VyY2VFbGVtZW50cygpOyB9CiAKICAgICBpbnQgZmVhdHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX3Njb3BlLm1fZmVhdHVyZXM7IH0KLSAgICBpbnQgbnVtQ29uc3RhbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zY29wZS5tX251bUNvbnN0YW50czsgfQogCiAgICAgRXhwcmVzc2lv
bk5vZGUqIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25O
b2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNB
c3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kKTsKQEAgLTE2Nyw3ICsxNjYsNiBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBVbmFyeVBsdXNO
b2RlKGxvY2F0aW9uLCBleHByKTsgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVWb2lkKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogICAg
IHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFZvaWROb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCkBAIC0y
MTIsNTEgKzIxMCw0MSBAQCBwdWJsaWM6CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJy
YXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zKQogICAgIHsK
LSAgICAgICAgaWYgKGVsaXNpb25zKQotICAgICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lv
bnMpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVtZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGVtcyk7IH0KICAgICBFeHByZXNz
aW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50
IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxlbXMpCiAgICAgewotICAgICAgICBpZiAoZWxpc2lv
bnMpCi0gICAgICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxvY2F0aW9uLCBlbGlzaW9ucywgZWxlbXMpOwogICAgIH0K
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlRG91YmxlRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAgICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwog
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBk
KTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRvdWJsZSBkKQogICAgIHsKLSAgICAgICAgaW5jQ29u
c3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2Rl
KGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAgCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJp
Z0ludChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBi
aWdJbnQsIHVpbnQ4X3QgcmFkaXgpCiAgICAgewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAg
ICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQmlnSW50Tm9kZShsb2NhdGlvbiwgKmJp
Z0ludCwgcmFkaXgpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdHJpbmco
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogc3RyaW5n
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cmluZyk7Ci0gICAgICAgIGluY0NvbnN0YW50cygp
OwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdHJpbmdOb2RlKGxvY2F0aW9u
LCAqc3RyaW5nKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQm9vbGVhbihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBib29sIGIpCiAgICAgewotICAgICAgICBp
bmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQm9vbGVh
bk5vZGUobG9jYXRpb24sIGIpOwogICAgIH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVO
dWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewotICAgICAgICBpbmND
b25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTnVsbE5vZGUo
bG9jYXRpb24pOwogICAgIH0KIApAQCAtMTA1OSwxMSArMTA0Nyw5IEBAIHByaXZhdGU6CiAgICAg
c3RydWN0IFNjb3BlIHsKICAgICAgICAgU2NvcGUoKQogICAgICAgICAgICAgOiBtX2ZlYXR1cmVz
KDApCi0gICAgICAgICAgICAsIG1fbnVtQ29uc3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAg
fQogICAgICAgICBpbnQgbV9mZWF0dXJlczsKLSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwog
ICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBzZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSogbm9kZSwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5k
KQpAQCAtMTA3Miw3ICsxMDU4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbm9kZS0+c2V0RXhjZXB0
aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgIH0KIAotICAg
IHZvaWQgaW5jQ29uc3RhbnRzKCkgeyBtX3Njb3BlLm1fbnVtQ29uc3RhbnRzKys7IH0KICAgICB2
b2lkIHVzZXNUaGlzKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gVGhpc0ZlYXR1cmU7IH0KICAg
ICB2b2lkIHVzZXNBcnJvd0Z1bmN0aW9uKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJyb3dG
dW5jdGlvbkZlYXR1cmU7IH0KICAgICB2b2lkIHVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGUubV9m
ZWF0dXJlcyB8PSBBcmd1bWVudHNGZWF0dXJlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMjU1MDgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogCiAgICAgaW5s
aW5lIFBhcnNlckFyZW5hUm9vdDo6UGFyc2VyQXJlbmFSb290KFBhcnNlckFyZW5hJiBwYXJzZXJB
cmVuYSkKKyAgICAgICAgOiBtX2FyZW5hKHBhcnNlckFyZW5hKQogICAgIHsKLSAgICAgICAgbV9h
cmVuYS5zd2FwKHBhcnNlckFyZW5hKTsKICAgICB9CiAKICAgICBpbmxpbmUgTm9kZTo6Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTIgKzEyNSwxMSBA
QCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyCiAgICAgLCBtX3N0YXJ0
TGluZVN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KQogICAgICwgbV9m
ZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMp
CiAgICAgLCBtX2lubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyhOb0lubmVyQXJyb3dGdW5j
dGlvbkZlYXR1cmVzKQotICAgICwgbV9udW1Db25zdGFudHMoMCkKICAgICAsIG1fc3RhdGVtZW50
cygwKQogewogfQogCi1TY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJl
bmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVt
ZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5j
dGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFi
bGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25z
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBp
bm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCitTY29wZU5v
ZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlh
YmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNr
LCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1w
bFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2Vy
QXJlbmFSb290KHBhcnNlckFyZW5hKQogICAgICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4
aWNhbFZhcmlhYmxlcywgV1RGTW92ZShmdW5jU3RhY2spKQpAQCAtMTQxLDcgKzE0MCw2IEBAIFNj
b3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFyZW5hJiBwYXJzZXIKICAgICAsIG1faW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzKGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcykKICAg
ICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMo
V1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucykpCi0gICAgLCBtX251bUNvbnN0YW50
cyhudW1Db25zdGFudHMpCiAgICAgLCBtX3N0YXRlbWVudHMoY2hpbGRyZW4pCiB7CiAgICAgbV92
YXJEZWNsYXJhdGlvbnMuc3dhcCh2YXJFbnZpcm9ubWVudCk7CkBAIC0xNjQsOCArMTYyLDggQEAg
Ym9vbCBTY29wZU5vZGU6Omhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKAogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvZ3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotUHJvZ3JhbU5vZGU6OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVu
YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29s
dW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVu
dmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50
JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVI
b2lzdGVkRnVuY3Rpb25zLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVm
UHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50
LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBudW1Db25zdGFudHMpCitQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNp
Z25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9u
bWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxl
RW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYg
c2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rp
b25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9k
dWxlU2NvcGVEYXRhPiYmKQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1v
dmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3Rl
ZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAg
ICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29s
dW1uKQogewpAQCAtMTczLDggKzE3MSw4IEBAIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShQYXJz
ZXJBcmVuYSYgcGEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1vZHVsZVBy
b2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU1vZHVsZVByb2dyYW1O
b2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRM
b2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwg
RnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZh
cmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0
aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2Rl
RmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVT
Y29wZURhdGE+JiYgbW9kdWxlU2NvcGVEYXRhKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJv
bm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9w
cHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIG51bUNvbnN0YW50cykKK01vZHVsZVByb2dyYW1Ob2RlOjpNb2R1bGVQcm9ncmFt
Tm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQg
c3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVu
LCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1
bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0
cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJh
bWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMs
IElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYgbW9kdWxlU2NvcGVEYXRhKQorICAgIDog
U2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNl
LCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZh
cmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBp
bm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0
Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogICAgICwgbV9tb2R1bGVTY29w
ZURhdGEoKldURk1vdmUobW9kdWxlU2NvcGVEYXRhKSkKQEAgLTE4Myw4ICsxODEsOCBAQCBNb2R1
bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1FdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGls
ZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2sm
JiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1
ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9u
UGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1
cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29k
ZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQot
ICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4
aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1
cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNvbnN0YW50cykKK0V2YWxO
b2RlOjpFdmFsTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwg
dW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNT
dGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmlu
Z0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCisgICAgOiBTY29wZU5vZGUocGFyc2VyQXJl
bmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJFbnZp
cm9ubWVudCwgV1RGTW92ZShmdW5jU3RhY2spLCBsZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKHNs
b3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNv
ZGVGZWF0dXJlcykKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKIH0KQEAgLTMwMSw4
ICsyOTksOCBAQCB2b2lkIEZ1bmN0aW9uTWV0YWRhdGFOb2RlOjpkdW1wKFByaW50U3RyCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbk5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotRnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZl
YXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQotICAg
IDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291
cmNlQ29kZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxl
eGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0
dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitGdW5j
dGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRM
b2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwg
RnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZh
cmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0
aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29w
ZURhdGE+JiYpCisgICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUo
ZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1
bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAg
LCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1
bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAyNTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB+UGFyc2VyQXJlbmFSb290KCkgeyB9CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CisgICAgICAgIFJlZjxQ
YXJzZXJBcmVuYT4gbV9hcmVuYTsKICAgICB9OwogCiAgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBQ
YXJzZXJBcmVuYUZyZWVhYmxlIHsKQEAgLTE3ODAsNyArMTc4MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1c2luZyBQYXJzZXJBcmVuYVJvb3Q6Om9wZXJhdG9yIG5ldzsKIAogICAgICAg
ICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgYm9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAg
ICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZp
cm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIENvZGVGZWF0dXJlcywgSW5uZXJB
cnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2Nv
cGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyos
IFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1l
bnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dG
dW5jdGlvbkNvZGVGZWF0dXJlcyk7CiAKICAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQpAQCAt
MTgyMywxMyArMTgyMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFZhcmlhYmxlRW52
aXJvbm1lbnQmIHZhckRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9
CiAKLSAgICAgICAgaW50IG5lZWRlZENvbnN0YW50cygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIFdlIG1heSBuZWVkIDIgbW9yZSBjb25zdGFudHMgdGhhbiB0aGUgY291bnQgZ2l2ZW4gYnkg
dGhlIHBhcnNlciwKLSAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIHZhcmlvdXMgdXNlcyBv
ZiBqc1VuZGVmaW5lZCgpIGFuZCBqc051bGwoKS4KLSAgICAgICAgICAgIHJldHVybiBtX251bUNv
bnN0YW50cyArIDI7Ci0gICAgICAgIH0KLQogICAgICAgICBTdGF0ZW1lbnROb2RlKiBzaW5nbGVT
dGF0ZW1lbnQoKSBjb25zdDsKIAogICAgICAgICBib29sIGhhc0NvbXBsZXRpb25WYWx1ZSgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtMTg1MCwxMyArMTg0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBt
X3ZhckRlY2xhcmF0aW9uczsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQgbV9zbG9w
cHlNb2RlSG9pc3RlZEZ1bmN0aW9uczsKLSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAg
ICAgICBTb3VyY2VFbGVtZW50cyogbV9zdGF0ZW1lbnRzOwogICAgIH07CiAKICAgICBjbGFzcyBQ
cm9ncmFtTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVu
Y3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJT
ZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQ
dHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKKyAgICAgICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEm
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVu
dHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmly
b25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZl
YXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKIAogICAgICAgICB1bnNpZ25lZCBz
dGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KICAgICAgICAgdW5z
aWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE4NzEs
NyArMTg2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbE5vZGUgZmluYWwg
OiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEV2YWxOb2RlKFBhcnNl
ckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFi
bGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1l
dGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4m
Jik7CisgICAgICAgIEV2YWxOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJ
bXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNj
b3BlRGF0YT4mJik7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVt
bigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29u
c3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE4ODYsNyArMTg3OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgTW9kdWxlUHJvZ3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2Nv
cGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVF
bnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVy
cyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNv
ZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7
CisgICAgICAgIE1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0
Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZp
cm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRT
dHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUm
LCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1v
ZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigp
IGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0yMTM4LDcgKzIxMzAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29w
ZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQs
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRz
KiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9u
bWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAg
ICAgIEZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBG
dW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0
clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURh
dGE+JiYpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAyNTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWls
dGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmcgc3Vw
ZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExl
dmVsRnVuY3Rpb24sIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wg
aXNFdmFsQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgRGVidWdnZXJQ
YXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fc291
cmNlKCZzb3VyY2UpCisgICAgLCBtX3BhcnNlckFyZW5hKFBhcnNlckFyZW5hOjpjcmVhdGUoKSkK
ICAgICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkK
ICAgICAsIG1fc3RhdGVtZW50RGVwdGgoMCkKQEAgLTE0MCw3ICsxNDEsNyBAQCBQYXJzZXI8TGV4
ZXJUeXBlPjo6UGFyc2VyKFZNJiB2bSwgY29uc3QgCiAgICAgLCBtX2RlYnVnZ2VyUGFyc2VEYXRh
KGRlYnVnZ2VyUGFyc2VEYXRhKQogewogICAgIG1fbGV4ZXIgPSBtYWtlVW5pcXVlPExleGVyVHlw
ZT4odm0sIGJ1aWx0aW5Nb2RlLCBzY3JpcHRNb2RlKTsKLSAgICBtX2xleGVyLT5zZXRDb2RlKHNv
dXJjZSwgJm1fcGFyc2VyQXJlbmEpOworICAgIG1fbGV4ZXItPnNldENvZGUoc291cmNlLCBtX3Bh
cnNlckFyZW5hLnB0cigpKTsKICAgICBtX3Rva2VuLm1fbG9jYXRpb24ubGluZSA9IHNvdXJjZS5m
aXJzdExpbmUoKS5vbmVCYXNlZEludCgpOwogICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9m
ZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwogICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRP
ZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKQEAgLTMwMiw3ICszMDMsNyBAQCBFeHBlY3Rl
ZDx0eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyCiAgICAgfQogI2VuZGlmIC8vIEFTU0VS
VF9FTkFCTEVECiAKLSAgICByZXR1cm4gUGFyc2VJbm5lclJlc3VsdCB7IHBhcmFtZXRlcnMsIHNv
dXJjZUVsZW1lbnRzLCBzY29wZS0+dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCksIFdURk1vdmUo
dmFyRGVjbGFyYXRpb25zKSwgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZl
YXR1cmVzLCBjb250ZXh0Lm51bUNvbnN0YW50cygpIH07CisgICAgcmV0dXJuIFBhcnNlSW5uZXJS
ZXN1bHQgeyBwYXJhbWV0ZXJzLCBzb3VyY2VFbGVtZW50cywgc2NvcGUtPnRha2VGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpLCBXVEZNb3ZlKHZhckRlY2xhcmF0aW9ucyksIFdURk1vdmUoc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcyB9OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGV4ZXJUeXBlPgpAQCAtMTIxNSw3ICsxMjE2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUp
IHsKICAgICAgICAgICAgICAgICBjYXNlIERPVUJMRToKICAgICAgICAgICAgICAgICBjYXNlIElO
VEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5h
LmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4o
bV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1l
cmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJs
ZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBTVFJJTkc6CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwpAQCAtMjA5Nyw3ICsyMDk4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcgogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkJvZHkoCiAgICAgVHJlZUJ1aWxkZXImIGNvbnRleHQsIFN5bnRheENoZWNr
ZXImIHN5bnRheENoZWNrZXIsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
aW50IHN0YXJ0Q29sdW1uLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5h
bWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwKLSAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3Ry
dWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlIGJv
ZHlUeXBlLCB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9k
ZSkKKyAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3Vw
ZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlIGJvZHlUeXBlLCB1bnNpZ25lZCBwYXJhbWV0ZXJD
b3VudCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIFNv
dXJjZUVsZW1lbnRzKiYgc291cmNlRWxlbWVudHMpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4g
b3ZlcnJpZGVQYXJzaW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyKG1fcGFyc2VyU3RhdGUuaXNQYXJz
aW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9k
eUJsb2NrID8gZmFsc2UgOiBtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFs
aXplcik7CiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiA9IGJvZHlUeXBl
ID09IEFycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbjsKQEAgLTIxMTgsMTAgKzIxMTksMjAgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3RpbwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZUFycm93RnVuY3Rpb25TaW5nbGVFeHByZXNzaW9u
Qm9keVNvdXJjZUVsZW1lbnRzKHN5bnRheENoZWNrZXIpLCAiQ2Fubm90IHBhcnNlIGJvZHkgb2Yg
dGhpcyBhcnJvdyBmdW5jdGlvbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2RlYnVn
Z2VyUGFyc2VEYXRhKQotICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50
cyhjb250ZXh0LCBDaGVja0ZvclN0cmljdE1vZGUpLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0
aW9uQm9keUJsb2NrID8gIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDogIkNh
bm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50cyhzeW50YXhDaGVja2Vy
LCBDaGVja0ZvclN0cmljdE1vZGUpLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9keUJs
b2NrID8gIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDogIkNhbm5vdCBwYXJz
ZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKKyAgICAgICAgaWYgKG1fZGVidWdnZXJQ
YXJzZURhdGEpIHsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVt
ZW50cyhjb250ZXh0LCBDaGVja0ZvclN0cmljdE1vZGUpOworICAgICAgICAgICAgZmFpbElmRmFs
c2Uoc291cmNlRWxlbWVudHMsIGJvZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sg
PyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJv
ZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKGVhZ2VybHlCdWlsZEFTVCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzICJjb25zdGV4cHIgaWYiIGlzIGhlcmUganVzdCBmb3IgdHlwZSBjaGVj
a2luZyAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPjo6dmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKGNvbnRleHQsIENoZWNr
Rm9yU3RyaWN0TW9kZSk7CisgICAgICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHNvdXJjZUVs
ZW1lbnRzLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9keUJsb2NrID8gIkNhbm5vdCBw
YXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDogIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMg
YXJyb3cgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKHN5bnRheENo
ZWNrZXIsIENoZWNrRm9yU3RyaWN0TW9kZSksIGJvZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25C
b2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIgOiAiQ2Fubm90
IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOworICAgICAgICB9CiAgICAgfQog
ICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CiAgICAgU3VwZXJCaW5kaW5n
IGZ1bmN0aW9uU3VwZXJCaW5kaW5nID0gYWRqdXN0U3VwZXJCaW5kaW5nRm9yQmFzZUNvbnN0cnVj
dG9yKGNvbnN0cnVjdG9yS2luZCwgc3VwZXJCaW5kaW5nLCBjdXJyZW50U2NvcGUoKSk7CkBAIC0y
MzA0LDcgKzIzMTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IHR5cGVuYW1lIFRy
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVC
dWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBT
b3VyY2VQYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3Ry
dWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIGV4cGVjdGVkU3VwZXJCaW5k
aW5nLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4mIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSBmdW5jdGlvbkRlZmlu
aXRpb25UeXBlLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb24pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvbk5h
bWVSZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBTb3VyY2VQYXJzZU1vZGUgbW9kZSwgYm9vbCBu
YW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwg
U3VwZXJCaW5kaW5nIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgRnVuY3Rp
b25EZWZpbml0aW9uVHlwZSBmdW5jdGlvbkRlZmluaXRpb25UeXBlLCBib29sIGVhZ2VybHlCdWls
ZEFTVCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUobW9kZSkpOwog
CkBAIC0yNDAzLDYgKzI0MTQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyCiAgICAgfTsKIAogICAgIFN5bnRheENoZWNrZXIgc3ludGF4Q2hlY2tlcihjb25zdF9j
YXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgIEZ1bmN0aW9uUGFyYW1ldGVycyog
cGFyYW1ldGVycyA9IG51bGxwdHI7CiAKICAgICBpZiAoVU5MSUtFTFkoKFNvdXJjZVBhcnNlTW9k
ZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUpLmNvbnRhaW5zKG1vZGUpKSkpIHsKICAgICAgICAgc3Rh
cnRMb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKQEAgLTI0OTEsMTIgKzI1MDMsMjQgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgICAgICBwYXJhbWV0ZXJz
U3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQ7CiAgICAgICAgIGZ1bmN0aW9u
SW5mby5zdGFydE9mZnNldCA9IHBhcmFtZXRlcnNTdGFydDsKIAotICAgICAgICBpZiAobG9hZENh
Y2hlZEZ1bmN0aW9uKCkpCisgICAgICAgIGlmICghZWFnZXJseUJ1aWxkQVNUICYmIGxvYWRDYWNo
ZWRGdW5jdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgewogICAg
ICAgICAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gb3ZlcnJpZGVBbGxvd0F3YWl0KG1fcGFyc2VyU3Rh
dGUuYWxsb3dBd2FpdCwgIWlzQXN5bmNGdW5jdGlvblBhcnNlTW9kZShtb2RlKSk7Ci0gICAgICAg
ICAgICBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhzeW50YXhDaGVja2VyLCBtb2RlLCBmdW5jdGlv
bkluZm8pOwotICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKworICAgICAgICAgICAgaWYg
KGVhZ2VybHlCdWlsZEFTVCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0ZDo6
aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFy
YW1ldGVycyhjb250ZXh0LCBtb2RlLCBmdW5jdGlvbkluZm8pOworICAgICAgICAgICAgICAgICAg
ICBwcm9wYWdhdGVFcnJvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcGFyc2VGdW5j
dGlvblBhcmFtZXRlcnMoc3ludGF4Q2hlY2tlciwgbW9kZSwgZnVuY3Rpb25JbmZvKTsKKyAgICAg
ICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UsICJFeHBlY3RlZCBhbiBvcGVu
aW5nICd7JyBhdCB0aGUgc3RhcnQgb2YgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSks
ICIgYm9keSIpOwpAQCAtMjU0NCw4ICsyNTY4LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcgogICAgICAgICB9CiAgICAgfSk7CiAKKyAgICBTb3VyY2VFbGVtZW50
cyogc291cmNlRWxlbWVudHMgPSBudWxscHRyOwogICAgIGF1dG8gcGVyZm9ybVBhcnNpbmdGdW5j
dGlvbkJvZHkgPSBbJl0gewotICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4
dCwgc3ludGF4Q2hlY2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3Rv
cktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbklu
Zm8ucGFyYW1ldGVyQ291bnQsIG1vZGUpOworICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJv
ZHkoY29udGV4dCwgc3ludGF4Q2hlY2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBj
b25zdHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBm
dW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIG1vZGUsIGVhZ2VybHlCdWlsZEFTVCwgc291cmNl
RWxlbWVudHMpOwogICAgIH07CiAKICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25X
cmFwcGVyUGFyc2VNb2RlKG1vZGUpKSB7CkBAIC0yNTcwLDggKzI1OTUsMzkgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+c2V0U3RyaWN0TW9kZSgpOwogCiAgICAgICAgIHBvcFNjb3BlKGdlbmVyYXRvckJvZHlTY29w
ZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbyk7Ci0gICAgfSBlbHNlCisgICAg
fSBlbHNlIHsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHkgPSBwZXJmb3JtUGFyc2luZ0Z1bmN0
aW9uQm9keSgpOworCisgICAgICAgIGlmIChlYWdlcmx5QnVpbGRBU1QgJiYgZnVuY3Rpb25JbmZv
LmJvZHkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZUVsZW1lbnRzKTsKKwor
ICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgZHVwbGljYXRlIHRoaXMgIGNvZGUgdy8gcGFyc2VJ
bm5lci4gTWFrZSBpdCBjb21tb24uCisgICAgICAgICAgICBJZGVudGlmaWVyU2V0IGNhcHR1cmVk
VmFyaWFibGVzOworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQgc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnM7CisgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5nZXRTbG9wcHlN
b2RlSG9pc3RlZEZ1bmN0aW9ucyhzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyk7CisgICAgICAg
ICAgICBmdW5jdGlvblNjb3BlLT5nZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJpYWJsZXMpOwor
CisgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMgPSBmdW5j
dGlvblNjb3BlLT5kZWNsYXJlZFZhcmlhYmxlcygpOworICAgICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IGNhcHR1cmVkVmFyaWFibGVzKQorICAgICAgICAgICAgICAgIHZhckRlY2xhcmF0aW9u
cy5tYXJrVmFyaWFibGVBc0NhcHR1cmVkKGVudHJ5KTsKKworICAgICAgICAgICAgLy9pZiAoaXNH
ZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JB
c3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUocGFyc2VNb2RlKSkgeworICAgICAgICAgICAg
Ly8gICAgaWYgKHNjb3BlLT51c2VkVmFyaWFibGVzQ29udGFpbnMobV92bS5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMuaW1wbCgpKSkKKyAgICAgICAgICAgIC8vICAgICAgICBjb250ZXh0LnByb3Bh
Z2F0ZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAgIC8vIE9P
UFM6IGZpeCB0aGlzIHRvIHNhdmUvcmVzdG9yZS4uLgorICAgICAgICAgICAgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzID0gY29udGV4dC5mZWF0dXJlcygpOworICAgICAgICAgICAgaWYgKHNjb3BlLT5z
dHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgZmVhdHVyZXMgfD0gU3RyaWN0TW9kZUZlYXR1
cmU7CisgICAgICAgICAgICBpZiAoc2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKKyAgICAgICAgICAg
IGlmIChtX3NlZW5UYWdnZWRUZW1wbGF0ZSkKKyAgICAgICAgICAgICAgICBmZWF0dXJlcyB8PSBO
b0V2YWxDYWNoZUZlYXR1cmU7CisKKyAgICAgICAgICAgIHJldHVybiBQYXJzZUlubmVyUmVzdWx0
IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVudHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJhdGlvbnMpLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lz
dGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBy
ZXN0b3JlUGFyc2VyU3RhdGUob2xkU3RhdGUpOwogICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5m
by5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rp
b25Nb2RlKG1vZGUpKTsKQEAgLTI2ODUsNyArMjc0MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5w
cm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0KIAotICAgIGZhaWxJ
ZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9k
ZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlw
ZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24p
KSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVtZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25z
dHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdv
cmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlv
biwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNh
bm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5mby5uYW1l
KTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJhdGlvblJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5j
dGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1bmN0aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAg
LTI3NDMsNyArMjc5OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRl
bWUKICAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFy
RGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0KIAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0
aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0
aGlzIGFzeW5jIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZv
KGNvbnRleHQsIHJlcXVpcmVtZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6
Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVu
Y3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0
aGlzIGFzeW5jIGZ1bmN0aW9uIik7CiAgICAgZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUs
ICJBc3luYyBmdW5jdGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKIAogICAgIHN0
ZDo6cGFpcjxEZWNsYXJhdGlvblJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0
aW9uID0gZGVjbGFyZUZ1bmN0aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAgLTI5MTgsNyArMjk3
NCw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9V
QkxFOgogICAgICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNl
ckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0
PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlk
ZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRp
Zmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsK
ICAgICAgICAgICAgIEFTU0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI5NDgsNyArMzAwNCw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1
Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGNsYXNzIGZpZWxkIG5hbWVkICdjb25zdHJ1Y3RvciciKTsK
IAogICAgICAgICAgICAgaWYgKGNvbXB1dGVkUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWRl
bnQgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlm
aWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0
aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhp
Y2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
ZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0
OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQs
IGZhbHNlKTsKQEAgLTI5ODAsNyArMzAzNiw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBtZXRob2RJbmZvLm5hbWUgPSBpc0NvbnN0cnVjdG9yID8gaW5mby5j
bGFzc05hbWUgOiBpZGVudDsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9k
ZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBjb25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3Rvcktp
bmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywg
RnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRo
b2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlz
Q29uc3RydWN0b3IgPyBjb25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1
cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZp
bml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7
CiAKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlTWV0
aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbyk7CiAgICAgICAgICAgICBp
ZiAoaXNDb25zdHJ1Y3RvcikgewpAQCAtMzA0MSw3ICszMDk3LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRE9VQkxFOgogICAgICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZt
X3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25z
dF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAg
ICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmlj
SWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZh
bHVlKTsKICAgICAgICAgICAgIEFTU0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTMwNTAsNyArMzEwNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICAgICAgICAgIGNvbXB1dGVkUHJvcGVydHlOYW1l
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKGNvbXB1dGVkUHJvcGVydHlOYW1lLCAiQ2Fubm90IHBhcnNlIGNvbXB1dGVkIHByb3Bl
cnR5IG5hbWUiKTsKICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFD
S0VULCAiXSIsICJlbmQiLCAiY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwotICAgICAgICAgICAg
aWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50
aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICBpZGVudCA9ICZt
X3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92
bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CiAgICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGRO
b2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKQEAgLTQxMzcsNyArNDE5Myw3IEBAIG5hbWVkUHJvcGVydHk6CiAgICAgICAgIG5leHQo
KTsKIAogICAgICAgICBpZiAobWF0Y2goT1BFTlBBUkVOKSkgewotICAgICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEtPmlkZW50
aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSks
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlN
ZXRob2QoY29udGV4dCwgJmlkZW50LCBwYXJzZU1vZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRl
RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVu
dCwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24s
IGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBDbGFz
c0VsZW1lbnRUYWc6Ok5vKTsKQEAgLTQxOTQsNyArNDI1MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB1bnNpZ25lZCBtZXRob2RTdGFydCA9IHRva2Vu
U3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87
CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0aG9kTmFtZTsKLSAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVk
LCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6
TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6
TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5h
bWVkLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGlu
Zzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlw
ZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlvbiwgbWV0aG9k
SW5mbyk7CiB9CiAKQEAgLTQyMjksMTAgKzQyODUsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlUHJvcGVydAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4g
aW5mbzsKICAgICBpZiAodHlwZSAmIFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZh
aWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZv
ciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBTb3VyY2VQ
YXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNlLCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGlu
Zzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRlZmlu
aXRpb25UeXBlOjpNZXRob2QpKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOwor
ICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25O
YW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBTb3VyY2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZh
bHNlLCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRl
clN0YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRob2QsIGZhbHNl
KSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIg
bGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwg
U291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBl
ckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rp
b25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRp
b24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJN
b2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVy
T3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9k
LCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgfQogCiAg
ICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFtZSkKQEAgLTQ0MTcsNiArNDQ3Myw5IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbihUcmVl
QnVpbGRlciYgY29udGV4dCkKIHsKICAgICBBU1NFUlQobWF0Y2goRlVOQ1RJT04pKTsKKworICAg
IGJvb2wgZWFnZXJseUdlbmVyYXRlQVNUID0gbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBlID09
IE9QRU5QQVJFTiAmJiBzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1
ZTsKKwogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQo
KTsKQEAgLTQ0MjUsNyArNDQ4NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2Rl
OjpOb3JtYWxGdW5jdGlvbk1vZGU7CiAgICAgaWYgKGNvbnN1bWUoVElNRVMpKQogICAgICAgICBw
YXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU7
Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFt
ZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpO
b25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90IHBh
cnNlIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUs
IGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBm
dW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBl
OjpFeHByZXNzaW9uLCBlYWdlcmx5R2VuZXJhdGVBU1QpKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlv
biBleHByZXNzaW9uIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxv
Y2F0aW9uLCBmdW5jdGlvbkluZm8pOwogfQogCkBAIC00NDQzLDcgKzQ1MDIsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAKICAgICBQYXJzZXJGdW5jdGlvbklu
Zm88VHJlZUJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZt
X3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwotICAgIGZhaWxJZkZhbHNlKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFy
c2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5l
ZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0
aW9uVHlwZTo6RXhwcmVzc2lvbiksIHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5j
RnVuY3Rpb25Nb2RlID8gIkNhbm5vdCBwYXJzZSBhc3luYyBmdW5jdGlvbiBleHByZXNzaW9uIiA6
ICJDYW5ub3QgcGFyc2UgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKKyAg
ICBmYWlsSWZGYWxzZShwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1
aXJlbWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
U3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbklu
Zm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24sIGZhbHNlKSwgcGFyc2VNb2Rl
ID09IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUgPyAiQ2Fubm90IHBhcnNlIGFz
eW5jIGZ1bmN0aW9uIGV4cHJlc3Npb24iIDogIkNhbm5vdCBwYXJzZSBhc3luYyBnZW5lcmF0b3Ig
ZnVuY3Rpb24gZXhwcmVzc2lvbiIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
RXhwcihsb2NhdGlvbiwgZnVuY3Rpb25JbmZvKTsKIH0KIApAQCAtNDk5Myw3ICs1MDUyLDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGluZm8ubmFtZSA9
ICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwogCiAgICAgU291cmNlUGFyc2VN
b2RlIHBhcnNlTW9kZSA9IGlzQXN5bmMgPyBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5j
dGlvbk1vZGUgOiBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlOwotICAgIGZhaWxJ
ZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVu
dHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBl
ckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGluZm8sIEZ1bmN0aW9u
RGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBwYXJzZSBhcnJvdyBmdW5jdGlv
biBleHByZXNzaW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRl
eHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgcGFyc2VNb2RlLCB0cnVlLCBD
b25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktl
eXdvcmRTdGFydCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbiwgZmFs
c2UpKSwgIkNhbm5vdCBwYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAKICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbyk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDI1NTA4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNzksNyArMTM3OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlRW52aXJv
bm1lbnQgdmFyRGVjbGFyYXRpb25zOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCBz
bG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9uczsKICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
OwotICAgICAgICBpbnQgbnVtQ29uc3RhbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8UGFyc2VJ
bm5lclJlc3VsdCwgU3RyaW5nPiBwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXImLCBTb3VyY2VQ
YXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBXVEY6Om51bGxvcHQsIGNvbnN0IFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4qID0gbnVsbHB0cik7CiAKQEAgLTEzOTQsNiArMTM5Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGlu
ZVN0YXJ0T2Zmc2V0OwogICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0gSlNUZXh0UG9z
aXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0KTsKICAgICAg
ICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAgICBtX3BhcnNl
clN0YXRlLmxhc3RUb2tlblR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgbV90b2tlbi5t
X3R5cGUgPSBtX2xleGVyLT5sZXgoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7
CiAgICAgfQogCkBAIC0xNDA0LDYgKzE0MDQsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbGFz
dFRva2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAg
ICAgICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBs
YXN0VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CiAgICAgICAgIG1fbGV4ZXItPnNldExh
c3RMaW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5U
eXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+
bGV4V2l0aG91dENsZWFyaW5nTGluZVRlcm1pbmF0b3IoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0
cmljdE1vZGUoKSk7CiAgICAgfQogCkBAIC0xNDE0LDYgKzE0MTUsNyBAQCBwcml2YXRlOgogICAg
ICAgICBpbnQgbGFzdFRva2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldDsKICAgICAgICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9u
KGxhc3RMaW5lLCBsYXN0VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CiAgICAgICAgIG1f
bGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV9wYXJzZXJTdGF0
ZS5sYXN0VG9rZW5UeXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIG1fdG9rZW4ubV90eXBl
ID0gbV9sZXhlci0+bGV4RXhwZWN0SWRlbnRpZmllcigmbV90b2tlbiwgbGV4ZXJGbGFncywgc3Ry
aWN0TW9kZSgpKTsKICAgICB9CiAKQEAgLTE2NTYsNyArMTY1OCw3IEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VQcm9wZXJ0eShU
cmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1aWxkZXImIGNvbnRl
eHQsIGNvbnN0IElkZW50aWZpZXIqIG1ldGhvZE5hbWUsIFNvdXJjZVBhcnNlTW9kZSk7CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0
ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25l
ZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBDb25zdHJ1Y3RvcktpbmQsIENsYXNzRWxlbWVu
dFRhZyk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRy
ZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBTeW50YXhDaGVj
a2VyJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQgZnVuY3Rpb25LZXl3b3JkU3Rh
cnQsIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwgQ29uc3RydWN0
b3JLaW5kLCBTdXBlckJpbmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUsIHVuc2lnbmVkLCBTb3VyY2VQ
YXJzZU1vZGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElO
RSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgU3ludGF4
Q2hlY2tlciYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50IGZ1bmN0aW9uS2V5d29y
ZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsIENvbnN0
cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlLCB1bnNpZ25lZCwgU291
cmNlUGFyc2VNb2RlLCBib29sIGVhZ2VybHlCdWlsZEFTVCwgU291cmNlRWxlbWVudHMqJik7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VG
b3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QsIGJv
b2wgaXNBcnJvd0Z1bmN0aW9uLCBib29sIGlzTWV0aG9kLCB1bnNpZ25lZCYpOwogICAgIGVudW0g
VmFyRGVjbGFyYXRpb25MaXN0Q29udGV4dCB7IEZvckxvb3BDb250ZXh0LCBWYXJEZWNsYXJhdGlv
bkNvbnRleHQgfTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xh
cmF0aW9ucywgVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJl
c3Npb24mIGxhc3RJbml0aWFsaXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4
dFBvc2l0aW9uJiBpbml0U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJh
dGlvbkxpc3RDb250ZXh0LCBEZWNsYXJhdGlvblR5cGUsIEV4cG9ydFR5cGUsIGJvb2wmIGZvckxv
b3BDb25zdERvZXNOb3RIYXZlSW5pdGlhbGl6ZXIpOwpAQCAtMTY4Myw3ICsxNjg1LDcgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJl
ZUV4cHJlc3Npb24gY3JlYXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKFRyZWVCdWlsZGVyJiwgY29u
c3QgSWRlbnRpZmllciosIGJvb2wgaXNFdmFsLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYpOwogCiAgICAgZW51bSBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb25U
eXBlIHsgRXhwcmVzc2lvbiwgRGVjbGFyYXRpb24sIE1ldGhvZCB9OwotICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJl
ZUJ1aWxkZXImLCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSwgYm9v
bCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcs
IGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVy
PiYsIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1
Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdCk7CisgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGRlciYsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50cywgU291cmNlUGFyc2VNb2RlLCBi
b29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGlu
ZywgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxk
ZXI+JiwgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIE9wdGlv
bmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiA9IFdURjo6
bnVsbG9wdCk7CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQXJyb3dGdW5jdGlvblBh
cmFtZXRlcnMoKTsKICAgICAKQEAgLTE3OTYsNiArMTc5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNvbnN0IElkZW50aWZpZXIqIGxhc3RGdW5jdGlvbk5hbWUgeyBudWxscHRyIH07CiAgICAgICAg
IGJvb2wgYWxsb3dBd2FpdCB7IHRydWUgfTsKICAgICAgICAgYm9vbCBpc1BhcnNpbmdDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXIgeyBmYWxzZSB9OworICAgICAgICBKU1Rva2VuVHlwZSBsYXN0VG9rZW5U
eXBlIHsgRU9GVE9LIH07CiAgICAgfTsKIAogICAgIC8vIElmIHlvdSdyZSB1c2luZyB0aGlzIGRp
cmVjdGx5LCB5b3UgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nCkBAIC0xOTAxLDcgKzE5MDQsNyBA
QCBwcml2YXRlOgogCiAgICAgVk0mIG1fdm07CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3Vy
Y2U7Ci0gICAgUGFyc2VyQXJlbmEgbV9wYXJzZXJBcmVuYTsKKyAgICBSZWY8UGFyc2VyQXJlbmE+
IG1fcGFyc2VyQXJlbmE7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExleGVyVHlwZT4gbV9sZXhlcjsK
IAogICAgIFBhcnNlclN0YXRlIG1fcGFyc2VyU3RhdGU7CkBAIC0xOTc4LDcgKzE5ODEsNiBAQCBz
dGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZVJlc3VsdC52YWx1ZSgpLmZlYXR1cmVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPmlubmVyQXJyb3dGdW5jdGlvbkZl
YXR1cmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3Vs
dC52YWx1ZSgpLm51bUNvbnN0YW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdURk1vdmUobV9tb2R1bGVTY29wZURhdGEpKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
bV9zb3VyY2UtPmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCksIG1fbGV4ZXItPmxpbmVOdW1iZXIo
KSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zm
c2V0KCkpOwogICAgICAgICByZXN1bHQtPnNldEVuZE9mZnNldChtX2xleGVyLT5jdXJyZW50T2Zm
c2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEu
aAkocmV2aXNpb24gMjU1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjAgKzEzOSwyMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFBhcnNl
ckFyZW5hKTsKIAotICAgIGNsYXNzIFBhcnNlckFyZW5hIHsKKyAgICBjbGFzcyBQYXJzZXJBcmVu
YSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhcnNlckFyZW5hPiB7CiAgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhcnNlckFyZW5hKTsKLSAgICBwdWJsaWM6CiAgICAgICAgIFBhcnNlckFyZW5h
KCk7CisgICAgcHVibGljOgogICAgICAgICB+UGFyc2VyQXJlbmEoKTsKIAotICAgICAgICB2b2lk
IHN3YXAoUGFyc2VyQXJlbmEmIG90aGVyQXJlbmEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0
ZDo6c3dhcChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1vcnkpOwot
ICAgICAgICAgICAgc3RkOjpzd2FwKG1fZnJlZWFibGVQb29sRW5kLCBvdGhlckFyZW5hLm1fZnJl
ZWFibGVQb29sRW5kKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllckFyZW5hLnN3YXAob3RoZXJB
cmVuYS5tX2lkZW50aWZpZXJBcmVuYSk7Ci0gICAgICAgICAgICBtX2ZyZWVhYmxlUG9vbHMuc3dh
cChvdGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7Ci0gICAgICAgICAgICBtX2RlbGV0YWJsZU9i
amVjdHMuc3dhcChvdGhlckFyZW5hLm1fZGVsZXRhYmxlT2JqZWN0cyk7Ci0gICAgICAgIH0KKyAg
ICAgICAgc3RhdGljIFJlZjxQYXJzZXJBcmVuYT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQYXJzZXJBcmVuYSk7IH0KKworICAgICAgICAvL3ZvaWQgc3dhcChQYXJzZXJBcmVuYSYg
b3RoZXJBcmVuYSkKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIHN0ZDo6c3dhcChtX2ZyZWVh
YmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1vcnkpOworICAgICAgICAvLyAgICBz
dGQ6OnN3YXAobV9mcmVlYWJsZVBvb2xFbmQsIG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xFbmQp
OworICAgICAgICAvLyAgICBtX2lkZW50aWZpZXJBcmVuYS5zd2FwKG90aGVyQXJlbmEubV9pZGVu
dGlmaWVyQXJlbmEpOworICAgICAgICAvLyAgICBtX2ZyZWVhYmxlUG9vbHMuc3dhcChvdGhlckFy
ZW5hLm1fZnJlZWFibGVQb29scyk7CisgICAgICAgIC8vICAgIG1fZGVsZXRhYmxlT2JqZWN0cy5z
d2FwKG90aGVyQXJlbmEubV9kZWxldGFibGVPYmplY3RzKTsKKyAgICAgICAgLy99CiAKICAgICAg
ICAgdm9pZCogYWxsb2NhdGVGcmVlYWJsZShzaXplX3Qgc2l6ZSkKICAgICAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hl
LmgJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBGdW5jdGlvbk5vZGU7CisKIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFNvdXJjZVByb3ZpZGVyQ2FjaGUpOwogY2xhc3MgU291cmNl
UHJvdmlkZXJDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZVByb3ZpZGVyQ2FjaGU+IHsK
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
U291cmNlUHJvdmlkZXJDYWNoZSk7CkBAIC00Miw4ICs0NCwyMyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlUHJvdmlkZXJD
YWNoZUl0ZW0+KTsKICAgICBjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogZ2V0KGludCBz
b3VyY2VQb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9tYXAuZ2V0KHNvdXJjZVBvc2l0aW9uKTsg
fQogCisgICAgdm9pZCBhZGRGdW5jdGlvbihpbnQgc291cmNlUG9zaXRpb24sIHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbk5vZGU+IG5vZGUpCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uTWFwLmFk
ZChzb3VyY2VQb3NpdGlvbiwgV1RGTW92ZShub2RlKSk7CisgICAgfQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbk5vZGU+IGdldEZ1bmN0aW9uKGludCBzb3VyY2VQb3NpdGlvbikKKyAgICB7
IAorICAgICAgICBhdXRvIGl0ZXIgPSBtX2Z1bmN0aW9uTWFwLmZpbmQoc291cmNlUG9zaXRpb24p
OworICAgICAgICBpZiAoaXRlciA9PSBtX2Z1bmN0aW9uTWFwLmVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IHJl
c3VsdCA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAgICBtX2Z1bmN0aW9uTWFwLnJlbW92
ZShpdGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92aWRlckNhY2hlSXRlbT4sIFdU
Rjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4+
IG1fbWFwOworICAgIEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiwg
V1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50
Pj4gbV9mdW5jdGlvbk1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNTUwODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTAsNiArNzUwLDggQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2
bSkKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZN
JiB2bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPnN0
cnVjdHVyZSgpID09IHRoaXMpOworCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAg
IEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388954</attachid>
            <date>2020-01-27 18:11:14 -0800</date>
            <delta_ts>2020-01-27 18:40:29 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>54406</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjU1MDgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw5IEBAIFNvdXJjZUNvZGUgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmwKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGxpbmtlZFN0
YXJ0Q29sdW1uKHBhcmVudFNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCkpOwogICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcGFyZW50U291cmNlLnN0YXJ0T2Zmc2V0KCkgKyBtX3N0
YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHBhcmVudFNvdXJjZS5maXJzdExp
bmUoKS5vbmVCYXNlZEludCgpICsgbV9maXJzdExpbmVPZmZzZXQ7Ci0gICAgcmV0dXJuIFNvdXJj
ZUNvZGUocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICBTb3VyY2VDb2Rl
IHJldChwYXJlbnRTb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsg
bV9zb3VyY2VMZW5ndGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4pOworICAgIGRhdGFMb2dMbigi
bGlua2VkIHNvdXJjZSBjb2RlOiBcbiIsIHJldC52aWV3KCkpOworICAgIHJldHVybiByZXQ7CiB9
CiAKIEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmso
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJjZSwgT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1i
ZXIsIEludHJpbnNpYyBpbnRyaW5zaWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMjU1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNiBA
QCBwdWJsaWM6CiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMo
KSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsgfQog
CiAgICAgaW50IGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5tX2ZlYXR1cmVzOyB9
Ci0gICAgaW50IG51bUNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9udW1Db25z
dGFudHM7IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25O
b2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBt
YWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9w
ZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CkBAIC0xNjcsNyArMTY2LDYgQEAg
cHVibGljOgogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcik7IH0KICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwcikKICAgICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBWb2lkTm9kZShsb2NhdGlvbiwgZXhwcik7
CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVUaGlzRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uKQpAQCAtMjEyLDUxICsyMTAsNDEgQEAgcHVibGljOgogCiAgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGludCBlbGlzaW9ucykKICAgICB7Ci0gICAgICAgIGlmIChlbGlzaW9ucykKLSAgICAgICAg
ICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBB
cnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRWxlbWVudE5v
ZGUqIGVsZW1zKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlv
biwgZWxlbXMpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlbGlzaW9ucywgRWxlbWVudE5vZGUqIGVsZW1zKQog
ICAgIHsKLSAgICAgICAgaWYgKGVsaXNpb25zKQotICAgICAgICAgICAgaW5jQ29uc3RhbnRzKCk7
CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlvbiwg
ZWxpc2lvbnMsIGVsZW1zKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURvdWJs
ZUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewot
ICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgRG91YmxlTm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVJbnRlZ2VyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUg
ZCkKICAgICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBJbnRlZ2VyTm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCaWdJbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogYmlnSW50LCB1aW50OF90IHJhZGl4KQogICAgIHsKLSAg
ICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEJpZ0ludE5vZGUobG9jYXRpb24sICpiaWdJbnQsIHJhZGl4KTsKICAgICB9CiAKICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIHN0cmluZykKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJpbmcp
OwotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgU3RyaW5nTm9kZShsb2NhdGlvbiwgKnN0cmluZyk7CiAgICAgfQogCiAgICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Ym9vbCBiKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEJvb2xlYW5Ob2RlKGxvY2F0aW9uLCBiKTsKICAgICB9CiAKICAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKQEAgLTEwNTksMTEg
KzEwNDcsOSBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBTY29wZSB7CiAgICAgICAgIFNjb3BlKCkK
ICAgICAgICAgICAgIDogbV9mZWF0dXJlcygwKQotICAgICAgICAgICAgLCBtX251bUNvbnN0YW50
cygwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgaW50IG1fZmVhdHVyZXM7Ci0gICAg
ICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgc2V0RXhj
ZXB0aW9uTG9jYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKQEAgLTEwNzIsNyArMTA1OCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKTsKICAgICB9CiAKLSAgICB2b2lkIGluY0NvbnN0YW50cygpIHsgbV9zY29wZS5t
X251bUNvbnN0YW50cysrOyB9CiAgICAgdm9pZCB1c2VzVGhpcygpIHsgbV9zY29wZS5tX2ZlYXR1
cmVzIHw9IFRoaXNGZWF0dXJlOyB9CiAgICAgdm9pZCB1c2VzQXJyb3dGdW5jdGlvbigpIHsgbV9z
Y29wZS5tX2ZlYXR1cmVzIHw9IEFycm93RnVuY3Rpb25GZWF0dXJlOyB9CiAgICAgdm9pZCB1c2Vz
QXJndW1lbnRzKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBQYXJzZXJBcmVuYVJvb3Q6OlBhcnNlckFyZW5h
Um9vdChQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEpCisgICAgICAgIDogbV9hcmVuYShwYXJzZXJB
cmVuYSkKICAgICB7Ci0gICAgICAgIG1fYXJlbmEuc3dhcChwYXJzZXJBcmVuYSk7CiAgICAgfQog
CiAgICAgaW5saW5lIE5vZGU6Ok5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAyNTUw
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDEyICsxMjUsMTEgQEAgU2NvcGVOb2RlOjpTY29wZU5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlcgogICAgICwgbV9zdGFydExpbmVTdGFydE9mZnNldChzdGFydExvY2F0aW9uLmxp
bmVTdGFydE9mZnNldCkKICAgICAsIG1fZmVhdHVyZXMoaW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0
TW9kZUZlYXR1cmUgOiBOb0ZlYXR1cmVzKQogICAgICwgbV9pbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMoTm9Jbm5lckFycm93RnVuY3Rpb25GZWF0dXJlcykKLSAgICAsIG1fbnVtQ29uc3Rh
bnRzKDApCiAgICAgLCBtX3N0YXRlbWVudHMoMCkKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5v
ZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25t
ZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVF
bnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBz
bG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNl
ckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwg
RnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZh
cmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0
aW9ucywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgIDogU3RhdGVtZW50Tm9kZShl
bmRMb2NhdGlvbikKICAgICAsIFBhcnNlckFyZW5hUm9vdChwYXJzZXJBcmVuYSkKICAgICAsIFZh
cmlhYmxlRW52aXJvbm1lbnROb2RlKGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoZnVuY1N0YWNr
KSkKQEAgLTE0MSw3ICsxNDAsNiBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyCiAgICAgLCBtX2lubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyhpbm5lckFycm93
RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3Ns
b3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlv
bnMpKQotICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGF0ZW1l
bnRzKGNoaWxkcmVuKQogewogICAgIG1fdmFyRGVjbGFyYXRpb25zLnN3YXAodmFyRW52aXJvbm1l
bnQpOwpAQCAtMTY0LDggKzE2Miw4IEBAIGJvb2wgU2NvcGVOb2RlOjpoYXNFYXJseUJyZWFrT3JD
b250aW51ZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVByb2dyYW1Ob2RlOjpQcm9ncmFtTm9k
ZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNT
dGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmlu
Z0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCi0gICAgOiBT
Y29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2Us
IGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVudCwgV1RGTW92ZShmdW5jU3RhY2spLCBsZXhpY2FsVmFy
aWFibGVzLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMsIGlu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorUHJvZ3JhbU5vZGU6
OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0
YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBV
bmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKKyAgICA6IFNjb3BlTm9k
ZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRy
ZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMs
IFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikK
ICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKQEAgLTE3Myw4ICsxNzEsOCBAQCBQcm9n
cmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBNb2R1bGVQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1Nb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVu
Y3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVt
Q29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmIG1vZHVsZVNjb3BlRGF0YSkKLSAg
ICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGlj
YWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJl
cywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitNb2R1bGVQ
cm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJv
bm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxl
eGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0
ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMg
aW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYm
IG1vZHVsZVNjb3BlRGF0YSkKKyAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZN
b3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0
ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQog
ICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENv
bHVtbikKICAgICAsIG1fbW9kdWxlU2NvcGVEYXRhKCpXVEZNb3ZlKG1vZHVsZVNjb3BlRGF0YSkp
CkBAIC0xODMsOCArMTgxLDggQEAgTW9kdWxlUHJvZ3JhbU5vZGU6Ok1vZHVsZVByb2dyYW1Ob2Rl
KFBhcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXZhbE5vZGU6OkV2YWxOb2RlKFBhcnNlckFyZW5h
JiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29s
dW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVu
dmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50
JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVI
b2lzdGVkRnVuY3Rpb25zLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVm
UHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50
LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBudW1Db25zdGFudHMpCitFdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNl
ckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1l
bnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGlj
YWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRG
dW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5u
ZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQor
ICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4
aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1
cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX2VuZENvbHVtbihl
bmRDb2x1bW4pCiB7CiB9CkBAIC0zMDEsOCArMjk5LDggQEAgdm9pZCBGdW5jdGlvbk1ldGFkYXRh
Tm9kZTo6ZHVtcChQcmludFN0cgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0aW9uTm9k
ZTo6RnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlv
blN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVz
LCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVz
IGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRy
PE1vZHVsZVNjb3BlRGF0YT4mJikKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVu
dCwgV1RGTW92ZShmdW5jU3RhY2spLCBsZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKHNsb3BweU1v
ZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcywgbnVtQ29uc3RhbnRzKQorRnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZl
YXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQorICAgIDogU2NvcGVOb2RlKHBhcnNl
ckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4s
IHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdU
Rk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCiAgICAg
LCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMjU1MDgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgflBh
cnNlckFyZW5hUm9vdCgpIHsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBQYXJzZXJBcmVu
YSBtX2FyZW5hOworICAgICAgICBSZWY8UGFyc2VyQXJlbmE+IG1fYXJlbmE7CiAgICAgfTsKIAog
ICAgIGNsYXNzIE5vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC0xNzgwLDcg
KzE3ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSb290
OjpvcGVyYXRvciBuZXc7CiAKICAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wg
aW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0
IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5j
dGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cyk7CisgICAgICAgIFNjb3BlTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25T
dGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwg
Q29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpOwogCiAgICAgICAg
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAg
ICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Uu
cHJvdmlkZXIoKS0+dXJsKCk7IH0KQEAgLTE4MjMsMTMgKzE4MjMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMoKSB7IHJl
dHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQogCi0gICAgICAgIGludCBuZWVkZWRDb25zdGFudHMo
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCAyIG1vcmUgY29uc3RhbnRz
IHRoYW4gdGhlIGNvdW50IGdpdmVuIGJ5IHRoZSBwYXJzZXIsCi0gICAgICAgICAgICAvLyBiZWNh
dXNlIG9mIHRoZSB2YXJpb3VzIHVzZXMgb2YganNVbmRlZmluZWQoKSBhbmQganNOdWxsKCkuCi0g
ICAgICAgICAgICByZXR1cm4gbV9udW1Db25zdGFudHMgKyAyOwotICAgICAgICB9Ci0KICAgICAg
ICAgU3RhdGVtZW50Tm9kZSogc2luZ2xlU3RhdGVtZW50KCkgY29uc3Q7CiAKICAgICAgICAgYm9v
bCBoYXNDb21wbGV0aW9uVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE4NTAsMTMgKzE4NDMs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAg
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsUHRyU2V0IG1fc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnM7Ci0gICAgICAg
IGludCBtX251bUNvbnN0YW50czsKICAgICAgICAgU291cmNlRWxlbWVudHMqIG1fc3RhdGVtZW50
czsKICAgICB9OwogCiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwg
VmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAg
IFByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0
aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4m
Jik7CiAKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0Q29sdW1uOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kQ29sdW1uOyB9CkBAIC0xODcxLDcgKzE4NjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEV2YWxOb2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBFdmFsTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQm
LCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1w
bFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMs
IFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBFdmFsTm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52
aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAg
IHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0x
ODg2LDcgKzE4NzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE1vZHVsZVByb2dy
YW1Ob2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBN
b2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBG
dW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0
clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJl
ZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBNb2R1bGVQcm9ncmFtTm9kZShQYXJz
ZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3Vy
Y2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlh
YmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFt
ZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rp
b25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQogICAg
ICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQpA
QCAtMjEzOCw3ICsyMTMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlv
bk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1
bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlv
blN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYm
LCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJ
bm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxN
b2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
LCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMjU1MDgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIFBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJp
Y3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBh
cnNlTW9kZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1
bHRDb25zdHJ1Y3RvcktpbmRGb3JUb3BMZXZlbEZ1bmN0aW9uLCBEZXJpdmVkQ29udGV4dFR5cGUg
ZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzRXZhbENvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBl
dmFsQ29udGV4dFR5cGUsIERlYnVnZ2VyUGFyc2VEYXRhKiBkZWJ1Z2dlclBhcnNlRGF0YSkKICAg
ICA6IG1fdm0odm0pCiAgICAgLCBtX3NvdXJjZSgmc291cmNlKQorICAgICwgbV9wYXJzZXJBcmVu
YShQYXJzZXJBcmVuYTo6Y3JlYXRlKCkpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2Up
CiAgICAgLCBtX2FsbG93c0luKHRydWUpCiAgICAgLCBtX3N0YXRlbWVudERlcHRoKDApCkBAIC0x
NDAsNyArMTQxLDcgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSYgdm0sIGNvbnN0IAog
ICAgICwgbV9kZWJ1Z2dlclBhcnNlRGF0YShkZWJ1Z2dlclBhcnNlRGF0YSkKIHsKICAgICBtX2xl
eGVyID0gbWFrZVVuaXF1ZTxMZXhlclR5cGU+KHZtLCBidWlsdGluTW9kZSwgc2NyaXB0TW9kZSk7
Ci0gICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsICZtX3BhcnNlckFyZW5hKTsKKyAgICBtX2xl
eGVyLT5zZXRDb2RlKHNvdXJjZSwgbV9wYXJzZXJBcmVuYS5wdHIoKSk7CiAgICAgbV90b2tlbi5t
X2xvY2F0aW9uLmxpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKTsKICAgICBt
X3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAg
ICBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CkBA
IC0zMDIsNyArMzAzLDcgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBh
cgogICAgIH0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCi0gICAgcmV0dXJuIFBhcnNlSW5u
ZXJSZXN1bHQgeyBwYXJhbWV0ZXJzLCBzb3VyY2VFbGVtZW50cywgc2NvcGUtPnRha2VGdW5jdGlv
bkRlY2xhcmF0aW9ucygpLCBXVEZNb3ZlKHZhckRlY2xhcmF0aW9ucyksIFdURk1vdmUoc2xvcHB5
TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSB9
OworICAgIHJldHVybiBQYXJzZUlubmVyUmVzdWx0IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVu
dHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJh
dGlvbnMpLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTEyMTUsNyArMTIxNiw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBET1VCTEU6
CiAgICAgICAgICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5hLT5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1f
dm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTIwOTcsNyArMjA5OCw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKIHRlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlv
bkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KAogICAgIFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBTeW50YXhDaGVja2VyJiBzeW50YXhDaGVja2VyLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGludCBzdGFydENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsCi0g
ICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIHN1cGVyQmlu
ZGluZywgRnVuY3Rpb25Cb2R5VHlwZSBib2R5VHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQs
IFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgRnVuY3Rpb25Cb2R5VHlwZSBib2R5
VHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUs
IGJvb2wgZWFnZXJseUJ1aWxkQVNULCBTb3VyY2VFbGVtZW50cyomIHNvdXJjZUVsZW1lbnRzKQog
ewogICAgIFNldEZvclNjb3BlPGJvb2w+IG92ZXJyaWRlUGFyc2luZ0NsYXNzRmllbGRJbml0aWFs
aXplcihtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFsaXplciwgYm9keVR5
cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/IGZhbHNlIDogbV9wYXJzZXJTdGF0ZS5p
c1BhcnNpbmdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Qm9keUV4cHJlc3Npb24gPSBib2R5VHlwZSA9PSBBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb247
CkBAIC0yMTE4LDEwICsyMTE5LDIzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUZ1bmN0aW8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VBcnJv
d0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50cyhzeW50YXhDaGVja2Vy
KSwgIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKICAgICB9IGVs
c2UgewotICAgICAgICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0YSkKLSAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwg
Ym9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9k
eSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1
bmN0aW9uIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291
cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUg
PT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlz
IGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7
CisgICAgICAgIGlmIChtX2RlYnVnZ2VyUGFyc2VEYXRhKSB7CisgICAgICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKQorICAg
ICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0
LCBDaGVja0ZvclN0cmljdE1vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKKyAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHNvdXJjZUVsZW1lbnRzLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1
bmN0aW9uQm9keUJsb2NrID8gIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDog
IkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChlYWdlcmx5QnVpbGRBU1QpIHsKKyAgICAgICAgICAgICAg
ICAvL1JFTEVBU0VfQVNTRVJUKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46
OnZhbHVlKTsgLy8gT09QUworICAgICAgICAgICAgICAgIC8vIFRoaXMgImNvbnN0ZXhwciBpZiIg
aXMgaGVyZSBqdXN0IGZvciB0eXBlIGNoZWNraW5nICByZXF1aXJlbWVudHMuCisgICAgICAgICAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+
Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291
cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFpbElmRmFsc2Uoc291cmNlRWxlbWVudHMsIGJvZHlUeXBlID09IFN0YW5kYXJkRnVu
Y3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIgOiAi
Q2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBh
cnNlU291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9k
eVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBv
ZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0
aW9uIik7CisgICAgICAgIH0KICAgICB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5D
b2x1bW4oKTsKICAgICBTdXBlckJpbmRpbmcgZnVuY3Rpb25TdXBlckJpbmRpbmcgPSBhZGp1c3RT
dXBlckJpbmRpbmdGb3JCYXNlQ29uc3RydWN0b3IoY29uc3RydWN0b3JLaW5kLCBzdXBlckJpbmRp
bmcsIGN1cnJlbnRTY29wZSgpKTsKQEAgLTIzMDQsNyArMjMxOCw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJl
cXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJ
c0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBl
ckJpbmRpbmcgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRl
ZmluaXRpb25UeXBlIGZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIE9wdGlvbmFsPGludD4gZnVuY3Rp
b25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1
aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFNv
dXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1
Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgZXhwZWN0ZWRTdXBlckJpbmRp
bmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWls
ZGVyPiYgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlIGZ1bmN0aW9uRGVmaW5p
dGlvblR5cGUsIGJvb2wgZWFnZXJseUJ1aWxkQVNULCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNG
dW5jdGlvblBhcnNlTW9kZShtb2RlKSk7CiAKQEAgLTI0MDMsNiArMjQxNyw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICB9OwogCiAgICAgU3ludGF4Q2hl
Y2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7
CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gbnVsbHB0cjsKIAogICAgIGlm
IChVTkxJS0VMWSgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5j
dGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkuY29udGFp
bnMobW9kZSkpKSkgewogICAgICAgICBzdGFydExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwpA
QCAtMjQ5MSwxMiArMjUwNiwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyCiAgICAgICAgIHBhcmFtZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFy
dE9mZnNldDsKICAgICAgICAgZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0
YXJ0OwogCi0gICAgICAgIGlmIChsb2FkQ2FjaGVkRnVuY3Rpb24oKSkKKyAgICAgICAgaWYgKCFl
YWdlcmx5QnVpbGRBU1QgJiYgbG9hZENhY2hlZEZ1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKwogICAgICAgICB7CiAgICAgICAgICAgICBTZXRGb3JTY29wZTxib29sPiBvdmVy
cmlkZUFsbG93QXdhaXQobV9wYXJzZXJTdGF0ZS5hbGxvd0F3YWl0LCAhaXNBc3luY0Z1bmN0aW9u
UGFyc2VNb2RlKG1vZGUpKTsKLSAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKHN5
bnRheENoZWNrZXIsIG1vZGUsIGZ1bmN0aW9uSW5mbyk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOworCisgICAgICAgICAgICBpZiAoZWFnZXJseUJ1aWxkQVNUKSB7CisgICAgICAgICAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxk
ZXI+Ojp2YWx1ZSk7IC8vIE9PUFMKKyAgICAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhjb250ZXh0LCBtb2Rl
LCBmdW5jdGlvbkluZm8pOworICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwYXJh
bWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoc3ludGF4
Q2hlY2tlciwgbW9kZSwgZnVuY3Rpb25JbmZvKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtYXRj
aE9yRmFpbChPUEVOQlJBQ0UsICJFeHBlY3RlZCBhbiBvcGVuaW5nICd7JyBhdCB0aGUgc3RhcnQg
b2YgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgYm9keSIpOwpAQCAtMjU0NCw4
ICsyNTcxLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAg
ICAgICB9CiAgICAgfSk7CiAKKyAgICBTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMgPSBu
dWxscHRyOwogICAgIGF1dG8gcGVyZm9ybVBhcnNpbmdGdW5jdGlvbkJvZHkgPSBbJl0gewotICAg
ICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgc3ludGF4Q2hlY2tlciwgc3Rh
cnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5h
bWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJC
aW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIG1v
ZGUpOworICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgc3ludGF4Q2hl
Y2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBm
dW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3RvcktpbmQsIGV4cGVj
dGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVy
Q291bnQsIG1vZGUsIGVhZ2VybHlCdWlsZEFTVCwgc291cmNlRWxlbWVudHMpOwogICAgIH07CiAK
ICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25XcmFwcGVyUGFyc2VNb2RlKG1vZGUp
KSB7CkBAIC0yNTcwLDggKzI1OTgsODAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcgogICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0U3RyaWN0TW9kZSgpOwog
CiAgICAgICAgIHBvcFNjb3BlKGdlbmVyYXRvckJvZHlTY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRz
RnJlZVZhcmlhYmxlSW5mbyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKICAgICAgICAgZnVu
Y3Rpb25JbmZvLmJvZHkgPSBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9uQm9keSgpOworCisgICAgICAg
IGlmIChlYWdlcmx5QnVpbGRBU1QgJiYgZnVuY3Rpb25JbmZvLmJvZHkpIHsKKyAgICAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPjo6dmFs
dWUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2VFbGVtZW50cyk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGFyYW1ldGVycyk7CisKKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBkb24ndCBkdXBsaWNhdGUgdGhpcyAgY29kZSB3LyBwYXJzZUlubmVyLiBN
YWtlIGl0IGNvbW1vbi4KKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyU2V0IGNhcHR1cmVkVmFy
aWFibGVzOworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0IHNsb3BweU1v
ZGVIb2lzdGVkRnVuY3Rpb25zOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPmdldFNs
b3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKTsKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5nZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJp
YWJsZXMpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIHRoaXMgYmUgYSByZWZlcmVu
Y2U/CisgICAgICAgICAgICAgICAgLy8gT09QUzogbV9mdW5jdGlvbm5EZWNsYXJhdGlvbnMgc2hv
dWxkIGJlIHJlZmVyZW5jZSBvciBubz8KKyAgICAgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25t
ZW50IHZhckRlY2xhcmF0aW9ucyA9IGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVkVmFyaWFibGVzKCk7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhcHR1cmVkVmFyaWFibGVzKQor
ICAgICAgICAgICAgICAgICAgICB2YXJEZWNsYXJhdGlvbnMubWFya1ZhcmlhYmxlQXNDYXB0dXJl
ZChlbnRyeSk7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOgorICAgICAgICAgICAgICAgIC8v
aWYgKGlzR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZShwYXJzZU1vZGUpIHx8IGlzQXN5bmNGdW5j
dGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICBpZiAoc2NvcGUtPnVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpKQorICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb250ZXh0LnByb3BhZ2F0ZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAgICAgICAgIC8vfQor
CisgICAgICAgICAgICAgICAgLy8gT09QUzogZml4IHRoaXMgdG8gc2F2ZS9yZXN0b3JlIGZvciBp
bm5lciBzY29wZXMuCisgICAgICAgICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzID0gY29u
dGV4dC5mZWF0dXJlcygpOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJp
Y3RNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0
dXJlOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvblNjb3BlLT5zaGFkb3dzQXJndW1lbnRz
KCkpCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHw9IFNoYWRvd3NBcmd1bWVudHNGZWF0
dXJlOworICAgICAgICAgICAgICAgIGlmIChtX3NlZW5UYWdnZWRUZW1wbGF0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgZmVhdHVyZXMgfD0gTm9FdmFsQ2FjaGVGZWF0dXJlOworCisgICAgICAgICAg
ICAgICAgLy9yZXR1cm4gUGFyc2VJbm5lclJlc3VsdCB7IHBhcmFtZXRlcnMsIHNvdXJjZUVsZW1l
bnRzLCBzY29wZS0+dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCksIFdURk1vdmUodmFyRGVjbGFy
YXRpb25zKSwgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzIH07
CisKKyAgICAgICAgICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247CisgICAgICAg
ICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50
TGluZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZz
ZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZSBuZXdTb3VyY2UobV9zb3VyY2Ut
PnByb3ZpZGVyKCksIHBhcmFtZXRlcnNTdGFydCwgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQsIGVu
ZExvY2F0aW9uLmxpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
Im5ldyBzb3VyY2UgdGVzdDogXG4iLCBuZXdTb3VyY2UudmlldygpKTsKKworICAgICAgICAgICAg
ICAgIC8veworICAgICAgICAgICAgICAgIC8vICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNv
dXJjZSA9ICFtX2lzQnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50
U291cmNlIDogQnVpbHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2Rl
KGNvbnN0cnVjdG9yS2luZCgpKTsKKyAgICAgICAgICAgICAgICAvLyAgICB1bnNpZ25lZCBzdGFy
dENvbHVtbiA9IGxpbmtlZFN0YXJ0Q29sdW1uKHBhcmVudFNvdXJjZS5zdGFydENvbHVtbigpLm9u
ZUJhc2VkSW50KCkpOworICAgICAgICAgICAgICAgIC8vICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gcGFyZW50U291cmNlLnN0YXJ0T2Zmc2V0KCkgKyBtX3N0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgICAgIC8vICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHBhcmVudFNvdXJjZS5maXJzdExpbmUo
KS5vbmVCYXNlZEludCgpICsgbV9maXJzdExpbmVPZmZzZXQ7CisgICAgICAgICAgICAgICAgLy8g
ICAgcmV0dXJuIFNvdXJjZUNvZGUocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0
LCBzdGFydE9mZnNldCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsK
KyAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbWFr
ZVVuaXF1ZTxGdW5jdGlvbk5vZGU+KG1fcGFyc2VyQXJlbmEuY29weVJlZigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRMb2NhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbHVtbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWxlbWVudHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckRlY2xhcmF0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlKCktPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpLCAvLyBPT1BTCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5maW5hbGl6ZUxl
eGljYWxFbnZpcm9ubWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U291cmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+aW5uZXJBcnJvd0Z1
bmN0aW9uRmVhdHVyZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnNldExvYyhuZXdTb3Vy
Y2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSwgbV9sZXhlci0+bGluZU51bWJlcigpLCBtX2xl
eGVyLT5jdXJyZW50T2Zmc2V0KCksIG1fbGV4ZXItPmN1cnJlbnRMaW5lU3RhcnRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnNldEVuZE9mZnNldChtX2xleGVyLT5jdXJyZW50
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChtX2Z1bmN0aW9uQ2FjaGUpCisgICAgICAg
ICAgICAgICAgICAgIG1fZnVuY3Rpb25DYWNoZS0+YWRkRnVuY3Rpb24ocGFyYW1ldGVyc1N0YXJ0
LCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAg
ICAgCiAgICAgcmVzdG9yZVBhcnNlclN0YXRlKG9sZFN0YXRlKTsKICAgICBmYWlsSWZGYWxzZShm
dW5jdGlvbkluZm8uYm9keSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiB0aGlzICIsIHN0cmlu
Z0ZvckZ1bmN0aW9uTW9kZShtb2RlKSk7CkBAIC0yNjg1LDcgKzI3ODUsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgICAgIGZ1bmN0aW9uSW5mby5uYW1l
ID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKICAgICB9CiAK
LSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgcmVxdWlyZW1lbnRz
LCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGU6OkRlY2xhcmF0aW9uLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0Vu
ZFBvc2l0aW9uKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOworICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwg
dHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVu
Y3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6
RGVjbGFyYXRpb24sIGZhbHNlLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOwogICAgIEFTU0VSVChmdW5jdGlv
bkluZm8ubmFtZSk7CiAKICAgICBzdGQ6OnBhaXI8RGVjbGFyYXRpb25SZXN1bHRNYXNrLCBTY29w
ZVJlZj4gZnVuY3Rpb25EZWNsYXJhdGlvbiA9IGRlY2xhcmVGdW5jdGlvbihmdW5jdGlvbkluZm8u
bmFtZSk7CkBAIC0yNzQzLDcgKzI4NDMsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiAgICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlO
YW1lcy0+c3RhckRlZmF1bHRQcml2YXRlTmFtZTsKICAgICB9CiAKLSAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgcmVxdWlyZW1lbnRzLCBwYXJzZU1vZGUsIHRydWUs
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9u
S2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkRlY2xh
cmF0aW9uLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKSksICJDYW5u
b3QgcGFyc2UgdGhpcyBhc3luYyBmdW5jdGlvbiIpOworICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24s
IGZhbHNlLCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKSksICJDYW5u
b3QgcGFyc2UgdGhpcyBhc3luYyBmdW5jdGlvbiIpOwogICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9u
SW5mby5uYW1lLCAiQXN5bmMgZnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7
CiAKICAgICBzdGQ6OnBhaXI8RGVjbGFyYXRpb25SZXN1bHRNYXNrLCBTY29wZVJlZj4gZnVuY3Rp
b25EZWNsYXJhdGlvbiA9IGRlY2xhcmVGdW5jdGlvbihmdW5jdGlvbkluZm8ubmFtZSk7CkBAIC0y
OTE4LDcgKzMwMTgsNyBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIERPVUJMRToKICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAgaWRlbnQg
PSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIo
Y29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAg
ICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3Vi
bGVWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOwogICAgICAgICAgICAgbmV4dCgp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQ4LDcgKzMwNDgsNyBAQCBwYXJzZU1ldGhvZDoK
ICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHByb3BlcnR5TmFt
ZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVsZCBuYW1lZCAnY29uc3Ry
dWN0b3InIik7CiAKICAgICAgICAgICAgIGlmIChjb21wdXRlZFByb3BlcnR5TmFtZSkgewotICAg
ICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFr
ZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKyspOworICAgICAgICAg
ICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1l
cmljSWRlbnRpZmllcihtX3ZtLCBudW1Db21wdXRlZEZpZWxkcysrKTsKICAgICAgICAgICAgICAg
ICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBjbGFzc1Njb3BlLT5k
ZWNsYXJlTGV4aWNhbFZhcmlhYmxlKGlkZW50LCB0cnVlKTsKICAgICAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGRlY2xhcmF0aW9uUmVzdWx0LCBkZWNsYXJhdGlvblJlc3VsdCA9PSBEZWNsYXJh
dGlvblJlc3VsdDo6VmFsaWQpOwogICAgICAgICAgICAgICAgIGNsYXNzU2NvcGUtPnVzZVZhcmlh
YmxlKGlkZW50LCBmYWxzZSk7CkBAIC0yOTgwLDcgKzMwODAsNyBAQCBwYXJzZU1ldGhvZDoKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgbWV0aG9kSW5mby5uYW1lID0gaXNDb25zdHJ1Y3Rv
ciA/IGluZm8uY2xhc3NOYW1lIDogaWRlbnQ7Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVk
LCBwYXJzZU1vZGUsIGZhbHNlLCBpc0NvbnN0cnVjdG9yID8gY29uc3RydWN0b3JLaW5kIDogQ29u
c3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgbWV0aG9kU3RhcnQsIG1l
dGhvZEluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6Ok1ldGhvZCkpLCAiQ2Fubm90IHBhcnNl
IHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbklu
Zm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUs
IGZhbHNlLCBpc0NvbnN0cnVjdG9yID8gY29uc3RydWN0b3JLaW5kIDogQ29uc3RydWN0b3JLaW5k
OjpOb25lLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgbWV0aG9kU3RhcnQsIG1ldGhvZEluZm8sIEZ1
bmN0aW9uRGVmaW5pdGlvblR5cGU6Ok1ldGhvZCwgZmFsc2UpKSwgIkNhbm5vdCBwYXJzZSB0aGlz
IG1ldGhvZCIpOwogCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBtZXRob2QgPSBjb250ZXh0
LmNyZWF0ZU1ldGhvZERlZmluaXRpb24obWV0aG9kTG9jYXRpb24sIG1ldGhvZEluZm8pOwogICAg
ICAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IpIHsKQEAgLTMwNDEsNyArMzE0MSw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIERPVUJMRToKICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAg
aWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50
aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7
CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5t
YWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0
YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOwogICAgICAgICAgICAg
bmV4dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMDUwLDcgKzMxNTAsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFCiAgICAgICAgICAgICBjb21wdXRlZFBy
b3BlcnR5TmFtZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5TmFtZSwgIkNhbm5vdCBwYXJzZSBjb21w
dXRlZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWls
KENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgImNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKLSAg
ICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51
bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKyspOworICAgICAgICAgICAg
aWRlbnQgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVu
dGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKyspOwogICAgICAgICAgICAgdHlwZSA9IERl
ZmluZUZpZWxkTm9kZTo6VHlwZTo6Q29tcHV0ZWROYW1lOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC00MTM3LDcgKzQyMzcsNyBAQCBuYW1lZFByb3BlcnR5OgogICAg
ICAgICBuZXh0KCk7CiAKICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikpIHsKLSAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNlckFy
ZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxW
TSY+KG1fdm0pLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJz
ZVByb3BlcnR5TWV0aG9kKGNvbnRleHQsICZpZGVudCwgcGFyc2VNb2RlKTsKICAgICAgICAgICAg
IHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9w
ZXJ0eSgmaWRlbnQsIG1ldGhvZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2Rl
OjpVbmtub3duLCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIEluZmVyTmFtZTo6QWxs
b3dlZCwgQ2xhc3NFbGVtZW50VGFnOjpObyk7CkBAIC00MTk0LDcgKzQyOTQsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgdW5zaWduZWQgbWV0aG9kU3Rh
cnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBt
ZXRob2RJbmZvOwogICAgIG1ldGhvZEluZm8ubmFtZSA9IG1ldGhvZE5hbWU7Ci0gICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50
czo6VW5uYW1lZCwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBl
ckJpbmRpbmc6Ok5lZWRlZCwgbWV0aG9kU3RhcnQsIG1ldGhvZEluZm8sIEZ1bmN0aW9uRGVmaW5p
dGlvblR5cGU6Ok1ldGhvZCkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgZmFp
bElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVt
ZW50czo6VW5uYW1lZCwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBT
dXBlckJpbmRpbmc6Ok5lZWRlZCwgbWV0aG9kU3RhcnQsIG1ldGhvZEluZm8sIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGU6Ok1ldGhvZCwgZmFsc2UpKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIp
OwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZU1ldGhvZERlZmluaXRpb24obWV0aG9kTG9jYXRp
b24sIG1ldGhvZEluZm8pOwogfQogCkBAIC00MjI5LDEwICs0MzI5LDEwIEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnQKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJl
ZUJ1aWxkZXI+IGluZm87CiAgICAgaWYgKHR5cGUgJiBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewog
ICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0
ZXIgbGlzdCBmb3IgZ2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBh
cnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1l
ZCwgU291cmNlUGFyc2VNb2RlOjpHZXR0ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBT
dXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVu
Y3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmlu
aXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQs
IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2RlOjpHZXR0
ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0
dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0
aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEg
cGFyYW1ldGVyIGxpc3QgZm9yIHNldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6
OlVubmFtZWQsIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZSwgZmFsc2UsIGNvbnN0cnVjdG9y
S2luZCwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIGlu
Zm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6Ok1ldGhvZCkpLCAiQ2Fubm90IHBhcnNlIHNldHRl
ciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhj
b250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIFNvdXJjZVBhcnNlTW9k
ZTo6U2V0dGVyTW9kZSwgZmFsc2UsIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nOjpOZWVk
ZWQsIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIGluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5
cGU6Ok1ldGhvZCwgZmFsc2UpKSwgIkNhbm5vdCBwYXJzZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOwog
ICAgIH0KIAogICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCkBAIC00NDE3LDYgKzQ1MTcsOSBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1hdGNoKEZVTkNUSU9O
KSk7CisKKyAgICBib29sIGVhZ2VybHlHZW5lcmF0ZUFTVCA9IG1fcGFyc2VyU3RhdGUubGFzdFRv
a2VuVHlwZSA9PSBPUEVOUEFSRU4gJiYgc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWls
ZGVyPjo6dmFsdWU7CisKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlv
bigpKTsKICAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsK
ICAgICBuZXh0KCk7CkBAIC00NDI1LDcgKzQ1MjgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJj
ZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlOwogICAgIGlmIChjb25zdW1lKFRJTUVTKSkK
ICAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyRnVu
Y3Rpb25Nb2RlOwotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBG
dW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVj
dG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0
YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pKSwg
IkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBh
cnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwg
cGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5v
dE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZp
bml0aW9uVHlwZTo6RXhwcmVzc2lvbiwgZWFnZXJseUdlbmVyYXRlQVNUKSksICJDYW5ub3QgcGFy
c2UgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0
aW9uRXhwcihsb2NhdGlvbiwgZnVuY3Rpb25JbmZvKTsKIH0KIApAQCAtNDQ0Myw3ICs0NTQ2LDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogCiAgICAgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBmdW5jdGlvbkluZm87CiAgICAgZnVuY3Rpb25JbmZv
Lm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICBmYWlsSWZG
YWxzZShwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6
Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5k
aW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0
aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pLCBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VN
b2RlOjpBc3luY0Z1bmN0aW9uTW9kZSA/ICJDYW5ub3QgcGFyc2UgYXN5bmMgZnVuY3Rpb24gZXhw
cmVzc2lvbiIgOiAiQ2Fubm90IHBhcnNlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBleHByZXNz
aW9uIik7CisgICAgZmFpbElmRmFsc2UocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rp
b25OYW1lUmVxdWlyZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3Rvcktp
bmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwg
ZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uLCBmYWxzZSks
IHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlID8gIkNhbm5v
dCBwYXJzZSBhc3luYyBmdW5jdGlvbiBleHByZXNzaW9uIiA6ICJDYW5ub3QgcGFyc2UgYXN5bmMg
Z2VuZXJhdG9yIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVGdW5jdGlvbkV4cHIobG9jYXRpb24sIGZ1bmN0aW9uSW5mbyk7CiB9CiAKQEAgLTQ5OTMsNyAr
NTA5Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBp
bmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKIAogICAgIFNv
dXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBpc0FzeW5jID8gU291cmNlUGFyc2VNb2RlOjpBc3lu
Y0Fycm93RnVuY3Rpb25Nb2RlIDogU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZTsK
LSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1l
UmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbmZv
LCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uKSksICJDYW5ub3QgcGFyc2UgYXJy
b3cgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9k
ZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJl
c3Npb24sIGZhbHNlKSksICJDYW5ub3QgcGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbiIp
OwogCiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHIobG9jYXRpb24s
IGluZm8pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZp
c2lvbiAyNTUwODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzc5LDcgKzEzNzksNiBAQCBwcml2YXRlOgogICAgICAgICBWYXJp
YWJsZUVudmlyb25tZW50IHZhckRlY2xhcmF0aW9uczsKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGxQdHJTZXQgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnM7CiAgICAgICAgIENvZGVGZWF0dXJl
cyBmZWF0dXJlczsKLSAgICAgICAgaW50IG51bUNvbnN0YW50czsKICAgICB9OwogICAgIEV4cGVj
dGVkPFBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gcGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVy
JiwgU291cmNlUGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBmdW5jdGlv
bkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gV1RGOjpudWxsb3B0LCBjb25zdCBW
ZWN0b3I8SlNUZXh0UG9zaXRpb24+KiA9IG51bGxwdHIpOwogCkBAIC0xMzk0LDYgKzEzOTMsNyBA
QCBwcml2YXRlOgogICAgICAgICBpbnQgbGFzdFRva2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xv
Y2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9
IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFy
dCk7CiAgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAg
ICAgbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAg
IG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+bGV4KCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJp
Y3RNb2RlKCkpOwogICAgIH0KIApAQCAtMTQwNCw2ICsxNDA0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaW50IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQ7CiAgICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRpb24gPSBKU1RleHRQb3NpdGlvbihs
YXN0TGluZSwgbGFzdFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQpOwogICAgICAgICBtX2xl
eGVyLT5zZXRMYXN0TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAgIG1fcGFyc2VyU3RhdGUu
bGFzdFRva2VuVHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICBtX3Rva2VuLm1fdHlwZSA9
IG1fbGV4ZXItPmxleFdpdGhvdXRDbGVhcmluZ0xpbmVUZXJtaW5hdG9yKCZtX3Rva2VuLCBsZXhl
ckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0KIApAQCAtMTQxNCw2ICsxNDE1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgaW50IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRpb24gPSBKU1Rl
eHRQb3NpdGlvbihsYXN0TGluZSwgbGFzdFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQpOwog
ICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAgIG1f
cGFyc2VyU3RhdGUubGFzdFRva2VuVHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICBtX3Rv
a2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4sIGxleGVy
RmxhZ3MsIHN0cmljdE1vZGUoKSk7CiAgICAgfQogCkBAIC0xNjU2LDcgKzE2NTgsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNl
UHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVByb3BlcnR5TWV0aG9kKFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRob2ROYW1lLCBTb3VyY2VQYXJzZU1v
ZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNl
R2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlw
ZSwgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgQ29uc3RydWN0b3JLaW5kLCBD
bGFzc0VsZW1lbnRUYWcpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlT
X0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwg
U3ludGF4Q2hlY2tlciYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50IGZ1bmN0aW9u
S2V5d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQs
IENvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlLCB1bnNpZ25l
ZCwgU291cmNlUGFyc2VNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFM
V0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRl
ciYsIFN5bnRheENoZWNrZXImLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCBmdW5j
dGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVyc1N0
YXJ0LCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgRnVuY3Rpb25Cb2R5VHlwZSwgdW5z
aWduZWQsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIFNvdXJjZUVsZW1l
bnRzKiYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBi
b29sIHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYsIFRyZWVGb3JtYWxQYXJhbWV0
ZXJMaXN0LCBib29sIGlzQXJyb3dGdW5jdGlvbiwgYm9vbCBpc01ldGhvZCwgdW5zaWduZWQmKTsK
ICAgICBlbnVtIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFy
RGVjbGFyYXRpb25Db250ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzc2lvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwg
aW50JiBkZWNsYXJhdGlvbnMsIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiYgbGFzdFBhdHRlcm4s
IFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0
YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwg
VmFyRGVjbGFyYXRpb25MaXN0Q29udGV4dCwgRGVjbGFyYXRpb25UeXBlLCBFeHBvcnRUeXBlLCBi
b29sJiBmb3JMb29wQ29uc3REb2VzTm90SGF2ZUluaXRpYWxpemVyKTsKQEAgLTE2ODMsNyArMTY4
NSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNf
SU5MSU5FIFRyZWVFeHByZXNzaW9uIGNyZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShUcmVlQnVp
bGRlciYsIGNvbnN0IElkZW50aWZpZXIqLCBib29sIGlzRXZhbCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKIAogICAgIGVudW0gY2xhc3MgRnVuY3Rpb25E
ZWZpbml0aW9uVHlwZSB7IEV4cHJlc3Npb24sIERlY2xhcmF0aW9uLCBNZXRob2QgfTsKLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rp
b25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzLCBTb3VyY2VQYXJz
ZU1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIENvbnN0cnVjdG9yS2luZCwgU3Vw
ZXJCaW5kaW5nLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1bmN0aW9uSW5mbzxU
cmVlQnVpbGRlcj4mLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlLCBPcHRpb25hbDxpbnQ+IGZ1bmN0
aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBXVEY6Om51bGxvcHQpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5j
dGlvbkluZm8oVHJlZUJ1aWxkZXImLCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHMsIFNvdXJjZVBh
cnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBT
dXBlckJpbmRpbmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZv
PFRyZWVCdWlsZGVyPiYsIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIGJvb2wgZWFnZXJseUJ1aWxk
QVNULCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24gPSBXVEY6Om51bGxvcHQpOwogICAgIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Fycm93
RnVuY3Rpb25QYXJhbWV0ZXJzKCk7CiAgICAgCkBAIC0xNzk2LDYgKzE3OTgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBsYXN0RnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9
OwogICAgICAgICBib29sIGFsbG93QXdhaXQgeyB0cnVlIH07CiAgICAgICAgIGJvb2wgaXNQYXJz
aW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyIHsgZmFsc2UgfTsKKyAgICAgICAgSlNUb2tlblR5cGUg
bGFzdFRva2VuVHlwZSB7IEVPRlRPSyB9OwogICAgIH07CiAKICAgICAvLyBJZiB5b3UncmUgdXNp
bmcgdGhpcyBkaXJlY3RseSwgeW91IHByb2JhYmx5IHNob3VsZCBiZSB1c2luZwpAQCAtMTkwMSw3
ICsxOTA0LDcgQEAgcHJpdmF0ZToKIAogICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IFNvdXJjZUNv
ZGUqIG1fc291cmNlOwotICAgIFBhcnNlckFyZW5hIG1fcGFyc2VyQXJlbmE7CisgICAgUmVmPFBh
cnNlckFyZW5hPiBtX3BhcnNlckFyZW5hOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXhlclR5cGU+
IG1fbGV4ZXI7CiAKICAgICBQYXJzZXJTdGF0ZSBtX3BhcnNlclN0YXRlOwpAQCAtMTkzNCw2ICsx
OTM3LDE1IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXIKICAgICBp
bnQgZXJyTGluZTsKICAgICBTdHJpbmcgZXJyTXNnOwogCisgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWU8UGFyc2VkTm9kZSwgRnVuY3Rpb25Ob2RlPjo6dmFsdWUpIHsKKyAgICAgICAgaWYg
KG1fZnVuY3Rpb25DYWNoZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gbV9mdW5j
dGlvbkNhY2hlLT5nZXRGdW5jdGlvbihtX3NvdXJjZS0+c3RhcnRPZmZzZXQoKSkpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oInJldHVybmluZyBjYWNoZWQgcmVzdWx0ISEiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCiAgICAgaWYgKFBhcnNlZE5vZGU6OnNjb3BlSXNGdW5jdGlvbikKICAgICAgICAgbV9sZXhl
ci0+c2V0SXNSZXBhcnNpbmdGdW5jdGlvbigpOwogCkBAIC0xOTU4LDYgKzE5NzAsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAgICAgfQogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKKwogICAgIGlmIChwYXJzZVJlc3VsdCkgewog
ICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247CiAgICAgICAgIGVuZExvY2F0aW9u
LmxpbmUgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CkBAIC0xOTc4LDcgKzE5OTEsNiBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZVJlc3VsdC52YWx1ZSgpLmZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPmlubmVyQXJyb3dGdW5jdGlvbkZlYXR1
cmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdC52
YWx1ZSgpLm51bUNvbnN0YW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdURk1vdmUobV9tb2R1bGVTY29wZURhdGEpKTsKICAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9z
b3VyY2UtPmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCksIG1fbGV4ZXItPmxpbmVOdW1iZXIoKSwg
bV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0
KCkpOwogICAgICAgICByZXN1bHQtPnNldEVuZE9mZnNldChtX2xleGVyLT5jdXJyZW50T2Zmc2V0
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAko
cmV2aXNpb24gMjU1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJB
cmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjAgKzEzOSwyMiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFBhcnNlckFy
ZW5hKTsKIAotICAgIGNsYXNzIFBhcnNlckFyZW5hIHsKKyAgICBjbGFzcyBQYXJzZXJBcmVuYSA6
IHB1YmxpYyBSZWZDb3VudGVkPFBhcnNlckFyZW5hPiB7CiAgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBhcnNlckFyZW5hKTsKLSAgICBwdWJsaWM6CiAgICAgICAgIFBhcnNlckFyZW5hKCk7
CisgICAgcHVibGljOgogICAgICAgICB+UGFyc2VyQXJlbmEoKTsKIAotICAgICAgICB2b2lkIHN3
YXAoUGFyc2VyQXJlbmEmIG90aGVyQXJlbmEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6
c3dhcChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1vcnkpOwotICAg
ICAgICAgICAgc3RkOjpzd2FwKG1fZnJlZWFibGVQb29sRW5kLCBvdGhlckFyZW5hLm1fZnJlZWFi
bGVQb29sRW5kKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllckFyZW5hLnN3YXAob3RoZXJBcmVu
YS5tX2lkZW50aWZpZXJBcmVuYSk7Ci0gICAgICAgICAgICBtX2ZyZWVhYmxlUG9vbHMuc3dhcChv
dGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7Ci0gICAgICAgICAgICBtX2RlbGV0YWJsZU9iamVj
dHMuc3dhcChvdGhlckFyZW5hLm1fZGVsZXRhYmxlT2JqZWN0cyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIFJlZjxQYXJzZXJBcmVuYT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQYXJzZXJBcmVuYSk7IH0KKworICAgICAgICAvL3ZvaWQgc3dhcChQYXJzZXJBcmVuYSYgb3Ro
ZXJBcmVuYSkKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIHN0ZDo6c3dhcChtX2ZyZWVhYmxl
TWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1vcnkpOworICAgICAgICAvLyAgICBzdGQ6
OnN3YXAobV9mcmVlYWJsZVBvb2xFbmQsIG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xFbmQpOwor
ICAgICAgICAvLyAgICBtX2lkZW50aWZpZXJBcmVuYS5zd2FwKG90aGVyQXJlbmEubV9pZGVudGlm
aWVyQXJlbmEpOworICAgICAgICAvLyAgICBtX2ZyZWVhYmxlUG9vbHMuc3dhcChvdGhlckFyZW5h
Lm1fZnJlZWFibGVQb29scyk7CisgICAgICAgIC8vICAgIG1fZGVsZXRhYmxlT2JqZWN0cy5zd2Fw
KG90aGVyQXJlbmEubV9kZWxldGFibGVPYmplY3RzKTsKKyAgICAgICAgLy99CiAKICAgICAgICAg
dm9pZCogYWxsb2NhdGVGcmVlYWJsZShzaXplX3Qgc2l6ZSkKICAgICAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJ
KHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
UHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCitjbGFzcyBGdW5jdGlvbk5vZGU7CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKFNvdXJjZVByb3ZpZGVyQ2FjaGUpOwogY2xhc3MgU291cmNlUHJv
dmlkZXJDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZVByb3ZpZGVyQ2FjaGU+IHsKICAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoU291
cmNlUHJvdmlkZXJDYWNoZSk7CkBAIC00Miw4ICs0NCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0+KTsKICAgICBjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogZ2V0KGludCBzb3Vy
Y2VQb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9tYXAuZ2V0KHNvdXJjZVBvc2l0aW9uKTsgfQog
CisgICAgdm9pZCBhZGRGdW5jdGlvbihpbnQgc291cmNlUG9zaXRpb24sIHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbk5vZGU+IG5vZGUpCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uTWFwLmFkZChz
b3VyY2VQb3NpdGlvbiwgV1RGTW92ZShub2RlKSk7CisgICAgfQorICAgIHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbk5vZGU+IGdldEZ1bmN0aW9uKGludCBzb3VyY2VQb3NpdGlvbikKKyAgICB7IAor
ICAgICAgICBhdXRvIGl0ZXIgPSBtX2Z1bmN0aW9uTWFwLmZpbmQoc291cmNlUG9zaXRpb24pOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX2Z1bmN0aW9uTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IHJlc3Vs
dCA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAgICBtX2Z1bmN0aW9uTWFwLnJlbW92ZShp
dGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92aWRlckNhY2hlSXRlbT4sIFdURjo6
SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4+IG1f
bWFwOworICAgIEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiwgV1RG
OjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4g
bV9mdW5jdGlvbk1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNTUwODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NTAsNiArNzUwLDggQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2bSkK
IAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3QtPnN0cnVj
dHVyZSgpID09IHRoaXMpOworCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFT
U0VSVChpc0RpY3Rpb25hcnkoKSk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388957</attachid>
            <date>2020-01-27 18:40:29 -0800</date>
            <delta_ts>2020-01-28 15:17:36 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>54495</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjU1MDgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw5IEBAIFNvdXJjZUNvZGUgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OmwKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGxpbmtlZFN0
YXJ0Q29sdW1uKHBhcmVudFNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCkpOwogICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcGFyZW50U291cmNlLnN0YXJ0T2Zmc2V0KCkgKyBtX3N0
YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IHBhcmVudFNvdXJjZS5maXJzdExp
bmUoKS5vbmVCYXNlZEludCgpICsgbV9maXJzdExpbmVPZmZzZXQ7Ci0gICAgcmV0dXJuIFNvdXJj
ZUNvZGUocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICBTb3VyY2VDb2Rl
IHJldChwYXJlbnRTb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsg
bV9zb3VyY2VMZW5ndGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4pOworICAgIGRhdGFMb2dMbigi
bGlua2VkIHNvdXJjZSBjb2RlOiBcbiIsIHJldC52aWV3KCkpOworICAgIHJldHVybiByZXQ7CiB9
CiAKIEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6Omxpbmso
Vk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHBhc3NlZFBhcmVudFNvdXJjZSwgT3B0aW9uYWw8aW50PiBvdmVycmlkZUxpbmVOdW1i
ZXIsIEludHJpbnNpYyBpbnRyaW5zaWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMjU1MDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNiBA
QCBwdWJsaWM6CiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMo
KSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsgfQog
CiAgICAgaW50IGZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5tX2ZlYXR1cmVzOyB9
Ci0gICAgaW50IG51bUNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUubV9udW1Db25z
dGFudHM7IH0KIAogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgT3BlcmF0b3IsIEV4cHJlc3Npb25O
b2RlKiByaWdodCwgYm9vbCBsZWZ0SGFzQXNzaWdubWVudHMsIGJvb2wgcmlnaHRIYXNBc3NpZ25t
ZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBt
YWtlUHJlZml4Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIE9w
ZXJhdG9yLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CkBAIC0xNjcsNyArMTY2LDYgQEAg
cHVibGljOgogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgVW5hcnlQbHVzTm9kZShsb2NhdGlvbiwgZXhwcik7IH0KICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwcikKICAgICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBWb2lkTm9kZShsb2NhdGlvbiwgZXhwcik7
CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVUaGlzRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uKQpAQCAtMjEyLDUxICsyMTAsNDEgQEAgcHVibGljOgogCiAgICAg
RXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGludCBlbGlzaW9ucykKICAgICB7Ci0gICAgICAgIGlmIChlbGlzaW9ucykKLSAgICAgICAg
ICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBB
cnJheU5vZGUobG9jYXRpb24sIGVsaXNpb25zKTsKICAgICB9CiAKICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRWxlbWVudE5v
ZGUqIGVsZW1zKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlv
biwgZWxlbXMpOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUFycmF5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludCBlbGlzaW9ucywgRWxlbWVudE5vZGUqIGVsZW1zKQog
ICAgIHsKLSAgICAgICAgaWYgKGVsaXNpb25zKQotICAgICAgICAgICAgaW5jQ29uc3RhbnRzKCk7
CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFycmF5Tm9kZShsb2NhdGlvbiwg
ZWxpc2lvbnMsIGVsZW1zKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZURvdWJs
ZUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgZG91YmxlIGQpCiAgICAgewot
ICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgRG91YmxlTm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVJbnRlZ2VyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUg
ZCkKICAgICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBJbnRlZ2VyTm9kZShsb2NhdGlvbiwgZCk7CiAgICAgfQogICAgIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVCaWdJbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogYmlnSW50LCB1aW50OF90IHJhZGl4KQogICAgIHsKLSAg
ICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEJpZ0ludE5vZGUobG9jYXRpb24sICpiaWdJbnQsIHJhZGl4KTsKICAgICB9CiAKICAgICBFeHBy
ZXNzaW9uTm9kZSogY3JlYXRlU3RyaW5nKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IElkZW50aWZpZXIqIHN0cmluZykKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJpbmcp
OwotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgU3RyaW5nTm9kZShsb2NhdGlvbiwgKnN0cmluZyk7CiAgICAgfQogCiAgICAgRXhwcmVz
c2lvbk5vZGUqIGNyZWF0ZUJvb2xlYW4oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Ym9vbCBiKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEJvb2xlYW5Ob2RlKGxvY2F0aW9uLCBiKTsKICAgICB9CiAKICAg
ICBFeHByZXNzaW9uTm9kZSogY3JlYXRlTnVsbChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIE51bGxOb2RlKGxvY2F0aW9uKTsKICAgICB9CiAKQEAgLTEwNTksMTEg
KzEwNDcsOSBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBTY29wZSB7CiAgICAgICAgIFNjb3BlKCkK
ICAgICAgICAgICAgIDogbV9mZWF0dXJlcygwKQotICAgICAgICAgICAgLCBtX251bUNvbnN0YW50
cygwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgaW50IG1fZmVhdHVyZXM7Ci0gICAg
ICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwogCiAgICAgc3RhdGljIHZvaWQgc2V0RXhj
ZXB0aW9uTG9jYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKQEAgLTEwNzIsNyArMTA1OCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIG5vZGUtPnNldEV4Y2VwdGlvblNvdXJjZUNvZGUoZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKTsKICAgICB9CiAKLSAgICB2b2lkIGluY0NvbnN0YW50cygpIHsgbV9zY29wZS5t
X251bUNvbnN0YW50cysrOyB9CiAgICAgdm9pZCB1c2VzVGhpcygpIHsgbV9zY29wZS5tX2ZlYXR1
cmVzIHw9IFRoaXNGZWF0dXJlOyB9CiAgICAgdm9pZCB1c2VzQXJyb3dGdW5jdGlvbigpIHsgbV9z
Y29wZS5tX2ZlYXR1cmVzIHw9IEFycm93RnVuY3Rpb25GZWF0dXJlOyB9CiAgICAgdm9pZCB1c2Vz
QXJndW1lbnRzKCkgeyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJndW1lbnRzRmVhdHVyZTsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBQYXJzZXJBcmVuYVJvb3Q6OlBhcnNlckFyZW5h
Um9vdChQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEpCisgICAgICAgIDogbV9hcmVuYShwYXJzZXJB
cmVuYSkKICAgICB7Ci0gICAgICAgIG1fYXJlbmEuc3dhcChwYXJzZXJBcmVuYSk7CiAgICAgfQog
CiAgICAgaW5saW5lIE5vZGU6Ok5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAyNTUw
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDEyICsxMjUsMTEgQEAgU2NvcGVOb2RlOjpTY29wZU5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlcgogICAgICwgbV9zdGFydExpbmVTdGFydE9mZnNldChzdGFydExvY2F0aW9uLmxp
bmVTdGFydE9mZnNldCkKICAgICAsIG1fZmVhdHVyZXMoaW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0
TW9kZUZlYXR1cmUgOiBOb0ZlYXR1cmVzKQogICAgICwgbV9pbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMoTm9Jbm5lckFycm93RnVuY3Rpb25GZWF0dXJlcykKLSAgICAsIG1fbnVtQ29uc3Rh
bnRzKDApCiAgICAgLCBtX3N0YXRlbWVudHMoMCkKIHsKIH0KIAotU2NvcGVOb2RlOjpTY29wZU5v
ZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25t
ZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVF
bnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBz
bG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQorU2NvcGVOb2RlOjpTY29wZU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNl
ckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU291cmNl
RWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwg
RnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZh
cmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0
aW9ucywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgIDogU3RhdGVtZW50Tm9kZShl
bmRMb2NhdGlvbikKICAgICAsIFBhcnNlckFyZW5hUm9vdChwYXJzZXJBcmVuYSkKICAgICAsIFZh
cmlhYmxlRW52aXJvbm1lbnROb2RlKGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoZnVuY1N0YWNr
KSkKQEAgLTE0MSw3ICsxNDAsNiBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyCiAgICAgLCBtX2lubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyhpbm5lckFycm93
RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3Ns
b3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlv
bnMpKQotICAgICwgbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQogICAgICwgbV9zdGF0ZW1l
bnRzKGNoaWxkcmVuKQogewogICAgIG1fdmFyRGVjbGFyYXRpb25zLnN3YXAodmFyRW52aXJvbm1l
bnQpOwpAQCAtMTY0LDggKzE2Miw4IEBAIGJvb2wgU2NvcGVOb2RlOjpoYXNFYXJseUJyZWFrT3JD
b250aW51ZSgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb2dyYW1Ob2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVByb2dyYW1Ob2RlOjpQcm9ncmFtTm9k
ZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBW
YXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNT
dGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmlu
Z0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCi0gICAgOiBT
Y29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2Us
IGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVudCwgV1RGTW92ZShmdW5jU3RhY2spLCBsZXhpY2FsVmFy
aWFibGVzLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMsIGlu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgbnVtQ29uc3RhbnRzKQorUHJvZ3JhbU5vZGU6
OlByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyog
Y2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0
YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBV
bmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBGdW5j
dGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKKyAgICA6IFNjb3BlTm9k
ZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRy
ZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMs
IFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJv
d0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikK
ICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikKIHsKQEAgLTE3Myw4ICsxNzEsOCBAQCBQcm9n
cmFtTm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBNb2R1bGVQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1Nb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVu
Y3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVt
Q29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmIG1vZHVsZVNjb3BlRGF0YSkKLSAg
ICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGlj
YWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJl
cywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitNb2R1bGVQ
cm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJv
bm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxl
eGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0
ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMg
aW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYm
IG1vZHVsZVNjb3BlRGF0YSkKKyAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZN
b3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0
ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKQog
ICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENv
bHVtbikKICAgICAsIG1fbW9kdWxlU2NvcGVEYXRhKCpXVEZNb3ZlKG1vZHVsZVNjb3BlRGF0YSkp
CkBAIC0xODMsOCArMTgxLDggQEAgTW9kdWxlUHJvZ3JhbU5vZGU6Ok1vZHVsZVByb2dyYW1Ob2Rl
KFBhcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXZhbE5vZGU6OkV2YWxOb2RlKFBhcnNlckFyZW5h
JiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCwgdW5zaWduZWQgZW5kQ29s
dW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVu
dmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50
JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVI
b2lzdGVkRnVuY3Rpb25zLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVm
UHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50
LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBudW1Db25zdGFudHMpCitFdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2VyQXJlbmEmIHBhcnNl
ckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1l
bnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGlj
YWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRG
dW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Q29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5u
ZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQor
ICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
c291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4
aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1
cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX2VuZENvbHVtbihl
bmRDb2x1bW4pCiB7CiB9CkBAIC0zMDEsOCArMjk5LDggQEAgdm9pZCBGdW5jdGlvbk1ldGFkYXRh
Tm9kZTo6ZHVtcChQcmludFN0cgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RnVuY3Rpb25Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0aW9uTm9k
ZTo6RnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9u
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlv
blN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVz
LCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNv
ZGUsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVz
IGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRy
PE1vZHVsZVNjb3BlRGF0YT4mJikKLSAgICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRM
b2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVu
dCwgV1RGTW92ZShmdW5jU3RhY2spLCBsZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKHNsb3BweU1v
ZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcywgbnVtQ29uc3RhbnRzKQorRnVuY3Rpb25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZp
cm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1l
dGVycywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVz
LCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZl
YXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQorICAgIDogU2NvcGVOb2RlKHBhcnNl
ckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4s
IHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdU
Rk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzKQogICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCiAgICAg
LCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMjU1MDgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgflBh
cnNlckFyZW5hUm9vdCgpIHsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBQYXJzZXJBcmVu
YSBtX2FyZW5hOworICAgICAgICBSZWY8UGFyc2VyQXJlbmE+IG1fYXJlbmE7CiAgICAgfTsKIAog
ICAgIGNsYXNzIE5vZGUgOiBwdWJsaWMgUGFyc2VyQXJlbmFGcmVlYWJsZSB7CkBAIC0xNzgwLDcg
KzE3ODAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSb290
OjpvcGVyYXRvciBuZXc7CiAKICAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wg
aW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0
IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5j
dGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51
bUNvbnN0YW50cyk7CisgICAgICAgIFNjb3BlTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25T
dGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwg
Q29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpOwogCiAgICAgICAg
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAg
ICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Uu
cHJvdmlkZXIoKS0+dXJsKCk7IH0KQEAgLTE4MjMsMTMgKzE4MjMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMoKSB7IHJl
dHVybiBtX3ZhckRlY2xhcmF0aW9uczsgfQogCi0gICAgICAgIGludCBuZWVkZWRDb25zdGFudHMo
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCAyIG1vcmUgY29uc3RhbnRz
IHRoYW4gdGhlIGNvdW50IGdpdmVuIGJ5IHRoZSBwYXJzZXIsCi0gICAgICAgICAgICAvLyBiZWNh
dXNlIG9mIHRoZSB2YXJpb3VzIHVzZXMgb2YganNVbmRlZmluZWQoKSBhbmQganNOdWxsKCkuCi0g
ICAgICAgICAgICByZXR1cm4gbV9udW1Db25zdGFudHMgKyAyOwotICAgICAgICB9Ci0KICAgICAg
ICAgU3RhdGVtZW50Tm9kZSogc2luZ2xlU3RhdGVtZW50KCkgY29uc3Q7CiAKICAgICAgICAgYm9v
bCBoYXNDb21wbGV0aW9uVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE4NTAsMTMgKzE4NDMs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAg
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsUHRyU2V0IG1fc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnM7Ci0gICAgICAg
IGludCBtX251bUNvbnN0YW50czsKICAgICAgICAgU291cmNlRWxlbWVudHMqIG1fc3RhdGVtZW50
czsKICAgICB9OwogCiAgICAgY2xhc3MgUHJvZ3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVO
b2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwg
VmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0
IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAg
IFByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0
aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4m
Jik7CiAKICAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0Q29sdW1uOyB9CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kQ29sdW1uOyB9CkBAIC0xODcxLDcgKzE4NjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEV2YWxOb2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBFdmFsTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQm
LCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1w
bFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZl
YXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMs
IFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBFdmFsTm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVt
ZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52
aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMq
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAg
IHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CkBAIC0x
ODg2LDcgKzE4NzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE1vZHVsZVByb2dy
YW1Ob2RlIGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBN
b2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBG
dW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0
clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1
cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJl
ZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBNb2R1bGVQcm9ncmFtTm9kZShQYXJz
ZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3Vy
Y2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlh
YmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFt
ZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rp
b25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQogICAg
ICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQpA
QCAtMjEzOCw3ICsyMTMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlv
bk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1
bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlv
blN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYm
LCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJ
bm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIFJlZlB0cjxN
b2R1bGVTY29wZURhdGE+JiYpOworICAgICAgICBGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
LCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMjU1MDgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIFBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJp
Y3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBh
cnNlTW9kZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1
bHRDb25zdHJ1Y3RvcktpbmRGb3JUb3BMZXZlbEZ1bmN0aW9uLCBEZXJpdmVkQ29udGV4dFR5cGUg
ZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzRXZhbENvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBl
dmFsQ29udGV4dFR5cGUsIERlYnVnZ2VyUGFyc2VEYXRhKiBkZWJ1Z2dlclBhcnNlRGF0YSkKICAg
ICA6IG1fdm0odm0pCiAgICAgLCBtX3NvdXJjZSgmc291cmNlKQorICAgICwgbV9wYXJzZXJBcmVu
YShQYXJzZXJBcmVuYTo6Y3JlYXRlKCkpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2Up
CiAgICAgLCBtX2FsbG93c0luKHRydWUpCiAgICAgLCBtX3N0YXRlbWVudERlcHRoKDApCkBAIC0x
NDAsNyArMTQxLDcgQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSYgdm0sIGNvbnN0IAog
ICAgICwgbV9kZWJ1Z2dlclBhcnNlRGF0YShkZWJ1Z2dlclBhcnNlRGF0YSkKIHsKICAgICBtX2xl
eGVyID0gbWFrZVVuaXF1ZTxMZXhlclR5cGU+KHZtLCBidWlsdGluTW9kZSwgc2NyaXB0TW9kZSk7
Ci0gICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsICZtX3BhcnNlckFyZW5hKTsKKyAgICBtX2xl
eGVyLT5zZXRDb2RlKHNvdXJjZSwgbV9wYXJzZXJBcmVuYS5wdHIoKSk7CiAgICAgbV90b2tlbi5t
X2xvY2F0aW9uLmxpbmUgPSBzb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKTsKICAgICBt
X3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKICAg
ICBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7CkBA
IC0zMDIsNyArMzAzLDcgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBh
cgogICAgIH0KICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCi0gICAgcmV0dXJuIFBhcnNlSW5u
ZXJSZXN1bHQgeyBwYXJhbWV0ZXJzLCBzb3VyY2VFbGVtZW50cywgc2NvcGUtPnRha2VGdW5jdGlv
bkRlY2xhcmF0aW9ucygpLCBXVEZNb3ZlKHZhckRlY2xhcmF0aW9ucyksIFdURk1vdmUoc2xvcHB5
TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSB9
OworICAgIHJldHVybiBQYXJzZUlubmVyUmVzdWx0IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVu
dHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJh
dGlvbnMpLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTEyMTUsNyArMTIxNiw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBET1VCTEU6
CiAgICAgICAgICAgICAgICAgY2FzZSBJTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5hLT5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1f
dm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTIwOTcsNyArMjA5OCw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKIHRlbXBsYXRlIDx0eXBl
bmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlv
bkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KAogICAgIFRyZWVCdWls
ZGVyJiBjb250ZXh0LCBTeW50YXhDaGVja2VyJiBzeW50YXhDaGVja2VyLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGludCBzdGFydENvbHVtbiwgaW50IGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsCi0g
ICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIHN1cGVyQmlu
ZGluZywgRnVuY3Rpb25Cb2R5VHlwZSBib2R5VHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQs
IFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgRnVuY3Rpb25Cb2R5VHlwZSBib2R5
VHlwZSwgdW5zaWduZWQgcGFyYW1ldGVyQ291bnQsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUs
IGJvb2wgZWFnZXJseUJ1aWxkQVNULCBTb3VyY2VFbGVtZW50cyomIHNvdXJjZUVsZW1lbnRzKQog
ewogICAgIFNldEZvclNjb3BlPGJvb2w+IG92ZXJyaWRlUGFyc2luZ0NsYXNzRmllbGRJbml0aWFs
aXplcihtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFsaXplciwgYm9keVR5
cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/IGZhbHNlIDogbV9wYXJzZXJTdGF0ZS5p
c1BhcnNpbmdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Qm9keUV4cHJlc3Npb24gPSBib2R5VHlwZSA9PSBBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb247
CkBAIC0yMTE4LDEwICsyMTE5LDIzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUZ1bmN0aW8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VBcnJv
d0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50cyhzeW50YXhDaGVja2Vy
KSwgIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKICAgICB9IGVs
c2UgewotICAgICAgICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0YSkKLSAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwg
Ym9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9k
eSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1
bmN0aW9uIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291
cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUg
PT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlz
IGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7
CisgICAgICAgIGlmIChtX2RlYnVnZ2VyUGFyc2VEYXRhKSB7CisgICAgICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKQorICAg
ICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0
LCBDaGVja0ZvclN0cmljdE1vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKKyAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHNvdXJjZUVsZW1lbnRzLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1
bmN0aW9uQm9keUJsb2NrID8gIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDog
IkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChlYWdlcmx5QnVpbGRBU1QpIHsKKyAgICAgICAgICAgICAg
ICAvL1JFTEVBU0VfQVNTRVJUKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46
OnZhbHVlKTsgLy8gT09QUworICAgICAgICAgICAgICAgIC8vIFRoaXMgImNvbnN0ZXhwciBpZiIg
aXMgaGVyZSBqdXN0IGZvciB0eXBlIGNoZWNraW5nICByZXF1aXJlbWVudHMuCisgICAgICAgICAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+
Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291
cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFpbElmRmFsc2Uoc291cmNlRWxlbWVudHMsIGJvZHlUeXBlID09IFN0YW5kYXJkRnVu
Y3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIgOiAi
Q2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBh
cnNlU291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9k
eVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBv
ZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0
aW9uIik7CisgICAgICAgIH0KICAgICB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5D
b2x1bW4oKTsKICAgICBTdXBlckJpbmRpbmcgZnVuY3Rpb25TdXBlckJpbmRpbmcgPSBhZGp1c3RT
dXBlckJpbmRpbmdGb3JCYXNlQ29uc3RydWN0b3IoY29uc3RydWN0b3JLaW5kLCBzdXBlckJpbmRp
bmcsIGN1cnJlbnRTY29wZSgpKTsKQEAgLTIzMDQsNyArMjMxOCw3IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJl
cXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJ
c0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBl
ckJpbmRpbmcgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRl
ZmluaXRpb25UeXBlIGZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIE9wdGlvbmFsPGludD4gZnVuY3Rp
b25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikKK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1
aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFNv
dXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1
Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgZXhwZWN0ZWRTdXBlckJpbmRp
bmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWls
ZGVyPiYgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlIGZ1bmN0aW9uRGVmaW5p
dGlvblR5cGUsIGJvb2wgZWFnZXJseUJ1aWxkQVNULCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNG
dW5jdGlvblBhcnNlTW9kZShtb2RlKSk7CiAKQEAgLTI0MDMsNiArMjQxNyw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICB9OwogCiAgICAgU3ludGF4Q2hl
Y2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7
CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gbnVsbHB0cjsKIAogICAgIGlm
IChVTkxJS0VMWSgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5j
dGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkuY29udGFp
bnMobW9kZSkpKSkgewogICAgICAgICBzdGFydExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwpA
QCAtMjQ5MSwxMiArMjUwNiwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyCiAgICAgICAgIHBhcmFtZXRlcnNTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFy
dE9mZnNldDsKICAgICAgICAgZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0ID0gcGFyYW1ldGVyc1N0
YXJ0OwogCi0gICAgICAgIGlmIChsb2FkQ2FjaGVkRnVuY3Rpb24oKSkKKyAgICAgICAgaWYgKCFl
YWdlcmx5QnVpbGRBU1QgJiYgbG9hZENhY2hlZEZ1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKwogICAgICAgICB7CiAgICAgICAgICAgICBTZXRGb3JTY29wZTxib29sPiBvdmVy
cmlkZUFsbG93QXdhaXQobV9wYXJzZXJTdGF0ZS5hbGxvd0F3YWl0LCAhaXNBc3luY0Z1bmN0aW9u
UGFyc2VNb2RlKG1vZGUpKTsKLSAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKHN5
bnRheENoZWNrZXIsIG1vZGUsIGZ1bmN0aW9uSW5mbyk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOworCisgICAgICAgICAgICBpZiAoZWFnZXJseUJ1aWxkQVNUKSB7CisgICAgICAgICAg
ICAgICAgLy9SRUxFQVNFX0FTU0VSVChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxk
ZXI+Ojp2YWx1ZSk7IC8vIE9PUFMKKyAgICAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhjb250ZXh0LCBtb2Rl
LCBmdW5jdGlvbkluZm8pOworICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwYXJh
bWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoc3ludGF4
Q2hlY2tlciwgbW9kZSwgZnVuY3Rpb25JbmZvKTsKKyAgICAgICAgICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtYXRj
aE9yRmFpbChPUEVOQlJBQ0UsICJFeHBlY3RlZCBhbiBvcGVuaW5nICd7JyBhdCB0aGUgc3RhcnQg
b2YgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgYm9keSIpOwpAQCAtMjU0NCw4
ICsyNTcxLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAg
ICAgICB9CiAgICAgfSk7CiAKKyAgICBTb3VyY2VFbGVtZW50cyogc291cmNlRWxlbWVudHMgPSBu
dWxscHRyOwogICAgIGF1dG8gcGVyZm9ybVBhcnNpbmdGdW5jdGlvbkJvZHkgPSBbJl0gewotICAg
ICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgc3ludGF4Q2hlY2tlciwgc3Rh
cnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5h
bWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJC
aW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIG1v
ZGUpOworICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgc3ludGF4Q2hl
Y2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBm
dW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3RvcktpbmQsIGV4cGVj
dGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVy
Q291bnQsIG1vZGUsIGVhZ2VybHlCdWlsZEFTVCwgc291cmNlRWxlbWVudHMpOwogICAgIH07CiAK
ICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25XcmFwcGVyUGFyc2VNb2RlKG1vZGUp
KSB7CkBAIC0yNTcwLDggKzI1OTgsODEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcgogICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+c2V0U3RyaWN0TW9kZSgpOwog
CiAgICAgICAgIHBvcFNjb3BlKGdlbmVyYXRvckJvZHlTY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRz
RnJlZVZhcmlhYmxlSW5mbyk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKICAgICAgICAgZnVu
Y3Rpb25JbmZvLmJvZHkgPSBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9uQm9keSgpOworCisgICAgICAg
IGlmIChlYWdlcmx5QnVpbGRBU1QgJiYgZnVuY3Rpb25JbmZvLmJvZHkpIHsKKyAgICAgICAgICAg
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPjo6dmFs
dWUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2VFbGVtZW50cyk7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGFyYW1ldGVycyk7CisKKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBkb24ndCBkdXBsaWNhdGUgdGhpcyAgY29kZSB3LyBwYXJzZUlubmVyLiBN
YWtlIGl0IGNvbW1vbi4KKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyU2V0IGNhcHR1cmVkVmFy
aWFibGVzOworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0IHNsb3BweU1v
ZGVIb2lzdGVkRnVuY3Rpb25zOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPmdldFNs
b3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKTsKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5nZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJp
YWJsZXMpOworCisgICAgICAgICAgICAgICAgLy8gT09QUzogY2FuIHRoaXMgYmUgYSByZWZlcmVu
Y2U/CisgICAgICAgICAgICAgICAgLy8gT09QUzogbV9mdW5jdGlvbm5EZWNsYXJhdGlvbnMgc2hv
dWxkIGJlIHJlZmVyZW5jZSBvciBubz8KKyAgICAgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25t
ZW50IHZhckRlY2xhcmF0aW9ucyA9IGZ1bmN0aW9uU2NvcGUtPmRlY2xhcmVkVmFyaWFibGVzKCk7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNhcHR1cmVkVmFyaWFibGVzKQor
ICAgICAgICAgICAgICAgICAgICB2YXJEZWNsYXJhdGlvbnMubWFya1ZhcmlhYmxlQXNDYXB0dXJl
ZChlbnRyeSk7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOgorICAgICAgICAgICAgICAgIC8v
aWYgKGlzR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZShwYXJzZU1vZGUpIHx8IGlzQXN5bmNGdW5j
dGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICBpZiAoc2NvcGUtPnVzZWRWYXJpYWJsZXNDb250YWlucyhtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cy5pbXBsKCkpKQorICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb250ZXh0LnByb3BhZ2F0ZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAgICAgICAgIC8vfQor
CisgICAgICAgICAgICAgICAgLy8gT09QUzogZml4IHRoaXMgdG8gc2F2ZS9yZXN0b3JlIGZvciBp
bm5lciBzY29wZXMuCisgICAgICAgICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzID0gY29u
dGV4dC5mZWF0dXJlcygpOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJp
Y3RNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0
dXJlOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvblNjb3BlLT5zaGFkb3dzQXJndW1lbnRz
KCkpCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHw9IFNoYWRvd3NBcmd1bWVudHNGZWF0
dXJlOworICAgICAgICAgICAgICAgIGlmIChtX3NlZW5UYWdnZWRUZW1wbGF0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgZmVhdHVyZXMgfD0gTm9FdmFsQ2FjaGVGZWF0dXJlOworCisgICAgICAgICAg
ICAgICAgLy9yZXR1cm4gUGFyc2VJbm5lclJlc3VsdCB7IHBhcmFtZXRlcnMsIHNvdXJjZUVsZW1l
bnRzLCBzY29wZS0+dGFrZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCksIFdURk1vdmUodmFyRGVjbGFy
YXRpb25zKSwgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzIH07
CisKKyAgICAgICAgICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247CisgICAgICAg
ICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50
TGluZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZz
ZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZSBuZXdTb3VyY2UobV9zb3VyY2Ut
PnByb3ZpZGVyKCksIHBhcmFtZXRlcnNTdGFydCwgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQsIHN0
YXJ0TG9jYXRpb24ubGluZSwgc3RhcnRDb2x1bW4pOworICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigibmV3IHNvdXJjZSB0ZXN0OiBcbiIsIG5ld1NvdXJjZS52aWV3KCkpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigibmV3IHNvdXJjZSBzdGFydCBsaW5lIDEgYmFzZWQ6ICIsIG5ld1NvdXJj
ZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpKTsKKworICAgICAgICAgICAgICAgIC8veworICAg
ICAgICAgICAgICAgIC8vICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSA9ICFtX2lz
QnVpbHRpbkRlZmF1bHRDbGFzc0NvbnN0cnVjdG9yID8gcGFzc2VkUGFyZW50U291cmNlIDogQnVp
bHRpbkV4ZWN1dGFibGVzOjpkZWZhdWx0Q29uc3RydWN0b3JTb3VyY2VDb2RlKGNvbnN0cnVjdG9y
S2luZCgpKTsKKyAgICAgICAgICAgICAgICAvLyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGxp
bmtlZFN0YXJ0Q29sdW1uKHBhcmVudFNvdXJjZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCkp
OworICAgICAgICAgICAgICAgIC8vICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcGFyZW50U291
cmNlLnN0YXJ0T2Zmc2V0KCkgKyBtX3N0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgIC8vICAg
IHVuc2lnbmVkIGZpcnN0TGluZSA9IHBhcmVudFNvdXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZElu
dCgpICsgbV9maXJzdExpbmVPZmZzZXQ7CisgICAgICAgICAgICAgICAgLy8gICAgcmV0dXJuIFNv
dXJjZUNvZGUocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAg
ICAgICAvL30KKyAgICAgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbWFrZVVuaXF1ZTxGdW5j
dGlvbk5vZGU+KG1fcGFyc2VyQXJlbmEuY29weVJlZigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvY2F0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbHVtbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWxlbWVudHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckRlY2xhcmF0aW9ucywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnRha2VG
dW5jdGlvbkRlY2xhcmF0aW9ucygpLCAvLyBPT1BTCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5maW5hbGl6ZUxleGljYWxFbnZpcm9u
bWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVEZN
b3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+aW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVy
ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnNldExvYyhuZXdTb3VyY2UuZmlyc3RMaW5l
KCkub25lQmFzZWRJbnQoKSwgZW5kTG9jYXRpb24ubGluZSwgZW5kTG9jYXRpb24uc3RhcnRPZmZz
ZXQsIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgZnVuY3Rp
b24tPnNldEVuZE9mZnNldChlbmRMb2NhdGlvbi5zdGFydE9mZnNldCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fZnVuY3Rpb25DYWNoZSkKKyAgICAgICAgICAgICAgICAgICAgbV9mdW5jdGlvbkNh
Y2hlLT5hZGRGdW5jdGlvbihwYXJhbWV0ZXJzU3RhcnQsIFdURk1vdmUoZnVuY3Rpb24pKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICByZXN0b3JlUGFyc2VyU3Rh
dGUob2xkU3RhdGUpOwogICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5mby5ib2R5LCAiQ2Fubm90
IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsK
QEAgLTI2ODUsNyArMjc4Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0
YXRlbWUKICAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5z
dGFyRGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0KIAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24s
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJz
ZSB0aGlzIGZ1bmN0aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIHJlcXVpcmVtZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rp
b25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0
aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlz
IGZ1bmN0aW9uIik7CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5mby5uYW1lKTsKIAogICAgIHN0ZDo6
cGFpcjxEZWNsYXJhdGlvblJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9u
ID0gZGVjbGFyZUZ1bmN0aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAgLTI3NDMsNyArMjg0NCw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZnVu
Y3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVO
YW1lOwogICAgIH0KIAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBT
dXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5m
bywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0
aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVp
cmVtZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmlu
ZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5j
dGlvbkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0
aW9uIik7CiAgICAgZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUsICJBc3luYyBmdW5jdGlv
biBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJh
dGlvblJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1
bmN0aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAgLTI5MTgsNyArMzAxOSw3IEBAIHBhcnNlTWV0
aG9kOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBj
YXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1f
dG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2Vy
QXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0
PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFT
U0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTI5NDgsNyArMzA0OSw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvciwgIkNhbm5vdCBk
ZWNsYXJlIGNsYXNzIGZpZWxkIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKIAogICAgICAgICAgICAg
aWYgKGNvbXB1dGVkUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9w
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwg
bnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJB
cmVuYS0+aWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNv
bXB1dGVkRmllbGRzKyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBk
ZWNsYXJhdGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRl
bnQsIHRydWUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1
bHQsIGRlY2xhcmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAg
ICAgICAgICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTI5
ODAsNyArMzA4MSw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBtZXRob2RJbmZvLm5hbWUgPSBpc0NvbnN0cnVjdG9yID8gaW5mby5jbGFzc05hbWUgOiBpZGVu
dDsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBG
dW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29u
c3RydWN0b3IgPyBjb25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVy
QmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0
aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVS
ZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBj
b25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVl
ZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0
aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAKICAgICAgICAgICAg
IFRyZWVFeHByZXNzaW9uIG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbiht
ZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbyk7CiAgICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3Rv
cikgewpAQCAtMzA0MSw3ICszMTQyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU291cmNlRQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAg
ICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlk
ZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92
bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1f
cGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25z
dF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAg
ICAgIEFTU0VSVChpZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTMwNTAsNyArMzE1MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUUKICAgICAgICAgICAgIGNvbXB1dGVkUHJvcGVydHlOYW1lID0gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGNvbXB1dGVk
UHJvcGVydHlOYW1lLCAiQ2Fubm90IHBhcnNlIGNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKICAg
ICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQi
LCAiY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwotICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJz
ZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVt
Q29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRG
aWVsZHMrKyk7CiAgICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21w
dXRlZE5hbWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQxMzcs
NyArNDIzOCw3IEBAIG5hbWVkUHJvcGVydHk6CiAgICAgICAgIG5leHQoKTsKIAogICAgICAgICBp
ZiAobWF0Y2goT1BFTlBBUkVOKSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmll
cihjb25zdF9jYXN0PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IG1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1h
a2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2QoY29udGV4dCwg
JmlkZW50LCBwYXJzZU1vZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVudCwgbWV0aG9kLCBQcm9w
ZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGNvbXBsZXRlLCBTdXBl
ckJpbmRpbmc6Ok5lZWRlZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBDbGFzc0VsZW1lbnRUYWc6Ok5v
KTsKQEAgLTQxOTQsNyArNDI5NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUV4cHJlc3MKICAgICB1bnNpZ25lZCBtZXRob2RTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87CiAgICAgbWV0aG9kSW5m
by5uYW1lID0gbWV0aG9kTmFtZTsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIGZh
bHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RT
dGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5u
b3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbklu
Zm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUs
IGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRo
b2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxz
ZSkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbyk7CiB9CiAKQEAg
LTQyMjksMTAgKzQzMzAsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJv
cGVydAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICBpZiAo
dHlwZSAmIFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNo
KE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5p
dGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBTb3VyY2VQYXJzZU1vZGU6OkdldHRl
ck1vZGUsIGZhbHNlLCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBnZXR0
ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRo
b2QpKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICBmYWlsSWZG
YWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRz
OjpVbm5hbWVkLCBTb3VyY2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNlLCBjb25zdHJ1Y3Rv
cktpbmQsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBp
bmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRob2QsIGZhbHNlKSksICJDYW5ub3QgcGFy
c2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxz
ZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVy
IGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2Rl
OjpTZXR0ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRl
ZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlw
ZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAg
ZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVp
cmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlLCBmYWxzZSwgY29u
c3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9m
ZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fu
bm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAgICAgfQogCiAgICAgaWYgKHN0cmluZ1By
b3BlcnR5TmFtZSkKQEAgLTQ0MTcsNiArNDUxOCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbihUcmVlQnVpbGRlciYgY29udGV4
dCkKIHsKICAgICBBU1NFUlQobWF0Y2goRlVOQ1RJT04pKTsKKworICAgIGJvb2wgZWFnZXJseUdl
bmVyYXRlQVNUID0gbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBlID09IE9QRU5QQVJFTiAmJiBz
dGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZTsKKwogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIGZ1bmN0
aW9uS2V5d29yZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIG5leHQoKTsKQEAgLTQ0MjUsNyAr
NDUyOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlv
bk1vZGU7CiAgICAgaWYgKGNvbnN1bWUoVElNRVMpKQogICAgICAgICBwYXJzZU1vZGUgPSBTb3Vy
Y2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU7Ci0gICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6
Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRp
bmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rp
b25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90IHBhcnNlIGZ1bmN0aW9uIGV4
cHJlc3Npb24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRT
dGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uLCBl
YWdlcmx5R2VuZXJhdGVBU1QpKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7
CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBmdW5jdGlv
bkluZm8pOwogfQogCkBAIC00NDQzLDcgKzQ1NDcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
IGZ1bmN0aW9uSW5mbzsKICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFt
ZXMtPm51bGxJZGVudGlmaWVyOwotICAgIGZhaWxJZkZhbHNlKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwg
Q29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25L
ZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVz
c2lvbiksIHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlID8g
IkNhbm5vdCBwYXJzZSBhc3luYyBmdW5jdGlvbiBleHByZXNzaW9uIiA6ICJDYW5ub3QgcGFyc2Ug
YXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKKyAgICBmYWlsSWZGYWxzZShw
YXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUs
IHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGU6OkV4cHJlc3Npb24sIGZhbHNlKSwgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNl
TW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUgPyAiQ2Fubm90IHBhcnNlIGFzeW5jIGZ1bmN0aW9uIGV4
cHJlc3Npb24iIDogIkNhbm5vdCBwYXJzZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gZXhwcmVz
c2lvbiIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwg
ZnVuY3Rpb25JbmZvKTsKIH0KIApAQCAtNDk5Myw3ICs1MDk3LDcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIGluZm8ubmFtZSA9ICZtX3ZtLnByb3BlcnR5
TmFtZXMtPm51bGxJZGVudGlmaWVyOwogCiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9
IGlzQXN5bmMgPyBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUgOiBTb3Vy
Y2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlOwotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBh
cnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5l
ZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6
OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBwYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uIik7
CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFt
ZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6
Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW5m
bywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbiwgZmFsc2UpKSwgIkNhbm5vdCBw
YXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAKICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVBcnJvd0Z1bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbyk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNzksNyAr
MTM3OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyRGVjbGFy
YXRpb25zOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCBzbG9wcHlNb2RlSG9pc3Rl
ZEZ1bmN0aW9uczsKICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzOwotICAgICAgICBpbnQg
bnVtQ29uc3RhbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8UGFyc2VJbm5lclJlc3VsdCwgU3Ry
aW5nPiBwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXImLCBTb3VyY2VQYXJzZU1vZGUsIFBhcnNp
bmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb24gPSBXVEY6Om51bGxvcHQsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qID0g
bnVsbHB0cik7CiAKQEAgLTEzOTQsNiArMTM5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludCBs
YXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0Owog
ICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0gSlNUZXh0UG9zaXRpb24obGFzdExpbmUs
IGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0KTsKICAgICAgICAgbV9sZXhlci0+c2V0
TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAgICBtX3BhcnNlclN0YXRlLmxhc3RUb2tl
blR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVy
LT5sZXgoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7CiAgICAgfQogCkBAIC0x
NDA0LDYgKzE0MDQsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbGFzdFRva2VuTGluZVN0YXJ0
ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgbV9sYXN0VG9r
ZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0VG9rZW5FbmQsIGxh
c3RUb2tlbkxpbmVTdGFydCk7CiAgICAgICAgIG1fbGV4ZXItPnNldExhc3RMaW5lTnVtYmVyKGxh
c3RMaW5lKTsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBlID0gbV90b2tlbi5t
X3R5cGU7CiAgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+bGV4V2l0aG91dENsZWFy
aW5nTGluZVRlcm1pbmF0b3IoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7CiAg
ICAgfQogCkBAIC0xNDE0LDYgKzE0MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbGFzdFRv
a2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAg
ICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RMaW5lLCBsYXN0
VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CiAgICAgICAgIG1fbGV4ZXItPnNldExhc3RM
aW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBl
ID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9sZXhlci0+bGV4
RXhwZWN0SWRlbnRpZmllcigmbV90b2tlbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKICAg
ICB9CiAKQEAgLTE2NTYsNyArMTY1OCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VQcm9wZXJ0eShUcmVlQnVpbGRlciYsIGJv
b2wgc3RyaWN0KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
aW9uIHBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50
aWZpZXIqIG1ldGhvZE5hbWUsIFNvdXJjZVBhcnNlTW9kZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXIm
LCBib29sIHN0cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRl
clN0YXJ0T2Zmc2V0LCBDb25zdHJ1Y3RvcktpbmQsIENsYXNzRWxlbWVudFRhZyk7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkg
cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBTeW50YXhDaGVja2VyJiwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50LCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlv
bk5hbWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJp
bmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUsIHVuc2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25C
b2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgU3ludGF4Q2hlY2tlciYsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbnQgZnVu
Y3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsIENvbnN0cnVjdG9yS2luZCwgU3Vw
ZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlLCB1bnNpZ25lZCwgU291cmNlUGFyc2VNb2RlLCBi
b29sIGVhZ2VybHlCdWlsZEFTVCwgU291cmNlRWxlbWVudHMqJik7CiAgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIGJvb2wgcGFyc2VGb3JtYWxQYXJhbWV0ZXJz
KFRyZWVCdWlsZGVyJiwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QsIGJvb2wgaXNBcnJvd0Z1bmN0
aW9uLCBib29sIGlzTWV0aG9kLCB1bnNpZ25lZCYpOwogICAgIGVudW0gVmFyRGVjbGFyYXRpb25M
aXN0Q29udGV4dCB7IEZvckxvb3BDb250ZXh0LCBWYXJEZWNsYXJhdGlvbkNvbnRleHQgfTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgVHJlZURl
c3RydWN0dXJpbmdQYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0
aWFsaXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0
U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0
LCBEZWNsYXJhdGlvblR5cGUsIEV4cG9ydFR5cGUsIGJvb2wmIGZvckxvb3BDb25zdERvZXNOb3RI
YXZlSW5pdGlhbGl6ZXIpOwpAQCAtMTY4Myw3ICsxNjg1LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUV4cHJlc3Npb24gY3Jl
YXRlUmVzb2x2ZUFuZFVzZVZhcmlhYmxlKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllcios
IGJvb2wgaXNFdmFsLCBjb25zdCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYpOwogCiAgICAgZW51bSBjbGFzcyBGdW5jdGlvbkRlZmluaXRpb25UeXBlIHsgRXhwcmVzc2lv
biwgRGVjbGFyYXRpb24sIE1ldGhvZCB9OwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBGdW5j
dGlvbk5hbWVSZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRh
aW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIGludCBmdW5jdGlvbktl
eXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYsIEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGUsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNF
bmRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1
bmN0aW9uTmFtZVJlcXVpcmVtZW50cywgU291cmNlUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgaW50IGZ1bmN0aW9u
S2V5d29yZFN0YXJ0LCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiwgRnVuY3Rpb25E
ZWZpbml0aW9uVHlwZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIE9wdGlvbmFsPGludD4gZnVuY3Rp
b25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiA9IFdURjo6bnVsbG9wdCk7CiAgICAg
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzQXJyb3dGdW5jdGlvblBhcmFtZXRlcnMoKTsKICAg
ICAKQEAgLTE3OTYsNiArMTc5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIqIGxhc3RGdW5jdGlvbk5hbWUgeyBudWxscHRyIH07CiAgICAgICAgIGJvb2wgYWxsb3dBd2Fp
dCB7IHRydWUgfTsKICAgICAgICAgYm9vbCBpc1BhcnNpbmdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIg
eyBmYWxzZSB9OworICAgICAgICBKU1Rva2VuVHlwZSBsYXN0VG9rZW5UeXBlIHsgRU9GVE9LIH07
CiAgICAgfTsKIAogICAgIC8vIElmIHlvdSdyZSB1c2luZyB0aGlzIGRpcmVjdGx5LCB5b3UgcHJv
YmFibHkgc2hvdWxkIGJlIHVzaW5nCkBAIC0xOTAxLDcgKzE5MDQsNyBAQCBwcml2YXRlOgogCiAg
ICAgVk0mIG1fdm07CiAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7Ci0gICAgUGFyc2Vy
QXJlbmEgbV9wYXJzZXJBcmVuYTsKKyAgICBSZWY8UGFyc2VyQXJlbmE+IG1fcGFyc2VyQXJlbmE7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPExleGVyVHlwZT4gbV9sZXhlcjsKIAogICAgIFBhcnNlclN0
YXRlIG1fcGFyc2VyU3RhdGU7CkBAIC0xOTM0LDYgKzE5MzcsMTUgQEAgc3RkOjp1bmlxdWVfcHRy
PFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlcgogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmluZyBl
cnJNc2c7CiAKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxQYXJzZWROb2RlLCBGdW5j
dGlvbk5vZGU+Ojp2YWx1ZSkgeworICAgICAgICBpZiAobV9mdW5jdGlvbkNhY2hlKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9uQ2FjaGUtPmdldEZ1bmN0aW9uKG1f
c291cmNlLT5zdGFydE9mZnNldCgpKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigicmV0
dXJuaW5nIGNhY2hlZCByZXN1bHQhISIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoUGFyc2VkTm9kZTo6
c2NvcGVJc0Z1bmN0aW9uKQogICAgICAgICBtX2xleGVyLT5zZXRJc1JlcGFyc2luZ0Z1bmN0aW9u
KCk7CiAKQEAgLTE5NTgsNiArMTk3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXIKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVz
dWx0OworCiAgICAgaWYgKHBhcnNlUmVzdWx0KSB7CiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBl
bmRMb2NhdGlvbjsKICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxpbmVOdW1i
ZXIoKTsKQEAgLTE5NzgsNyArMTk5MSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQ
YXJzZXI8TGV4ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUmVzdWx0LnZhbHVl
KCkuZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUoKS0+aW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVyZXMoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlUmVzdWx0LnZhbHVlKCkubnVtQ29uc3RhbnRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShtX21vZHVsZVNjb3BlRGF0
YSkpOwogICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCkub25lQmFz
ZWRJbnQoKSwgbV9sZXhlci0+bGluZU51bWJlcigpLCBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCks
IG1fbGV4ZXItPmN1cnJlbnRMaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0
RW5kT2Zmc2V0KG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCShyZXZpc2lvbiAyNTUwODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSwyMCArMTM5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUGFyc2VyQXJlbmEpOwogCi0gICAgY2xhc3MgUGFyc2Vy
QXJlbmEgeworICAgIGNsYXNzIFBhcnNlckFyZW5hIDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2Vy
QXJlbmE+IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyc2VyQXJlbmEpOwotICAg
IHB1YmxpYzoKICAgICAgICAgUGFyc2VyQXJlbmEoKTsKKyAgICBwdWJsaWM6CiAgICAgICAgIH5Q
YXJzZXJBcmVuYSgpOwogCi0gICAgICAgIHZvaWQgc3dhcChQYXJzZXJBcmVuYSYgb3RoZXJBcmVu
YSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzd2FwKG1fZnJlZWFibGVNZW1vcnksIG90
aGVyQXJlbmEubV9mcmVlYWJsZU1lbW9yeSk7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV9mcmVl
YWJsZVBvb2xFbmQsIG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xFbmQpOwotICAgICAgICAgICAg
bV9pZGVudGlmaWVyQXJlbmEuc3dhcChvdGhlckFyZW5hLm1faWRlbnRpZmllckFyZW5hKTsKLSAg
ICAgICAgICAgIG1fZnJlZWFibGVQb29scy5zd2FwKG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xz
KTsKLSAgICAgICAgICAgIG1fZGVsZXRhYmxlT2JqZWN0cy5zd2FwKG90aGVyQXJlbmEubV9kZWxl
dGFibGVPYmplY3RzKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVmPFBhcnNlckFyZW5h
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFBhcnNlckFyZW5hKTsgfQorCisgICAg
ICAgIC8vdm9pZCBzd2FwKFBhcnNlckFyZW5hJiBvdGhlckFyZW5hKQorICAgICAgICAvL3sKKyAg
ICAgICAgLy8gICAgc3RkOjpzd2FwKG1fZnJlZWFibGVNZW1vcnksIG90aGVyQXJlbmEubV9mcmVl
YWJsZU1lbW9yeSk7CisgICAgICAgIC8vICAgIHN0ZDo6c3dhcChtX2ZyZWVhYmxlUG9vbEVuZCwg
b3RoZXJBcmVuYS5tX2ZyZWVhYmxlUG9vbEVuZCk7CisgICAgICAgIC8vICAgIG1faWRlbnRpZmll
ckFyZW5hLnN3YXAob3RoZXJBcmVuYS5tX2lkZW50aWZpZXJBcmVuYSk7CisgICAgICAgIC8vICAg
IG1fZnJlZWFibGVQb29scy5zd2FwKG90aGVyQXJlbmEubV9mcmVlYWJsZVBvb2xzKTsKKyAgICAg
ICAgLy8gICAgbV9kZWxldGFibGVPYmplY3RzLnN3YXAob3RoZXJBcmVuYS5tX2RlbGV0YWJsZU9i
amVjdHMpOworICAgICAgICAvL30KIAogICAgICAgICB2b2lkKiBhbGxvY2F0ZUZyZWVhYmxlKHNp
emVfdCBzaXplKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuaAkocmV2aXNpb24gMjU1MDgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEZ1bmN0
aW9uTm9kZTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU291cmNl
UHJvdmlkZXJDYWNoZSk7CiBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlIDogcHVibGljIFJlZkNv
dW50ZWQ8U291cmNlUHJvdmlkZXJDYWNoZT4gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihTb3VyY2VQcm92aWRlckNhY2hlKTsKQEAgLTQy
LDggKzQ0LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZChpbnQgc291cmNlUG9zaXRpb24sIHN0
ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92aWRlckNhY2hlSXRlbT4pOwogICAgIGNvbnN0IFNvdXJj
ZVByb3ZpZGVyQ2FjaGVJdGVtKiBnZXQoaW50IHNvdXJjZVBvc2l0aW9uKSBjb25zdCB7IHJldHVy
biBtX21hcC5nZXQoc291cmNlUG9zaXRpb24pOyB9CiAKKyAgICB2b2lkIGFkZEZ1bmN0aW9uKGlu
dCBzb3VyY2VQb3NpdGlvbiwgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gbm9kZSkKKyAg
ICB7CisgICAgICAgIG1fZnVuY3Rpb25NYXAuYWRkKHNvdXJjZVBvc2l0aW9uLCBXVEZNb3ZlKG5v
ZGUpKTsKKyAgICB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gZ2V0RnVuY3Rp
b24oaW50IHNvdXJjZVBvc2l0aW9uKQorICAgIHsgCisgICAgICAgIGF1dG8gaXRlciA9IG1fZnVu
Y3Rpb25NYXAuZmluZChzb3VyY2VQb3NpdGlvbik7CisgICAgICAgIGlmIChpdGVyID09IG1fZnVu
Y3Rpb25NYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gcmVzdWx0ID0gV1RGTW92ZShpdGVyLT52YWx1ZSk7
CisgICAgICAgIG1fZnVuY3Rpb25NYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBIYXNoTWFwPGludCwgc3RkOjp1bmlxdWVfcHRy
PFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gbV9tYXA7CisgICAgSGFzaE1hcDxpbnQsIHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBtX2Z1bmN0aW9uTWFwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI1NTA4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCw2ICs3NTAsOCBAQCBi
b29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oVk0mIHZtKQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogewor
ICAgIFJFTEVBU0VfQVNTRVJUKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gdGhpcyk7CisKICAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAg
ICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389073</attachid>
            <date>2020-01-28 15:17:36 -0800</date>
            <delta_ts>2020-01-29 17:58:22 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>57089</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjU1MzExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCwxMCBAQCBTb3VyY2VDb2RlIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpsCiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBsaW5rZWRT
dGFydENvbHVtbihwYXJlbnRTb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpKTsKICAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHBhcmVudFNvdXJjZS5zdGFydE9mZnNldCgpICsgbV9z
dGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBwYXJlbnRTb3VyY2UuZmlyc3RM
aW5lKCkub25lQmFzZWRJbnQoKSArIG1fZmlyc3RMaW5lT2Zmc2V0OwotICAgIHJldHVybiBTb3Vy
Y2VDb2RlKHBhcmVudFNvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQg
KyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7CisgICAgU291cmNlQ29k
ZSByZXQocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKworICAgIC8vZGF0YUxv
Z0xuKCJsaW5rZWQgc291cmNlIGNvZGU6IFxuIiwgcmV0LnZpZXcoKSk7CisgICAgcmV0dXJuIHJl
dDsKIH0KIAogRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
bGluayhWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSwgY29uc3Qg
U291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlLCBPcHRpb25hbDxpbnQ+IG92ZXJyaWRlTGlu
ZU51bWJlciwgSW50cmluc2ljIGludHJpbnNpYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAyNTUzMTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEz
NCw2IEBAIHB1YmxpYzoKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVt
ZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSlNDOjpTb3VyY2VFbGVtZW50cygp
OyB9CiAKICAgICBpbnQgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fZmVhdHVy
ZXM7IH0KLSAgICBpbnQgbnVtQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5tX251
bUNvbnN0YW50czsgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25Ob2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVz
c2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKQEAgLTE2Nyw3ICsxNjYs
NiBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByKTsgfQogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7
CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFZvaWROb2RlKGxvY2F0aW9uLCBl
eHByKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCkBAIC0yMTIsNTEgKzIxMCw0MSBAQCBwdWJsaWM6CiAK
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgaW50IGVsaXNpb25zKQogICAgIHsKLSAgICAgICAgaWYgKGVsaXNpb25zKQotICAg
ICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMpOwogICAgIH0KIAogICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVt
ZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxv
Y2F0aW9uLCBlbGVtcyk7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxl
bXMpCiAgICAgewotICAgICAgICBpZiAoZWxpc2lvbnMpCi0gICAgICAgICAgICBpbmNDb25zdGFu
dHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxvY2F0
aW9uLCBlbGlzaW9ucywgZWxlbXMpOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
RG91YmxlRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAg
ICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRv
dWJsZSBkKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAg
CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJpZ0ludChjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBiaWdJbnQsIHVpbnQ4X3QgcmFkaXgpCiAgICAg
ewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQmlnSW50Tm9kZShsb2NhdGlvbiwgKmJpZ0ludCwgcmFkaXgpOwogICAgIH0KIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogc3RyaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0
cmluZyk7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBTdHJpbmdOb2RlKGxvY2F0aW9uLCAqc3RyaW5nKTsKICAgICB9CiAKICAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQm9vbGVhbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBib29sIGIpCiAgICAgewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQm9vbGVhbk5vZGUobG9jYXRpb24sIGIpOwogICAgIH0K
IAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24pCiAgICAgewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgTnVsbE5vZGUobG9jYXRpb24pOwogICAgIH0KIApAQCAtMTA1
OSwxMSArMTA0Nyw5IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgU2Nv
cGUoKQogICAgICAgICAgICAgOiBtX2ZlYXR1cmVzKDApCi0gICAgICAgICAgICAsIG1fbnVtQ29u
c3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBpbnQgbV9mZWF0dXJlczsK
LSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBz
ZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQpAQCAtMTA3Miw3ICsxMDU4LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogICAgIH0KIAotICAgIHZvaWQgaW5jQ29uc3RhbnRzKCkgeyBtX3Nj
b3BlLm1fbnVtQ29uc3RhbnRzKys7IH0KICAgICB2b2lkIHVzZXNUaGlzKCkgeyBtX3Njb3BlLm1f
ZmVhdHVyZXMgfD0gVGhpc0ZlYXR1cmU7IH0KICAgICB2b2lkIHVzZXNBcnJvd0Z1bmN0aW9uKCkg
eyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJyb3dGdW5jdGlvbkZlYXR1cmU7IH0KICAgICB2b2lk
IHVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBBcmd1bWVudHNGZWF0dXJl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfQogCiAgICAgaW5saW5lIFBhcnNlckFyZW5hUm9vdDo6UGFyc2Vy
QXJlbmFSb290KFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSkKKyAgICAgICAgOiBtX2FyZW5hKHBh
cnNlckFyZW5hKQogICAgIHsKLSAgICAgICAgbV9hcmVuYS5zd2FwKHBhcnNlckFyZW5hKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgTm9kZTo6Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9u
IDI1NTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsMTIgKzEyNSwxMSBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyCiAgICAgLCBtX3N0YXJ0TGluZVN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRp
b24ubGluZVN0YXJ0T2Zmc2V0KQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBT
dHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCiAgICAgLCBtX2lubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcyhOb0lubmVyQXJyb3dGdW5jdGlvbkZlYXR1cmVzKQotICAgICwgbV9udW1D
b25zdGFudHMoMCkKICAgICAsIG1fc3RhdGVtZW50cygwKQogewogfQogCi1TY29wZU5vZGU6OlNj
b3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52
aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJp
YWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCitTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25t
ZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhp
Y2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVk
RnVuY3Rpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgOiBTdGF0ZW1lbnRO
b2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2VyQXJlbmFSb290KHBhcnNlckFyZW5hKQogICAg
ICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShmdW5j
U3RhY2spKQpAQCAtMTQxLDcgKzE0MCw2IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFy
ZW5hJiBwYXJzZXIKICAgICAsIG1faW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKGlubmVy
QXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAs
IG1fc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMoV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1
bmN0aW9ucykpCi0gICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgLCBtX3N0
YXRlbWVudHMoY2hpbGRyZW4pCiB7CiAgICAgbV92YXJEZWNsYXJhdGlvbnMuc3dhcCh2YXJFbnZp
cm9ubWVudCk7CkBAIC0xNjQsOCArMTYyLDggQEAgYm9vbCBTY29wZU5vZGU6Omhhc0Vhcmx5QnJl
YWtPckNvbnRpbnVlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvZ3Jh
bU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUHJvZ3JhbU5vZGU6OlByb2dy
YW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYg
ZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVk
U3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBGdW5jdGlvblBh
cmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKLSAg
ICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGlj
YWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJl
cywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0
aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJs
ZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMs
IEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQorICAgIDogU2Nv
cGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBj
aGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlh
YmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5l
ckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29s
dW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogewpAQCAtMTczLDggKzE3MSw4IEBA
IFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGEKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1vZHVsZVByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLU1vZHVsZVByb2dyYW1Ob2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQ
dHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJy
b3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYgbW9kdWxlU2NvcGVEYXRh
KQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwg
bGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZl
YXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNvbnN0YW50cykKK01v
ZHVsZVByb2dyYW1Ob2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJl
bmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJF
bnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVu
dCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2Rl
SG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURh
dGE+JiYgbW9kdWxlU2NvcGVEYXRhKQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQs
IFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2Rl
SG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4o
ZW5kQ29sdW1uKQogICAgICwgbV9tb2R1bGVTY29wZURhdGEoKldURk1vdmUobW9kdWxlU2NvcGVE
YXRhKSkKQEAgLTE4Myw4ICsxODEsOCBAQCBNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3Jh
bU5vZGUoUGFyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2Vy
QXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYg
dmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJv
bm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5
TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
LCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJv
bm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9w
cHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIG51bUNvbnN0YW50cykKK0V2YWxOb2RlOjpFdmFsTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVt
biwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZp
cm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYg
bGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9p
c3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+
JiYpCisgICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVudCwgV1RGTW92ZShmdW5jU3RhY2sp
LCBsZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwg
ZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcykKICAgICAsIG1fZW5kQ29s
dW1uKGVuZENvbHVtbikKIHsKIH0KQEAgLTMwMSw4ICsyOTksOCBAQCB2b2lkIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlOjpkdW1wKFByaW50U3RyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRnVuY3Rp
b25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1
bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJp
YWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlv
bnMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBS
ZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBz
dGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhckVudmly
b25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xv
cHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29k
ZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitGdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQ
dHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25D
b2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCisgICAgOiBTY29wZU5vZGUo
cGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGls
ZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxl
cywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykK
ICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRD
b2x1bW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAy
NTUzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCB+UGFyc2VyQXJlbmFSb290KCkgeyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFBhcnNl
ckFyZW5hIG1fYXJlbmE7CisgICAgICAgIFJlZjxQYXJzZXJBcmVuYT4gbV9hcmVuYTsKICAgICB9
OwogCiAgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKQEAgLTE3
ODAsNyArMTc4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBQYXJzZXJBcmVu
YVJvb3Q6Om9wZXJhdG9yIG5ldzsKIAogICAgICAgICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
Ym9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
Y29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYs
IEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBs
UHRyU2V0JiYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0
IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5j
dGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyk7CiAKICAg
ICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7
IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQpAQCAtMTc5MCw3ICsxNzkwLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGludCBzdGFydFN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydFN0YXJ0T2Zmc2V0OyB9CiAgICAgICAgIGludCBzdGFydExpbmVTdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lU3RhcnRPZmZzZXQ7IH0KIAotICAgICAgICB2b2lkIHNl
dEZlYXR1cmVzKENvZGVGZWF0dXJlcyBmZWF0dXJlcykgeyBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7
IH0KICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgeyByZXR1cm4gbV9mZWF0dXJlczsg
fQogICAgICAgICBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0
aW9uQ29kZUZlYXR1cmVzKCkgeyByZXR1cm4gbV9pbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXM7IH0KICAgICAgICAgYm9vbCBkb0FueUlubmVyQXJyb3dGdW5jdGlvbnNVc2VBbnlGZWF0dXJl
KCkgeyByZXR1cm4gbV9pbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgIT0gTm9Jbm5lckFy
cm93RnVuY3Rpb25GZWF0dXJlczsgfQpAQCAtMTgyMywxMyArMTgyMiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckRlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9CiAKLSAgICAgICAgaW50IG5lZWRlZENvbnN0YW50
cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIG1heSBuZWVkIDIgbW9yZSBjb25zdGFu
dHMgdGhhbiB0aGUgY291bnQgZ2l2ZW4gYnkgdGhlIHBhcnNlciwKLSAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugb2YgdGhlIHZhcmlvdXMgdXNlcyBvZiBqc1VuZGVmaW5lZCgpIGFuZCBqc051bGwoKS4K
LSAgICAgICAgICAgIHJldHVybiBtX251bUNvbnN0YW50cyArIDI7Ci0gICAgICAgIH0KLQogICAg
ICAgICBTdGF0ZW1lbnROb2RlKiBzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdDsKIAogICAgICAgICBi
b29sIGhhc0NvbXBsZXRpb25WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTg1MCwxMyArMTg0
MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAg
ICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGxQdHJTZXQgbV9zbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9uczsKLSAgICAg
ICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgICAgICBTb3VyY2VFbGVtZW50cyogbV9zdGF0ZW1l
bnRzOwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29w
ZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
LCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKKyAgICAg
ICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVu
Y3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJT
ZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRh
PiYmKTsKIAogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRDb2x1bW47IH0KICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE4NzEsNyArMTg2Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgRXZhbE5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEV2YWxOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJ
bXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIEV2YWxOb2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVF
bnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVy
cyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNv
ZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAgQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAg
ICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAg
LTE4ODYsNyArMTg3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTW9kdWxlUHJv
Z3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYs
IEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBs
UHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywg
UmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIE1vZHVsZVByb2dyYW1Ob2RlKFBh
cnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFy
aWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5j
dGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAg
ICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9
CkBAIC0yMTM4LDcgKzIxMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0
aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
RnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0
aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRy
PE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIEZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJv
bm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBj
b25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFy
YW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAyNTUz
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgog
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0
cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVm
YXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24sIERlcml2ZWRDb250ZXh0VHlw
ZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNFdmFsQ29udGV4dCwgRXZhbENvbnRleHRUeXBl
IGV2YWxDb250ZXh0VHlwZSwgRGVidWdnZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhKQog
ICAgIDogbV92bSh2bSkKICAgICAsIG1fc291cmNlKCZzb3VyY2UpCisgICAgLCBtX3BhcnNlckFy
ZW5hKFBhcnNlckFyZW5hOjpjcmVhdGUoKSkKICAgICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxz
ZSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkKICAgICAsIG1fc3RhdGVtZW50RGVwdGgoMCkKQEAg
LTE0MCw3ICsxNDEsNyBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNJiB2bSwgY29uc3Qg
CiAgICAgLCBtX2RlYnVnZ2VyUGFyc2VEYXRhKGRlYnVnZ2VyUGFyc2VEYXRhKQogewogICAgIG1f
bGV4ZXIgPSBtYWtlVW5pcXVlPExleGVyVHlwZT4odm0sIGJ1aWx0aW5Nb2RlLCBzY3JpcHRNb2Rl
KTsKLSAgICBtX2xleGVyLT5zZXRDb2RlKHNvdXJjZSwgJm1fcGFyc2VyQXJlbmEpOworICAgIG1f
bGV4ZXItPnNldENvZGUoc291cmNlLCBtX3BhcnNlckFyZW5hLnB0cigpKTsKICAgICBtX3Rva2Vu
Lm1fbG9jYXRpb24ubGluZSA9IHNvdXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpOwogICAg
IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwog
ICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5lbmRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsK
QEAgLTMwMiw3ICszMDMsNyBAQCBFeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6
UGFyCiAgICAgfQogI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECiAKLSAgICByZXR1cm4gUGFyc2VJ
bm5lclJlc3VsdCB7IHBhcmFtZXRlcnMsIHNvdXJjZUVsZW1lbnRzLCBzY29wZS0+dGFrZUZ1bmN0
aW9uRGVjbGFyYXRpb25zKCksIFdURk1vdmUodmFyRGVjbGFyYXRpb25zKSwgV1RGTW92ZShzbG9w
cHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBjb250ZXh0Lm51bUNvbnN0YW50cygp
IH07CisgICAgcmV0dXJuIFBhcnNlSW5uZXJSZXN1bHQgeyBwYXJhbWV0ZXJzLCBzb3VyY2VFbGVt
ZW50cywgc2NvcGUtPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpLCBXVEZNb3ZlKHZhckRlY2xh
cmF0aW9ucyksIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcyB9
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtMTIxNSw3ICsxMjE2LDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIERPVUJM
RToKICAgICAgICAgICAgICAgICBjYXNlIElOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmlj
SWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gJm1fcGFyc2VyQXJlbmEt
PmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4o
bV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTVFJJTkc6CiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZSA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtMjA5NywxMyArMjA5OCwy
MCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVu
Y3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keSgKICAgICBUcmVl
QnVpbGRlciYgY29udGV4dCwgU3ludGF4Q2hlY2tlciYgc3ludGF4Q2hlY2tlciwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBpbnQgc3RhcnRDb2x1bW4sIGludCBmdW5jdGlv
bktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVyc1N0YXJ0
LAotICAgIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZyBzdXBl
ckJpbmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUgYm9keVR5cGUsIHVuc2lnbmVkIHBhcmFtZXRlckNv
dW50LCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQorICAgIENvbnN0cnVjdG9yS2luZCBjb25z
dHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIEZ1bmN0aW9uQm9keVR5cGUg
Ym9keVR5cGUsIHVuc2lnbmVkIHBhcmFtZXRlckNvdW50LCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VN
b2RlLCBib29sIGVhZ2VybHlCdWlsZEFTVCwgU291cmNlRWxlbWVudHMqJiBzb3VyY2VFbGVtZW50
cykKIHsKICAgICBTZXRGb3JTY29wZTxib29sPiBvdmVycmlkZVBhcnNpbmdDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIobV9wYXJzZXJTdGF0ZS5pc1BhcnNpbmdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsIGJv
ZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyBmYWxzZSA6IG1fcGFyc2VyU3Rh
dGUuaXNQYXJzaW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsKICAgICBib29sIGlzQXJyb3dGdW5j
dGlvbkJvZHlFeHByZXNzaW9uID0gYm9keVR5cGUgPT0gQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNz
aW9uOwogICAgIGlmICghaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pIHsKICAgICAgICAg
bmV4dCgpOwogICAgICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsKKyAgICAgICAgICAgIGlm
IChlYWdlcmx5QnVpbGRBU1QpIHsKKyAgICAgICAgICAgICAgICAvL1JFTEVBU0VfQVNTRVJUKHN0
ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKTsgLy8gT09QUworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgImNvbnN0ZXhwciBpZiIgaXMgaGVyZSBqdXN0IGZvciB0eXBl
IGNoZWNraW5nICByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlRWxlbWVudHMgPSBjb250ZXh0LmNyZWF0ZVNvdXJjZUVsZW1lbnRzKCk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2Vu
Q29sdW1uKCk7CiAgICAgICAgICAgICBTdXBlckJpbmRpbmcgZnVuY3Rpb25TdXBlckJpbmRpbmcg
PSBhZGp1c3RTdXBlckJpbmRpbmdGb3JCYXNlQ29uc3RydWN0b3IoY29uc3RydWN0b3JLaW5kLCBz
dXBlckJpbmRpbmcsIGN1cnJlbnRTY29wZSgpKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUZ1bmN0aW9uTWV0YWRhdGEoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBz
dGFydENvbHVtbiwgZW5kQ29sdW1uLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1l
U3RhcnQsIHBhcmFtZXRlcnNTdGFydCwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3RvcktpbmQsIGZ1
bmN0aW9uU3VwZXJCaW5kaW5nLCBwYXJhbWV0ZXJDb3VudCwgcGFyc2VNb2RlLCBpc0Fycm93RnVu
Y3Rpb25Cb2R5RXhwcmVzc2lvbik7CkBAIC0yMTE4LDEwICsyMTI2LDIzIEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW8KICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZmFpbElmRmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VF
bGVtZW50cyhzeW50YXhDaGVja2VyKSwgIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cg
ZnVuY3Rpb24iKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0
YSkKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwg
Q2hlY2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9j
ayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2Ug
Ym9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hlY2tGb3JT
dHJpY3RNb2RlKSwgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/ICJDYW5u
b3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0
aGlzIGFycm93IGZ1bmN0aW9uIik7CisgICAgICAgIGlmIChtX2RlYnVnZ2VyUGFyc2VEYXRhKSB7
CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNU
QnVpbGRlcj46OnZhbHVlKQorICAgICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VT
b3VyY2VFbGVtZW50cyhjb250ZXh0LCBDaGVja0ZvclN0cmljdE1vZGUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tG
b3JTdHJpY3RNb2RlKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKHNvdXJjZUVsZW1lbnRzLCBi
b2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9keUJsb2NrID8gIkNhbm5vdCBwYXJzZSBib2R5
IG9mIHRoaXMgZnVuY3Rpb24iIDogIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVu
Y3Rpb24iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChlYWdlcmx5QnVpbGRB
U1QpIHsKKyAgICAgICAgICAgICAgICAvL1JFTEVBU0VfQVNTRVJUKHN0ZDo6aXNfc2FtZTxUcmVl
QnVpbGRlciwgQVNUQnVpbGRlcj46OnZhbHVlKTsgLy8gT09QUworICAgICAgICAgICAgICAgIC8v
IFRoaXMgImNvbnN0ZXhwciBpZiIgaXMgaGVyZSBqdXN0IGZvciB0eXBlIGNoZWNraW5nICByZXF1
aXJlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8VHJl
ZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VFbGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RN
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2Uoc291cmNlRWxlbWVudHMsIGJv
ZHlUeXBlID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkg
b2YgdGhpcyBmdW5jdGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5j
dGlvbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgQ2hl
Y2tGb3JTdHJpY3RNb2RlKSwgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJvZHlCbG9jayA/
ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3QgcGFyc2UgYm9k
eSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CisgICAgICAgIH0KICAgICB9CiAgICAgdW5zaWdu
ZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKICAgICBTdXBlckJpbmRpbmcgZnVuY3Rpb25T
dXBlckJpbmRpbmcgPSBhZGp1c3RTdXBlckJpbmRpbmdGb3JCYXNlQ29uc3RydWN0b3IoY29uc3Ry
dWN0b3JLaW5kLCBzdXBlckJpbmRpbmcsIGN1cnJlbnRTY29wZSgpKTsKQEAgLTIzMDQsNyArMjMy
NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gdHlwZW5hbWUgVHIKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
Ym9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNv
bnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNl
TW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQg
Y29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGludCBm
dW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgZnVu
Y3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlIGZ1bmN0aW9uRGVmaW5pdGlvblR5cGUs
IE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbikK
K3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVt
ZW50cyByZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRp
bmcgZXhwZWN0ZWRTdXBlckJpbmRpbmcsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRp
b25UeXBlIGZ1bmN0aW9uRGVmaW5pdGlvblR5cGUsIGJvb2wgZWFnZXJseUJ1aWxkQVNULCBPcHRp
b25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNGdW5jdGlvblBhcnNlTW9kZShtb2RlKSk7CiAKQEAgLTI0MDMs
NiArMjQyNCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAg
ICB9OwogCiAgICAgU3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyKGNvbnN0X2Nhc3Q8Vk0mPiht
X3ZtKSwgbV9sZXhlci5nZXQoKSk7CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
ID0gbnVsbHB0cjsKIAogICAgIGlmIChVTkxJS0VMWSgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJj
ZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJv
d0Z1bmN0aW9uTW9kZSkuY29udGFpbnMobW9kZSkpKSkgewogICAgICAgICBzdGFydExvY2F0aW9u
ID0gdG9rZW5Mb2NhdGlvbigpOwpAQCAtMjQ5MSwxMiArMjUxMywyNCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgIHBhcmFtZXRlcnNTdGFydCA9IG1f
dG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldDsKICAgICAgICAgZnVuY3Rpb25JbmZvLnN0YXJ0
T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OwogCi0gICAgICAgIGlmIChsb2FkQ2FjaGVkRnVuY3Rp
b24oKSkKKyAgICAgICAgaWYgKCFlYWdlcmx5QnVpbGRBU1QgJiYgbG9hZENhY2hlZEZ1bmN0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB7CiAgICAgICAgICAgICBT
ZXRGb3JTY29wZTxib29sPiBvdmVycmlkZUFsbG93QXdhaXQobV9wYXJzZXJTdGF0ZS5hbGxvd0F3
YWl0LCAhaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKG1vZGUpKTsKLSAgICAgICAgICAgIHBhcnNl
RnVuY3Rpb25QYXJhbWV0ZXJzKHN5bnRheENoZWNrZXIsIG1vZGUsIGZ1bmN0aW9uSW5mbyk7Ci0g
ICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOworCisgICAgICAgICAgICBpZiAoZWFnZXJseUJ1
aWxkQVNUKSB7CisgICAgICAgICAgICAgICAgLy9SRUxFQVNFX0FTU0VSVChzdGQ6OmlzX3NhbWU8
VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSk7IC8vIE9PUFMKKyAgICAgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46OnZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFy
YW1ldGVycyhjb250ZXh0LCBtb2RlLCBmdW5jdGlvbkluZm8pOworICAgICAgICAgICAgICAgICAg
ICBwcm9wYWdhdGVFcnJvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgcGFyc2VGdW5j
dGlvblBhcmFtZXRlcnMoc3ludGF4Q2hlY2tlciwgbW9kZSwgZnVuY3Rpb25JbmZvKTsKKyAgICAg
ICAgICAgICAgICBwcm9wYWdhdGVFcnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBtYXRjaE9yRmFpbChPUEVOQlJBQ0UsICJFeHBlY3RlZCBhbiBvcGVu
aW5nICd7JyBhdCB0aGUgc3RhcnQgb2YgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSks
ICIgYm9keSIpOwpAQCAtMjU0NCw4ICsyNTc4LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcgogICAgICAgICB9CiAgICAgfSk7CiAKKyAgICBTb3VyY2VFbGVtZW50
cyogc291cmNlRWxlbWVudHMgPSBudWxscHRyOwogICAgIGF1dG8gcGVyZm9ybVBhcnNpbmdGdW5j
dGlvbkJvZHkgPSBbJl0gewotICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4
dCwgc3ludGF4Q2hlY2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1bmN0aW9uS2V5
d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBjb25zdHJ1Y3Rv
cktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBmdW5jdGlvbklu
Zm8ucGFyYW1ldGVyQ291bnQsIG1vZGUpOworICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkJv
ZHkoY29udGV4dCwgc3ludGF4Q2hlY2tlciwgc3RhcnRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0LCBj
b25zdHJ1Y3RvcktpbmQsIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBmdW5jdGlvbkJvZHlUeXBlLCBm
dW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQsIG1vZGUsIGVhZ2VybHlCdWlsZEFTVCwgc291cmNl
RWxlbWVudHMpOwogICAgIH07CiAKICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25X
cmFwcGVyUGFyc2VNb2RlKG1vZGUpKSB7CkBAIC0yNTcwLDggKzI2MDUsODQgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+c2V0U3RyaWN0TW9kZSgpOwogCiAgICAgICAgIHBvcFNjb3BlKGdlbmVyYXRvckJvZHlTY29w
ZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbyk7Ci0gICAgfSBlbHNlCisgICAg
fSBlbHNlIHsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHkgPSBwZXJmb3JtUGFyc2luZ0Z1bmN0
aW9uQm9keSgpOworCisgICAgICAgIGlmIChlYWdlcmx5QnVpbGRBU1QgJiYgZnVuY3Rpb25JbmZv
LmJvZHkpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWls
ZGVyLCBBU1RCdWlsZGVyPjo6dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBKU1Rva2VuTG9jYXRp
b24gZW5kTG9jYXRpb247CisgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4
ZXItPmxpbmVOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAg
ICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3RhcnRPZmZz
ZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgU291cmNl
Q29kZSBuZXdTb3VyY2UobV9zb3VyY2UtPnByb3ZpZGVyKCksIHBhcmFtZXRlcnNTdGFydCwgZW5k
TG9jYXRpb24uc3RhcnRPZmZzZXQsIHN0YXJ0TG9jYXRpb24ubGluZSwgc3RhcnRDb2x1bW4pOwor
ICAgICAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJuZXcgc291cmNlIHRlc3Q6IFxuIiwgbmV3U291
cmNlLnZpZXcoKSk7CisgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oIm5ldyBzb3VyY2Ugc3Rh
cnQgbGluZSAxIGJhc2VkOiAiLCBuZXdTb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSk7
CisKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZUVsZW1lbnRzKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAg
ICAgIC8vIE9PUFM6IGRvbid0IGR1cGxpY2F0ZSB0aGlzICBjb2RlIHcvIHBhcnNlSW5uZXIuIE1h
a2UgaXQgY29tbW9uLgorICAgICAgICAgICAgICAgIElkZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJp
YWJsZXM7CisgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQgc2xvcHB5TW9k
ZUhvaXN0ZWRGdW5jdGlvbnM7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+Z2V0U2xv
cHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpOworICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPmdldENhcHR1cmVkVmFycyhjYXB0dXJlZFZhcmlh
Ymxlcyk7CisKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBjYW4gdGhpcyBiZSBhIHJlZmVyZW5j
ZT8KKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBtX2Z1bmN0aW9ubkRlY2xhcmF0aW9ucyBzaG91
bGQgYmUgcmVmZXJlbmNlIG9yIG5vPworICAgICAgICAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgdmFyRGVjbGFyYXRpb25zID0gZnVuY3Rpb25TY29wZS0+ZGVjbGFyZWRWYXJpYWJsZXMoKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogY2FwdHVyZWRWYXJpYWJsZXMpCisg
ICAgICAgICAgICAgICAgICAgIHZhckRlY2xhcmF0aW9ucy5tYXJrVmFyaWFibGVBc0NhcHR1cmVk
KGVudHJ5KTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6CisgICAgICAgICAgICAgICAgLy9p
ZiAoaXNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0Z1bmN0
aW9uT3JBc3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUocGFyc2VNb2RlKSkgeworICAgICAg
ICAgICAgICAgIC8vICAgIGlmIChzY29wZS0+dXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1fdm0ucHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSkpCisgICAgICAgICAgICAgICAgLy8gICAgICAg
IGNvbnRleHQucHJvcGFnYXRlQXJndW1lbnRzVXNlKCk7CisgICAgICAgICAgICAgICAgLy99CisK
KyAgICAgICAgICAgICAgICAvLyBPT1BTOiBmaXggdGhpcyB0byBzYXZlL3Jlc3RvcmUgZm9yIGlu
bmVyIHNjb3Blcy4KKyAgICAgICAgICAgICAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBjb250
ZXh0LmZlYXR1cmVzKCk7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmlj
dE1vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgfD0gU3RyaWN0TW9kZUZlYXR1
cmU7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnNoYWRvd3NBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1
cmU7CisgICAgICAgICAgICAgICAgaWYgKG1fc2VlblRhZ2dlZFRlbXBsYXRlKQorICAgICAgICAg
ICAgICAgICAgICBmZWF0dXJlcyB8PSBOb0V2YWxDYWNoZUZlYXR1cmU7CisKKyAgICAgICAgICAg
ICAgICAvL3JldHVybiBQYXJzZUlubmVyUmVzdWx0IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVu
dHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJh
dGlvbnMpLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsK
KworCisgICAgICAgICAgICAgICAgLy97CisgICAgICAgICAgICAgICAgLy8gICAgY29uc3QgU291
cmNlQ29kZSYgcGFyZW50U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0
b3IgPyBwYXNzZWRQYXJlbnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJsZXM6OmRlZmF1bHRDb25z
dHJ1Y3RvclNvdXJjZUNvZGUoY29uc3RydWN0b3JLaW5kKCkpOworICAgICAgICAgICAgICAgIC8v
ICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gbGlua2VkU3RhcnRDb2x1bW4ocGFyZW50U291cmNl
LnN0YXJ0Q29sdW1uKCkub25lQmFzZWRJbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSBwYXJlbnRTb3VyY2Uuc3RhcnRPZmZzZXQoKSArIG1fc3RhcnRP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgLy8gICAgdW5zaWduZWQgZmlyc3RMaW5lID0gcGFyZW50
U291cmNlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCkgKyBtX2ZpcnN0TGluZU9mZnNldDsKKyAg
ICAgICAgICAgICAgICAvLyAgICByZXR1cm4gU291cmNlQ29kZShwYXJlbnRTb3VyY2UucHJvdmlk
ZXIoKSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZpcnN0TGlu
ZSwgc3RhcnRDb2x1bW4pOworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQgbGV4aWNhbEVudmlyb25tZW50ID0gY3VycmVudFNjb3BlKCktPmZp
bmFsaXplTGV4aWNhbEVudmlyb25tZW50KCk7CisgICAgICAgICAgICAgICAgYXV0byBmdW5jdGlv
biA9IG1ha2VVbmlxdWU8RnVuY3Rpb25Ob2RlPihtX3BhcnNlckFyZW5hLmNvcHlSZWYoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2x1bW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVsZW1l
bnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJEZWNs
YXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZSgpLT50YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKHNsb3BweU1vZGVI
b2lzdGVkRnVuY3Rpb25zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb25TY29wZS0+aW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVyZXMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24tPnNldExvYyhuZXdTb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQo
KSwgZW5kTG9jYXRpb24ubGluZSwgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQsIGVuZExvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnNldEVuZE9mZnNl
dChlbmRMb2NhdGlvbi5zdGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKG1fZnVuY3Rp
b25DYWNoZSkKKyAgICAgICAgICAgICAgICAgICAgbV9mdW5jdGlvbkNhY2hlLT5hZGRGdW5jdGlv
bihwYXJhbWV0ZXJzU3RhcnQsIFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KICAgICAKICAgICByZXN0b3JlUGFyc2VyU3RhdGUob2xkU3RhdGUpOwog
ICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5
IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKQEAgLTI2ODUsNyArMjc5
Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAg
ZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZh
dGVOYW1lOwogICAgIH0KIAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250
ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25l
LCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9u
SW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3Ry
dWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9u
Iik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVt
ZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uSW5mby5uYW1lKTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJhdGlv
blJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1bmN0
aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAgLTI3NDMsNyArMjg1NCw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZnVuY3Rpb25JbmZvLm5hbWUg
PSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0KIAot
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVudHMs
IHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5v
dE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZp
bml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0aW9uIik7CisgICAgZmFp
bElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVtZW50cywgcGFyc2VN
b2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVk
LCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25U
eXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5k
UG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0aW9uIik7CiAgICAgZmFp
bElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUsICJBc3luYyBmdW5jdGlvbiBzdGF0ZW1lbnRzIG11
c3QgaGF2ZSBhIG5hbWUiKTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJhdGlvblJlc3VsdE1hc2ss
IFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1bmN0aW9uKGZ1bmN0aW9u
SW5mby5uYW1lKTsKQEAgLTI5MTgsNyArMzAyOSw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBjYXNlIElOVEVHRVI6Ci0g
ICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRhLmRv
dWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1f
dG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFTU0VSVChpZGVudCk7CiAg
ICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5NDgsNyArMzA1OSw3
IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRl
bnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGNsYXNzIGZp
ZWxkIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKIAogICAgICAgICAgICAgaWYgKGNvbXB1dGVkUHJv
cGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVu
dGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVs
ZHMrKyk7CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRpZmll
ckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKysp
OwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3Vs
dCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0aW9u
UmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAgY2xh
c3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTI5ODAsNyArMzA5MSw3IEBA
IHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtZXRob2RJbmZvLm5h
bWUgPSBpc0NvbnN0cnVjdG9yID8gaW5mby5jbGFzc05hbWUgOiBpZGVudDsKLSAgICAgICAgICAg
IGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1
aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBjb25z
dHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVk
LCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9k
KSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVu
bmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBjb25zdHJ1Y3RvcktpbmQg
OiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFy
dCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAi
Q2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9u
IG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlvbiwg
bWV0aG9kSW5mbyk7CiAgICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikgewpAQCAtMzA0MSw3
ICszMTUyLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBjYXNlIElOVEVH
RVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgp
Lm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9k
YXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlk
ZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92
bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFTU0VSVChpZGVu
dCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwNTAsNyAr
MzE2MSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAgICAg
ICAgICAgIGNvbXB1dGVkUHJvcGVydHlOYW1lID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihj
b250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGNvbXB1dGVkUHJvcGVydHlOYW1lLCAi
Q2Fubm90IHBhcnNlIGNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKICAgICAgICAgICAgIGhhbmRs
ZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAiY29tcHV0ZWQgcHJv
cGVydHkgbmFtZSIpOwotICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlm
aWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMr
Kyk7CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEo
KS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CiAgICAg
ICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQxMzcsNyArNDI0OCw3IEBAIG5h
bWVkUHJvcGVydHk6CiAgICAgICAgIG5leHQoKTsKIAogICAgICAgICBpZiAobWF0Y2goT1BFTlBB
UkVOKSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNlckFy
ZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZN
Jj4obV92bSksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IG1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRp
Zmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBh
dXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2QoY29udGV4dCwgJmlkZW50LCBwYXJzZU1v
ZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVudCwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0
YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5lZWRl
ZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBDbGFzc0VsZW1lbnRUYWc6Ok5vKTsKQEAgLTQxOTQsNyAr
NDMwNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICB1
bnNpZ25lZCBtZXRob2RTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbklu
Zm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0aG9k
TmFtZTsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rp
b25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3Rv
cktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5m
bywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgdGhpcyBt
ZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVu
Y3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9k
SW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBh
cnNlIHRoaXMgbWV0aG9kIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5p
dGlvbihtZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbyk7CiB9CiAKQEAgLTQyMjksMTAgKzQzNDAs
MTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydAogICAgIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICBpZiAodHlwZSAmIFByb3BlcnR5
Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJF
eHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAg
ICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVx
dWlyZW1lbnRzOjpVbm5hbWVkLCBTb3VyY2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNlLCBj
b25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0YXJ0
T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRob2QpKSwgIkNhbm5vdCBw
YXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5j
dGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBTb3Vy
Y2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNlLCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmlu
ZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRl
ZmluaXRpb25UeXBlOjpNZXRob2QsIGZhbHNlKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmlu
aXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFS
RU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsK
LSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
TmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlLCBm
YWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0
ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJD
YW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBh
cnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1l
ZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBT
dXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVu
Y3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHNldHRl
ciBkZWZpbml0aW9uIik7CiAgICAgfQogCiAgICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFtZSkKQEAg
LTQ0MTcsNiArNDUyOCwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAgQVNT
RVJUKG1hdGNoKEZVTkNUSU9OKSk7CisKKyAgICBib29sIGVhZ2VybHlCdWlsZEFTVCA9IGZhbHNl
OworICAgIGlmIChPcHRpb25zOjplbmFibGVFYWdlcmx5UGFyc2VBU1QoKSAmJiBzdGQ6OmlzX3Nh
bWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSkKKyAgICAgICAgZWFnZXJseUJ1aWxk
QVNUID0gbV9wYXJzZXJTdGF0ZS5sYXN0VG9rZW5UeXBlID09IE9QRU5QQVJFTiB8fCBPcHRpb25z
Ojpmb3JjZUVhZ2VybHlQYXJzZUFTVCgpOworCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9u
KHRva2VuTG9jYXRpb24oKSk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0
b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwpAQCAtNDQyNSw3ICs0NTQxLDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJz
ZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6Ok5vcm1hbEZ1bmN0aW9uTW9kZTsKICAgICBpZiAoY29u
c3VtZShUSU1FUykpCiAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJh
dG9yV3JhcHBlckZ1bmN0aW9uTW9kZTsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbklu
Zm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZh
bHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5j
dGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpF
eHByZXNzaW9uKSksICJDYW5ub3QgcGFyc2UgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgIGZh
aWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJl
bWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3Vw
ZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8s
IEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24sIGVhZ2VybHlCdWlsZEFTVCkpLCAi
Q2Fubm90IHBhcnNlIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVGdW5jdGlvbkV4cHIobG9jYXRpb24sIGZ1bmN0aW9uSW5mbyk7CiB9CiAKQEAgLTQ0NDMs
NyArNDU1OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIAog
ICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gZnVuY3Rpb25JbmZvOwogICAgIGZ1
bmN0aW9uSW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0g
ICAgZmFpbElmRmFsc2UocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVx
dWlyZW1lbnRzOjpOb25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUs
IFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25J
bmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uKSwgcGFyc2VNb2RlID09IFNv
dXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUgPyAiQ2Fubm90IHBhcnNlIGFzeW5jIGZ1
bmN0aW9uIGV4cHJlc3Npb24iIDogIkNhbm5vdCBwYXJzZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rp
b24gZXhwcmVzc2lvbiIpOworICAgIGZhaWxJZkZhbHNlKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRl
eHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwgQ29u
c3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3
b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lv
biwgZmFsc2UpLCBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9k
ZSA/ICJDYW5ub3QgcGFyc2UgYXN5bmMgZnVuY3Rpb24gZXhwcmVzc2lvbiIgOiAiQ2Fubm90IHBh
cnNlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBmdW5jdGlvbkluZm8pOwogfQogCkBA
IC00OTkzLDcgKzUxMDksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzCiAgICAgaW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
CiAKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gaXNBc3luYyA/IFNvdXJjZVBhcnNl
TW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSA6IFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5j
dGlvbk1vZGU7Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRT
dGFydCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbikpLCAiQ2Fubm90
IHBhcnNlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVk
LCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25U
eXBlOjpFeHByZXNzaW9uLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIGFycm93IGZ1bmN0aW9uIGV4
cHJlc3Npb24iKTsKIAogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUFycm93RnVuY3Rpb25FeHBy
KGxvY2F0aW9uLCBpbmZvKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3OSw3ICsxMzc5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJEZWNsYXJhdGlvbnM7CiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsUHRyU2V0IHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zOwogICAgICAgICBD
b2RlRmVhdHVyZXMgZmVhdHVyZXM7Ci0gICAgICAgIGludCBudW1Db25zdGFudHM7CiAgICAgfTsK
ICAgICBFeHBlY3RlZDxQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IHBhcnNlSW5uZXIoY29uc3Qg
SWRlbnRpZmllciYsIFNvdXJjZVBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGlu
dD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiA9IFdURjo6bnVsbG9w
dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogPSBudWxscHRyKTsKIApAQCAtMTM5NCw2
ICsxMzkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IGxhc3RUb2tlbkxpbmVTdGFydCA9IG1f
dG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIG1fbGFzdFRva2VuRW5k
UG9zaXRpb24gPSBKU1RleHRQb3NpdGlvbihsYXN0TGluZSwgbGFzdFRva2VuRW5kLCBsYXN0VG9r
ZW5MaW5lU3RhcnQpOwogICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJlcihsYXN0TGlu
ZSk7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdFRva2VuVHlwZSA9IG1fdG9rZW4ubV90eXBl
OwogICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleCgmbV90b2tlbiwgbGV4ZXJG
bGFncywgc3RyaWN0TW9kZSgpKTsKICAgICB9CiAKQEAgLTE0MDQsNiArMTQwNCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2VuLm1fbG9jYXRpb24u
bGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0aW9uID0gSlNUZXh0
UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGluZVN0YXJ0KTsKICAg
ICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOworICAgICAgICBtX3Bh
cnNlclN0YXRlLmxhc3RUb2tlblR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAgICAgICAgbV90b2tl
bi5tX3R5cGUgPSBtX2xleGVyLT5sZXhXaXRob3V0Q2xlYXJpbmdMaW5lVGVybWluYXRvcigmbV90
b2tlbiwgbGV4ZXJGbGFncywgc3RyaWN0TW9kZSgpKTsKICAgICB9CiAKQEAgLTE0MTQsNiArMTQx
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludCBsYXN0VG9rZW5MaW5lU3RhcnQgPSBtX3Rva2Vu
Lm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICBtX2xhc3RUb2tlbkVuZFBvc2l0
aW9uID0gSlNUZXh0UG9zaXRpb24obGFzdExpbmUsIGxhc3RUb2tlbkVuZCwgbGFzdFRva2VuTGlu
ZVN0YXJ0KTsKICAgICAgICAgbV9sZXhlci0+c2V0TGFzdExpbmVOdW1iZXIobGFzdExpbmUpOwor
ICAgICAgICBtX3BhcnNlclN0YXRlLmxhc3RUb2tlblR5cGUgPSBtX3Rva2VuLm1fdHlwZTsKICAg
ICAgICAgbV90b2tlbi5tX3R5cGUgPSBtX2xleGVyLT5sZXhFeHBlY3RJZGVudGlmaWVyKCZtX3Rv
a2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0KIApAQCAtMTY1Niw3ICsxNjU4
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9w
ZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QpOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VQcm9wZXJ0eU1ldGhv
ZChUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgSWRlbnRpZmllciogbWV0aG9kTmFtZSwgU291
cmNlUGFyc2VNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9w
ZXJ0eSBwYXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0
eU5vZGU6OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIENvbnN0cnVj
dG9yS2luZCwgQ2xhc3NFbGVtZW50VGFnKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVl
QnVpbGRlciYsIFN5bnRheENoZWNrZXImLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW50IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1l
dGVyc1N0YXJ0LCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZywgRnVuY3Rpb25Cb2R5VHlw
ZSwgdW5zaWduZWQsIFNvdXJjZVBhcnNlTW9kZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHko
VHJlZUJ1aWxkZXImLCBTeW50YXhDaGVja2VyJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50IHBh
cmFtZXRlcnNTdGFydCwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIEZ1bmN0aW9uQm9k
eVR5cGUsIHVuc2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wgZWFnZXJseUJ1aWxkQVNULCBT
b3VyY2VFbGVtZW50cyomKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZ
U19JTkxJTkUgYm9vbCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImLCBUcmVlRm9y
bWFsUGFyYW1ldGVyTGlzdCwgYm9vbCBpc0Fycm93RnVuY3Rpb24sIGJvb2wgaXNNZXRob2QsIHVu
c2lnbmVkJik7CiAgICAgZW51bSBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0IHsgRm9yTG9vcENv
bnRleHQsIFZhckRlY2xhcmF0aW9uQ29udGV4dCB9OwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChUcmVl
QnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4mIGxh
c3RQYXR0ZXJuLCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxpemVyLCBKU1RleHRQb3NpdGlv
biYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFydCwgSlNUZXh0UG9zaXRpb24m
IGluaXRFbmQsIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQsIERlY2xhcmF0aW9uVHlwZSwgRXhw
b3J0VHlwZSwgYm9vbCYgZm9yTG9vcENvbnN0RG9lc05vdEhhdmVJbml0aWFsaXplcik7CkBAIC0x
NjgzLDcgKzE2ODUsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRXhwcmVzc2lvbiBjcmVhdGVSZXNvbHZlQW5kVXNlVmFyaWFi
bGUoVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiwgYm9vbCBpc0V2YWwsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CiAKICAgICBlbnVtIGNsYXNz
IEZ1bmN0aW9uRGVmaW5pdGlvblR5cGUgeyBFeHByZXNzaW9uLCBEZWNsYXJhdGlvbiwgTWV0aG9k
IH07Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBw
YXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50cywg
U291cmNlUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3Rv
cktpbmQsIFN1cGVyQmluZGluZywgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBQYXJzZXJGdW5j
dGlvbkluZm88VHJlZUJ1aWxkZXI+JiwgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSwgT3B0aW9uYWw8
aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uID0gV1RGOjpudWxs
b3B0KTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29s
IHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRz
LCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIENvbnN0cnVj
dG9yS2luZCwgU3VwZXJCaW5kaW5nLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlLCBib29sIGVh
Z2VybHlCdWlsZEFTVCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVy
c0VuZFBvc2l0aW9uID0gV1RGOjpudWxsb3B0KTsKICAgICAKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNBcnJvd0Z1bmN0aW9uUGFyYW1ldGVycygpOwogICAgIApAQCAtMTc5Niw2ICsxNzk4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdEZ1bmN0aW9uTmFtZSB7
IG51bGxwdHIgfTsKICAgICAgICAgYm9vbCBhbGxvd0F3YWl0IHsgdHJ1ZSB9OwogICAgICAgICBi
b29sIGlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFsaXplciB7IGZhbHNlIH07CisgICAgICAgIEpT
VG9rZW5UeXBlIGxhc3RUb2tlblR5cGUgeyBFT0ZUT0sgfTsKICAgICB9OwogCiAgICAgLy8gSWYg
eW91J3JlIHVzaW5nIHRoaXMgZGlyZWN0bHksIHlvdSBwcm9iYWJseSBzaG91bGQgYmUgdXNpbmcK
QEAgLTE5MDEsNyArMTkwNCw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25z
dCBTb3VyY2VDb2RlKiBtX3NvdXJjZTsKLSAgICBQYXJzZXJBcmVuYSBtX3BhcnNlckFyZW5hOwor
ICAgIFJlZjxQYXJzZXJBcmVuYT4gbV9wYXJzZXJBcmVuYTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGV4ZXJUeXBlPiBtX2xleGVyOwogCiAgICAgUGFyc2VyU3RhdGUgbV9wYXJzZXJTdGF0ZTsKQEAg
LTE5MzQsNiArMTkzNywxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyCiAgICAgaW50IGVyckxpbmU7CiAgICAgU3RyaW5nIGVyck1zZzsKIAorICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPFBhcnNlZE5vZGUsIEZ1bmN0aW9uTm9kZT46OnZhbHVlKSB7Cisg
ICAgICAgIGlmIChtX2Z1bmN0aW9uQ2FjaGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG1fZnVuY3Rpb25DYWNoZS0+Z2V0RnVuY3Rpb24obV9zb3VyY2UtPnN0YXJ0T2Zmc2V0KCkp
KSB7CisgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oInJldHVybmluZyBjYWNoZWQgcmVzdWx0
ISEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCiAgICAgaWYgKFBhcnNlZE5vZGU6OnNjb3BlSXNGdW5jdGlvbikKICAg
ICAgICAgbV9sZXhlci0+c2V0SXNSZXBhcnNpbmdGdW5jdGlvbigpOwogCkBAIC0xOTU4LDYgKzE5
NzAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAgICAgfQog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKKwogICAgIGlmIChwYXJz
ZVJlc3VsdCkgewogICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247CiAgICAgICAg
IGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CkBAIC0xOTc4LDcgKzE5
OTEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdC52YWx1ZSgpLmZlYXR1cmVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPmlubmVyQXJyb3dG
dW5jdGlvbkZlYXR1cmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZVJlc3VsdC52YWx1ZSgpLm51bUNvbnN0YW50cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdURk1vdmUobV9tb2R1bGVTY29wZURhdGEpKTsKICAgICAgICAgcmVzdWx0
LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCksIG1fbGV4ZXItPmxp
bmVOdW1iZXIoKSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVyLT5jdXJyZW50TGlu
ZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICByZXN1bHQtPnNldEVuZE9mZnNldChtX2xleGVyLT5j
dXJyZW50T2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyQXJlbmEuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjAgKzEzOSwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFBhcnNlckFyZW5hKTsKIAotICAgIGNsYXNzIFBhcnNlckFyZW5hIHsKKyAgICBjbGFzcyBQ
YXJzZXJBcmVuYSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhcnNlckFyZW5hPiB7CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBhcnNlckFyZW5hKTsKLSAgICBwdWJsaWM6CiAgICAgICAgIFBh
cnNlckFyZW5hKCk7CisgICAgcHVibGljOgogICAgICAgICB+UGFyc2VyQXJlbmEoKTsKIAotICAg
ICAgICB2b2lkIHN3YXAoUGFyc2VyQXJlbmEmIG90aGVyQXJlbmEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN0ZDo6c3dhcChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVN
ZW1vcnkpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1fZnJlZWFibGVQb29sRW5kLCBvdGhlckFy
ZW5hLm1fZnJlZWFibGVQb29sRW5kKTsKLSAgICAgICAgICAgIG1faWRlbnRpZmllckFyZW5hLnN3
YXAob3RoZXJBcmVuYS5tX2lkZW50aWZpZXJBcmVuYSk7Ci0gICAgICAgICAgICBtX2ZyZWVhYmxl
UG9vbHMuc3dhcChvdGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7Ci0gICAgICAgICAgICBtX2Rl
bGV0YWJsZU9iamVjdHMuc3dhcChvdGhlckFyZW5hLm1fZGVsZXRhYmxlT2JqZWN0cyk7Ci0gICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIFJlZjxQYXJzZXJBcmVuYT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBQYXJzZXJBcmVuYSk7IH0KKworICAgICAgICAvL3ZvaWQgc3dhcChQYXJz
ZXJBcmVuYSYgb3RoZXJBcmVuYSkKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIHN0ZDo6c3dh
cChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1vcnkpOworICAgICAg
ICAvLyAgICBzdGQ6OnN3YXAobV9mcmVlYWJsZVBvb2xFbmQsIG90aGVyQXJlbmEubV9mcmVlYWJs
ZVBvb2xFbmQpOworICAgICAgICAvLyAgICBtX2lkZW50aWZpZXJBcmVuYS5zd2FwKG90aGVyQXJl
bmEubV9pZGVudGlmaWVyQXJlbmEpOworICAgICAgICAvLyAgICBtX2ZyZWVhYmxlUG9vbHMuc3dh
cChvdGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7CisgICAgICAgIC8vICAgIG1fZGVsZXRhYmxl
T2JqZWN0cy5zd2FwKG90aGVyQXJlbmEubV9kZWxldGFibGVPYmplY3RzKTsKKyAgICAgICAgLy99
CiAKICAgICAgICAgdm9pZCogYWxsb2NhdGVGcmVlYWJsZShzaXplX3Qgc2l6ZSkKICAgICAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlLmgJKHJldmlzaW9uIDI1NTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBGdW5jdGlvbk5vZGU7CisKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNvdXJjZVByb3ZpZGVyQ2FjaGUpOwogY2xh
c3MgU291cmNlUHJvdmlkZXJDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZVByb3ZpZGVy
Q2FjaGU+IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lE
RU5USUZJRVIoU291cmNlUHJvdmlkZXJDYWNoZSk7CkBAIC00Miw4ICs0NCwyMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8U291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0+KTsKICAgICBjb25zdCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSog
Z2V0KGludCBzb3VyY2VQb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9tYXAuZ2V0KHNvdXJjZVBv
c2l0aW9uKTsgfQogCisgICAgdm9pZCBhZGRGdW5jdGlvbihpbnQgc291cmNlUG9zaXRpb24sIHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IG5vZGUpCisgICAgeworICAgICAgICBtX2Z1bmN0
aW9uTWFwLmFkZChzb3VyY2VQb3NpdGlvbiwgV1RGTW92ZShub2RlKSk7CisgICAgfQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IGdldEZ1bmN0aW9uKGludCBzb3VyY2VQb3NpdGlv
bikKKyAgICB7IAorICAgICAgICBhdXRvIGl0ZXIgPSBtX2Z1bmN0aW9uTWFwLmZpbmQoc291cmNl
UG9zaXRpb24pOworICAgICAgICBpZiAoaXRlciA9PSBtX2Z1bmN0aW9uTWFwLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlv
bk5vZGU+IHJlc3VsdCA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAgICBtX2Z1bmN0aW9u
TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgSGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VQcm92aWRlckNhY2hl
SXRlbT4sIFdURjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPGludD4+IG1fbWFwOworICAgIEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Ob2RlPiwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8aW50Pj4gbV9mdW5jdGlvbk1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lv
biAyNTUzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OTYsNiArNDk2LDggQEAgY29uc3RleHByIGJvb2wgZW5hYmxl
V2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYgZmFs
c2UsIHdlIGV4aXQgdG8gd2hhdGV2ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2KFVu
c2lnbmVkLCBnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAiTnVt
YmVyIG9mIGlkZW50aWZpZXJzIHdlIHNlZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVzZSB1
cyB0byBiYWlsIG9uIGdlbmVyYXRpbmcgYW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogICAgIHYo
Qm9vbCwgdXNlQ2xhc3NGaWVsZHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2Vy
IHdpbGwgdW5kZXJzdGFuZCBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihC
b29sLCBmb3JjZUVhZ2VybHlQYXJzZUFTVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgZW5hYmxlRWFnZXJseVBhcnNlQVNULCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwK
IAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjU1MzEx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUwLDYgKzc1MCw4IEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihWTSYg
dm0pCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShW
TSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0LT5z
dHJ1Y3R1cmUoKSA9PSB0aGlzKTsKKwogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAg
ICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389208</attachid>
            <date>2020-01-29 17:58:22 -0800</date>
            <delta_ts>2020-01-29 17:58:22 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>58815</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjU1MzExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCwxMCBAQCBTb3VyY2VDb2RlIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpsCiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBsaW5rZWRT
dGFydENvbHVtbihwYXJlbnRTb3VyY2Uuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpKTsKICAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHBhcmVudFNvdXJjZS5zdGFydE9mZnNldCgpICsgbV9z
dGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBwYXJlbnRTb3VyY2UuZmlyc3RM
aW5lKCkub25lQmFzZWRJbnQoKSArIG1fZmlyc3RMaW5lT2Zmc2V0OwotICAgIHJldHVybiBTb3Vy
Y2VDb2RlKHBhcmVudFNvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQg
KyBtX3NvdXJjZUxlbmd0aCwgZmlyc3RMaW5lLCBzdGFydENvbHVtbik7CisgICAgU291cmNlQ29k
ZSByZXQocGFyZW50U291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IG1fc291cmNlTGVuZ3RoLCBmaXJzdExpbmUsIHN0YXJ0Q29sdW1uKTsKKworICAgIC8vZGF0YUxv
Z0xuKCJsaW5rZWQgc291cmNlIGNvZGU6IFxuIiwgcmV0LnZpZXcoKSk7CisgICAgcmV0dXJuIHJl
dDsKIH0KIAogRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
bGluayhWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSwgY29uc3Qg
U291cmNlQ29kZSYgcGFzc2VkUGFyZW50U291cmNlLCBPcHRpb25hbDxpbnQ+IG92ZXJyaWRlTGlu
ZU51bWJlciwgSW50cmluc2ljIGludHJpbnNpYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAyNTUzMTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEz
NCw2IEBAIHB1YmxpYzoKICAgICBKU0M6OlNvdXJjZUVsZW1lbnRzKiBjcmVhdGVTb3VyY2VFbGVt
ZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgSlNDOjpTb3VyY2VFbGVtZW50cygp
OyB9CiAKICAgICBpbnQgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLm1fZmVhdHVy
ZXM7IH0KLSAgICBpbnQgbnVtQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5tX251
bUNvbnN0YW50czsgfQogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VBc3NpZ25Ob2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBPcGVyYXRvciwgRXhwcmVz
c2lvbk5vZGUqIHJpZ2h0LCBib29sIGxlZnRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodEhhc0Fz
c2lnbm1lbnRzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCk7CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VQcmVmaXhOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2Rl
KiwgT3BlcmF0b3IsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKQEAgLTE2Nyw3ICsxNjYs
NiBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBVbmFyeVBsdXNOb2RlKGxvY2F0aW9uLCBleHByKTsgfQogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7
CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFZvaWROb2RlKGxvY2F0aW9uLCBl
eHByKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCkBAIC0yMTIsNTEgKzIxMCw0MSBAQCBwdWJsaWM6CiAK
ICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgaW50IGVsaXNpb25zKQogICAgIHsKLSAgICAgICAgaWYgKGVsaXNpb25zKQotICAg
ICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIEFycmF5Tm9kZShsb2NhdGlvbiwgZWxpc2lvbnMpOwogICAgIH0KIAogICAgIEV4cHJlc3Np
b25Ob2RlKiBjcmVhdGVBcnJheShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbGVt
ZW50Tm9kZSogZWxlbXMpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxv
Y2F0aW9uLCBlbGVtcyk7IH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyYXkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50IGVsaXNpb25zLCBFbGVtZW50Tm9kZSogZWxl
bXMpCiAgICAgewotICAgICAgICBpZiAoZWxpc2lvbnMpCi0gICAgICAgICAgICBpbmNDb25zdGFu
dHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJyYXlOb2RlKGxvY2F0
aW9uLCBlbGlzaW9ucywgZWxlbXMpOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
RG91YmxlRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBkb3VibGUgZCkKICAg
ICB7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBEb3VibGVOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAgRXhwcmVzc2lvbk5v
ZGUqIGNyZWF0ZUludGVnZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGRv
dWJsZSBkKQogICAgIHsKLSAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEludGVnZXJOb2RlKGxvY2F0aW9uLCBkKTsKICAgICB9CiAgICAg
CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUJpZ0ludChjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBiaWdJbnQsIHVpbnQ4X3QgcmFkaXgpCiAgICAg
ewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQmlnSW50Tm9kZShsb2NhdGlvbiwgKmJpZ0ludCwgcmFkaXgpOwogICAgIH0KIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdHJpbmcoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgY29uc3QgSWRlbnRpZmllciogc3RyaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0
cmluZyk7Ci0gICAgICAgIGluY0NvbnN0YW50cygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBTdHJpbmdOb2RlKGxvY2F0aW9uLCAqc3RyaW5nKTsKICAgICB9CiAKICAgICBF
eHByZXNzaW9uTm9kZSogY3JlYXRlQm9vbGVhbihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBib29sIGIpCiAgICAgewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQm9vbGVhbk5vZGUobG9jYXRpb24sIGIpOwogICAgIH0K
IAogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVOdWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24pCiAgICAgewotICAgICAgICBpbmNDb25zdGFudHMoKTsKICAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgTnVsbE5vZGUobG9jYXRpb24pOwogICAgIH0KIApAQCAtMTA1
OSwxMSArMTA0Nyw5IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgU2Nv
cGUoKQogICAgICAgICAgICAgOiBtX2ZlYXR1cmVzKDApCi0gICAgICAgICAgICAsIG1fbnVtQ29u
c3RhbnRzKDApCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBpbnQgbV9mZWF0dXJlczsK
LSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBz
ZXRFeGNlcHRpb25Mb2NhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQpAQCAtMTA3Miw3ICsxMDU4LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgbm9kZS0+c2V0RXhjZXB0aW9uU291cmNlQ29kZShkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogICAgIH0KIAotICAgIHZvaWQgaW5jQ29uc3RhbnRzKCkgeyBtX3Nj
b3BlLm1fbnVtQ29uc3RhbnRzKys7IH0KICAgICB2b2lkIHVzZXNUaGlzKCkgeyBtX3Njb3BlLm1f
ZmVhdHVyZXMgfD0gVGhpc0ZlYXR1cmU7IH0KICAgICB2b2lkIHVzZXNBcnJvd0Z1bmN0aW9uKCkg
eyBtX3Njb3BlLm1fZmVhdHVyZXMgfD0gQXJyb3dGdW5jdGlvbkZlYXR1cmU7IH0KICAgICB2b2lk
IHVzZXNBcmd1bWVudHMoKSB7IG1fc2NvcGUubV9mZWF0dXJlcyB8PSBBcmd1bWVudHNGZWF0dXJl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfQogCiAgICAgaW5saW5lIFBhcnNlckFyZW5hUm9vdDo6UGFyc2Vy
QXJlbmFSb290KFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSkKKyAgICAgICAgOiBtX2FyZW5hKHBh
cnNlckFyZW5hKQogICAgIHsKLSAgICAgICAgbV9hcmVuYS5zd2FwKHBhcnNlckFyZW5hKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgTm9kZTo6Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9u
IDI1NTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsMTIgKzEyNSwxMSBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyCiAgICAgLCBtX3N0YXJ0TGluZVN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRp
b24ubGluZVN0YXJ0T2Zmc2V0KQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBT
dHJpY3RNb2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCiAgICAgLCBtX2lubmVyQXJyb3dGdW5jdGlv
bkNvZGVGZWF0dXJlcyhOb0lubmVyQXJyb3dGdW5jdGlvbkZlYXR1cmVzKQotICAgICwgbV9udW1D
b25zdGFudHMoMCkKICAgICAsIG1fc3RhdGVtZW50cygwKQogewogfQogCi1TY29wZU5vZGU6OlNj
b3BlTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52
aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJp
YWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElu
bmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCitTY29wZU5vZGU6OlNjb3BlTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBT
b3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25t
ZW50LCBGdW5jdGlvblN0YWNrJiYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhp
Y2FsVmFyaWFibGVzLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVk
RnVuY3Rpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgOiBTdGF0ZW1lbnRO
b2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2VyQXJlbmFSb290KHBhcnNlckFyZW5hKQogICAg
ICwgVmFyaWFibGVFbnZpcm9ubWVudE5vZGUobGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShmdW5j
U3RhY2spKQpAQCAtMTQxLDcgKzE0MCw2IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKFBhcnNlckFy
ZW5hJiBwYXJzZXIKICAgICAsIG1faW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzKGlubmVy
QXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAs
IG1fc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMoV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1
bmN0aW9ucykpCi0gICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCiAgICAgLCBtX3N0
YXRlbWVudHMoY2hpbGRyZW4pCiB7CiAgICAgbV92YXJEZWNsYXJhdGlvbnMuc3dhcCh2YXJFbnZp
cm9ubWVudCk7CkBAIC0xNjQsOCArMTYyLDggQEAgYm9vbCBTY29wZU5vZGU6Omhhc0Vhcmx5QnJl
YWtPckNvbnRpbnVlKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvZ3Jh
bU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUHJvZ3JhbU5vZGU6OlByb2dy
YW1Ob2RlKFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRy
ZW4sIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckVudmlyb25tZW50LCBGdW5jdGlvblN0YWNrJiYg
ZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzLCBVbmlxdWVk
U3RyaW5nSW1wbFB0clNldCYmIHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zLCBGdW5jdGlvblBh
cmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVG
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJikKLSAg
ICA6IFNjb3BlTm9kZShwYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNv
dXJjZSwgY2hpbGRyZW4sIHZhckVudmlyb25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGlj
YWxWYXJpYWJsZXMsIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJl
cywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1l
bnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0
aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJs
ZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMs
IEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1
cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1
bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQorICAgIDogU2Nv
cGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBj
aGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlh
YmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5l
ckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29s
dW1uKQogICAgICwgbV9lbmRDb2x1bW4oZW5kQ29sdW1uKQogewpAQCAtMTczLDggKzE3MSw4IEBA
IFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGEKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1vZHVsZVByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLU1vZHVsZVByb2dyYW1Ob2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQ
dHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJy
b3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIGlu
dCBudW1Db25zdGFudHMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYgbW9kdWxlU2NvcGVEYXRh
KQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlv
biwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwg
bGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZl
YXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIG51bUNvbnN0YW50cykKK01v
ZHVsZVByb2dyYW1Ob2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJl
bmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJF
bnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVu
dCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2Rl
SG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0
dXJlcyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURh
dGE+JiYgbW9kdWxlU2NvcGVEYXRhKQorICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBzdGFy
dExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJvbm1lbnQs
IFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9wcHlNb2Rl
SG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXMpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRDb2x1bW4o
ZW5kQ29sdW1uKQogICAgICwgbV9tb2R1bGVTY29wZURhdGEoKldURk1vdmUobW9kdWxlU2NvcGVE
YXRhKSkKQEAgLTE4Myw4ICsxODEsOCBAQCBNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3Jh
bU5vZGUoUGFyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFdmFsTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2Vy
QXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkLCB1bnNpZ25lZCBl
bmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYg
dmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJv
bm1lbnQmIGxleGljYWxWYXJpYWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5
TW9kZUhvaXN0ZWRGdW5jdGlvbnMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRz
LCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5h
LCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlLCBjaGlsZHJlbiwgdmFyRW52aXJv
bm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxlcywgV1RGTW92ZShzbG9w
cHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFycm93RnVuY3Rpb25Db2Rl
RmVhdHVyZXMsIG51bUNvbnN0YW50cykKK0V2YWxOb2RlOjpFdmFsTm9kZShQYXJzZXJBcmVuYSYg
cGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQsIHVuc2lnbmVkIGVuZENvbHVt
biwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZp
cm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYg
bGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiBzbG9wcHlNb2RlSG9p
c3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJl
cyBpbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+
JiYpCisgICAgOiBTY29wZU5vZGUocGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBzb3VyY2UsIGNoaWxkcmVuLCB2YXJFbnZpcm9ubWVudCwgV1RGTW92ZShmdW5jU3RhY2sp
LCBsZXhpY2FsVmFyaWFibGVzLCBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwg
ZmVhdHVyZXMsIGlubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcykKICAgICAsIG1fZW5kQ29s
dW1uKGVuZENvbHVtbikKIHsKIH0KQEAgLTMwMSw4ICsyOTksOCBAQCB2b2lkIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlOjpkdW1wKFByaW50U3RyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRnVuY3Rp
b25Ob2RlOjpGdW5jdGlvbk5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1
bmN0aW9uU3RhY2smJiBmdW5jU3RhY2ssIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJp
YWJsZXMsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlv
bnMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMgaW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBS
ZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKQotICAgIDogU2NvcGVOb2RlKHBhcnNlckFyZW5hLCBz
dGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc291cmNlQ29kZSwgY2hpbGRyZW4sIHZhckVudmly
b25tZW50LCBXVEZNb3ZlKGZ1bmNTdGFjayksIGxleGljYWxWYXJpYWJsZXMsIFdURk1vdmUoc2xv
cHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0dXJlcywgaW5uZXJBcnJvd0Z1bmN0aW9uQ29k
ZUZlYXR1cmVzLCBudW1Db25zdGFudHMpCitGdW5jdGlvbk5vZGU6OkZ1bmN0aW9uTm9kZShQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlv
biwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1
bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVudCwgRnVuY3Rpb25TdGFjayYmIGZ1bmNTdGFjaywg
VmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgVW5pcXVlZFN0cmluZ0ltcGxQ
dHJTZXQmJiBzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyBpbm5lckFycm93RnVuY3Rpb25D
b2RlRmVhdHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpCisgICAgOiBTY29wZU5vZGUo
cGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGls
ZHJlbiwgdmFyRW52aXJvbm1lbnQsIFdURk1vdmUoZnVuY1N0YWNrKSwgbGV4aWNhbFZhcmlhYmxl
cywgV1RGTW92ZShzbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9ucyksIGZlYXR1cmVzLCBpbm5lckFy
cm93RnVuY3Rpb25Db2RlRmVhdHVyZXMpCiAgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykK
ICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRD
b2x1bW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAy
NTUzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVh
bCB+UGFyc2VyQXJlbmFSb290KCkgeyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFBhcnNl
ckFyZW5hIG1fYXJlbmE7CisgICAgICAgIFJlZjxQYXJzZXJBcmVuYT4gbV9hcmVuYTsKICAgICB9
OwogCiAgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKQEAgLTE3
ODAsNyArMTc4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBQYXJzZXJBcmVu
YVJvb3Q6Om9wZXJhdG9yIG5ldzsKIAogICAgICAgICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
Ym9vbCBpblN0cmljdENvbnRleHQpOwotICAgICAgICBTY29wZU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
Y29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYs
IEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBs
UHRyU2V0JiYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKFBhcnNlckFyZW5hJiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGNvbnN0
IFNvdXJjZUNvZGUmLCBTb3VyY2VFbGVtZW50cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5j
dGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dCYmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcyk7CiAKICAg
ICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7
IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQpAQCAtMTc5MCw3ICsxNzkwLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGludCBzdGFydFN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydFN0YXJ0T2Zmc2V0OyB9CiAgICAgICAgIGludCBzdGFydExpbmVTdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lU3RhcnRPZmZzZXQ7IH0KIAotICAgICAgICB2b2lkIHNl
dEZlYXR1cmVzKENvZGVGZWF0dXJlcyBmZWF0dXJlcykgeyBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7
IH0KICAgICAgICAgQ29kZUZlYXR1cmVzIGZlYXR1cmVzKCkgeyByZXR1cm4gbV9mZWF0dXJlczsg
fQogICAgICAgICBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgaW5uZXJBcnJvd0Z1bmN0
aW9uQ29kZUZlYXR1cmVzKCkgeyByZXR1cm4gbV9pbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVy
ZXM7IH0KICAgICAgICAgYm9vbCBkb0FueUlubmVyQXJyb3dGdW5jdGlvbnNVc2VBbnlGZWF0dXJl
KCkgeyByZXR1cm4gbV9pbm5lckFycm93RnVuY3Rpb25Db2RlRmVhdHVyZXMgIT0gTm9Jbm5lckFy
cm93RnVuY3Rpb25GZWF0dXJlczsgfQpAQCAtMTgyMywxMyArMTgyMiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckRlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fdmFyRGVjbGFyYXRpb25zOyB9CiAKLSAgICAgICAgaW50IG5lZWRlZENvbnN0YW50
cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIG1heSBuZWVkIDIgbW9yZSBjb25zdGFu
dHMgdGhhbiB0aGUgY291bnQgZ2l2ZW4gYnkgdGhlIHBhcnNlciwKLSAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugb2YgdGhlIHZhcmlvdXMgdXNlcyBvZiBqc1VuZGVmaW5lZCgpIGFuZCBqc051bGwoKS4K
LSAgICAgICAgICAgIHJldHVybiBtX251bUNvbnN0YW50cyArIDI7Ci0gICAgICAgIH0KLQogICAg
ICAgICBTdGF0ZW1lbnROb2RlKiBzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdDsKIAogICAgICAgICBi
b29sIGhhc0NvbXBsZXRpb25WYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTg1MCwxMyArMTg0
MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAg
ICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0aW9uczsKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGxQdHJTZXQgbV9zbG9wcHlNb2RlSG9pc3RlZEZ1bmN0aW9uczsKLSAgICAg
ICAgaW50IG1fbnVtQ29uc3RhbnRzOwogICAgICAgICBTb3VyY2VFbGVtZW50cyogbV9zdGF0ZW1l
bnRzOwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29w
ZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMq
LCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVuY3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25t
ZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29u
c3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1
cmVzLCBpbnQgbnVtQ29uc3RhbnRzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRhPiYmKTsKKyAgICAg
ICAgUHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgU291cmNlRWxlbWVudHMqLCBWYXJpYWJsZUVudmlyb25tZW50JiwgRnVu
Y3Rpb25TdGFjayYmLCBWYXJpYWJsZUVudmlyb25tZW50JiwgVW5pcXVlZFN0cmluZ0ltcGxQdHJT
ZXQmJiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJl
cywgSW5uZXJBcnJvd0Z1bmN0aW9uQ29kZUZlYXR1cmVzLCBSZWZQdHI8TW9kdWxlU2NvcGVEYXRh
PiYmKTsKIAogICAgICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRDb2x1bW47IH0KICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRDb2x1bW47IH0KQEAgLTE4NzEsNyArMTg2Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgRXZhbE5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEV2YWxOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVu
dCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJ
bXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2Rl
RmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIEV2YWxOb2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVs
ZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVF
bnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVy
cyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNv
ZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAgQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAg
ICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KQEAg
LTE4ODYsNyArMTg3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTW9kdWxlUHJv
Z3JhbU5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE1vZHVsZVByb2dyYW1Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYs
IEZ1bmN0aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBs
UHRyU2V0JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVh
dHVyZXMsIElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywg
UmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIE1vZHVsZVByb2dyYW1Ob2RlKFBh
cnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNv
dXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smJiwgVmFy
aWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0JiYsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIElubmVyQXJyb3dGdW5j
dGlvbkNvZGVGZWF0dXJlcywgUmVmUHRyPE1vZHVsZVNjb3BlRGF0YT4mJik7CiAKICAgICAgICAg
dW5zaWduZWQgc3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAg
ICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9
CkBAIC0yMTM4LDcgKzIxMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0
aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
RnVuY3Rpb25Ob2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0
aW9uU3RhY2smJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0
JiYsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IElubmVyQXJyb3dGdW5jdGlvbkNvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywgUmVmUHRy
PE1vZHVsZVNjb3BlRGF0YT4mJik7CisgICAgICAgIEZ1bmN0aW9uTm9kZShQYXJzZXJBcmVuYSYs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5k
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBTb3VyY2VFbGVtZW50
cyosIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBGdW5jdGlvblN0YWNrJiYsIFZhcmlhYmxlRW52aXJv
bm1lbnQmLCBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCYmLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBj
b25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBJbm5lckFycm93RnVuY3Rpb25Db2RlRmVh
dHVyZXMsIFJlZlB0cjxNb2R1bGVTY29wZURhdGE+JiYpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFy
YW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAyNTUz
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAorI2luY2x1ZGUgPHd0Zi9UaW1pbmdT
Y29wZS5oPgorCiAjZGVmaW5lIHVwZGF0ZUVycm9yTWVzc2FnZShzaG91bGRQcmludFRva2VuLCAu
Li4pIGRvIHtcCiAgICAgcHJvcGFnYXRlRXJyb3IoKTsgXAogICAgIGxvZ0Vycm9yKHNob3VsZFBy
aW50VG9rZW4sIF9fVkFfQVJHU19fKTsgXApAQCAtMTI5LDYgKzEzMSw3IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+CiBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBK
U1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1v
ZGUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcs
IENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlv
biwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0V2YWxDb250
ZXh0LCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBEZWJ1Z2dlclBhcnNlRGF0YSog
ZGVidWdnZXJQYXJzZURhdGEpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zb3VyY2UoJnNvdXJj
ZSkKKyAgICAsIG1fcGFyc2VyQXJlbmEoUGFyc2VyQXJlbmE6OmNyZWF0ZSgpKQogICAgICwgbV9o
YXNTdGFja092ZXJmbG93KGZhbHNlKQogICAgICwgbV9hbGxvd3NJbih0cnVlKQogICAgICwgbV9z
dGF0ZW1lbnREZXB0aCgwKQpAQCAtMTQwLDcgKzE0Myw3IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQ
YXJzZXIoVk0mIHZtLCBjb25zdCAKICAgICAsIG1fZGVidWdnZXJQYXJzZURhdGEoZGVidWdnZXJQ
YXJzZURhdGEpCiB7CiAgICAgbV9sZXhlciA9IG1ha2VVbmlxdWU8TGV4ZXJUeXBlPih2bSwgYnVp
bHRpbk1vZGUsIHNjcmlwdE1vZGUpOwotICAgIG1fbGV4ZXItPnNldENvZGUoc291cmNlLCAmbV9w
YXJzZXJBcmVuYSk7CisgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsIG1fcGFyc2VyQXJlbmEu
cHRyKCkpOwogICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lID0gc291cmNlLmZpcnN0TGluZSgp
Lm9uZUJhc2VkSW50KCk7CiAgICAgbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0ID0gc291
cmNlLnN0YXJ0T2Zmc2V0KCk7CiAgICAgbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNldCA9IHNv
dXJjZS5zdGFydE9mZnNldCgpOwpAQCAtMjA5LDYgKzIxMiw5IEBAIFBhcnNlcjxMZXhlclR5cGU+
Ojp+UGFyc2VyKCkKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiBFeHBlY3RlZDx0eXBl
bmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0
aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25z
dCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQogeworICAg
IC8vZGF0YUxvZ0xuKCJwYXJzZSBpbm5lciIpOworICAgIC8vVGltaW5nU2NvcGUgcGFyc2VJbm5l
clRpbWluZ1Njb3BlKCJwYXJzZUlubmVyIik7CisKICAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29u
c3RfY2FzdDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUq
PihtX3NvdXJjZSkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0gY3VycmVudFNjb3BlKCk7CiAgICAg
c2NvcGUtPnNldElzTGV4aWNhbFNjb3BlKCk7CkBAIC0zMDIsNyArMzA4LDcgQEAgRXhwZWN0ZWQ8
dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcgogICAgIH0KICNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAogCi0gICAgcmV0dXJuIFBhcnNlSW5uZXJSZXN1bHQgeyBwYXJhbWV0ZXJzLCBzb3Vy
Y2VFbGVtZW50cywgc2NvcGUtPnRha2VGdW5jdGlvbkRlY2xhcmF0aW9ucygpLCBXVEZNb3ZlKHZh
ckRlY2xhcmF0aW9ucyksIFdURk1vdmUoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpLCBmZWF0
dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSB9OworICAgIHJldHVybiBQYXJzZUlubmVyUmVz
dWx0IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVudHMsIHNjb3BlLT50YWtlRnVuY3Rpb25EZWNs
YXJhdGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJhdGlvbnMpLCBXVEZNb3ZlKHNsb3BweU1vZGVI
b2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExl
eGVyVHlwZT4KQEAgLTEyMTUsNyArMTIyMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7
CiAgICAgICAgICAgICAgICAgY2FzZSBET1VCTEU6CiAgICAgICAgICAgICAgICAgY2FzZSBJTlRF
R0VSOgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAmbV9wYXJzZXJBcmVuYS5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1f
dm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJp
Y0lkZW50aWZpZXIoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
U1RSSU5HOgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKQEAgLTIwOTcsMTMgKzIxMDMsMjAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBib29sIFBhcnNlcgogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkJvZHkoCiAgICAgVHJlZUJ1aWxkZXImIGNvbnRleHQsIFN5bnRheENoZWNr
ZXImIHN5bnRheENoZWNrZXIsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
aW50IHN0YXJ0Q29sdW1uLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5h
bWVTdGFydCwgaW50IHBhcmFtZXRlcnNTdGFydCwKLSAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3Ry
dWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlIGJv
ZHlUeXBlLCB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9k
ZSkKKyAgICBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcgc3Vw
ZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlIGJvZHlUeXBlLCB1bnNpZ25lZCBwYXJhbWV0ZXJD
b3VudCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIFNv
dXJjZUVsZW1lbnRzKiYgc291cmNlRWxlbWVudHMpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4g
b3ZlcnJpZGVQYXJzaW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyKG1fcGFyc2VyU3RhdGUuaXNQYXJz
aW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9k
eUJsb2NrID8gZmFsc2UgOiBtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFs
aXplcik7CiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiA9IGJvZHlUeXBl
ID09IEFycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbjsKICAgICBpZiAoIWlzQXJyb3dGdW5jdGlv
bkJvZHlFeHByZXNzaW9uKSB7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgaWYgKG1hdGNoKENM
T1NFQlJBQ0UpKSB7CisgICAgICAgICAgICBpZiAoZWFnZXJseUJ1aWxkQVNUKSB7CisgICAgICAg
ICAgICAgICAgLy9SRUxFQVNFX0FTU0VSVChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1
aWxkZXI+Ojp2YWx1ZSk7IC8vIE9PUFMKKyAgICAgICAgICAgICAgICAvLyBUaGlzICJjb25zdGV4
cHIgaWYiIGlzIGhlcmUganVzdCBmb3IgdHlwZSBjaGVja2luZyAgcmVxdWlyZW1lbnRzLgorICAg
ICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RC
dWlsZGVyPjo6dmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gY29u
dGV4dC5jcmVhdGVTb3VyY2VFbGVtZW50cygpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwogICAgICAgICAgICAgU3VwZXJC
aW5kaW5nIGZ1bmN0aW9uU3VwZXJCaW5kaW5nID0gYWRqdXN0U3VwZXJCaW5kaW5nRm9yQmFzZUNv
bnN0cnVjdG9yKGNvbnN0cnVjdG9yS2luZCwgc3VwZXJCaW5kaW5nLCBjdXJyZW50U2NvcGUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0
TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rp
b25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmlj
dE1vZGUoKSwgY29uc3RydWN0b3JLaW5kLCBmdW5jdGlvblN1cGVyQmluZGluZywgcGFyYW1ldGVy
Q291bnQsIHBhcnNlTW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOwpAQCAtMjEx
OCwxMCArMjEzMSwyMyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlv
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlQXJyb3dGdW5jdGlv
blNpbmdsZUV4cHJlc3Npb25Cb2R5U291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciksICJDYW5u
b3QgcGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKG1fZGVidWdnZXJQYXJzZURhdGEpCi0gICAgICAgICAgICBmYWlsSWZGYWxzZShw
YXJzZVNvdXJjZUVsZW1lbnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSksIGJvZHlUeXBl
ID09IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhp
cyBmdW5jdGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1l
bnRzKHN5bnRheENoZWNrZXIsIENoZWNrRm9yU3RyaWN0TW9kZSksIGJvZHlUeXBlID09IFN0YW5k
YXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlv
biIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOworICAgICAg
ICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0YSkgeworICAgICAgICAgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSkKKyAgICAgICAgICAg
ICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwgQ2hlY2tG
b3JTdHJpY3RNb2RlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJzZVNv
dXJjZUVsZW1lbnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSk7CisgICAgICAgICAgICBm
YWlsSWZGYWxzZShzb3VyY2VFbGVtZW50cywgYm9keVR5cGUgPT0gU3RhbmRhcmRGdW5jdGlvbkJv
ZHlCbG9jayA/ICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIiA6ICJDYW5ub3Qg
cGFyc2UgYm9keSBvZiB0aGlzIGFycm93IGZ1bmN0aW9uIik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoZWFnZXJseUJ1aWxkQVNUKSB7CisgICAgICAgICAgICAgICAgLy9SRUxF
QVNFX0FTU0VSVChzdGQ6OmlzX3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSk7
IC8vIE9PUFMKKyAgICAgICAgICAgICAgICAvLyBUaGlzICJjb25zdGV4cHIgaWYiIGlzIGhlcmUg
anVzdCBmb3IgdHlwZSBjaGVja2luZyAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPjo6dmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNvdXJjZUVsZW1l
bnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSk7CisgICAgICAgICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKHNvdXJjZUVsZW1lbnRzLCBib2R5VHlwZSA9PSBTdGFuZGFyZEZ1bmN0aW9uQm9k
eUJsb2NrID8gIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iIDogIkNhbm5vdCBw
YXJzZSBib2R5IG9mIHRoaXMgYXJyb3cgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJj
ZUVsZW1lbnRzKHN5bnRheENoZWNrZXIsIENoZWNrRm9yU3RyaWN0TW9kZSksIGJvZHlUeXBlID09
IFN0YW5kYXJkRnVuY3Rpb25Cb2R5QmxvY2sgPyAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBm
dW5jdGlvbiIgOiAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBhcnJvdyBmdW5jdGlvbiIpOwor
ICAgICAgICB9CiAgICAgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7
CiAgICAgU3VwZXJCaW5kaW5nIGZ1bmN0aW9uU3VwZXJCaW5kaW5nID0gYWRqdXN0U3VwZXJCaW5k
aW5nRm9yQmFzZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yS2luZCwgc3VwZXJCaW5kaW5nLCBjdXJy
ZW50U2NvcGUoKSk7CkBAIC0yMzA0LDcgKzIzMzAsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IHR5cGVuYW1lIFRyCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
RnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVu
dHMgcmVxdWlyZW1lbnRzLCBTb3VyY2VQYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRh
aW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5n
IGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9u
VHlwZSBmdW5jdGlvbkRlZmluaXRpb25UeXBlLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3Ry
dWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBj
b250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBTb3VyY2VQYXJz
ZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5k
IGNvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nIGV4cGVjdGVkU3VwZXJCaW5kaW5nLCBpbnQg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGZ1
bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSBmdW5jdGlvbkRlZmluaXRpb25UeXBl
LCBib29sIGVhZ2VybHlCdWlsZEFTVCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9y
UGFyYW1ldGVyc0VuZFBvc2l0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzRnVuY3Rpb25Q
YXJzZU1vZGUobW9kZSkpOwogCkBAIC0yNDAzLDYgKzI0MjksNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgfTsKIAogICAgIFN5bnRheENoZWNrZXIgc3lu
dGF4Q2hlY2tlcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOworICAgIEZ1
bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IG51bGxwdHI7CiAKICAgICBpZiAoVU5MSUtF
TFkoKFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2Rl
LCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUpLmNvbnRhaW5zKG1vZGUp
KSkpIHsKICAgICAgICAgc3RhcnRMb2NhdGlvbiA9IHRva2VuTG9jYXRpb24oKTsKQEAgLTI0OTMs
MTAgKzI1MjAsMjIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgog
CiAgICAgICAgIGlmIChsb2FkQ2FjaGVkRnVuY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworCiAgICAgICAgIHsKICAgICAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IG92ZXJyaWRl
QWxsb3dBd2FpdChtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQsICFpc0FzeW5jRnVuY3Rpb25QYXJz
ZU1vZGUobW9kZSkpOwotICAgICAgICAgICAgcGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoc3ludGF4
Q2hlY2tlciwgbW9kZSwgZnVuY3Rpb25JbmZvKTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9y
KCk7CisKKyAgICAgICAgICAgIGlmIChlYWdlcmx5QnVpbGRBU1QpIHsKKyAgICAgICAgICAgICAg
ICAvL1JFTEVBU0VfQVNTRVJUKHN0ZDo6aXNfc2FtZTxUcmVlQnVpbGRlciwgQVNUQnVpbGRlcj46
OnZhbHVlKTsgLy8gT09QUworICAgICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVyPjo6dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycyA9IHBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnRleHQsIG1vZGUsIGZ1
bmN0aW9uSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBhcmFtZXRl
cnMpIHsKKyAgICAgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhzeW50YXhDaGVj
a2VyLCBtb2RlLCBmdW5jdGlvbkluZm8pOworICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9y
KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1hdGNoT3JG
YWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGFuIG9wZW5pbmcgJ3snIGF0IHRoZSBzdGFydCBvZiBh
ICIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2RlKSwgIiBib2R5Iik7CkBAIC0yNTQ0LDggKzI1
ODMsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAg
IH0KICAgICB9KTsKIAorICAgIFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cyA9IG51bGxw
dHI7CiAgICAgYXV0byBwZXJmb3JtUGFyc2luZ0Z1bmN0aW9uQm9keSA9IFsmXSB7Ci0gICAgICAg
IHJldHVybiBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBzeW50YXhDaGVja2VyLCBzdGFydExv
Y2F0aW9uLCBzdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0
YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIGNvbnN0cnVjdG9yS2luZCwgZXhwZWN0ZWRTdXBlckJpbmRp
bmcsIGZ1bmN0aW9uQm9keVR5cGUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCwgbW9kZSk7
CisgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBzeW50YXhDaGVja2Vy
LCBzdGFydExvY2F0aW9uLCBzdGFydENvbHVtbiwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIGNvbnN0cnVjdG9yS2luZCwgZXhwZWN0ZWRT
dXBlckJpbmRpbmcsIGZ1bmN0aW9uQm9keVR5cGUsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3Vu
dCwgbW9kZSwgZWFnZXJseUJ1aWxkQVNULCBzb3VyY2VFbGVtZW50cyk7CiAgICAgfTsKIAogICAg
IGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbldyYXBwZXJQYXJzZU1vZGUobW9kZSkpIHsK
QEAgLTI1NzAsOCArMjYxMCw4MyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyCiAgICAgICAgICAgICBmdW5jdGlvblNjb3BlLT5zZXRTdHJpY3RNb2RlKCk7CiAKICAg
ICAgICAgcG9wU2NvcGUoZ2VuZXJhdG9yQm9keVNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVl
VmFyaWFibGVJbmZvKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgewogICAgICAgICBmdW5jdGlv
bkluZm8uYm9keSA9IHBlcmZvcm1QYXJzaW5nRnVuY3Rpb25Cb2R5KCk7CisgICAgICAgIGlmIChl
YWdlcmx5QnVpbGRBU1QgJiYgZnVuY3Rpb25JbmZvLmJvZHkgJiYgbV9mdW5jdGlvbkNhY2hlICYm
ICFtX2Z1bmN0aW9uQ2FjaGUtPmhhc0Z1bmN0aW9uKHBhcmFtZXRlcnNTdGFydCkpIHsKKyAgICAg
ICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFRyZWVCdWlsZGVyLCBBU1RCdWlsZGVy
Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRpb247
CisgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXItPmxpbmVOdW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24u
c3RhcnRPZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgZW5kQ29sdW1uID0gZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZSBuZXdTb3VyY2Uo
bV9zb3VyY2UtPnByb3ZpZGVyKCksIHBhcmFtZXRlcnNTdGFydCwgZW5kTG9jYXRpb24uc3RhcnRP
ZmZzZXQsIHN0YXJ0TG9jYXRpb24ubGluZSwgc3RhcnRDb2x1bW4pOworICAgICAgICAgICAgICAg
IC8vZGF0YUxvZ0xuKCJuZXcgc291cmNlIHRlc3Q6IFxuIiwgbmV3U291cmNlLnZpZXcoKSk7Cisg
ICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oIm5ldyBzb3VyY2Ugc3RhcnQgbGluZSAxIGJhc2Vk
OiAiLCBuZXdTb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSk7CisKKworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZUVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChwYXJhbWV0ZXJzKTsKKworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGRv
bid0IGR1cGxpY2F0ZSB0aGlzICBjb2RlIHcvIHBhcnNlSW5uZXIuIE1ha2UgaXQgY29tbW9uLgor
ICAgICAgICAgICAgICAgIElkZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJpYWJsZXM7CisgICAgICAg
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQgc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlv
bnM7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29wZS0+Z2V0U2xvcHB5TW9kZUhvaXN0ZWRG
dW5jdGlvbnMoc2xvcHB5TW9kZUhvaXN0ZWRGdW5jdGlvbnMpOworICAgICAgICAgICAgICAgIGZ1
bmN0aW9uU2NvcGUtPmdldENhcHR1cmVkVmFycyhjYXB0dXJlZFZhcmlhYmxlcyk7CisKKyAgICAg
ICAgICAgICAgICAvLyBPT1BTOiBjYW4gdGhpcyBiZSBhIHJlZmVyZW5jZT8KKyAgICAgICAgICAg
ICAgICAvLyBPT1BTOiBtX2Z1bmN0aW9ubkRlY2xhcmF0aW9ucyBzaG91bGQgYmUgcmVmZXJlbmNl
IG9yIG5vPworICAgICAgICAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyRGVjbGFyYXRp
b25zID0gZnVuY3Rpb25TY29wZS0+ZGVjbGFyZWRWYXJpYWJsZXMoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogY2FwdHVyZWRWYXJpYWJsZXMpCisgICAgICAgICAgICAgICAg
ICAgIHZhckRlY2xhcmF0aW9ucy5tYXJrVmFyaWFibGVBc0NhcHR1cmVkKGVudHJ5KTsKKworICAg
ICAgICAgICAgICAgIC8vIE9PUFM6CisgICAgICAgICAgICAgICAgLy9pZiAoaXNHZW5lcmF0b3JX
cmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JBc3luY0dlbmVy
YXRvcldyYXBwZXJQYXJzZU1vZGUocGFyc2VNb2RlKSkgeworICAgICAgICAgICAgICAgIC8vICAg
IGlmIChzY29wZS0+dXNlZFZhcmlhYmxlc0NvbnRhaW5zKG1fdm0ucHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzLmltcGwoKSkpCisgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnRleHQucHJvcGFn
YXRlQXJndW1lbnRzVXNlKCk7CisgICAgICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAgICAg
ICAvLyBPT1BTOiBmaXggdGhpcyB0byBzYXZlL3Jlc3RvcmUgZm9yIGlubmVyIHNjb3Blcy4KKyAg
ICAgICAgICAgICAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMgPSBjb250ZXh0LmZlYXR1cmVzKCk7
CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZmVhdHVyZXMgfD0gU3RyaWN0TW9kZUZlYXR1cmU7CisgICAgICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7CisgICAgICAgICAg
ICAgICAgaWYgKG1fc2VlblRhZ2dlZFRlbXBsYXRlKQorICAgICAgICAgICAgICAgICAgICBmZWF0
dXJlcyB8PSBOb0V2YWxDYWNoZUZlYXR1cmU7CisKKyAgICAgICAgICAgICAgICAvL3JldHVybiBQ
YXJzZUlubmVyUmVzdWx0IHsgcGFyYW1ldGVycywgc291cmNlRWxlbWVudHMsIHNjb3BlLT50YWtl
RnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwgV1RGTW92ZSh2YXJEZWNsYXJhdGlvbnMpLCBXVEZNb3Zl
KHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zKSwgZmVhdHVyZXMgfTsKKworCisgICAgICAgICAg
ICAgICAgLy97CisgICAgICAgICAgICAgICAgLy8gICAgY29uc3QgU291cmNlQ29kZSYgcGFyZW50
U291cmNlID0gIW1faXNCdWlsdGluRGVmYXVsdENsYXNzQ29uc3RydWN0b3IgPyBwYXNzZWRQYXJl
bnRTb3VyY2UgOiBCdWlsdGluRXhlY3V0YWJsZXM6OmRlZmF1bHRDb25zdHJ1Y3RvclNvdXJjZUNv
ZGUoY29uc3RydWN0b3JLaW5kKCkpOworICAgICAgICAgICAgICAgIC8vICAgIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uID0gbGlua2VkU3RhcnRDb2x1bW4ocGFyZW50U291cmNlLnN0YXJ0Q29sdW1uKCku
b25lQmFzZWRJbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgPSBwYXJlbnRTb3VyY2Uuc3RhcnRPZmZzZXQoKSArIG1fc3RhcnRPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgLy8gICAgdW5zaWduZWQgZmlyc3RMaW5lID0gcGFyZW50U291cmNlLmZpcnN0TGlu
ZSgpLm9uZUJhc2VkSW50KCkgKyBtX2ZpcnN0TGluZU9mZnNldDsKKyAgICAgICAgICAgICAgICAv
LyAgICByZXR1cm4gU291cmNlQ29kZShwYXJlbnRTb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZz
ZXQsIHN0YXJ0T2Zmc2V0ICsgbV9zb3VyY2VMZW5ndGgsIGZpcnN0TGluZSwgc3RhcnRDb2x1bW4p
OworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgbGV4aWNhbEVudmlyb25tZW50ID0gY3VycmVudFNjb3BlKCktPmZpbmFsaXplTGV4aWNhbEVu
dmlyb25tZW50KCk7CisgICAgICAgICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1ha2VVbmlxdWU8
RnVuY3Rpb25Ob2RlPihtX3BhcnNlckFyZW5hLmNvcHlSZWYoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kTG9jYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2x1bW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJEZWNsYXJhdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT50
YWtlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKHNsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25z
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U291cmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+aW5uZXJBcnJvd0Z1bmN0aW9uRmVhdHVyZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24t
PnNldExvYyhuZXdTb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSwgZW5kTG9jYXRpb24u
bGluZSwgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQsIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnNldEVuZE9mZnNldChlbmRMb2NhdGlvbi5z
dGFydE9mZnNldCk7CisgICAgICAgICAgICAgICAgbV9mdW5jdGlvbkNhY2hlLT5hZGRGdW5jdGlv
bihwYXJhbWV0ZXJzU3RhcnQsIFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAv
L2RhdGFMb2dMbigiQWRkaW5nIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGNhY2hlLCBzaXplPSIsIGVu
ZExvY2F0aW9uLnN0YXJ0T2Zmc2V0IC0gcGFyYW1ldGVyc1N0YXJ0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KICAgICAKICAgICByZXN0b3JlUGFyc2VyU3RhdGUob2xkU3RhdGUp
OwogICAgIGZhaWxJZkZhbHNlKGZ1bmN0aW9uSW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBi
b2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKQEAgLTI2ODUsNyAr
MjgwMCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAg
ICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFBy
aXZhdGVOYW1lOwogICAgIH0KIAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhj
b250ZXh0LCByZXF1aXJlbWVudHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpO
b25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0
aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0
aW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVp
cmVtZW50cywgcGFyc2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmlu
ZGluZzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5j
dGlvbkRlZmluaXRpb25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uSW5mby5uYW1lKTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJh
dGlvblJlc3VsdE1hc2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1
bmN0aW9uKGZ1bmN0aW9uSW5mby5uYW1lKTsKQEAgLTI3NDMsNyArMjg1OCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAgICAgICAgZnVuY3Rpb25JbmZvLm5h
bWUgPSAmbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGFyRGVmYXVsdFByaXZhdGVOYW1lOwogICAgIH0K
IAotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCByZXF1aXJlbWVu
dHMsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6
Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25E
ZWZpbml0aW9uVHlwZTo6RGVjbGFyYXRpb24sIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0aW9uIik7CisgICAg
ZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIHJlcXVpcmVtZW50cywgcGFy
c2VNb2RlLCB0cnVlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6Tm90TmVl
ZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlvbkRlZmluaXRp
b25UeXBlOjpEZWNsYXJhdGlvbiwgZmFsc2UsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGFzeW5jIGZ1bmN0aW9uIik7CiAgICAg
ZmFpbElmRmFsc2UoZnVuY3Rpb25JbmZvLm5hbWUsICJBc3luYyBmdW5jdGlvbiBzdGF0ZW1lbnRz
IG11c3QgaGF2ZSBhIG5hbWUiKTsKIAogICAgIHN0ZDo6cGFpcjxEZWNsYXJhdGlvblJlc3VsdE1h
c2ssIFNjb3BlUmVmPiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gZGVjbGFyZUZ1bmN0aW9uKGZ1bmN0
aW9uSW5mby5uYW1lKTsKQEAgLTI5MTgsNyArMzAzMyw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBjYXNlIElOVEVHRVI6
Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1h
a2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4ubV9kYXRh
LmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEtPmlkZW50
aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSks
IG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFTU0VSVChpZGVudCk7
CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5NDgsNyArMzA2
Myw3IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgq
aWRlbnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGNsYXNz
IGZpZWxkIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKIAogICAgICAgICAgICAgaWYgKGNvbXB1dGVk
UHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRG
aWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS0+aWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRz
KyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJl
c3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0
aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAg
Y2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTI5ODAsNyArMzA5NSw3
IEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtZXRob2RJbmZv
Lm5hbWUgPSBpc0NvbnN0cnVjdG9yID8gaW5mby5jbGFzc05hbWUgOiBpZGVudDsKLSAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVS
ZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBj
b25zdHJ1Y3RvcktpbmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVl
ZGVkLCBtZXRob2RTdGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0
aG9kKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6
OlVubmFtZWQsIHBhcnNlTW9kZSwgZmFsc2UsIGlzQ29uc3RydWN0b3IgPyBjb25zdHJ1Y3Rvcktp
bmQgOiBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RT
dGFydCwgbWV0aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkp
LCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAKICAgICAgICAgICAgIFRyZWVFeHByZXNz
aW9uIG1ldGhvZCA9IGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlv
biwgbWV0aG9kSW5mbyk7CiAgICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikgewpAQCAtMzA0
MSw3ICszMTU2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRE9VQkxFOgogICAgICAgICBjYXNlIElO
VEVHRVI6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVu
YSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIG1fdG9rZW4u
bV9kYXRhLmRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEt
PmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0PFZNJj4o
bV92bSksIG1fdG9rZW4ubV9kYXRhLmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgIEFTU0VSVChp
ZGVudCk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMwNTAs
NyArMzE2NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKICAg
ICAgICAgICAgIGNvbXB1dGVkUHJvcGVydHlOYW1lID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bihjb250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGNvbXB1dGVkUHJvcGVydHlOYW1l
LCAiQ2Fubm90IHBhcnNlIGNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKICAgICAgICAgICAgIGhh
bmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAiY29tcHV0ZWQg
cHJvcGVydHkgbmFtZSIpOwotICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVu
dGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVs
ZHMrKyk7CisgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLT5pZGVudGlmaWVyQXJl
bmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CiAg
ICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQxMzcsNyArNDI1Miw3IEBA
IG5hbWVkUHJvcGVydHk6CiAgICAgICAgIG5leHQoKTsKIAogICAgICAgICBpZiAobWF0Y2goT1BF
TlBBUkVOKSkgewotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBtX3BhcnNl
ckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihjb25zdF9jYXN0
PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IG1fcGFyc2VyQXJlbmEtPmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRl
bnRpZmllcihjb25zdF9jYXN0PFZNJj4obV92bSksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAg
ICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2QoY29udGV4dCwgJmlkZW50LCBwYXJz
ZU1vZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KCZpZGVudCwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNv
bnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6Ok5l
ZWRlZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBDbGFzc0VsZW1lbnRUYWc6Ok5vKTsKQEAgLTQxOTQs
NyArNDMwOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAg
ICB1bnNpZ25lZCBtZXRob2RTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlv
bkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0
aG9kTmFtZTsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVu
Y3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0aG9k
SW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSksICJDYW5ub3QgcGFyc2UgdGhp
cyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25z
dHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBtZXRob2RTdGFydCwgbWV0
aG9kSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlTWV0aG9kRGVm
aW5pdGlvbihtZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbyk7CiB9CiAKQEAgLTQyMjksMTAgKzQz
NDQsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydAogICAgIFBh
cnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICBpZiAodHlwZSAmIFByb3Bl
cnR5Tm9kZTo6R2V0dGVyKSB7CiAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiks
ICJFeHBlY3RlZCBhIHBhcmFtZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAg
ICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1l
UmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBTb3VyY2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNl
LCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0
YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRob2QpKSwgIkNhbm5v
dCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VG
dW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkLCBT
b3VyY2VQYXJzZU1vZGU6OkdldHRlck1vZGUsIGZhbHNlLCBjb25zdHJ1Y3RvcktpbmQsIFN1cGVy
QmluZGluZzo6TmVlZGVkLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpbmZvLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlOjpNZXRob2QsIGZhbHNlKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRl
ZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVO
UEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24i
KTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0
aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2Rl
LCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JT
ZXR0ZXJTdGFydE9mZnNldCwgaW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kKSks
ICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2Uo
KHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5u
YW1lZCwgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5k
LCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaW5mbywg
RnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6TWV0aG9kLCBmYWxzZSkpLCAiQ2Fubm90IHBhcnNlIHNl
dHRlciBkZWZpbml0aW9uIik7CiAgICAgfQogCiAgICAgaWYgKHN0cmluZ1Byb3BlcnR5TmFtZSkK
QEAgLTQ0MTcsNiArNDUzMiwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CiAgICAg
QVNTRVJUKG1hdGNoKEZVTkNUSU9OKSk7CisKKyAgICBib29sIGVhZ2VybHlCdWlsZEFTVCA9IGZh
bHNlOworICAgIGlmIChPcHRpb25zOjplbmFibGVFYWdlcmx5UGFyc2VBU1QoKSAmJiBzdGQ6Omlz
X3NhbWU8VHJlZUJ1aWxkZXIsIEFTVEJ1aWxkZXI+Ojp2YWx1ZSAmJiAhbV9lYWdlcmx5QnVpbGRp
bmdBU1QpCisgICAgICAgIGVhZ2VybHlCdWlsZEFTVCA9IG1fcGFyc2VyU3RhdGUubGFzdFRva2Vu
VHlwZSA9PSBPUEVOUEFSRU4gfHwgT3B0aW9uczo6Zm9yY2VFYWdlcmx5UGFyc2VBU1QoKTsKKwor
ICAgIE9wdGlvbmFsPFNldEZvclNjb3BlPGJvb2w+PiBzeW50YXhDaGVja2luZ1Njb3BlOworICAg
IE9wdGlvbmFsPFRpbWluZ1Njb3BlPiBzeW50YXhDaGVja2luZ1RpbWU7CisgICAgaWYgKCFlYWdl
cmx5QnVpbGRBU1QgJiYgIW1fc3ludGF4Q2hlY2tpbmcpIHsKKyAgICAgICAgc3ludGF4Q2hlY2tp
bmdTY29wZS5lbXBsYWNlKG1fc3ludGF4Q2hlY2tpbmcsIHRydWUpOworICAgICAgICAvL3N5bnRh
eENoZWNraW5nVGltZS5lbXBsYWNlKCJzeW50YXggY2hlY2tpbmcgdGltZSIpOworICAgIH0KKwor
ICAgIFNldEZvclNjb3BlPGJvb2w+IGVhZ2VybHlCdWlsZEFTVFNjb3BlKG1fZWFnZXJseUJ1aWxk
aW5nQVNULCBlYWdlcmx5QnVpbGRBU1QpOworCisgICAgaWYgKGVhZ2VybHlCdWlsZEFTVCkgewor
ICAgICAgICAvL2RhdGFMb2dMbigiZWFnZXJseSBidWlsZGluZyBhc3QiKTsKKyAgICB9CisKICAg
ICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25l
ZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0KCk7CkBAIC00
NDI1LDcgKzQ1NTgsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFs
RnVuY3Rpb25Nb2RlOwogICAgIGlmIChjb25zdW1lKFRJTUVTKSkKICAgICAgICAgcGFyc2VNb2Rl
ID0gU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOwotICAgIGZh
aWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJl
bWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3Vw
ZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8s
IEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBwYXJzZSBmdW5j
dGlvbiBleHByZXNzaW9uIik7CisgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgcGFyc2VNb2RlLCBmYWxzZSwg
Q29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25L
ZXl3b3JkU3RhcnQsIGZ1bmN0aW9uSW5mbywgRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVz
c2lvbiwgZWFnZXJseUJ1aWxkQVNUKSksICJDYW5ub3QgcGFyc2UgZnVuY3Rpb24gZXhwcmVzc2lv
biIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgZnVu
Y3Rpb25JbmZvKTsKIH0KIApAQCAtNDQ0Myw3ICs0NTc2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogCiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWls
ZGVyPiBmdW5jdGlvbkluZm87CiAgICAgZnVuY3Rpb25JbmZvLm5hbWUgPSAmbV92bS5wcm9wZXJ0
eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICBmYWlsSWZGYWxzZShwYXJzZUZ1bmN0aW9uSW5m
byhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFs
c2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0
aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4
cHJlc3Npb24pLCBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9k
ZSA/ICJDYW5ub3QgcGFyc2UgYXN5bmMgZnVuY3Rpb24gZXhwcmVzc2lvbiIgOiAiQ2Fubm90IHBh
cnNlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBleHByZXNzaW9uIik7CisgICAgZmFpbElmRmFs
c2UocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpO
b25lLCBwYXJzZU1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIFN1cGVyQmluZGlu
Zzo6Tm90TmVlZGVkLCBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uLCBmYWxzZSksIHBhcnNlTW9kZSA9PSBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlID8gIkNhbm5vdCBwYXJzZSBhc3luYyBmdW5jdGlv
biBleHByZXNzaW9uIiA6ICJDYW5ub3QgcGFyc2UgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGV4
cHJlc3Npb24iKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobG9jYXRp
b24sIGZ1bmN0aW9uSW5mbyk7CiB9CiAKQEAgLTQ5OTMsNyArNTEyNiw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBpbmZvLm5hbWUgPSAmbV92bS5wcm9w
ZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKIAogICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1v
ZGUgPSBpc0FzeW5jID8gU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlIDog
U291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZTsKLSAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVk
LCBwYXJzZU1vZGUsIHRydWUsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbmZvLCBGdW5jdGlvbkRlZmluaXRpb25U
eXBlOjpFeHByZXNzaW9uKSksICJDYW5ub3QgcGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lv
biIpOworICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlv
bk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsIHBhcnNlTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZnVuY3Rpb25LZXl3b3JkU3RhcnQs
IGluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24sIGZhbHNlKSksICJDYW5u
b3QgcGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbiIpOwogCiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHIobG9jYXRpb24sIGluZm8pOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAyNTUzMTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc5
LDcgKzEzNzksNiBAQCBwcml2YXRlOgogICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhckRl
Y2xhcmF0aW9uczsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQgc2xvcHB5TW9kZUhv
aXN0ZWRGdW5jdGlvbnM7CiAgICAgICAgIENvZGVGZWF0dXJlcyBmZWF0dXJlczsKLSAgICAgICAg
aW50IG51bUNvbnN0YW50czsKICAgICB9OwogICAgIEV4cGVjdGVkPFBhcnNlSW5uZXJSZXN1bHQs
IFN0cmluZz4gcGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiwgU291cmNlUGFyc2VNb2RlLCBQ
YXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVy
c0VuZFBvc2l0aW9uID0gV1RGOjpudWxsb3B0LCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+
KiA9IG51bGxwdHIpOwogCkBAIC0xMzk0LDYgKzEzOTMsNyBAQCBwcml2YXRlOgogICAgICAgICBp
bnQgbGFzdFRva2VuTGluZVN0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNl
dDsKICAgICAgICAgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbiA9IEpTVGV4dFBvc2l0aW9uKGxhc3RM
aW5lLCBsYXN0VG9rZW5FbmQsIGxhc3RUb2tlbkxpbmVTdGFydCk7CiAgICAgICAgIG1fbGV4ZXIt
PnNldExhc3RMaW5lTnVtYmVyKGxhc3RMaW5lKTsKKyAgICAgICAgbV9wYXJzZXJTdGF0ZS5sYXN0
VG9rZW5UeXBlID0gbV90b2tlbi5tX3R5cGU7CiAgICAgICAgIG1fdG9rZW4ubV90eXBlID0gbV9s
ZXhlci0+bGV4KCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkpOwogICAgIH0KIApA
QCAtMTQwNCw2ICsxNDA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IGxhc3RUb2tlbkxpbmVT
dGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIG1fbGFz
dFRva2VuRW5kUG9zaXRpb24gPSBKU1RleHRQb3NpdGlvbihsYXN0TGluZSwgbGFzdFRva2VuRW5k
LCBsYXN0VG9rZW5MaW5lU3RhcnQpOwogICAgICAgICBtX2xleGVyLT5zZXRMYXN0TGluZU51bWJl
cihsYXN0TGluZSk7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdFRva2VuVHlwZSA9IG1fdG9r
ZW4ubV90eXBlOwogICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXItPmxleFdpdGhvdXRD
bGVhcmluZ0xpbmVUZXJtaW5hdG9yKCZtX3Rva2VuLCBsZXhlckZsYWdzLCBzdHJpY3RNb2RlKCkp
OwogICAgIH0KIApAQCAtMTQxNCw2ICsxNDE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IGxh
c3RUb2tlbkxpbmVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAg
ICAgICAgIG1fbGFzdFRva2VuRW5kUG9zaXRpb24gPSBKU1RleHRQb3NpdGlvbihsYXN0TGluZSwg
bGFzdFRva2VuRW5kLCBsYXN0VG9rZW5MaW5lU3RhcnQpOwogICAgICAgICBtX2xleGVyLT5zZXRM
YXN0TGluZU51bWJlcihsYXN0TGluZSk7CisgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdFRva2Vu
VHlwZSA9IG1fdG9rZW4ubV90eXBlOwogICAgICAgICBtX3Rva2VuLm1fdHlwZSA9IG1fbGV4ZXIt
PmxleEV4cGVjdElkZW50aWZpZXIoJm1fdG9rZW4sIGxleGVyRmxhZ3MsIHN0cmljdE1vZGUoKSk7
CiAgICAgfQogCkBAIC0xNjU2LDcgKzE2NTgsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXIm
LCBib29sIHN0cmljdCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzc2lvbiBwYXJzZVByb3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJ
ZGVudGlmaWVyKiBtZXRob2ROYW1lLCBTb3VyY2VQYXJzZU1vZGUpOwogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlR2V0dGVyU2V0dGVyKFRyZWVCdWls
ZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlwZSwgdW5zaWduZWQgZ2V0dGVyT3JT
ZXR0ZXJTdGFydE9mZnNldCwgQ29uc3RydWN0b3JLaW5kLCBDbGFzc0VsZW1lbnRUYWcpOwotICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25C
b2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgU3ludGF4Q2hlY2tlciYsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbnQgZnVu
Y3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJzU3RhcnQsIENvbnN0cnVjdG9yS2luZCwgU3Vw
ZXJCaW5kaW5nLCBGdW5jdGlvbkJvZHlUeXBlLCB1bnNpZ25lZCwgU291cmNlUGFyc2VNb2RlKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0
aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYsIFN5bnRheENoZWNrZXImLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCBmdW5jdGlvbktleXdvcmRTdGFydCwgaW50
IGZ1bmN0aW9uTmFtZVN0YXJ0LCBpbnQgcGFyYW1ldGVyc1N0YXJ0LCBDb25zdHJ1Y3RvcktpbmQs
IFN1cGVyQmluZGluZywgRnVuY3Rpb25Cb2R5VHlwZSwgdW5zaWduZWQsIFNvdXJjZVBhcnNlTW9k
ZSwgYm9vbCBlYWdlcmx5QnVpbGRBU1QsIFNvdXJjZUVsZW1lbnRzKiYpOwogICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBib29sIHBhcnNlRm9ybWFsUGFyYW1l
dGVycyhUcmVlQnVpbGRlciYsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0LCBib29sIGlzQXJyb3dG
dW5jdGlvbiwgYm9vbCBpc01ldGhvZCwgdW5zaWduZWQmKTsKICAgICBlbnVtIFZhckRlY2xhcmF0
aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250ZXh0IH07
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIFRy
ZWVEZXN0cnVjdHVyaW5nUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0
SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYg
aW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwgVmFyRGVjbGFyYXRpb25MaXN0Q29u
dGV4dCwgRGVjbGFyYXRpb25UeXBlLCBFeHBvcnRUeXBlLCBib29sJiBmb3JMb29wQ29uc3REb2Vz
Tm90SGF2ZUluaXRpYWxpemVyKTsKQEAgLTE2ODMsNyArMTY4NSw3IEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVFeHByZXNzaW9u
IGNyZWF0ZVJlc29sdmVBbmRVc2VWYXJpYWJsZShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZp
ZXIqLCBib29sIGlzRXZhbCwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mKTsKIAogICAgIGVudW0gY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uVHlwZSB7IEV4cHJl
c3Npb24sIERlY2xhcmF0aW9uLCBNZXRob2QgfTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwg
RnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5D
b250YWluaW5nU2NvcGUsIENvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCBpbnQgZnVuY3Rp
b25LZXl3b3JkU3RhcnQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mLCBGdW5jdGlv
bkRlZmluaXRpb25UeXBlLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0
ZXJzRW5kUG9zaXRpb24gPSBXVEY6Om51bGxvcHQpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXIm
LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHMsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJ
bkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIGludCBmdW5j
dGlvbktleXdvcmRTdGFydCwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYsIEZ1bmN0
aW9uRGVmaW5pdGlvblR5cGUsIGJvb2wgZWFnZXJseUJ1aWxkQVNULCBPcHRpb25hbDxpbnQ+IGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24gPSBXVEY6Om51bGxvcHQpOwog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKCk7
CiAgICAgCkBAIC0xNzk2LDYgKzE3OTgsNyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBsYXN0RnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9OwogICAgICAgICBib29sIGFsbG93
QXdhaXQgeyB0cnVlIH07CiAgICAgICAgIGJvb2wgaXNQYXJzaW5nQ2xhc3NGaWVsZEluaXRpYWxp
emVyIHsgZmFsc2UgfTsKKyAgICAgICAgSlNUb2tlblR5cGUgbGFzdFRva2VuVHlwZSB7IEVPRlRP
SyB9OwogICAgIH07CiAKICAgICAvLyBJZiB5b3UncmUgdXNpbmcgdGhpcyBkaXJlY3RseSwgeW91
IHByb2JhYmx5IHNob3VsZCBiZSB1c2luZwpAQCAtMTkwMSw3ICsxOTA0LDcgQEAgcHJpdmF0ZToK
IAogICAgIFZNJiBtX3ZtOwogICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwotICAgIFBh
cnNlckFyZW5hIG1fcGFyc2VyQXJlbmE7CisgICAgUmVmPFBhcnNlckFyZW5hPiBtX3BhcnNlckFy
ZW5hOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXhlclR5cGU+IG1fbGV4ZXI7CiAKICAgICBQYXJz
ZXJTdGF0ZSBtX3BhcnNlclN0YXRlOwpAQCAtMTkyNCw2ICsxOTI3LDggQEAgcHJpdmF0ZToKICAg
ICBEZWJ1Z2dlclBhcnNlRGF0YSogbV9kZWJ1Z2dlclBhcnNlRGF0YTsKICAgICBDYWxsT3JBcHBs
eURlcHRoU2NvcGUqIG1fY2FsbE9yQXBwbHlEZXB0aFNjb3BlIHsgbnVsbHB0ciB9OwogICAgIGJv
b2wgbV9zZWVuVGFnZ2VkVGVtcGxhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lYWdlcmx5QnVp
bGRpbmdBU1QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zeW50YXhDaGVja2luZyB7IGZhbHNlIH07
CiB9OwogCiAKQEAgLTE5MzQsNiArMTkzOSwxNSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyCiAgICAgaW50IGVyckxpbmU7CiAgICAgU3RyaW5nIGVyck1zZzsKIAor
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPFBhcnNlZE5vZGUsIEZ1bmN0aW9uTm9kZT46
OnZhbHVlKSB7CisgICAgICAgIGlmIChtX2Z1bmN0aW9uQ2FjaGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25DYWNoZS0+Z2V0RnVuY3Rpb24obV9zb3VyY2UtPnN0
YXJ0T2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oInJldHVybmluZyBj
YWNoZWQgcmVzdWx0ISEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKFBhcnNlZE5vZGU6OnNjb3BlSXNG
dW5jdGlvbikKICAgICAgICAgbV9sZXhlci0+c2V0SXNSZXBhcnNpbmdGdW5jdGlvbigpOwogCkBA
IC0xOTU4LDYgKzE5NzIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyCiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKKwog
ICAgIGlmIChwYXJzZVJlc3VsdCkgewogICAgICAgICBKU1Rva2VuTG9jYXRpb24gZW5kTG9jYXRp
b247CiAgICAgICAgIGVuZExvY2F0aW9uLmxpbmUgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CkBA
IC0xOTc4LDcgKzE5OTMsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdC52YWx1ZSgpLmZlYXR1
cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCkt
PmlubmVyQXJyb3dGdW5jdGlvbkZlYXR1cmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZVJlc3VsdC52YWx1ZSgpLm51bUNvbnN0YW50cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUobV9tb2R1bGVTY29wZURhdGEpKTsKICAg
ICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2UtPmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCks
IG1fbGV4ZXItPmxpbmVOdW1iZXIoKSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpLCBtX2xleGVy
LT5jdXJyZW50TGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICByZXN1bHQtPnNldEVuZE9mZnNl
dChtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJBcmVuYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMjAg
KzEzOSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKFBhcnNlckFyZW5hKTsKIAotICAgIGNsYXNzIFBhcnNlckFyZW5hIHsK
KyAgICBjbGFzcyBQYXJzZXJBcmVuYSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhcnNlckFyZW5hPiB7
CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhcnNlckFyZW5hKTsKLSAgICBwdWJsaWM6
CiAgICAgICAgIFBhcnNlckFyZW5hKCk7CisgICAgcHVibGljOgogICAgICAgICB+UGFyc2VyQXJl
bmEoKTsKIAotICAgICAgICB2b2lkIHN3YXAoUGFyc2VyQXJlbmEmIG90aGVyQXJlbmEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5h
Lm1fZnJlZWFibGVNZW1vcnkpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1fZnJlZWFibGVQb29s
RW5kLCBvdGhlckFyZW5hLm1fZnJlZWFibGVQb29sRW5kKTsKLSAgICAgICAgICAgIG1faWRlbnRp
ZmllckFyZW5hLnN3YXAob3RoZXJBcmVuYS5tX2lkZW50aWZpZXJBcmVuYSk7Ci0gICAgICAgICAg
ICBtX2ZyZWVhYmxlUG9vbHMuc3dhcChvdGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7Ci0gICAg
ICAgICAgICBtX2RlbGV0YWJsZU9iamVjdHMuc3dhcChvdGhlckFyZW5hLm1fZGVsZXRhYmxlT2Jq
ZWN0cyk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIFJlZjxQYXJzZXJBcmVuYT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJzZXJBcmVuYSk7IH0KKworICAgICAgICAvL3Zv
aWQgc3dhcChQYXJzZXJBcmVuYSYgb3RoZXJBcmVuYSkKKyAgICAgICAgLy97CisgICAgICAgIC8v
ICAgIHN0ZDo6c3dhcChtX2ZyZWVhYmxlTWVtb3J5LCBvdGhlckFyZW5hLm1fZnJlZWFibGVNZW1v
cnkpOworICAgICAgICAvLyAgICBzdGQ6OnN3YXAobV9mcmVlYWJsZVBvb2xFbmQsIG90aGVyQXJl
bmEubV9mcmVlYWJsZVBvb2xFbmQpOworICAgICAgICAvLyAgICBtX2lkZW50aWZpZXJBcmVuYS5z
d2FwKG90aGVyQXJlbmEubV9pZGVudGlmaWVyQXJlbmEpOworICAgICAgICAvLyAgICBtX2ZyZWVh
YmxlUG9vbHMuc3dhcChvdGhlckFyZW5hLm1fZnJlZWFibGVQb29scyk7CisgICAgICAgIC8vICAg
IG1fZGVsZXRhYmxlT2JqZWN0cy5zd2FwKG90aGVyQXJlbmEubV9kZWxldGFibGVPYmplY3RzKTsK
KyAgICAgICAgLy99CiAKICAgICAgICAgdm9pZCogYWxsb2NhdGVGcmVlYWJsZShzaXplX3Qgc2l6
ZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQ
cm92aWRlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHJldmlzaW9uIDI1NTMxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBGdW5jdGlvbk5vZGU7
CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNvdXJjZVByb3ZpZGVy
Q2FjaGUpOwogY2xhc3MgU291cmNlUHJvdmlkZXJDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNv
dXJjZVByb3ZpZGVyQ2FjaGU+IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoU291cmNlUHJvdmlkZXJDYWNoZSk7CkBAIC00Miw4ICs0NCwy
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBzdGQ6OnVuaXF1
ZV9wdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+KTsKICAgICBjb25zdCBTb3VyY2VQcm92aWRl
ckNhY2hlSXRlbSogZ2V0KGludCBzb3VyY2VQb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9tYXAu
Z2V0KHNvdXJjZVBvc2l0aW9uKTsgfQogCisgICAgdm9pZCBhZGRGdW5jdGlvbihpbnQgc291cmNl
UG9zaXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IG5vZGUpCisgICAgeworICAg
ICAgICBtX2Z1bmN0aW9uTWFwLmFkZChzb3VyY2VQb3NpdGlvbiwgV1RGTW92ZShub2RlKSk7Cisg
ICAgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbk5vZGU+IGdldEZ1bmN0aW9uKGludCBz
b3VyY2VQb3NpdGlvbikKKyAgICB7IAorICAgICAgICBhdXRvIGl0ZXIgPSBtX2Z1bmN0aW9uTWFw
LmZpbmQoc291cmNlUG9zaXRpb24pOworICAgICAgICBpZiAoaXRlciA9PSBtX2Z1bmN0aW9uTWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbk5vZGU+IHJlc3VsdCA9IFdURk1vdmUoaXRlci0+dmFsdWUpOworICAgICAg
ICBtX2Z1bmN0aW9uTWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgYm9vbCBoYXNGdW5jdGlvbihpbnQgc291cmNlUG9zaXRpb24pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9mdW5jdGlvbk1hcC5jb250YWlucyhzb3VyY2VQb3NpdGlvbik7
CisgICAgfQorCiBwcml2YXRlOgogICAgIEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8U291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0+LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBtX21hcDsKKyAgICBIYXNoTWFwPGludCwgc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4sIFdURjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4+IG1fZnVuY3Rpb25NYXA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjU1MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDYgKzQ5Niw4IEBAIGNvbnN0
ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KEJvb2wsIGZvcmNlT1NS
RXhpdFRvTExJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSBhbHdheXMgZXhpdCB0byB0
aGUgTExJbnQuIElmIGZhbHNlLCB3ZSBleGl0IHRvIHdoYXRldmVyIGlzIG1vc3QgY29udmVuaWVu
dC4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMs
IDQsIE5vcm1hbCwgIk51bWJlciBvZiBpZGVudGlmaWVycyB3ZSBzZWUgaW4gdGhlIExMSW50IHRo
YXQgY291bGQgY2F1c2UgdXMgdG8gYmFpbCBvbiBnZW5lcmF0aW5nIGFuIElDIGZvciBnZXRfYnlf
dmFsLiIpIFwKICAgICB2KEJvb2wsIHVzZUNsYXNzRmllbGRzLCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNz
ZXMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VFYWdlcmx5UGFyc2VBU1QsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGVuYWJsZUVhZ2VybHlQYXJzZUFTVCwgdHJ1ZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRp
b24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDI1NTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCw2ICs3NTAsOCBAQCBib29sIFN0cnVjdHVy
ZTo6aXNGcm96ZW4oVk0mIHZtKQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogeworICAgIFJFTEVBU0Vf
QVNTRVJUKG9iamVjdC0+c3RydWN0dXJlKCkgPT0gdGhpcyk7CisKICAgICBjaGVja09mZnNldENv
bnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>