<?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>139716</bug_id>
          
          <creation_ts>2014-12-16 18:01:37 -0800</creation_ts>
          <short_desc>Split InteractiveChartComponent and CommitsViewerComponent into separate files</short_desc>
          <delta_ts>2014-12-16 18:28: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>WebKit Website</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1056208</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-16 18:01:37 -0800</bug_when>
    <thetext>Factor these classes out of app.js, which is getting quite big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056211</commentid>
    <comment_count>1</comment_count>
      <attachid>243415</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-16 18:06:10 -0800</bug_when>
    <thetext>Created attachment 243415
Refactored</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056212</commentid>
    <comment_count>2</comment_count>
      <attachid>243415</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-12-16 18:07:23 -0800</bug_when>
    <thetext>Comment on attachment 243415
Refactored

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056223</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-12-16 18:28:34 -0800</bug_when>
    <thetext>Committed r177424: &lt;http://trac.webkit.org/changeset/177424&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243415</attachid>
            <date>2014-12-16 18:06:10 -0800</date>
            <delta_ts>2014-12-16 18:07:23 -0800</delta_ts>
            <desc>Refactored</desc>
            <filename>bug-139716-20141216180659.patch</filename>
            <type>text/plain</type>
            <size>62099</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTE3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA0YWVjMzAyZGI0OTZjZGZhZmU4ODAxZWI4MzkzM2E3MDZlODhjMzYzLi5hMTI5NmYzNTY1
