<?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>31752</bug_id>
          
          <creation_ts>2009-11-20 16:11:08 -0800</creation_ts>
          <short_desc>Move bugzilla-tool commands into their own file</short_desc>
          <delta_ts>2009-11-20 16:15:34 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165490</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 16:11:08 -0800</bug_when>
    <thetext>This will let us unit test the commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165491</commentid>
    <comment_count>1</comment_count>
      <attachid>43623</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 16:12:14 -0800</bug_when>
    <thetext>Created attachment 43623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165492</commentid>
    <comment_count>2</comment_count>
      <attachid>43623</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-20 16:14:59 -0800</bug_when>
    <thetext>Comment on attachment 43623
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165493</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 16:15:34 -0800</bug_when>
    <thetext>Committed r51263: &lt;http://trac.webkit.org/changeset/51263&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43623</attachid>
            <date>2009-11-20 16:12:14 -0800</date>
            <delta_ts>2009-11-20 16:14:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31752-20091120161213.patch</filename>
            <type>text/plain</type>
            <size>82256</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkNTBlZDgzLi5jNmI5YzA4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMDktMTEt
MjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGJ1Z3ppbGxhLXRvb2wgY29tbWFuZHMg
aW50byB0aGVpciBvd24gZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzE3NTIKKworICAgICAgICBUaGlzIHdpbGwgbGV0IHVzIHdyaXRlIHVuaXQg
dGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1Z3ppbGxhLXRvb2w6CisgICAgICAgICogU2Ny
aXB0cy9tb2R1bGVzL2NvbW1hbmRzL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL21vZHVsZXMvY29tbWFuZHMvZG93bmxvYWQucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbW9kdWxlcy9jb21tYW5kcy9xdWVyaWVzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L21vZHVsZXMvY29tbWFuZHMvcXVldWVzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL21v
ZHVsZXMvY29tbWFuZHMvdXBsb2FkLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVs
ZXMvZ3JhbW1hci5weTogQWRkZWQuCisKKzIwMDktMTEtMjAgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAg
ICBCdWlsZFF1ZXVlIHNob3VsZCBjaGVjayBpZiB0aGUgdHJlZSBpcyBjdXJyZW50bHkgYnVpbGRh
YmxlCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wgYi9XZWJL
aXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggZDA1N2E1ZS4uMjc1ZTFmMSAxMDA3
NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtMzEsNzcwICszMSwxMiBAQAogIyBBIHRvb2wg
Zm9yIGF1dG9tYXRpbmcgZGVhbGluZyB3aXRoIGJ1Z3ppbGxhLCBwb3N0aW5nIHBhdGNoZXMsIGNv
bW1pdHRpbmcgcGF0Y2hlcywgZXRjLgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IFN0
cmluZ0lPICMgZm9yIGFkZF9wYXRjaF90b19idWcgZmlsZSB3cmFwcGVycwotaW1wb3J0IHN1YnBy
b2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGV0aW1lLCB0aW1lZGVsdGEKLWZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCi0KLSMg
SW1wb3J0IFdlYktpdC1zcGVjaWZpYyBtb2R1bGVzLgotZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGlt
cG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0Ci1mcm9tIG1vZHVsZXMuYnVnemlsbGEg
aW1wb3J0IEJ1Z3ppbGxhLCBwYXJzZV9idWdfaWQKLWZyb20gbW9kdWxlcy5idWlsZGJvdCBpbXBv
cnQgQnVpbGRCb3QKLWZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKLWZy
b20gbW9kdWxlcy5sYW5kaW5nc2VxdWVuY2UgaW1wb3J0IExhbmRpbmdTZXF1ZW5jZSwgQ29uZGl0
aW9uYWxMYW5kaW5nU2VxdWVuY2UKLWZyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwg
bG9nLCB0ZWUKLWZyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1h
bmRUb29sLCBDb21tYW5kCi1mcm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uIGltcG9ydCBQYXRj
aENvbGxlY3Rpb24KLWZyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVj
dF9zY21fc3lzdGVtLCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQotZnJvbSBtb2R1
bGVzLnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90Ci1mcm9tIG1vZHVsZXMud2Via2l0bGFuZGlu
Z3NjcmlwdHMgaW1wb3J0IFdlYktpdExhbmRpbmdTY3JpcHRzLCBjb21taXRfbWVzc2FnZV9mb3Jf
dGhpc19jb21taXQKLWZyb20gbW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0Ci1m
cm9tIG1vZHVsZXMud29ya3F1ZXVlIGltcG9ydCBXb3JrUXVldWUsIFdvcmtRdWV1ZURlbGVnYXRl
Ci0KLWRlZiBwbHVyYWwobm91bik6Ci0gICAgIyBUaGlzIGlzIGEgZHVtYiBwbHVyYWwoKSBpbXBs
ZW1lbnRhdGlvbiB3aGljaCB3YXMganVzdCBlbm91Z2ggZm9yIG91ciB1c2VzLgotICAgIGlmIHJl
LnNlYXJjaCgiaCQiLCBub3VuKToKLSAgICAgICAgcmV0dXJuIG5vdW4gKyAiZXMiCi0gICAgZWxz
ZToKLSAgICAgICAgcmV0dXJuIG5vdW4gKyAicyIKLQotZGVmIHBsdXJhbGl6ZShub3VuLCBjb3Vu
dCk6Ci0gICAgaWYgY291bnQgIT0gMToKLSAgICAgICAgbm91biA9IHBsdXJhbChub3VuKQotICAg
IHJldHVybiAiJWQgJXMiICUgKGNvdW50LCBub3VuKQotCi0KLWNsYXNzIEJ1Z3NUb0NvbW1pdChD
b21tYW5kKToKLSAgICBuYW1lID0gImJ1Z3MtdG8tY29tbWl0IgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiQnVncyBpbiB0aGUgY29tbWl0
IHF1ZXVlIikKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICBidWdfaWRzID0gdG9vbC5idWdzLmZldGNoX2J1Z19pZHNfZnJvbV9jb21taXRfcXVl
dWUoKQotICAgICAgICBmb3IgYnVnX2lkIGluIGJ1Z19pZHM6Ci0gICAgICAgICAgICBwcmludCAi
JXMiICUgYnVnX2lkCi0KLQotY2xhc3MgUGF0Y2hlc1RvQ29tbWl0KENvbW1hbmQpOgotICAgIG5h
bWUgPSAicGF0Y2hlcy10by1jb21taXQiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAg
ICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJQYXRjaGVzIGluIHRoZSBjb21taXQgcXVldWUiKQot
Ci0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIHBh
dGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfcGF0Y2hlc19mcm9tX2NvbW1pdF9xdWV1ZSgpCi0gICAg
ICAgIGxvZygiUGF0Y2hlcyBpbiBjb21taXQgcXVldWU6IikKLSAgICAgICAgZm9yIHBhdGNoIGlu
IHBhdGNoZXM6Ci0gICAgICAgICAgICBwcmludCAiJXMiICUgcGF0Y2hbInVybCJdCi0KLQotY2xh
c3MgUmV2aWV3ZWRQYXRjaGVzKENvbW1hbmQpOgotICAgIG5hbWUgPSAicmV2aWV3ZWQtcGF0Y2hl
cyIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2Vs
ZiwgInIrJ2QgcGF0Y2hlcyBvbiBhIGJ1ZyIsICJCVUdJRCIpCi0KLSAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgYnVnX2lkID0gYXJnc1swXQotICAg
ICAgICBwYXRjaGVzX3RvX2xhbmQgPSB0b29sLmJ1Z3MuZmV0Y2hfcmV2aWV3ZWRfcGF0Y2hlc19m
cm9tX2J1ZyhidWdfaWQpCi0gICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzX3RvX2xhbmQ6Ci0g
ICAgICAgICAgICBwcmludCAiJXMiICUgcGF0Y2hbInVybCJdCi0KLQotY2xhc3MgQ2hlY2tTdHls
ZShDb21tYW5kKToKLSAgICBuYW1lID0gImNoZWNrLXN0eWxlIgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IFdlYktpdExhbmRpbmdTY3JpcHRzLmNsZWFuaW5nX29w
dGlvbnMoKQotICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJSdW5zIGNoZWNrLXdlYmtp
dC1zdHlsZSBvbiB0aGUgc3BlY2lmaWVkIGF0dGFjaG1lbnQiLCAiQVRUQUNITUVOVF9JRCIsIG9w
dGlvbnM9b3B0aW9ucykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBjaGVja19zdHlsZShj
bHMsIHBhdGNoLCBvcHRpb25zLCB0b29sKToKLSAgICAgICAgdG9vbC5zY20oKS51cGRhdGVfd2Vi
a2l0KCkKLSAgICAgICAgbG9nKCJDaGVja2luZyBzdHlsZSBmb3IgcGF0Y2ggJXMgZnJvbSBidWcg
JXMuIiAlIChwYXRjaFsiaWQiXSwgcGF0Y2hbImJ1Z19pZCJdKSkKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgIyBGSVhNRTogY2hlY2std2Via2l0LXN0eWxlIHNob3VsZG4ndCByZWFsbHkgaGF2
ZSB0byBhcHBseSB0aGUgcGF0Y2ggdG8gY2hlY2sgdGhlIHN0eWxlLgotICAgICAgICAgICAgdG9v
bC5zY20oKS5hcHBseV9wYXRjaChwYXRjaCkKLSAgICAgICAgICAgIFdlYktpdExhbmRpbmdTY3Jp
cHRzLnJ1bl93ZWJraXRfc2NyaXB0KCJjaGVjay13ZWJraXQtc3R5bGUiKQotICAgICAgICBleGNl
cHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBsb2coIlBhdGNoICVzIGZyb20gYnVnICVz
IGZhaWxlZCB0byBhcHBseSBhbmQgY2hlY2sgc3R5bGUuIiAlIChwYXRjaFsiaWQiXSwgcGF0Y2hb
ImJ1Z19pZCJdKSkKLSAgICAgICAgICAgIGxvZyhlLm91dHB1dCkKLQotICAgICAgICAjIFRoaXMg
aXMgc2FmZSBiZWNhdXNlIGluIG9yZGVyIHRvIGdldCBoZXJlIHRoZSB3b3JraW5nIGRpcmVjdG9y
eSBoYWQgdG8gYmUKLSAgICAgICAgIyBjbGVhbiBhdCB0aGUgYmVnaW5uaW5nLiAgQ2xlYW4gaXQg
b3V0IGFnYWluIGJlZm9yZSB3ZSBleGl0LgotICAgICAgICB0b29sLnNjbSgpLmVuc3VyZV9jbGVh
bl93b3JraW5nX2RpcmVjdG9yeShmb3JjZV9jbGVhbj1UcnVlKQotCi0gICAgZGVmIGV4ZWN1dGUo
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGF0dGFjaG1lbnRfaWQgPSBhcmdz
WzBdCi0gICAgICAgIGF0dGFjaG1lbnQgPSB0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChhdHRh
Y2htZW50X2lkKQotCi0gICAgICAgIFdlYktpdExhbmRpbmdTY3JpcHRzLnByZXBhcmVfY2xlYW5f
d29ya2luZ19kaXJlY3RvcnkodG9vbC5zY20oKSwgb3B0aW9ucykKLSAgICAgICAgc2VsZi5jaGVj
a19zdHlsZShhdHRhY2htZW50LCBvcHRpb25zLCB0b29sKQotCi0KLWNsYXNzIEJ1aWxkU2VxdWVu
Y2UoQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVuY2UpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cHRpb25zLCB0b29sKToKLSAgICAgICAgQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVuY2UuX19pbml0
X18oc2VsZiwgTm9uZSwgb3B0aW9ucywgdG9vbCkKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAg
ICAgIHNlbGYuY2xlYW4oKQotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0gICAgICAgIHNlbGYuYnVp
bGQoKQotCi0KLWNsYXNzIEJ1aWxkKENvbW1hbmQpOgotICAgIG5hbWUgPSAiYnVpbGQiCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gV2ViS2l0TGFuZGluZ1Njcmlw
dHMuY2xlYW5pbmdfb3B0aW9ucygpCi0gICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1Nj
cmlwdHMuYnVpbGRfb3B0aW9ucygpCi0gICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1Nj
cmlwdHMubGFuZF9vcHRpb25zKCkKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiVXBk
YXRlcyB3b3JraW5nIGNvcHkgYW5kIGRvZXMgYSBidWlsZC4iLCAiIiwgb3B0aW9ucykKLQotICAg
IGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBzZXF1ZW5j
ZSA9IEJ1aWxkU2VxdWVuY2Uob3B0aW9ucywgdG9vbCkKLSAgICAgICAgc2VxdWVuY2UucnVuX2Fu
ZF9oYW5kbGVfZXJyb3JzKCkKLQotCi1jbGFzcyBBcHBseUF0dGFjaG1lbnQoQ29tbWFuZCk6Ci0g
ICAgbmFtZSA9ICJhcHBseS1hdHRhY2htZW50IgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAg
ICAgICAgb3B0aW9ucyA9IFdlYktpdEFwcGx5aW5nU2NyaXB0cy5hcHBseV9vcHRpb25zKCkgKyBX
ZWJLaXRMYW5kaW5nU2NyaXB0cy5jbGVhbmluZ19vcHRpb25zKCkKLSAgICAgICAgQ29tbWFuZC5f
X2luaXRfXyhzZWxmLCAiQXBwbGllcyBhbiBhdHRhY2htZW50IHRvIHRoZSBsb2NhbCB3b3JraW5n
IGRpcmVjdG9yeS4iLCAiQVRUQUNITUVOVF9JRCIsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRl
ZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBXZWJLaXRBcHBs
eWluZ1NjcmlwdHMuc2V0dXBfZm9yX3BhdGNoX2FwcGx5KHRvb2wuc2NtKCksIG9wdGlvbnMpCi0g
ICAgICAgIGF0dGFjaG1lbnRfaWQgPSBhcmdzWzBdCi0gICAgICAgIGF0dGFjaG1lbnQgPSB0b29s
LmJ1Z3MuZmV0Y2hfYXR0YWNobWVudChhdHRhY2htZW50X2lkKQotICAgICAgICBXZWJLaXRBcHBs
eWluZ1NjcmlwdHMuYXBwbHlfcGF0Y2hlc193aXRoX29wdGlvbnModG9vbC5zY20oKSwgW2F0dGFj
aG1lbnRdLCBvcHRpb25zKQotCi0KLWNsYXNzIEFwcGx5UGF0Y2hlcyhDb21tYW5kKToKLSAgICBu
YW1lID0gImFwcGx5LXBhdGNoZXMiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBv
cHRpb25zID0gV2ViS2l0QXBwbHlpbmdTY3JpcHRzLmFwcGx5X29wdGlvbnMoKSArIFdlYktpdExh
bmRpbmdTY3JpcHRzLmNsZWFuaW5nX29wdGlvbnMoKQotICAgICAgICBDb21tYW5kLl9faW5pdF9f
KHNlbGYsICJBcHBsaWVzIGFsbCBwYXRjaGVzIG9uIGEgYnVnIHRvIHRoZSBsb2NhbCB3b3JraW5n
IGRpcmVjdG9yeS4iLCAiQlVHSUQiLCBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICBkZWYgZXhlY3V0
ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgV2ViS2l0QXBwbHlpbmdTY3Jp
cHRzLnNldHVwX2Zvcl9wYXRjaF9hcHBseSh0b29sLnNjbSgpLCBvcHRpb25zKQotICAgICAgICBi
dWdfaWQgPSBhcmdzWzBdCi0gICAgICAgIHBhdGNoZXMgPSB0b29sLmJ1Z3MuZmV0Y2hfcmV2aWV3
ZWRfcGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCi0gICAgICAgIFdlYktpdEFwcGx5aW5nU2NyaXB0
cy5hcHBseV9wYXRjaGVzX3dpdGhfb3B0aW9ucyh0b29sLnNjbSgpLCBwYXRjaGVzLCBvcHRpb25z
KQotCi0KLWNsYXNzIFdlYktpdEFwcGx5aW5nU2NyaXB0czoKLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIGFwcGx5X29wdGlvbnMoKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIG1h
a2Vfb3B0aW9uKCItLW5vLXVwZGF0ZSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ1cGRh
dGUiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3Rv
cnkgYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMiKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCIt
LWxvY2FsLWNvbW1pdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImxvY2FsX2NvbW1pdCIs
IGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1ha2UgYSBsb2NhbCBjb21taXQgZm9yIGVhY2ggYXBwbGll
ZCBwYXRjaCIpLAotICAgICAgICBdCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNldHVw
X2Zvcl9wYXRjaF9hcHBseShzY20sIG9wdGlvbnMpOgotICAgICAgICBXZWJLaXRMYW5kaW5nU2Ny
aXB0cy5wcmVwYXJlX2NsZWFuX3dvcmtpbmdfZGlyZWN0b3J5KHNjbSwgb3B0aW9ucywgYWxsb3df
bG9jYWxfY29tbWl0cz1UcnVlKQotICAgICAgICBpZiBvcHRpb25zLnVwZGF0ZToKLSAgICAgICAg
ICAgIHNjbS51cGRhdGVfd2Via2l0KCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYXBw
bHlfcGF0Y2hlc193aXRoX29wdGlvbnMoc2NtLCBwYXRjaGVzLCBvcHRpb25zKToKLSAgICAgICAg
aWYgb3B0aW9ucy5sb2NhbF9jb21taXQgYW5kIG5vdCBzY20uc3VwcG9ydHNfbG9jYWxfY29tbWl0
cygpOgotICAgICAgICAgICAgZXJyb3IoIi0tbG9jYWwtY29tbWl0IHBhc3NlZCwgYnV0ICVzIGRv
ZXMgbm90IHN1cHBvcnQgbG9jYWwgY29tbWl0cyIgJSBzY20uZGlzcGxheV9uYW1lKCkpCi0KLSAg
ICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6Ci0gICAgICAgICAgICBsb2coIkFwcGx5aW5nIGF0
dGFjaG1lbnQgJXMgZnJvbSBidWcgJXMiICUgKHBhdGNoWyJpZCJdLCBwYXRjaFsiYnVnX2lkIl0p
KQotICAgICAgICAgICAgc2NtLmFwcGx5X3BhdGNoKHBhdGNoKQotICAgICAgICAgICAgaWYgb3B0
aW9ucy5sb2NhbF9jb21taXQ6Ci0gICAgICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBjb21t
aXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQoc2NtKQotICAgICAgICAgICAgICAgIHNjbS5jb21t
aXRfbG9jYWxseV93aXRoX21lc3NhZ2UoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpIG9yIHBhdGNo
WyJuYW1lIl0pCi0KLQotY2xhc3MgTGFuZERpZmZTZXF1ZW5jZShDb25kaXRpb25hbExhbmRpbmdT
ZXF1ZW5jZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoLCBvcHRpb25zLCB0b29sKToK
LSAgICAgICAgQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVuY2UuX19pbml0X18oc2VsZiwgcGF0Y2gs
IG9wdGlvbnMsIHRvb2wpCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxk
KCkKLSAgICAgICAgc2VsZi50ZXN0KCkKLSAgICAgICAgY29tbWl0X2xvZyA9IHNlbGYuY29tbWl0
KCkKLSAgICAgICAgc2VsZi5jbG9zZV9idWcoY29tbWl0X2xvZykKLQotICAgIGRlZiBjbG9zZV9i
dWcoc2VsZiwgY29tbWl0X2xvZyk6Ci0gICAgICAgIGNvbW1lbnRfdGVzdCA9IGJ1Z19jb21tZW50
X2Zyb21fY29tbWl0X3RleHQoc2VsZi5fdG9vbC5zY20oKSwgY29tbWl0X2xvZykKLSAgICAgICAg
YnVnX2lkID0gc2VsZi5fcGF0Y2hbImJ1Z19pZCJdCi0gICAgICAgIGlmIGJ1Z19pZDoKLSAgICAg
ICAgICAgIGxvZygiVXBkYXRpbmcgYnVnICVzIiAlIGJ1Z19pZCkKLSAgICAgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMuY2xvc2VfYnVnOgotICAgICAgICAgICAgICAgIHNlbGYuX3Rvb2wuYnVncy5j
bG9zZV9idWdfYXNfZml4ZWQoYnVnX2lkLCBjb21tZW50X3Rlc3QpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhIHNtYXJ0IHdheSB0byBmaWd1
cmUgb3V0IGlmIHRoZSBwYXRjaCBpcyBhdHRhY2hlZAotICAgICAgICAgICAgICAgICMgdG8gdGhl
IGJ1ZywgYW5kIGlmIHNvIG9ic29sZXRlIGl0LgotICAgICAgICAgICAgICAgIHNlbGYuX3Rvb2wu
YnVncy5wb3N0X2NvbW1lbnRfdG9fYnVnKGJ1Z19pZCwgY29tbWVudF90ZXN0KQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgbG9nKGNvbW1lbnRfdGVzdCkKLSAgICAgICAgICAgIGxvZygiTm8g
YnVnIGlkIHByb3ZpZGVkLiIpCi0KLQotY2xhc3MgTGFuZERpZmYoQ29tbWFuZCk6Ci0gICAgbmFt
ZSA9ICJsYW5kLWRpZmYiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25z
ID0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1yIiwgIi0tcmV2aWV3ZXIiLCBhY3Rpb249
InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0icmV2aWV3ZXIiLCBoZWxwPSJVcGRhdGUgQ2hh
bmdlTG9ncyB0byBzYXkgUmV2aWV3ZWQgYnkgUkVWSUVXRVIuIiksCi0gICAgICAgIF0KLSAgICAg
ICAgb3B0aW9ucyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWlsZF9vcHRpb25zKCkKLSAgICAg
ICAgb3B0aW9ucyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5sYW5kX29wdGlvbnMoKQotICAgICAg
ICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJMYW5kcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVj
dG9yeSBkaWZmIGFuZCB1cGRhdGVzIHRoZSBidWcgaWYgcHJvdmlkZWQuIiwgIltCVUdJRF0iLCBv
cHRpb25zPW9wdGlvbnMpCi0KLSAgICBkZWYgZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcoc2VsZiwg
YnVncywgYnVnX2lkKToKLSAgICAgICAgcGF0Y2hlcyA9IGJ1Z3MuZmV0Y2hfcmV2aWV3ZWRfcGF0
Y2hlc19mcm9tX2J1ZyhidWdfaWQpCi0gICAgICAgIGlmIGxlbihwYXRjaGVzKSAhPSAxOgotICAg
ICAgICAgICAgbG9nKCIlcyBvbiBidWcgJXMsIGNhbm5vdCBpbmZlciByZXZpZXdlci4iICUgKHBs
dXJhbGl6ZSgicmV2aWV3ZWQgcGF0Y2giLCBsZW4ocGF0Y2hlcykpLCBidWdfaWQpKQotICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcGF0Y2ggPSBwYXRjaGVzWzBdCi0gICAgICAgIHJl
dmlld2VyID0gcGF0Y2hbInJldmlld2VyIl0KLSAgICAgICAgbG9nKCJHdWVzc2luZyBcIiVzXCIg
YXMgcmV2aWV3ZXIgZnJvbSBhdHRhY2htZW50ICVzIG9uIGJ1ZyAlcy4iICUgKHJldmlld2VyLCBw
YXRjaFsiaWQiXSwgYnVnX2lkKSkKLSAgICAgICAgcmV0dXJuIHJldmlld2VyCi0KLSAgICBkZWYg
dXBkYXRlX2NoYW5nZWxvZ3Nfd2l0aF9yZXZpZXdlcihzZWxmLCByZXZpZXdlciwgYnVnX2lkLCB0
b29sKToKLSAgICAgICAgaWYgbm90IHJldmlld2VyOgotICAgICAgICAgICAgaWYgbm90IGJ1Z19p
ZDoKLSAgICAgICAgICAgICAgICBsb2coIk5vIGJ1ZyBpZCBwcm92aWRlZCBhbmQgLS1yZXZpZXdl
cj0gbm90IHByb3ZpZGVkLiAgTm90IHVwZGF0aW5nIENoYW5nZUxvZ3Mgd2l0aCByZXZpZXdlci4i
KQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgcmV2aWV3ZXIgPSBzZWxmLmd1
ZXNzX3Jldmlld2VyX2Zyb21fYnVnKHRvb2wuYnVncywgYnVnX2lkKQotCi0gICAgICAgIGlmIG5v
dCByZXZpZXdlcjoKLSAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGd1ZXNzIHJldmlld2VyIGZy
b20gYnVnICVzIGFuZCAtLXJldmlld2VyPSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hh
bmdlTG9ncyB3aXRoIHJldmlld2VyLiIgJSBidWdfaWQpCi0gICAgICAgICAgICByZXR1cm4KLQot
ICAgICAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gdG9vbC5zY20oKS5tb2RpZmllZF9jaGFuZ2Vs
b2dzKCk6Ci0gICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLnNldF9yZXZpZXdl
cihyZXZpZXdlcikKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wp
OgotICAgICAgICBidWdfaWQgPSAoYXJncyBhbmQgYXJnc1swXSkgb3IgcGFyc2VfYnVnX2lkKHRv
b2wuc2NtKCkuY3JlYXRlX3BhdGNoKCkpCi0KLSAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMu
ZW5zdXJlX2J1aWxkZXJzX2FyZV9ncmVlbih0b29sLmJ1aWxkYm90LCBvcHRpb25zKQotCi0gICAg
ICAgIG9zLmNoZGlyKHRvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkKLSAgICAgICAgc2VsZi51cGRh
dGVfY2hhbmdlbG9nc193aXRoX3Jldmlld2VyKG9wdGlvbnMucmV2aWV3ZXIsIGJ1Z19pZCwgdG9v
bCkKLQotICAgICAgICBmYWtlX3BhdGNoID0gewotICAgICAgICAgICAgImlkIjogTm9uZSwKLSAg
ICAgICAgICAgICJidWdfaWQiOiBidWdfaWQKLSAgICAgICAgfQotCi0gICAgICAgIHNlcXVlbmNl
ID0gTGFuZERpZmZTZXF1ZW5jZShmYWtlX3BhdGNoLCBvcHRpb25zLCB0b29sKQotICAgICAgICBz
ZXF1ZW5jZS5ydW4oKQotCi0KLWNsYXNzIEFic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZChD
b21tYW5kKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaGVscF90ZXh0LCBhcmdzX2Rlc2NyaXB0
aW9uLCBvcHRpb25zKToKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCBoZWxwX3RleHQs
IGFyZ3NfZGVzY3JpcHRpb24sIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBfZmV0Y2hfbGlz
dF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50
IgotCi0gICAgZGVmIF9wcmVwYXJlX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9v
bCk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3Qg
aW1wbGVtZW50IgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY29sbGVjdF9wYXRjaGVz
X2J5X2J1ZyhwYXRjaGVzKToKLSAgICAgICAgYnVnc190b19wYXRjaGVzID0ge30KLSAgICAgICAg
Zm9yIHBhdGNoIGluIHBhdGNoZXM6Ci0gICAgICAgICAgICBidWdfaWQgPSBwYXRjaFsiYnVnX2lk
Il0KLSAgICAgICAgICAgIGJ1Z3NfdG9fcGF0Y2hlc1tidWdfaWRdID0gYnVnc190b19wYXRjaGVz
LmdldChidWdfaWQsIFtdKS5hcHBlbmQocGF0Y2gpCi0gICAgICAgIHJldHVybiBidWdzX3RvX3Bh
dGNoZXMKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAg
ICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIGVycm9yKCIlcyByZXF1aXJlZCIgJSBzZWxm
LmFyZ3VtZW50X25hbWVzKQotCi0gICAgICAgIHNlbGYuX3ByZXBhcmVfdG9fcHJvY2VzcyhvcHRp
b25zLCBhcmdzLCB0b29sKQotICAgICAgICBwYXRjaGVzID0gc2VsZi5fZmV0Y2hfbGlzdF9vZl9w
YXRjaGVzX3RvX3Byb2Nlc3Mob3B0aW9ucywgYXJncywgdG9vbCkKLQotICAgICAgICAjIEl0J3Mg
bmljZSB0byBwcmludCBvdXQgdG90YWwgc3RhdGlzdGljcy4KLSAgICAgICAgYnVnc190b19wYXRj
aGVzID0gc2VsZi5fY29sbGVjdF9wYXRjaGVzX2J5X2J1ZyhwYXRjaGVzKQotICAgICAgICBsb2co
IlByb2Nlc3NpbmcgJXMgZnJvbSAlcy4iICUgKHBsdXJhbGl6ZSgicGF0Y2giLCBsZW4ocGF0Y2hl
cykpLCBwbHVyYWxpemUoImJ1ZyIsIGxlbihidWdzX3RvX3BhdGNoZXMpKSkpCi0KLSAgICAgICAg
Zm9yIHBhdGNoIGluIHBhdGNoZXM6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jZXNzX3BhdGNoKHBh
dGNoLCBvcHRpb25zLCBhcmdzLCB0b29sKQotCi0KLWNsYXNzIEJ1aWxkQXR0YWNobWVudFNlcXVl
bmNlKExhbmRpbmdTZXF1ZW5jZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoLCBvcHRp
b25zLCB0b29sKToKLSAgICAgICAgTGFuZGluZ1NlcXVlbmNlLl9faW5pdF9fKHNlbGYsIHBhdGNo
LCBvcHRpb25zLCB0b29sKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5jbGVh
bigpCi0gICAgICAgIHNlbGYudXBkYXRlKCkKLSAgICAgICAgc2VsZi5hcHBseV9wYXRjaCgpCi0g
ICAgICAgIHNlbGYuYnVpbGQoKQotCi0KLWNsYXNzIEJ1aWxkQXR0YWNobWVudChBYnN0cmFjdFBh
dGNoUHJvY2Vzc2luZ0NvbW1hbmQpOgotICAgIG5hbWUgPSAiYnVpbGQtYXR0YWNobWVudCIKLSAg
ICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBXZWJLaXRMYW5kaW5nU2Ny
aXB0cy5jbGVhbmluZ19vcHRpb25zKCkKLSAgICAgICAgb3B0aW9ucyArPSBXZWJLaXRMYW5kaW5n
U2NyaXB0cy5idWlsZF9vcHRpb25zKCkKLSAgICAgICAgQWJzdHJhY3RQYXRjaFByb2Nlc3NpbmdD
b21tYW5kLl9faW5pdF9fKHNlbGYsICJCdWlsZHMgcGF0Y2hlcyBmcm9tIGJ1Z3ppbGxhIiwgIkFU
VEFDSE1FTlRfSUQgW0FUVEFDSE1FTlRfSURTXSIsIG9wdGlvbnMpCi0KLSAgICBkZWYgX2ZldGNo
X2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSBwYXRjaF9pZDogdG9vbC5idWdzLmZldGNoX2F0dGFj
aG1lbnQocGF0Y2hfaWQpLCBhcmdzKQotCi0gICAgZGVmIF9wcmVwYXJlX3RvX3Byb2Nlc3Moc2Vs
Ziwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgICMgQ2hlY2sgdGhlIHRyZWUgc3RhdHVz
IGZpcnN0IHNvIHdlIGNhbiBmYWlsIGVhcmx5LgotICAgICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0
cy5lbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKHRvb2wuYnVpbGRib3QsIG9wdGlvbnMpCi0KLSAg
ICBkZWYgX3Byb2Nlc3NfcGF0Y2goc2VsZiwgcGF0Y2gsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgot
ICAgICAgICBzZXF1ZW5jZSA9IEJ1aWxkQXR0YWNobWVudFNlcXVlbmNlKHBhdGNoLCBvcHRpb25z
LCB0b29sKQotICAgICAgICBzZXF1ZW5jZS5ydW5fYW5kX2hhbmRsZV9lcnJvcnMoKQotCi0KLWNs
YXNzIEFic3RyYWN0UGF0Y2hMYW5kaW5nQ29tbWFuZChBYnN0cmFjdFBhdGNoUHJvY2Vzc2luZ0Nv
bW1hbmQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWxwX3RleHQsIGFyZ3NfZGVzY3JpcHRp
b24pOgotICAgICAgICBvcHRpb25zID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuY2xlYW5pbmdfb3B0
aW9ucygpCi0gICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuYnVpbGRfb3B0
aW9ucygpCi0gICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1NjcmlwdHMubGFuZF9vcHRp
b25zKCkKLSAgICAgICAgQWJzdHJhY3RQYXRjaFByb2Nlc3NpbmdDb21tYW5kLl9faW5pdF9fKHNl
bGYsIGhlbHBfdGV4dCwgYXJnc19kZXNjcmlwdGlvbiwgb3B0aW9ucykKLQotICAgIGRlZiBfcHJl
cGFyZV90b19wcm9jZXNzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICAjIENo
ZWNrIHRoZSB0cmVlIHN0YXR1cyBmaXJzdCBzbyB3ZSBjYW4gZmFpbCBlYXJseS4KLSAgICAgICAg
V2ViS2l0TGFuZGluZ1NjcmlwdHMuZW5zdXJlX2J1aWxkZXJzX2FyZV9ncmVlbih0b29sLmJ1aWxk
Ym90LCBvcHRpb25zKQotCi0gICAgZGVmIF9wcm9jZXNzX3BhdGNoKHNlbGYsIHBhdGNoLCBvcHRp
b25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgc2VxdWVuY2UgPSBDb25kaXRpb25hbExhbmRpbmdT
ZXF1ZW5jZShwYXRjaCwgb3B0aW9ucywgdG9vbCkKLSAgICAgICAgc2VxdWVuY2UucnVuX2FuZF9o
YW5kbGVfZXJyb3JzKCkKLQotCi1jbGFzcyBMYW5kQXR0YWNobWVudChBYnN0cmFjdFBhdGNoTGFu
ZGluZ0NvbW1hbmQpOgotICAgIG5hbWUgPSAibGFuZC1hdHRhY2htZW50IgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKLSAgICAgICAgQWJzdHJhY3RQYXRjaExhbmRpbmdDb21tYW5kLl9faW5pdF9f
KHNlbGYsICJMYW5kcyBwYXRjaGVzIGZyb20gYnVnemlsbGEsIG9wdGlvbmFsbHkgYnVpbGRpbmcg
YW5kIHRlc3RpbmcgdGhlbSBmaXJzdCIsICJBVFRBQ0hNRU5UX0lEIFtBVFRBQ0hNRU5UX0lEU10i
KQotCi0gICAgZGVmIF9mZXRjaF9saXN0X29mX3BhdGNoZXNfdG9fcHJvY2VzcyhzZWxmLCBvcHRp
b25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcmV0dXJuIG1hcChsYW1iZGEgcGF0Y2hfaWQ6IHRv
b2wuYnVncy5mZXRjaF9hdHRhY2htZW50KHBhdGNoX2lkKSwgYXJncykKLQotCi1jbGFzcyBMYW5k
UGF0Y2hlcyhBYnN0cmFjdFBhdGNoTGFuZGluZ0NvbW1hbmQpOgotICAgIG5hbWUgPSAibGFuZC1w
YXRjaGVzIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQWJzdHJhY3RQYXRjaExh
bmRpbmdDb21tYW5kLl9faW5pdF9fKHNlbGYsICJMYW5kcyBhbGwgcGF0Y2hlcyBvbiB0aGUgZ2l2
ZW4gYnVncywgb3B0aW9uYWxseSBidWlsZGluZyBhbmQgdGVzdGluZyB0aGVtIGZpcnN0IiwgIkJV
R0lEIFtCVUdJRFNdIikKLQotICAgIGRlZiBfZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nl
c3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIGFsbF9wYXRjaGVzID0gW10K
LSAgICAgICAgZm9yIGJ1Z19pZCBpbiBhcmdzOgotICAgICAgICAgICAgcGF0Y2hlcyA9IHRvb2wu
YnVncy5mZXRjaF9yZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKLSAgICAgICAgICAg
IGxvZygiJXMgZm91bmQgb24gYnVnICVzLiIgJSAocGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIs
IGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCi0gICAgICAgICAgICBhbGxfcGF0Y2hlcyArPSBwYXRj
aGVzCi0gICAgICAgIHJldHVybiBhbGxfcGF0Y2hlcwotCi0KLWNsYXNzIENvbW1pdE1lc3NhZ2VG
b3JDdXJyZW50RGlmZihDb21tYW5kKToKLSAgICBuYW1lID0gImNvbW1pdC1tZXNzYWdlIgotICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiUHJp
bnRzIGEgY29tbWl0IG1lc3NhZ2Ugc3VpdGFibGUgZm9yIHRoZSB1bmNvbW1pdHRlZCBjaGFuZ2Vz
LiIpCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAg
ICAgb3MuY2hkaXIodG9vbC5zY20oKS5jaGVja291dF9yb290KQotICAgICAgICBwcmludCAiJXMi
ICUgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0KHRvb2wuc2NtKCkpLm1lc3NhZ2UoKQot
Ci0KLWNsYXNzIE9ic29sZXRlQXR0YWNobWVudHMoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJvYnNv
bGV0ZS1hdHRhY2htZW50cyIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIENvbW1h
bmQuX19pbml0X18oc2VsZiwgIk1hcmtzIGFsbCBhdHRhY2htZW50cyBvbiBhIGJ1ZyBhcyBvYnNv
bGV0ZS4iLCAiQlVHSUQiKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywg
dG9vbCk6Ci0gICAgICAgIGJ1Z19pZCA9IGFyZ3NbMF0KLSAgICAgICAgYXR0YWNobWVudHMgPSB0
b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudHNfZnJvbV9idWcoYnVnX2lkKQotICAgICAgICBmb3Ig
YXR0YWNobWVudCBpbiBhdHRhY2htZW50czoKLSAgICAgICAgICAgIGlmIG5vdCBhdHRhY2htZW50
WyJpc19vYnNvbGV0ZSJdOgotICAgICAgICAgICAgICAgIHRvb2wuYnVncy5vYnNvbGV0ZV9hdHRh
Y2htZW50KGF0dGFjaG1lbnRbImlkIl0pCi0KLQotY2xhc3MgUG9zdERpZmYoQ29tbWFuZCk6Ci0g
ICAgbmFtZSA9ICJwb3N0LWRpZmYiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBv
cHRpb25zID0gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1tIiwgIi0tZGVzY3JpcHRpb24i
LCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iZGVzY3JpcHRpb24iLCBoZWxw
PSJEZXNjcmlwdGlvbiBzdHJpbmcgZm9yIHRoZSBhdHRhY2htZW50IChkZWZhdWx0OiBcInBhdGNo
XCIpIiksCi0gICAgICAgIF0KLSAgICAgICAgb3B0aW9ucyArPSBzZWxmLnBvc3Rpbmdfb3B0aW9u
cygpCi0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIkF0dGFjaGVzIHRoZSBjdXJyZW50
IHdvcmtpbmcgZGlyZWN0b3J5IGRpZmYgdG8gYSBidWcgYXMgYSBwYXRjaCBmaWxlLiIsICJbQlVH
SURdIiwgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwb3N0
aW5nX29wdGlvbnMoKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9u
KCItLW5vLW9ic29sZXRlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9Im9ic29sZXRlX3Bh
dGNoZXMiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBvYnNvbGV0ZSBvbGQgcGF0Y2hlcyBi
ZWZvcmUgcG9zdGluZyB0aGlzIG9uZS4iKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5v
LXJldmlldyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRy
dWUsIGhlbHA9IkRvIG5vdCBtYXJrIHRoZSBwYXRjaCBmb3IgcmV2aWV3LiIpLAotICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tcmVxdWVzdC1jb21taXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBk
ZXN0PSJyZXF1ZXN0X2NvbW1pdCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1hcmsgdGhlIHBhdGNo
IGFzIG5lZWRpbmcgYXV0by1jb21taXQgYWZ0ZXIgcmV2aWV3LiIpLAotICAgICAgICBdCi0KLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9ic29sZXRlX3BhdGNoZXNfb25fYnVnKGJ1Z19pZCwg
YnVncyk6Ci0gICAgICAgIHBhdGNoZXMgPSBidWdzLmZldGNoX3BhdGNoZXNfZnJvbV9idWcoYnVn
X2lkKQotICAgICAgICBpZiBsZW4ocGF0Y2hlcyk6Ci0gICAgICAgICAgICBsb2coIk9ic29sZXRp
bmcgJXMgb24gYnVnICVzIiAlIChwbHVyYWxpemUoIm9sZCBwYXRjaCIsIGxlbihwYXRjaGVzKSks
IGJ1Z19pZCkpCi0gICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKLSAgICAgICAgICAg
ICAgICBidWdzLm9ic29sZXRlX2F0dGFjaG1lbnQocGF0Y2hbImlkIl0pCi0KLSAgICBkZWYgZXhl
Y3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgIyBQZXJmZXIgYSBidWcg
aWQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IG92ZXIgYSBidWcgdXJsIGluIHRoZSBkaWZmIChpLmUu
IENoYW5nZUxvZ3MpLgotICAgICAgICBidWdfaWQgPSAoYXJncyBhbmQgYXJnc1swXSkgb3IgcGFy
c2VfYnVnX2lkKHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNoKCkpCi0gICAgICAgIGlmIG5vdCBidWdf
aWQ6Ci0gICAgICAgICAgICBlcnJvcigiTm8gYnVnIGlkIHBhc3NlZCBhbmQgbm8gYnVnIHVybCBm
b3VuZCBpbiBkaWZmLCBjYW4ndCBwb3N0LiIpCi0KLSAgICAgICAgaWYgb3B0aW9ucy5vYnNvbGV0
ZV9wYXRjaGVzOgotICAgICAgICAgICAgc2VsZi5vYnNvbGV0ZV9wYXRjaGVzX29uX2J1ZyhidWdf
aWQsIHRvb2wuYnVncykKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2go
KQotICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRj
aF90b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKLQotICAgICAgICBkZXNjcmlwdGlv
biA9IG9wdGlvbnMuZGVzY3JpcHRpb24gb3IgIlBhdGNoIgotICAgICAgICB0b29sLmJ1Z3MuYWRk
X3BhdGNoX3RvX2J1ZyhidWdfaWQsIGRpZmZfZmlsZSwgZGVzY3JpcHRpb24sIG1hcmtfZm9yX3Jl
dmlldz1vcHRpb25zLnJldmlldywgbWFya19mb3JfY29tbWl0X3F1ZXVlPW9wdGlvbnMucmVxdWVz
dF9jb21taXQpCi0KLQotY2xhc3MgUG9zdENvbW1pdHMoQ29tbWFuZCk6Ci0gICAgbmFtZSA9ICJw
b3N0LWNvbW1pdHMiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0g
WwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1iIiwgIi0tYnVnLWlkIiwgYWN0aW9uPSJzdG9y
ZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImJ1Z19pZCIsIGhlbHA9IlNwZWNpZnkgYnVnIGlkIGlm
IG5vIFVSTCBpcyBwcm92aWRlZCBpbiB0aGUgY29tbWl0IGxvZy4iKSwKLSAgICAgICAgICAgIG1h
a2Vfb3B0aW9uKCItLWFkZC1sb2ctYXMtY29tbWVudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
c3Q9ImFkZF9sb2dfYXNfY29tbWVudCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkFkZCBjb21taXQg
bG9nIG1lc3NhZ2UgYXMgYSBjb21tZW50IHdoZW4gdXBsb2FkaW5nIHRoZSBwYXRjaC4iKSwKLSAg
ICAgICAgICAgIG1ha2Vfb3B0aW9uKCItbSIsICItLWRlc2NyaXB0aW9uIiwgYWN0aW9uPSJzdG9y
ZSIsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImRlc2NyaXB0aW9uIiwgaGVscD0iRGVzY3JpcHRpb24g
c3RyaW5nIGZvciB0aGUgYXR0YWNobWVudCAoZGVmYXVsdDogZGVzY3JpcHRpb24gZnJvbSBjb21t
aXQgbWVzc2FnZSkiKSwKLSAgICAgICAgXQotICAgICAgICBvcHRpb25zICs9IFBvc3REaWZmLnBv
c3Rpbmdfb3B0aW9ucygpCi0gICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIkF0dGFjaGVz
IGEgcmFuZ2Ugb2YgbG9jYWwgY29tbWl0cyB0byBidWdzIGFzIHBhdGNoIGZpbGVzLiIsICJDT01N
SVRJU0giLCBvcHRpb25zPW9wdGlvbnMsIHJlcXVpcmVzX2xvY2FsX2NvbW1pdHM9VHJ1ZSkKLQot
ICAgIGRlZiBfY29tbWVudF90ZXh0X2Zvcl9jb21taXQoc2VsZiwgb3B0aW9ucywgY29tbWl0X21l
c3NhZ2UsIHRvb2wsIGNvbW1pdF9pZCk6Ci0gICAgICAgIGNvbW1lbnRfdGV4dCA9IE5vbmUKLSAg
ICAgICAgaWYgKG9wdGlvbnMuYWRkX2xvZ19hc19jb21tZW50KToKLSAgICAgICAgICAgIGNvbW1l
bnRfdGV4dCA9IGNvbW1pdF9tZXNzYWdlLmJvZHkobHN0cmlwPVRydWUpCi0gICAgICAgICAgICBj
b21tZW50X3RleHQgKz0gIi0tLVxuIgotICAgICAgICAgICAgY29tbWVudF90ZXh0ICs9IHRvb2wu
c2NtKCkuZmlsZXNfY2hhbmdlZF9zdW1tYXJ5X2Zvcl9jb21taXQoY29tbWl0X2lkKQotICAgICAg
ICByZXR1cm4gY29tbWVudF90ZXh0Ci0KLSAgICBkZWYgX2RpZmZfZmlsZV9mb3JfY29tbWl0KHNl
bGYsIHRvb2wsIGNvbW1pdF9pZCk6Ci0gICAgICAgIGRpZmYgPSB0b29sLnNjbSgpLmNyZWF0ZV9w
YXRjaF9mcm9tX2xvY2FsX2NvbW1pdChjb21taXRfaWQpCi0gICAgICAgIHJldHVybiBTdHJpbmdJ
Ty5TdHJpbmdJTyhkaWZmKSAjIGFkZF9wYXRjaF90b19idWcgZXhwZWN0cyBhIGZpbGUtbGlrZSBv
YmplY3QKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgotICAg
ICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIGVycm9yKCIlcyBhcmd1bWVudCBpcyByZXF1
aXJlZCIgJSBzZWxmLmFyZ3VtZW50X25hbWVzKQotCi0gICAgICAgIGNvbW1pdF9pZHMgPSB0b29s
LnNjbSgpLmNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hfYXJndW1lbnRzKGFyZ3MpCi0gICAgICAg
IGlmIGxlbihjb21taXRfaWRzKSA+IDEwOiAjIFdlIGNvdWxkIGxvd2VyIHRoaXMgbGltaXQsIDEw
IGlzIHRvbyBtYW55IGZvciBvbmUgYnVnIGFzLWlzLgotICAgICAgICAgICAgZXJyb3IoImJ1Z3pp
bGxhLXRvb2wgZG9lcyBub3Qgc3VwcG9ydCBhdHRhY2hpbmcgJXMgYXQgb25jZS4gIEFyZSB5b3Ug
c3VyZSB5b3UgcGFzc2VkIHRoZSByaWdodCBjb21taXQgcmFuZ2U/IiAlIChwbHVyYWxpemUoInBh
dGNoIiwgbGVuKGNvbW1pdF9pZHMpKSkpCi0KLSAgICAgICAgaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hl
cyA9IHNldCgpCi0gICAgICAgIGZvciBjb21taXRfaWQgaW4gY29tbWl0X2lkczoKLSAgICAgICAg
ICAgIGNvbW1pdF9tZXNzYWdlID0gdG9vbC5zY20oKS5jb21taXRfbWVzc2FnZV9mb3JfbG9jYWxf
Y29tbWl0KGNvbW1pdF9pZCkKLQotICAgICAgICAgICAgIyBQcmVmZXIgLS1idWctaWQ9LCB0aGVu
IGEgYnVnIHVybCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZW4gYSBidWcgdXJsIGluIHRoZSBl
bnRpcmUgY29tbWl0IGRpZmYgKGkuZS4gQ2hhbmdlTG9ncykuCi0gICAgICAgICAgICBidWdfaWQg
PSBvcHRpb25zLmJ1Z19pZCBvciBwYXJzZV9idWdfaWQoY29tbWl0X21lc3NhZ2UubWVzc2FnZSgp
KSBvciBwYXJzZV9idWdfaWQodG9vbC5zY20oKS5jcmVhdGVfcGF0Y2hfZnJvbV9sb2NhbF9jb21t
aXQoY29tbWl0X2lkKSkKLSAgICAgICAgICAgIGlmIG5vdCBidWdfaWQ6Ci0gICAgICAgICAgICAg
ICAgbG9nKCJTa2lwcGluZyAlczogTm8gYnVnIGlkIGZvdW5kIGluIGNvbW1pdCBvciBzcGVjaWZp
ZWQgd2l0aCAtLWJ1Zy1pZC4iICUgY29tbWl0X2lkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
Ci0KLSAgICAgICAgICAgIGlmIG9wdGlvbnMub2Jzb2xldGVfcGF0Y2hlcyBhbmQgYnVnX2lkIG5v
dCBpbiBoYXZlX29ic29sZXRlZF9wYXRjaGVzOgotICAgICAgICAgICAgICAgIFBvc3REaWZmLm9i
c29sZXRlX3BhdGNoZXNfb25fYnVnKGJ1Z19pZCwgdG9vbC5idWdzKQotICAgICAgICAgICAgICAg
IGhhdmVfb2Jzb2xldGVkX3BhdGNoZXMuYWRkKGJ1Z19pZCkKLQotICAgICAgICAgICAgZGlmZl9m
aWxlID0gc2VsZi5fZGlmZl9maWxlX2Zvcl9jb21taXQodG9vbCwgY29tbWl0X2lkKQotICAgICAg
ICAgICAgZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uIG9yIGNvbW1pdF9tZXNzYWdl
LmRlc2NyaXB0aW9uKGxzdHJpcD1UcnVlLCBzdHJpcF91cmw9VHJ1ZSkKLSAgICAgICAgICAgIGNv
bW1lbnRfdGV4dCA9IHNlbGYuX2NvbW1lbnRfdGV4dF9mb3JfY29tbWl0KG9wdGlvbnMsIGNvbW1p
dF9tZXNzYWdlLCB0b29sLCBjb21taXRfaWQpCi0gICAgICAgICAgICB0b29sLmJ1Z3MuYWRkX3Bh
dGNoX3RvX2J1ZyhidWdfaWQsIGRpZmZfZmlsZSwgZGVzY3JpcHRpb24sIGNvbW1lbnRfdGV4dCwg
bWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3LCBtYXJrX2Zvcl9jb21taXRfcXVldWU9b3B0
aW9ucy5yZXF1ZXN0X2NvbW1pdCkKLQotCi1jbGFzcyBSb2xsb3V0KENvbW1hbmQpOgotICAgIG5h
bWUgPSAicm9sbG91dCIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIG9wdGlvbnMg
PSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5jbGVhbmluZ19vcHRpb25zKCkKLSAgICAgICAgb3B0aW9u
cyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWlsZF9vcHRpb25zKCkKLSAgICAgICAgb3B0aW9u
cyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5sYW5kX29wdGlvbnMoKQotICAgICAgICBvcHRpb25z
LmFwcGVuZChtYWtlX29wdGlvbigiLS1jb21wbGV0ZS1yb2xsb3V0IiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwgZGVzdD0iY29tcGxldGVfcm9sbG91dCIsIGhlbHA9IkV4cGVyaW1lbnRhbCBzdXBwb3J0
IGZvciBjb21wbGV0ZSB1bnN1cGVydmlzZWQgcm9sbG91dHMsIGluY2x1ZGluZyByZS1vcGVuaW5n
IHRoZSBidWcuICBOb3QgcmVjb21tZW5kZWQuIikpCi0gICAgICAgIENvbW1hbmQuX19pbml0X18o
c2VsZiwgIlJldmVydHMgdGhlIGdpdmVuIHJldmlzaW9uIGFuZCBjb21taXRzIHRoZSByZXZlcnQg
YW5kIHJlLW9wZW5zIHRoZSBvcmlnaW5hbCBidWcuIiwgIlJFVklTSU9OIFtCVUdJRF0iLCBvcHRp
b25zPW9wdGlvbnMpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jcmVhdGVfY2hhbmdl
bG9nc19mb3JfcmV2ZXJ0KHNjbSwgcmV2aXNpb24pOgotICAgICAgICAjIEZpcnN0LCBkaXNjYXJk
IHRoZSBDaGFuZ2VMb2cgY2hhbmdlcyBmcm9tIHRoZSByb2xsb3V0LgotICAgICAgICBjaGFuZ2Vs
b2dfcGF0aHMgPSBzY20ubW9kaWZpZWRfY2hhbmdlbG9ncygpCi0gICAgICAgIHNjbS5yZXZlcnRf
ZmlsZXMoY2hhbmdlbG9nX3BhdGhzKQotCi0gICAgICAgICMgU2Vjb25kLCBtYWtlIG5ldyBDaGFu
Z2VMb2cgZW50cmllcyBmb3IgdGhpcyByb2xsb3V0LgotICAgICAgICAjIFRoaXMgY291bGQgbW92
ZSB0byBwcmVwYXJlLUNoYW5nZUxvZyBieSBhZGRpbmcgYSAtLXJldmVydD0gb3B0aW9uLgotICAg
ICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0cy5ydW5fd2Via2l0X3NjcmlwdCgicHJlcGFyZS1DaGFu
Z2VMb2ciKQotICAgICAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gY2hhbmdlbG9nX3BhdGhzOgot
ICAgICAgICAgICAgQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKS51cGRhdGVfZm9yX3JldmVydChy
ZXZpc2lvbikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3BhcnNlX2J1Z19pZF9mcm9t
X3JldmlzaW9uX2RpZmYodG9vbCwgcmV2aXNpb24pOgotICAgICAgICBvcmlnaW5hbF9kaWZmID0g
dG9vbC5zY20oKS5kaWZmX2Zvcl9yZXZpc2lvbihyZXZpc2lvbikKLSAgICAgICAgcmV0dXJuIHBh
cnNlX2J1Z19pZChvcmlnaW5hbF9kaWZmKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBf
cmVvcGVuX2J1Z19hZnRlcl9yb2xsb3V0KHRvb2wsIGJ1Z19pZCwgY29tbWVudF90ZXh0KToKLSAg
ICAgICAgaWYgYnVnX2lkOgotICAgICAgICAgICAgdG9vbC5idWdzLnJlb3Blbl9idWcoYnVnX2lk
LCBjb21tZW50X3RleHQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2coY29tbWVudF90
ZXh0KQotICAgICAgICAgICAgbG9nKCJObyBidWdzIHdlcmUgdXBkYXRlZCBvciByZS1vcGVuZWQg
dG8gcmVmbGVjdCB0aGlzIHJvbGxvdXQuIikKLQotICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlv
bnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIGVycm9y
KCJSRVZJU0lPTiBpcyByZXF1aXJlZCwgc2VlIC0taGVscC4iKQotICAgICAgICByZXZpc2lvbiA9
IGFyZ3NbMF0KLSAgICAgICAgYnVnX2lkID0gc2VsZi5fcGFyc2VfYnVnX2lkX2Zyb21fcmV2aXNp
b25fZGlmZih0b29sLCByZXZpc2lvbikKLSAgICAgICAgaWYgb3B0aW9ucy5jb21wbGV0ZV9yb2xs
b3V0OgotICAgICAgICAgICAgaWYgYnVnX2lkOgotICAgICAgICAgICAgICAgIGxvZygiV2lsbCBy
ZS1vcGVuIGJ1ZyAlcyBhZnRlciByb2xsb3V0LiIgJSBidWdfaWQpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIHBhcnNlIGJ1ZyBudW1iZXIgZnJvbSBk
aWZmLiAgTm8gYnVncyB3aWxsIGJlIHVwZGF0ZWQvcmVvcGVuZWQgYWZ0ZXIgdGhlIHJvbGxvdXQu
IikKLQotICAgICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0cy5wcmVwYXJlX2NsZWFuX3dvcmtpbmdf
ZGlyZWN0b3J5KHRvb2wuc2NtKCksIG9wdGlvbnMpCi0gICAgICAgIHRvb2wuc2NtKCkudXBkYXRl
X3dlYmtpdCgpCi0gICAgICAgIHRvb2wuc2NtKCkuYXBwbHlfcmV2ZXJzZV9kaWZmKHJldmlzaW9u
KQotICAgICAgICBzZWxmLl9jcmVhdGVfY2hhbmdlbG9nc19mb3JfcmV2ZXJ0KHRvb2wuc2NtKCks
IHJldmlzaW9uKQotCi0gICAgICAgICMgRklYTUU6IEZ1bGx5IGF1dG9tYXRlZCByb2xsb3V0IGlz
IG5vdCAxMDAlIGlkaW90LXByb29mIHlldCwgc28gZm9yIG5vdyBqdXN0IGxvZyB3aXRoIGluc3Ry
dWN0aW9ucyBvbiBob3cgdG8gY29tcGxldGUgdGhlIHJvbGxvdXQuCi0gICAgICAgICMgT25jZSB3
ZSB0cnVzdCByb2xsb3V0IHdlIHdpbGwgcmVtb3ZlIHRoaXMgb3B0aW9uLgotICAgICAgICBpZiBu
b3Qgb3B0aW9ucy5jb21wbGV0ZV9yb2xsb3V0OgotICAgICAgICAgICAgbG9nKCJcbk5PVEU6IFJv
bGxvdXQgc3VwcG9ydCBpcyBleHBlcmltZW50YWwuXG5QbGVhc2UgdmVyaWZ5IHRoZSByb2xsb3V0
IGRpZmYgYW5kIHVzZSBcImJ1Z3ppbGxhLXRvb2wgbGFuZC1kaWZmICVzXCIgdG8gY29tbWl0IHRo
ZSByb2xsb3V0LiIgJSBidWdfaWQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21tZW50
X3RleHQgPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWlsZF9hbmRfY29tbWl0KHRvb2wuc2NtKCks
IG9wdGlvbnMpCi0gICAgICAgICAgICBzZWxmLl9yZW9wZW5fYnVnX2FmdGVyX3JvbGxvdXQodG9v
bCwgYnVnX2lkLCBjb21tZW50X3RleHQpCi0KLQotY2xhc3MgQ3JlYXRlQnVnKENvbW1hbmQpOgot
ICAgIG5hbWUgPSAiY3JlYXRlLWJ1ZyIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAg
IG9wdGlvbnMgPSBbCi0gICAgICAgICAgICBtYWtlX29wdGlvbigiLS1jYyIsIGFjdGlvbj0ic3Rv
cmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJjYyIsIGhlbHA9IkNvbW1hLXNlcGFyYXRlZCBsaXN0
IG9mIGVtYWlsIGFkZHJlc3NlcyB0byBjYXJib24tY29weS4iKSwKLSAgICAgICAgICAgIG1ha2Vf
b3B0aW9uKCItLWNvbXBvbmVudCIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0
PSJjb21wb25lbnQiLCBoZWxwPSJDb21wb25lbnQgZm9yIHRoZSBuZXcgYnVnLiIpLAotICAgICAg
ICAgICAgbWFrZV9vcHRpb24oIi0tbm8tcHJvbXB0IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRl
c3Q9InByb21wdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IHByb21wdCBmb3IgYnVnIHRp
dGxlIGFuZCBjb21tZW50OyB1c2UgY29tbWl0IGxvZyBpbnN0ZWFkLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tbm8tcmV2aWV3IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InJl
dmlldyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IG1hcmsgdGhlIHBhdGNoIGZvciByZXZp
ZXcuIiksCi0gICAgICAgICAgICBtYWtlX29wdGlvbigiLS1yZXF1ZXN0LWNvbW1pdCIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcXVlc3RfY29tbWl0IiwgZGVmYXVsdD1GYWxzZSwgaGVs
cD0iTWFyayB0aGUgcGF0Y2ggYXMgbmVlZGluZyBhdXRvLWNvbW1pdCBhZnRlciByZXZpZXcuIiks
Ci0gICAgICAgIF0KLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiQ3JlYXRlIGEgYnVn
IGZyb20gbG9jYWwgY2hhbmdlcyBvciBsb2NhbCBjb21taXRzLiIsICJbQ09NTUlUSVNIXSIsIG9w
dGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBjcmVhdGVfYnVnX2Zyb21fY29tbWl0KHNlbGYsIG9w
dGlvbnMsIGFyZ3MsIHRvb2wpOgotICAgICAgICBjb21taXRfaWRzID0gdG9vbC5zY20oKS5jb21t
aXRfaWRzX2Zyb21fY29tbWl0aXNoX2FyZ3VtZW50cyhhcmdzKQotICAgICAgICBpZiBsZW4oY29t
bWl0X2lkcykgPiAzOgotICAgICAgICAgICAgZXJyb3IoIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0
byBjcmVhdGUgb25lIGJ1ZyB3aXRoICVzIHBhdGNoZXM/IiAlIGxlbihjb21taXRfaWRzKSkKLQot
ICAgICAgICBjb21taXRfaWQgPSBjb21taXRfaWRzWzBdCi0KLSAgICAgICAgYnVnX3RpdGxlID0g
IiIKLSAgICAgICAgY29tbWVudF90ZXh0ID0gIiIKLSAgICAgICAgaWYgb3B0aW9ucy5wcm9tcHQ6
Ci0gICAgICAgICAgICAoYnVnX3RpdGxlLCBjb21tZW50X3RleHQpID0gc2VsZi5wcm9tcHRfZm9y
X2J1Z190aXRsZV9hbmRfY29tbWVudCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21t
aXRfbWVzc2FnZSA9IHRvb2wuc2NtKCkuY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdChj
b21taXRfaWQpCi0gICAgICAgICAgICBidWdfdGl0bGUgPSBjb21taXRfbWVzc2FnZS5kZXNjcmlw
dGlvbihsc3RyaXA9VHJ1ZSwgc3RyaXBfdXJsPVRydWUpCi0gICAgICAgICAgICBjb21tZW50X3Rl
eHQgPSBjb21taXRfbWVzc2FnZS5ib2R5KGxzdHJpcD1UcnVlKQotICAgICAgICAgICAgY29tbWVu
dF90ZXh0ICs9ICItLS1cbiIKLSAgICAgICAgICAgIGNvbW1lbnRfdGV4dCArPSB0b29sLnNjbSgp
LmZpbGVzX2NoYW5nZWRfc3VtbWFyeV9mb3JfY29tbWl0KGNvbW1pdF9pZCkKLQotICAgICAgICBk
aWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2hfZnJvbV9sb2NhbF9jb21taXQoY29tbWl0X2lk
KQotICAgICAgICBkaWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9i
dWdfd2l0aF9wYXRjaCBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdAotICAgICAgICBidWdfaWQg
PSB0b29sLmJ1Z3MuY3JlYXRlX2J1Z193aXRoX3BhdGNoKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0
LCBvcHRpb25zLmNvbXBvbmVudCwgZGlmZl9maWxlLCAiUGF0Y2giLCBjYz1vcHRpb25zLmNjLCBt
YXJrX2Zvcl9yZXZpZXc9b3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1vcHRp
b25zLnJlcXVlc3RfY29tbWl0KQotCi0gICAgICAgIGlmIGJ1Z19pZCBhbmQgbGVuKGNvbW1pdF9p
ZHMpID4gMToKLSAgICAgICAgICAgIG9wdGlvbnMuYnVnX2lkID0gYnVnX2lkCi0gICAgICAgICAg
ICBvcHRpb25zLm9ic29sZXRlX3BhdGNoZXMgPSBGYWxzZQotICAgICAgICAgICAgIyBGSVhNRTog
V2Ugc2hvdWxkIHBhc3MgdGhyb3VnaCAtLW5vLWNvbW1lbnQgc3dpdGNoIGFzIHdlbGwuCi0gICAg
ICAgICAgICBQb3N0Q29tbWl0cy5leGVjdXRlKHNlbGYsIG9wdGlvbnMsIGNvbW1pdF9pZHNbMTpd
LCB0b29sKQotCi0gICAgZGVmIGNyZWF0ZV9idWdfZnJvbV9wYXRjaChzZWxmLCBvcHRpb25zLCBh
cmdzLCB0b29sKToKLSAgICAgICAgYnVnX3RpdGxlID0gIiIKLSAgICAgICAgY29tbWVudF90ZXh0
ID0gIiIKLSAgICAgICAgaWYgb3B0aW9ucy5wcm9tcHQ6Ci0gICAgICAgICAgICAoYnVnX3RpdGxl
LCBjb21tZW50X3RleHQpID0gc2VsZi5wcm9tcHRfZm9yX2J1Z190aXRsZV9hbmRfY29tbWVudCgp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9IGNvbW1pdF9tZXNz
YWdlX2Zvcl90aGlzX2NvbW1pdCh0b29sLnNjbSgpKQotICAgICAgICAgICAgYnVnX3RpdGxlID0g
Y29tbWl0X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1UcnVlKQot
ICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShsc3RyaXA9VHJ1
ZSkKLQotICAgICAgICBkaWZmID0gdG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKQotICAgICAgICBk
aWZmX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkaWZmKSAjIGNyZWF0ZV9idWdfd2l0aF9wYXRj
aCBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdAotICAgICAgICBidWdfaWQgPSB0b29sLmJ1Z3Mu
Y3JlYXRlX2J1Z193aXRoX3BhdGNoKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0LCBvcHRpb25zLmNv
bXBvbmVudCwgZGlmZl9maWxlLCAiUGF0Y2giLCBjYz1vcHRpb25zLmNjLCBtYXJrX2Zvcl9yZXZp
ZXc9b3B0aW9ucy5yZXZpZXcsIG1hcmtfZm9yX2NvbW1pdF9xdWV1ZT1vcHRpb25zLnJlcXVlc3Rf
Y29tbWl0KQotCi0gICAgZGVmIHByb21wdF9mb3JfYnVnX3RpdGxlX2FuZF9jb21tZW50KHNlbGYp
OgotICAgICAgICBidWdfdGl0bGUgPSByYXdfaW5wdXQoIkJ1ZyB0aXRsZTogIikKLSAgICAgICAg
cHJpbnQgIkJ1ZyBjb21tZW50IChoaXQgXkQgb24gYmxhbmsgbGluZSB0byBlbmQpOiIKLSAgICAg
ICAgbGluZXMgPSBzeXMuc3RkaW4ucmVhZGxpbmVzKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgc3lzLnN0ZGluLnNlZWsoMCwgb3MuU0VFS19FTkQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9y
OgotICAgICAgICAgICAgIyBDeWd3aW4gcmFpc2VzIGFuIElsbGVnYWwgU2VlayAoZXJybm8gMjkp
IGV4Y2VwdGlvbiB3aGVuIHRoZSBhYm92ZQotICAgICAgICAgICAgIyBzZWVrKCkgY2FsbCBpcyBt
YWRlLiBJZ25vcmluZyBpdCBzZWVtcyB0byBjYXVzZSBubyBoYXJtLgotICAgICAgICAgICAgIyBG
SVhNRTogRmlndXJlIG91dCBhIHdheSB0byBnZXQgYXZvaWQgdGhlIGV4Y2VwdGlvbiBpbiB0aGUg
Zmlyc3QKLSAgICAgICAgICAgICMgcGxhY2UuCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGNv
bW1lbnRfdGV4dCA9ICIiLmpvaW4obGluZXMpCi0gICAgICAgIHJldHVybiAoYnVnX3RpdGxlLCBj
b21tZW50X3RleHQpCi0KLSAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29s
KToKLSAgICAgICAgaWYgbGVuKGFyZ3MpOgotICAgICAgICAgICAgaWYgKG5vdCB0b29sLnNjbSgp
LnN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKSk6Ci0gICAgICAgICAgICAgICAgZXJyb3IoIkV4dHJh
IGFyZ3VtZW50cyBub3Qgc3VwcG9ydGVkOyBwYXRjaCBpcyB0YWtlbiBmcm9tIHdvcmtpbmcgZGly
ZWN0b3J5LiIpCi0gICAgICAgICAgICBzZWxmLmNyZWF0ZV9idWdfZnJvbV9jb21taXQob3B0aW9u
cywgYXJncywgdG9vbCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY3JlYXRlX2J1
Z19mcm9tX3BhdGNoKG9wdGlvbnMsIGFyZ3MsIHRvb2wpCi0KLQotY2xhc3MgVHJlZVN0YXR1cyhD
b21tYW5kKToKLSAgICBuYW1lID0gInRyZWUtc3RhdHVzIgotICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKLSAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiUHJpbnQgb3V0IHRoZSBzdGF0dXMg
b2YgdGhlIHdlYmtpdCBidWlsZGVycy4iKQotCi0gICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9u
cywgYXJncywgdG9vbCk6Ci0gICAgICAgIGZvciBidWlsZGVyIGluIHRvb2wuYnVpbGRib3QuYnVp
bGRlcl9zdGF0dXNlcygpOgotICAgICAgICAgICAgc3RhdHVzX3N0cmluZyA9ICJvayIgaWYgYnVp
bGRlclsiaXNfZ3JlZW4iXSBlbHNlICJGQUlMIgotICAgICAgICAgICAgcHJpbnQgIiVzIDogJXMi
ICUgKHN0YXR1c19zdHJpbmcubGp1c3QoNCksIGJ1aWxkZXJbIm5hbWUiXSkKLQotCi1jbGFzcyBB
YnN0cmFjdFF1ZXVlKENvbW1hbmQsIFdvcmtRdWV1ZURlbGVnYXRlKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgb3B0aW9ucz1bXSk6Ci0gICAgICAgIG9wdGlvbnMgKz0gWwotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tbm8tY29uZmlybSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJj
b25maXJtIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEbyBub3QgYXNrIHRoZSB1c2VyIGZvciBjb25m
aXJtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIHF1ZXVlLiAgRGFuZ2Vyb3VzISIpLAotICAgICAg
ICAgICAgbWFrZV9vcHRpb24oIi0tc3RhdHVzLWhvc3QiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0i
c3RyaW5nIiwgZGVzdD0ic3RhdHVzX2hvc3QiLCBkZWZhdWx0PVN0YXR1c0JvdC5kZWZhdWx0X2hv
c3QsIGhlbHA9Ikhvc3RuYW1lIChlLmcuIGxvY2FsaG9zdCBvciBjb21taXQud2Via2l0Lm9yZykg
d2hlcmUgc3RhdHVzIHVwZGF0ZXMgc2hvdWxkIGJlIHBvc3RlZC4iKSwKLSAgICAgICAgXQotICAg
ICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYsICJSdW4gdGhlICVzLiIgJSBzZWxmLm5hbWUsIG9w
dGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiBxdWV1ZV9sb2dfcGF0aChzZWxmKToKLSAgICAgICAg
cmV0dXJuICIlcy5sb2ciICUgc2VsZi5uYW1lCi0KLSAgICBkZWYgd29ya19sb2dzX2RpcmVjdG9y
eShzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcy1sb2dzIiAlIHNlbGYubmFtZQotCi0gICAgZGVm
IHN0YXR1c19ob3N0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zLnN0YXR1c19o
b3N0Ci0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKLSAgICAgICAgbG9nKCJDQVVU
SU9OOiAlcyB3aWxsIGRpc2NhcmQgYWxsIGxvY2FsIGNoYW5nZXMgaW4gJXMiICUgKHNlbGYubmFt
ZSwgc2VsZi50b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpKQotICAgICAgICBpZiBzZWxmLm9wdGlv
bnMuY29uZmlybToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gcmF3X2lucHV0KCJBcmUgeW91IHN1
cmU/ICBUeXBlIFwieWVzXCIgdG8gY29udGludWU6ICIpCi0gICAgICAgICAgICBpZiAocmVzcG9u
c2UgIT0gInllcyIpOgotICAgICAgICAgICAgICAgIGVycm9yKCJVc2VyIGRlY2xpbmVkLiIpCi0g
ICAgICAgIGxvZygiUnVubmluZyBXZWJLaXQgJXMuICVzIiAlIChzZWxmLm5hbWUsIGRhdGV0aW1l
Lm5vdygpLnN0cmZ0aW1lKFdvcmtRdWV1ZS5sb2dfZGF0ZV9mb3JtYXQpKSkKLQotICAgIGRlZiBz
aG91bGRfY29udGludWVfd29ya19xdWV1ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiBuZXh0X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgc2hvdWxkX3By
b2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYg
cHJvY2Vzc193b3JrX2l0ZW0oc2VsZiwgd29ya19pdGVtKToKLSAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLSAgICBkZWYgaGFu
ZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgd29ya19pdGVtLCBtZXNzYWdlKToKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJ1bl9idWd6aWxsYV90b29sKGFyZ3MpOgotICAg
ICAgICBidWd6aWxsYV90b29sX3BhdGggPSBfX2ZpbGVfXyAjIHJlLWV4ZWN1dGUgdGhpcyBzY3Jp
cHQKLSAgICAgICAgYnVnemlsbGFfdG9vbF9hcmdzID0gW2J1Z3ppbGxhX3Rvb2xfcGF0aF0gKyBh
cmdzCi0gICAgICAgIFdlYktpdExhbmRpbmdTY3JpcHRzLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChi
dWd6aWxsYV90b29sX2FyZ3MpCi0KLSAgICBkZWYgbG9nX3Byb2dyZXNzKHNlbGYsIHBhdGNoX2lk
cyk6Ci0gICAgICAgIGxvZygiJXMgaW4gJXMgWyVzXSIgJSAocGx1cmFsaXplKCJwYXRjaCIsIGxl
bihwYXRjaF9pZHMpKSwgc2VsZi5uYW1lLCAiLCAiLmpvaW4ocGF0Y2hfaWRzKSkpCi0KLSAgICBk
ZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgc2VsZi5vcHRp
b25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLnRvb2wgPSB0b29sCi0gICAgICAgIHdvcmtfcXVl
dWUgPSBXb3JrUXVldWUoc2VsZikKLSAgICAgICAgd29ya19xdWV1ZS5ydW4oKQotCi0KLWNsYXNz
IENvbW1pdFF1ZXVlKEFic3RyYWN0UXVldWUpOgotICAgIG5hbWUgPSAiY29tbWl0LXF1ZXVlIgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgQWJzdHJhY3RRdWV1ZS5fX2luaXRfXyhz
ZWxmKQotCi0gICAgZGVmIGJlZ2luX3dvcmtfcXVldWUoc2VsZik6Ci0gICAgICAgIEFic3RyYWN0
UXVldWUuYmVnaW5fd29ya19xdWV1ZShzZWxmKQotCi0gICAgZGVmIG5leHRfd29ya19pdGVtKHNl
bGYpOgotICAgICAgICBwYXRjaGVzID0gc2VsZi50b29sLmJ1Z3MuZmV0Y2hfcGF0Y2hlc19mcm9t
X2NvbW1pdF9xdWV1ZShyZWplY3RfaW52YWxpZF9wYXRjaGVzPVRydWUpCi0gICAgICAgIGlmIG5v
dCBwYXRjaGVzOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgIyBPbmx5IGJvdGhl
ciBsb2dnaW5nIGlmIHdlIGhhdmUgcGF0Y2hlcyBpbiB0aGUgcXVldWUuCi0gICAgICAgIHNlbGYu
bG9nX3Byb2dyZXNzKFtwYXRjaFsnaWQnXSBmb3IgcGF0Y2ggaW4gcGF0Y2hlc10pCi0gICAgICAg
IHJldHVybiBwYXRjaGVzWzBdCi0KLSAgICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0
ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBzZWxmLnRvb2wu
YnVpbGRib3QucmVkX2NvcmVfYnVpbGRlcnNfbmFtZXMoKQotICAgICAgICBpZiByZWRfYnVpbGRl
cnNfbmFtZXM6Ci0gICAgICAgICAgICByZWRfYnVpbGRlcnNfbmFtZXMgPSBtYXAobGFtYmRhIG5h
bWU6ICJcIiVzXCIiICUgbmFtZSwgcmVkX2J1aWxkZXJzX25hbWVzKSAjIEFkZCBxdW90ZXMgYXJv
dW5kIHRoZSBuYW1lcy4KLSAgICAgICAgICAgIHJldHVybiAoRmFsc2UsICJCdWlsZGVycyBbJXNd
IGFyZSByZWQuIFNlZSBodHRwOi8vYnVpbGQud2Via2l0Lm9yZy4iICUgIiwgIi5qb2luKHJlZF9i
dWlsZGVyc19uYW1lcyksIE5vbmUpCi0gICAgICAgIHJldHVybiAoVHJ1ZSwgIkxhbmRpbmcgcGF0
Y2ggJXMgZnJvbSBidWcgJXMuIiAlIChwYXRjaFsiaWQiXSwgcGF0Y2hbImJ1Z19pZCJdKSwgcGF0
Y2hbImJ1Z19pZCJdKQotCi0gICAgZGVmIHByb2Nlc3Nfd29ya19pdGVtKHNlbGYsIHBhdGNoKToK
LSAgICAgICAgc2VsZi5ydW5fYnVnemlsbGFfdG9vbChbImxhbmQtYXR0YWNobWVudCIsICItLWZv
cmNlLWNsZWFuIiwgIi0tbm9uLWludGVyYWN0aXZlIiwgIi0tcXVpZXQiLCBwYXRjaFsiaWQiXV0p
Ci0KLSAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgcGF0Y2gsIG1lc3NhZ2Up
OgotICAgICAgICBzZWxmLnRvb2wuYnVncy5yZWplY3RfcGF0Y2hfZnJvbV9jb21taXRfcXVldWUo
cGF0Y2hbImlkIl0sIG1lc3NhZ2UpCi0KLQotY2xhc3MgQWJzdHJhY3RUcnlRdWV1ZShBYnN0cmFj
dFF1ZXVlKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucz1bXSk6Ci0gICAgICAgIEFi
c3RyYWN0UXVldWUuX19pbml0X18oc2VsZiwgb3B0aW9ucykKLQotICAgIGRlZiBzdGF0dXNfaG9z
dChzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUgIyBGSVhNRTogQSBoYWNrIHVudGlsIHdlIGNv
bWUgdXAgd2l0aCBhIG1vcmUgZ2VuZXJpYyBzdGF0dXMgcGFnZS4KLQotICAgIGRlZiBiZWdpbl93
b3JrX3F1ZXVlKHNlbGYpOgotICAgICAgICBBYnN0cmFjdFF1ZXVlLmJlZ2luX3dvcmtfcXVldWUo
c2VsZikKLSAgICAgICAgc2VsZi5fcGF0Y2hlcyA9IFBhdGNoQ29sbGVjdGlvbihzZWxmLnRvb2wu
YnVncykKLSAgICAgICAgc2VsZi5fcGF0Y2hlcy5hZGRfcGF0Y2hlcyhzZWxmLnRvb2wuYnVncy5m
ZXRjaF9wYXRjaGVzX2Zyb21fcmV2aWV3X3F1ZXVlKGxpbWl0PTEwKSkKLQotICAgIGRlZiBuZXh0
X3dvcmtfaXRlbShzZWxmKToKLSAgICAgICAgc2VsZi5sb2dfcHJvZ3Jlc3Moc2VsZi5fcGF0Y2hl
cy5wYXRjaF9pZHMoKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGNoZXMubmV4dCgpCi0KLSAg
ICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIK
LQotICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgotCi0gICAg
ZGVmIGhhbmRsZV91bmV4cGVjdGVkX2Vycm9yKHNlbGYsIHBhdGNoLCBtZXNzYWdlKToKLSAgICAg
ICAgbG9nKG1lc3NhZ2UpCi0KLQotY2xhc3MgU3R5bGVRdWV1ZShBYnN0cmFjdFRyeVF1ZXVlKToK
LSAgICBuYW1lID0gInN0eWxlLXF1ZXVlIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAg
ICAgQWJzdHJhY3RUcnlRdWV1ZS5fX2luaXRfXyhzZWxmKQotCi0gICAgZGVmIHNob3VsZF9wcm9j
ZWVkX3dpdGhfd29ya19pdGVtKHNlbGYsIHBhdGNoKToKLSAgICAgICAgcmV0dXJuIChUcnVlLCAi
Q2hlY2tpbmcgc3R5bGUgZm9yIHBhdGNoICVzIG9uIGJ1ZyAlcy4iICUgKHBhdGNoWyJpZCJdLCBw
YXRjaFsiYnVnX2lkIl0pLCBwYXRjaFsiYnVnX2lkIl0pCi0KLSAgICBkZWYgcHJvY2Vzc193b3Jr
X2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICBzZWxmLnJ1bl9idWd6aWxsYV90b29sKFsiY2hl
Y2stc3R5bGUiLCAiLS1mb3JjZS1jbGVhbiIsIHBhdGNoWyJpZCJdXSkKLQotCi1jbGFzcyBCdWls
ZFF1ZXVlKEFic3RyYWN0VHJ5UXVldWUpOgotICAgIG5hbWUgPSAiYnVpbGQtcXVldWUiCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gV2ViS2l0UG9ydC5wb3J0X29w
dGlvbnMoKQotICAgICAgICBBYnN0cmFjdFRyeVF1ZXVlLl9faW5pdF9fKHNlbGYsIG9wdGlvbnMp
Ci0KLSAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKLSAgICAgICAgQWJzdHJhY3RUcnlR
dWV1ZS5iZWdpbl93b3JrX3F1ZXVlKHNlbGYpCi0gICAgICAgIHNlbGYucG9ydCA9IFdlYktpdFBv
cnQucG9ydChzZWxmLm9wdGlvbnMpCi0KLSAgICBkZWYgc2hvdWxkX3Byb2NlZWRfd2l0aF93b3Jr
X2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnJ1bl9i
dWd6aWxsYV90b29sKFsiYnVpbGQiLCBzZWxmLnBvcnQuZmxhZygpLCAiLS1mb3JjZS1jbGVhbiIs
ICItLXF1aWV0Il0pCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAg
IHJldHVybiAoRmFsc2UsICJVbmFibGUgdG8gcGVyZm9ybSBhIGJ1aWxkLiIsIE5vbmUpCi0gICAg
ICAgIHJldHVybiAoVHJ1ZSwgIkJ1aWxkaW5nIHBhdGNoICVzIG9uIGJ1ZyAlcy4iICUgKHBhdGNo
WyJpZCJdLCBwYXRjaFsiYnVnX2lkIl0pLCBwYXRjaFsiYnVnX2lkIl0pCi0KLSAgICBkZWYgcHJv
Y2Vzc193b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgotICAgICAgICBzZWxmLnJ1bl9idWd6aWxsYV90
b29sKFsiYnVpbGQtYXR0YWNobWVudCIsIHNlbGYucG9ydC5mbGFnKCksICItLWZvcmNlLWNsZWFu
IiwgIi0tcXVpZXQiLCAiLS1uby11cGRhdGUiLCBwYXRjaFsiaWQiXV0pCiAKK2Zyb20gbW9kdWxl
cy5jb21tYW5kcy5kb3dubG9hZCBpbXBvcnQgKgorZnJvbSBtb2R1bGVzLmNvbW1hbmRzLnF1ZXJp
ZXMgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5jb21tYW5kcy5xdWV1ZXMgaW1wb3J0ICoKK2Zyb20g
bW9kdWxlcy5jb21tYW5kcy51cGxvYWQgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5sb2dnaW5nIGlt
cG9ydCBsb2cKIAogY2xhc3MgQnVnemlsbGFUb29sKE11bHRpQ29tbWFuZFRvb2wpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy9jb21tYW5kcy9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21t
YW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjY1
YmVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1h
bmRzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBz
ZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Rvd25sb2FkLnB5IGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL2Rvd25sb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ2ZmZkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvY29tbWFuZHMvZG93bmxvYWQucHkKQEAgLTAsMCArMSwzOTggQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgRklYTUU6IFRyaW0gZG93
biB0aGlzIGltcG9ydCBsaXN0IG9uY2Ugd2UgaGF2ZSB1bml0IHRlc3RzLgoraW1wb3J0IG9zCitp
bXBvcnQgcmUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aW1lCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEK
K2Zyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCisKK2Zyb20gbW9kdWxlcy5idWd6aWxs
YSBpbXBvcnQgQnVnemlsbGEsIHBhcnNlX2J1Z19pZAorZnJvbSBtb2R1bGVzLmJ1aWxkYm90IGlt
cG9ydCBCdWlsZEJvdAorZnJvbSBtb2R1bGVzLmNoYW5nZWxvZ3MgaW1wb3J0IENoYW5nZUxvZwor
ZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0
Citmcm9tIG1vZHVsZXMuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCitmcm9tIG1vZHVsZXMubGFu
ZGluZ3NlcXVlbmNlIGltcG9ydCBMYW5kaW5nU2VxdWVuY2UsIENvbmRpdGlvbmFsTGFuZGluZ1Nl
cXVlbmNlCitmcm9tIG1vZHVsZXMubG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZywgdGVlCitmcm9t
IG1vZHVsZXMubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgTXVsdGlDb21tYW5kVG9vbCwgQ29tbWFu
ZAorZnJvbSBtb2R1bGVzLnBhdGNoY29sbGVjdGlvbiBpbXBvcnQgUGF0Y2hDb2xsZWN0aW9uCitm
cm9tIG1vZHVsZXMuc2NtIGltcG9ydCBDb21taXRNZXNzYWdlLCBkZXRlY3Rfc2NtX3N5c3RlbSwg
U2NyaXB0RXJyb3IsIENoZWNrb3V0TmVlZHNVcGRhdGUKK2Zyb20gbW9kdWxlcy5zdGF0dXNib3Qg
aW1wb3J0IFN0YXR1c0JvdAorZnJvbSBtb2R1bGVzLndlYmtpdGxhbmRpbmdzY3JpcHRzIGltcG9y
dCBXZWJLaXRMYW5kaW5nU2NyaXB0cywgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0Citm
cm9tIG1vZHVsZXMud2Via2l0cG9ydCBpbXBvcnQgV2ViS2l0UG9ydAorZnJvbSBtb2R1bGVzLndv
cmtxdWV1ZSBpbXBvcnQgV29ya1F1ZXVlLCBXb3JrUXVldWVEZWxlZ2F0ZQorCitjbGFzcyBDaGVj
a1N0eWxlKENvbW1hbmQpOgorICAgIG5hbWUgPSAiY2hlY2stc3R5bGUiCisgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuY2xlYW5p
bmdfb3B0aW9ucygpCisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIlJ1bnMgY2hlY2st
d2Via2l0LXN0eWxlIG9uIHRoZSBzcGVjaWZpZWQgYXR0YWNobWVudCIsICJBVFRBQ0hNRU5UX0lE
Iiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNoZWNrX3N0
eWxlKGNscywgcGF0Y2gsIG9wdGlvbnMsIHRvb2wpOgorICAgICAgICB0b29sLnNjbSgpLnVwZGF0
ZV93ZWJraXQoKQorICAgICAgICBsb2coIkNoZWNraW5nIHN0eWxlIGZvciBwYXRjaCAlcyBmcm9t
IGJ1ZyAlcy4iICUgKHBhdGNoWyJpZCJdLCBwYXRjaFsiYnVnX2lkIl0pKQorICAgICAgICB0cnk6
CisgICAgICAgICAgICAjIEZJWE1FOiBjaGVjay13ZWJraXQtc3R5bGUgc2hvdWxkbid0IHJlYWxs
eSBoYXZlIHRvIGFwcGx5IHRoZSBwYXRjaCB0byBjaGVjayB0aGUgc3R5bGUuCisgICAgICAgICAg
ICB0b29sLnNjbSgpLmFwcGx5X3BhdGNoKHBhdGNoKQorICAgICAgICAgICAgV2ViS2l0TGFuZGlu
Z1NjcmlwdHMucnVuX3dlYmtpdF9zY3JpcHQoImNoZWNrLXdlYmtpdC1zdHlsZSIpCisgICAgICAg
IGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgIGxvZygiUGF0Y2ggJXMgZnJvbSBi
dWcgJXMgZmFpbGVkIHRvIGFwcGx5IGFuZCBjaGVjayBzdHlsZS4iICUgKHBhdGNoWyJpZCJdLCBw
YXRjaFsiYnVnX2lkIl0pKQorICAgICAgICAgICAgbG9nKGUub3V0cHV0KQorCisgICAgICAgICMg
VGhpcyBpcyBzYWZlIGJlY2F1c2UgaW4gb3JkZXIgdG8gZ2V0IGhlcmUgdGhlIHdvcmtpbmcgZGly
ZWN0b3J5IGhhZCB0byBiZQorICAgICAgICAjIGNsZWFuIGF0IHRoZSBiZWdpbm5pbmcuICBDbGVh
biBpdCBvdXQgYWdhaW4gYmVmb3JlIHdlIGV4aXQuCisgICAgICAgIHRvb2wuc2NtKCkuZW5zdXJl
X2NsZWFuX3dvcmtpbmdfZGlyZWN0b3J5KGZvcmNlX2NsZWFuPVRydWUpCisKKyAgICBkZWYgZXhl
Y3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgYXR0YWNobWVudF9pZCA9
IGFyZ3NbMF0KKyAgICAgICAgYXR0YWNobWVudCA9IHRvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50
KGF0dGFjaG1lbnRfaWQpCisKKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMucHJlcGFyZV9j
bGVhbl93b3JraW5nX2RpcmVjdG9yeSh0b29sLnNjbSgpLCBvcHRpb25zKQorICAgICAgICBzZWxm
LmNoZWNrX3N0eWxlKGF0dGFjaG1lbnQsIG9wdGlvbnMsIHRvb2wpCisKKworY2xhc3MgQnVpbGRT
ZXF1ZW5jZShDb25kaXRpb25hbExhbmRpbmdTZXF1ZW5jZSk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG9wdGlvbnMsIHRvb2wpOgorICAgICAgICBDb25kaXRpb25hbExhbmRpbmdTZXF1ZW5jZS5f
X2luaXRfXyhzZWxmLCBOb25lLCBvcHRpb25zLCB0b29sKQorCisgICAgZGVmIHJ1bihzZWxmKToK
KyAgICAgICAgc2VsZi5jbGVhbigpCisgICAgICAgIHNlbGYudXBkYXRlKCkKKyAgICAgICAgc2Vs
Zi5idWlsZCgpCisKKworY2xhc3MgQnVpbGQoQ29tbWFuZCk6CisgICAgbmFtZSA9ICJidWlsZCIK
KyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBXZWJLaXRMYW5kaW5n
U2NyaXB0cy5jbGVhbmluZ19vcHRpb25zKCkKKyAgICAgICAgb3B0aW9ucyArPSBXZWJLaXRMYW5k
aW5nU2NyaXB0cy5idWlsZF9vcHRpb25zKCkKKyAgICAgICAgb3B0aW9ucyArPSBXZWJLaXRMYW5k
aW5nU2NyaXB0cy5sYW5kX29wdGlvbnMoKQorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYs
ICJVcGRhdGVzIHdvcmtpbmcgY29weSBhbmQgZG9lcyBhIGJ1aWxkLiIsICIiLCBvcHRpb25zKQor
CisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIHNl
cXVlbmNlID0gQnVpbGRTZXF1ZW5jZShvcHRpb25zLCB0b29sKQorICAgICAgICBzZXF1ZW5jZS5y
dW5fYW5kX2hhbmRsZV9lcnJvcnMoKQorCisKK2NsYXNzIEFwcGx5QXR0YWNobWVudChDb21tYW5k
KToKKyAgICBuYW1lID0gImFwcGx5LWF0dGFjaG1lbnQiCisgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgorICAgICAgICBvcHRpb25zID0gV2ViS2l0QXBwbHlpbmdTY3JpcHRzLmFwcGx5X29wdGlvbnMo
KSArIFdlYktpdExhbmRpbmdTY3JpcHRzLmNsZWFuaW5nX29wdGlvbnMoKQorICAgICAgICBDb21t
YW5kLl9faW5pdF9fKHNlbGYsICJBcHBsaWVzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIGxvY2FsIHdv
cmtpbmcgZGlyZWN0b3J5LiIsICJBVFRBQ0hNRU5UX0lEIiwgb3B0aW9ucz1vcHRpb25zKQorCisg
ICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIFdlYktp
dEFwcGx5aW5nU2NyaXB0cy5zZXR1cF9mb3JfcGF0Y2hfYXBwbHkodG9vbC5zY20oKSwgb3B0aW9u
cykKKyAgICAgICAgYXR0YWNobWVudF9pZCA9IGFyZ3NbMF0KKyAgICAgICAgYXR0YWNobWVudCA9
IHRvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KGF0dGFjaG1lbnRfaWQpCisgICAgICAgIFdlYktp
dEFwcGx5aW5nU2NyaXB0cy5hcHBseV9wYXRjaGVzX3dpdGhfb3B0aW9ucyh0b29sLnNjbSgpLCBb
YXR0YWNobWVudF0sIG9wdGlvbnMpCisKKworY2xhc3MgQXBwbHlQYXRjaGVzKENvbW1hbmQpOgor
ICAgIG5hbWUgPSAiYXBwbHktcGF0Y2hlcyIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIG9wdGlvbnMgPSBXZWJLaXRBcHBseWluZ1NjcmlwdHMuYXBwbHlfb3B0aW9ucygpICsgV2Vi
S2l0TGFuZGluZ1NjcmlwdHMuY2xlYW5pbmdfb3B0aW9ucygpCisgICAgICAgIENvbW1hbmQuX19p
bml0X18oc2VsZiwgIkFwcGxpZXMgYWxsIHBhdGNoZXMgb24gYSBidWcgdG8gdGhlIGxvY2FsIHdv
cmtpbmcgZGlyZWN0b3J5LiIsICJCVUdJRCIsIG9wdGlvbnM9b3B0aW9ucykKKworICAgIGRlZiBl
eGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBXZWJLaXRBcHBseWlu
Z1NjcmlwdHMuc2V0dXBfZm9yX3BhdGNoX2FwcGx5KHRvb2wuc2NtKCksIG9wdGlvbnMpCisgICAg
ICAgIGJ1Z19pZCA9IGFyZ3NbMF0KKyAgICAgICAgcGF0Y2hlcyA9IHRvb2wuYnVncy5mZXRjaF9y
ZXZpZXdlZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKKyAgICAgICAgV2ViS2l0QXBwbHlpbmdT
Y3JpcHRzLmFwcGx5X3BhdGNoZXNfd2l0aF9vcHRpb25zKHRvb2wuc2NtKCksIHBhdGNoZXMsIG9w
dGlvbnMpCisKKworY2xhc3MgV2ViS2l0QXBwbHlpbmdTY3JpcHRzOgorICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgYXBwbHlfb3B0aW9ucygpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tbm8tdXBkYXRlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9
InVwZGF0ZSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG9uJ3QgdXBkYXRlIHRoZSB3b3JraW5nIGRp
cmVjdG9yeSBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlcyIpLAorICAgICAgICAgICAgbWFrZV9vcHRp
b24oIi0tbG9jYWwtY29tbWl0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibG9jYWxfY29t
bWl0IiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iTWFrZSBhIGxvY2FsIGNvbW1pdCBmb3IgZWFjaCBh
cHBsaWVkIHBhdGNoIiksCisgICAgICAgIF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
c2V0dXBfZm9yX3BhdGNoX2FwcGx5KHNjbSwgb3B0aW9ucyk6CisgICAgICAgIFdlYktpdExhbmRp
bmdTY3JpcHRzLnByZXBhcmVfY2xlYW5fd29ya2luZ19kaXJlY3Rvcnkoc2NtLCBvcHRpb25zLCBh
bGxvd19sb2NhbF9jb21taXRzPVRydWUpCisgICAgICAgIGlmIG9wdGlvbnMudXBkYXRlOgorICAg
ICAgICAgICAgc2NtLnVwZGF0ZV93ZWJraXQoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBhcHBseV9wYXRjaGVzX3dpdGhfb3B0aW9ucyhzY20sIHBhdGNoZXMsIG9wdGlvbnMpOgorICAg
ICAgICBpZiBvcHRpb25zLmxvY2FsX2NvbW1pdCBhbmQgbm90IHNjbS5zdXBwb3J0c19sb2NhbF9j
b21taXRzKCk6CisgICAgICAgICAgICBlcnJvcigiLS1sb2NhbC1jb21taXQgcGFzc2VkLCBidXQg
JXMgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbCBjb21taXRzIiAlIHNjbS5kaXNwbGF5X25hbWUoKSkK
KworICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgIGxvZygiQXBwbHlp
bmcgYXR0YWNobWVudCAlcyBmcm9tIGJ1ZyAlcyIgJSAocGF0Y2hbImlkIl0sIHBhdGNoWyJidWdf
aWQiXSkpCisgICAgICAgICAgICBzY20uYXBwbHlfcGF0Y2gocGF0Y2gpCisgICAgICAgICAgICBp
ZiBvcHRpb25zLmxvY2FsX2NvbW1pdDoKKyAgICAgICAgICAgICAgICBjb21taXRfbWVzc2FnZSA9
IGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdChzY20pCisgICAgICAgICAgICAgICAgc2Nt
LmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkgb3Ig
cGF0Y2hbIm5hbWUiXSkKKworCitjbGFzcyBMYW5kRGlmZlNlcXVlbmNlKENvbmRpdGlvbmFsTGFu
ZGluZ1NlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2gsIG9wdGlvbnMsIHRv
b2wpOgorICAgICAgICBDb25kaXRpb25hbExhbmRpbmdTZXF1ZW5jZS5fX2luaXRfXyhzZWxmLCBw
YXRjaCwgb3B0aW9ucywgdG9vbCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYu
YnVpbGQoKQorICAgICAgICBzZWxmLnRlc3QoKQorICAgICAgICBjb21taXRfbG9nID0gc2VsZi5j
b21taXQoKQorICAgICAgICBzZWxmLmNsb3NlX2J1Zyhjb21taXRfbG9nKQorCisgICAgZGVmIGNs
b3NlX2J1ZyhzZWxmLCBjb21taXRfbG9nKToKKyAgICAgICAgY29tbWVudF90ZXN0ID0gYnVnX2Nv
bW1lbnRfZnJvbV9jb21taXRfdGV4dChzZWxmLl90b29sLnNjbSgpLCBjb21taXRfbG9nKQorICAg
ICAgICBidWdfaWQgPSBzZWxmLl9wYXRjaFsiYnVnX2lkIl0KKyAgICAgICAgaWYgYnVnX2lkOgor
ICAgICAgICAgICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQorICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5jbG9zZV9idWc6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5i
dWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsIGNvbW1lbnRfdGVzdCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5IHRv
IGZpZ3VyZSBvdXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCisgICAgICAgICAgICAgICAgIyB0
byB0aGUgYnVnLCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCisgICAgICAgICAgICAgICAgc2VsZi5f
dG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoYnVnX2lkLCBjb21tZW50X3Rlc3QpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBsb2coY29tbWVudF90ZXN0KQorICAgICAgICAgICAgbG9n
KCJObyBidWcgaWQgcHJvdmlkZWQuIikKKworCitjbGFzcyBMYW5kRGlmZihDb21tYW5kKToKKyAg
ICBuYW1lID0gImxhbmQtZGlmZiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9w
dGlvbnMgPSBbCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLXIiLCAiLS1yZXZpZXdlciIsIGFj
dGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJyZXZpZXdlciIsIGhlbHA9IlVwZGF0
ZSBDaGFuZ2VMb2dzIHRvIHNheSBSZXZpZXdlZCBieSBSRVZJRVdFUi4iKSwKKyAgICAgICAgXQor
ICAgICAgICBvcHRpb25zICs9IFdlYktpdExhbmRpbmdTY3JpcHRzLmJ1aWxkX29wdGlvbnMoKQor
ICAgICAgICBvcHRpb25zICs9IFdlYktpdExhbmRpbmdTY3JpcHRzLmxhbmRfb3B0aW9ucygpCisg
ICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIkxhbmRzIHRoZSBjdXJyZW50IHdvcmtpbmcg
ZGlyZWN0b3J5IGRpZmYgYW5kIHVwZGF0ZXMgdGhlIGJ1ZyBpZiBwcm92aWRlZC4iLCAiW0JVR0lE
XSIsIG9wdGlvbnM9b3B0aW9ucykKKworICAgIGRlZiBndWVzc19yZXZpZXdlcl9mcm9tX2J1Zyhz
ZWxmLCBidWdzLCBidWdfaWQpOgorICAgICAgICBwYXRjaGVzID0gYnVncy5mZXRjaF9yZXZpZXdl
ZF9wYXRjaGVzX2Zyb21fYnVnKGJ1Z19pZCkKKyAgICAgICAgaWYgbGVuKHBhdGNoZXMpICE9IDE6
CisgICAgICAgICAgICBsb2coIiVzIG9uIGJ1ZyAlcywgY2Fubm90IGluZmVyIHJldmlld2VyLiIg
JSAocGx1cmFsaXplKCJyZXZpZXdlZCBwYXRjaCIsIGxlbihwYXRjaGVzKSksIGJ1Z19pZCkpCisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBwYXRjaCA9IHBhdGNoZXNbMF0KKyAgICAg
ICAgcmV2aWV3ZXIgPSBwYXRjaFsicmV2aWV3ZXIiXQorICAgICAgICBsb2coIkd1ZXNzaW5nIFwi
JXNcIiBhcyByZXZpZXdlciBmcm9tIGF0dGFjaG1lbnQgJXMgb24gYnVnICVzLiIgJSAocmV2aWV3
ZXIsIHBhdGNoWyJpZCJdLCBidWdfaWQpKQorICAgICAgICByZXR1cm4gcmV2aWV3ZXIKKworICAg
IGRlZiB1cGRhdGVfY2hhbmdlbG9nc193aXRoX3Jldmlld2VyKHNlbGYsIHJldmlld2VyLCBidWdf
aWQsIHRvb2wpOgorICAgICAgICBpZiBub3QgcmV2aWV3ZXI6CisgICAgICAgICAgICBpZiBub3Qg
YnVnX2lkOgorICAgICAgICAgICAgICAgIGxvZygiTm8gYnVnIGlkIHByb3ZpZGVkIGFuZCAtLXJl
dmlld2VyPSBub3QgcHJvdmlkZWQuICBOb3QgdXBkYXRpbmcgQ2hhbmdlTG9ncyB3aXRoIHJldmll
d2VyLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXZpZXdlciA9IHNl
bGYuZ3Vlc3NfcmV2aWV3ZXJfZnJvbV9idWcodG9vbC5idWdzLCBidWdfaWQpCisKKyAgICAgICAg
aWYgbm90IHJldmlld2VyOgorICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gZ3Vlc3MgcmV2aWV3
ZXIgZnJvbSBidWcgJXMgYW5kIC0tcmV2aWV3ZXI9IG5vdCBwcm92aWRlZC4gIE5vdCB1cGRhdGlu
ZyBDaGFuZ2VMb2dzIHdpdGggcmV2aWV3ZXIuIiAlIGJ1Z19pZCkKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiB0b29sLnNjbSgpLm1vZGlmaWVkX2No
YW5nZWxvZ3MoKToKKyAgICAgICAgICAgIENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkuc2V0X3Jl
dmlld2VyKHJldmlld2VyKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywg
dG9vbCk6CisgICAgICAgIGJ1Z19pZCA9IChhcmdzIGFuZCBhcmdzWzBdKSBvciBwYXJzZV9idWdf
aWQodG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKSkKKworICAgICAgICBXZWJLaXRMYW5kaW5nU2Ny
aXB0cy5lbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKHRvb2wuYnVpbGRib3QsIG9wdGlvbnMpCisK
KyAgICAgICAgb3MuY2hkaXIodG9vbC5zY20oKS5jaGVja291dF9yb290KQorICAgICAgICBzZWxm
LnVwZGF0ZV9jaGFuZ2Vsb2dzX3dpdGhfcmV2aWV3ZXIob3B0aW9ucy5yZXZpZXdlciwgYnVnX2lk
LCB0b29sKQorCisgICAgICAgIGZha2VfcGF0Y2ggPSB7CisgICAgICAgICAgICAiaWQiOiBOb25l
LAorICAgICAgICAgICAgImJ1Z19pZCI6IGJ1Z19pZAorICAgICAgICB9CisKKyAgICAgICAgc2Vx
dWVuY2UgPSBMYW5kRGlmZlNlcXVlbmNlKGZha2VfcGF0Y2gsIG9wdGlvbnMsIHRvb2wpCisgICAg
ICAgIHNlcXVlbmNlLnJ1bigpCisKKworY2xhc3MgQWJzdHJhY3RQYXRjaFByb2Nlc3NpbmdDb21t
YW5kKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWxwX3RleHQsIGFyZ3NfZGVz
Y3JpcHRpb24sIG9wdGlvbnMpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYsIGhlbHBf
dGV4dCwgYXJnc19kZXNjcmlwdGlvbiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIF9mZXRj
aF9saXN0X29mX3BhdGNoZXNfdG9fcHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToK
KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBs
ZW1lbnQiCisKKyAgICBkZWYgX3ByZXBhcmVfdG9fcHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdz
LCB0b29sKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMg
bXVzdCBpbXBsZW1lbnQiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jb2xsZWN0X3Bh
dGNoZXNfYnlfYnVnKHBhdGNoZXMpOgorICAgICAgICBidWdzX3RvX3BhdGNoZXMgPSB7fQorICAg
ICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgIGJ1Z19pZCA9IHBhdGNoWyJi
dWdfaWQiXQorICAgICAgICAgICAgYnVnc190b19wYXRjaGVzW2J1Z19pZF0gPSBidWdzX3RvX3Bh
dGNoZXMuZ2V0KGJ1Z19pZCwgW10pLmFwcGVuZChwYXRjaCkKKyAgICAgICAgcmV0dXJuIGJ1Z3Nf
dG9fcGF0Y2hlcworCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6
CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgZXJyb3IoIiVzIHJlcXVpcmVkIiAl
IHNlbGYuYXJndW1lbnRfbmFtZXMpCisKKyAgICAgICAgc2VsZi5fcHJlcGFyZV90b19wcm9jZXNz
KG9wdGlvbnMsIGFyZ3MsIHRvb2wpCisgICAgICAgIHBhdGNoZXMgPSBzZWxmLl9mZXRjaF9saXN0
X29mX3BhdGNoZXNfdG9fcHJvY2VzcyhvcHRpb25zLCBhcmdzLCB0b29sKQorCisgICAgICAgICMg
SXQncyBuaWNlIHRvIHByaW50IG91dCB0b3RhbCBzdGF0aXN0aWNzLgorICAgICAgICBidWdzX3Rv
X3BhdGNoZXMgPSBzZWxmLl9jb2xsZWN0X3BhdGNoZXNfYnlfYnVnKHBhdGNoZXMpCisgICAgICAg
IGxvZygiUHJvY2Vzc2luZyAlcyBmcm9tICVzLiIgJSAocGx1cmFsaXplKCJwYXRjaCIsIGxlbihw
YXRjaGVzKSksIHBsdXJhbGl6ZSgiYnVnIiwgbGVuKGJ1Z3NfdG9fcGF0Y2hlcykpKSkKKworICAg
ICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfcGF0
Y2gocGF0Y2gsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpCisKKworY2xhc3MgQnVpbGRBdHRhY2htZW50
U2VxdWVuY2UoTGFuZGluZ1NlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2gs
IG9wdGlvbnMsIHRvb2wpOgorICAgICAgICBMYW5kaW5nU2VxdWVuY2UuX19pbml0X18oc2VsZiwg
cGF0Y2gsIG9wdGlvbnMsIHRvb2wpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxm
LmNsZWFuKCkKKyAgICAgICAgc2VsZi51cGRhdGUoKQorICAgICAgICBzZWxmLmFwcGx5X3BhdGNo
KCkKKyAgICAgICAgc2VsZi5idWlsZCgpCisKKworY2xhc3MgQnVpbGRBdHRhY2htZW50KEFic3Ry
YWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZCk6CisgICAgbmFtZSA9ICJidWlsZC1hdHRhY2htZW50
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFdlYktpdExhbmRp
bmdTY3JpcHRzLmNsZWFuaW5nX29wdGlvbnMoKQorICAgICAgICBvcHRpb25zICs9IFdlYktpdExh
bmRpbmdTY3JpcHRzLmJ1aWxkX29wdGlvbnMoKQorICAgICAgICBBYnN0cmFjdFBhdGNoUHJvY2Vz
c2luZ0NvbW1hbmQuX19pbml0X18oc2VsZiwgIkJ1aWxkcyBwYXRjaGVzIGZyb20gYnVnemlsbGEi
LCAiQVRUQUNITUVOVF9JRCBbQVRUQUNITUVOVF9JRFNdIiwgb3B0aW9ucykKKworICAgIGRlZiBf
ZmV0Y2hfbGlzdF9vZl9wYXRjaGVzX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9v
bCk6CisgICAgICAgIHJldHVybiBtYXAobGFtYmRhIHBhdGNoX2lkOiB0b29sLmJ1Z3MuZmV0Y2hf
YXR0YWNobWVudChwYXRjaF9pZCksIGFyZ3MpCisKKyAgICBkZWYgX3ByZXBhcmVfdG9fcHJvY2Vz
cyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgIyBDaGVjayB0aGUgdHJlZSBz
dGF0dXMgZmlyc3Qgc28gd2UgY2FuIGZhaWwgZWFybHkuCisgICAgICAgIFdlYktpdExhbmRpbmdT
Y3JpcHRzLmVuc3VyZV9idWlsZGVyc19hcmVfZ3JlZW4odG9vbC5idWlsZGJvdCwgb3B0aW9ucykK
KworICAgIGRlZiBfcHJvY2Vzc19wYXRjaChzZWxmLCBwYXRjaCwgb3B0aW9ucywgYXJncywgdG9v
bCk6CisgICAgICAgIHNlcXVlbmNlID0gQnVpbGRBdHRhY2htZW50U2VxdWVuY2UocGF0Y2gsIG9w
dGlvbnMsIHRvb2wpCisgICAgICAgIHNlcXVlbmNlLnJ1bl9hbmRfaGFuZGxlX2Vycm9ycygpCisK
KworY2xhc3MgQWJzdHJhY3RQYXRjaExhbmRpbmdDb21tYW5kKEFic3RyYWN0UGF0Y2hQcm9jZXNz
aW5nQ29tbWFuZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlbHBfdGV4dCwgYXJnc19kZXNj
cmlwdGlvbik6CisgICAgICAgIG9wdGlvbnMgPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5jbGVhbmlu
Z19vcHRpb25zKCkKKyAgICAgICAgb3B0aW9ucyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWls
ZF9vcHRpb25zKCkKKyAgICAgICAgb3B0aW9ucyArPSBXZWJLaXRMYW5kaW5nU2NyaXB0cy5sYW5k
X29wdGlvbnMoKQorICAgICAgICBBYnN0cmFjdFBhdGNoUHJvY2Vzc2luZ0NvbW1hbmQuX19pbml0
X18oc2VsZiwgaGVscF90ZXh0LCBhcmdzX2Rlc2NyaXB0aW9uLCBvcHRpb25zKQorCisgICAgZGVm
IF9wcmVwYXJlX3RvX3Byb2Nlc3Moc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAg
ICMgQ2hlY2sgdGhlIHRyZWUgc3RhdHVzIGZpcnN0IHNvIHdlIGNhbiBmYWlsIGVhcmx5LgorICAg
ICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0cy5lbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKHRvb2wu
YnVpbGRib3QsIG9wdGlvbnMpCisKKyAgICBkZWYgX3Byb2Nlc3NfcGF0Y2goc2VsZiwgcGF0Y2gs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBzZXF1ZW5jZSA9IENvbmRpdGlvbmFsTGFu
ZGluZ1NlcXVlbmNlKHBhdGNoLCBvcHRpb25zLCB0b29sKQorICAgICAgICBzZXF1ZW5jZS5ydW5f
YW5kX2hhbmRsZV9lcnJvcnMoKQorCisKK2NsYXNzIExhbmRBdHRhY2htZW50KEFic3RyYWN0UGF0
Y2hMYW5kaW5nQ29tbWFuZCk6CisgICAgbmFtZSA9ICJsYW5kLWF0dGFjaG1lbnQiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBBYnN0cmFjdFBhdGNoTGFuZGluZ0NvbW1hbmQuX19p
bml0X18oc2VsZiwgIkxhbmRzIHBhdGNoZXMgZnJvbSBidWd6aWxsYSwgb3B0aW9uYWxseSBidWls
ZGluZyBhbmQgdGVzdGluZyB0aGVtIGZpcnN0IiwgIkFUVEFDSE1FTlRfSUQgW0FUVEFDSE1FTlRf
SURTXSIpCisKKyAgICBkZWYgX2ZldGNoX2xpc3Rfb2ZfcGF0Y2hlc190b19wcm9jZXNzKHNlbGYs
IG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSBwYXRjaF9p
ZDogdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQocGF0Y2hfaWQpLCBhcmdzKQorCisKK2NsYXNz
IExhbmRQYXRjaGVzKEFic3RyYWN0UGF0Y2hMYW5kaW5nQ29tbWFuZCk6CisgICAgbmFtZSA9ICJs
YW5kLXBhdGNoZXMiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBBYnN0cmFjdFBh
dGNoTGFuZGluZ0NvbW1hbmQuX19pbml0X18oc2VsZiwgIkxhbmRzIGFsbCBwYXRjaGVzIG9uIHRo
ZSBnaXZlbiBidWdzLCBvcHRpb25hbGx5IGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIHRoZW0gZmlyc3Qi
LCAiQlVHSUQgW0JVR0lEU10iKQorCisgICAgZGVmIF9mZXRjaF9saXN0X29mX3BhdGNoZXNfdG9f
cHJvY2VzcyhzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgYWxsX3BhdGNoZXMg
PSBbXQorICAgICAgICBmb3IgYnVnX2lkIGluIGFyZ3M6CisgICAgICAgICAgICBwYXRjaGVzID0g
dG9vbC5idWdzLmZldGNoX3Jldmlld2VkX3BhdGNoZXNfZnJvbV9idWcoYnVnX2lkKQorICAgICAg
ICAgICAgbG9nKCIlcyBmb3VuZCBvbiBidWcgJXMuIiAlIChwbHVyYWxpemUoInJldmlld2VkIHBh
dGNoIiwgbGVuKHBhdGNoZXMpKSwgYnVnX2lkKSkKKyAgICAgICAgICAgIGFsbF9wYXRjaGVzICs9
IHBhdGNoZXMKKyAgICAgICAgcmV0dXJuIGFsbF9wYXRjaGVzCisKKworY2xhc3MgUm9sbG91dChD
b21tYW5kKToKKyAgICBuYW1lID0gInJvbGxvdXQiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor
ICAgICAgICBvcHRpb25zID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuY2xlYW5pbmdfb3B0aW9ucygp
CisgICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuYnVpbGRfb3B0aW9ucygp
CisgICAgICAgIG9wdGlvbnMgKz0gV2ViS2l0TGFuZGluZ1NjcmlwdHMubGFuZF9vcHRpb25zKCkK
KyAgICAgICAgb3B0aW9ucy5hcHBlbmQobWFrZV9vcHRpb24oIi0tY29tcGxldGUtcm9sbG91dCIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImNvbXBsZXRlX3JvbGxvdXQiLCBoZWxwPSJFeHBl
cmltZW50YWwgc3VwcG9ydCBmb3IgY29tcGxldGUgdW5zdXBlcnZpc2VkIHJvbGxvdXRzLCBpbmNs
dWRpbmcgcmUtb3BlbmluZyB0aGUgYnVnLiAgTm90IHJlY29tbWVuZGVkLiIpKQorICAgICAgICBD
b21tYW5kLl9faW5pdF9fKHNlbGYsICJSZXZlcnRzIHRoZSBnaXZlbiByZXZpc2lvbiBhbmQgY29t
bWl0cyB0aGUgcmV2ZXJ0IGFuZCByZS1vcGVucyB0aGUgb3JpZ2luYWwgYnVnLiIsICJSRVZJU0lP
TiBbQlVHSURdIiwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfY3JlYXRlX2NoYW5nZWxvZ3NfZm9yX3JldmVydChzY20sIHJldmlzaW9uKToKKyAgICAgICAg
IyBGaXJzdCwgZGlzY2FyZCB0aGUgQ2hhbmdlTG9nIGNoYW5nZXMgZnJvbSB0aGUgcm9sbG91dC4K
KyAgICAgICAgY2hhbmdlbG9nX3BhdGhzID0gc2NtLm1vZGlmaWVkX2NoYW5nZWxvZ3MoKQorICAg
ICAgICBzY20ucmV2ZXJ0X2ZpbGVzKGNoYW5nZWxvZ19wYXRocykKKworICAgICAgICAjIFNlY29u
ZCwgbWFrZSBuZXcgQ2hhbmdlTG9nIGVudHJpZXMgZm9yIHRoaXMgcm9sbG91dC4KKyAgICAgICAg
IyBUaGlzIGNvdWxkIG1vdmUgdG8gcHJlcGFyZS1DaGFuZ2VMb2cgYnkgYWRkaW5nIGEgLS1yZXZl
cnQ9IG9wdGlvbi4KKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMucnVuX3dlYmtpdF9zY3Jp
cHQoInByZXBhcmUtQ2hhbmdlTG9nIikKKyAgICAgICAgZm9yIGNoYW5nZWxvZ19wYXRoIGluIGNo
YW5nZWxvZ19wYXRoczoKKyAgICAgICAgICAgIENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkudXBk
YXRlX2Zvcl9yZXZlcnQocmV2aXNpb24pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9w
YXJzZV9idWdfaWRfZnJvbV9yZXZpc2lvbl9kaWZmKHRvb2wsIHJldmlzaW9uKToKKyAgICAgICAg
b3JpZ2luYWxfZGlmZiA9IHRvb2wuc2NtKCkuZGlmZl9mb3JfcmV2aXNpb24ocmV2aXNpb24pCisg
ICAgICAgIHJldHVybiBwYXJzZV9idWdfaWQob3JpZ2luYWxfZGlmZikKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgX3Jlb3Blbl9idWdfYWZ0ZXJfcm9sbG91dCh0b29sLCBidWdfaWQsIGNv
bW1lbnRfdGV4dCk6CisgICAgICAgIGlmIGJ1Z19pZDoKKyAgICAgICAgICAgIHRvb2wuYnVncy5y
ZW9wZW5fYnVnKGJ1Z19pZCwgY29tbWVudF90ZXh0KQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbG9nKGNvbW1lbnRfdGV4dCkKKyAgICAgICAgICAgIGxvZygiTm8gYnVncyB3ZXJlIHVwZGF0
ZWQgb3IgcmUtb3BlbmVkIHRvIHJlZmxlY3QgdGhpcyByb2xsb3V0LiIpCisKKyAgICBkZWYgZXhl
Y3V0ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgaWYgbm90IGFyZ3M6Cisg
ICAgICAgICAgICBlcnJvcigiUkVWSVNJT04gaXMgcmVxdWlyZWQsIHNlZSAtLWhlbHAuIikKKyAg
ICAgICAgcmV2aXNpb24gPSBhcmdzWzBdCisgICAgICAgIGJ1Z19pZCA9IHNlbGYuX3BhcnNlX2J1
Z19pZF9mcm9tX3JldmlzaW9uX2RpZmYodG9vbCwgcmV2aXNpb24pCisgICAgICAgIGlmIG9wdGlv
bnMuY29tcGxldGVfcm9sbG91dDoKKyAgICAgICAgICAgIGlmIGJ1Z19pZDoKKyAgICAgICAgICAg
ICAgICBsb2coIldpbGwgcmUtb3BlbiBidWcgJXMgYWZ0ZXIgcm9sbG91dC4iICUgYnVnX2lkKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2coIkZhaWxlZCB0byBwYXJzZSBi
dWcgbnVtYmVyIGZyb20gZGlmZi4gIE5vIGJ1Z3Mgd2lsbCBiZSB1cGRhdGVkL3Jlb3BlbmVkIGFm
dGVyIHRoZSByb2xsb3V0LiIpCisKKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMucHJlcGFy
ZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeSh0b29sLnNjbSgpLCBvcHRpb25zKQorICAgICAgICB0
b29sLnNjbSgpLnVwZGF0ZV93ZWJraXQoKQorICAgICAgICB0b29sLnNjbSgpLmFwcGx5X3JldmVy
c2VfZGlmZihyZXZpc2lvbikKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NoYW5nZWxvZ3NfZm9yX3Jl
dmVydCh0b29sLnNjbSgpLCByZXZpc2lvbikKKworICAgICAgICAjIEZJWE1FOiBGdWxseSBhdXRv
bWF0ZWQgcm9sbG91dCBpcyBub3QgMTAwJSBpZGlvdC1wcm9vZiB5ZXQsIHNvIGZvciBub3cganVz
dCBsb2cgd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbXBsZXRlIHRoZSByb2xsb3V0Lgor
ICAgICAgICAjIE9uY2Ugd2UgdHJ1c3Qgcm9sbG91dCB3ZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlv
bi4KKyAgICAgICAgaWYgbm90IG9wdGlvbnMuY29tcGxldGVfcm9sbG91dDoKKyAgICAgICAgICAg
IGxvZygiXG5OT1RFOiBSb2xsb3V0IHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLlxuUGxlYXNlIHZl
cmlmeSB0aGUgcm9sbG91dCBkaWZmIGFuZCB1c2UgXCJidWd6aWxsYS10b29sIGxhbmQtZGlmZiAl
c1wiIHRvIGNvbW1pdCB0aGUgcm9sbG91dC4iICUgYnVnX2lkKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgY29tbWVudF90ZXh0ID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMuYnVpbGRfYW5kX2Nv
bW1pdCh0b29sLnNjbSgpLCBvcHRpb25zKQorICAgICAgICAgICAgc2VsZi5fcmVvcGVuX2J1Z19h
ZnRlcl9yb2xsb3V0KHRvb2wsIGJ1Z19pZCwgY29tbWVudF90ZXh0KQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVlcmllcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43OGNhYzZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXJpZXMucHkKQEAgLTAsMCArMSwxMDAgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgRklYTUU6IFRyaW0gZG93
biB0aGlzIGltcG9ydCBsaXN0IG9uY2Ugd2UgaGF2ZSB1bml0IHRlc3RzLgoraW1wb3J0IG9zCitp
bXBvcnQgcmUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aW1lCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEK
K2Zyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCisKK2Zyb20gbW9kdWxlcy5idWd6aWxs
YSBpbXBvcnQgQnVnemlsbGEsIHBhcnNlX2J1Z19pZAorZnJvbSBtb2R1bGVzLmJ1aWxkYm90IGlt
cG9ydCBCdWlsZEJvdAorZnJvbSBtb2R1bGVzLmNoYW5nZWxvZ3MgaW1wb3J0IENoYW5nZUxvZwor
ZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1pdF90ZXh0
Citmcm9tIG1vZHVsZXMuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCitmcm9tIG1vZHVsZXMubGFu
ZGluZ3NlcXVlbmNlIGltcG9ydCBMYW5kaW5nU2VxdWVuY2UsIENvbmRpdGlvbmFsTGFuZGluZ1Nl
cXVlbmNlCitmcm9tIG1vZHVsZXMubG9nZ2luZyBpbXBvcnQgZXJyb3IsIGxvZywgdGVlCitmcm9t
IG1vZHVsZXMubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgTXVsdGlDb21tYW5kVG9vbCwgQ29tbWFu
ZAorZnJvbSBtb2R1bGVzLnBhdGNoY29sbGVjdGlvbiBpbXBvcnQgUGF0Y2hDb2xsZWN0aW9uCitm
cm9tIG1vZHVsZXMuc2NtIGltcG9ydCBDb21taXRNZXNzYWdlLCBkZXRlY3Rfc2NtX3N5c3RlbSwg
U2NyaXB0RXJyb3IsIENoZWNrb3V0TmVlZHNVcGRhdGUKK2Zyb20gbW9kdWxlcy5zdGF0dXNib3Qg
aW1wb3J0IFN0YXR1c0JvdAorZnJvbSBtb2R1bGVzLndlYmtpdGxhbmRpbmdzY3JpcHRzIGltcG9y
dCBXZWJLaXRMYW5kaW5nU2NyaXB0cywgY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29tbWl0Citm
cm9tIG1vZHVsZXMud2Via2l0cG9ydCBpbXBvcnQgV2ViS2l0UG9ydAorZnJvbSBtb2R1bGVzLndv
cmtxdWV1ZSBpbXBvcnQgV29ya1F1ZXVlLCBXb3JrUXVldWVEZWxlZ2F0ZQorCitjbGFzcyBCdWdz
VG9Db21taXQoQ29tbWFuZCk6CisgICAgbmFtZSA9ICJidWdzLXRvLWNvbW1pdCIKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIkJ1Z3MgaW4g
dGhlIGNvbW1pdCBxdWV1ZSIpCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBhcmdz
LCB0b29sKToKKyAgICAgICAgYnVnX2lkcyA9IHRvb2wuYnVncy5mZXRjaF9idWdfaWRzX2Zyb21f
Y29tbWl0X3F1ZXVlKCkKKyAgICAgICAgZm9yIGJ1Z19pZCBpbiBidWdfaWRzOgorICAgICAgICAg
ICAgcHJpbnQgIiVzIiAlIGJ1Z19pZAorCisKK2NsYXNzIFBhdGNoZXNUb0NvbW1pdChDb21tYW5k
KToKKyAgICBuYW1lID0gInBhdGNoZXMtdG8tY29tbWl0IgorICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiUGF0Y2hlcyBpbiB0aGUgY29tbWl0
IHF1ZXVlIikKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgor
ICAgICAgICBwYXRjaGVzID0gdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9jb21taXRfcXVl
dWUoKQorICAgICAgICBsb2coIlBhdGNoZXMgaW4gY29tbWl0IHF1ZXVlOiIpCisgICAgICAgIGZv
ciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHBhdGNoWyJ1cmwi
XQorCisKK2NsYXNzIFJldmlld2VkUGF0Y2hlcyhDb21tYW5kKToKKyAgICBuYW1lID0gInJldmll
d2VkLXBhdGNoZXMiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9f
aW5pdF9fKHNlbGYsICJyKydkIHBhdGNoZXMgb24gYSBidWciLCAiQlVHSUQiKQorCisgICAgZGVm
IGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGJ1Z19pZCA9IGFy
Z3NbMF0KKyAgICAgICAgcGF0Y2hlc190b19sYW5kID0gdG9vbC5idWdzLmZldGNoX3Jldmlld2Vk
X3BhdGNoZXNfZnJvbV9idWcoYnVnX2lkKQorICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlc190
b19sYW5kOgorICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHBhdGNoWyJ1cmwiXQorCisKK2NsYXNz
IFRyZWVTdGF0dXMoQ29tbWFuZCk6CisgICAgbmFtZSA9ICJ0cmVlLXN0YXR1cyIKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIlByaW50IG91
dCB0aGUgc3RhdHVzIG9mIHRoZSB3ZWJraXQgYnVpbGRlcnMuIikKKworICAgIGRlZiBleGVjdXRl
KHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAgICBmb3IgYnVpbGRlciBpbiB0b29s
LmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKToKKyAgICAgICAgICAgIHN0YXR1c19zdHJpbmcg
PSAib2siIGlmIGJ1aWxkZXJbImlzX2dyZWVuIl0gZWxzZSAiRkFJTCIKKyAgICAgICAgICAgIHBy
aW50ICIlcyA6ICVzIiAlIChzdGF0dXNfc3RyaW5nLmxqdXN0KDQpLCBidWlsZGVyWyJuYW1lIl0p
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvcXVldWVz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlcy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ0ZjhmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NvbW1hbmRzL3F1ZXVlcy5weQpAQCAtMCww
ICsxLDE5OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAwOSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBG
SVhNRTogVHJpbSBkb3duIHRoaXMgaW1wb3J0IGxpc3Qgb25jZSB3ZSBoYXZlIHVuaXQgdGVzdHMu
CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRp
bWUsIHRpbWVkZWx0YQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KKworZnJvbSBt
b2R1bGVzLmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgcGFyc2VfYnVnX2lkCitmcm9tIG1vZHVs
ZXMuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90Citmcm9tIG1vZHVsZXMuY2hhbmdlbG9ncyBpbXBv
cnQgQ2hhbmdlTG9nCitmcm9tIG1vZHVsZXMuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50X2Zy
b21fY29tbWl0X3RleHQKK2Zyb20gbW9kdWxlcy5ncmFtbWFyIGltcG9ydCBwbHVyYWxpemUKK2Zy
b20gbW9kdWxlcy5sYW5kaW5nc2VxdWVuY2UgaW1wb3J0IExhbmRpbmdTZXF1ZW5jZSwgQ29uZGl0
aW9uYWxMYW5kaW5nU2VxdWVuY2UKK2Zyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwg
bG9nLCB0ZWUKK2Zyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1h
bmRUb29sLCBDb21tYW5kCitmcm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uIGltcG9ydCBQYXRj
aENvbGxlY3Rpb24KK2Zyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVj
dF9zY21fc3lzdGVtLCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQorZnJvbSBtb2R1
bGVzLnN0YXR1c2JvdCBpbXBvcnQgU3RhdHVzQm90Citmcm9tIG1vZHVsZXMud2Via2l0bGFuZGlu
Z3NjcmlwdHMgaW1wb3J0IFdlYktpdExhbmRpbmdTY3JpcHRzLCBjb21taXRfbWVzc2FnZV9mb3Jf
dGhpc19jb21taXQKK2Zyb20gbW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0Citm
cm9tIG1vZHVsZXMud29ya3F1ZXVlIGltcG9ydCBXb3JrUXVldWUsIFdvcmtRdWV1ZURlbGVnYXRl
CisKK2NsYXNzIEFic3RyYWN0UXVldWUoQ29tbWFuZCwgV29ya1F1ZXVlRGVsZWdhdGUpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPVtdKToKKyAgICAgICAgb3B0aW9ucyArPSBbCisg
ICAgICAgICAgICBtYWtlX29wdGlvbigiLS1uby1jb25maXJtIiwgYWN0aW9uPSJzdG9yZV9mYWxz
ZSIsIGRlc3Q9ImNvbmZpcm0iLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBhc2sgdGhlIHVz
ZXIgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgcXVldWUuICBEYW5nZXJvdXMh
IiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1zdGF0dXMtaG9zdCIsIGFjdGlvbj0ic3Rv
cmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSJzdGF0dXNfaG9zdCIsIGRlZmF1bHQ9U3RhdHVzQm90
LmRlZmF1bHRfaG9zdCwgaGVscD0iSG9zdG5hbWUgKGUuZy4gbG9jYWxob3N0IG9yIGNvbW1pdC53
ZWJraXQub3JnKSB3aGVyZSBzdGF0dXMgdXBkYXRlcyBzaG91bGQgYmUgcG9zdGVkLiIpLAorICAg
ICAgICBdCisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZiwgIlJ1biB0aGUgJXMuIiAlIHNl
bGYubmFtZSwgb3B0aW9ucz1vcHRpb25zKQorCisgICAgZGVmIHF1ZXVlX2xvZ19wYXRoKHNlbGYp
OgorICAgICAgICByZXR1cm4gIiVzLmxvZyIgJSBzZWxmLm5hbWUKKworICAgIGRlZiB3b3JrX2xv
Z3NfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzLWxvZ3MiICUgc2VsZi5uYW1l
CisKKyAgICBkZWYgc3RhdHVzX2hvc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9wdGlv
bnMuc3RhdHVzX2hvc3QKKworICAgIGRlZiBiZWdpbl93b3JrX3F1ZXVlKHNlbGYpOgorICAgICAg
ICBsb2coIkNBVVRJT046ICVzIHdpbGwgZGlzY2FyZCBhbGwgbG9jYWwgY2hhbmdlcyBpbiAlcyIg
JSAoc2VsZi5uYW1lLCBzZWxmLnRvb2wuc2NtKCkuY2hlY2tvdXRfcm9vdCkpCisgICAgICAgIGlm
IHNlbGYub3B0aW9ucy5jb25maXJtOgorICAgICAgICAgICAgcmVzcG9uc2UgPSByYXdfaW5wdXQo
IkFyZSB5b3Ugc3VyZT8gIFR5cGUgXCJ5ZXNcIiB0byBjb250aW51ZTogIikKKyAgICAgICAgICAg
IGlmIChyZXNwb25zZSAhPSAieWVzIik6CisgICAgICAgICAgICAgICAgZXJyb3IoIlVzZXIgZGVj
bGluZWQuIikKKyAgICAgICAgbG9nKCJSdW5uaW5nIFdlYktpdCAlcy4gJXMiICUgKHNlbGYubmFt
ZSwgZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoV29ya1F1ZXVlLmxvZ19kYXRlX2Zvcm1hdCkpKQor
CisgICAgZGVmIHNob3VsZF9jb250aW51ZV93b3JrX3F1ZXVlKHNlbGYpOgorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIG5leHRfd29ya19pdGVtKHNlbGYpOgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKKworICAgIGRl
ZiBzaG91bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRlbShzZWxmLCB3b3JrX2l0ZW0pOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIK
KworICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCB3b3JrX2l0ZW0pOgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKKwor
ICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9lcnJvcihzZWxmLCB3b3JrX2l0ZW0sIG1lc3NhZ2Up
OgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGlt
cGxlbWVudCIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcnVuX2J1Z3ppbGxhX3Rvb2wo
YXJncyk6CisgICAgICAgIGJ1Z3ppbGxhX3Rvb2xfcGF0aCA9IF9fZmlsZV9fICMgcmUtZXhlY3V0
ZSB0aGlzIHNjcmlwdAorICAgICAgICBidWd6aWxsYV90b29sX2FyZ3MgPSBbYnVnemlsbGFfdG9v
bF9wYXRoXSArIGFyZ3MKKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMucnVuX2FuZF90aHJv
d19pZl9mYWlsKGJ1Z3ppbGxhX3Rvb2xfYXJncykKKworICAgIGRlZiBsb2dfcHJvZ3Jlc3Moc2Vs
ZiwgcGF0Y2hfaWRzKToKKyAgICAgICAgbG9nKCIlcyBpbiAlcyBbJXNdIiAlIChwbHVyYWxpemUo
InBhdGNoIiwgbGVuKHBhdGNoX2lkcykpLCBzZWxmLm5hbWUsICIsICIuam9pbihwYXRjaF9pZHMp
KSkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAgICAg
ICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYudG9vbCA9IHRvb2wKKyAgICAg
ICAgd29ya19xdWV1ZSA9IFdvcmtRdWV1ZShzZWxmKQorICAgICAgICB3b3JrX3F1ZXVlLnJ1bigp
CisKKworY2xhc3MgQ29tbWl0UXVldWUoQWJzdHJhY3RRdWV1ZSk6CisgICAgbmFtZSA9ICJjb21t
aXQtcXVldWUiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBBYnN0cmFjdFF1ZXVl
Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKKyAgICAg
ICAgQWJzdHJhY3RRdWV1ZS5iZWdpbl93b3JrX3F1ZXVlKHNlbGYpCisKKyAgICBkZWYgbmV4dF93
b3JrX2l0ZW0oc2VsZik6CisgICAgICAgIHBhdGNoZXMgPSBzZWxmLnRvb2wuYnVncy5mZXRjaF9w
YXRjaGVzX2Zyb21fY29tbWl0X3F1ZXVlKHJlamVjdF9pbnZhbGlkX3BhdGNoZXM9VHJ1ZSkKKyAg
ICAgICAgaWYgbm90IHBhdGNoZXM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAj
IE9ubHkgYm90aGVyIGxvZ2dpbmcgaWYgd2UgaGF2ZSBwYXRjaGVzIGluIHRoZSBxdWV1ZS4KKyAg
ICAgICAgc2VsZi5sb2dfcHJvZ3Jlc3MoW3BhdGNoWydpZCddIGZvciBwYXRjaCBpbiBwYXRjaGVz
XSkKKyAgICAgICAgcmV0dXJuIHBhdGNoZXNbMF0KKworICAgIGRlZiBzaG91bGRfcHJvY2VlZF93
aXRoX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6CisgICAgICAgIHJlZF9idWlsZGVyc19uYW1lcyA9
IHNlbGYudG9vbC5idWlsZGJvdC5yZWRfY29yZV9idWlsZGVyc19uYW1lcygpCisgICAgICAgIGlm
IHJlZF9idWlsZGVyc19uYW1lczoKKyAgICAgICAgICAgIHJlZF9idWlsZGVyc19uYW1lcyA9IG1h
cChsYW1iZGEgbmFtZTogIlwiJXNcIiIgJSBuYW1lLCByZWRfYnVpbGRlcnNfbmFtZXMpICMgQWRk
IHF1b3RlcyBhcm91bmQgdGhlIG5hbWVzLgorICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIkJ1
aWxkZXJzIFslc10gYXJlIHJlZC4gU2VlIGh0dHA6Ly9idWlsZC53ZWJraXQub3JnLiIgJSAiLCAi
LmpvaW4ocmVkX2J1aWxkZXJzX25hbWVzKSwgTm9uZSkKKyAgICAgICAgcmV0dXJuIChUcnVlLCAi
TGFuZGluZyBwYXRjaCAlcyBmcm9tIGJ1ZyAlcy4iICUgKHBhdGNoWyJpZCJdLCBwYXRjaFsiYnVn
X2lkIl0pLCBwYXRjaFsiYnVnX2lkIl0pCisKKyAgICBkZWYgcHJvY2Vzc193b3JrX2l0ZW0oc2Vs
ZiwgcGF0Y2gpOgorICAgICAgICBzZWxmLnJ1bl9idWd6aWxsYV90b29sKFsibGFuZC1hdHRhY2ht
ZW50IiwgIi0tZm9yY2UtY2xlYW4iLCAiLS1ub24taW50ZXJhY3RpdmUiLCAiLS1xdWlldCIsIHBh
dGNoWyJpZCJdXSkKKworICAgIGRlZiBoYW5kbGVfdW5leHBlY3RlZF9lcnJvcihzZWxmLCBwYXRj
aCwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYudG9vbC5idWdzLnJlamVjdF9wYXRjaF9mcm9tX2Nv
bW1pdF9xdWV1ZShwYXRjaFsiaWQiXSwgbWVzc2FnZSkKKworCitjbGFzcyBBYnN0cmFjdFRyeVF1
ZXVlKEFic3RyYWN0UXVldWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zPVtdKToK
KyAgICAgICAgQWJzdHJhY3RRdWV1ZS5fX2luaXRfXyhzZWxmLCBvcHRpb25zKQorCisgICAgZGVm
IHN0YXR1c19ob3N0KHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZSAjIEZJWE1FOiBBIGhhY2sg
dW50aWwgd2UgY29tZSB1cCB3aXRoIGEgbW9yZSBnZW5lcmljIHN0YXR1cyBwYWdlLgorCisgICAg
ZGVmIGJlZ2luX3dvcmtfcXVldWUoc2VsZik6CisgICAgICAgIEFic3RyYWN0UXVldWUuYmVnaW5f
d29ya19xdWV1ZShzZWxmKQorICAgICAgICBzZWxmLl9wYXRjaGVzID0gUGF0Y2hDb2xsZWN0aW9u
KHNlbGYudG9vbC5idWdzKQorICAgICAgICBzZWxmLl9wYXRjaGVzLmFkZF9wYXRjaGVzKHNlbGYu
dG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9yZXZpZXdfcXVldWUobGltaXQ9MTApKQorCisg
ICAgZGVmIG5leHRfd29ya19pdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmxvZ19wcm9ncmVzcyhz
ZWxmLl9wYXRjaGVzLnBhdGNoX2lkcygpKQorICAgICAgICByZXR1cm4gc2VsZi5fcGF0Y2hlcy5u
ZXh0KCkKKworICAgIGRlZiBzaG91bGRfcHJvY2VlZF93aXRoX3dvcmtfaXRlbShzZWxmLCBwYXRj
aCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3Qg
aW1wbGVtZW50IgorCisgICAgZGVmIHByb2Nlc3Nfd29ya19pdGVtKHNlbGYsIHBhdGNoKToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1l
bnQiCisKKyAgICBkZWYgaGFuZGxlX3VuZXhwZWN0ZWRfZXJyb3Ioc2VsZiwgcGF0Y2gsIG1lc3Nh
Z2UpOgorICAgICAgICBsb2cobWVzc2FnZSkKKworCitjbGFzcyBTdHlsZVF1ZXVlKEFic3RyYWN0
VHJ5UXVldWUpOgorICAgIG5hbWUgPSAic3R5bGUtcXVldWUiCisgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgorICAgICAgICBBYnN0cmFjdFRyeVF1ZXVlLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYg
c2hvdWxkX3Byb2NlZWRfd2l0aF93b3JrX2l0ZW0oc2VsZiwgcGF0Y2gpOgorICAgICAgICByZXR1
cm4gKFRydWUsICJDaGVja2luZyBzdHlsZSBmb3IgcGF0Y2ggJXMgb24gYnVnICVzLiIgJSAocGF0
Y2hbImlkIl0sIHBhdGNoWyJidWdfaWQiXSksIHBhdGNoWyJidWdfaWQiXSkKKworICAgIGRlZiBw
cm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6CisgICAgICAgIHNlbGYucnVuX2J1Z3ppbGxh
X3Rvb2woWyJjaGVjay1zdHlsZSIsICItLWZvcmNlLWNsZWFuIiwgcGF0Y2hbImlkIl1dKQorCisK
K2NsYXNzIEJ1aWxkUXVldWUoQWJzdHJhY3RUcnlRdWV1ZSk6CisgICAgbmFtZSA9ICJidWlsZC1x
dWV1ZSIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBXZWJLaXRQ
b3J0LnBvcnRfb3B0aW9ucygpCisgICAgICAgIEFic3RyYWN0VHJ5UXVldWUuX19pbml0X18oc2Vs
Ziwgb3B0aW9ucykKKworICAgIGRlZiBiZWdpbl93b3JrX3F1ZXVlKHNlbGYpOgorICAgICAgICBB
YnN0cmFjdFRyeVF1ZXVlLmJlZ2luX3dvcmtfcXVldWUoc2VsZikKKyAgICAgICAgc2VsZi5wb3J0
ID0gV2ViS2l0UG9ydC5wb3J0KHNlbGYub3B0aW9ucykKKworICAgIGRlZiBzaG91bGRfcHJvY2Vl
ZF93aXRoX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYucnVuX2J1Z3ppbGxhX3Rvb2woWyJidWlsZCIsIHNlbGYucG9ydC5mbGFnKCksICItLWZv
cmNlLWNsZWFuIiwgIi0tcXVpZXQiXSkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgor
ICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIlVuYWJsZSB0byBwZXJmb3JtIGEgYnVpbGQuIiwg
Tm9uZSkKKyAgICAgICAgcmV0dXJuIChUcnVlLCAiQnVpbGRpbmcgcGF0Y2ggJXMgb24gYnVnICVz
LiIgJSAocGF0Y2hbImlkIl0sIHBhdGNoWyJidWdfaWQiXSksIHBhdGNoWyJidWdfaWQiXSkKKwor
ICAgIGRlZiBwcm9jZXNzX3dvcmtfaXRlbShzZWxmLCBwYXRjaCk6CisgICAgICAgIHNlbGYucnVu
X2J1Z3ppbGxhX3Rvb2woWyJidWlsZC1hdHRhY2htZW50Iiwgc2VsZi5wb3J0LmZsYWcoKSwgIi0t
Zm9yY2UtY2xlYW4iLCAiLS1xdWlldCIsICItLW5vLXVwZGF0ZSIsIHBhdGNoWyJpZCJdXSkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jb21tYW5kcy91cGxvYWQucHkg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvdXBsb2FkLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY29tbWFuZHMvdXBsb2FkLnB5CkBAIC0wLDAgKzEs
MjQ3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEZJWE1F
OiBUcmltIGRvd24gdGhpcyBpbXBvcnQgbGlzdCBvbmNlIHdlIGhhdmUgdW5pdCB0ZXN0cy4KK2lt
cG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzdWJwcm9jZXNzCitp
bXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwg
dGltZWRlbHRhCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgorCitmcm9tIG1vZHVs
ZXMuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhLCBwYXJzZV9idWdfaWQKK2Zyb20gbW9kdWxlcy5i
dWlsZGJvdCBpbXBvcnQgQnVpbGRCb3QKK2Zyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBD
aGFuZ2VMb2cKK2Zyb20gbW9kdWxlcy5jb21tZW50cyBpbXBvcnQgYnVnX2NvbW1lbnRfZnJvbV9j
b21taXRfdGV4dAorZnJvbSBtb2R1bGVzLmdyYW1tYXIgaW1wb3J0IHBsdXJhbGl6ZQorZnJvbSBt
b2R1bGVzLmxhbmRpbmdzZXF1ZW5jZSBpbXBvcnQgTGFuZGluZ1NlcXVlbmNlLCBDb25kaXRpb25h
bExhbmRpbmdTZXF1ZW5jZQorZnJvbSBtb2R1bGVzLmxvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cs
IHRlZQorZnJvbSBtb2R1bGVzLm11bHRpY29tbWFuZHRvb2wgaW1wb3J0IE11bHRpQ29tbWFuZFRv
b2wsIENvbW1hbmQKK2Zyb20gbW9kdWxlcy5wYXRjaGNvbGxlY3Rpb24gaW1wb3J0IFBhdGNoQ29s
bGVjdGlvbgorZnJvbSBtb2R1bGVzLnNjbSBpbXBvcnQgQ29tbWl0TWVzc2FnZSwgZGV0ZWN0X3Nj
bV9zeXN0ZW0sIFNjcmlwdEVycm9yLCBDaGVja291dE5lZWRzVXBkYXRlCitmcm9tIG1vZHVsZXMu
c3RhdHVzYm90IGltcG9ydCBTdGF0dXNCb3QKK2Zyb20gbW9kdWxlcy53ZWJraXRsYW5kaW5nc2Ny
aXB0cyBpbXBvcnQgV2ViS2l0TGFuZGluZ1NjcmlwdHMsIGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlz
X2NvbW1pdAorZnJvbSBtb2R1bGVzLndlYmtpdHBvcnQgaW1wb3J0IFdlYktpdFBvcnQKK2Zyb20g
bW9kdWxlcy53b3JrcXVldWUgaW1wb3J0IFdvcmtRdWV1ZSwgV29ya1F1ZXVlRGVsZWdhdGUKKwor
Y2xhc3MgQ29tbWl0TWVzc2FnZUZvckN1cnJlbnREaWZmKENvbW1hbmQpOgorICAgIG5hbWUgPSAi
Y29tbWl0LW1lc3NhZ2UiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5k
Ll9faW5pdF9fKHNlbGYsICJQcmludHMgYSBjb21taXQgbWVzc2FnZSBzdWl0YWJsZSBmb3IgdGhl
IHVuY29tbWl0dGVkIGNoYW5nZXMuIikKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMs
IGFyZ3MsIHRvb2wpOgorICAgICAgICBvcy5jaGRpcih0b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3Qp
CisgICAgICAgIHByaW50ICIlcyIgJSBjb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQodG9v
bC5zY20oKSkubWVzc2FnZSgpCisKKworY2xhc3MgT2Jzb2xldGVBdHRhY2htZW50cyhDb21tYW5k
KToKKyAgICBuYW1lID0gIm9ic29sZXRlLWF0dGFjaG1lbnRzIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAiTWFya3MgYWxsIGF0dGFjaG1l
bnRzIG9uIGEgYnVnIGFzIG9ic29sZXRlLiIsICJCVUdJRCIpCisKKyAgICBkZWYgZXhlY3V0ZShz
ZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgYnVnX2lkID0gYXJnc1swXQorICAg
ICAgICBhdHRhY2htZW50cyA9IHRvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50c19mcm9tX2J1Zyhi
dWdfaWQpCisgICAgICAgIGZvciBhdHRhY2htZW50IGluIGF0dGFjaG1lbnRzOgorICAgICAgICAg
ICAgaWYgbm90IGF0dGFjaG1lbnRbImlzX29ic29sZXRlIl06CisgICAgICAgICAgICAgICAgdG9v
bC5idWdzLm9ic29sZXRlX2F0dGFjaG1lbnQoYXR0YWNobWVudFsiaWQiXSkKKworCitjbGFzcyBQ
b3N0RGlmZihDb21tYW5kKToKKyAgICBuYW1lID0gInBvc3QtZGlmZiIKKyAgICBkZWYgX19pbml0
X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBtYWtlX29wdGlvbigi
LW0iLCAiLS1kZXNjcmlwdGlvbiIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJzdHJpbmciLCBkZXN0
PSJkZXNjcmlwdGlvbiIsIGhlbHA9IkRlc2NyaXB0aW9uIHN0cmluZyBmb3IgdGhlIGF0dGFjaG1l
bnQgKGRlZmF1bHQ6IFwicGF0Y2hcIikiKSwKKyAgICAgICAgXQorICAgICAgICBvcHRpb25zICs9
IHNlbGYucG9zdGluZ19vcHRpb25zKCkKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAi
QXR0YWNoZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZGlmZiB0byBhIGJ1ZyBhcyBh
IHBhdGNoIGZpbGUuIiwgIltCVUdJRF0iLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIHBvc3Rpbmdfb3B0aW9ucygpOgorICAgICAgICByZXR1cm4gWworICAg
ICAgICAgICAgbWFrZV9vcHRpb24oIi0tbm8tb2Jzb2xldGUiLCBhY3Rpb249InN0b3JlX2ZhbHNl
IiwgZGVzdD0ib2Jzb2xldGVfcGF0Y2hlcyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IG9i
c29sZXRlIG9sZCBwYXRjaGVzIGJlZm9yZSBwb3N0aW5nIHRoaXMgb25lLiIpLAorICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tbm8tcmV2aWV3IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9
InJldmlldyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG8gbm90IG1hcmsgdGhlIHBhdGNoIGZvciBy
ZXZpZXcuIiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1yZXF1ZXN0LWNvbW1pdCIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcXVlc3RfY29tbWl0IiwgZGVmYXVsdD1GYWxzZSwg
aGVscD0iTWFyayB0aGUgcGF0Y2ggYXMgbmVlZGluZyBhdXRvLWNvbW1pdCBhZnRlciByZXZpZXcu
IiksCisgICAgICAgIF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgb2Jzb2xldGVfcGF0
Y2hlc19vbl9idWcoYnVnX2lkLCBidWdzKToKKyAgICAgICAgcGF0Y2hlcyA9IGJ1Z3MuZmV0Y2hf
cGF0Y2hlc19mcm9tX2J1ZyhidWdfaWQpCisgICAgICAgIGlmIGxlbihwYXRjaGVzKToKKyAgICAg
ICAgICAgIGxvZygiT2Jzb2xldGluZyAlcyBvbiBidWcgJXMiICUgKHBsdXJhbGl6ZSgib2xkIHBh
dGNoIiwgbGVuKHBhdGNoZXMpKSwgYnVnX2lkKSkKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBw
YXRjaGVzOgorICAgICAgICAgICAgICAgIGJ1Z3Mub2Jzb2xldGVfYXR0YWNobWVudChwYXRjaFsi
aWQiXSkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgorICAg
ICAgICAjIFBlcmZlciBhIGJ1ZyBpZCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgb3ZlciBhIGJ1ZyB1
cmwgaW4gdGhlIGRpZmYgKGkuZS4gQ2hhbmdlTG9ncykuCisgICAgICAgIGJ1Z19pZCA9IChhcmdz
IGFuZCBhcmdzWzBdKSBvciBwYXJzZV9idWdfaWQodG9vbC5zY20oKS5jcmVhdGVfcGF0Y2goKSkK
KyAgICAgICAgaWYgbm90IGJ1Z19pZDoKKyAgICAgICAgICAgIGVycm9yKCJObyBidWcgaWQgcGFz
c2VkIGFuZCBubyBidWcgdXJsIGZvdW5kIGluIGRpZmYsIGNhbid0IHBvc3QuIikKKworICAgICAg
ICBpZiBvcHRpb25zLm9ic29sZXRlX3BhdGNoZXM6CisgICAgICAgICAgICBzZWxmLm9ic29sZXRl
X3BhdGNoZXNfb25fYnVnKGJ1Z19pZCwgdG9vbC5idWdzKQorCisgICAgICAgIGRpZmYgPSB0b29s
LnNjbSgpLmNyZWF0ZV9wYXRjaCgpCisgICAgICAgIGRpZmZfZmlsZSA9IFN0cmluZ0lPLlN0cmlu
Z0lPKGRpZmYpICMgYWRkX3BhdGNoX3RvX2J1ZyBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdAor
CisgICAgICAgIGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbiBvciAiUGF0Y2giCisg
ICAgICAgIHRvb2wuYnVncy5hZGRfcGF0Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9maWxlLCBkZXNj
cmlwdGlvbiwgbWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3LCBtYXJrX2Zvcl9jb21taXRf
cXVldWU9b3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCkKKworCitjbGFzcyBQb3N0Q29tbWl0cyhDb21t
YW5kKToKKyAgICBuYW1lID0gInBvc3QtY29tbWl0cyIKKyAgICBkZWYgX19pbml0X18oc2VsZik6
CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLWIiLCAiLS1i
dWctaWQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iYnVnX2lkIiwgaGVs
cD0iU3BlY2lmeSBidWcgaWQgaWYgbm8gVVJMIGlzIHByb3ZpZGVkIGluIHRoZSBjb21taXQgbG9n
LiIpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tYWRkLWxvZy1hcy1jb21tZW50IiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYWRkX2xvZ19hc19jb21tZW50IiwgZGVmYXVsdD1GYWxz
ZSwgaGVscD0iQWRkIGNvbW1pdCBsb2cgbWVzc2FnZSBhcyBhIGNvbW1lbnQgd2hlbiB1cGxvYWRp
bmcgdGhlIHBhdGNoLiIpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1tIiwgIi0tZGVzY3Jp
cHRpb24iLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iZGVzY3JpcHRpb24i
LCBoZWxwPSJEZXNjcmlwdGlvbiBzdHJpbmcgZm9yIHRoZSBhdHRhY2htZW50IChkZWZhdWx0OiBk
ZXNjcmlwdGlvbiBmcm9tIGNvbW1pdCBtZXNzYWdlKSIpLAorICAgICAgICBdCisgICAgICAgIG9w
dGlvbnMgKz0gUG9zdERpZmYucG9zdGluZ19vcHRpb25zKCkKKyAgICAgICAgQ29tbWFuZC5fX2lu
aXRfXyhzZWxmLCAiQXR0YWNoZXMgYSByYW5nZSBvZiBsb2NhbCBjb21taXRzIHRvIGJ1Z3MgYXMg
cGF0Y2ggZmlsZXMuIiwgIkNPTU1JVElTSCIsIG9wdGlvbnM9b3B0aW9ucywgcmVxdWlyZXNfbG9j
YWxfY29tbWl0cz1UcnVlKQorCisgICAgZGVmIF9jb21tZW50X3RleHRfZm9yX2NvbW1pdChzZWxm
LCBvcHRpb25zLCBjb21taXRfbWVzc2FnZSwgdG9vbCwgY29tbWl0X2lkKToKKyAgICAgICAgY29t
bWVudF90ZXh0ID0gTm9uZQorICAgICAgICBpZiAob3B0aW9ucy5hZGRfbG9nX2FzX2NvbW1lbnQp
OgorICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShsc3RyaXA9
VHJ1ZSkKKyAgICAgICAgICAgIGNvbW1lbnRfdGV4dCArPSAiLS0tXG4iCisgICAgICAgICAgICBj
b21tZW50X3RleHQgKz0gdG9vbC5zY20oKS5maWxlc19jaGFuZ2VkX3N1bW1hcnlfZm9yX2NvbW1p
dChjb21taXRfaWQpCisgICAgICAgIHJldHVybiBjb21tZW50X3RleHQKKworICAgIGRlZiBfZGlm
Zl9maWxlX2Zvcl9jb21taXQoc2VsZiwgdG9vbCwgY29tbWl0X2lkKToKKyAgICAgICAgZGlmZiA9
IHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNoX2Zyb21fbG9jYWxfY29tbWl0KGNvbW1pdF9pZCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPKGRpZmYpICMgYWRkX3BhdGNoX3RvX2J1ZyBl
eHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdAorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9u
cywgYXJncywgdG9vbCk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgZXJyb3Io
IiVzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIiAlIHNlbGYuYXJndW1lbnRfbmFtZXMpCisKKyAgICAg
ICAgY29tbWl0X2lkcyA9IHRvb2wuc2NtKCkuY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1
bWVudHMoYXJncykKKyAgICAgICAgaWYgbGVuKGNvbW1pdF9pZHMpID4gMTA6ICMgV2UgY291bGQg
bG93ZXIgdGhpcyBsaW1pdCwgMTAgaXMgdG9vIG1hbnkgZm9yIG9uZSBidWcgYXMtaXMuCisgICAg
ICAgICAgICBlcnJvcigiYnVnemlsbGEtdG9vbCBkb2VzIG5vdCBzdXBwb3J0IGF0dGFjaGluZyAl
cyBhdCBvbmNlLiAgQXJlIHlvdSBzdXJlIHlvdSBwYXNzZWQgdGhlIHJpZ2h0IGNvbW1pdCByYW5n
ZT8iICUgKHBsdXJhbGl6ZSgicGF0Y2giLCBsZW4oY29tbWl0X2lkcykpKSkKKworICAgICAgICBo
YXZlX29ic29sZXRlZF9wYXRjaGVzID0gc2V0KCkKKyAgICAgICAgZm9yIGNvbW1pdF9pZCBpbiBj
b21taXRfaWRzOgorICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgPSB0b29sLnNjbSgpLmNvbW1p
dF9tZXNzYWdlX2Zvcl9sb2NhbF9jb21taXQoY29tbWl0X2lkKQorCisgICAgICAgICAgICAjIFBy
ZWZlciAtLWJ1Zy1pZD0sIHRoZW4gYSBidWcgdXJsIGluIHRoZSBjb21taXQgbWVzc2FnZSwgdGhl
biBhIGJ1ZyB1cmwgaW4gdGhlIGVudGlyZSBjb21taXQgZGlmZiAoaS5lLiBDaGFuZ2VMb2dzKS4K
KyAgICAgICAgICAgIGJ1Z19pZCA9IG9wdGlvbnMuYnVnX2lkIG9yIHBhcnNlX2J1Z19pZChjb21t
aXRfbWVzc2FnZS5tZXNzYWdlKCkpIG9yIHBhcnNlX2J1Z19pZCh0b29sLnNjbSgpLmNyZWF0ZV9w
YXRjaF9mcm9tX2xvY2FsX2NvbW1pdChjb21taXRfaWQpKQorICAgICAgICAgICAgaWYgbm90IGJ1
Z19pZDoKKyAgICAgICAgICAgICAgICBsb2coIlNraXBwaW5nICVzOiBObyBidWcgaWQgZm91bmQg
aW4gY29tbWl0IG9yIHNwZWNpZmllZCB3aXRoIC0tYnVnLWlkLiIgJSBjb21taXRfaWQpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgb3B0aW9ucy5vYnNvbGV0ZV9w
YXRjaGVzIGFuZCBidWdfaWQgbm90IGluIGhhdmVfb2Jzb2xldGVkX3BhdGNoZXM6CisgICAgICAg
ICAgICAgICAgUG9zdERpZmYub2Jzb2xldGVfcGF0Y2hlc19vbl9idWcoYnVnX2lkLCB0b29sLmJ1
Z3MpCisgICAgICAgICAgICAgICAgaGF2ZV9vYnNvbGV0ZWRfcGF0Y2hlcy5hZGQoYnVnX2lkKQor
CisgICAgICAgICAgICBkaWZmX2ZpbGUgPSBzZWxmLl9kaWZmX2ZpbGVfZm9yX2NvbW1pdCh0b29s
LCBjb21taXRfaWQpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRp
b24gb3IgY29tbWl0X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1U
cnVlKQorICAgICAgICAgICAgY29tbWVudF90ZXh0ID0gc2VsZi5fY29tbWVudF90ZXh0X2Zvcl9j
b21taXQob3B0aW9ucywgY29tbWl0X21lc3NhZ2UsIHRvb2wsIGNvbW1pdF9pZCkKKyAgICAgICAg
ICAgIHRvb2wuYnVncy5hZGRfcGF0Y2hfdG9fYnVnKGJ1Z19pZCwgZGlmZl9maWxlLCBkZXNjcmlw
dGlvbiwgY29tbWVudF90ZXh0LCBtYXJrX2Zvcl9yZXZpZXc9b3B0aW9ucy5yZXZpZXcsIG1hcmtf
Zm9yX2NvbW1pdF9xdWV1ZT1vcHRpb25zLnJlcXVlc3RfY29tbWl0KQorCisKK2NsYXNzIENyZWF0
ZUJ1ZyhDb21tYW5kKToKKyAgICBuYW1lID0gImNyZWF0ZS1idWciCisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBvcHRpb25zID0gWworICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0t
Y2MiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0iY2MiLCBoZWxwPSJDb21t
YS1zZXBhcmF0ZWQgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gY2FyYm9uLWNvcHkuIiksCisg
ICAgICAgICAgICBtYWtlX29wdGlvbigiLS1jb21wb25lbnQiLCBhY3Rpb249InN0b3JlIiwgdHlw
ZT0ic3RyaW5nIiwgZGVzdD0iY29tcG9uZW50IiwgaGVscD0iQ29tcG9uZW50IGZvciB0aGUgbmV3
IGJ1Zy4iKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXByb21wdCIsIGFjdGlvbj0i
c3RvcmVfZmFsc2UiLCBkZXN0PSJwcm9tcHQiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBw
cm9tcHQgZm9yIGJ1ZyB0aXRsZSBhbmQgY29tbWVudDsgdXNlIGNvbW1pdCBsb2cgaW5zdGVhZC4i
KSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXJldmlldyIsIGFjdGlvbj0ic3RvcmVf
ZmFsc2UiLCBkZXN0PSJyZXZpZXciLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvIG5vdCBtYXJrIHRo
ZSBwYXRjaCBmb3IgcmV2aWV3LiIpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tcmVxdWVz
dC1jb21taXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXF1ZXN0X2NvbW1pdCIsIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9Ik1hcmsgdGhlIHBhdGNoIGFzIG5lZWRpbmcgYXV0by1jb21taXQg
YWZ0ZXIgcmV2aWV3LiIpLAorICAgICAgICBdCisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2Vs
ZiwgIkNyZWF0ZSBhIGJ1ZyBmcm9tIGxvY2FsIGNoYW5nZXMgb3IgbG9jYWwgY29tbWl0cy4iLCAi
W0NPTU1JVElTSF0iLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICBkZWYgY3JlYXRlX2J1Z19mcm9t
X2NvbW1pdChzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKKyAgICAgICAgY29tbWl0X2lkcyA9
IHRvb2wuc2NtKCkuY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoYXJncykKKyAg
ICAgICAgaWYgbGVuKGNvbW1pdF9pZHMpID4gMzoKKyAgICAgICAgICAgIGVycm9yKCJBcmUgeW91
IHN1cmUgeW91IHdhbnQgdG8gY3JlYXRlIG9uZSBidWcgd2l0aCAlcyBwYXRjaGVzPyIgJSBsZW4o
Y29tbWl0X2lkcykpCisKKyAgICAgICAgY29tbWl0X2lkID0gY29tbWl0X2lkc1swXQorCisgICAg
ICAgIGJ1Z190aXRsZSA9ICIiCisgICAgICAgIGNvbW1lbnRfdGV4dCA9ICIiCisgICAgICAgIGlm
IG9wdGlvbnMucHJvbXB0OgorICAgICAgICAgICAgKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0KSA9
IHNlbGYucHJvbXB0X2Zvcl9idWdfdGl0bGVfYW5kX2NvbW1lbnQoKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgPSB0b29sLnNjbSgpLmNvbW1pdF9tZXNzYWdlX2Zv
cl9sb2NhbF9jb21taXQoY29tbWl0X2lkKQorICAgICAgICAgICAgYnVnX3RpdGxlID0gY29tbWl0
X21lc3NhZ2UuZGVzY3JpcHRpb24obHN0cmlwPVRydWUsIHN0cmlwX3VybD1UcnVlKQorICAgICAg
ICAgICAgY29tbWVudF90ZXh0ID0gY29tbWl0X21lc3NhZ2UuYm9keShsc3RyaXA9VHJ1ZSkKKyAg
ICAgICAgICAgIGNvbW1lbnRfdGV4dCArPSAiLS0tXG4iCisgICAgICAgICAgICBjb21tZW50X3Rl
eHQgKz0gdG9vbC5zY20oKS5maWxlc19jaGFuZ2VkX3N1bW1hcnlfZm9yX2NvbW1pdChjb21taXRf
aWQpCisKKyAgICAgICAgZGlmZiA9IHRvb2wuc2NtKCkuY3JlYXRlX3BhdGNoX2Zyb21fbG9jYWxf
Y29tbWl0KGNvbW1pdF9pZCkKKyAgICAgICAgZGlmZl9maWxlID0gU3RyaW5nSU8uU3RyaW5nSU8o
ZGlmZikgIyBjcmVhdGVfYnVnX3dpdGhfcGF0Y2ggZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QK
KyAgICAgICAgYnVnX2lkID0gdG9vbC5idWdzLmNyZWF0ZV9idWdfd2l0aF9wYXRjaChidWdfdGl0
bGUsIGNvbW1lbnRfdGV4dCwgb3B0aW9ucy5jb21wb25lbnQsIGRpZmZfZmlsZSwgIlBhdGNoIiwg
Y2M9b3B0aW9ucy5jYywgbWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3LCBtYXJrX2Zvcl9j
b21taXRfcXVldWU9b3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCkKKworICAgICAgICBpZiBidWdfaWQg
YW5kIGxlbihjb21taXRfaWRzKSA+IDE6CisgICAgICAgICAgICBvcHRpb25zLmJ1Z19pZCA9IGJ1
Z19pZAorICAgICAgICAgICAgb3B0aW9ucy5vYnNvbGV0ZV9wYXRjaGVzID0gRmFsc2UKKyAgICAg
ICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBwYXNzIHRocm91Z2ggLS1uby1jb21tZW50IHN3aXRj
aCBhcyB3ZWxsLgorICAgICAgICAgICAgUG9zdENvbW1pdHMuZXhlY3V0ZShzZWxmLCBvcHRpb25z
LCBjb21taXRfaWRzWzE6XSwgdG9vbCkKKworICAgIGRlZiBjcmVhdGVfYnVnX2Zyb21fcGF0Y2go
c2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGJ1Z190aXRsZSA9ICIiCisgICAg
ICAgIGNvbW1lbnRfdGV4dCA9ICIiCisgICAgICAgIGlmIG9wdGlvbnMucHJvbXB0OgorICAgICAg
ICAgICAgKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0KSA9IHNlbGYucHJvbXB0X2Zvcl9idWdfdGl0
bGVfYW5kX2NvbW1lbnQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWl0X21lc3Nh
Z2UgPSBjb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQodG9vbC5zY20oKSkKKyAgICAgICAg
ICAgIGJ1Z190aXRsZSA9IGNvbW1pdF9tZXNzYWdlLmRlc2NyaXB0aW9uKGxzdHJpcD1UcnVlLCBz
dHJpcF91cmw9VHJ1ZSkKKyAgICAgICAgICAgIGNvbW1lbnRfdGV4dCA9IGNvbW1pdF9tZXNzYWdl
LmJvZHkobHN0cmlwPVRydWUpCisKKyAgICAgICAgZGlmZiA9IHRvb2wuc2NtKCkuY3JlYXRlX3Bh
dGNoKCkKKyAgICAgICAgZGlmZl9maWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oZGlmZikgIyBjcmVh
dGVfYnVnX3dpdGhfcGF0Y2ggZXhwZWN0cyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgYnVn
X2lkID0gdG9vbC5idWdzLmNyZWF0ZV9idWdfd2l0aF9wYXRjaChidWdfdGl0bGUsIGNvbW1lbnRf
dGV4dCwgb3B0aW9ucy5jb21wb25lbnQsIGRpZmZfZmlsZSwgIlBhdGNoIiwgY2M9b3B0aW9ucy5j
YywgbWFya19mb3JfcmV2aWV3PW9wdGlvbnMucmV2aWV3LCBtYXJrX2Zvcl9jb21taXRfcXVldWU9
b3B0aW9ucy5yZXF1ZXN0X2NvbW1pdCkKKworICAgIGRlZiBwcm9tcHRfZm9yX2J1Z190aXRsZV9h
bmRfY29tbWVudChzZWxmKToKKyAgICAgICAgYnVnX3RpdGxlID0gcmF3X2lucHV0KCJCdWcgdGl0
bGU6ICIpCisgICAgICAgIHByaW50ICJCdWcgY29tbWVudCAoaGl0IF5EIG9uIGJsYW5rIGxpbmUg
dG8gZW5kKToiCisgICAgICAgIGxpbmVzID0gc3lzLnN0ZGluLnJlYWRsaW5lcygpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5zZWVrKDAsIG9zLlNFRUtfRU5EKQorICAgICAg
ICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICMgQ3lnd2luIHJhaXNlcyBhbiBJbGxlZ2Fs
IFNlZWsgKGVycm5vIDI5KSBleGNlcHRpb24gd2hlbiB0aGUgYWJvdmUKKyAgICAgICAgICAgICMg
c2VlaygpIGNhbGwgaXMgbWFkZS4gSWdub3JpbmcgaXQgc2VlbXMgdG8gY2F1c2Ugbm8gaGFybS4K
KyAgICAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgYSB3YXkgdG8gZ2V0IGF2b2lkIHRoZSBl
eGNlcHRpb24gaW4gdGhlIGZpcnN0CisgICAgICAgICAgICAjIHBsYWNlLgorICAgICAgICAgICAg
cGFzcworICAgICAgICBjb21tZW50X3RleHQgPSAiIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1
cm4gKGJ1Z190aXRsZSwgY29tbWVudF90ZXh0KQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0
aW9ucywgYXJncywgdG9vbCk6CisgICAgICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgICAgIGlm
IChub3QgdG9vbC5zY20oKS5zdXBwb3J0c19sb2NhbF9jb21taXRzKCkpOgorICAgICAgICAgICAg
ICAgIGVycm9yKCJFeHRyYSBhcmd1bWVudHMgbm90IHN1cHBvcnRlZDsgcGF0Y2ggaXMgdGFrZW4g
ZnJvbSB3b3JraW5nIGRpcmVjdG9yeS4iKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfYnVnX2Zy
b21fY29tbWl0KG9wdGlvbnMsIGFyZ3MsIHRvb2wpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLmNyZWF0ZV9idWdfZnJvbV9wYXRjaChvcHRpb25zLCBhcmdzLCB0b29sKQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2dyYW1tYXIucHkgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvZ3JhbW1hci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZDI5NjdhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9t
b2R1bGVzL2dyYW1tYXIucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHJlCisKK2RlZiBwbHVyYWwobm91bik6CisgICAg
IyBUaGlzIGlzIGEgZHVtYiBwbHVyYWwoKSBpbXBsZW1lbnRhdGlvbiB3aGljaCB3YXMganVzdCBl
bm91Z2ggZm9yIG91ciB1c2VzLgorICAgIGlmIHJlLnNlYXJjaCgiaCQiLCBub3VuKToKKyAgICAg
ICAgcmV0dXJuIG5vdW4gKyAiZXMiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG5vdW4gKyAi
cyIKKworZGVmIHBsdXJhbGl6ZShub3VuLCBjb3VudCk6CisgICAgaWYgY291bnQgIT0gMToKKyAg
ICAgICAgbm91biA9IHBsdXJhbChub3VuKQorICAgIHJldHVybiAiJWQgJXMiICUgKGNvdW50LCBu
b3VuKQo=
</data>
<flag name="review"
          id="25368"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>