ZTAyYmVhYzJhMGI5MjI3Y2Q1MzViYTE5MzQyMTM3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0xMi0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBTcGxpdCBJbnRlcmFjdGl2ZUNoYXJ0Q29tcG9uZW50IGFu
ZCBDb21taXRzVmlld2VyQ29tcG9uZW50IGludG8gc2VwYXJhdGUgZmlsZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTcxNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgSW50ZXJhY3Rp
dmVDaGFydENvbXBvbmVudCBhbmQgQ29tbWl0c1ZpZXdlckNvbXBvbmVudCBvdXQgb2YgYXBwLmpz
IGludG8gY29tbWl0cy12aWV3ZXIuanMKKyAgICAgICAgYW5kIGludGVyYWN0aXZlLWNoYXJ0Lmpz
IHJlc3BlY3RpdmVseSBzaW5jZSBhcHAuanMgaGFzIGdvdHRlbiByZWFsbHkgbGFyZ2UuCisKKyAg
ICAgICAgKiBwdWJsaWMvdjIvYXBwLmpzOgorICAgICAgICAqIHB1YmxpYy92Mi9jb21taXRzLXZp
ZXdlci5qczogQWRkZWQuCisgICAgICAgICogcHVibGljL3YyL2ludGVyYWN0aXZlLWNoYXJ0Lmpz
OiBBZGRlZC4KKwogMjAxNC0xMi0wMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBOZXcgcGVyZiBkYXNoYm9hcmQncyBjaGFydCBVSSBpcyBidWdneQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuanMgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FwcC5qcwppbmRleCAxMGExNmI3ZWE0NDRmZGUw
ZjYxMGM0ZTA2YjBhNzZlYjliYjk4MGFjLi41YWE4OWEwNTg2MzIwNTA4YzAwNDA1YTZlZTRhZWU1
NzhjOTYxYjEwIDEwMDc1NQotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yy
L2FwcC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2FwcC5qcwpA
QCAtNzYzLDgxOCArNzYzLDYgQEAgQXBwLlBhbmVDb250cm9sbGVyID0gRW1iZXIuT2JqZWN0Q29u
dHJvbGxlci5leHRlbmQoewogICAgIH0ub2JzZXJ2ZXMoJ25ld0FuYWx5c2lzVGFza05hbWUnKSwK
IH0pOwogCi1BcHAuSW50ZXJhY3RpdmVDaGFydENvbXBvbmVudCA9IEVtYmVyLkNvbXBvbmVudC5l
eHRlbmQoewotICAgIGNoYXJ0RGF0YTogbnVsbCwKLSAgICBzaG93WEF4aXM6IHRydWUsCi0gICAg
c2hvd1lBeGlzOiB0cnVlLAotICAgIGludGVyYWN0aXZlOiBmYWxzZSwKLSAgICBlbmFibGVTZWxl
Y3Rpb246IHRydWUsCi0gICAgY2xhc3NOYW1lczogWydjaGFydCddLAotICAgIGluaXQ6IGZ1bmN0
aW9uICgpCi0gICAgewotICAgICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgICB0aGlzLl9uZWVk
c0NvbnN0cnVjdGlvbiA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMgPSBbXTsK
LSAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZSh0aGlzLl91cGRhdGVEaW1lbnNpb25zSWZOZWVkZWQu
YmluZCh0aGlzKSk7Ci0gICAgfSwKLSAgICBjaGFydERhdGFEaWRDaGFuZ2U6IGZ1bmN0aW9uICgp
Ci0gICAgewotICAgICAgICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwot
ICAgICAgICBpZiAoIWNoYXJ0RGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhp
cy5fbmVlZHNDb25zdHJ1Y3Rpb24gPSB0cnVlOwotICAgICAgICB0aGlzLl9jb25zdHJ1Y3RHcmFw
aElmUG9zc2libGUoY2hhcnREYXRhKTsKLSAgICB9Lm9ic2VydmVzKCdjaGFydERhdGEnKS5vbign
aW5pdCcpLAotICAgIGRpZEluc2VydEVsZW1lbnQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAg
ICB2YXIgY2hhcnREYXRhID0gdGhpcy5nZXQoJ2NoYXJ0RGF0YScpOwotICAgICAgICBpZiAoY2hh
cnREYXRhKQotICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0R3JhcGhJZlBvc3NpYmxlKGNoYXJ0
RGF0YSk7Ci0gICAgfSwKLSAgICB3aWxsQ2xlYXJSZW5kZXI6IGZ1bmN0aW9uICgpCi0gICAgewot
ICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKLSAg
ICAgICAgICAgICQoaXRlbVswXSkub2ZmKGl0ZW1bMV0sIGl0ZW1bMl0pOwotICAgICAgICB9KQot
ICAgIH0sCi0gICAgX2F0dGFjaEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnRO
YW1lLCBsaXN0ZW5lcikKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMucHVzaChb
dGFyZ2V0LCBldmVudE5hbWUsIGxpc3RlbmVyXSk7Ci0gICAgICAgICQodGFyZ2V0KS5vbihldmVu
dE5hbWUsIGxpc3RlbmVyKTsKLSAgICB9LAotICAgIF9jb25zdHJ1Y3RHcmFwaElmUG9zc2libGU6
IGZ1bmN0aW9uIChjaGFydERhdGEpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX25lZWRzQ29u
c3RydWN0aW9uIHx8ICF0aGlzLmdldCgnZWxlbWVudCcpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXQoJ2VsZW1lbnQnKTsKLQotICAgICAgICB0
aGlzLl94ID0gZDMudGltZS5zY2FsZSgpOwotICAgICAgICB0aGlzLl95ID0gZDMuc2NhbGUubGlu
ZWFyKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFRlYXIgZG93biB0aGUgb2xkIFNWRyBlbGVtZW50
LgotICAgICAgICB0aGlzLl9zdmdFbGVtZW50ID0gZDMuc2VsZWN0KGVsZW1lbnQpLmFwcGVuZCgi
c3ZnIikKLSAgICAgICAgICAgICAgICAuYXR0cigid2lkdGgiLCAiMTAwJSIpCi0gICAgICAgICAg
ICAgICAgLmF0dHIoImhlaWdodCIsICIxMDAlIik7Ci0KLSAgICAgICAgdmFyIHN2ZyA9IHRoaXMu
X3N2ZyA9IHRoaXMuX3N2Z0VsZW1lbnQuYXBwZW5kKCJnIik7Ci0KLSAgICAgICAgdmFyIGNsaXBJ
ZCA9IGVsZW1lbnQuaWQgKyAiLWNsaXAiOwotICAgICAgICB0aGlzLl9jbGlwUGF0aCA9IHN2Zy5h
cHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikKLSAgICAgICAgICAgIC5hdHRyKCJpZCIs
IGNsaXBJZCkKLSAgICAgICAgICAgIC5hcHBlbmQoInJlY3QiKTsKLQotICAgICAgICBpZiAodGhp
cy5nZXQoJ3Nob3dYQXhpcycpKSB7Ci0gICAgICAgICAgICB0aGlzLl94QXhpcyA9IGQzLnN2Zy5h
eGlzKCkuc2NhbGUodGhpcy5feCkub3JpZW50KCJib3R0b20iKS50aWNrcyg2KTsKLSAgICAgICAg
ICAgIHRoaXMuX3hBeGlzTGFiZWxzID0gc3ZnLmFwcGVuZCgiZyIpCi0gICAgICAgICAgICAgICAg
LmF0dHIoImNsYXNzIiwgInggYXhpcyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMu
Z2V0KCdzaG93WUF4aXMnKSkgewotICAgICAgICAgICAgdGhpcy5feUF4aXMgPSBkMy5zdmcuYXhp
cygpLnNjYWxlKHRoaXMuX3kpLm9yaWVudCgibGVmdCIpLnRpY2tzKDYpLnRpY2tGb3JtYXQoZDMu
Zm9ybWF0KCJzIikpOwotICAgICAgICAgICAgdGhpcy5feUF4aXNMYWJlbHMgPSBzdmcuYXBwZW5k
KCJnIikKLSAgICAgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAieSBheGlzIik7Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLl9jbGlwcGVkQ29udGFpbmVyID0gc3ZnLmFwcGVuZCgiZyIpCi0g
ICAgICAgICAgICAuYXR0cigiY2xpcC1wYXRoIiwgInVybCgjIiArIGNsaXBJZCArICIpIik7Ci0K
LSAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7Ci0gICAgICAgIHZhciB5U2NhbGUgPSB0aGlz
Ll95OwotICAgICAgICB0aGlzLl90aW1lTGluZSA9IGQzLnN2Zy5saW5lKCkKLSAgICAgICAgICAg
IC54KGZ1bmN0aW9uKHBvaW50KSB7IHJldHVybiB4U2NhbGUocG9pbnQudGltZSk7IH0pCi0gICAg
ICAgICAgICAueShmdW5jdGlvbihwb2ludCkgeyByZXR1cm4geVNjYWxlKHBvaW50LnZhbHVlKTsg
fSk7Ci0KLSAgICAgICAgdGhpcy5fY29uZmlkZW5jZUFyZWEgPSBkMy5zdmcuYXJlYSgpCi0vLyAg
ICAgICAgICAgIC5pbnRlcnBvbGF0ZSgiY2FyZGluYWwiKQotICAgICAgICAgICAgLngoZnVuY3Rp
b24ocG9pbnQpIHsgcmV0dXJuIHhTY2FsZShwb2ludC50aW1lKTsgfSkKLSAgICAgICAgICAgIC55
MChmdW5jdGlvbihwb2ludCkgeyByZXR1cm4gcG9pbnQuaW50ZXJ2YWwgPyB5U2NhbGUocG9pbnQu
aW50ZXJ2YWxbMF0pIDogbnVsbDsgfSkKLSAgICAgICAgICAgIC55MShmdW5jdGlvbihwb2ludCkg
eyByZXR1cm4gcG9pbnQuaW50ZXJ2YWwgPyB5U2NhbGUocG9pbnQuaW50ZXJ2YWxbMV0pIDogbnVs
bDsgfSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3BhdGhzKQotICAgICAgICAgICAgdGhpcy5fcGF0
aHMuZm9yRWFjaChmdW5jdGlvbiAocGF0aCkgeyBwYXRoLnJlbW92ZSgpOyB9KTsKLSAgICAgICAg
dGhpcy5fcGF0aHMgPSBbXTsKLSAgICAgICAgaWYgKHRoaXMuX2FyZWFzKQotICAgICAgICAgICAg
dGhpcy5fYXJlYXMuZm9yRWFjaChmdW5jdGlvbiAoYXJlYSkgeyBhcmVhLnJlbW92ZSgpOyB9KTsK
LSAgICAgICAgdGhpcy5fYXJlYXMgPSBbXTsKLSAgICAgICAgaWYgKHRoaXMuX2RvdHMpCi0gICAg
ICAgICAgICB0aGlzLl9kb3RzLmZvckVhY2goZnVuY3Rpb24gKGRvdCkgeyBkb3RzLnJlbW92ZSgp
OyB9KTsKLSAgICAgICAgdGhpcy5fZG90cyA9IFtdOwotICAgICAgICBpZiAodGhpcy5faGlnaGxp
Z2h0cykKLSAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodHMuZm9yRWFjaChmdW5jdGlvbiAoaGln
aGxpZ2h0KSB7IGhpZ2hsaWdodC5yZW1vdmUoKTsgfSk7Ci0gICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHMgPSBbXTsKLQotICAgICAgICB0aGlzLl9jdXJyZW50VGltZVNlcmllcyA9IGNoYXJ0RGF0YS5j
dXJyZW50LnRpbWVTZXJpZXNCeUNvbW1pdFRpbWUoKTsKLSAgICAgICAgdGhpcy5fY3VycmVudFRp
bWVTZXJpZXNEYXRhID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXMuc2VyaWVzKCk7Ci0gICAgICAg
IHRoaXMuX2Jhc2VsaW5lVGltZVNlcmllcyA9IGNoYXJ0RGF0YS5iYXNlbGluZSA/IGNoYXJ0RGF0
YS5iYXNlbGluZS50aW1lU2VyaWVzQnlDb21taXRUaW1lKCkgOiBudWxsOwotICAgICAgICB0aGlz
Ll90YXJnZXRUaW1lU2VyaWVzID0gY2hhcnREYXRhLnRhcmdldCA/IGNoYXJ0RGF0YS50YXJnZXQu
dGltZVNlcmllc0J5Q29tbWl0VGltZSgpIDogbnVsbDsKLQotICAgICAgICB0aGlzLl95QXhpc1Vu
aXQgPSBjaGFydERhdGEudW5pdDsKLQotICAgICAgICB2YXIgbWluTWF4ID0gdGhpcy5fbWluTWF4
Rm9yQWxsVGltZVNlcmllcygpOwotICAgICAgICB2YXIgc21hbGxFbm91Z2hWYWx1ZSA9IG1pbk1h
eFswXSAtIChtaW5NYXhbMV0gLSBtaW5NYXhbMF0pICogMTA7Ci0gICAgICAgIHZhciBsYXJnZUVu
b3VnaFZhbHVlID0gbWluTWF4WzFdICsgKG1pbk1heFsxXSAtIG1pbk1heFswXSkgKiAxMDsKLQot
ICAgICAgICAvLyBGSVhNRTogRmxpcCB0aGUgc2lkZXMgYmFzZWQgb24gc21hbGxlcklzQmV0dGVy
LW5lc3MuCi0gICAgICAgIGlmICh0aGlzLl9iYXNlbGluZVRpbWVTZXJpZXMpIHsKLSAgICAgICAg
ICAgIHZhciBkYXRhID0gdGhpcy5fYmFzZWxpbmVUaW1lU2VyaWVzLnNlcmllcygpOwotICAgICAg
ICAgICAgdGhpcy5fYXJlYXMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAgICAg
ICAgICAgLmFwcGVuZCgicGF0aCIpCi0gICAgICAgICAgICAgICAgLmRhdHVtKGRhdGEubWFwKGZ1
bmN0aW9uIChwb2ludCkgeyByZXR1cm4ge3RpbWU6IHBvaW50LnRpbWUsIHZhbHVlOiBwb2ludC52
YWx1ZSwgaW50ZXJ2YWw6IHBvaW50LmludGVydmFsID8gcG9pbnQuaW50ZXJ2YWwgOiBbcG9pbnQu
dmFsdWUsIGxhcmdlRW5vdWdoVmFsdWVdfTsgfSkpCi0gICAgICAgICAgICAgICAgLmF0dHIoImNs
YXNzIiwgImFyZWEgYmFzZWxpbmUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX3Rh
cmdldFRpbWVTZXJpZXMpIHsKLSAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fdGFyZ2V0VGlt
ZVNlcmllcy5zZXJpZXMoKTsKLSAgICAgICAgICAgIHRoaXMuX2FyZWFzLnB1c2godGhpcy5fY2xp
cHBlZENvbnRhaW5lcgotICAgICAgICAgICAgICAgIC5hcHBlbmQoInBhdGgiKQotICAgICAgICAg
ICAgICAgIC5kYXR1bShkYXRhLm1hcChmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHt0aW1lOiBw
b2ludC50aW1lLCB2YWx1ZTogcG9pbnQudmFsdWUsIGludGVydmFsOiBwb2ludC5pbnRlcnZhbCA/
IHBvaW50LmludGVydmFsIDogW3NtYWxsRW5vdWdoVmFsdWUsIHBvaW50LnZhbHVlXX07IH0pKQot
ICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJhcmVhIHRhcmdldCIpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX2FyZWFzLnB1c2godGhpcy5fY2xpcHBlZENvbnRhaW5lcgotICAg
ICAgICAgICAgLmFwcGVuZCgicGF0aCIpCi0gICAgICAgICAgICAuZGF0dW0odGhpcy5fY3VycmVu
dFRpbWVTZXJpZXNEYXRhKQotICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImFyZWEiKSk7Ci0K
LSAgICAgICAgdGhpcy5fcGF0aHMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCi0gICAgICAg
ICAgICAuYXBwZW5kKCJwYXRoIikKLSAgICAgICAgICAgIC5kYXR1bSh0aGlzLl9jdXJyZW50VGlt
ZVNlcmllc0RhdGEpCi0gICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAiY29tbWl0LXRpbWUtbGlu
ZSIpKTsKLQotICAgICAgICB0aGlzLl9kb3RzLnB1c2godGhpcy5fY2xpcHBlZENvbnRhaW5lcgot
ICAgICAgICAgICAgLnNlbGVjdEFsbCgiLmRvdCIpCi0gICAgICAgICAgICAgICAgLmRhdGEodGhp
cy5fY3VycmVudFRpbWVTZXJpZXNEYXRhKQotICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKCJj
aXJjbGUiKQotICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJkb3QiKQotICAgICAgICAg
ICAgICAgIC5hdHRyKCJyIiwgdGhpcy5nZXQoJ2NoYXJ0UG9pbnRSYWRpdXMnKSB8fCAxKSk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuZ2V0KCdpbnRlcmFjdGl2ZScpKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9hdHRhY2hFdmVudExpc3RlbmVyKGVsZW1lbnQsICJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1v
dmVkLmJpbmQodGhpcykpOwotICAgICAgICAgICAgdGhpcy5fYXR0YWNoRXZlbnRMaXN0ZW5lcihl
bGVtZW50LCAibW91c2VsZWF2ZSIsIHRoaXMuX21vdXNlTGVmdC5iaW5kKHRoaXMpKTsKLSAgICAg
ICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgIm1vdXNlZG93biIsIHRo
aXMuX21vdXNlRG93bi5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50
TGlzdGVuZXIoJChlbGVtZW50KS5wYXJlbnRzKCJbdGFiaW5kZXhdIiksICJrZXlkb3duIiwgdGhp
cy5fa2V5UHJlc3NlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0
ZW1MaW5lID0gdGhpcy5fY2xpcHBlZENvbnRhaW5lcgotICAgICAgICAgICAgICAgIC5hcHBlbmQo
ImxpbmUiKQotICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJjdXJyZW50LWl0ZW0iKTsK
LQotICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1DaXJjbGUgPSB0aGlzLl9jbGlwcGVkQ29u
dGFpbmVyCi0gICAgICAgICAgICAgICAgLmFwcGVuZCgiY2lyY2xlIikKLSAgICAgICAgICAgICAg
ICAuYXR0cigiY2xhc3MiLCAiZG90IGN1cnJlbnQtaXRlbSIpCi0gICAgICAgICAgICAgICAgLmF0
dHIoInIiLCAzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2JydXNoID0gbnVsbDsKLSAg
ICAgICAgaWYgKHRoaXMuZ2V0KCdlbmFibGVTZWxlY3Rpb24nKSkgewotICAgICAgICAgICAgdGhp
cy5fYnJ1c2ggPSBkMy5zdmcuYnJ1c2goKQotICAgICAgICAgICAgICAgIC54KHRoaXMuX3gpCi0g
ICAgICAgICAgICAgICAgLm9uKCJicnVzaCIsIHRoaXMuX2JydXNoQ2hhbmdlZC5iaW5kKHRoaXMp
KTsKLQotICAgICAgICAgICAgdGhpcy5fYnJ1c2hSZWN0ID0gdGhpcy5fY2xpcHBlZENvbnRhaW5l
cgotICAgICAgICAgICAgICAgIC5hcHBlbmQoImciKQotICAgICAgICAgICAgICAgIC5hdHRyKCJj
bGFzcyIsICJ4IGJydXNoIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl91cGRhdGVEb21h
aW4oKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlRGltZW5zaW9uc0lmTmVlZGVkKCk7Ci0KLSAgICAg
ICAgLy8gV29yayBhcm91bmQgdGhlIGZhY3QgdGhlIGJydXNoIGlzbid0IHNldCBpZiB3ZSB1cGRh
dGVkIGl0IHN5bmNocm9ub3VzbHkgaGVyZS4KLSAgICAgICAgc2V0VGltZW91dCh0aGlzLl9zZWxl
Y3Rpb25DaGFuZ2VkLmJpbmQodGhpcyksIDApOwotCi0gICAgICAgIHNldFRpbWVvdXQodGhpcy5f
c2VsZWN0ZWRJdGVtQ2hhbmdlZC5iaW5kKHRoaXMpLCAwKTsKLQotICAgICAgICB0aGlzLl9uZWVk
c0NvbnN0cnVjdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHRoaXMuX3Jhbmdlc0NoYW5nZWQoKTsK
LSAgICB9LAotICAgIF91cGRhdGVEb21haW46IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICB2
YXIgeERvbWFpbiA9IHRoaXMuZ2V0KCdkb21haW4nKTsKLSAgICAgICAgdmFyIGludHJpbnNpY1hE
b21haW4gPSB0aGlzLl9jb21wdXRlWEF4aXNEb21haW4odGhpcy5fY3VycmVudFRpbWVTZXJpZXNE
YXRhKTsKLSAgICAgICAgaWYgKCF4RG9tYWluKQotICAgICAgICAgICAgeERvbWFpbiA9IGludHJp
bnNpY1hEb21haW47Ci0gICAgICAgIHZhciBjdXJyZW50RG9tYWluID0gdGhpcy5feC5kb21haW4o
KTsKLSAgICAgICAgaWYgKGN1cnJlbnREb21haW4gJiYgQXBwLmRvbWFpbnNBcmVFcXVhbChjdXJy
ZW50RG9tYWluLCB4RG9tYWluKSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50RG9tYWluOwot
Ci0gICAgICAgIHZhciB5RG9tYWluID0gdGhpcy5fY29tcHV0ZVlBeGlzRG9tYWluKHhEb21haW5b
MF0sIHhEb21haW5bMV0pOwotICAgICAgICB0aGlzLl94LmRvbWFpbih4RG9tYWluKTsKLSAgICAg
ICAgdGhpcy5feS5kb21haW4oeURvbWFpbik7Ci0gICAgICAgIHJldHVybiB4RG9tYWluOwotICAg
IH0sCi0gICAgX3VwZGF0ZURpbWVuc2lvbnNJZk5lZWRlZDogZnVuY3Rpb24gKG5ld1NlbGVjdGlv
bikKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzLmdldCgnZWxlbWVudCcpKTsK
LQotICAgICAgICB2YXIgbmV3VG90YWxXaWR0aCA9IGVsZW1lbnQud2lkdGgoKTsKLSAgICAgICAg
dmFyIG5ld1RvdGFsSGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTsKLSAgICAgICAgaWYgKHRoaXMu
X3RvdGFsV2lkdGggPT0gbmV3VG90YWxXaWR0aCAmJiB0aGlzLl90b3RhbEhlaWdodCA9PSBuZXdU
b3RhbEhlaWdodCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl90b3RhbFdp
ZHRoID0gbmV3VG90YWxXaWR0aDsKLSAgICAgICAgdGhpcy5fdG90YWxIZWlnaHQgPSBuZXdUb3Rh
bEhlaWdodDsKLQotICAgICAgICBpZiAoIXRoaXMuX3JlbSkKLSAgICAgICAgICAgIHRoaXMuX3Jl
bSA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQp
LmZvbnRTaXplKTsKLSAgICAgICAgdmFyIHJlbSA9IHRoaXMuX3JlbTsKLQotICAgICAgICB2YXIg
cGFkZGluZyA9IDAuNSAqIHJlbTsKLSAgICAgICAgdmFyIG1hcmdpbiA9IHt0b3A6IHBhZGRpbmcs
IHJpZ2h0OiBwYWRkaW5nLCBib3R0b206IHBhZGRpbmcsIGxlZnQ6IHBhZGRpbmd9OwotICAgICAg
ICBpZiAodGhpcy5feEF4aXMpCi0gICAgICAgICAgICBtYXJnaW4uYm90dG9tICs9IHJlbTsKLSAg
ICAgICAgaWYgKHRoaXMuX3lBeGlzKQotICAgICAgICAgICAgbWFyZ2luLmxlZnQgKz0gMyAqIHJl
bTsKLQotICAgICAgICB0aGlzLl9tYXJnaW4gPSBtYXJnaW47Ci0gICAgICAgIHRoaXMuX2NvbnRl
bnRXaWR0aCA9IHRoaXMuX3RvdGFsV2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDsK
LSAgICAgICAgdGhpcy5fY29udGVudEhlaWdodCA9IHRoaXMuX3RvdGFsSGVpZ2h0IC0gbWFyZ2lu
LnRvcCAtIG1hcmdpbi5ib3R0b207Ci0KLSAgICAgICAgdGhpcy5fc3ZnLmF0dHIoInRyYW5zZm9y
bSIsICJ0cmFuc2xhdGUoIiArIG1hcmdpbi5sZWZ0ICsgIiwiICsgbWFyZ2luLnRvcCArICIpIik7
Ci0KLSAgICAgICAgdGhpcy5fY2xpcFBhdGgKLSAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsIHRo
aXMuX2NvbnRlbnRXaWR0aCkKLSAgICAgICAgICAgIC5hdHRyKCJoZWlnaHQiLCB0aGlzLl9jb250
ZW50SGVpZ2h0KTsKLQotICAgICAgICB0aGlzLl94LnJhbmdlKFswLCB0aGlzLl9jb250ZW50V2lk
dGhdKTsKLSAgICAgICAgdGhpcy5feS5yYW5nZShbdGhpcy5fY29udGVudEhlaWdodCwgMF0pOwot
Ci0gICAgICAgIGlmICh0aGlzLl94QXhpcykgewotICAgICAgICAgICAgdGhpcy5feEF4aXMudGlj
a1NpemUoLXRoaXMuX2NvbnRlbnRIZWlnaHQpOwotICAgICAgICAgICAgdGhpcy5feEF4aXNMYWJl
bHMuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCIgKyB0aGlzLl9jb250ZW50SGVpZ2h0
ICsgIikiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl95QXhpcykKLSAgICAgICAg
ICAgIHRoaXMuX3lBeGlzLnRpY2tTaXplKC10aGlzLl9jb250ZW50V2lkdGgpOwotCi0gICAgICAg
IGlmICh0aGlzLl9jdXJyZW50SXRlbUxpbmUpIHsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJ
dGVtTGluZQotICAgICAgICAgICAgICAgIC5hdHRyKCJ5MSIsIDApCi0gICAgICAgICAgICAgICAg
LmF0dHIoInkyIiwgbWFyZ2luLnRvcCArIHRoaXMuX2NvbnRlbnRIZWlnaHQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fcmVsYXlvdXREYXRhQW5kQXhlcyh0aGlzLl9jdXJyZW50U2VsZWN0
aW9uKCkpOwotICAgIH0sCi0gICAgX3VwZGF0ZUJydXNoOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fYnJ1c2hSZWN0Ci0gICAgICAgICAgICAuY2FsbCh0aGlzLl9icnVzaCkKLSAg
ICAgICAgLnNlbGVjdEFsbCgicmVjdCIpCi0gICAgICAgICAgICAuYXR0cigieSIsIDEpCi0gICAg
ICAgICAgICAuYXR0cigiaGVpZ2h0IiwgdGhpcy5fY29udGVudEhlaWdodCAtIDIpOwotICAgICAg
ICB0aGlzLl91cGRhdGVTZWxlY3Rpb25Ub29sYmFyKCk7Ci0gICAgfSwKLSAgICBfcmVsYXlvdXRE
YXRhQW5kQXhlczogZnVuY3Rpb24gKHNlbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciB0aW1l
bGluZSA9IHRoaXMuX3RpbWVMaW5lOwotICAgICAgICB0aGlzLl9wYXRocy5mb3JFYWNoKGZ1bmN0
aW9uIChwYXRoKSB7IHBhdGguYXR0cigiZCIsIHRpbWVsaW5lKTsgfSk7Ci0KLSAgICAgICAgdmFy
IGNvbmZpZGVuY2VBcmVhID0gdGhpcy5fY29uZmlkZW5jZUFyZWE7Ci0gICAgICAgIHRoaXMuX2Fy
ZWFzLmZvckVhY2goZnVuY3Rpb24gKHBhdGgpIHsgcGF0aC5hdHRyKCJkIiwgY29uZmlkZW5jZUFy
ZWEpOyB9KTsKLQotICAgICAgICB2YXIgeFNjYWxlID0gdGhpcy5feDsKLSAgICAgICAgdmFyIHlT
Y2FsZSA9IHRoaXMuX3k7Ci0gICAgICAgIHRoaXMuX2RvdHMuZm9yRWFjaChmdW5jdGlvbiAoZG90
KSB7Ci0gICAgICAgICAgICBkb3QKLSAgICAgICAgICAgICAgICAuYXR0cigiY3giLCBmdW5jdGlv
bihtZWFzdXJlbWVudCkgeyByZXR1cm4geFNjYWxlKG1lYXN1cmVtZW50LnRpbWUpOyB9KQotICAg
ICAgICAgICAgICAgIC5hdHRyKCJjeSIsIGZ1bmN0aW9uKG1lYXN1cmVtZW50KSB7IHJldHVybiB5
U2NhbGUobWVhc3VyZW1lbnQudmFsdWUpOyB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHRoaXMu
X3VwZGF0ZU1hcmtlZERvdHMoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlSGlnaGxpZ2h0UG9zaXRp
b25zKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVJhbmdlQmFyUmVjdHMoKTsKLQotICAgICAgICBp
ZiAodGhpcy5fYnJ1c2gpIHsKLSAgICAgICAgICAgIGlmIChzZWxlY3Rpb24pCi0gICAgICAgICAg
ICAgICAgdGhpcy5fYnJ1c2guZXh0ZW50KHNlbGVjdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgdGhpcy5fYnJ1c2guY2xlYXIoKTsKLSAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZUJydXNoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50SXRl
bUluZGljYXRvcnMoKTsKLQotICAgICAgICBpZiAodGhpcy5feEF4aXMpCi0gICAgICAgICAgICB0
aGlzLl94QXhpc0xhYmVscy5jYWxsKHRoaXMuX3hBeGlzKTsKLSAgICAgICAgaWYgKCF0aGlzLl95
QXhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl95QXhpc0xhYmVscy5j
YWxsKHRoaXMuX3lBeGlzKTsKLSAgICAgICAgaWYgKHRoaXMuX3lBeGlzVW5pdENvbnRhaW5lcikK
LSAgICAgICAgICAgIHRoaXMuX3lBeGlzVW5pdENvbnRhaW5lci5yZW1vdmUoKTsKLSAgICAgICAg
dGhpcy5feUF4aXNVbml0Q29udGFpbmVyID0gdGhpcy5feUF4aXNMYWJlbHMuYXBwZW5kKCJ0ZXh0
IikKLSAgICAgICAgICAgIC5hdHRyKCJ4IiwgMC41ICogdGhpcy5fcmVtKQotICAgICAgICAgICAg
LmF0dHIoInkiLCAwLjIgKiB0aGlzLl9yZW0pCi0gICAgICAgICAgICAuYXR0cigiZHkiLCAwLjgg
KiB0aGlzLl9yZW0pCi0gICAgICAgICAgICAuc3R5bGUoInRleHQtYW5jaG9yIiwgInN0YXJ0IikK
LSAgICAgICAgICAgIC5zdHlsZSgiei1pbmRleCIsICIxMDAiKQotICAgICAgICAgICAgLnRleHQo
dGhpcy5feUF4aXNVbml0KTsKLSAgICB9LAotICAgIF91cGRhdGVNYXJrZWREb3RzOiBmdW5jdGlv
biAoKSB7Ci0gICAgICAgIHZhciBtYXJrZWRQb2ludHMgPSB0aGlzLmdldCgnbWFya2VkUG9pbnRz
JykgfHwge307Ci0gICAgICAgIHZhciBkZWZhdWx0RG90UmFkaXVzID0gdGhpcy5nZXQoJ2NoYXJ0
UG9pbnRSYWRpdXMnKSB8fCAxOwotICAgICAgICB0aGlzLl9kb3RzLmZvckVhY2goZnVuY3Rpb24g
KGRvdCkgewotICAgICAgICAgICAgZG90LmNsYXNzZWQoJ21hcmtlZCcsIGZ1bmN0aW9uIChwb2lu
dCkgeyByZXR1cm4gbWFya2VkUG9pbnRzW3BvaW50Lm1lYXN1cmVtZW50LmlkKCldOyB9KTsKLSAg
ICAgICAgICAgIGRvdC5hdHRyKCdyJywgZnVuY3Rpb24gKHBvaW50KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1hcmtlZFBvaW50c1twb2ludC5tZWFzdXJlbWVudC5pZCgpXSA/IGRlZmF1bHRE
b3RSYWRpdXMgKiAxLjUgOiBkZWZhdWx0RG90UmFkaXVzOyB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fS5vYnNlcnZlcygnbWFya2VkUG9pbnRzJyksCi0gICAgX3VwZGF0ZUhpZ2hsaWdodFBvc2l0aW9u
czogZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgeFNjYWxlID0gdGhpcy5feDsKLSAgICAgICAg
dmFyIHlTY2FsZSA9IHRoaXMuX3k7Ci0gICAgICAgIHZhciB5MiA9IHRoaXMuX21hcmdpbi50b3Ag
KyB0aGlzLl9jb250ZW50SGVpZ2h0OwotICAgICAgICB0aGlzLl9oaWdobGlnaHRzLmZvckVhY2go
ZnVuY3Rpb24gKGhpZ2hsaWdodCkgewotICAgICAgICAgICAgaGlnaGxpZ2h0Ci0gICAgICAgICAg
ICAgICAgLmF0dHIoInkxIiwgMCkKLSAgICAgICAgICAgICAgICAuYXR0cigieTIiLCB5MikKLSAg
ICAgICAgICAgICAgICAuYXR0cigieSIsIGZ1bmN0aW9uKG1lYXN1cmVtZW50KSB7IHJldHVybiB5
U2NhbGUobWVhc3VyZW1lbnQudmFsdWUpOyB9KQotICAgICAgICAgICAgICAgIC5hdHRyKCJ4MSIs
IGZ1bmN0aW9uKG1lYXN1cmVtZW50KSB7IHJldHVybiB4U2NhbGUobWVhc3VyZW1lbnQudGltZSk7
IH0pCi0gICAgICAgICAgICAgICAgLmF0dHIoIngyIiwgZnVuY3Rpb24obWVhc3VyZW1lbnQpIHsg
cmV0dXJuIHhTY2FsZShtZWFzdXJlbWVudC50aW1lKTsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0s
Ci0gICAgX2NvbXB1dGVYQXhpc0RvbWFpbjogZnVuY3Rpb24gKHRpbWVTZXJpZXMpCi0gICAgewot
ICAgICAgICB2YXIgZXh0ZW50ID0gZDMuZXh0ZW50KHRpbWVTZXJpZXMsIGZ1bmN0aW9uKHBvaW50
KSB7IHJldHVybiBwb2ludC50aW1lOyB9KTsKLSAgICAgICAgdmFyIG1hcmdpbiA9IDM2MDAgKiAx
MDAwOyAvLyBVc2UgeC5pbnZlcnNlIHRvIGNvbXB1dGUgdGhlIHJpZ2h0IGFtb3VudCBmcm9tIGEg
bWFyZ2luLgotICAgICAgICByZXR1cm4gWytleHRlbnRbMF0gLSBtYXJnaW4sICtleHRlbnRbMV0g
KyBtYXJnaW5dOwotICAgIH0sCi0gICAgX2NvbXB1dGVZQXhpc0RvbWFpbjogZnVuY3Rpb24gKHN0
YXJ0VGltZSwgZW5kVGltZSkKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX21pbk1h
eEZvckFsbFRpbWVTZXJpZXMoc3RhcnRUaW1lLCBlbmRUaW1lKTsKLSAgICAgICAgdmFyIG1pbiA9
IHJhbmdlWzBdOwotICAgICAgICB2YXIgbWF4ID0gcmFuZ2VbMV07Ci0gICAgICAgIGlmIChtYXgg
PCBtaW4pCi0gICAgICAgICAgICBtaW4gPSBtYXggPSAwOwotICAgICAgICB2YXIgZGlmZiA9IG1h
eCAtIG1pbjsKLSAgICAgICAgdmFyIG1hcmdpbiA9IGRpZmYgKiAwLjA1OwotCi0gICAgICAgIHlF
eHRlbnQgPSBbbWluIC0gbWFyZ2luLCBtYXggKyBtYXJnaW5dOwotLy8gICAgICAgIGlmICh5TWlu
ICE9PSB1bmRlZmluZWQpCi0vLyAgICAgICAgICAgIHlFeHRlbnRbMF0gPSBwYXJzZUludCh5TWlu
KTsKLSAgICAgICAgcmV0dXJuIHlFeHRlbnQ7Ci0gICAgfSwKLSAgICBfbWluTWF4Rm9yQWxsVGlt
ZVNlcmllczogZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSkKLSAgICB7Ci0gICAgICAgIHZh
ciBjdXJyZW50UmFuZ2UgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllcy5taW5NYXhGb3JUaW1lUmFu
Z2Uoc3RhcnRUaW1lLCBlbmRUaW1lKTsKLSAgICAgICAgdmFyIGJhc2VsaW5lUmFuZ2UgPSB0aGlz
Ll9iYXNlbGluZVRpbWVTZXJpZXMgPyB0aGlzLl9iYXNlbGluZVRpbWVTZXJpZXMubWluTWF4Rm9y
VGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSkgOiBbTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVy
Lk1JTl9WQUxVRV07Ci0gICAgICAgIHZhciB0YXJnZXRSYW5nZSA9IHRoaXMuX3RhcmdldFRpbWVT
ZXJpZXMgPyB0aGlzLl90YXJnZXRUaW1lU2VyaWVzLm1pbk1heEZvclRpbWVSYW5nZShzdGFydFRp
bWUsIGVuZFRpbWUpIDogW051bWJlci5NQVhfVkFMVUUsIE51bWJlci5NSU5fVkFMVUVdOwotICAg
ICAgICByZXR1cm4gWwotICAgICAgICAgICAgTWF0aC5taW4oY3VycmVudFJhbmdlWzBdLCBiYXNl
bGluZVJhbmdlWzBdLCB0YXJnZXRSYW5nZVswXSksCi0gICAgICAgICAgICBNYXRoLm1heChjdXJy
ZW50UmFuZ2VbMV0sIGJhc2VsaW5lUmFuZ2VbMV0sIHRhcmdldFJhbmdlWzFdKSwKLSAgICAgICAg
XTsKLSAgICB9LAotICAgIF9jdXJyZW50U2VsZWN0aW9uOiBmdW5jdGlvbiAoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2JydXNoICYmICF0aGlzLl9icnVzaC5lbXB0eSgpID8gdGhpcy5f
YnJ1c2guZXh0ZW50KCkgOiBudWxsOwotICAgIH0sCi0gICAgX2RvbWFpbkNoYW5nZWQ6IGZ1bmN0
aW9uICgpCi0gICAgewotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fY3VycmVudFNlbGVj
dGlvbigpIHx8IHRoaXMuZ2V0KCdzaGFyZWRTZWxlY3Rpb24nKTsKLSAgICAgICAgdmFyIG5ld1hE
b21haW4gPSB0aGlzLl91cGRhdGVEb21haW4oKTsKLQotICAgICAgICBpZiAoc2VsZWN0aW9uICYm
IG5ld1hEb21haW4gJiYgc2VsZWN0aW9uWzBdIDw9IG5ld1hEb21haW5bMF0gJiYgbmV3WERvbWFp
blsxXSA8PSBzZWxlY3Rpb25bMV0pCi0gICAgICAgICAgICBzZWxlY3Rpb24gPSBudWxsOyAvLyBP
dGhlcndpc2UgdGhlIHVzZXIgaGFzIG5vIHdheSBvZiBjbGVhcmluZyB0aGUgc2VsZWN0aW9uLgot
Ci0gICAgICAgIHRoaXMuX3JlbGF5b3V0RGF0YUFuZEF4ZXMoc2VsZWN0aW9uKTsKLSAgICB9Lm9i
c2VydmVzKCdkb21haW4nKSwKLSAgICBfc2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbih0aGlzLmdldCgnc2VsZWN0aW9uJykp
OwotICAgIH0ub2JzZXJ2ZXMoJ3NlbGVjdGlvbicpLAotICAgIF91cGRhdGVTZWxlY3Rpb246IGZ1
bmN0aW9uIChuZXdTZWxlY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2JydXNoKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjdXJyZW50U2VsZWN0aW9uID0gdGhp
cy5fY3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICBpZiAobmV3U2VsZWN0aW9uICYmIGN1cnJl
bnRTZWxlY3Rpb24gJiYgQXBwLmRvbWFpbnNBcmVFcXVhbChuZXdTZWxlY3Rpb24sIGN1cnJlbnRT
ZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBkb21haW4gPSB0
aGlzLl94LmRvbWFpbigpOwotICAgICAgICBpZiAoIW5ld1NlbGVjdGlvbiB8fCBBcHAuZG9tYWlu
c0FyZUVxdWFsKGRvbWFpbiwgbmV3U2VsZWN0aW9uKSkKLSAgICAgICAgICAgIHRoaXMuX2JydXNo
LmNsZWFyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX2JydXNoLmV4dGVudChu
ZXdTZWxlY3Rpb24pOwotICAgICAgICB0aGlzLl91cGRhdGVCcnVzaCgpOwotCi0gICAgICAgIHRo
aXMuX3NldEN1cnJlbnRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKLSAgICB9LAotICAgIF9icnVz
aENoYW5nZWQ6IGZ1bmN0aW9uICgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fYnJ1c2guZW1w
dHkoKSkgewotICAgICAgICAgICAgaWYgKCF0aGlzLl9icnVzaEV4dGVudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3Rpb25Jc0xvY2tlZCcs
IGZhbHNlKTsKLSAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRTZWxlY3Rpb24odW5kZWZpbmVk
KTsKLQotICAgICAgICAgICAgLy8gQXZvaWQgbG9ja2luZyB0aGUgaW5kaWNhdG9yIGluIF9tb3Vz
ZURvd24gd2hlbiB0aGUgYnJ1c2ggd2FzIGNsZWFyZWQgaW4gdGhlIHNhbWUgbW91c2Vkb3duIGV2
ZW50LgotICAgICAgICAgICAgdGhpcy5fYnJ1c2hKdXN0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgICAgICBzZWxmLl9icnVzaEp1c3RDaGFuZ2VkID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9LCAwKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5zZXQoJ3NlbGVjdGlvbklzTG9ja2VkJywgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuX3Nl
dEN1cnJlbnRTZWxlY3Rpb24odGhpcy5fYnJ1c2guZXh0ZW50KCkpOwotICAgIH0sCi0gICAgX2tl
eVByZXNzZWQ6IGZ1bmN0aW9uIChldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY3Vy
cmVudEl0ZW1JbmRleCB8fCB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgdmFyIG5ld0luZGV4OwotICAgICAgICBzd2l0Y2ggKGV2ZW50Lmtl
eUNvZGUpIHsKLSAgICAgICAgY2FzZSAzNzogLy8gTGVmdAotICAgICAgICAgICAgbmV3SW5kZXgg
PSB0aGlzLl9jdXJyZW50SXRlbUluZGV4IC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIDM5OiAvLyBSaWdodAotICAgICAgICAgICAgbmV3SW5kZXggPSB0aGlzLl9jdXJyZW50
SXRlbUluZGV4ICsgMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM4OiAvLyBV
cAotICAgICAgICBjYXNlIDQwOiAvLyBEb3duCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVbmxpa2UgbW91c2Vtb3ZlLCBrZXlk
b3duIHNob3VsZG4ndCBtb3ZlIG9mZiB0aGUgZWRnZS4KLSAgICAgICAgaWYgKHRoaXMuX2N1cnJl
bnRUaW1lU2VyaWVzRGF0YVtuZXdJbmRleF0pCi0gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50
SXRlbShuZXdJbmRleCk7Ci0gICAgfSwKLSAgICBfbW91c2VNb3ZlZDogZnVuY3Rpb24gKGV2ZW50
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4gfHwgdGhpcy5fY3VycmVudFNlbGVj
dGlvbigpIHx8IHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBwb2ludCA9IHRoaXMuX21vdXNlUG9pbnRJbkdyYXBoKGV2ZW50KTsKLQot
ICAgICAgICB0aGlzLl9zZWxlY3RDbG9zZXN0UG9pbnRUb01vdXNlQXNDdXJyZW50SXRlbShwb2lu
dCk7Ci0gICAgfSwKLSAgICBfbW91c2VMZWZ0OiBmdW5jdGlvbiAoZXZlbnQpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX21hcmdpbiB8fCB0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9zZWxlY3RDbG9zZXN0UG9pbnRUb01vdXNl
QXNDdXJyZW50SXRlbShudWxsKTsKLSAgICB9LAotICAgIF9tb3VzZURvd246IGZ1bmN0aW9uIChl
dmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRT
ZWxlY3Rpb24oKSB8fCB0aGlzLl9icnVzaEp1c3RDaGFuZ2VkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciBwb2ludCA9IHRoaXMuX21vdXNlUG9pbnRJbkdyYXBoKGV2ZW50KTsK
LSAgICAgICAgaWYgKCFwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAo
dGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVt
TG9ja2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLnNldCgnc2VsZWN0ZWRJdGVtJywgbnVs
bCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9jdXJy
ZW50SXRlbUxvY2tlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3NlbGVjdENsb3Nlc3RQb2ludFRv
TW91c2VBc0N1cnJlbnRJdGVtKHBvaW50KTsKLSAgICB9LAotICAgIF9tb3VzZVBvaW50SW5HcmFw
aDogZnVuY3Rpb24gKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG9mZnNldCA9ICQodGhpcy5n
ZXQoJ2VsZW1lbnQnKSkub2Zmc2V0KCk7Ci0gICAgICAgIGlmICghb2Zmc2V0IHx8ICEkKGV2ZW50
LnRhcmdldCkuY2xvc2VzdCgnc3ZnJykubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICAgICAgdmFyIHBvaW50ID0gewotICAgICAgICAgICAgeDogZXZlbnQucGFnZVggLSBv
ZmZzZXQubGVmdCAtIHRoaXMuX21hcmdpbi5sZWZ0LAotICAgICAgICAgICAgeTogZXZlbnQucGFn
ZVkgLSBvZmZzZXQudG9wIC0gdGhpcy5fbWFyZ2luLnRvcAotICAgICAgICB9OwotCi0gICAgICAg
IHZhciB4U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKLSAg
ICAgICAgdmFyIHhEb21haW4gPSB4U2NhbGUuZG9tYWluKCk7Ci0gICAgICAgIHZhciB5RG9tYWlu
ID0geVNjYWxlLmRvbWFpbigpOwotICAgICAgICBpZiAocG9pbnQueCA+PSB4U2NhbGUoeERvbWFp
blswXSkgJiYgcG9pbnQueCA8PSB4U2NhbGUoeERvbWFpblsxXSkKLSAgICAgICAgICAgICYmIHBv
aW50LnkgPD0geVNjYWxlKHlEb21haW5bMF0pICYmIHBvaW50LnkgPj0geVNjYWxlKHlEb21haW5b
MV0pKQotICAgICAgICAgICAgcmV0dXJuIHBvaW50OwotCi0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIH0sCi0gICAgX3NlbGVjdENsb3Nlc3RQb2ludFRvTW91c2VBc0N1cnJlbnRJdGVtOiBmdW5j
dGlvbiAocG9pbnQpCi0gICAgewotICAgICAgICB2YXIgeFNjYWxlID0gdGhpcy5feDsKLSAgICAg
ICAgdmFyIHlTY2FsZSA9IHRoaXMuX3k7Ci0gICAgICAgIHZhciBkaXN0YW5jZUhldXJpc3RpY3Mg
PSBmdW5jdGlvbiAobSkgewotICAgICAgICAgICAgdmFyIG1YID0geFNjYWxlKG0udGltZSk7Ci0g
ICAgICAgICAgICB2YXIgbVkgPSB5U2NhbGUobS52YWx1ZSk7Ci0gICAgICAgICAgICB2YXIgeERp
ZmYgPSBtWCAtIHBvaW50Lng7Ci0gICAgICAgICAgICB2YXIgeURpZmYgPSBtWSAtIHBvaW50Lnk7
Ci0gICAgICAgICAgICByZXR1cm4geERpZmYgKiB4RGlmZiArIHlEaWZmICogeURpZmYgLyAxNjsg
Ly8gRmF2b3IgaG9yaXpvbnRhbCBhZmZpbml0eS4KLSAgICAgICAgfTsKLSAgICAgICAgZGlzdGFu
Y2VIZXVyaXN0aWNzID0gZnVuY3Rpb24gKG0pIHsKLSAgICAgICAgICAgIHJldHVybiBNYXRoLmFi
cyh4U2NhbGUobS50aW1lKSAtIHBvaW50LngpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5l
d0l0ZW1JbmRleDsKLSAgICAgICAgaWYgKHBvaW50ICYmICF0aGlzLl9jdXJyZW50U2VsZWN0aW9u
KCkpIHsKLSAgICAgICAgICAgIHZhciBkaXN0YW5jZXMgPSB0aGlzLl9jdXJyZW50VGltZVNlcmll
c0RhdGEubWFwKGRpc3RhbmNlSGV1cmlzdGljcyk7Ci0gICAgICAgICAgICB2YXIgbWluRGlzdGFu
Y2UgPSBOdW1iZXIuTUFYX1ZBTFVFOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
aXN0YW5jZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VzW2ld
IDwgbWluRGlzdGFuY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3SXRlbUluZGV4ID0gaTsK
LSAgICAgICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZXNbaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2V0
Q3VycmVudEl0ZW0obmV3SXRlbUluZGV4KTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9u
VG9vbGJhcigpOwotICAgIH0sCi0gICAgX2N1cnJlbnRUaW1lQ2hhbmdlZDogZnVuY3Rpb24gKCkK
LSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRTZWxlY3Rp
b24oKSB8fCB0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCkKLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIHZhciBjdXJyZW50VGltZSA9IHRoaXMuZ2V0KCdjdXJyZW50VGltZScpOwotICAgICAg
ICBpZiAoY3VycmVudFRpbWUpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5fY3VycmVudFRpbWVTZXJpZXNEYXRhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHBvaW50ID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhW2ldOwotICAgICAgICAgICAg
ICAgIGlmIChwb2ludC50aW1lID49IGN1cnJlbnRUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NldEN1cnJlbnRJdGVtKGksIC8qIGRvTm90Tm90aWZ5ICovIHRydWUpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3NldEN1cnJlbnRJdGVtKHVuZGVmaW5lZCwgLyogZG9O
b3ROb3RpZnkgKi8gdHJ1ZSk7Ci0gICAgfS5vYnNlcnZlcygnY3VycmVudFRpbWUnKSwKLSAgICBf
c2V0Q3VycmVudEl0ZW06IGZ1bmN0aW9uIChuZXdJdGVtSW5kZXgsIGRvTm90Tm90aWZ5KQotICAg
IHsKLSAgICAgICAgaWYgKG5ld0l0ZW1JbmRleCA9PT0gdGhpcy5fY3VycmVudEl0ZW1JbmRleCkg
ewotICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKQotICAgICAgICAgICAg
ICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0ZW0nLCB0aGlzLmdldCgnY3VycmVudEl0ZW0nKSA/IHRo
aXMuZ2V0KCdjdXJyZW50SXRlbScpLm1lYXN1cmVtZW50LmlkKCkgOiBudWxsKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBuZXdJdGVtID0gdGhpcy5fY3Vy
cmVudFRpbWVTZXJpZXNEYXRhW25ld0l0ZW1JbmRleF07Ci0gICAgICAgIHRoaXMuX2JydXNoRXh0
ZW50ID0gdW5kZWZpbmVkOwotICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUluZGV4ID0gbmV3SXRl
bUluZGV4OwotCi0gICAgICAgIGlmICghbmV3SXRlbSkgewotICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudEl0ZW1Mb2NrZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3RlZEl0
ZW0nLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRJdGVt
SW5kaWNhdG9ycygpOwotCi0gICAgICAgIGlmICghZG9Ob3ROb3RpZnkpCi0gICAgICAgICAgICB0
aGlzLnNldCgnY3VycmVudFRpbWUnLCBuZXdJdGVtID8gbmV3SXRlbS50aW1lIDogdW5kZWZpbmVk
KTsKLQotICAgICAgICB0aGlzLnNldCgnY3VycmVudEl0ZW0nLCBuZXdJdGVtKTsKLSAgICAgICAg
aWYgKHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKQotICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVj
dGVkSXRlbScsIG5ld0l0ZW0gPyBuZXdJdGVtLm1lYXN1cmVtZW50LmlkKCkgOiBudWxsKTsKLSAg
ICB9LAotICAgIF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAg
ICAgaWYgKCF0aGlzLl9tYXJnaW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IHNlbGVjdGVkSWQgPSB0aGlzLmdldCgnc2VsZWN0ZWRJdGVtJyk7Ci0gICAgICAgIHZhciBjdXJy
ZW50SXRlbSA9IHRoaXMuZ2V0KCdjdXJyZW50SXRlbScpOwotICAgICAgICBpZiAoY3VycmVudEl0
ZW0gJiYgY3VycmVudEl0ZW0ubWVhc3VyZW1lbnQuaWQoKSA9PSBzZWxlY3RlZElkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzZXJpZXMgPSB0aGlzLl9jdXJyZW50VGltZVNl
cmllc0RhdGE7Ci0gICAgICAgIHZhciBzZWxlY3RlZEl0ZW1JbmRleCA9IHVuZGVmaW5lZDsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgIGlmIChzZXJpZXNbaV0ubWVhc3VyZW1lbnQuaWQoKSA9PSBzZWxlY3RlZElkKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKG51bGwpOwotICAgICAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLl9z
ZXRDdXJyZW50SXRlbShpKTsKLSAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25U
b29sYmFyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfS5vYnNlcnZlcygnc2VsZWN0ZWRJdGVtJykub24oJ2luaXQnKSwKLSAgICBfaGln
aGxpZ2h0ZWRJdGVtc0NoYW5nZWQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKCF0aGlzLl9t
YXJnaW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGhpZ2hsaWdodGVkSXRl
bXMgPSB0aGlzLmdldCgnaGlnaGxpZ2h0ZWRJdGVtcycpOwotCi0gICAgICAgIHZhciBkYXRhID0g
dGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1
cm4gaGlnaGxpZ2h0ZWRJdGVtc1tpdGVtLm1lYXN1cmVtZW50LmlkKCldOyB9KTsKLQotICAgICAg
ICBpZiAodGhpcy5faGlnaGxpZ2h0cy5sZW5ndGgpCi0gICAgICAgICAgICB0aGlzLl9oaWdobGln
aHRzLmZvckVhY2goZnVuY3Rpb24gKGhpZ2hsaWdodCkgeyBoaWdobGlnaHQucmVtb3ZlKCk7IH0p
OwotCi0gICAgICAgIHRoaXMuX2hpZ2hsaWdodHMucHVzaCh0aGlzLl9jbGlwcGVkQ29udGFpbmVy
Ci0gICAgICAgICAgICAuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0IikKLSAgICAgICAgICAgICAgICAu
ZGF0YShkYXRhKQotICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKCJsaW5lIikKLSAgICAgICAg
ICAgICAgICAuYXR0cigiY2xhc3MiLCAiaGlnaGxpZ2h0IikpOwotCi0gICAgICAgIHRoaXMuX3Vw
ZGF0ZUhpZ2hsaWdodFBvc2l0aW9ucygpOwotCi0gICAgfS5vYnNlcnZlcygnaGlnaGxpZ2h0ZWRJ
dGVtcycpLAotICAgIF9yYW5nZXNDaGFuZ2VkOiBmdW5jdGlvbiAoKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9jdXJyZW50VGltZVNlcmllcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBmdW5jdGlvbiBtaWRQb2ludChmaXJzdFBvaW50LCBzZWNvbmRQb2ludCkgewotICAgICAg
ICAgICAgaWYgKGZpcnN0UG9pbnQgJiYgc2Vjb25kUG9pbnQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuICgrZmlyc3RQb2ludC50aW1lICsgK3NlY29uZFBvaW50LnRpbWUpIC8gMjsKLSAgICAgICAg
ICAgIGlmIChmaXJzdFBvaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFBvaW50LnRp
bWU7Ci0gICAgICAgICAgICByZXR1cm4gc2Vjb25kUG9pbnQudGltZTsKLSAgICAgICAgfQotICAg
ICAgICB2YXIgY3VycmVudFRpbWVTZXJpZXMgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllczsKLSAg
ICAgICAgdmFyIGxpbmtSb3V0ZSA9IHRoaXMuZ2V0KCdyYW5nZVJvdXRlJyk7Ci0gICAgICAgIHRo
aXMuc2V0KCdyYW5nZUJhcnMnLCAodGhpcy5nZXQoJ3JhbmdlcycpIHx8IFtdKS5tYXAoZnVuY3Rp
b24gKHJhbmdlKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSBjdXJyZW50VGltZVNlcmllcy5m
aW5kUG9pbnRCeU1lYXN1cmVtZW50SWQocmFuZ2UuZ2V0KCdzdGFydFJ1bicpKTsKLSAgICAgICAg
ICAgIHZhciBlbmQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeU1lYXN1cmVtZW50SWQo
cmFuZ2UuZ2V0KCdlbmRSdW4nKSk7Ci0gICAgICAgICAgICByZXR1cm4gRW1iZXIuT2JqZWN0LmNy
ZWF0ZSh7Ci0gICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBtaWRQb2ludChjdXJyZW50VGltZVNl
cmllcy5wcmV2aW91c1BvaW50KHN0YXJ0KSwgc3RhcnQpLAotICAgICAgICAgICAgICAgIGVuZFRp
bWU6IG1pZFBvaW50KGVuZCwgY3VycmVudFRpbWVTZXJpZXMubmV4dFBvaW50KGVuZCkpLAotICAg
ICAgICAgICAgICAgIHJhbmdlOiByYW5nZSwKLSAgICAgICAgICAgICAgICBsZWZ0OiBudWxsLAot
ICAgICAgICAgICAgICAgIHJpZ2h0OiBudWxsLAotICAgICAgICAgICAgICAgIHJvd0luZGV4OiBu
dWxsLAotICAgICAgICAgICAgICAgIHRvcDogbnVsbCwKLSAgICAgICAgICAgICAgICBib3R0b206
IG51bGwsCi0gICAgICAgICAgICAgICAgbGlua1JvdXRlOiBsaW5rUm91dGUsCi0gICAgICAgICAg
ICAgICAgbGlua0lkOiByYW5nZS5nZXQoJ2lkJyksCi0gICAgICAgICAgICAgICAgbGFiZWw6IHJh
bmdlLmdldCgnbGFiZWwnKSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KSk7Ci0KLSAgICAg
ICAgdGhpcy5fdXBkYXRlUmFuZ2VCYXJSZWN0cygpOwotICAgIH0ub2JzZXJ2ZXMoJ3Jhbmdlcycp
LAotICAgIF91cGRhdGVSYW5nZUJhclJlY3RzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBy
YW5nZUJhcnMgPSB0aGlzLmdldCgncmFuZ2VCYXJzJyk7Ci0gICAgICAgIGlmICghcmFuZ2VCYXJz
IHx8ICFyYW5nZUJhcnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciB4U2NhbGUgPSB0aGlzLl94OwotICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKLQotICAg
ICAgICAvLyBFeHBhbmQgdGhlIHdpZHRoIG9mIGVhY2ggcmFuZ2UgYXMgbmVlZGVkIGFuZCBzb3J0
IHJhbmdlcyBieSB0aGUgbGVmdC1lZGdlIG9mIHJhbmdlcy4KLSAgICAgICAgdmFyIG1pbldpZHRo
ID0gMzsKLSAgICAgICAgdmFyIHNvcnRlZEJhcnMgPSByYW5nZUJhcnMubWFwKGZ1bmN0aW9uIChi
YXIpIHsKLSAgICAgICAgICAgIHZhciBsZWZ0ID0geFNjYWxlKGJhci5nZXQoJ3N0YXJ0VGltZScp
KTsKLSAgICAgICAgICAgIHZhciByaWdodCA9IHhTY2FsZShiYXIuZ2V0KCdlbmRUaW1lJykpOwot
ICAgICAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA8IG1pbldpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgbGVmdCAtPSBtaW5XaWR0aCAvIDI7Ci0gICAgICAgICAgICAgICAgcmlnaHQgKz0gbWluV2lk
dGggLyAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFyLnNldCgnbGVmdCcsIGxlZnQp
OwotICAgICAgICAgICAgYmFyLnNldCgncmlnaHQnLCByaWdodCk7Ci0gICAgICAgICAgICByZXR1
cm4gYmFyOwotICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uIChmaXJzdCwgc2Vjb25kKSB7IHJldHVy
biBmaXJzdC5nZXQoJ2xlZnQnKSAtIHNlY29uZC5nZXQoJ2xlZnQnKTsgfSk7Ci0KLSAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCwgbGVmdCBlZGdlcyBvZiBhbGwgcmFuZ2VzIHByaW9yIHRvIGEgcmFu
Z2UgUjEgaXMgb24gdGhlIGxlZnQgb2YgUjEuCi0gICAgICAgIC8vIFBsYWNlIFIxIGludG8gYSBy
b3cgaW4gd2hpY2ggcmlnaHQgZWRnZXMgb2YgYWxsIHJhbmdlcyBwcmlvciB0byBSMSBpcyBvbiB0
aGUgbGVmdCBvZiBSMSB0byBhdm9pZCBvdmVybGFwcGluZyByYW5nZXMuCi0gICAgICAgIHZhciBy
b3dzID0gW107Ci0gICAgICAgIHNvcnRlZEJhcnMuZm9yRWFjaChmdW5jdGlvbiAoYmFyKSB7Ci0g
ICAgICAgICAgICB2YXIgcm93SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yICg7IHJvd0luZGV4
IDwgcm93cy5sZW5ndGg7IHJvd0luZGV4KyspIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VycmVu
dFJvdyA9IHJvd3Nbcm93SW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Um93W2N1
cnJlbnRSb3cubGVuZ3RoIC0gMV0uZ2V0KCdyaWdodCcpIDwgYmFyLmdldCgnbGVmdCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSb3cucHVzaChiYXIpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcm93cy5wdXNo
KFtiYXJdKTsKLSAgICAgICAgICAgIGJhci5zZXQoJ3Jvd0luZGV4Jywgcm93SW5kZXgpOwotICAg
ICAgICB9KTsKLSAgICAgICAgdmFyIHJvd0hlaWdodCA9IDAuNiAqIHRoaXMuX3JlbTsKLSAgICAg
ICAgdmFyIGZpcnN0Um93VG9wID0gdGhpcy5fY29udGVudEhlaWdodCAtIHJvd3MubGVuZ3RoICog
cm93SGVpZ2h0OwotICAgICAgICB2YXIgYmFySGVpZ2h0ID0gMC41ICogdGhpcy5fcmVtOwotCi0g
ICAgICAgICQodGhpcy5nZXQoJ2VsZW1lbnQnKSkuZmluZCgnLnJhbmdlQmFyc0NvbnRhaW5lcklu
bGluZVN0eWxlJykuY3NzKHsKLSAgICAgICAgICAgIGxlZnQ6IHRoaXMuX21hcmdpbi5sZWZ0ICsg
J3B4JywKLSAgICAgICAgICAgIHRvcDogdGhpcy5fbWFyZ2luLnRvcCArIGZpcnN0Um93VG9wICsg
J3B4JywKLSAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb250ZW50V2lkdGggKyAncHgnLAotICAg
ICAgICAgICAgaGVpZ2h0OiByb3dzLmxlbmd0aCAqIGJhckhlaWdodCArICdweCcsCi0gICAgICAg
ICAgICBvdmVyZmxvdzogJ2hpZGRlbicsCi0gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRl
JywKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIG1hcmdpbiA9IHRoaXMuX21hcmdpbjsKLSAg
ICAgICAgc29ydGVkQmFycy5mb3JFYWNoKGZ1bmN0aW9uIChiYXIpIHsKLSAgICAgICAgICAgIHZh
ciB0b3AgPSBiYXIuZ2V0KCdyb3dJbmRleCcpICogcm93SGVpZ2h0OwotICAgICAgICAgICAgdmFy
IGhlaWdodCA9IGJhckhlaWdodDsKLSAgICAgICAgICAgIHZhciBsZWZ0ID0gYmFyLmdldCgnbGVm
dCcpOwotICAgICAgICAgICAgdmFyIHdpZHRoID0gYmFyLmdldCgncmlnaHQnKSAtIGxlZnQ7Ci0g
ICAgICAgICAgICBiYXIuc2V0KCdpbmxpbmVTdHlsZScsICdsZWZ0OiAnICsgbGVmdCArICdweDsg
dG9wOiAnICsgdG9wICsgJ3B4OyB3aWR0aDogJyArIHdpZHRoICsgJ3B4OyBoZWlnaHQ6ICcgKyBo
ZWlnaHQgKyAncHg7Jyk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0gICAgX3VwZGF0ZUN1cnJlbnRJ
dGVtSW5kaWNhdG9yczogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fY3Vy
cmVudEl0ZW1MaW5lKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBpdGVtID0g
dGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhW3RoaXMuX2N1cnJlbnRJdGVtSW5kZXhdOwotICAg
ICAgICBpZiAoIWl0ZW0pIHsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtTGluZS5hdHRy
KCJ4MSIsIC0xMDAwKS5hdHRyKCJ4MiIsIC0xMDAwKTsKLSAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRJdGVtQ2lyY2xlLmF0dHIoImN4IiwgLTEwMDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIHggPSB0aGlzLl94KGl0ZW0udGltZSk7Ci0gICAgICAgIHZh
ciB5ID0gdGhpcy5feShpdGVtLnZhbHVlKTsKLQotICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUxp
bmUKLSAgICAgICAgICAgIC5hdHRyKCJ4MSIsIHgpCi0gICAgICAgICAgICAuYXR0cigieDIiLCB4
KTsKLQotICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUNpcmNsZQotICAgICAgICAgICAgLmF0dHIo
ImN4IiwgeCkKLSAgICAgICAgICAgIC5hdHRyKCJjeSIsIHkpOwotICAgIH0sCi0gICAgX3NldEN1
cnJlbnRTZWxlY3Rpb246IGZ1bmN0aW9uIChuZXdTZWxlY3Rpb24pCi0gICAgewotICAgICAgICBp
ZiAodGhpcy5fYnJ1c2hFeHRlbnQgPT09IG5ld1NlbGVjdGlvbikKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB2YXIgcG9pbnRzID0gbnVsbDsKLSAgICAgICAgaWYgKG5ld1NlbGVjdGlv
bikgewotICAgICAgICAgICAgcG9pbnRzID0gdGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhCi0g
ICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAocG9pbnQpIHsgcmV0dXJuIHBvaW50LnRp
bWUgPj0gbmV3U2VsZWN0aW9uWzBdICYmIHBvaW50LnRpbWUgPD0gbmV3U2VsZWN0aW9uWzFdOyB9
KTsKLSAgICAgICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBwb2lu
dHMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fYnJ1c2hFeHRlbnQgPSBuZXdT
ZWxlY3Rpb247Ci0gICAgICAgIHRoaXMuX3NldEN1cnJlbnRJdGVtKHVuZGVmaW5lZCk7Ci0gICAg
ICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvblRvb2xiYXIoKTsKLQotICAgICAgICBpZiAoIUFwcC5k
b21haW5zQXJlRXF1YWwodGhpcy5nZXQoJ3NlbGVjdGlvbicpLCBuZXdTZWxlY3Rpb24pKQotICAg
ICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGlvbicsIG5ld1NlbGVjdGlvbik7Ci0gICAgICAgIHRo
aXMuc2V0KCdzZWxlY3RlZFBvaW50cycsIHBvaW50cyk7Ci0gICAgfSwKLSAgICBfdXBkYXRlU2Vs
ZWN0aW9uVG9vbGJhcjogZnVuY3Rpb24gKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5nZXQo
J2ludGVyYWN0aXZlJykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHNlbGVj
dGlvbiA9IHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICAgICAgdmFyIHNlbGVjdGlvblRv
b2xiYXIgPSAkKHRoaXMuZ2V0KCdlbGVtZW50JykpLmNoaWxkcmVuKCcuc2VsZWN0aW9uLXRvb2xi
YXInKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbikgewotICAgICAgICAgICAgdmFyIGxlZnQgPSB0
aGlzLl94KHNlbGVjdGlvblswXSk7Ci0gICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLl94KHNl
bGVjdGlvblsxXSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Ub29sYmFyCi0gICAgICAgICAgICAg
ICAgLmNzcyh7bGVmdDogdGhpcy5fbWFyZ2luLmxlZnQgKyByaWdodCwgdG9wOiB0aGlzLl9tYXJn
aW4udG9wICsgdGhpcy5fY29udGVudEhlaWdodH0pCi0gICAgICAgICAgICAgICAgLnNob3coKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzZWxlY3Rpb25Ub29sYmFyLmhpZGUoKTsKLSAg
ICB9LAotICAgIGFjdGlvbnM6IHsKLSAgICAgICAgem9vbTogZnVuY3Rpb24gKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCd6b29tJywgdGhpcy5fY3VycmVudFNlbGVj
dGlvbigpKTsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3Rpb24nLCBudWxsKTsKLSAgICAg
ICAgfSwKLSAgICAgICAgb3BlblJhbmdlOiBmdW5jdGlvbiAocmFuZ2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRoaXMuc2VuZEFjdGlvbignb3BlblJhbmdlJywgcmFuZ2UpOwotICAgICAgICB9
LAotICAgIH0sCi19KTsKLQotCi0KLUFwcC5Db21taXRzVmlld2VyQ29tcG9uZW50ID0gRW1iZXIu
Q29tcG9uZW50LmV4dGVuZCh7Ci0gICAgcmVwb3NpdG9yeTogbnVsbCwKLSAgICByZXZpc2lvbklu
Zm86IG51bGwsCi0gICAgY29tbWl0czogbnVsbCwKLSAgICBjb21taXRzQ2hhbmdlZDogZnVuY3Rp
b24gKCkKLSAgICB7Ci0gICAgICAgIHZhciByZXZpc2lvbkluZm8gPSB0aGlzLmdldCgncmV2aXNp
b25JbmZvJyk7Ci0KLSAgICAgICAgdmFyIHRvID0gcmV2aXNpb25JbmZvLmdldCgnY3VycmVudFJl
dmlzaW9uJyk7Ci0gICAgICAgIHZhciBmcm9tID0gcmV2aXNpb25JbmZvLmdldCgncHJldmlvdXNS
ZXZpc2lvbicpOwotICAgICAgICB2YXIgcmVwb3NpdG9yeSA9IHRoaXMuZ2V0KCdyZXBvc2l0b3J5
Jyk7Ci0gICAgICAgIGlmICghZnJvbSB8fCAhcmVwb3NpdG9yeSB8fCAhcmVwb3NpdG9yeS5nZXQo
J2hhc1JlcG9ydGVkQ29tbWl0cycpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZh
ciBzZWxmID0gdGhpczsKLSAgICAgICAgQ29tbWl0TG9ncy5mZXRjaEZvclRpbWVSYW5nZShyZXBv
c2l0b3J5LmdldCgnaWQnKSwgZnJvbSwgdG8pLnRoZW4oZnVuY3Rpb24gKGNvbW1pdHMpIHsKLSAg
ICAgICAgICAgIGlmIChzZWxmLmlzRGVzdHJveWVkKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHNlbGYuc2V0KCdjb21taXRzJywgY29tbWl0cy5tYXAoZnVuY3Rpb24gKGNv
bW1pdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogcmVwb3NpdG9yeSwKLSAgICAgICAgICAgICAg
ICAgICAgcmV2aXNpb246IGNvbW1pdC5yZXZpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgdXJs
OiByZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKGNvbW1pdC5yZXZpc2lvbiksCi0gICAgICAgICAg
ICAgICAgICAgIGF1dGhvcjogY29tbWl0LmF1dGhvck5hbWUgfHwgY29tbWl0LmF1dGhvckVtYWls
LAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjb21taXQubWVzc2FnZSA/IGNvbW1pdC5t
ZXNzYWdlLnN1YnN0cigwLCA3NSkgOiBudWxsLAotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSkpOwotICAgICAgICB9LCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXNl
bGYuaXNEZXN0cm95ZWQpCi0gICAgICAgICAgICAgICAgc2VsZi5zZXQoJ2NvbW1pdHMnLCBbXSk7
Ci0gICAgICAgIH0pCi0gICAgfS5vYnNlcnZlcygncmVwb3NpdG9yeScpLm9ic2VydmVzKCdyZXZp
c2lvbkluZm8nKS5vbignaW5pdCcpLAotfSk7Ci0KIAogQXBwLkFuYWx5c2lzUm91dGUgPSBFbWJl
ci5Sb3V0ZS5leHRlbmQoewogICAgIG1vZGVsOiBmdW5jdGlvbiAoKSB7CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2NvbW1pdHMtdmlld2VyLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9jb21taXRzLXZpZXdlci5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNWQxYThjNWRkODY0MzgxZTZhYTE0NTAxYmE2ZDYyZTBlY2I0MTllCi0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9jb21taXRzLXZpZXdl
ci5qcwpAQCAtMCwwICsxLDMzIEBACitBcHAuQ29tbWl0c1ZpZXdlckNvbXBvbmVudCA9IEVtYmVy
LkNvbXBvbmVudC5leHRlbmQoeworICAgIHJlcG9zaXRvcnk6IG51bGwsCisgICAgcmV2aXNpb25J
bmZvOiBudWxsLAorICAgIGNvbW1pdHM6IG51bGwsCisgICAgY29tbWl0c0NoYW5nZWQ6IGZ1bmN0
aW9uICgpCisgICAgeworICAgICAgICB2YXIgcmV2aXNpb25JbmZvID0gdGhpcy5nZXQoJ3Jldmlz
aW9uSW5mbycpOworCisgICAgICAgIHZhciB0byA9IHJldmlzaW9uSW5mby5nZXQoJ2N1cnJlbnRS
ZXZpc2lvbicpOworICAgICAgICB2YXIgZnJvbSA9IHJldmlzaW9uSW5mby5nZXQoJ3ByZXZpb3Vz
UmV2aXNpb24nKTsKKyAgICAgICAgdmFyIHJlcG9zaXRvcnkgPSB0aGlzLmdldCgncmVwb3NpdG9y
eScpOworICAgICAgICBpZiAoIWZyb20gfHwgIXJlcG9zaXRvcnkgfHwgIXJlcG9zaXRvcnkuZ2V0
KCdoYXNSZXBvcnRlZENvbW1pdHMnKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIENvbW1pdExvZ3MuZmV0Y2hGb3JUaW1lUmFuZ2UocmVw
b3NpdG9yeS5nZXQoJ2lkJyksIGZyb20sIHRvKS50aGVuKGZ1bmN0aW9uIChjb21taXRzKSB7Cisg
ICAgICAgICAgICBpZiAoc2VsZi5pc0Rlc3Ryb3llZCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBzZWxmLnNldCgnY29tbWl0cycsIGNvbW1pdHMubWFwKGZ1bmN0aW9uIChj
b21taXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRW1iZXIuT2JqZWN0LmNyZWF0ZSh7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IHJlcG9zaXRvcnksCisgICAgICAgICAgICAg
ICAgICAgIHJldmlzaW9uOiBjb21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgIHVy
bDogcmVwb3NpdG9yeS51cmxGb3JSZXZpc2lvbihjb21taXQucmV2aXNpb24pLAorICAgICAgICAg
ICAgICAgICAgICBhdXRob3I6IGNvbW1pdC5hdXRob3JOYW1lIHx8IGNvbW1pdC5hdXRob3JFbWFp
bCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY29tbWl0Lm1lc3NhZ2UgPyBjb21taXQu
bWVzc2FnZS5zdWJzdHIoMCwgNzUpIDogbnVsbCwKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCFz
ZWxmLmlzRGVzdHJveWVkKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0KCdjb21taXRzJywgW10p
OworICAgICAgICB9KQorICAgIH0ub2JzZXJ2ZXMoJ3JlcG9zaXRvcnknKS5vYnNlcnZlcygncmV2
aXNpb25JbmZvJykub24oJ2luaXQnKSwKK30pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92Mi9pbnRlcmFjdGl2ZS1jaGFydC5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjIvaW50ZXJhY3RpdmUtY2hhcnQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTBi
ZDEzODUwOGYwNzhmZDY1ZjQ3Mjc5ZTg4NzAyYjhjZTdlOTA4OQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvaW50ZXJhY3RpdmUtY2hhcnQuanMK
QEAgLTAsMCArMSw3NzUgQEAKK0FwcC5JbnRlcmFjdGl2ZUNoYXJ0Q29tcG9uZW50ID0gRW1iZXIu
Q29tcG9uZW50LmV4dGVuZCh7CisgICAgY2hhcnREYXRhOiBudWxsLAorICAgIHNob3dYQXhpczog
dHJ1ZSwKKyAgICBzaG93WUF4aXM6IHRydWUsCisgICAgaW50ZXJhY3RpdmU6IGZhbHNlLAorICAg
IGVuYWJsZVNlbGVjdGlvbjogdHJ1ZSwKKyAgICBjbGFzc05hbWVzOiBbJ2NoYXJ0J10sCisgICAg
aW5pdDogZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3N1cGVyKCk7CisgICAgICAg
IHRoaXMuX25lZWRzQ29uc3RydWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fZXZlbnRIYW5k
bGVycyA9IFtdOworICAgICAgICAkKHdpbmRvdykucmVzaXplKHRoaXMuX3VwZGF0ZURpbWVuc2lv
bnNJZk5lZWRlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorICAgIGNoYXJ0RGF0YURpZENoYW5nZTog
ZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlzLmdldCgnY2hh
cnREYXRhJyk7CisgICAgICAgIGlmICghY2hhcnREYXRhKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9uZWVkc0NvbnN0cnVjdGlvbiA9IHRydWU7CisgICAgICAgIHRoaXMuX2Nv
bnN0cnVjdEdyYXBoSWZQb3NzaWJsZShjaGFydERhdGEpOworICAgIH0ub2JzZXJ2ZXMoJ2NoYXJ0
RGF0YScpLm9uKCdpbml0JyksCisgICAgZGlkSW5zZXJ0RWxlbWVudDogZnVuY3Rpb24gKCkKKyAg
ICB7CisgICAgICAgIHZhciBjaGFydERhdGEgPSB0aGlzLmdldCgnY2hhcnREYXRhJyk7CisgICAg
ICAgIGlmIChjaGFydERhdGEpCisgICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RHcmFwaElmUG9z
c2libGUoY2hhcnREYXRhKTsKKyAgICB9LAorICAgIHdpbGxDbGVhclJlbmRlcjogZnVuY3Rpb24g
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAo
aXRlbSkgeworICAgICAgICAgICAgJChpdGVtWzBdKS5vZmYoaXRlbVsxXSwgaXRlbVsyXSk7Cisg
ICAgICAgIH0pCisgICAgfSwKKyAgICBfYXR0YWNoRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24odGFy
Z2V0LCBldmVudE5hbWUsIGxpc3RlbmVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXZlbnRIYW5k
bGVycy5wdXNoKFt0YXJnZXQsIGV2ZW50TmFtZSwgbGlzdGVuZXJdKTsKKyAgICAgICAgJCh0YXJn
ZXQpLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpOworICAgIH0sCisgICAgX2NvbnN0cnVjdEdyYXBo
SWZQb3NzaWJsZTogZnVuY3Rpb24gKGNoYXJ0RGF0YSkKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fbmVlZHNDb25zdHJ1Y3Rpb24gfHwgIXRoaXMuZ2V0KCdlbGVtZW50JykpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldCgnZWxlbWVudCcpOwor
CisgICAgICAgIHRoaXMuX3ggPSBkMy50aW1lLnNjYWxlKCk7CisgICAgICAgIHRoaXMuX3kgPSBk
My5zY2FsZS5saW5lYXIoKTsKKworICAgICAgICAvLyBGSVhNRTogVGVhciBkb3duIHRoZSBvbGQg
U1ZHIGVsZW1lbnQuCisgICAgICAgIHRoaXMuX3N2Z0VsZW1lbnQgPSBkMy5zZWxlY3QoZWxlbWVu
dCkuYXBwZW5kKCJzdmciKQorICAgICAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsICIxMDAlIikK
KyAgICAgICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgIjEwMCUiKTsKKworICAgICAgICB2YXIg
c3ZnID0gdGhpcy5fc3ZnID0gdGhpcy5fc3ZnRWxlbWVudC5hcHBlbmQoImciKTsKKworICAgICAg
ICB2YXIgY2xpcElkID0gZWxlbWVudC5pZCArICItY2xpcCI7CisgICAgICAgIHRoaXMuX2NsaXBQ
YXRoID0gc3ZnLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiY2xpcFBhdGgiKQorICAgICAgICAgICAg
LmF0dHIoImlkIiwgY2xpcElkKQorICAgICAgICAgICAgLmFwcGVuZCgicmVjdCIpOworCisgICAg
ICAgIGlmICh0aGlzLmdldCgnc2hvd1hBeGlzJykpIHsKKyAgICAgICAgICAgIHRoaXMuX3hBeGlz
ID0gZDMuc3ZnLmF4aXMoKS5zY2FsZSh0aGlzLl94KS5vcmllbnQoImJvdHRvbSIpLnRpY2tzKDYp
OworICAgICAgICAgICAgdGhpcy5feEF4aXNMYWJlbHMgPSBzdmcuYXBwZW5kKCJnIikKKyAgICAg
ICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAieCBheGlzIik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodGhpcy5nZXQoJ3Nob3dZQXhpcycpKSB7CisgICAgICAgICAgICB0aGlzLl95QXhpcyA9
IGQzLnN2Zy5heGlzKCkuc2NhbGUodGhpcy5feSkub3JpZW50KCJsZWZ0IikudGlja3MoNikudGlj
a0Zvcm1hdChkMy5mb3JtYXQoInMiKSk7CisgICAgICAgICAgICB0aGlzLl95QXhpc0xhYmVscyA9
IHN2Zy5hcHBlbmQoImciKQorICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ5IGF4aXMi
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2NsaXBwZWRDb250YWluZXIgPSBzdmcuYXBw
ZW5kKCJnIikKKyAgICAgICAgICAgIC5hdHRyKCJjbGlwLXBhdGgiLCAidXJsKCMiICsgY2xpcElk
ICsgIikiKTsKKworICAgICAgICB2YXIgeFNjYWxlID0gdGhpcy5feDsKKyAgICAgICAgdmFyIHlT
Y2FsZSA9IHRoaXMuX3k7CisgICAgICAgIHRoaXMuX3RpbWVMaW5lID0gZDMuc3ZnLmxpbmUoKQor
ICAgICAgICAgICAgLngoZnVuY3Rpb24ocG9pbnQpIHsgcmV0dXJuIHhTY2FsZShwb2ludC50aW1l
KTsgfSkKKyAgICAgICAgICAgIC55KGZ1bmN0aW9uKHBvaW50KSB7IHJldHVybiB5U2NhbGUocG9p
bnQudmFsdWUpOyB9KTsKKworICAgICAgICB0aGlzLl9jb25maWRlbmNlQXJlYSA9IGQzLnN2Zy5h
cmVhKCkKKy8vICAgICAgICAgICAgLmludGVycG9sYXRlKCJjYXJkaW5hbCIpCisgICAgICAgICAg
ICAueChmdW5jdGlvbihwb2ludCkgeyByZXR1cm4geFNjYWxlKHBvaW50LnRpbWUpOyB9KQorICAg
ICAgICAgICAgLnkwKGZ1bmN0aW9uKHBvaW50KSB7IHJldHVybiBwb2ludC5pbnRlcnZhbCA/IHlT
Y2FsZShwb2ludC5pbnRlcnZhbFswXSkgOiBudWxsOyB9KQorICAgICAgICAgICAgLnkxKGZ1bmN0
aW9uKHBvaW50KSB7IHJldHVybiBwb2ludC5pbnRlcnZhbCA/IHlTY2FsZShwb2ludC5pbnRlcnZh
bFsxXSkgOiBudWxsOyB9KTsKKworICAgICAgICBpZiAodGhpcy5fcGF0aHMpCisgICAgICAgICAg
ICB0aGlzLl9wYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoKSB7IHBhdGgucmVtb3ZlKCk7IH0p
OworICAgICAgICB0aGlzLl9wYXRocyA9IFtdOworICAgICAgICBpZiAodGhpcy5fYXJlYXMpCisg
ICAgICAgICAgICB0aGlzLl9hcmVhcy5mb3JFYWNoKGZ1bmN0aW9uIChhcmVhKSB7IGFyZWEucmVt
b3ZlKCk7IH0pOworICAgICAgICB0aGlzLl9hcmVhcyA9IFtdOworICAgICAgICBpZiAodGhpcy5f
ZG90cykKKyAgICAgICAgICAgIHRoaXMuX2RvdHMuZm9yRWFjaChmdW5jdGlvbiAoZG90KSB7IGRv
dHMucmVtb3ZlKCk7IH0pOworICAgICAgICB0aGlzLl9kb3RzID0gW107CisgICAgICAgIGlmICh0
aGlzLl9oaWdobGlnaHRzKQorICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0cy5mb3JFYWNoKGZ1
bmN0aW9uIChoaWdobGlnaHQpIHsgaGlnaGxpZ2h0LnJlbW92ZSgpOyB9KTsKKyAgICAgICAgdGhp
cy5faGlnaGxpZ2h0cyA9IFtdOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzID0g
Y2hhcnREYXRhLmN1cnJlbnQudGltZVNlcmllc0J5Q29tbWl0VGltZSgpOworICAgICAgICB0aGlz
Ll9jdXJyZW50VGltZVNlcmllc0RhdGEgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllcy5zZXJpZXMo
KTsKKyAgICAgICAgdGhpcy5fYmFzZWxpbmVUaW1lU2VyaWVzID0gY2hhcnREYXRhLmJhc2VsaW5l
ID8gY2hhcnREYXRhLmJhc2VsaW5lLnRpbWVTZXJpZXNCeUNvbW1pdFRpbWUoKSA6IG51bGw7Cisg
ICAgICAgIHRoaXMuX3RhcmdldFRpbWVTZXJpZXMgPSBjaGFydERhdGEudGFyZ2V0ID8gY2hhcnRE
YXRhLnRhcmdldC50aW1lU2VyaWVzQnlDb21taXRUaW1lKCkgOiBudWxsOworCisgICAgICAgIHRo
aXMuX3lBeGlzVW5pdCA9IGNoYXJ0RGF0YS51bml0OworCisgICAgICAgIHZhciBtaW5NYXggPSB0
aGlzLl9taW5NYXhGb3JBbGxUaW1lU2VyaWVzKCk7CisgICAgICAgIHZhciBzbWFsbEVub3VnaFZh
bHVlID0gbWluTWF4WzBdIC0gKG1pbk1heFsxXSAtIG1pbk1heFswXSkgKiAxMDsKKyAgICAgICAg
dmFyIGxhcmdlRW5vdWdoVmFsdWUgPSBtaW5NYXhbMV0gKyAobWluTWF4WzFdIC0gbWluTWF4WzBd
KSAqIDEwOworCisgICAgICAgIC8vIEZJWE1FOiBGbGlwIHRoZSBzaWRlcyBiYXNlZCBvbiBzbWFs
bGVySXNCZXR0ZXItbmVzcy4KKyAgICAgICAgaWYgKHRoaXMuX2Jhc2VsaW5lVGltZVNlcmllcykg
eworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9iYXNlbGluZVRpbWVTZXJpZXMuc2VyaWVz
KCk7CisgICAgICAgICAgICB0aGlzLl9hcmVhcy5wdXNoKHRoaXMuX2NsaXBwZWRDb250YWluZXIK
KyAgICAgICAgICAgICAgICAuYXBwZW5kKCJwYXRoIikKKyAgICAgICAgICAgICAgICAuZGF0dW0o
ZGF0YS5tYXAoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiB7dGltZTogcG9pbnQudGltZSwgdmFs
dWU6IHBvaW50LnZhbHVlLCBpbnRlcnZhbDogcG9pbnQuaW50ZXJ2YWwgPyBwb2ludC5pbnRlcnZh
bCA6IFtwb2ludC52YWx1ZSwgbGFyZ2VFbm91Z2hWYWx1ZV19OyB9KSkKKyAgICAgICAgICAgICAg
ICAuYXR0cigiY2xhc3MiLCAiYXJlYSBiYXNlbGluZSIpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5fdGFyZ2V0VGltZVNlcmllcykgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlz
Ll90YXJnZXRUaW1lU2VyaWVzLnNlcmllcygpOworICAgICAgICAgICAgdGhpcy5fYXJlYXMucHVz
aCh0aGlzLl9jbGlwcGVkQ29udGFpbmVyCisgICAgICAgICAgICAgICAgLmFwcGVuZCgicGF0aCIp
CisgICAgICAgICAgICAgICAgLmRhdHVtKGRhdGEubWFwKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1
cm4ge3RpbWU6IHBvaW50LnRpbWUsIHZhbHVlOiBwb2ludC52YWx1ZSwgaW50ZXJ2YWw6IHBvaW50
LmludGVydmFsID8gcG9pbnQuaW50ZXJ2YWwgOiBbc21hbGxFbm91Z2hWYWx1ZSwgcG9pbnQudmFs
dWVdfTsgfSkpCisgICAgICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImFyZWEgdGFyZ2V0Iikp
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fYXJlYXMucHVzaCh0aGlzLl9jbGlwcGVkQ29u
dGFpbmVyCisgICAgICAgICAgICAuYXBwZW5kKCJwYXRoIikKKyAgICAgICAgICAgIC5kYXR1bSh0
aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEpCisgICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAi
YXJlYSIpKTsKKworICAgICAgICB0aGlzLl9wYXRocy5wdXNoKHRoaXMuX2NsaXBwZWRDb250YWlu
ZXIKKyAgICAgICAgICAgIC5hcHBlbmQoInBhdGgiKQorICAgICAgICAgICAgLmRhdHVtKHRoaXMu
X2N1cnJlbnRUaW1lU2VyaWVzRGF0YSkKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJjb21t
aXQtdGltZS1saW5lIikpOworCisgICAgICAgIHRoaXMuX2RvdHMucHVzaCh0aGlzLl9jbGlwcGVk
Q29udGFpbmVyCisgICAgICAgICAgICAuc2VsZWN0QWxsKCIuZG90IikKKyAgICAgICAgICAgICAg
ICAuZGF0YSh0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEpCisgICAgICAgICAgICAuZW50ZXIo
KS5hcHBlbmQoImNpcmNsZSIpCisgICAgICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImRvdCIp
CisgICAgICAgICAgICAgICAgLmF0dHIoInIiLCB0aGlzLmdldCgnY2hhcnRQb2ludFJhZGl1cycp
IHx8IDEpKTsKKworICAgICAgICBpZiAodGhpcy5nZXQoJ2ludGVyYWN0aXZlJykpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgIm1vdXNlbW92ZSIsIHRo
aXMuX21vdXNlTW92ZWQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICB0aGlzLl9hdHRhY2hFdmVu
dExpc3RlbmVyKGVsZW1lbnQsICJtb3VzZWxlYXZlIiwgdGhpcy5fbW91c2VMZWZ0LmJpbmQodGhp
cykpOworICAgICAgICAgICAgdGhpcy5fYXR0YWNoRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAibW91
c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duLmJpbmQodGhpcykpOworICAgICAgICAgICAgdGhpcy5f
YXR0YWNoRXZlbnRMaXN0ZW5lcigkKGVsZW1lbnQpLnBhcmVudHMoIlt0YWJpbmRleF0iKSwgImtl
eWRvd24iLCB0aGlzLl9rZXlQcmVzc2VkLmJpbmQodGhpcykpOworCisgICAgICAgICAgICB0aGlz
Ll9jdXJyZW50SXRlbUxpbmUgPSB0aGlzLl9jbGlwcGVkQ29udGFpbmVyCisgICAgICAgICAgICAg
ICAgLmFwcGVuZCgibGluZSIpCisgICAgICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImN1cnJl
bnQtaXRlbSIpOworCisgICAgICAgICAgICB0aGlzLl9jdXJyZW50SXRlbUNpcmNsZSA9IHRoaXMu
X2NsaXBwZWRDb250YWluZXIKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCJjaXJjbGUiKQorICAg
ICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJkb3QgY3VycmVudC1pdGVtIikKKyAgICAgICAg
ICAgICAgICAuYXR0cigiciIsIDMpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fYnJ1c2gg
PSBudWxsOworICAgICAgICBpZiAodGhpcy5nZXQoJ2VuYWJsZVNlbGVjdGlvbicpKSB7CisgICAg
ICAgICAgICB0aGlzLl9icnVzaCA9IGQzLnN2Zy5icnVzaCgpCisgICAgICAgICAgICAgICAgLngo
dGhpcy5feCkKKyAgICAgICAgICAgICAgICAub24oImJydXNoIiwgdGhpcy5fYnJ1c2hDaGFuZ2Vk
LmJpbmQodGhpcykpOworCisgICAgICAgICAgICB0aGlzLl9icnVzaFJlY3QgPSB0aGlzLl9jbGlw
cGVkQ29udGFpbmVyCisgICAgICAgICAgICAgICAgLmFwcGVuZCgiZyIpCisgICAgICAgICAgICAg
ICAgLmF0dHIoImNsYXNzIiwgInggYnJ1c2giKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
X3VwZGF0ZURvbWFpbigpOworICAgICAgICB0aGlzLl91cGRhdGVEaW1lbnNpb25zSWZOZWVkZWQo
KTsKKworICAgICAgICAvLyBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGUgYnJ1c2ggaXNuJ3Qgc2V0
IGlmIHdlIHVwZGF0ZWQgaXQgc3luY2hyb25vdXNseSBoZXJlLgorICAgICAgICBzZXRUaW1lb3V0
KHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYmluZCh0aGlzKSwgMCk7CisKKyAgICAgICAgc2V0VGlt
ZW91dCh0aGlzLl9zZWxlY3RlZEl0ZW1DaGFuZ2VkLmJpbmQodGhpcyksIDApOworCisgICAgICAg
IHRoaXMuX25lZWRzQ29uc3RydWN0aW9uID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fcmFuZ2Vz
Q2hhbmdlZCgpOworICAgIH0sCisgICAgX3VwZGF0ZURvbWFpbjogZnVuY3Rpb24gKCkKKyAgICB7
CisgICAgICAgIHZhciB4RG9tYWluID0gdGhpcy5nZXQoJ2RvbWFpbicpOworICAgICAgICB2YXIg
aW50cmluc2ljWERvbWFpbiA9IHRoaXMuX2NvbXB1dGVYQXhpc0RvbWFpbih0aGlzLl9jdXJyZW50
VGltZVNlcmllc0RhdGEpOworICAgICAgICBpZiAoIXhEb21haW4pCisgICAgICAgICAgICB4RG9t
YWluID0gaW50cmluc2ljWERvbWFpbjsKKyAgICAgICAgdmFyIGN1cnJlbnREb21haW4gPSB0aGlz
Ll94LmRvbWFpbigpOworICAgICAgICBpZiAoY3VycmVudERvbWFpbiAmJiBBcHAuZG9tYWluc0Fy
ZUVxdWFsKGN1cnJlbnREb21haW4sIHhEb21haW4pKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnREb21haW47CisKKyAgICAgICAgdmFyIHlEb21haW4gPSB0aGlzLl9jb21wdXRlWUF4aXNEb21h
aW4oeERvbWFpblswXSwgeERvbWFpblsxXSk7CisgICAgICAgIHRoaXMuX3guZG9tYWluKHhEb21h
aW4pOworICAgICAgICB0aGlzLl95LmRvbWFpbih5RG9tYWluKTsKKyAgICAgICAgcmV0dXJuIHhE
b21haW47CisgICAgfSwKKyAgICBfdXBkYXRlRGltZW5zaW9uc0lmTmVlZGVkOiBmdW5jdGlvbiAo
bmV3U2VsZWN0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMuZ2V0KCdl
bGVtZW50JykpOworCisgICAgICAgIHZhciBuZXdUb3RhbFdpZHRoID0gZWxlbWVudC53aWR0aCgp
OworICAgICAgICB2YXIgbmV3VG90YWxIZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpOworICAgICAg
ICBpZiAodGhpcy5fdG90YWxXaWR0aCA9PSBuZXdUb3RhbFdpZHRoICYmIHRoaXMuX3RvdGFsSGVp
Z2h0ID09IG5ld1RvdGFsSGVpZ2h0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuX3RvdGFsV2lkdGggPSBuZXdUb3RhbFdpZHRoOworICAgICAgICB0aGlzLl90b3RhbEhlaWdo
dCA9IG5ld1RvdGFsSGVpZ2h0OworCisgICAgICAgIGlmICghdGhpcy5fcmVtKQorICAgICAgICAg
ICAgdGhpcy5fcmVtID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCkuZm9udFNpemUpOworICAgICAgICB2YXIgcmVtID0gdGhpcy5fcmVtOworCisg
ICAgICAgIHZhciBwYWRkaW5nID0gMC41ICogcmVtOworICAgICAgICB2YXIgbWFyZ2luID0ge3Rv
cDogcGFkZGluZywgcmlnaHQ6IHBhZGRpbmcsIGJvdHRvbTogcGFkZGluZywgbGVmdDogcGFkZGlu
Z307CisgICAgICAgIGlmICh0aGlzLl94QXhpcykKKyAgICAgICAgICAgIG1hcmdpbi5ib3R0b20g
Kz0gcmVtOworICAgICAgICBpZiAodGhpcy5feUF4aXMpCisgICAgICAgICAgICBtYXJnaW4ubGVm
dCArPSAzICogcmVtOworCisgICAgICAgIHRoaXMuX21hcmdpbiA9IG1hcmdpbjsKKyAgICAgICAg
dGhpcy5fY29udGVudFdpZHRoID0gdGhpcy5fdG90YWxXaWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFy
Z2luLnJpZ2h0OworICAgICAgICB0aGlzLl9jb250ZW50SGVpZ2h0ID0gdGhpcy5fdG90YWxIZWln
aHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTsKKworICAgICAgICB0aGlzLl9zdmcuYXR0
cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgbWFyZ2luLmxlZnQgKyAiLCIgKyBtYXJnaW4u
dG9wICsgIikiKTsKKworICAgICAgICB0aGlzLl9jbGlwUGF0aAorICAgICAgICAgICAgLmF0dHIo
IndpZHRoIiwgdGhpcy5fY29udGVudFdpZHRoKQorICAgICAgICAgICAgLmF0dHIoImhlaWdodCIs
IHRoaXMuX2NvbnRlbnRIZWlnaHQpOworCisgICAgICAgIHRoaXMuX3gucmFuZ2UoWzAsIHRoaXMu
X2NvbnRlbnRXaWR0aF0pOworICAgICAgICB0aGlzLl95LnJhbmdlKFt0aGlzLl9jb250ZW50SGVp
Z2h0LCAwXSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3hBeGlzKSB7CisgICAgICAgICAgICB0aGlz
Ll94QXhpcy50aWNrU2l6ZSgtdGhpcy5fY29udGVudEhlaWdodCk7CisgICAgICAgICAgICB0aGlz
Ll94QXhpc0xhYmVscy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIiArIHRoaXMuX2Nv
bnRlbnRIZWlnaHQgKyAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX3lBeGlz
KQorICAgICAgICAgICAgdGhpcy5feUF4aXMudGlja1NpemUoLXRoaXMuX2NvbnRlbnRXaWR0aCk7
CisKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJdGVtTGluZSkgeworICAgICAgICAgICAgdGhp
cy5fY3VycmVudEl0ZW1MaW5lCisgICAgICAgICAgICAgICAgLmF0dHIoInkxIiwgMCkKKyAgICAg
ICAgICAgICAgICAuYXR0cigieTIiLCBtYXJnaW4udG9wICsgdGhpcy5fY29udGVudEhlaWdodCk7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9yZWxheW91dERhdGFBbmRBeGVzKHRoaXMuX2N1
cnJlbnRTZWxlY3Rpb24oKSk7CisgICAgfSwKKyAgICBfdXBkYXRlQnJ1c2g6IGZ1bmN0aW9uICgp
CisgICAgeworICAgICAgICB0aGlzLl9icnVzaFJlY3QKKyAgICAgICAgICAgIC5jYWxsKHRoaXMu
X2JydXNoKQorICAgICAgICAuc2VsZWN0QWxsKCJyZWN0IikKKyAgICAgICAgICAgIC5hdHRyKCJ5
IiwgMSkKKyAgICAgICAgICAgIC5hdHRyKCJoZWlnaHQiLCB0aGlzLl9jb250ZW50SGVpZ2h0IC0g
Mik7CisgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvblRvb2xiYXIoKTsKKyAgICB9LAorICAg
IF9yZWxheW91dERhdGFBbmRBeGVzOiBmdW5jdGlvbiAoc2VsZWN0aW9uKQorICAgIHsKKyAgICAg
ICAgdmFyIHRpbWVsaW5lID0gdGhpcy5fdGltZUxpbmU7CisgICAgICAgIHRoaXMuX3BhdGhzLmZv
ckVhY2goZnVuY3Rpb24gKHBhdGgpIHsgcGF0aC5hdHRyKCJkIiwgdGltZWxpbmUpOyB9KTsKKwor
ICAgICAgICB2YXIgY29uZmlkZW5jZUFyZWEgPSB0aGlzLl9jb25maWRlbmNlQXJlYTsKKyAgICAg
ICAgdGhpcy5fYXJlYXMuZm9yRWFjaChmdW5jdGlvbiAocGF0aCkgeyBwYXRoLmF0dHIoImQiLCBj
b25maWRlbmNlQXJlYSk7IH0pOworCisgICAgICAgIHZhciB4U2NhbGUgPSB0aGlzLl94OworICAg
ICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKKyAgICAgICAgdGhpcy5fZG90cy5mb3JFYWNoKGZ1
bmN0aW9uIChkb3QpIHsKKyAgICAgICAgICAgIGRvdAorICAgICAgICAgICAgICAgIC5hdHRyKCJj
eCIsIGZ1bmN0aW9uKG1lYXN1cmVtZW50KSB7IHJldHVybiB4U2NhbGUobWVhc3VyZW1lbnQudGlt
ZSk7IH0pCisgICAgICAgICAgICAgICAgLmF0dHIoImN5IiwgZnVuY3Rpb24obWVhc3VyZW1lbnQp
IHsgcmV0dXJuIHlTY2FsZShtZWFzdXJlbWVudC52YWx1ZSk7IH0pOworICAgICAgICB9KTsKKyAg
ICAgICAgdGhpcy5fdXBkYXRlTWFya2VkRG90cygpOworICAgICAgICB0aGlzLl91cGRhdGVIaWdo
bGlnaHRQb3NpdGlvbnMoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUmFuZ2VCYXJSZWN0cygpOwor
CisgICAgICAgIGlmICh0aGlzLl9icnVzaCkgeworICAgICAgICAgICAgaWYgKHNlbGVjdGlvbikK
KyAgICAgICAgICAgICAgICB0aGlzLl9icnVzaC5leHRlbnQoc2VsZWN0aW9uKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl9icnVzaC5jbGVhcigpOworICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlQnJ1c2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3VwZGF0
ZUN1cnJlbnRJdGVtSW5kaWNhdG9ycygpOworCisgICAgICAgIGlmICh0aGlzLl94QXhpcykKKyAg
ICAgICAgICAgIHRoaXMuX3hBeGlzTGFiZWxzLmNhbGwodGhpcy5feEF4aXMpOworICAgICAgICBp
ZiAoIXRoaXMuX3lBeGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3lB
eGlzTGFiZWxzLmNhbGwodGhpcy5feUF4aXMpOworICAgICAgICBpZiAodGhpcy5feUF4aXNVbml0
Q29udGFpbmVyKQorICAgICAgICAgICAgdGhpcy5feUF4aXNVbml0Q29udGFpbmVyLnJlbW92ZSgp
OworICAgICAgICB0aGlzLl95QXhpc1VuaXRDb250YWluZXIgPSB0aGlzLl95QXhpc0xhYmVscy5h
cHBlbmQoInRleHQiKQorICAgICAgICAgICAgLmF0dHIoIngiLCAwLjUgKiB0aGlzLl9yZW0pCisg
ICAgICAgICAgICAuYXR0cigieSIsIDAuMiAqIHRoaXMuX3JlbSkKKyAgICAgICAgICAgIC5hdHRy
KCJkeSIsIDAuOCAqIHRoaXMuX3JlbSkKKyAgICAgICAgICAgIC5zdHlsZSgidGV4dC1hbmNob3Ii
LCAic3RhcnQiKQorICAgICAgICAgICAgLnN0eWxlKCJ6LWluZGV4IiwgIjEwMCIpCisgICAgICAg
ICAgICAudGV4dCh0aGlzLl95QXhpc1VuaXQpOworICAgIH0sCisgICAgX3VwZGF0ZU1hcmtlZERv
dHM6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIG1hcmtlZFBvaW50cyA9IHRoaXMuZ2V0KCdt
YXJrZWRQb2ludHMnKSB8fCB7fTsKKyAgICAgICAgdmFyIGRlZmF1bHREb3RSYWRpdXMgPSB0aGlz
LmdldCgnY2hhcnRQb2ludFJhZGl1cycpIHx8IDE7CisgICAgICAgIHRoaXMuX2RvdHMuZm9yRWFj
aChmdW5jdGlvbiAoZG90KSB7CisgICAgICAgICAgICBkb3QuY2xhc3NlZCgnbWFya2VkJywgZnVu
Y3Rpb24gKHBvaW50KSB7IHJldHVybiBtYXJrZWRQb2ludHNbcG9pbnQubWVhc3VyZW1lbnQuaWQo
KV07IH0pOworICAgICAgICAgICAgZG90LmF0dHIoJ3InLCBmdW5jdGlvbiAocG9pbnQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFya2VkUG9pbnRzW3BvaW50Lm1lYXN1cmVtZW50LmlkKCld
ID8gZGVmYXVsdERvdFJhZGl1cyAqIDEuNSA6IGRlZmF1bHREb3RSYWRpdXM7IH0pOworICAgICAg
ICB9KTsKKyAgICB9Lm9ic2VydmVzKCdtYXJrZWRQb2ludHMnKSwKKyAgICBfdXBkYXRlSGlnaGxp
Z2h0UG9zaXRpb25zOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB4U2NhbGUgPSB0aGlzLl94
OworICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKKyAgICAgICAgdmFyIHkyID0gdGhpcy5f
bWFyZ2luLnRvcCArIHRoaXMuX2NvbnRlbnRIZWlnaHQ7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdo
dHMuZm9yRWFjaChmdW5jdGlvbiAoaGlnaGxpZ2h0KSB7CisgICAgICAgICAgICBoaWdobGlnaHQK
KyAgICAgICAgICAgICAgICAuYXR0cigieTEiLCAwKQorICAgICAgICAgICAgICAgIC5hdHRyKCJ5
MiIsIHkyKQorICAgICAgICAgICAgICAgIC5hdHRyKCJ5IiwgZnVuY3Rpb24obWVhc3VyZW1lbnQp
IHsgcmV0dXJuIHlTY2FsZShtZWFzdXJlbWVudC52YWx1ZSk7IH0pCisgICAgICAgICAgICAgICAg
LmF0dHIoIngxIiwgZnVuY3Rpb24obWVhc3VyZW1lbnQpIHsgcmV0dXJuIHhTY2FsZShtZWFzdXJl
bWVudC50aW1lKTsgfSkKKyAgICAgICAgICAgICAgICAuYXR0cigieDIiLCBmdW5jdGlvbihtZWFz
dXJlbWVudCkgeyByZXR1cm4geFNjYWxlKG1lYXN1cmVtZW50LnRpbWUpOyB9KTsKKyAgICAgICAg
fSk7CisgICAgfSwKKyAgICBfY29tcHV0ZVhBeGlzRG9tYWluOiBmdW5jdGlvbiAodGltZVNlcmll
cykKKyAgICB7CisgICAgICAgIHZhciBleHRlbnQgPSBkMy5leHRlbnQodGltZVNlcmllcywgZnVu
Y3Rpb24ocG9pbnQpIHsgcmV0dXJuIHBvaW50LnRpbWU7IH0pOworICAgICAgICB2YXIgbWFyZ2lu
ID0gMzYwMCAqIDEwMDA7IC8vIFVzZSB4LmludmVyc2UgdG8gY29tcHV0ZSB0aGUgcmlnaHQgYW1v
dW50IGZyb20gYSBtYXJnaW4uCisgICAgICAgIHJldHVybiBbK2V4dGVudFswXSAtIG1hcmdpbiwg
K2V4dGVudFsxXSArIG1hcmdpbl07CisgICAgfSwKKyAgICBfY29tcHV0ZVlBeGlzRG9tYWluOiBm
dW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKQorICAgIHsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5fbWluTWF4Rm9yQWxsVGltZVNlcmllcyhzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAg
ICB2YXIgbWluID0gcmFuZ2VbMF07CisgICAgICAgIHZhciBtYXggPSByYW5nZVsxXTsKKyAgICAg
ICAgaWYgKG1heCA8IG1pbikKKyAgICAgICAgICAgIG1pbiA9IG1heCA9IDA7CisgICAgICAgIHZh
ciBkaWZmID0gbWF4IC0gbWluOworICAgICAgICB2YXIgbWFyZ2luID0gZGlmZiAqIDAuMDU7CisK
KyAgICAgICAgeUV4dGVudCA9IFttaW4gLSBtYXJnaW4sIG1heCArIG1hcmdpbl07CisvLyAgICAg
ICAgaWYgKHlNaW4gIT09IHVuZGVmaW5lZCkKKy8vICAgICAgICAgICAgeUV4dGVudFswXSA9IHBh
cnNlSW50KHlNaW4pOworICAgICAgICByZXR1cm4geUV4dGVudDsKKyAgICB9LAorICAgIF9taW5N
YXhGb3JBbGxUaW1lU2VyaWVzOiBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKQorICAgIHsK
KyAgICAgICAgdmFyIGN1cnJlbnRSYW5nZSA9IHRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzLm1pbk1h
eEZvclRpbWVSYW5nZShzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICB2YXIgYmFzZWxpbmVS
YW5nZSA9IHRoaXMuX2Jhc2VsaW5lVGltZVNlcmllcyA/IHRoaXMuX2Jhc2VsaW5lVGltZVNlcmll
cy5taW5NYXhGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBlbmRUaW1lKSA6IFtOdW1iZXIuTUFYX1ZB
TFVFLCBOdW1iZXIuTUlOX1ZBTFVFXTsKKyAgICAgICAgdmFyIHRhcmdldFJhbmdlID0gdGhpcy5f
dGFyZ2V0VGltZVNlcmllcyA/IHRoaXMuX3RhcmdldFRpbWVTZXJpZXMubWluTWF4Rm9yVGltZVJh
bmdlKHN0YXJ0VGltZSwgZW5kVGltZSkgOiBbTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1JTl9W
QUxVRV07CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBNYXRoLm1pbihjdXJyZW50UmFu
Z2VbMF0sIGJhc2VsaW5lUmFuZ2VbMF0sIHRhcmdldFJhbmdlWzBdKSwKKyAgICAgICAgICAgIE1h
dGgubWF4KGN1cnJlbnRSYW5nZVsxXSwgYmFzZWxpbmVSYW5nZVsxXSwgdGFyZ2V0UmFuZ2VbMV0p
LAorICAgICAgICBdOworICAgIH0sCisgICAgX2N1cnJlbnRTZWxlY3Rpb246IGZ1bmN0aW9uICgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYnJ1c2ggJiYgIXRoaXMuX2JydXNoLmVtcHR5
KCkgPyB0aGlzLl9icnVzaC5leHRlbnQoKSA6IG51bGw7CisgICAgfSwKKyAgICBfZG9tYWluQ2hh
bmdlZDogZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9j
dXJyZW50U2VsZWN0aW9uKCkgfHwgdGhpcy5nZXQoJ3NoYXJlZFNlbGVjdGlvbicpOworICAgICAg
ICB2YXIgbmV3WERvbWFpbiA9IHRoaXMuX3VwZGF0ZURvbWFpbigpOworCisgICAgICAgIGlmIChz
ZWxlY3Rpb24gJiYgbmV3WERvbWFpbiAmJiBzZWxlY3Rpb25bMF0gPD0gbmV3WERvbWFpblswXSAm
JiBuZXdYRG9tYWluWzFdIDw9IHNlbGVjdGlvblsxXSkKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9
IG51bGw7IC8vIE90aGVyd2lzZSB0aGUgdXNlciBoYXMgbm8gd2F5IG9mIGNsZWFyaW5nIHRoZSBz
ZWxlY3Rpb24uCisKKyAgICAgICAgdGhpcy5fcmVsYXlvdXREYXRhQW5kQXhlcyhzZWxlY3Rpb24p
OworICAgIH0ub2JzZXJ2ZXMoJ2RvbWFpbicpLAorICAgIF9zZWxlY3Rpb25DaGFuZ2VkOiBmdW5j
dGlvbiAoKQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uKHRoaXMuZ2V0KCdz
ZWxlY3Rpb24nKSk7CisgICAgfS5vYnNlcnZlcygnc2VsZWN0aW9uJyksCisgICAgX3VwZGF0ZVNl
bGVjdGlvbjogZnVuY3Rpb24gKG5ld1NlbGVjdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fYnJ1c2gpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGN1cnJlbnRTZWxl
Y3Rpb24gPSB0aGlzLl9jdXJyZW50U2VsZWN0aW9uKCk7CisgICAgICAgIGlmIChuZXdTZWxlY3Rp
b24gJiYgY3VycmVudFNlbGVjdGlvbiAmJiBBcHAuZG9tYWluc0FyZUVxdWFsKG5ld1NlbGVjdGlv
biwgY3VycmVudFNlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IGRvbWFpbiA9IHRoaXMuX3guZG9tYWluKCk7CisgICAgICAgIGlmICghbmV3U2VsZWN0aW9uIHx8
IEFwcC5kb21haW5zQXJlRXF1YWwoZG9tYWluLCBuZXdTZWxlY3Rpb24pKQorICAgICAgICAgICAg
dGhpcy5fYnJ1c2guY2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fYnJ1
c2guZXh0ZW50KG5ld1NlbGVjdGlvbik7CisgICAgICAgIHRoaXMuX3VwZGF0ZUJydXNoKCk7CisK
KyAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgIH0s
CisgICAgX2JydXNoQ2hhbmdlZDogZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9icnVzaC5lbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2JydXNoRXh0ZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGlv
bklzTG9ja2VkJywgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNlbGVjdGlv
bih1bmRlZmluZWQpOworCisgICAgICAgICAgICAvLyBBdm9pZCBsb2NraW5nIHRoZSBpbmRpY2F0
b3IgaW4gX21vdXNlRG93biB3aGVuIHRoZSBicnVzaCB3YXMgY2xlYXJlZCBpbiB0aGUgc2FtZSBt
b3VzZWRvd24gZXZlbnQuCisgICAgICAgICAgICB0aGlzLl9icnVzaEp1c3RDaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHNlbGYuX2JydXNoSnVzdENoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0sIDApOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLnNldCgnc2VsZWN0aW9uSXNMb2NrZWQnLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy5fc2V0Q3VycmVudFNlbGVjdGlvbih0aGlzLl9icnVzaC5leHRlbnQoKSk7CisgICAg
fSwKKyAgICBfa2V5UHJlc3NlZDogZnVuY3Rpb24gKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9jdXJyZW50SXRlbUluZGV4IHx8IHRoaXMuX2N1cnJlbnRTZWxlY3Rpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbmV3SW5kZXg7CisgICAgICAgIHN3aXRj
aCAoZXZlbnQua2V5Q29kZSkgeworICAgICAgICBjYXNlIDM3OiAvLyBMZWZ0CisgICAgICAgICAg
ICBuZXdJbmRleCA9IHRoaXMuX2N1cnJlbnRJdGVtSW5kZXggLSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0CisgICAgICAgICAgICBuZXdJbmRleCA9IHRo
aXMuX2N1cnJlbnRJdGVtSW5kZXggKyAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMzg6IC8vIFVwCisgICAgICAgIGNhc2UgNDA6IC8vIERvd24KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVubGlrZSBtb3Vz
ZW1vdmUsIGtleWRvd24gc2hvdWxkbid0IG1vdmUgb2ZmIHRoZSBlZGdlLgorICAgICAgICBpZiAo
dGhpcy5fY3VycmVudFRpbWVTZXJpZXNEYXRhW25ld0luZGV4XSkKKyAgICAgICAgICAgIHRoaXMu
X3NldEN1cnJlbnRJdGVtKG5ld0luZGV4KTsKKyAgICB9LAorICAgIF9tb3VzZU1vdmVkOiBmdW5j
dGlvbiAoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX21hcmdpbiB8fCB0aGlzLl9j
dXJyZW50U2VsZWN0aW9uKCkgfHwgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5fbW91c2VQb2ludEluR3JhcGgo
ZXZlbnQpOworCisgICAgICAgIHRoaXMuX3NlbGVjdENsb3Nlc3RQb2ludFRvTW91c2VBc0N1cnJl
bnRJdGVtKHBvaW50KTsKKyAgICB9LAorICAgIF9tb3VzZUxlZnQ6IGZ1bmN0aW9uIChldmVudCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbWFyZ2luIHx8IHRoaXMuX2N1cnJlbnRJdGVtTG9j
a2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NlbGVjdENsb3Nlc3RQ
b2ludFRvTW91c2VBc0N1cnJlbnRJdGVtKG51bGwpOworICAgIH0sCisgICAgX21vdXNlRG93bjog
ZnVuY3Rpb24gKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4gfHwgdGhp
cy5fY3VycmVudFNlbGVjdGlvbigpIHx8IHRoaXMuX2JydXNoSnVzdENoYW5nZWQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHBvaW50ID0gdGhpcy5fbW91c2VQb2ludEluR3Jh
cGgoZXZlbnQpOworICAgICAgICBpZiAoIXBvaW50KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCkgeworICAgICAgICAgICAgdGhpcy5f
Y3VycmVudEl0ZW1Mb2NrZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuc2V0KCdzZWxlY3Rl
ZEl0ZW0nLCBudWxsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fc2VsZWN0Q2xv
c2VzdFBvaW50VG9Nb3VzZUFzQ3VycmVudEl0ZW0ocG9pbnQpOworICAgIH0sCisgICAgX21vdXNl
UG9pbnRJbkdyYXBoOiBmdW5jdGlvbiAoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgb2Zmc2V0
ID0gJCh0aGlzLmdldCgnZWxlbWVudCcpKS5vZmZzZXQoKTsKKyAgICAgICAgaWYgKCFvZmZzZXQg
fHwgISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdzdmcnKS5sZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcG9pbnQgPSB7CisgICAgICAgICAgICB4OiBldmVu
dC5wYWdlWCAtIG9mZnNldC5sZWZ0IC0gdGhpcy5fbWFyZ2luLmxlZnQsCisgICAgICAgICAgICB5
OiBldmVudC5wYWdlWSAtIG9mZnNldC50b3AgLSB0aGlzLl9tYXJnaW4udG9wCisgICAgICAgIH07
CisKKyAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7CisgICAgICAgIHZhciB5U2NhbGUgPSB0
aGlzLl95OworICAgICAgICB2YXIgeERvbWFpbiA9IHhTY2FsZS5kb21haW4oKTsKKyAgICAgICAg
dmFyIHlEb21haW4gPSB5U2NhbGUuZG9tYWluKCk7CisgICAgICAgIGlmIChwb2ludC54ID49IHhT
Y2FsZSh4RG9tYWluWzBdKSAmJiBwb2ludC54IDw9IHhTY2FsZSh4RG9tYWluWzFdKQorICAgICAg
ICAgICAgJiYgcG9pbnQueSA8PSB5U2NhbGUoeURvbWFpblswXSkgJiYgcG9pbnQueSA+PSB5U2Nh
bGUoeURvbWFpblsxXSkpCisgICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfSwKKyAgICBfc2VsZWN0Q2xvc2VzdFBvaW50VG9Nb3VzZUFzQ3VycmVu
dEl0ZW06IGZ1bmN0aW9uIChwb2ludCkKKyAgICB7CisgICAgICAgIHZhciB4U2NhbGUgPSB0aGlz
Ll94OworICAgICAgICB2YXIgeVNjYWxlID0gdGhpcy5feTsKKyAgICAgICAgdmFyIGRpc3RhbmNl
SGV1cmlzdGljcyA9IGZ1bmN0aW9uIChtKSB7CisgICAgICAgICAgICB2YXIgbVggPSB4U2NhbGUo
bS50aW1lKTsKKyAgICAgICAgICAgIHZhciBtWSA9IHlTY2FsZShtLnZhbHVlKTsKKyAgICAgICAg
ICAgIHZhciB4RGlmZiA9IG1YIC0gcG9pbnQueDsKKyAgICAgICAgICAgIHZhciB5RGlmZiA9IG1Z
IC0gcG9pbnQueTsKKyAgICAgICAgICAgIHJldHVybiB4RGlmZiAqIHhEaWZmICsgeURpZmYgKiB5
RGlmZiAvIDE2OyAvLyBGYXZvciBob3Jpem9udGFsIGFmZmluaXR5LgorICAgICAgICB9OworICAg
ICAgICBkaXN0YW5jZUhldXJpc3RpY3MgPSBmdW5jdGlvbiAobSkgeworICAgICAgICAgICAgcmV0
dXJuIE1hdGguYWJzKHhTY2FsZShtLnRpbWUpIC0gcG9pbnQueCk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgbmV3SXRlbUluZGV4OworICAgICAgICBpZiAocG9pbnQgJiYgIXRoaXMuX2N1cnJl
bnRTZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgdmFyIGRpc3RhbmNlcyA9IHRoaXMuX2N1cnJl
bnRUaW1lU2VyaWVzRGF0YS5tYXAoZGlzdGFuY2VIZXVyaXN0aWNzKTsKKyAgICAgICAgICAgIHZh
ciBtaW5EaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUU7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChk
aXN0YW5jZXNbaV0gPCBtaW5EaXN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBuZXdJdGVt
SW5kZXggPSBpOworICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlc1tp
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLl9zZXRDdXJyZW50SXRlbShuZXdJdGVtSW5kZXgpOworICAgICAgICB0aGlzLl91cGRh
dGVTZWxlY3Rpb25Ub29sYmFyKCk7CisgICAgfSwKKyAgICBfY3VycmVudFRpbWVDaGFuZ2VkOiBm
dW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9tYXJnaW4gfHwgdGhpcy5fY3Vy
cmVudFNlbGVjdGlvbigpIHx8IHRoaXMuX2N1cnJlbnRJdGVtTG9ja2VkKQorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy5nZXQoJ2N1cnJlbnRUaW1l
Jyk7CisgICAgICAgIGlmIChjdXJyZW50VGltZSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcG9pbnQgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGFbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKHBvaW50LnRpbWUgPj0gY3VycmVudFRpbWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0oaSwgLyogZG9Ob3ROb3RpZnkgKi8gdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0odW5kZWZp
bmVkLCAvKiBkb05vdE5vdGlmeSAqLyB0cnVlKTsKKyAgICB9Lm9ic2VydmVzKCdjdXJyZW50VGlt
ZScpLAorICAgIF9zZXRDdXJyZW50SXRlbTogZnVuY3Rpb24gKG5ld0l0ZW1JbmRleCwgZG9Ob3RO
b3RpZnkpCisgICAgeworICAgICAgICBpZiAobmV3SXRlbUluZGV4ID09PSB0aGlzLl9jdXJyZW50
SXRlbUluZGV4KSB7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpCisg
ICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGVkSXRlbScsIHRoaXMuZ2V0KCdjdXJyZW50
SXRlbScpID8gdGhpcy5nZXQoJ2N1cnJlbnRJdGVtJykubWVhc3VyZW1lbnQuaWQoKSA6IG51bGwp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG5ld0l0ZW0g
PSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGFbbmV3SXRlbUluZGV4XTsKKyAgICAgICAgdGhp
cy5fYnJ1c2hFeHRlbnQgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtSW5k
ZXggPSBuZXdJdGVtSW5kZXg7CisKKyAgICAgICAgaWYgKCFuZXdJdGVtKSB7CisgICAgICAgICAg
ICB0aGlzLl9jdXJyZW50SXRlbUxvY2tlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5zZXQo
J3NlbGVjdGVkSXRlbScsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdXBkYXRl
Q3VycmVudEl0ZW1JbmRpY2F0b3JzKCk7CisKKyAgICAgICAgaWYgKCFkb05vdE5vdGlmeSkKKyAg
ICAgICAgICAgIHRoaXMuc2V0KCdjdXJyZW50VGltZScsIG5ld0l0ZW0gPyBuZXdJdGVtLnRpbWUg
OiB1bmRlZmluZWQpOworCisgICAgICAgIHRoaXMuc2V0KCdjdXJyZW50SXRlbScsIG5ld0l0ZW0p
OworICAgICAgICBpZiAodGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQpCisgICAgICAgICAgICB0aGlz
LnNldCgnc2VsZWN0ZWRJdGVtJywgbmV3SXRlbSA/IG5ld0l0ZW0ubWVhc3VyZW1lbnQuaWQoKSA6
IG51bGwpOworICAgIH0sCisgICAgX3NlbGVjdGVkSXRlbUNoYW5nZWQ6IGZ1bmN0aW9uICgpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX21hcmdpbikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgc2VsZWN0ZWRJZCA9IHRoaXMuZ2V0KCdzZWxlY3RlZEl0ZW0nKTsKKyAgICAg
ICAgdmFyIGN1cnJlbnRJdGVtID0gdGhpcy5nZXQoJ2N1cnJlbnRJdGVtJyk7CisgICAgICAgIGlm
IChjdXJyZW50SXRlbSAmJiBjdXJyZW50SXRlbS5tZWFzdXJlbWVudC5pZCgpID09IHNlbGVjdGVk
SWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlcmllcyA9IHRoaXMuX2N1
cnJlbnRUaW1lU2VyaWVzRGF0YTsKKyAgICAgICAgdmFyIHNlbGVjdGVkSXRlbUluZGV4ID0gdW5k
ZWZpbmVkOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgaWYgKHNlcmllc1tpXS5tZWFzdXJlbWVudC5pZCgpID09IHNlbGVjdGVk
SWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb24obnVsbCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1Mb2NrZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHRoaXMuX3NldEN1cnJlbnRJdGVtKGkpOworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZVNlbGVjdGlvblRvb2xiYXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Lm9ic2VydmVzKCdzZWxlY3RlZEl0ZW0nKS5vbignaW5pdCcp
LAorICAgIF9oaWdobGlnaHRlZEl0ZW1zQ2hhbmdlZDogZnVuY3Rpb24gKCkgeworICAgICAgICBp
ZiAoIXRoaXMuX21hcmdpbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgaGln
aGxpZ2h0ZWRJdGVtcyA9IHRoaXMuZ2V0KCdoaWdobGlnaHRlZEl0ZW1zJyk7CisKKyAgICAgICAg
dmFyIGRhdGEgPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGEuZmlsdGVyKGZ1bmN0aW9uIChp
dGVtKSB7IHJldHVybiBoaWdobGlnaHRlZEl0ZW1zW2l0ZW0ubWVhc3VyZW1lbnQuaWQoKV07IH0p
OworCisgICAgICAgIGlmICh0aGlzLl9oaWdobGlnaHRzLmxlbmd0aCkKKyAgICAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodHMuZm9yRWFjaChmdW5jdGlvbiAoaGlnaGxpZ2h0KSB7IGhpZ2hsaWdodC5y
ZW1vdmUoKTsgfSk7CisKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0cy5wdXNoKHRoaXMuX2NsaXBw
ZWRDb250YWluZXIKKyAgICAgICAgICAgIC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKQorICAgICAg
ICAgICAgICAgIC5kYXRhKGRhdGEpCisgICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoImxpbmUi
KQorICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJoaWdobGlnaHQiKSk7CisKKyAgICAg
ICAgdGhpcy5fdXBkYXRlSGlnaGxpZ2h0UG9zaXRpb25zKCk7CisKKyAgICB9Lm9ic2VydmVzKCdo
aWdobGlnaHRlZEl0ZW1zJyksCisgICAgX3Jhbmdlc0NoYW5nZWQ6IGZ1bmN0aW9uICgpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRUaW1lU2VyaWVzKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGZ1bmN0aW9uIG1pZFBvaW50KGZpcnN0UG9pbnQsIHNlY29uZFBvaW50
KSB7CisgICAgICAgICAgICBpZiAoZmlyc3RQb2ludCAmJiBzZWNvbmRQb2ludCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKCtmaXJzdFBvaW50LnRpbWUgKyArc2Vjb25kUG9pbnQudGltZSkgLyAy
OworICAgICAgICAgICAgaWYgKGZpcnN0UG9pbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZp
cnN0UG9pbnQudGltZTsKKyAgICAgICAgICAgIHJldHVybiBzZWNvbmRQb2ludC50aW1lOworICAg
ICAgICB9CisgICAgICAgIHZhciBjdXJyZW50VGltZVNlcmllcyA9IHRoaXMuX2N1cnJlbnRUaW1l
U2VyaWVzOworICAgICAgICB2YXIgbGlua1JvdXRlID0gdGhpcy5nZXQoJ3JhbmdlUm91dGUnKTsK
KyAgICAgICAgdGhpcy5zZXQoJ3JhbmdlQmFycycsICh0aGlzLmdldCgncmFuZ2VzJykgfHwgW10p
Lm1hcChmdW5jdGlvbiAocmFuZ2UpIHsKKyAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnJlbnRU
aW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZChyYW5nZS5nZXQoJ3N0YXJ0UnVuJykp
OworICAgICAgICAgICAgdmFyIGVuZCA9IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVh
c3VyZW1lbnRJZChyYW5nZS5nZXQoJ2VuZFJ1bicpKTsKKyAgICAgICAgICAgIHJldHVybiBFbWJl
ci5PYmplY3QuY3JlYXRlKHsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWU6IG1pZFBvaW50KGN1
cnJlbnRUaW1lU2VyaWVzLnByZXZpb3VzUG9pbnQoc3RhcnQpLCBzdGFydCksCisgICAgICAgICAg
ICAgICAgZW5kVGltZTogbWlkUG9pbnQoZW5kLCBjdXJyZW50VGltZVNlcmllcy5uZXh0UG9pbnQo
ZW5kKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlLAorICAgICAgICAgICAgICAgIGxl
ZnQ6IG51bGwsCisgICAgICAgICAgICAgICAgcmlnaHQ6IG51bGwsCisgICAgICAgICAgICAgICAg
cm93SW5kZXg6IG51bGwsCisgICAgICAgICAgICAgICAgdG9wOiBudWxsLAorICAgICAgICAgICAg
ICAgIGJvdHRvbTogbnVsbCwKKyAgICAgICAgICAgICAgICBsaW5rUm91dGU6IGxpbmtSb3V0ZSwK
KyAgICAgICAgICAgICAgICBsaW5rSWQ6IHJhbmdlLmdldCgnaWQnKSwKKyAgICAgICAgICAgICAg
ICBsYWJlbDogcmFuZ2UuZ2V0KCdsYWJlbCcpLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
KTsKKworICAgICAgICB0aGlzLl91cGRhdGVSYW5nZUJhclJlY3RzKCk7CisgICAgfS5vYnNlcnZl
cygncmFuZ2VzJyksCisgICAgX3VwZGF0ZVJhbmdlQmFyUmVjdHM6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHJhbmdlQmFycyA9IHRoaXMuZ2V0KCdyYW5nZUJhcnMnKTsKKyAgICAgICAgaWYg
KCFyYW5nZUJhcnMgfHwgIXJhbmdlQmFycy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIHhTY2FsZSA9IHRoaXMuX3g7CisgICAgICAgIHZhciB5U2NhbGUgPSB0aGlz
Ll95OworCisgICAgICAgIC8vIEV4cGFuZCB0aGUgd2lkdGggb2YgZWFjaCByYW5nZSBhcyBuZWVk
ZWQgYW5kIHNvcnQgcmFuZ2VzIGJ5IHRoZSBsZWZ0LWVkZ2Ugb2YgcmFuZ2VzLgorICAgICAgICB2
YXIgbWluV2lkdGggPSAzOworICAgICAgICB2YXIgc29ydGVkQmFycyA9IHJhbmdlQmFycy5tYXAo
ZnVuY3Rpb24gKGJhcikgeworICAgICAgICAgICAgdmFyIGxlZnQgPSB4U2NhbGUoYmFyLmdldCgn
c3RhcnRUaW1lJykpOworICAgICAgICAgICAgdmFyIHJpZ2h0ID0geFNjYWxlKGJhci5nZXQoJ2Vu
ZFRpbWUnKSk7CisgICAgICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDwgbWluV2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICBsZWZ0IC09IG1pbldpZHRoIC8gMjsKKyAgICAgICAgICAgICAgICByaWdo
dCArPSBtaW5XaWR0aCAvIDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYXIuc2V0KCds
ZWZ0JywgbGVmdCk7CisgICAgICAgICAgICBiYXIuc2V0KCdyaWdodCcsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXI7CisgICAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGZpcnN0LCBzZWNv
bmQpIHsgcmV0dXJuIGZpcnN0LmdldCgnbGVmdCcpIC0gc2Vjb25kLmdldCgnbGVmdCcpOyB9KTsK
KworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBsZWZ0IGVkZ2VzIG9mIGFsbCByYW5nZXMgcHJp
b3IgdG8gYSByYW5nZSBSMSBpcyBvbiB0aGUgbGVmdCBvZiBSMS4KKyAgICAgICAgLy8gUGxhY2Ug
UjEgaW50byBhIHJvdyBpbiB3aGljaCByaWdodCBlZGdlcyBvZiBhbGwgcmFuZ2VzIHByaW9yIHRv
IFIxIGlzIG9uIHRoZSBsZWZ0IG9mIFIxIHRvIGF2b2lkIG92ZXJsYXBwaW5nIHJhbmdlcy4KKyAg
ICAgICAgdmFyIHJvd3MgPSBbXTsKKyAgICAgICAgc29ydGVkQmFycy5mb3JFYWNoKGZ1bmN0aW9u
IChiYXIpIHsKKyAgICAgICAgICAgIHZhciByb3dJbmRleCA9IDA7CisgICAgICAgICAgICBmb3Ig
KDsgcm93SW5kZXggPCByb3dzLmxlbmd0aDsgcm93SW5kZXgrKykgeworICAgICAgICAgICAgICAg
IHZhciBjdXJyZW50Um93ID0gcm93c1tyb3dJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRSb3dbY3VycmVudFJvdy5sZW5ndGggLSAxXS5nZXQoJ3JpZ2h0JykgPCBiYXIuZ2V0KCds
ZWZ0JykpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFJvdy5wdXNoKGJhcik7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICByb3dzLnB1c2goW2Jhcl0pOworICAgICAgICAgICAgYmFyLnNldCgncm93SW5kZXgnLCByb3dJ
bmRleCk7CisgICAgICAgIH0pOworICAgICAgICB2YXIgcm93SGVpZ2h0ID0gMC42ICogdGhpcy5f
cmVtOworICAgICAgICB2YXIgZmlyc3RSb3dUb3AgPSB0aGlzLl9jb250ZW50SGVpZ2h0IC0gcm93
cy5sZW5ndGggKiByb3dIZWlnaHQ7CisgICAgICAgIHZhciBiYXJIZWlnaHQgPSAwLjUgKiB0aGlz
Ll9yZW07CisKKyAgICAgICAgJCh0aGlzLmdldCgnZWxlbWVudCcpKS5maW5kKCcucmFuZ2VCYXJz
Q29udGFpbmVySW5saW5lU3R5bGUnKS5jc3MoeworICAgICAgICAgICAgbGVmdDogdGhpcy5fbWFy
Z2luLmxlZnQgKyAncHgnLAorICAgICAgICAgICAgdG9wOiB0aGlzLl9tYXJnaW4udG9wICsgZmly
c3RSb3dUb3AgKyAncHgnLAorICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbnRlbnRXaWR0aCAr
ICdweCcsCisgICAgICAgICAgICBoZWlnaHQ6IHJvd3MubGVuZ3RoICogYmFySGVpZ2h0ICsgJ3B4
JywKKyAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJywKKyAgICAgICAgICAgIHBvc2l0aW9u
OiAnYWJzb2x1dGUnLAorICAgICAgICB9KTsKKworICAgICAgICB2YXIgbWFyZ2luID0gdGhpcy5f
bWFyZ2luOworICAgICAgICBzb3J0ZWRCYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhcikgeworICAg
ICAgICAgICAgdmFyIHRvcCA9IGJhci5nZXQoJ3Jvd0luZGV4JykgKiByb3dIZWlnaHQ7CisgICAg
ICAgICAgICB2YXIgaGVpZ2h0ID0gYmFySGVpZ2h0OworICAgICAgICAgICAgdmFyIGxlZnQgPSBi
YXIuZ2V0KCdsZWZ0Jyk7CisgICAgICAgICAgICB2YXIgd2lkdGggPSBiYXIuZ2V0KCdyaWdodCcp
IC0gbGVmdDsKKyAgICAgICAgICAgIGJhci5zZXQoJ2lubGluZVN0eWxlJywgJ2xlZnQ6ICcgKyBs
ZWZ0ICsgJ3B4OyB0b3A6ICcgKyB0b3AgKyAncHg7IHdpZHRoOiAnICsgd2lkdGggKyAncHg7IGhl
aWdodDogJyArIGhlaWdodCArICdweDsnKTsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICBfdXBk
YXRlQ3VycmVudEl0ZW1JbmRpY2F0b3JzOiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9jdXJyZW50SXRlbUxpbmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGl0ZW0gPSB0aGlzLl9jdXJyZW50VGltZVNlcmllc0RhdGFbdGhpcy5fY3VycmVudEl0ZW1J
bmRleF07CisgICAgICAgIGlmICghaXRlbSkgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0
ZW1MaW5lLmF0dHIoIngxIiwgLTEwMDApLmF0dHIoIngyIiwgLTEwMDApOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudEl0ZW1DaXJjbGUuYXR0cigiY3giLCAtMTAwMCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgeCA9IHRoaXMuX3goaXRlbS50aW1lKTsK
KyAgICAgICAgdmFyIHkgPSB0aGlzLl95KGl0ZW0udmFsdWUpOworCisgICAgICAgIHRoaXMuX2N1
cnJlbnRJdGVtTGluZQorICAgICAgICAgICAgLmF0dHIoIngxIiwgeCkKKyAgICAgICAgICAgIC5h
dHRyKCJ4MiIsIHgpOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRJdGVtQ2lyY2xlCisgICAgICAg
ICAgICAuYXR0cigiY3giLCB4KQorICAgICAgICAgICAgLmF0dHIoImN5IiwgeSk7CisgICAgfSwK
KyAgICBfc2V0Q3VycmVudFNlbGVjdGlvbjogZnVuY3Rpb24gKG5ld1NlbGVjdGlvbikKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9icnVzaEV4dGVudCA9PT0gbmV3U2VsZWN0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBwb2ludHMgPSBudWxsOworICAgICAgICBpZiAo
bmV3U2VsZWN0aW9uKSB7CisgICAgICAgICAgICBwb2ludHMgPSB0aGlzLl9jdXJyZW50VGltZVNl
cmllc0RhdGEKKyAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1
cm4gcG9pbnQudGltZSA+PSBuZXdTZWxlY3Rpb25bMF0gJiYgcG9pbnQudGltZSA8PSBuZXdTZWxl
Y3Rpb25bMV07IH0pOworICAgICAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHBvaW50cyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9icnVzaEV4
dGVudCA9IG5ld1NlbGVjdGlvbjsKKyAgICAgICAgdGhpcy5fc2V0Q3VycmVudEl0ZW0odW5kZWZp
bmVkKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0aW9uVG9vbGJhcigpOworCisgICAgICAg
IGlmICghQXBwLmRvbWFpbnNBcmVFcXVhbCh0aGlzLmdldCgnc2VsZWN0aW9uJyksIG5ld1NlbGVj
dGlvbikpCisgICAgICAgICAgICB0aGlzLnNldCgnc2VsZWN0aW9uJywgbmV3U2VsZWN0aW9uKTsK
KyAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGVkUG9pbnRzJywgcG9pbnRzKTsKKyAgICB9LAorICAg
IF91cGRhdGVTZWxlY3Rpb25Ub29sYmFyOiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLmdldCgnaW50ZXJhY3RpdmUnKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fY3VycmVudFNlbGVjdGlvbigpOworICAgICAgICB2YXIg
c2VsZWN0aW9uVG9vbGJhciA9ICQodGhpcy5nZXQoJ2VsZW1lbnQnKSkuY2hpbGRyZW4oJy5zZWxl
Y3Rpb24tdG9vbGJhcicpOworICAgICAgICBpZiAoc2VsZWN0aW9uKSB7CisgICAgICAgICAgICB2
YXIgbGVmdCA9IHRoaXMuX3goc2VsZWN0aW9uWzBdKTsKKyAgICAgICAgICAgIHZhciByaWdodCA9
IHRoaXMuX3goc2VsZWN0aW9uWzFdKTsKKyAgICAgICAgICAgIHNlbGVjdGlvblRvb2xiYXIKKyAg
ICAgICAgICAgICAgICAuY3NzKHtsZWZ0OiB0aGlzLl9tYXJnaW4ubGVmdCArIHJpZ2h0LCB0b3A6
IHRoaXMuX21hcmdpbi50b3AgKyB0aGlzLl9jb250ZW50SGVpZ2h0fSkKKyAgICAgICAgICAgICAg
ICAuc2hvdygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNlbGVjdGlvblRvb2xiYXIu
aGlkZSgpOworICAgIH0sCisgICAgYWN0aW9uczogeworICAgICAgICB6b29tOiBmdW5jdGlvbiAo
KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLnNlbmRBY3Rpb24oJ3pvb20nLCB0aGlzLl9j
dXJyZW50U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgdGhpcy5zZXQoJ3NlbGVjdGlvbicsIG51
bGwpOworICAgICAgICB9LAorICAgICAgICBvcGVuUmFuZ2U6IGZ1bmN0aW9uIChyYW5nZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGhpcy5zZW5kQWN0aW9uKCdvcGVuUmFuZ2UnLCByYW5nZSk7
CisgICAgICAgIH0sCisgICAgfSwKK30pOwo=
</data>
<flag name="review"
          id="268292"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>