<?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>131066</bug_id>
          
          <creation_ts>2014-04-01 14:26:57 -0700</creation_ts>
          <short_desc>Web Inspector: Clean up more Canvas agent stuff after r164614</short_desc>
          <delta_ts>2014-04-01 15:02:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>DoNotImportToRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>996452</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-04-01 14:26:57 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/164614 left around some files we don&apos;t need anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996458</commentid>
    <comment_count>1</comment_count>
      <attachid>228324</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-04-01 14:34:20 -0700</bug_when>
    <thetext>Created attachment 228324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996465</commentid>
    <comment_count>2</comment_count>
      <attachid>228324</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-01 14:51:21 -0700</bug_when>
    <thetext>Comment on attachment 228324
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996472</commentid>
    <comment_count>3</comment_count>
      <attachid>228324</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-01 15:02:43 -0700</bug_when>
    <thetext>Comment on attachment 228324
Patch

Clearing flags on attachment: 228324

Committed r166616: &lt;http://trac.webkit.org/changeset/166616&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996473</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-01 15:02:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228324</attachid>
            <date>2014-04-01 14:34:20 -0700</date>
            <delta_ts>2014-04-01 15:02:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131066-20140401143400.patch</filename>
            <type>text/plain</type>
            <size>123911</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2NTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNmZjhmNTNmZGJmMGI0
MGVhMTlkNWJkOTE4ZDUzNjYxNzFhYTE5NC4uZGQyYjcxMGUyNDUzN2U3YmQ4ZDI1NmI0MzliYTA2
MGY2ZWZmZDNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA0LTAxICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIHJl
c3Qgb2YgdGhlIG9sZCBDYW52YXMgaW5zcGVjdGlvbiBzdXBwb3J0LgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEwNjYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBSZW1v
dmVkIENhbnZhcy5qc29uLgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6IERpdHRvLgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb246IFJlbW92
ZWQuCisKIDIwMTQtMDMtMjkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQ2xhcmlmeSBzb21lIHNjcm9sbGluZyB0cmVlIHRlcm1pbm9sb2d5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL0NoYW5nZUxvZwppbmRleCAxZDZjMDBiNjYwMzBlYzhiZGE3OGE1NmZkMjFhMTYzMTIz
NjkzM2QzLi5kMmRkMDQ4ZTQwNWUwN2YwNzM5ZTUxYmI0ZDRjMzk5MTY3NGUzNWE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0wNC0wMSAgVGltb3RoeSBI
YXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSByZXN0IG9m
IHRoZSBvbGQgQ2FudmFzIGluc3BlY3Rpb24gc3VwcG9ydC4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb3RvY29sL0xl
Z2FjeS83LjAvSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzOiBVcGRhdGVkLgorICAgICAg
ICAqIFZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb246IFJlbW92ZWQgQ2FudmFzIGRvbWFp
bi4KKwogMjAxNC0wMy0yOCAgSmFtZXMgQ3JhaWcgIDxqY3JhaWdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEFYSTogc3VwcG9ydCBmb3IgbGl2ZSByZWdpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IDdmOWY0ZTM5NTI4NWZhZDNiMDVmN2ZlYzczNDVlMWM5ZTFhNWRjYTku
LmY0YTg0MzBhMDYzNDk3ZGU5Y2FjNGYzMGMxNTg3ZTMzNmQ1NjcxYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC03NTcsNyArNzU3LDYgQEAgc2V0KFdlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3NjcmlwdHMiKQogc2V0KFdlYkNv
cmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9j
b2wvQXBwbGljYXRpb25DYWNoZS5qc29uCiAgICAgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL0NTUy5qc29uCi0gICAgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0Nh
bnZhcy5qc29uCiAgICAgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
CiAgICAgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RPTURlYnVnZ2VyLmpzb24K
ICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAzYzVkNzcwY2JlYTVlNGIzODYyZDRmYmJh
NmI3NDE4NWZkOTFmZTVmLi40YzE5YmRmMmExMzJiYzg5M2ZmYWM4YzBiNTlkOTQyZDhmNTgzMzU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTExMTcsNyArMTExNyw2IEBAIEpT
JS5oIDogJS5pZGwgJChKU19CSU5ESU5HU19TQ1JJUFRTKSAkKElETF9BVFRSSUJVVEVTX0ZJTEUp
ICQoV0lORE9XX0NPTlNUUlVDVE9SCiBJTlNQRUNUT1JfRE9NQUlOUyA9IFwKICAgICAkKFdlYkNv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24gXAogICAgICQoV2Vi
Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uIFwKLSAgICAkKFdlYkNvcmUpL2luc3Bl
Y3Rvci9wcm90b2NvbC9DYW52YXMuanNvbiBcCiAgICAgJChXZWJDb3JlKS9pbnNwZWN0b3IvcHJv
dG9jb2wvRE9NLmpzb24gXAogICAgICQoV2ViQ29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RPTURl
YnVnZ2VyLmpzb24gXAogICAgICQoV2ViQ29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RPTVN0b3Jh
Z2UuanNvbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgwMzY5ODVkNWQyYzRiZDIzYzNmNGU2MDIzYThjOTk2MjY2MTU1MjEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMzIxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAcGFyYW0ge0luamVjdGVkU2NyaXB0SG9zdH0gSW5q
ZWN0ZWRTY3JpcHRIb3N0Ci0gKiBAcGFyYW0ge1dpbmRvd30gaW5zcGVjdGVkV2luZG93Ci0gKiBA
cGFyYW0ge251bWJlcn0gaW5qZWN0ZWRTY3JpcHRJZAotICovCi0oZnVuY3Rpb24gKEluamVjdGVk
U2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkKSB7Ci0KLXZhciBU
eXBlVXRpbHMgPSB7Ci0gICAgLyoqCi0gICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdp
c3RyeS90eXBlZGFycmF5L3NwZWNzL2xhdGVzdC8jNwotICAgICAqIEBjb25zdAotICAgICAqIEB0
eXBlIHshQXJyYXkuPGZ1bmN0aW9uKG5ldzpBcnJheUJ1ZmZlclZpZXcsIEFycmF5QnVmZmVyVmll
dyk+fQotICAgICAqLwotICAgIF90eXBlZEFycmF5Q2xhc3NlczogKGZ1bmN0aW9uKHR5cGVOYW1l
cykgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBu
ID0gdHlwZU5hbWVzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgaWYgKGluc3Bl
Y3RlZFdpbmRvd1t0eXBlTmFtZXNbaV1dKQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlu
c3BlY3RlZFdpbmRvd1t0eXBlTmFtZXNbaV1dKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0pKFsiSW50OEFycmF5IiwgIlVpbnQ4QXJyYXkiLCAiVWludDhDbGFtcGVk
QXJyYXkiLCAiSW50MTZBcnJheSIsICJVaW50MTZBcnJheSIsICJJbnQzMkFycmF5IiwgIlVpbnQz
MkFycmF5IiwgIkZsb2F0MzJBcnJheSIsICJGbG9hdDY0QXJyYXkiXSksCi0KLSAgICAvKioKLSAg
ICAgKiBAY29uc3QKLSAgICAgKiBAdHlwZSB7IUFycmF5LjxzdHJpbmc+fQotICAgICAqLwotICAg
IF9zdXBwb3J0ZWRQcm9wZXJ0eVByZWZpeGVzOiBbIndlYmtpdCJdLAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHsqfSBhcnJheQotICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKG5ldzpBcnJheUJ1
ZmZlclZpZXcsIEFycmF5QnVmZmVyVmlldyl8bnVsbH0KLSAgICAgKi8KLSAgICB0eXBlZEFycmF5
Q2xhc3M6IGZ1bmN0aW9uKGFycmF5KQotICAgIHsKLSAgICAgICAgdmFyIGNsYXNzZXMgPSBUeXBl
VXRpbHMuX3R5cGVkQXJyYXlDbGFzc2VzOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNs
YXNzZXMubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXkgaW5zdGFu
Y2VvZiBjbGFzc2VzW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc2VzW2ldOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0geyp9IG9iagotICAgICAqIEByZXR1cm4geyp9Ci0gICAgICovCi0gICAgY2xvbmU6IGZ1
bmN0aW9uKG9iaikKLSAgICB7Ci0gICAgICAgIGlmICghb2JqKQotICAgICAgICAgICAgcmV0dXJu
IG9iajsKLQotICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7Ci0gICAgICAgIGlmICh0eXBl
ICE9PSAib2JqZWN0IiAmJiB0eXBlICE9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgcmV0dXJu
IG9iajsKLQotICAgICAgICAvLyBIYW5kbGUgQXJyYXkgYW5kIEFycmF5QnVmZmVyIGluc3RhbmNl
cy4KLSAgICAgICAgaWYgKHR5cGVvZiBvYmouc2xpY2UgPT09ICJmdW5jdGlvbiIpIHsKLSAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KG9iaiBpbnN0YW5jZW9mIEFycmF5IHx8IG9iaiBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyKTsKLSAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoMCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgdHlwZWRBcnJheUNsYXNzID0gVHlwZVV0aWxzLnR5cGVkQXJy
YXlDbGFzcyhvYmopOwotICAgICAgICBpZiAodHlwZWRBcnJheUNsYXNzKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyB0eXBlZEFycmF5Q2xhc3MoLyoqIEB0eXBlIHtBcnJheUJ1ZmZlclZpZXd9ICov
IChvYmopKTsKLQotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkg
ewotICAgICAgICAgICAgdmFyIGltZyA9IC8qKiBAdHlwZSB7SFRNTEltYWdlRWxlbWVudH0gKi8g
KG9iaik7Ci0gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIEltYWdlcyB3aXRoIEJsb2Ig
VVJJczogY2xvbmVOb2RlIHdpbGwgZmFpbCBpZiB0aGUgQmxvYiBVUkkgaGFzIGFscmVhZHkgYmVl
biByZXZva2VkLgotICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgaXMgYSBidWcgaW4g
V2ViS2l0IGNvcmU/Ci0gICAgICAgICAgICBpZiAoL15ibG9iOi8udGVzdChpbWcuc3JjKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZVV0aWxzLmNsb25lSW50b0NhbnZhcyhpbWcpOwotICAg
ICAgICAgICAgcmV0dXJuIGltZy5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gVHlwZVV0aWxzLmNsb25lSW50b0NhbnZhcyhvYmopOwotCi0gICAgICAgIGlmIChvYmogaW5z
dGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIFR5cGVVdGlscy5j
bG9uZUludG9DYW52YXMob2JqLCBvYmoudmlkZW9XaWR0aCwgb2JqLnZpZGVvSGVpZ2h0KTsKLQot
ICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7Ci0gICAgICAgICAgICB2YXIg
Y29udGV4dCA9IFR5cGVVdGlscy5fZHVtbXlDYW52YXMyZENvbnRleHQoKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBzdXBwcmVzcyB0eXBlIGNoZWNrcyBkdWUgdG8gb3V0ZGF0ZWQgYnVpbHRpbiBl
eHRlcm5zIGZvciBjcmVhdGVJbWFnZURhdGEuCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gKC8q
KiBAdHlwZSB7P30gKi8gKGNvbnRleHQpKS5jcmVhdGVJbWFnZURhdGEob2JqKTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBuID0gb2JqLmRhdGEubGVuZ3RoOyBpIDwgbjsgKytpKQotICAg
ICAgICAgICAgICByZXN1bHQuZGF0YVtpXSA9IG9iai5kYXRhW2ldOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9O
T1RfUkVBQ0hFRDogZmFpbGVkIHRvIGNsb25lIG9iamVjdDogIiwgb2JqKTsKLSAgICAgICAgcmV0
dXJuIG9iajsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVt
ZW50fEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR9IG9iagotICAgICAqIEBwYXJh
bSB7bnVtYmVyPX0gd2lkdGgKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGhlaWdodAotICAgICAq
IEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fQotICAgICAqLwotICAgIGNsb25lSW50b0NhbnZh
czogZnVuY3Rpb24ob2JqLCB3aWR0aCwgaGVpZ2h0KQotICAgIHsKLSAgICAgICAgdmFyIGNhbnZh
cyA9IC8qKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9ICovIChpbnNwZWN0ZWRXaW5kb3cuZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpOwotICAgICAgICBjYW52YXMud2lkdGggPSB3
aWR0aCB8fCArb2JqLndpZHRoOwotICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0IHx8ICtv
YmouaGVpZ2h0OwotICAgICAgICB2YXIgY29udGV4dCA9IC8qKiBAdHlwZSB7Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEfSAqLyAoUmVzb3VyY2Uud3JhcHBlZE9iamVjdChjYW52YXMuZ2V0Q29udGV4
dCgiMmQiKSkpOwotICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShvYmosIDAsIDApOwotICAgICAg
ICByZXR1cm4gY2FudmFzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVj
dD19IG9iagotICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICBjbG9uZU9iamVj
dDogZnVuY3Rpb24ob2JqKQotICAgIHsKLSAgICAgICAgaWYgKCFvYmopCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHt9OwotICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gb2JqKQotICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQXJyYXku
PHN0cmluZz59IG5hbWVzCi0gICAgICogQHJldHVybiB7IU9iamVjdC48c3RyaW5nLCBib29sZWFu
Pn0KLSAgICAgKi8KLSAgICBjcmVhdGVQcmVmaXhlZFByb3BlcnR5TmFtZXNTZXQ6IGZ1bmN0aW9u
KG5hbWVzKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuYW1lOyBuYW1lID0gbmFtZXNbaV07ICsraSkgewot
ICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBzdWZmaXgg
PSBuYW1lLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSk7Ci0gICAg
ICAgICAgICBmb3IgKHZhciBqID0gMCwgcHJlZml4OyBwcmVmaXggPSBUeXBlVXRpbHMuX3N1cHBv
cnRlZFByb3BlcnR5UHJlZml4ZXNbal07ICsraikKLSAgICAgICAgICAgICAgICByZXN1bHRbcHJl
Zml4ICsgc3VmZml4XSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEfQotICAgICAqLwotICAgIF9kdW1teUNhbnZhczJkQ29udGV4dDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGNvbnRleHQgPSBUeXBlVXRpbHMuX2R1bW15Q2FudmFzMmRDb250ZXh0
SW5zdGFuY2U7Ci0gICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgdmFyIGNhbnZh
cyA9IC8qKiBAdHlwZSB7SFRNTENhbnZhc0VsZW1lbnR9ICovIChpbnNwZWN0ZWRXaW5kb3cuZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpOwotICAgICAgICAgICAgY29udGV4dCA9IC8q
KiBAdHlwZSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAqLyAoUmVzb3VyY2Uud3JhcHBlZE9i
amVjdChjYW52YXMuZ2V0Q29udGV4dCgiMmQiKSkpOwotICAgICAgICAgICAgVHlwZVV0aWxzLl9k
dW1teUNhbnZhczJkQ29udGV4dEluc3RhbmNlID0gY29udGV4dDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gY29udGV4dDsKLSAgICB9Ci19Ci0KLS8qKgotICogQGludGVyZmFjZQotICovCi1m
dW5jdGlvbiBTdGFja1RyYWNlKCkKLXsKLX0KLQotU3RhY2tUcmFjZS5wcm90b3R5cGUgPSB7Ci0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4Ci0gICAgICogQHJldHVybiB7e3Nv
dXJjZVVSTDogc3RyaW5nLCBsaW5lTnVtYmVyOiBudW1iZXIsIGNvbHVtbk51bWJlcjogbnVtYmVy
fXx1bmRlZmluZWR9Ci0gICAgICovCi0gICAgY2FsbEZyYW1lOiBmdW5jdGlvbihpbmRleCkKLSAg
ICB7Ci0gICAgfQotfQotCi0vKioKLSAqIEBwYXJhbSB7bnVtYmVyPX0gc3RhY2tUcmFjZUxpbWl0
Ci0gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gdG9wTW9zdEZ1bmN0aW9uVG9JZ25vcmUKLSAqIEByZXR1
cm4ge1N0YWNrVHJhY2V9Ci0gKi8KLVN0YWNrVHJhY2UuY3JlYXRlID0gZnVuY3Rpb24oc3RhY2tU
cmFjZUxpbWl0LCB0b3BNb3N0RnVuY3Rpb25Ub0lnbm9yZSkKLXsKLSAgICAvLyBGSVhNRTogU3Vw
cG9ydCBKU0MsIGFuZCBtYXliZSBvdGhlciBicm93c2Vycy4KLSAgICByZXR1cm4gbnVsbDsKLX0K
LQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gQ2FjaGUoKQotewotICAgIHRo
aXMucmVzZXQoKTsKLX0KLQotQ2FjaGUucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdC48bnVtYmVyLCBPYmplY3Q+fSAqLwot
ICAgICAgICB0aGlzLl9pdGVtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICAgIC8qKiBA
dHlwZSB7bnVtYmVyfSAqLwotICAgICAgICB0aGlzLl9zaXplID0gMDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGtleQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgaGFzOiBmdW5jdGlvbihrZXkpCi0gICAgewotICAgICAgICByZXR1cm4g
a2V5IGluIHRoaXMuX2l0ZW1zOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251
bWJlcn0ga2V5Ci0gICAgICogQHJldHVybiB7T2JqZWN0fQotICAgICAqLwotICAgIGdldDogZnVu
Y3Rpb24oa2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zW2tleV07Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkKLSAgICAgKiBAcGFyYW0g
e09iamVjdH0gaXRlbQotICAgICAqLwotICAgIHB1dDogZnVuY3Rpb24oa2V5LCBpdGVtKQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLmhhcyhrZXkpKQotICAgICAgICAgICAgKyt0aGlzLl9zaXpl
OwotICAgICAgICB0aGlzLl9pdGVtc1trZXldID0gaXRlbTsKLSAgICB9Ci19Ci0KLS8qKgotICog
QGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1Jlc291cmNlfE9iamVjdH0gdGhpc09iamVjdAotICog
QHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZQotICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9
IGFyZ3MKLSAqIEBwYXJhbSB7UmVzb3VyY2V8Kj19IHJlc3VsdAotICogQHBhcmFtIHtTdGFja1Ry
YWNlPX0gc3RhY2tUcmFjZQotICovCi1mdW5jdGlvbiBDYWxsKHRoaXNPYmplY3QsIGZ1bmN0aW9u
TmFtZSwgYXJncywgcmVzdWx0LCBzdGFja1RyYWNlKQotewotICAgIHRoaXMuX3RoaXNPYmplY3Qg
PSB0aGlzT2JqZWN0OwotICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKLSAg
ICB0aGlzLl9hcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMCk7Ci0gICAg
dGhpcy5fcmVzdWx0ID0gcmVzdWx0OwotICAgIHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFja1RyYWNl
IHx8IG51bGw7Ci0KLSAgICBpZiAoIXRoaXMuX2Z1bmN0aW9uTmFtZSkKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fYXJncy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIHRoaXMuX2FyZ3NbMF0g
PT09ICJzdHJpbmciKTsKLX0KLQotQ2FsbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICog
QHJldHVybiB7UmVzb3VyY2V9Ci0gICAgICovCi0gICAgcmVzb3VyY2U6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBSZXNvdXJjZS5mb3JPYmplY3QodGhpcy5fdGhpc09iamVjdCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAg
ICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9m
dW5jdGlvbk5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgaXNQcm9wZXJ0eVNldHRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuICF0aGlzLl9mdW5jdGlvbk5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4geyFBcnJheX0KLSAgICAgKi8KLSAgICBhcmdzOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fYXJnczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJl
dHVybiB7Kn0KLSAgICAgKi8KLSAgICByZXN1bHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9yZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4g
e1N0YWNrVHJhY2V9Ci0gICAgICovCi0gICAgc3RhY2tUcmFjZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7U3RhY2tUcmFjZX0gc3RhY2tUcmFjZQotICAgICAqLwotICAgIHNldFN0YWNr
VHJhY2U6IGZ1bmN0aW9uKHN0YWNrVHJhY2UpCi0gICAgewotICAgICAgICB0aGlzLl9zdGFja1Ry
YWNlID0gc3RhY2tUcmFjZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSBy
ZXN1bHQKLSAgICAgKi8KLSAgICBzZXRSZXN1bHQ6IGZ1bmN0aW9uKHJlc3VsdCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gYXR0YWNobWVudAot
ICAgICAqLwotICAgIHNldEF0dGFjaG1lbnQ6IGZ1bmN0aW9uKG5hbWUsIGF0dGFjaG1lbnQpCi0g
ICAgewotICAgICAgICBpZiAoYXR0YWNobWVudCkgewotICAgICAgICAgICAgLyoqIEB0eXBlIHtP
YmplY3QuPHN0cmluZywgT2JqZWN0Pn0gKi8KLSAgICAgICAgICAgIHRoaXMuX2F0dGFjaG1lbnRz
ID0gdGhpcy5fYXR0YWNobWVudHMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgICAgICAg
IHRoaXMuX2F0dGFjaG1lbnRzW25hbWVdID0gYXR0YWNobWVudDsKLSAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLl9hdHRhY2htZW50cykKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hdHRhY2htZW50
c1tuYW1lXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUK
LSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgYXR0YWNobWVudDogZnVuY3Rp
b24obmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2htZW50cyAmJiB0aGlz
Ll9hdHRhY2htZW50c1tuYW1lXTsKLSAgICB9LAotCi0gICAgZnJlZXplOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fZnJlZXplZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy5fZnJlZXplZCA9IHRydWU7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0g
dGhpcy5fYXJncy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBm
cmVlemUgdGhlIFJlc291cmNlcyBhbHNvIQotICAgICAgICAgICAgaWYgKCFSZXNvdXJjZS5mb3JP
YmplY3QodGhpcy5fYXJnc1tpXSkpCi0gICAgICAgICAgICAgICAgdGhpcy5fYXJnc1tpXSA9IFR5
cGVVdGlscy5jbG9uZSh0aGlzLl9hcmdzW2ldKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0geyFDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHshUmVwbGF5
YWJsZUNhbGx9Ci0gICAgICovCi0gICAgdG9SZXBsYXlhYmxlOiBmdW5jdGlvbihjYWNoZSkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuZnJlZXplKCk7Ci0gICAgICAgIHZhciB0aGlzT2JqZWN0ID0gLyoq
IEB0eXBlIHtSZXBsYXlhYmxlUmVzb3VyY2V9ICovIChSZXNvdXJjZS50b1JlcGxheWFibGUodGhp
cy5fdGhpc09iamVjdCwgY2FjaGUpKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlLnRv
UmVwbGF5YWJsZSh0aGlzLl9yZXN1bHQsIGNhY2hlKTsKLSAgICAgICAgdmFyIGFyZ3MgPSB0aGlz
Ll9hcmdzLm1hcChmdW5jdGlvbihvYmopIHsKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZS50
b1JlcGxheWFibGUob2JqLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAgICAgICB2YXIgYXR0YWNo
bWVudHMgPSBUeXBlVXRpbHMuY2xvbmVPYmplY3QodGhpcy5fYXR0YWNobWVudHMpOwotICAgICAg
ICByZXR1cm4gbmV3IFJlcGxheWFibGVDYWxsKHRoaXNPYmplY3QsIHRoaXMuX2Z1bmN0aW9uTmFt
ZSwgYXJncywgcmVzdWx0LCB0aGlzLl9zdGFja1RyYWNlLCBhdHRhY2htZW50cyk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVJlcGxheWFibGVDYWxsfSByZXBsYXlhYmxlQ2Fs
bAotICAgICAqIEBwYXJhbSB7IUNhY2hlfSBjYWNoZQotICAgICAqIEByZXR1cm4geyFDYWxsfQot
ICAgICAqLwotICAgIHJlcGxheTogZnVuY3Rpb24ocmVwbGF5YWJsZUNhbGwsIGNhY2hlKQotICAg
IHsKLSAgICAgICAgdmFyIHJlcGxheU9iamVjdCA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXko
cmVwbGF5YWJsZUNhbGwucmVwbGF5YWJsZVJlc291cmNlKCksIGNhY2hlKTsKLSAgICAgICAgdmFy
IHJlcGxheUFyZ3MgPSByZXBsYXlhYmxlQ2FsbC5hcmdzKCkubWFwKGZ1bmN0aW9uKG9iaikgewot
ICAgICAgICAgICAgcmV0dXJuIFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkob2JqLCBjYWNoZSk7
Ci0gICAgICAgIH0pOwotICAgICAgICB2YXIgcmVwbGF5UmVzdWx0ID0gdW5kZWZpbmVkOwotCi0g
ICAgICAgIGlmIChyZXBsYXlhYmxlQ2FsbC5pc1Byb3BlcnR5U2V0dGVyKCkpCi0gICAgICAgICAg
ICByZXBsYXlPYmplY3RbcmVwbGF5QXJnc1swXV0gPSByZXBsYXlBcmdzWzFdOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHZhciByZXBsYXlGdW5jdGlvbiA9IHJlcGxheU9iamVjdFtyZXBs
YXlhYmxlQ2FsbC5mdW5jdGlvbk5hbWUoKV07Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0
eXBlb2YgcmVwbGF5RnVuY3Rpb24gPT09ICJmdW5jdGlvbiIsICJFeHBlY3RlZCBhIGZ1bmN0aW9u
IHRvIHJlcGxheSIpOwotICAgICAgICAgICAgcmVwbGF5UmVzdWx0ID0gcmVwbGF5RnVuY3Rpb24u
YXBwbHkocmVwbGF5T2JqZWN0LCByZXBsYXlBcmdzKTsKLSAgICAgICAgICAgIGlmIChyZXBsYXlh
YmxlQ2FsbC5yZXN1bHQoKSBpbnN0YW5jZW9mIFJlcGxheWFibGVSZXNvdXJjZSkgewotICAgICAg
ICAgICAgICAgIHZhciByZXNvdXJjZSA9IHJlcGxheWFibGVDYWxsLnJlc3VsdCgpLnJlcGxheShj
YWNoZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldFdyYXBwZWRPYmplY3QocmVwbGF5UmVzdWx0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3RoaXNPYmplY3Qg
PSByZXBsYXlPYmplY3Q7Ci0gICAgICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IHJlcGxheWFibGVD
YWxsLmZ1bmN0aW9uTmFtZSgpOwotICAgICAgICB0aGlzLl9hcmdzID0gcmVwbGF5QXJnczsKLSAg
ICAgICAgdGhpcy5fcmVzdWx0ID0gcmVwbGF5UmVzdWx0OwotICAgICAgICB0aGlzLl9zdGFja1Ry
YWNlID0gcmVwbGF5YWJsZUNhbGwuc3RhY2tUcmFjZSgpOwotICAgICAgICB0aGlzLl9mcmVlemVk
ID0gdHJ1ZTsKLSAgICAgICAgdmFyIGF0dGFjaG1lbnRzID0gcmVwbGF5YWJsZUNhbGwuYXR0YWNo
bWVudHMoKTsKLSAgICAgICAgaWYgKGF0dGFjaG1lbnRzKQotICAgICAgICAgICAgdGhpcy5fYXR0
YWNobWVudHMgPSBUeXBlVXRpbHMuY2xvbmVPYmplY3QoYXR0YWNobWVudHMpOwotICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0g
e1JlcGxheWFibGVSZXNvdXJjZX0gdGhpc09iamVjdAotICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0
aW9uTmFtZQotICogQHBhcmFtIHtBcnJheS48UmVwbGF5YWJsZVJlc291cmNlfCo+fSBhcmdzCi0g
KiBAcGFyYW0ge1JlcGxheWFibGVSZXNvdXJjZXwqfSByZXN1bHQKLSAqIEBwYXJhbSB7U3RhY2tU
cmFjZX0gc3RhY2tUcmFjZQotICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgT2JqZWN0Pn0gYXR0
YWNobWVudHMKLSAqLwotZnVuY3Rpb24gUmVwbGF5YWJsZUNhbGwodGhpc09iamVjdCwgZnVuY3Rp
b25OYW1lLCBhcmdzLCByZXN1bHQsIHN0YWNrVHJhY2UsIGF0dGFjaG1lbnRzKQotewotICAgIHRo
aXMuX3RoaXNPYmplY3QgPSB0aGlzT2JqZWN0OwotICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1
bmN0aW9uTmFtZTsKLSAgICB0aGlzLl9hcmdzID0gYXJnczsKLSAgICB0aGlzLl9yZXN1bHQgPSBy
ZXN1bHQ7Ci0gICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7Ci0gICAgaWYgKGF0dGFj
aG1lbnRzKQotICAgICAgICB0aGlzLl9hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzOwotfQotCi1S
ZXBsYXlhYmxlQ2FsbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7UmVw
bGF5YWJsZVJlc291cmNlfQotICAgICAqLwotICAgIHJlcGxheWFibGVSZXNvdXJjZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RoaXNPYmplY3Q7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBmdW5jdGlvbk5h
bWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbk5hbWU7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0g
ICAgaXNQcm9wZXJ0eVNldHRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICF0
aGlzLl9mdW5jdGlvbk5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0Fy
cmF5LjxSZXBsYXlhYmxlUmVzb3VyY2V8Kj59Ci0gICAgICovCi0gICAgYXJnczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FyZ3M7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4ge1JlcGxheWFibGVSZXNvdXJjZXwqfQotICAgICAqLwotICAgIHJlc3Vs
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7U3RhY2tUcmFjZX0KLSAgICAgKi8KLSAgICBz
dGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tU
cmFjZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7T2JqZWN0LjxzdHJpbmcs
IE9iamVjdD59Ci0gICAgICovCi0gICAgYXR0YWNobWVudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2htZW50czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICov
Ci0gICAgYXR0YWNobWVudDogZnVuY3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9hdHRhY2htZW50cyAmJiB0aGlzLl9hdHRhY2htZW50c1tuYW1lXTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHshQ2Fs
bH0KLSAgICAgKi8KLSAgICByZXBsYXk6IGZ1bmN0aW9uKGNhY2hlKQotICAgIHsKLSAgICAgICAg
dmFyIGNhbGwgPSAvKiogQHR5cGUgeyFDYWxsfSAqLyAoT2JqZWN0LmNyZWF0ZShDYWxsLnByb3Rv
dHlwZSkpOwotICAgICAgICByZXR1cm4gY2FsbC5yZXBsYXkodGhpcywgY2FjaGUpOwotICAgIH0K
LX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7IU9iamVjdH0gd3JhcHBlZE9i
amVjdAotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqLwotZnVuY3Rpb24gUmVzb3VyY2Uod3Jh
cHBlZE9iamVjdCwgbmFtZSkKLXsKLSAgICAvKiogQHR5cGUge251bWJlcn0gKi8KLSAgICB0aGlz
Ll9pZCA9ICsrUmVzb3VyY2UuX3VuaXF1ZUlkOwotICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwot
ICAgIHRoaXMuX25hbWUgPSBuYW1lIHx8ICJSZXNvdXJjZSI7Ci0gICAgLyoqIEB0eXBlIHtudW1i
ZXJ9ICovCi0gICAgdGhpcy5fa2luZElkID0gUmVzb3VyY2UuX3VuaXF1ZUtpbmRJZHNbdGhpcy5f
bmFtZV0gPSAoUmVzb3VyY2UuX3VuaXF1ZUtpbmRJZHNbdGhpcy5fbmFtZV0gfHwgMCkgKyAxOwot
ICAgIC8qKiBAdHlwZSB7UmVzb3VyY2VUcmFja2luZ01hbmFnZXJ9ICovCi0gICAgdGhpcy5fcmVz
b3VyY2VNYW5hZ2VyID0gbnVsbDsKLSAgICAvKiogQHR5cGUgeyFBcnJheS48Q2FsbD59ICovCi0g
ICAgdGhpcy5fY2FsbHMgPSBbXTsKLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIHRvIHByZXZlbnQg
R0MgZnJvbSBjb2xsZWN0aW5nIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgotICAgICAqIE90aGVyd2lz
ZSwgZm9yIGV4YW1wbGUgaW4gV2ViR0wsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2wuZ2V0UGFyYW1l
dGVyKCkKLSAgICAgKiBtYXkgcmV0dXJuIGEgcmVjZW50bHkgY3JlYXRlZCBpbnN0YW5jZSB0aGF0
IGlzIG5vIGxvbmdlciBib3VuZCB0byBhCi0gICAgICogUmVzb3VyY2Ugb2JqZWN0ICh0aHVzLCBu
byBoaXN0b3J5IHRvIHJlcGxheSBpdCBsYXRlcikuCi0gICAgICoKLSAgICAgKiBAdHlwZSB7IU9i
amVjdC48c3RyaW5nLCBSZXNvdXJjZT59Ci0gICAgICovCi0gICAgdGhpcy5fYm91bmRSZXNvdXJj
ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotICAgIHRoaXMuc2V0V3JhcHBlZE9iamVjdCh3cmFw
cGVkT2JqZWN0KTsKLX0KLQotLyoqCi0gKiBAdHlwZSB7bnVtYmVyfQotICovCi1SZXNvdXJjZS5f
dW5pcXVlSWQgPSAwOwotCi0vKioKLSAqIEB0eXBlIHshT2JqZWN0LjxzdHJpbmcsIG51bWJlcj59
Ci0gKi8KLVJlc291cmNlLl91bmlxdWVLaW5kSWRzID0ge307Ci0KLS8qKgotICogQHBhcmFtIHsq
fSBvYmoKLSAqIEByZXR1cm4ge1Jlc291cmNlfQotICovCi1SZXNvdXJjZS5mb3JPYmplY3QgPSBm
dW5jdGlvbihvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiBudWxsOwotICAg
IGlmIChvYmogaW5zdGFuY2VvZiBSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG9iajsKLSAgICBp
ZiAodHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCi0gICAgICAgIHJldHVybiBvYmpbIl9fcmVzb3Vy
Y2VPYmplY3QiXTsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1Jlc291
cmNlfCp9IG9iagotICogQHJldHVybiB7Kn0KLSAqLwotUmVzb3VyY2Uud3JhcHBlZE9iamVjdCA9
IGZ1bmN0aW9uKG9iaikKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3Qo
b2JqKTsKLSAgICByZXR1cm4gcmVzb3VyY2UgPyByZXNvdXJjZS53cmFwcGVkT2JqZWN0KCkgOiBv
Ymo7Ci19Ci0KLS8qKgotICogQHBhcmFtIHtSZXNvdXJjZXwqfSBvYmoKLSAqIEBwYXJhbSB7IUNh
Y2hlfSBjYWNoZQotICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNlfCp9Ci0gKi8KLVJlc291
cmNlLnRvUmVwbGF5YWJsZSA9IGZ1bmN0aW9uKG9iaiwgY2FjaGUpCi17Ci0gICAgdmFyIHJlc291
cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9iaik7Ci0gICAgcmV0dXJuIHJlc291cmNlID8gcmVz
b3VyY2UudG9SZXBsYXlhYmxlKGNhY2hlKSA6IG9iajsKLX0KLQotUmVzb3VyY2UucHJvdG90eXBl
ID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBpZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgd3JhcHBlZE9iamVj
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBwZWRPYmplY3Q7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gdmFsdWUKLSAgICAg
Ki8KLSAgICBzZXRXcmFwcGVkT2JqZWN0OiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHZhbHVlLCAid3JhcHBlZE9iamVjdCBzaG91bGQgbm90IGJlIE5VTEwi
KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoISh2YWx1ZSBpbnN0YW5jZW9mIFJlc291cmNlKSwg
IkJpbmRpbmcgYSBSZXNvdXJjZSBvYmplY3QgdG8gYW5vdGhlciBSZXNvdXJjZSBvYmplY3Q/Iik7
Ci0gICAgICAgIHRoaXMuX3dyYXBwZWRPYmplY3QgPSB2YWx1ZTsKLSAgICAgICAgdGhpcy5fYmlu
ZE9iamVjdFRvUmVzb3VyY2UodmFsdWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0
dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAgcHJveHlPYmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fcHJveHlPYmplY3QpCi0gICAgICAgICAgICB0aGlzLl9wcm94
eU9iamVjdCA9IHRoaXMuX3dyYXBPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3h5
T2JqZWN0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtSZXNvdXJjZVRyYWNr
aW5nTWFuYWdlcn0KLSAgICAgKi8KLSAgICBtYW5hZ2VyOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VNYW5hZ2VyOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1Jlc291cmNlVHJhY2tpbmdNYW5hZ2VyfSB2YWx1ZQotICAgICAqLwotICAg
IHNldE1hbmFnZXI6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzb3Vy
Y2VNYW5hZ2VyID0gdmFsdWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4geyFB
cnJheS48Q2FsbD59Ci0gICAgICovCi0gICAgY2FsbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9jYWxsczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVy
biB7Q29udGV4dFJlc291cmNlfQotICAgICAqLwotICAgIGNvbnRleHRSZXNvdXJjZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDb250ZXh0UmVzb3VyY2Up
Ci0gICAgICAgICAgICByZXR1cm4gLyoqIEB0eXBlIHtDb250ZXh0UmVzb3VyY2V9ICovICh0aGlz
KTsKLQotICAgICAgICBpZiAodGhpcy5fY2FsY3VsYXRpbmdDb250ZXh0UmVzb3VyY2UpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICB0aGlzLl9jYWxjdWxhdGluZ0NvbnRleHRS
ZXNvdXJjZSA9IHRydWU7Ci0gICAgICAgIHZhciByZXN1bHQgPSBudWxsOwotICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbiA9IHRoaXMuX2NhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gdGhpcy5fY2FsbHNbaV0ucmVzb3VyY2UoKS5jb250ZXh0UmVzb3VyY2Uo
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGN1bGF0aW5nQ29udGV4dFJlc291cmNlOwot
ICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQsICJGYWlsZWQgdG8gZmluZCBjb250ZXh0IHJl
c291cmNlIGZvciAiICsgdGhpcy5fbmFtZSArICJAIiArIHRoaXMuX2tpbmRJZCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0cmlu
Z30KLSAgICAgKi8KLSAgICB0b0RhdGFVUkw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAiIjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQ2FjaGV9IGNhY2hl
Ci0gICAgICogQHJldHVybiB7IVJlcGxheWFibGVSZXNvdXJjZX0KLSAgICAgKi8KLSAgICB0b1Jl
cGxheWFibGU6IGZ1bmN0aW9uKGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IC8q
KiBAdHlwZSB7UmVwbGF5YWJsZVJlc291cmNlfSAqLyAoY2FjaGUuZ2V0KHRoaXMuX2lkKSk7Ci0g
ICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB2
YXIgZGF0YSA9IHsKLSAgICAgICAgICAgIGlkOiB0aGlzLl9pZCwKLSAgICAgICAgICAgIG5hbWU6
IHRoaXMuX25hbWUsCi0gICAgICAgICAgICBraW5kSWQ6IHRoaXMuX2tpbmRJZAotICAgICAgICB9
OwotICAgICAgICByZXN1bHQgPSBuZXcgUmVwbGF5YWJsZVJlc291cmNlKHRoaXMsIGRhdGEpOwot
ICAgICAgICBjYWNoZS5wdXQodGhpcy5faWQsIHJlc3VsdCk7IC8vIFB1dCBpbnRvIHRoZSBjYWNo
ZSBlYXJseSB0byBhdm9pZCBsb29wcy4KLSAgICAgICAgZGF0YS5jYWxscyA9IHRoaXMuX2NhbGxz
Lm1hcChmdW5jdGlvbihjYWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbC50b1JlcGxheWFi
bGUoY2FjaGUpOwotICAgICAgICB9KTsKLSAgICAgICAgdGhpcy5fcG9wdWxhdGVSZXBsYXlhYmxl
RGF0YShkYXRhLCBjYWNoZSk7Ci0gICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2UgPSB0aGlzLmNv
bnRleHRSZXNvdXJjZSgpOwotICAgICAgICBpZiAoY29udGV4dFJlc291cmNlICE9PSB0aGlzKQot
ICAgICAgICAgICAgZGF0YS5jb250ZXh0UmVzb3VyY2UgPSBSZXNvdXJjZS50b1JlcGxheWFibGUo
Y29udGV4dFJlc291cmNlLCBjYWNoZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7
IUNhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1bGF0ZVJlcGxheWFibGVEYXRhOiBmdW5j
dGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuIFNob3VsZCBi
ZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7IU9iamVjdH0gZGF0YQotICAgICAqIEBwYXJhbSB7IUNhY2hlfSBjYWNoZQotICAgICAq
IEByZXR1cm4geyFSZXNvdXJjZX0KLSAgICAgKi8KLSAgICByZXBsYXk6IGZ1bmN0aW9uKGRhdGEs
IGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHJlc291cmNlID0gLyoqIEB0eXBlIHtSZXNvdXJj
ZX0gKi8gKGNhY2hlLmdldChkYXRhLmlkKSk7Ci0gICAgICAgIGlmIChyZXNvdXJjZSkKLSAgICAg
ICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICAgICAgdGhpcy5faWQgPSBkYXRhLmlkOwotICAg
ICAgICB0aGlzLl9uYW1lID0gZGF0YS5uYW1lOwotICAgICAgICB0aGlzLl9raW5kSWQgPSBkYXRh
LmtpbmRJZDsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2VNYW5hZ2VyID0gbnVsbDsKLSAgICAgICAg
dGhpcy5fY2FsbHMgPSBbXTsKLSAgICAgICAgdGhpcy5fYm91bmRSZXNvdXJjZXMgPSBPYmplY3Qu
Y3JlYXRlKG51bGwpOwotICAgICAgICB0aGlzLl93cmFwcGVkT2JqZWN0ID0gbnVsbDsKLSAgICAg
ICAgY2FjaGUucHV0KGRhdGEuaWQsIHRoaXMpOyAvLyBQdXQgaW50byB0aGUgY2FjaGUgZWFybHkg
dG8gYXZvaWQgbG9vcHMuCi0gICAgICAgIHRoaXMuX2RvUmVwbGF5Q2FsbHMoZGF0YSwgY2FjaGUp
OwotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl93cmFwcGVkT2JqZWN0LCAiUmVzb3VyY2Ug
c2hvdWxkIGJlIHJlY29uc3RydWN0ZWQhIik7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0g
eyFDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0
YSwgY2FjaGUpCi0gICAgewotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEuY2FsbHMu
bGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgdGhpcy5fY2FsbHMucHVzaChkYXRhLmNh
bGxzW2ldLnJlcGxheShjYWNoZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
eyFDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAg
ewotICAgICAgICBjYWxsLmZyZWV6ZSgpOwotICAgICAgICB0aGlzLl9jYWxscy5wdXNoKGNhbGwp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9iamVjdAotICAg
ICAqLwotICAgIF9iaW5kT2JqZWN0VG9SZXNvdXJjZTogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsK
LSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgIl9fcmVzb3VyY2VPYmplY3Qi
LCB7Ci0gICAgICAgICAgICB2YWx1ZTogdGhpcywKLSAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxz
ZSwKLSAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgICAgICAgICAgY29uZmlndXJh
YmxlOiB0cnVlCi0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e3N0cmluZ30ga2V5Ci0gICAgICogQHBhcmFtIHsqfSBvYmoKLSAgICAgKi8KLSAgICBfcmVnaXN0
ZXJCb3VuZFJlc291cmNlOiBmdW5jdGlvbihrZXksIG9iaikKLSAgICB7Ci0gICAgICAgIHZhciBy
ZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvYmopOwotICAgICAgICBpZiAocmVzb3VyY2Up
Ci0gICAgICAgICAgICB0aGlzLl9ib3VuZFJlc291cmNlc1trZXldID0gcmVzb3VyY2U7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ib3VuZFJlc291cmNlc1trZXldOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtPYmplY3R9Ci0gICAgICovCi0gICAg
X3dyYXBPYmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB3cmFwcGVkT2JqZWN0
ID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIGlmICghd3JhcHBlZE9iamVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRl
KHdyYXBwZWRPYmplY3QuX19wcm90b19fKTsgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSAiaW5zdGFu
Y2VvZiIuCi0KLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB2YXIgY3VzdG9tV3Jh
cEZ1bmN0aW9ucyA9IHRoaXMuX2N1c3RvbVdyYXBGdW5jdGlvbnMoKTsKLSAgICAgICAgZnVuY3Rp
b24gcHJvY2Vzc1Byb3BlcnR5KHByb3BlcnR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIHdyYXBwZWRPYmplY3RbcHJvcGVydHldID09PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGN1c3RvbVdyYXBGdW5jdGlvbiA9IGN1c3RvbVdyYXBGdW5jdGlvbnNbcHJv
cGVydHldOwotICAgICAgICAgICAgICAgIGlmIChjdXN0b21XcmFwRnVuY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHByb3h5W3Byb3BlcnR5XSA9IHNlbGYuX3dyYXBDdXN0b21GdW5jdGlvbihz
ZWxmLCB3cmFwcGVkT2JqZWN0LCB3cmFwcGVkT2JqZWN0W3Byb3BlcnR5XSwgcHJvcGVydHksIGN1
c3RvbVdyYXBGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBwcm94eVtwcm9wZXJ0eV0gPSBzZWxmLl93cmFwRnVuY3Rpb24oc2VsZiwgd3JhcHBlZE9i
amVjdCwgd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV0sIHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoL15bQS1aMC05X10rJC8udGVzdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHdyYXBwZWRP
YmplY3RbcHJvcGVydHldID09PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgIC8vIEZhc3Qg
YWNjZXNzIHRvIGVudW1zIGFuZCBjb25zdGFudHMuCi0gICAgICAgICAgICAgICAgcHJveHlbcHJv
cGVydHldID0gd3JhcHBlZE9iamVjdFtwcm9wZXJ0eV07Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgcHJvcGVydHksIHsK
LSAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB3cmFwcGVkT2JqZWN0W3Byb3Bl
cnR5XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFJlc291cmNlLmZv
ck9iamVjdChvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlID8g
cmVzb3VyY2UgOiBvYmo7Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHNldDogc2VsZi5fd3JhcFByb3BlcnR5U2V0dGVyKHNlbGYsIHdyYXBwZWRPYmplY3QsIHBy
b3BlcnR5KSwKLSAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZQotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGlzRW1w
dHkgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB3cmFwcGVkT2JqZWN0KSB7
Ci0gICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9jZXNzUHJvcGVy
dHkocHJvcGVydHkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0VtcHR5KQotICAgICAgICAg
ICAgcmV0dXJuIHdyYXBwZWRPYmplY3Q7IC8vIE5vdGhpbmcgdG8gcHJveHkuCi0KLSAgICAgICAg
dGhpcy5fYmluZE9iamVjdFRvUmVzb3VyY2UocHJveHkpOwotICAgICAgICByZXR1cm4gcHJveHk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVJlc291cmNlfSByZXNvdXJjZQot
ICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb3JpZ2luYWxPYmplY3QKLSAgICAgKiBAcGFyYW0geyFG
dW5jdGlvbn0gb3JpZ2luYWxGdW5jdGlvbgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlv
bk5hbWUKLSAgICAgKiBAcGFyYW0geyFGdW5jdGlvbn0gY3VzdG9tV3JhcEZ1bmN0aW9uCi0gICAg
ICogQHJldHVybiB7IUZ1bmN0aW9ufQotICAgICAqLwotICAgIF93cmFwQ3VzdG9tRnVuY3Rpb246
IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVu
Y3Rpb25OYW1lLCBjdXN0b21XcmFwRnVuY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbWFuYWdlciA9IHJlc291cmNlLm1h
bmFnZXIoKTsKLSAgICAgICAgICAgIHZhciBpc0NhcHR1cmluZyA9IG1hbmFnZXIgJiYgbWFuYWdl
ci5jYXB0dXJpbmcoKTsKLSAgICAgICAgICAgIGlmIChpc0NhcHR1cmluZykKLSAgICAgICAgICAg
ICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVudHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICB2YXIgd3JhcEZ1bmN0aW9uID0gbmV3IFJlc291cmNlLldyYXBGdW5jdGlvbihvcmln
aW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgY3VzdG9tV3JhcEZ1bmN0aW9uLmFwcGx5KHdyYXBGdW5jdGlvbiwgYXJndW1l
bnRzKTsKLSAgICAgICAgICAgIGlmIChpc0NhcHR1cmluZykgewotICAgICAgICAgICAgICAgIHZh
ciBjYWxsID0gd3JhcEZ1bmN0aW9uLmNhbGwoKTsKLSAgICAgICAgICAgICAgICBjYWxsLnNldFN0
YWNrVHJhY2UoU3RhY2tUcmFjZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxlZSkpOwotICAgICAg
ICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUNhbGwoY2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gd3JhcEZ1bmN0aW9uLnJlc3VsdCgpOwotICAgICAgICB9OwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFSZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKiBA
cGFyYW0geyFPYmplY3R9IG9yaWdpbmFsT2JqZWN0Ci0gICAgICogQHBhcmFtIHshRnVuY3Rpb259
IG9yaWdpbmFsRnVuY3Rpb24KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lCi0g
ICAgICogQHJldHVybiB7IUZ1bmN0aW9ufQotICAgICAqLwotICAgIF93cmFwRnVuY3Rpb246IGZ1
bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgb3JpZ2luYWxGdW5jdGlvbiwgZnVuY3Rp
b25OYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7Ci0gICAgICAgICAgICBp
ZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5nKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob3JpZ2luYWxPYmplY3QsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICBtYW5hZ2VyLmNhcHR1cmVBcmd1bWVudHMocmVzb3VyY2UsIGFyZ3VtZW50cyk7
Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShvcmlnaW5h
bE9iamVjdCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHZhciBzdGFja1RyYWNlID0gU3RhY2tU
cmFjZS5jcmVhdGUoMSwgYXJndW1lbnRzLmNhbGxlZSk7Ci0gICAgICAgICAgICB2YXIgY2FsbCA9
IG5ldyBDYWxsKHJlc291cmNlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgcmVzdWx0LCBzdGFj
a1RyYWNlKTsKLSAgICAgICAgICAgIG1hbmFnZXIuY2FwdHVyZUNhbGwoY2FsbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyFSZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9y
aWdpbmFsT2JqZWN0Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZQotICAgICAq
IEByZXR1cm4ge2Z1bmN0aW9uKCopfQotICAgICAqLwotICAgIF93cmFwUHJvcGVydHlTZXR0ZXI6
IGZ1bmN0aW9uKHJlc291cmNlLCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXNvdXJjZS5fcmVnaXN0ZXJCb3VuZFJlc291cmNlKHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAg
ICAgICAgICAgdmFyIG1hbmFnZXIgPSByZXNvdXJjZS5tYW5hZ2VyKCk7Ci0gICAgICAgICAgICBp
ZiAoIW1hbmFnZXIgfHwgIW1hbmFnZXIuY2FwdHVyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBv
cmlnaW5hbE9iamVjdFtwcm9wZXJ0eU5hbWVdID0gUmVzb3VyY2Uud3JhcHBlZE9iamVjdCh2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmFyIGFyZ3MgPSBbcHJvcGVydHlOYW1lLCB2YWx1ZV07Ci0gICAgICAgICAgICBtYW5hZ2VyLmNh
cHR1cmVBcmd1bWVudHMocmVzb3VyY2UsIGFyZ3MpOwotICAgICAgICAgICAgb3JpZ2luYWxPYmpl
Y3RbcHJvcGVydHlOYW1lXSA9IFJlc291cmNlLndyYXBwZWRPYmplY3QodmFsdWUpOwotICAgICAg
ICAgICAgdmFyIHN0YWNrVHJhY2UgPSBTdGFja1RyYWNlLmNyZWF0ZSgxLCBhcmd1bWVudHMuY2Fs
bGVlKTsKLSAgICAgICAgICAgIHZhciBjYWxsID0gbmV3IENhbGwocmVzb3VyY2UsICIiLCBhcmdz
LCB1bmRlZmluZWQsIHN0YWNrVHJhY2UpOwotICAgICAgICAgICAgbWFuYWdlci5jYXB0dXJlQ2Fs
bChjYWxsKTsKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7
IU9iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59Ci0gICAgICovCi0gICAgX2N1c3RvbVdyYXBGdW5j
dGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKG51
bGwpOyAvLyBNYXkgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5hbE9iamVjdAotICog
QHBhcmFtIHtGdW5jdGlvbn0gb3JpZ2luYWxGdW5jdGlvbgotICogQHBhcmFtIHtzdHJpbmd9IGZ1
bmN0aW9uTmFtZQotICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IGFyZ3MKLSAqLwotUmVzb3Vy
Y2UuV3JhcEZ1bmN0aW9uID0gZnVuY3Rpb24ob3JpZ2luYWxPYmplY3QsIG9yaWdpbmFsRnVuY3Rp
b24sIGZ1bmN0aW9uTmFtZSwgYXJncykKLXsKLSAgICB0aGlzLl9vcmlnaW5hbE9iamVjdCA9IG9y
aWdpbmFsT2JqZWN0OwotICAgIHRoaXMuX29yaWdpbmFsRnVuY3Rpb24gPSBvcmlnaW5hbEZ1bmN0
aW9uOwotICAgIHRoaXMuX2Z1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTsKLSAgICB0aGlzLl9h
cmdzID0gYXJnczsKLSAgICB0aGlzLl9yZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChvcmln
aW5hbE9iamVjdCk7Ci0gICAgY29uc29sZS5hc3NlcnQodGhpcy5fcmVzb3VyY2UsICJFeHBlY3Rl
ZCBhIHdyYXBwZWQgY2FsbCBvbiBhIFJlc291cmNlIG9iamVjdC4iKTsKLX0KLQotUmVzb3VyY2Uu
V3JhcEZ1bmN0aW9uLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHsqfQot
ICAgICAqLwotICAgIHJlc3VsdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll9leGVjdXRlZCkgewotICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZWQgPSB0cnVlOwotICAgICAg
ICAgICAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLl9v
cmlnaW5hbE9iamVjdCwgdGhpcy5fYXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRo
aXMuX3Jlc3VsdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7IUNhbGx9Ci0g
ICAgICovCi0gICAgY2FsbDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9j
YWxsKQotICAgICAgICAgICAgdGhpcy5fY2FsbCA9IG5ldyBDYWxsKHRoaXMuX3Jlc291cmNlLCB0
aGlzLl9mdW5jdGlvbk5hbWUsIHRoaXMuX2FyZ3MsIHRoaXMucmVzdWx0KCkpOwotICAgICAgICBy
ZXR1cm4gdGhpcy5fY2FsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSBy
ZXN1bHQKLSAgICAgKi8KLSAgICBvdmVycmlkZVJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KQotICAg
IHsKLSAgICAgICAgdmFyIGNhbGwgPSB0aGlzLmNhbGwoKTsKLSAgICAgICAgY2FsbC5zZXRSZXN1
bHQocmVzdWx0KTsKLSAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0OwotICAgIH0KLX0KLQot
LyoqCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpSZXNvdXJjZSwgIU9iamVjdCwgc3RyaW5nKX0g
cmVzb3VyY2VDb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlTmFtZQotICog
QHJldHVybiB7ZnVuY3Rpb24odGhpczpSZXNvdXJjZS5XcmFwRnVuY3Rpb24pfQotICovCi1SZXNv
dXJjZS5XcmFwRnVuY3Rpb24ucmVzb3VyY2VGYWN0b3J5TWV0aG9kID0gZnVuY3Rpb24ocmVzb3Vy
Y2VDb25zdHJ1Y3RvciwgcmVzb3VyY2VOYW1lKQotewotICAgIC8qKiBAdGhpcyBSZXNvdXJjZS5X
cmFwRnVuY3Rpb24gKi8KLSAgICByZXR1cm4gZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IHdyYXBwZWRPYmplY3QgPSAvKiogQHR5cGUge09iamVjdH0gKi8gKHRoaXMucmVzdWx0KCkpOwot
ICAgICAgICBpZiAoIXdyYXBwZWRPYmplY3QpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHZhciByZXNvdXJjZSA9IG5ldyByZXNvdXJjZUNvbnN0cnVjdG9yKHdyYXBwZWRPYmplY3QsIHJl
c291cmNlTmFtZSk7Ci0gICAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5fcmVzb3VyY2UubWFuYWdl
cigpOwotICAgICAgICBpZiAobWFuYWdlcikKLSAgICAgICAgICAgIG1hbmFnZXIucmVnaXN0ZXJS
ZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgIHRoaXMub3ZlcnJpZGVSZXN1bHQocmVzb3VyY2Uu
cHJveHlPYmplY3QoKSk7Ci0gICAgICAgIHJlc291cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsK
LSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0geyFSZXNvdXJjZX0g
b3JpZ2luYWxSZXNvdXJjZQotICogQHBhcmFtIHshT2JqZWN0fSBkYXRhCi0gKi8KLWZ1bmN0aW9u
IFJlcGxheWFibGVSZXNvdXJjZShvcmlnaW5hbFJlc291cmNlLCBkYXRhKQotewotICAgIHRoaXMu
X3Byb3RvID0gb3JpZ2luYWxSZXNvdXJjZS5fX3Byb3RvX187Ci0gICAgdGhpcy5fZGF0YSA9IGRh
dGE7Ci19Ci0KLVJlcGxheWFibGVSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5pZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9kYXRhLm5hbWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBkZXNjcmlwdGlvbjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubmFtZSArICJAIiArIHRoaXMuX2RhdGEu
a2luZElkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHshUmVwbGF5YWJsZVJl
c291cmNlfQotICAgICAqLwotICAgIHJlcGxheWFibGVDb250ZXh0UmVzb3VyY2U6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmNvbnRleHRSZXNvdXJjZSB8fCB0
aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFDYWNoZX0gY2FjaGUKLSAg
ICAgKiBAcmV0dXJuIHshUmVzb3VyY2V9Ci0gICAgICovCi0gICAgcmVwbGF5OiBmdW5jdGlvbihj
YWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSAvKiogQHR5cGUgeyFSZXNvdXJjZX0g
Ki8gKE9iamVjdC5jcmVhdGUodGhpcy5fcHJvdG8pKTsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0
LnJlcGxheSh0aGlzLl9kYXRhLCBjYWNoZSkKLSAgICAgICAgY29uc29sZS5hc3NlcnQocmVzdWx0
Ll9fcHJvdG9fXyA9PT0gdGhpcy5fcHJvdG8sICJXcm9uZyB0eXBlIG9mIGEgcmVwbGF5IHJlc3Vs
dCIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0g
e1JlcGxheWFibGVSZXNvdXJjZXwqfSBvYmoKLSAqIEBwYXJhbSB7IUNhY2hlfSBjYWNoZQotICog
QHJldHVybiB7Kn0KLSAqLwotUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheSA9IGZ1bmN0aW9uKG9i
aiwgY2FjaGUpCi17Ci0gICAgcmV0dXJuIChvYmogaW5zdGFuY2VvZiBSZXBsYXlhYmxlUmVzb3Vy
Y2UpID8gb2JqLnJlcGxheShjYWNoZSkud3JhcHBlZE9iamVjdCgpIDogb2JqOwotfQotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1Jlc291cmNlfQotICogQHBhcmFtIHshT2Jq
ZWN0fSB3cmFwcGVkT2JqZWN0Ci0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICovCi1mdW5jdGlv
biBDb250ZXh0UmVzb3VyY2Uod3JhcHBlZE9iamVjdCwgbmFtZSkKLXsKLSAgICBSZXNvdXJjZS5j
YWxsKHRoaXMsIHdyYXBwZWRPYmplY3QsIG5hbWUpOwotfQotCi1Db250ZXh0UmVzb3VyY2UucHJv
dG90eXBlID0gewotICAgIF9fcHJvdG9fXzogUmVzb3VyY2UucHJvdG90eXBlCi19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7UmVzb3VyY2V9Ci0gKiBAcGFyYW0geyFPYmpl
Y3R9IHdyYXBwZWRPYmplY3QKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKi8KLWZ1bmN0aW9u
IExvZ0V2ZXJ5dGhpbmdSZXNvdXJjZSh3cmFwcGVkT2JqZWN0LCBuYW1lKQotewotICAgIFJlc291
cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCwgbmFtZSk7Ci19Ci0KLUxvZ0V2ZXJ5dGhpbmdS
ZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICog
QHJldHVybiB7IU9iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59Ci0gICAgICovCi0gICAgX2N1c3Rv
bVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB3cmFwRnVuY3Rp
b25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgICAgdmFyIHdyYXBwZWRPYmplY3QgPSB0
aGlzLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgaWYgKHdyYXBwZWRPYmplY3QpIHsKLSAgICAg
ICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHdyYXBwZWRPYmplY3QpIHsKLSAgICAgICAgICAg
ICAgICAvKiogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAg
d3JhcEZ1bmN0aW9uc1twcm9wZXJ0eV0gPSBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZS5wdXNoQ2FsbCh0aGlzLmNhbGwoKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB3cmFwRnVuY3Rpb25zOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFJlc291cmNlLnBy
b3RvdHlwZQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gV2ViR0wKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7UmVz
b3VyY2V9Ci0gKiBAcGFyYW0geyFPYmplY3R9IHdyYXBwZWRPYmplY3QKLSAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lCi0gKi8KLWZ1bmN0aW9uIFdlYkdMQm91bmRSZXNvdXJjZSh3cmFwcGVkT2JqZWN0
LCBuYW1lKQotewotICAgIFJlc291cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCwgbmFtZSk7
Ci0gICAgLyoqIEB0eXBlIHshT2JqZWN0LjxzdHJpbmcsICo+fSAqLwotICAgIHRoaXMuX3N0YXRl
ID0ge307Ci19Ci0KLVdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHshT2JqZWN0fSBkYXRhCi0gICAgICogQHBh
cmFtIHshQ2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6
IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5f
c3RhdGU7Ci0gICAgICAgIGRhdGEuc3RhdGUgPSB7fTsKLSAgICAgICAgT2JqZWN0LmtleXMoc3Rh
dGUpLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICBkYXRhLnN0YXRl
W3BhcmFtZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFibGUoc3RhdGVbcGFyYW1ldGVyXSwgY2Fj
aGUpOwotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0g
ICAgICogQHBhcmFtIHshT2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHshQ2FjaGV9IGNhY2hl
Ci0gICAgICovCi0gICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0aW9uKGRhdGEsIGNhY2hlKQotICAg
IHsKLSAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVwbGF5Q29udGV4dFJlc291cmNlKGRhdGEsIGNh
Y2hlKS53cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAgICAgLyoqIEB0eXBlIHshT2JqZWN0LjxzdHJp
bmcsIEFycmF5LjxzdHJpbmc+Pn0gKi8KLSAgICAgICAgdmFyIGJpbmRpbmdzRGF0YSA9IHsKLSAg
ICAgICAgICAgIFRFWFRVUkVfMkQ6IFsiYmluZFRleHR1cmUiLCAiVEVYVFVSRV9CSU5ESU5HXzJE
Il0sCi0gICAgICAgICAgICBURVhUVVJFX0NVQkVfTUFQOiBbImJpbmRUZXh0dXJlIiwgIlRFWFRV
UkVfQklORElOR19DVUJFX01BUCJdLAotICAgICAgICAgICAgQVJSQVlfQlVGRkVSOiBbImJpbmRC
dWZmZXIiLCAiQVJSQVlfQlVGRkVSX0JJTkRJTkciXSwKLSAgICAgICAgICAgIEVMRU1FTlRfQVJS
QVlfQlVGRkVSOiBbImJpbmRCdWZmZXIiLCAiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyJd
LAotICAgICAgICAgICAgRlJBTUVCVUZGRVI6IFsiYmluZEZyYW1lYnVmZmVyIiwgIkZSQU1FQlVG
RkVSX0JJTkRJTkciXSwKLSAgICAgICAgICAgIFJFTkRFUkJVRkZFUjogWyJiaW5kUmVuZGVyYnVm
ZmVyIiwgIlJFTkRFUkJVRkZFUl9CSU5ESU5HIl0KLSAgICAgICAgfTsKLSAgICAgICAgdmFyIG9y
aWdpbmFsQmluZGluZ3MgPSB7fTsKLSAgICAgICAgT2JqZWN0LmtleXMoYmluZGluZ3NEYXRhKS5m
b3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKLSAgICAgICAgICAgIHZhciBiaW5kaW5n
UGFyYW1ldGVyID0gYmluZGluZ3NEYXRhW2JpbmRpbmdUYXJnZXRdWzFdOwotICAgICAgICAgICAg
b3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSA9IGdsLmdldFBhcmFtZXRlcihnbFtiaW5k
aW5nUGFyYW1ldGVyXSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZhciBzdGF0ZSA9IHt9Owot
ICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRl
cikgewotICAgICAgICAgICAgc3RhdGVbcGFyYW1ldGVyXSA9IFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoZGF0YS5zdGF0ZVtwYXJhbWV0ZXJdLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotICAgICAg
ICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwotICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVw
bGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNoZSk7Ci0KLSAgICAgICAgT2JqZWN0LmtleXMo
YmluZGluZ3NEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGJpbmRpbmdUYXJnZXQpIHsKLSAgICAgICAg
ICAgIHZhciBiaW5kTWV0aG9kTmFtZSA9IGJpbmRpbmdzRGF0YVtiaW5kaW5nVGFyZ2V0XVswXTsK
LSAgICAgICAgICAgIGdsW2JpbmRNZXRob2ROYW1lXS5jYWxsKGdsLCBnbFtiaW5kaW5nVGFyZ2V0
XSwgb3JpZ2luYWxCaW5kaW5nc1tiaW5kaW5nVGFyZ2V0XSk7Ci0gICAgICAgIH0pOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0g
eyFDYWNoZX0gY2FjaGUKLSAgICAgKiBAcmV0dXJuIHtXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNv
dXJjZX0KLSAgICAgKi8KLSAgICBfcmVwbGF5Q29udGV4dFJlc291cmNlOiBmdW5jdGlvbihkYXRh
LCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBjYWxscyA9IC8qKiBAdHlwZSB7IUFycmF5LjxS
ZXBsYXlhYmxlQ2FsbD59ICovIChkYXRhLmNhbGxzKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAs
IG4gPSBjYWxscy5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJj
ZSA9IFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoY2FsbHNbaV0ucmVwbGF5YWJsZVJlc291cmNl
KCksIGNhY2hlKTsKLSAgICAgICAgICAgIHZhciBjb250ZXh0UmVzb3VyY2UgPSBXZWJHTFJlbmRl
cmluZ0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QocmVzb3VyY2UpOwotICAgICAgICAgICAgaWYg
KGNvbnRleHRSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFJlc291cmNl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGJpbmRN
ZXRob2ROYW1lCi0gICAgICovCi0gICAgcHVzaEJpbmRpbmc6IGZ1bmN0aW9uKHRhcmdldCwgYmlu
ZE1ldGhvZE5hbWUpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc3RhdGUuQklORElORyAhPT0g
dGFyZ2V0KSB7Ci0gICAgICAgICAgICB0aGlzLl9zdGF0ZS5CSU5ESU5HID0gdGFyZ2V0OwotICAg
ICAgICAgICAgdGhpcy5wdXNoQ2FsbChuZXcgQ2FsbChXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNv
dXJjZS5mb3JPYmplY3QodGhpcyksIGJpbmRNZXRob2ROYW1lLCBbdGFyZ2V0LCB0aGlzXSkpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogUmVzb3VyY2UucHJvdG90eXBlCi19
Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViR0xCb3VuZFJlc291cmNl
fQotICogQHBhcmFtIHshT2JqZWN0fSB3cmFwcGVkT2JqZWN0Ci0gKiBAcGFyYW0ge3N0cmluZ30g
bmFtZQotICovCi1mdW5jdGlvbiBXZWJHTFRleHR1cmVSZXNvdXJjZSh3cmFwcGVkT2JqZWN0LCBu
YW1lKQotewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3Qs
IG5hbWUpOwotfQotCi1XZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoq
Ci0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHshT2JqZWN0fSBkYXRhCi0gICAgICog
QHBhcmFtIHshQ2FjaGV9IGNhY2hlCi0gICAgICovCi0gICAgX2RvUmVwbGF5Q2FsbHM6IGZ1bmN0
aW9uKGRhdGEsIGNhY2hlKQotICAgIHsKLSAgICAgICAgdmFyIGdsID0gdGhpcy5fcmVwbGF5Q29u
dGV4dFJlc291cmNlKGRhdGEsIGNhY2hlKS53cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAgICAgdmFy
IHN0YXRlID0ge307Ci0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlBpeGVs
U3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAg
ICBzdGF0ZVtwYXJhbWV0ZXJdID0gZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRlcl0pOwotICAg
ICAgICB9KTsKLQotICAgICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxh
eUNhbGxzLmNhbGwodGhpcywgZGF0YSwgY2FjaGUpOwotCi0gICAgICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dFJlc291cmNlLlBpeGVsU3RvcmVQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFy
YW1ldGVyKSB7Ci0gICAgICAgICAgICBnbC5waXhlbFN0b3JlaShnbFtwYXJhbWV0ZXJdLCBzdGF0
ZVtwYXJhbWV0ZXJdKTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBv
dmVycmlkZQotICAgICAqIEBwYXJhbSB7IUNhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2Fs
bDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dFJlc291cmNlLmZvck9iamVjdChjYWxsLnJlc291cmNlKCkpLndyYXBwZWRPYmplY3Qo
KTsKLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxTdG9yZVBhcmFt
ZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgIHZhciB2YWx1
ZSA9IGdsLmdldFBhcmFtZXRlcihnbFtwYXJhbWV0ZXJdKTsKLSAgICAgICAgICAgIGlmICh0aGlz
Ll9zdGF0ZVtwYXJhbWV0ZXJdICE9PSB2YWx1ZSkgewotICAgICAgICAgICAgICAgIHRoaXMuX3N0
YXRlW3BhcmFtZXRlcl0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB2YXIgcGl4ZWxTdG9yZUNh
bGwgPSBuZXcgQ2FsbChnbCwgInBpeGVsU3RvcmVpIiwgW2dsW3BhcmFtZXRlcl0sIHZhbHVlXSk7
Ci0gICAgICAgICAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5j
YWxsKHRoaXMsIHBpeGVsU3RvcmVDYWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgdGhp
cyk7Ci0KLSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBhbnkgb2xkZXIgY2FsbHMgdGhhdCBubyBs
b25nZXIgY29udHJpYnV0ZSB0byB0aGUgcmVzb3VyY2Ugc3RhdGUuCi0gICAgICAgIC8vIEZJWE1F
OiBvcHRpbWl6ZSBtZW1vcnkgdXNhZ2U6IG1heWJlIGl0J3MgbW9yZSBlZmZpY2llbnQgdG8gc3Rv
cmUgb25lIHRleEltYWdlMkQgY2FsbCBpbnN0ZWFkIG9mIG1hbnkgdGV4U3ViSW1hZ2UyRC4KLSAg
ICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNh
bGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBIYW5kbGVzOiB0ZXhQYXJhbWV0ZXJpLCB0
ZXhQYXJhbWV0ZXJmCi0gICAgICogQHBhcmFtIHshQ2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1
c2hDYWxsX3RleFBhcmFtZXRlcjogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBh
cmdzID0gY2FsbC5hcmdzKCk7Ci0gICAgICAgIHZhciBwbmFtZSA9IGFyZ3NbMV07Ci0gICAgICAg
IHZhciBwYXJhbSA9IGFyZ3NbMl07Ci0gICAgICAgIGlmICh0aGlzLl9zdGF0ZVtwbmFtZV0gIT09
IHBhcmFtKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdGF0ZVtwbmFtZV0gPSBwYXJhbTsKLSAgICAg
ICAgICAgIFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBj
YWxsKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBIYW5kbGVzOiBjb3B5
VGV4SW1hZ2UyRCwgY29weVRleFN1YkltYWdlMkQKLSAgICAgKiBjb3B5VGV4SW1hZ2UyRCBhbmQg
Y29weVRleFN1YkltYWdlMkQgZGVmaW5lIGEgdGV4dHVyZSBpbWFnZSB3aXRoIHBpeGVscyBmcm9t
IHRoZSBjdXJyZW50IGZyYW1lYnVmZmVyLgotICAgICAqIEBwYXJhbSB7IUNhbGx9IGNhbGwKLSAg
ICAgKi8KLSAgICBwdXNoQ2FsbF9jb3B5VGV4SW1hZ2UyRDogZnVuY3Rpb24oY2FsbCkKLSAgICB7
Ci0gICAgICAgIHZhciBnbFJlc291cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
Zm9yT2JqZWN0KGNhbGwucmVzb3VyY2UoKSk7Ci0gICAgICAgIHZhciBnbCA9IGdsUmVzb3VyY2Uu
d3JhcHBlZE9iamVjdCgpOwotICAgICAgICB2YXIgZnJhbWVidWZmZXJSZXNvdXJjZSA9IC8qKiBA
dHlwZSB7V2ViR0xGcmFtZWJ1ZmZlclJlc291cmNlfSAqLyAoZ2xSZXNvdXJjZS5jdXJyZW50Qmlu
ZGluZyhnbC5GUkFNRUJVRkZFUikpOwotICAgICAgICBpZiAoZnJhbWVidWZmZXJSZXNvdXJjZSkK
LSAgICAgICAgICAgIHRoaXMucHVzaENhbGwobmV3IENhbGwoZ2xSZXNvdXJjZSwgImJpbmRGcmFt
ZWJ1ZmZlciIsIFtnbC5GUkFNRUJVRkZFUiwgZnJhbWVidWZmZXJSZXNvdXJjZV0pKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgY2FzZS4KLSAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkFTU0VSVF9OT1RfUkVBQ0hFRDogQ291bGQgbm90IHBy
b3Blcmx5IHByb2Nlc3MgYSBnbC4iICsgY2FsbC5mdW5jdGlvbk5hbWUoKSArICIgY2FsbCB3aGls
ZSB0aGUgRFJBV0lORyBCVUZGRVIgaXMgYm91bmQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy5wdXNoQ2FsbChjYWxsKTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJHTEJvdW5kUmVz
b3VyY2UucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7
UmVzb3VyY2V9Ci0gKiBAcGFyYW0geyFPYmplY3R9IHdyYXBwZWRPYmplY3QKLSAqIEBwYXJhbSB7
c3RyaW5nfSBuYW1lCi0gKi8KLWZ1bmN0aW9uIFdlYkdMUHJvZ3JhbVJlc291cmNlKHdyYXBwZWRP
YmplY3QsIG5hbWUpCi17Ci0gICAgUmVzb3VyY2UuY2FsbCh0aGlzLCB3cmFwcGVkT2JqZWN0LCBu
YW1lKTsKLX0KLQotV2ViR0xQcm9ncmFtUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgot
ICAgICAqIEBvdmVycmlkZSAob3ZlcnJpZGVzIEByZXR1cm4gdHlwZSkKLSAgICAgKiBAcmV0dXJu
IHtXZWJHTFByb2dyYW19Ci0gICAgICovCi0gICAgd3JhcHBlZE9iamVjdDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBwZWRPYmplY3Q7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gZGF0YQotICAg
ICAqIEBwYXJhbSB7IUNhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9wb3B1bGF0ZVJlcGxheWFi
bGVEYXRhOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHZhciBnbFJlc291
cmNlID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuZm9yT2JqZWN0KHRoaXMpOwotICAg
ICAgICB2YXIgZ2wgPSBnbFJlc291cmNlLndyYXBwZWRPYmplY3QoKTsKLSAgICAgICAgdmFyIHBy
b2dyYW0gPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLQotICAgICAgICB2YXIgb3JpZ2luYWxFcnJv
cnMgPSBnbFJlc291cmNlLmdldEFsbEVycm9ycygpOwotCi0gICAgICAgIHZhciB1bmlmb3JtcyA9
IFtdOwotICAgICAgICB2YXIgdW5pZm9ybXNDb3VudCA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAo
Z2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3Jtc0NvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBhY3RpdmVJbmZvID0gZ2wuZ2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpKTsKLSAg
ICAgICAgICAgIGlmICghYWN0aXZlSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbSwgYWN0aXZlSW5mby5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9u
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2wu
Z2V0VW5pZm9ybShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24pOwotICAgICAgICAgICAgdW5pZm9y
bXMucHVzaCh7Ci0gICAgICAgICAgICAgICAgbmFtZTogYWN0aXZlSW5mby5uYW1lLAotICAgICAg
ICAgICAgICAgIHR5cGU6IGFjdGl2ZUluZm8udHlwZSwKLSAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIGRhdGEudW5pZm9ybXMg
PSB1bmlmb3JtczsKLQotICAgICAgICBnbFJlc291cmNlLnJlc3RvcmVFcnJvcnMob3JpZ2luYWxF
cnJvcnMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFy
YW0geyFPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0geyFDYWNoZX0gY2FjaGUKLSAgICAgKi8K
LSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAg
ICBSZXNvdXJjZS5wcm90b3R5cGUuX2RvUmVwbGF5Q2FsbHMuY2FsbCh0aGlzLCBkYXRhLCBjYWNo
ZSk7Ci0gICAgICAgIHZhciBnbCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLmZvck9i
amVjdCh0aGlzKS53cmFwcGVkT2JqZWN0KCk7Ci0gICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy53
cmFwcGVkT2JqZWN0KCk7Ci0KLSAgICAgICAgdmFyIG9yaWdpbmFsUHJvZ3JhbSA9IC8qKiBAdHlw
ZSB7V2ViR0xQcm9ncmFtfSAqLyAoZ2wuZ2V0UGFyYW1ldGVyKGdsLkNVUlJFTlRfUFJPR1JBTSkp
OwotICAgICAgICB2YXIgY3VycmVudFByb2dyYW0gPSBvcmlnaW5hbFByb2dyYW07Ci0KLSAgICAg
ICAgZGF0YS51bmlmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKHVuaWZvcm0pIHsKLSAgICAgICAgICAg
IHZhciB1bmlmb3JtTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5p
Zm9ybS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghdW5pZm9ybUxvY2F0aW9uKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAhPT0gcHJvZ3Jh
bSkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKLSAgICAgICAg
ICAgICAgICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdmFyIG1ldGhvZE5hbWUgPSB0aGlzLl91bmlmb3JtTWV0aG9kTmFtZUJ5VHlwZShnbCwgdW5p
Zm9ybS50eXBlKTsKLSAgICAgICAgICAgIGlmIChtZXRob2ROYW1lLmluZGV4T2YoIk1hdHJpeCIp
ID09PSAtMSkKLSAgICAgICAgICAgICAgICBnbFttZXRob2ROYW1lXS5jYWxsKGdsLCB1bmlmb3Jt
TG9jYXRpb24sIHVuaWZvcm0udmFsdWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGdsW21ldGhvZE5hbWVdLmNhbGwoZ2wsIHVuaWZvcm1Mb2NhdGlvbiwgZmFsc2UsIHVuaWZv
cm0udmFsdWUpOwotICAgICAgICB9LmJpbmQodGhpcykpOwotCi0gICAgICAgIGlmIChjdXJyZW50
UHJvZ3JhbSAhPT0gb3JpZ2luYWxQcm9ncmFtKQotICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShv
cmlnaW5hbFByb2dyYW0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkdM
UmVuZGVyaW5nQ29udGV4dH0gZ2wKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdHlwZQotICAgICAq
IEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBfdW5pZm9ybU1ldGhvZE5hbWVCeVR5cGU6
IGZ1bmN0aW9uKGdsLCB0eXBlKQotICAgIHsKLSAgICAgICAgdmFyIHVuaWZvcm1NZXRob2ROYW1l
cyA9IFdlYkdMUHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXM7Ci0gICAgICAgIGlm
ICghdW5pZm9ybU1ldGhvZE5hbWVzKSB7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXMg
PSB7fTsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF0gPSAidW5pZm9y
bTFmIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMyXSA9ICJ1
bmlmb3JtMmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9WRUMz
XSA9ICJ1bmlmb3JtM2Z2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9B
VF9WRUM0XSA9ICJ1bmlmb3JtNGZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tn
bC5JTlRdID0gInVuaWZvcm0xaSI7Ci0gICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wu
Qk9PTF0gPSAidW5pZm9ybTFpIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5T
QU1QTEVSXzJEXSA9ICJ1bmlmb3JtMWkiOwotICAgICAgICAgICAgdW5pZm9ybU1ldGhvZE5hbWVz
W2dsLlNBTVBMRVJfQ1VCRV0gPSAidW5pZm9ybTFpIjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRo
b2ROYW1lc1tnbC5JTlRfVkVDMl0gPSAidW5pZm9ybTJpdiI7Ci0gICAgICAgICAgICB1bmlmb3Jt
TWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMyXSA9ICJ1bmlmb3JtMml2IjsKLSAgICAgICAgICAgIHVu
aWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDM10gPSAidW5pZm9ybTNpdiI7Ci0gICAgICAgICAg
ICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUMzXSA9ICJ1bmlmb3JtM2l2IjsKLSAgICAg
ICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5JTlRfVkVDNF0gPSAidW5pZm9ybTRpdiI7Ci0g
ICAgICAgICAgICB1bmlmb3JtTWV0aG9kTmFtZXNbZ2wuQk9PTF9WRUM0XSA9ICJ1bmlmb3JtNGl2
IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9NQVQyXSA9ICJ1bmlm
b3JtTWF0cml4MmZ2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1lc1tnbC5GTE9BVF9N
QVQzXSA9ICJ1bmlmb3JtTWF0cml4M2Z2IjsKLSAgICAgICAgICAgIHVuaWZvcm1NZXRob2ROYW1l
c1tnbC5GTE9BVF9NQVQ0XSA9ICJ1bmlmb3JtTWF0cml4NGZ2IjsKLSAgICAgICAgICAgIFdlYkdM
UHJvZ3JhbVJlc291cmNlLl91bmlmb3JtTWV0aG9kTmFtZXMgPSB1bmlmb3JtTWV0aG9kTmFtZXM7
Ci0gICAgICAgIH0KLSAgICAgICAgY29uc29sZS5hc3NlcnQodW5pZm9ybU1ldGhvZE5hbWVzW3R5
cGVdLCAiVW5rbm93biB1bmlmb3JtIHR5cGUgIiArIHR5cGUpOwotICAgICAgICByZXR1cm4gdW5p
Zm9ybU1ldGhvZE5hbWVzW3R5cGVdOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0geyFDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1
bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBj
YWxscyB0aGF0IG5vIGxvbmdlciBjb250cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAg
ICAgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aXBsZSBhdHRhY2hTaGFkZXIgJiYgZGV0YWNoU2hh
ZGVyLgotICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGwuY2FsbCh0aGlzLCBjYWxs
KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBSZXNvdXJjZS5wcm90b3R5cGUKLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtSZXNvdXJjZX0KLSAqIEBwYXJhbSB7IU9i
amVjdH0gd3JhcHBlZE9iamVjdAotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqLwotZnVuY3Rp
b24gV2ViR0xTaGFkZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0LCBuYW1lKQotewotICAgIFJlc291
cmNlLmNhbGwodGhpcywgd3JhcHBlZE9iamVjdCwgbmFtZSk7Ci19Ci0KLVdlYkdMU2hhZGVyUmVz
b3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAg
ICAgKi8KLSAgICB0eXBlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY2FsbCA9IHRo
aXMuX2NhbGxzWzBdOwotICAgICAgICBpZiAoY2FsbCAmJiBjYWxsLmZ1bmN0aW9uTmFtZSgpID09
PSAiY3JlYXRlU2hhZGVyIikKLSAgICAgICAgICAgIHJldHVybiBjYWxsLmFyZ3MoKVswXTsKLSAg
ICAgICAgY29uc29sZS5lcnJvcigiQVNTRVJUX05PVF9SRUFDSEVEOiBGYWlsZWQgdG8gcmVzdG9y
ZSBzaGFkZXIgdHlwZSBmcm9tIHRoZSBsb2cuIiwgY2FsbCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFDYWxs
fSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250
cmlidXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBt
dWx0aXBsZSBzaGFkZXJTb3VyY2UgY2FsbHMuCi0gICAgICAgIFJlc291cmNlLnByb3RvdHlwZS5w
dXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186IFJlc291
cmNlLnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
YkdMQm91bmRSZXNvdXJjZX0KLSAqIEBwYXJhbSB7IU9iamVjdH0gd3JhcHBlZE9iamVjdAotICog
QHBhcmFtIHtzdHJpbmd9IG5hbWUKLSAqLwotZnVuY3Rpb24gV2ViR0xCdWZmZXJSZXNvdXJjZSh3
cmFwcGVkT2JqZWN0LCBuYW1lKQotewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMs
IHdyYXBwZWRPYmplY3QsIG5hbWUpOwotfQotCi1XZWJHTEJ1ZmZlclJlc291cmNlLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFDYWxsfSBj
YWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmli
dXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIG1l
bW9yeSBmb3IgYnVmZmVyU3ViRGF0YS4KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnByb3Rv
dHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0sCi0KLSAgICBfX3Byb3RvX186
IFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBleHRlbmRzIHtXZWJHTEJvdW5kUmVzb3VyY2V9Ci0gKiBAcGFyYW0geyFPYmplY3R9IHdy
YXBwZWRPYmplY3QKLSAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi0gKi8KLWZ1bmN0aW9uIFdlYkdM
RnJhbWVidWZmZXJSZXNvdXJjZSh3cmFwcGVkT2JqZWN0LCBuYW1lKQotewotICAgIFdlYkdMQm91
bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBwZWRPYmplY3QsIG5hbWUpOwotfQotCi1XZWJHTEZy
YW1lYnVmZmVyUmVzb3VyY2UucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqIEBwYXJhbSB7IUNhbGx9IGNhbGwKLSAgICAgKi8KLSAgICBwdXNoQ2FsbDogZnVu
Y3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUgYW55IG9sZGVyIGNh
bGxzIHRoYXQgbm8gbG9uZ2VyIGNvbnRyaWJ1dGUgdG8gdGhlIHJlc291cmNlIHN0YXRlLgotICAg
ICAgICBXZWJHTEJvdW5kUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsLmNhbGwodGhpcywgY2Fs
bCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2ViR0xCb3VuZFJlc291cmNlLnByb3RvdHlw
ZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkdMQm91bmRSZXNv
dXJjZX0KLSAqIEBwYXJhbSB7IU9iamVjdH0gd3JhcHBlZE9iamVjdAotICogQHBhcmFtIHtzdHJp
bmd9IG5hbWUKLSAqLwotZnVuY3Rpb24gV2ViR0xSZW5kZXJidWZmZXJSZXNvdXJjZSh3cmFwcGVk
T2JqZWN0LCBuYW1lKQotewotICAgIFdlYkdMQm91bmRSZXNvdXJjZS5jYWxsKHRoaXMsIHdyYXBw
ZWRPYmplY3QsIG5hbWUpOwotfQotCi1XZWJHTFJlbmRlcmJ1ZmZlclJlc291cmNlLnByb3RvdHlw
ZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFDYWxsfSBj
YWxsCi0gICAgICovCi0gICAgcHVzaENhbGw6IGZ1bmN0aW9uKGNhbGwpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIGFueSBvbGRlciBjYWxscyB0aGF0IG5vIGxvbmdlciBjb250cmli
dXRlIHRvIHRoZSByZXNvdXJjZSBzdGF0ZS4KLSAgICAgICAgV2ViR0xCb3VuZFJlc291cmNlLnBy
b3RvdHlwZS5wdXNoQ2FsbC5jYWxsKHRoaXMsIGNhbGwpOwotICAgIH0sCi0KLSAgICBfX3Byb3Rv
X186IFdlYkdMQm91bmRSZXNvdXJjZS5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBleHRlbmRzIHtDb250ZXh0UmVzb3VyY2V9Ci0gKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsQ29udGV4dAotICovCi1mdW5jdGlvbiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZShnbENvbnRleHQpCi17Ci0gICAgQ29udGV4dFJlc291cmNlLmNhbGwodGhpcywg
Z2xDb250ZXh0LCAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7Ci0gICAgLyoqIEB0eXBlIHtPYmpl
Y3QuPG51bWJlciwgYm9vbGVhbj59ICovCi0gICAgdGhpcy5fY3VzdG9tRXJyb3JzID0gbnVsbDsK
LSAgICAvKiogQHR5cGUgeyFPYmplY3QuPHN0cmluZywgYm9vbGVhbj59ICovCi0gICAgdGhpcy5f
ZXh0ZW5zaW9ucyA9IHt9OwotfQotCi0vKioKLSAqIEBjb25zdAotICogQHR5cGUgeyFBcnJheS48
c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuR0xDYXBhYmlsaXRp
ZXMgPSBbCi0gICAgIkJMRU5EIiwKLSAgICAiQ1VMTF9GQUNFIiwKLSAgICAiREVQVEhfVEVTVCIs
Ci0gICAgIkRJVEhFUiIsCi0gICAgIlBPTFlHT05fT0ZGU0VUX0ZJTEwiLAotICAgICJTQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0UiLAotICAgICJTQU1QTEVfQ09WRVJBR0UiLAotICAgICJTQ0lTU09S
X1RFU1QiLAotICAgICJTVEVOQ0lMX1RFU1QiCi1dOwotCi0vKioKLSAqIEBjb25zdAotICogQHR5
cGUgeyFBcnJheS48c3RyaW5nPn0KLSAqLwotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2Uu
UGl4ZWxTdG9yZVBhcmFtZXRlcnMgPSBbCi0gICAgIlBBQ0tfQUxJR05NRU5UIiwKLSAgICAiVU5Q
QUNLX0FMSUdOTUVOVCIsCi0gICAgIlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wi
LAotICAgICJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwKLSAgICAiVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMIgotXTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHshQXJyYXkuPHN0cmlu
Zz59Ci0gKi8KLVdlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlLlN0YXRlUGFyYW1ldGVycyA9
IFsKLSAgICAiQUNUSVZFX1RFWFRVUkUiLAotICAgICJBUlJBWV9CVUZGRVJfQklORElORyIsCi0g
ICAgIkJMRU5EX0NPTE9SIiwKLSAgICAiQkxFTkRfRFNUX0FMUEhBIiwKLSAgICAiQkxFTkRfRFNU
X1JHQiIsCi0gICAgIkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwKLSAgICAiQkxFTkRfRVFVQVRJT05f
UkdCIiwKLSAgICAiQkxFTkRfU1JDX0FMUEhBIiwKLSAgICAiQkxFTkRfU1JDX1JHQiIsCi0gICAg
IkNPTE9SX0NMRUFSX1ZBTFVFIiwKLSAgICAiQ09MT1JfV1JJVEVNQVNLIiwKLSAgICAiQ1VMTF9G
QUNFX01PREUiLAotICAgICJDVVJSRU5UX1BST0dSQU0iLAotICAgICJERVBUSF9DTEVBUl9WQUxV
RSIsCi0gICAgIkRFUFRIX0ZVTkMiLAotICAgICJERVBUSF9SQU5HRSIsCi0gICAgIkRFUFRIX1dS
SVRFTUFTSyIsCi0gICAgIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciLAotICAgICJGUkFN
RUJVRkZFUl9CSU5ESU5HIiwKLSAgICAiRlJPTlRfRkFDRSIsCi0gICAgIkdFTkVSQVRFX01JUE1B
UF9ISU5UIiwKLSAgICAiTElORV9XSURUSCIsCi0gICAgIlBBQ0tfQUxJR05NRU5UIiwKLSAgICAi
UE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwKLSAgICAiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLAotICAg
ICJSRU5ERVJCVUZGRVJfQklORElORyIsCi0gICAgIlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQiLAot
ICAgICJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLAotICAgICJTQ0lTU09SX0JPWCIsCi0gICAgIlNU
RU5DSUxfQkFDS19GQUlMIiwKLSAgICAiU1RFTkNJTF9CQUNLX0ZVTkMiLAotICAgICJTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwKLSAgICAiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFT
UyIsCi0gICAgIlNURU5DSUxfQkFDS19SRUYiLAotICAgICJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFT
SyIsCi0gICAgIlNURU5DSUxfQkFDS19XUklURU1BU0siLAotICAgICJTVEVOQ0lMX0NMRUFSX1ZB
TFVFIiwKLSAgICAiU1RFTkNJTF9GQUlMIiwKLSAgICAiU1RFTkNJTF9GVU5DIiwKLSAgICAiU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUwiLAotICAgICJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsCi0g
ICAgIlNURU5DSUxfUkVGIiwKLSAgICAiU1RFTkNJTF9WQUxVRV9NQVNLIiwKLSAgICAiU1RFTkNJ
TF9XUklURU1BU0siLAotICAgICJVTlBBQ0tfQUxJR05NRU5UIiwKLSAgICAiVU5QQUNLX0NPTE9S
U1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsCi0gICAgIlVOUEFDS19GTElQX1lfV0VCR0wiLAotICAg
ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLAotICAgICJWSUVXUE9SVCIKLV07Ci0K
LS8qKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7IU9iamVjdC48c3RyaW5nLCBib29sZWFuPn0KLSAq
LwotV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuRHJhd2luZ01ldGhvZHMgPSBUeXBlVXRp
bHMuY3JlYXRlUHJlZml4ZWRQcm9wZXJ0eU5hbWVzU2V0KFsKLSAgICAiY2xlYXIiLAotICAgICJk
cmF3QXJyYXlzIiwKLSAgICAiZHJhd0VsZW1lbnRzIgotXSk7Ci0KLS8qKgotICogQHBhcmFtIHsq
fSBvYmoKLSAqIEByZXR1cm4ge1dlYkdMUmVuZGVyaW5nQ29udGV4dFJlc291cmNlfQotICovCi1X
ZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5mb3JPYmplY3QgPSBmdW5jdGlvbihvYmopCi17
Ci0gICAgdmFyIHJlc291cmNlID0gUmVzb3VyY2UuZm9yT2JqZWN0KG9iaik7Ci0gICAgaWYgKCFy
ZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmVzb3VyY2UgPSByZXNvdXJjZS5j
b250ZXh0UmVzb3VyY2UoKTsKLSAgICByZXR1cm4gKHJlc291cmNlIGluc3RhbmNlb2YgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UpID8gcmVzb3VyY2UgOiBudWxsOwotfQotCi1XZWJHTFJl
bmRlcmluZ0NvbnRleHRSZXNvdXJjZS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92
ZXJyaWRlIChvdmVycmlkZXMgQHJldHVybiB0eXBlKQotICAgICAqIEByZXR1cm4ge1dlYkdMUmVu
ZGVyaW5nQ29udGV4dH0KLSAgICAgKi8KLSAgICB3cmFwcGVkT2JqZWN0OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fd3JhcHBlZE9iamVjdDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwot
ICAgIHRvRGF0YVVSTDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMud3Jh
cHBlZE9iamVjdCgpLmNhbnZhcy50b0RhdGFVUkwoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59Ci0gICAgICovCi0gICAgZ2V0QWxsRXJyb3JzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZXJyb3JzID0gW107Ci0gICAgICAgIHZhciBn
bCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAgICAgICBpZiAoZ2wpIHsKLSAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0RXJyb3Io
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPT09IGdsLk5PX0VSUk9SKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRXJyb3IoZXJyb3Ip
OwotICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBpZiAodGhpcy5fY3VzdG9tRXJyb3JzKSB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBrZXkgaW4gdGhpcy5fY3VzdG9tRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGVycm9yID0gTnVtYmVyKGtleSk7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyb3Ip
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1c3RvbUVycm9yczsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZXJyb3JzOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBlcnJvcnMKLSAgICAgKi8KLSAgICByZXN0b3Jl
RXJyb3JzOiBmdW5jdGlvbihlcnJvcnMpCi0gICAgewotICAgICAgICB2YXIgZ2wgPSB0aGlzLndy
YXBwZWRPYmplY3QoKTsKLSAgICAgICAgaWYgKGdsKSB7Ci0gICAgICAgICAgICB2YXIgd2FzRXJy
b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxlIChnbC5nZXRFcnJvcigpICE9PSBnbC5OT19F
UlJPUikKLSAgICAgICAgICAgICAgICB3YXNFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICBjb25z
b2xlLmFzc2VydCghd2FzRXJyb3IsICJFcnJvcihzKSB3aGlsZSBjYXB0dXJpbmcgY3VycmVudCBX
ZWJHTCBzdGF0ZS4iKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVycm9ycy5sZW5ndGgpCi0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHRoaXMuX2N1c3RvbUVycm9ycyA9IHt9OwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIG4gPSBlcnJvcnMubGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICAgIHRo
aXMuX2N1c3RvbUVycm9yc1tlcnJvcnNbaV1dID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZXJyb3IKLSAgICAgKi8KLSAgICBjbGVh
ckVycm9yOiBmdW5jdGlvbihlcnJvcikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jdXN0b21F
cnJvcnMpCi0gICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VzdG9tRXJyb3JzW2Vycm9yXTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIG5l
eHRFcnJvcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2N1c3RvbUVycm9y
cykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2N1c3RvbUVycm9ycykgewot
ICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE51bWJlcihrZXkpOwotICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9jdXN0b21FcnJvcnNbZXJyb3JdOwotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWxldGUgdGhpcy5f
Y3VzdG9tRXJyb3JzOwotICAgICAgICB2YXIgZ2wgPSB0aGlzLndyYXBwZWRPYmplY3QoKTsKLSAg
ICAgICAgcmV0dXJuIGdsID8gZ2wuTk9fRVJST1IgOiAwOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQotICAgICAqLwotICAgIGFkZEV4dGVuc2lvbjogZnVu
Y3Rpb24obmFtZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXcmFwIE9FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0IGV4dGVuc2lvbi4KLSAgICAgICAgdGhpcy5fZXh0ZW5zaW9uc1tuYW1lLnRvTG93
ZXJDYXNlKCldID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0g
ICAgICogQHBhcmFtIHshT2JqZWN0fSBkYXRhCi0gICAgICogQHBhcmFtIHshQ2FjaGV9IGNhY2hl
Ci0gICAgICovCi0gICAgX3BvcHVsYXRlUmVwbGF5YWJsZURhdGE6IGZ1bmN0aW9uKGRhdGEsIGNh
Y2hlKQotICAgIHsKLSAgICAgICAgdmFyIGdsID0gdGhpcy53cmFwcGVkT2JqZWN0KCk7Ci0gICAg
ICAgIGRhdGEub3JpZ2luYWxDYW52YXMgPSBnbC5jYW52YXM7Ci0gICAgICAgIGRhdGEub3JpZ2lu
YWxDb250ZXh0QXR0cmlidXRlcyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAg
IGRhdGEuZXh0ZW5zaW9ucyA9IFR5cGVVdGlscy5jbG9uZU9iamVjdCh0aGlzLl9leHRlbnNpb25z
KTsKLQotICAgICAgICB2YXIgb3JpZ2luYWxFcnJvcnMgPSB0aGlzLmdldEFsbEVycm9ycygpOwot
Ci0gICAgICAgIC8vIFRha2UgYSBmdWxsIEdMIHN0YXRlIHNuYXBzaG90LgotICAgICAgICB2YXIg
Z2xTdGF0ZSA9IHt9OwotICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENh
cGFiaWxpdGllcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgZ2xT
dGF0ZVtwYXJhbWV0ZXJdID0gZ2wuaXNFbmFibGVkKGdsW3BhcmFtZXRlcl0pOwotICAgICAgICB9
KTsKLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuU3RhdGVQYXJhbWV0ZXJz
LmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICBnbFN0YXRlW3BhcmFt
ZXRlcl0gPSBSZXNvdXJjZS50b1JlcGxheWFibGUoZ2wuZ2V0UGFyYW1ldGVyKGdsW3BhcmFtZXRl
cl0pLCBjYWNoZSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIFZFUlRFWF9BVFRSSUJfQVJS
QVlTCi0gICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0gLyoqIEB0eXBlIHtudW1iZXJ9ICov
IChnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKSk7Ci0gICAgICAgIHZhciB2
ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzID0gWyJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5E
SU5HIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsICJWRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkUiLCAiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLCAiVkVSVEVYX0FUVFJJQl9BUlJB
WV9UWVBFIiwgIlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsICJDVVJSRU5UX1ZFUlRF
WF9BVFRSSUIiXTsKLSAgICAgICAgdmFyIHZlcnRleEF0dHJpYlN0YXRlcyA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAgICAg
ICAgdmFyIHN0YXRlID0ge307Ci0gICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzLmZv
ckVhY2goZnVuY3Rpb24oYXR0cmliUGFyYW1ldGVyKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGVb
YXR0cmliUGFyYW1ldGVyXSA9IFJlc291cmNlLnRvUmVwbGF5YWJsZShnbC5nZXRWZXJ0ZXhBdHRy
aWIoaSwgZ2xbYXR0cmliUGFyYW1ldGVyXSksIGNhY2hlKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSID0gZ2wuZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KGksIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Ci0gICAgICAg
ICAgICB2ZXJ0ZXhBdHRyaWJTdGF0ZXMucHVzaChzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Z2xTdGF0ZS52ZXJ0ZXhBdHRyaWJTdGF0ZXMgPSB2ZXJ0ZXhBdHRyaWJTdGF0ZXM7Ci0KLSAgICAg
ICAgLy8gVEVYVFVSRVMKLSAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlQmluZGluZyA9IC8qKiBA
dHlwZSB7bnVtYmVyfSAqLyAoZ2wuZ2V0UGFyYW1ldGVyKGdsLkFDVElWRV9URVhUVVJFKSk7Ci0g
ICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VVbml0cyA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAo
Z2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSk7Ci0gICAgICAgIHZh
ciB0ZXh0dXJlQmluZGluZ3MgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlSW1hZ2VVbml0czsgKytpKSB7Ci0gICAgICAgICAgICBnbC5hY3RpdmVUZXh0dXJlKGds
LlRFWFRVUkUwICsgaSk7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB7Ci0gICAgICAgICAgICAg
ICAgVEVYVFVSRV8yRDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5U
RVhUVVJFX0JJTkRJTkdfMkQpLCBjYWNoZSksCi0gICAgICAgICAgICAgICAgVEVYVFVSRV9DVUJF
X01BUDogUmVzb3VyY2UudG9SZXBsYXlhYmxlKGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVApLCBjYWNoZSkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0ZXh0
dXJlQmluZGluZ3MucHVzaChzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ2xTdGF0ZS50ZXh0
dXJlQmluZGluZ3MgPSB0ZXh0dXJlQmluZGluZ3M7Ci0gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUo
Y3VycmVudFRleHR1cmVCaW5kaW5nKTsKLQotICAgICAgICBkYXRhLmdsU3RhdGUgPSBnbFN0YXRl
OwotCi0gICAgICAgIHRoaXMucmVzdG9yZUVycm9ycyhvcmlnaW5hbEVycm9ycyk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7IU9iamVjdH0gZGF0
YQotICAgICAqIEBwYXJhbSB7IUNhY2hlfSBjYWNoZQotICAgICAqLwotICAgIF9kb1JlcGxheUNh
bGxzOiBmdW5jdGlvbihkYXRhLCBjYWNoZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1c3RvbUVy
cm9ycyA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2V4dGVuc2lvbnMgPSBUeXBlVXRpbHMuY2xvbmVP
YmplY3QoZGF0YS5leHRlbnNpb25zKSB8fCB7fTsKLQotICAgICAgICB2YXIgY2FudmFzID0gZGF0
YS5vcmlnaW5hbENhbnZhcy5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgICAgIHZhciByZXBsYXlDb250
ZXh0ID0gbnVsbDsKLSAgICAgICAgdmFyIGNvbnRleHRJZHMgPSBbIndlYmdsIiwgImV4cGVyaW1l
bnRhbC13ZWJnbCIsICJ3ZWJraXQtM2QiLCAiM2QiXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGNvbnRleHRJZDsgY29udGV4dElkID0gY29udGV4dElkc1tpXTsgKytpKSB7Ci0gICAgICAgICAg
ICByZXBsYXlDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBkYXRhLm9yaWdp
bmFsQ29udGV4dEF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgaWYgKHJlcGxheUNvbnRleHQpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zb2xlLmFzc2Vy
dChyZXBsYXlDb250ZXh0LCAiRmFpbGVkIHRvIGNyZWF0ZSBhIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCBmb3IgdGhlIHJlcGxheS4iKTsKLQotICAgICAgICB2YXIgZ2wgPSAvKiogQHR5cGUgeyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9ICovIChSZXNvdXJjZS53cmFwcGVkT2JqZWN0KHJlcGxheUNvbnRl
eHQpKTsKLSAgICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGdsKTsKLQotICAgICAgICAvLyBF
bmFibGUgY29ycmVzcG9uZGluZyBXZWJHTCBleHRlbnNpb25zLgotICAgICAgICBmb3IgKHZhciBu
YW1lIGluIHRoaXMuX2V4dGVuc2lvbnMpCi0gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24obmFt
ZSk7Ci0KLSAgICAgICAgdmFyIGdsU3RhdGUgPSBkYXRhLmdsU3RhdGU7Ci0gICAgICAgIGdsLmJp
bmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgLyoqIEB0eXBlIHtXZWJHTEZyYW1lYnVmZmVy
fSAqLyAoUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShnbFN0YXRlLkZSQU1FQlVGRkVSX0JJTkRJ
TkcsIGNhY2hlKSkpOwotICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZF
UiwgLyoqIEB0eXBlIHtXZWJHTFJlbmRlcmJ1ZmZlcn0gKi8gKFJlcGxheWFibGVSZXNvdXJjZS5y
ZXBsYXkoZ2xTdGF0ZS5SRU5ERVJCVUZGRVJfQklORElORywgY2FjaGUpKSk7Ci0KLSAgICAgICAg
Ly8gRW5hYmxlIG9yIGRpc2FibGUgc2VydmVyLXNpZGUgR0wgY2FwYWJpbGl0aWVzLgotICAgICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRSZXNvdXJjZS5HTENhcGFiaWxpdGllcy5mb3JFYWNoKGZ1
bmN0aW9uKHBhcmFtZXRlcikgewotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGFyYW1ldGVy
IGluIGdsU3RhdGUpOwotICAgICAgICAgICAgaWYgKGdsU3RhdGVbcGFyYW1ldGVyXSkKLSAgICAg
ICAgICAgICAgICBnbC5lbmFibGUoZ2xbcGFyYW1ldGVyXSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbFtwYXJhbWV0ZXJdKTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgZ2wuYmxlbmRDb2xvcihnbFN0YXRlLkJMRU5EX0NPTE9SWzBdLCBnbFN0YXRlLkJM
RU5EX0NPTE9SWzFdLCBnbFN0YXRlLkJMRU5EX0NPTE9SWzJdLCBnbFN0YXRlLkJMRU5EX0NPTE9S
WzNdKTsKLSAgICAgICAgZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKGdsU3RhdGUuQkxFTkRfRVFV
QVRJT05fUkdCLCBnbFN0YXRlLkJMRU5EX0VRVUFUSU9OX0FMUEhBKTsKLSAgICAgICAgZ2wuYmxl
bmRGdW5jU2VwYXJhdGUoZ2xTdGF0ZS5CTEVORF9TUkNfUkdCLCBnbFN0YXRlLkJMRU5EX0RTVF9S
R0IsIGdsU3RhdGUuQkxFTkRfU1JDX0FMUEhBLCBnbFN0YXRlLkJMRU5EX0RTVF9BTFBIQSk7Ci0g
ICAgICAgIGdsLmNsZWFyQ29sb3IoZ2xTdGF0ZS5DT0xPUl9DTEVBUl9WQUxVRVswXSwgZ2xTdGF0
ZS5DT0xPUl9DTEVBUl9WQUxVRVsxXSwgZ2xTdGF0ZS5DT0xPUl9DTEVBUl9WQUxVRVsyXSwgZ2xT
dGF0ZS5DT0xPUl9DTEVBUl9WQUxVRVszXSk7Ci0gICAgICAgIGdsLmNsZWFyRGVwdGgoZ2xTdGF0
ZS5ERVBUSF9DTEVBUl9WQUxVRSk7Ci0gICAgICAgIGdsLmNsZWFyU3RlbmNpbChnbFN0YXRlLlNU
RU5DSUxfQ0xFQVJfVkFMVUUpOwotICAgICAgICBnbC5jb2xvck1hc2soZ2xTdGF0ZS5DT0xPUl9X
UklURU1BU0tbMF0sIGdsU3RhdGUuQ09MT1JfV1JJVEVNQVNLWzFdLCBnbFN0YXRlLkNPTE9SX1dS
SVRFTUFTS1syXSwgZ2xTdGF0ZS5DT0xPUl9XUklURU1BU0tbM10pOwotICAgICAgICBnbC5jdWxs
RmFjZShnbFN0YXRlLkNVTExfRkFDRV9NT0RFKTsKLSAgICAgICAgZ2wuZGVwdGhGdW5jKGdsU3Rh
dGUuREVQVEhfRlVOQyk7Ci0gICAgICAgIGdsLmRlcHRoTWFzayhnbFN0YXRlLkRFUFRIX1dSSVRF
TUFTSyk7Ci0gICAgICAgIGdsLmRlcHRoUmFuZ2UoZ2xTdGF0ZS5ERVBUSF9SQU5HRVswXSwgZ2xT
dGF0ZS5ERVBUSF9SQU5HRVsxXSk7Ci0gICAgICAgIGdsLmZyb250RmFjZShnbFN0YXRlLkZST05U
X0ZBQ0UpOwotICAgICAgICBnbC5oaW50KGdsLkdFTkVSQVRFX01JUE1BUF9ISU5ULCBnbFN0YXRl
LkdFTkVSQVRFX01JUE1BUF9ISU5UKTsKLSAgICAgICAgZ2wubGluZVdpZHRoKGdsU3RhdGUuTElO
RV9XSURUSCk7Ci0KLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuUGl4ZWxT
dG9yZVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXIpIHsKLSAgICAgICAgICAg
IGdsLnBpeGVsU3RvcmVpKGdsW3BhcmFtZXRlcl0sIGdsU3RhdGVbcGFyYW1ldGVyXSk7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIGdsLnBvbHlnb25PZmZzZXQoZ2xTdGF0ZS5QT0xZR09OX09GRlNF
VF9GQUNUT1IsIGdsU3RhdGUuUE9MWUdPTl9PRkZTRVRfVU5JVFMpOwotICAgICAgICBnbC5zYW1w
bGVDb3ZlcmFnZShnbFN0YXRlLlNBTVBMRV9DT1ZFUkFHRV9WQUxVRSwgZ2xTdGF0ZS5TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUKTsKLSAgICAgICAgZ2wuc3RlbmNpbEZ1bmNTZXBhcmF0ZShnbC5GUk9O
VCwgZ2xTdGF0ZS5TVEVOQ0lMX0ZVTkMsIGdsU3RhdGUuU1RFTkNJTF9SRUYsIGdsU3RhdGUuU1RF
TkNJTF9WQUxVRV9NQVNLKTsKLSAgICAgICAgZ2wuc3RlbmNpbEZ1bmNTZXBhcmF0ZShnbC5CQUNL
LCBnbFN0YXRlLlNURU5DSUxfQkFDS19GVU5DLCBnbFN0YXRlLlNURU5DSUxfQkFDS19SRUYsIGds
U3RhdGUuU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0spOwotICAgICAgICBnbC5zdGVuY2lsT3BTZXBh
cmF0ZShnbC5GUk9OVCwgZ2xTdGF0ZS5TVEVOQ0lMX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MpOwotICAgICAgICBn
bC5zdGVuY2lsT3BTZXBhcmF0ZShnbC5CQUNLLCBnbFN0YXRlLlNURU5DSUxfQkFDS19GQUlMLCBn
bFN0YXRlLlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwsIGdsU3RhdGUuU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfUEFTUyk7Ci0gICAgICAgIGdsLnN0ZW5jaWxNYXNrU2VwYXJhdGUoZ2wuRlJP
TlQsIGdsU3RhdGUuU1RFTkNJTF9XUklURU1BU0spOwotICAgICAgICBnbC5zdGVuY2lsTWFza1Nl
cGFyYXRlKGdsLkJBQ0ssIGdsU3RhdGUuU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyk7Ci0KLSAgICAg
ICAgZ2wuc2Npc3NvcihnbFN0YXRlLlNDSVNTT1JfQk9YWzBdLCBnbFN0YXRlLlNDSVNTT1JfQk9Y
WzFdLCBnbFN0YXRlLlNDSVNTT1JfQk9YWzJdLCBnbFN0YXRlLlNDSVNTT1JfQk9YWzNdKTsKLSAg
ICAgICAgZ2wudmlld3BvcnQoZ2xTdGF0ZS5WSUVXUE9SVFswXSwgZ2xTdGF0ZS5WSUVXUE9SVFsx
XSwgZ2xTdGF0ZS5WSUVXUE9SVFsyXSwgZ2xTdGF0ZS5WSUVXUE9SVFszXSk7Ci0KLSAgICAgICAg
Z2wudXNlUHJvZ3JhbSgvKiogQHR5cGUge1dlYkdMUHJvZ3JhbX0gKi8gKFJlcGxheWFibGVSZXNv
dXJjZS5yZXBsYXkoZ2xTdGF0ZS5DVVJSRU5UX1BST0dSQU0sIGNhY2hlKSkpOwotCi0gICAgICAg
IC8vIFZFUlRFWF9BVFRSSUJfQVJSQVlTCi0gICAgICAgIHZhciBtYXhWZXJ0ZXhBdHRyaWJzID0g
LyoqIEB0eXBlIHtudW1iZXJ9ICovIChnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRS
SUJTKSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VmVydGV4QXR0cmliczsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSBnbFN0YXRlLnZlcnRleEF0dHJpYlN0YXRlc1tp
XSB8fCB7fTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJM
RUQpCi0gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGkpOwotICAgICAgICAgICAgaWYgKHN0YXRlLkNVUlJFTlRfVkVSVEVYX0FUVFJJQikKLSAgICAg
ICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0ZnYoaSwgc3RhdGUuQ1VSUkVOVF9WRVJURVhfQVRU
UklCKTsKLSAgICAgICAgICAgIHZhciBidWZmZXIgPSAvKiogQHR5cGUge1dlYkdMQnVmZmVyfSAq
LyAoUmVwbGF5YWJsZVJlc291cmNlLnJlcGxheShzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX0JV
RkZFUl9CSU5ESU5HLCBjYWNoZSkpOwotICAgICAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAg
ICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOwotICAgICAg
ICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoaSwgc3RhdGUuVkVSVEVYX0FUVFJJQl9B
UlJBWV9TSVpFLCBzdGF0ZS5WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsIHN0YXRlLlZFUlRFWF9B
VFRSSUJfQVJSQVlfTk9STUFMSVpFRCwgc3RhdGUuVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUs
IHN0YXRlLlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIC8qKiBAdHlwZSB7
V2ViR0xCdWZmZXJ9ICovIChSZXBsYXlhYmxlUmVzb3VyY2UucmVwbGF5KGdsU3RhdGUuQVJSQVlf
QlVGRkVSX0JJTkRJTkcsIGNhY2hlKSkpOwotICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1F
TlRfQVJSQVlfQlVGRkVSLCAvKiogQHR5cGUge1dlYkdMQnVmZmVyfSAqLyAoUmVwbGF5YWJsZVJl
c291cmNlLnJlcGxheShnbFN0YXRlLkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcsIGNhY2hl
KSkpOwotCi0gICAgICAgIC8vIFRFWFRVUkVTCi0gICAgICAgIHZhciBtYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTKSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4VGV4dHVy
ZUltYWdlVW5pdHM7ICsraSkgewotICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbC5URVhU
VVJFMCArIGkpOwotICAgICAgICAgICAgdmFyIHN0YXRlID0gZ2xTdGF0ZS50ZXh0dXJlQmluZGlu
Z3NbaV0gfHwge307Ci0gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCAv
KiogQHR5cGUge1dlYkdMVGV4dHVyZX0gKi8gKFJlcGxheWFibGVSZXNvdXJjZS5yZXBsYXkoc3Rh
dGUuVEVYVFVSRV8yRCwgY2FjaGUpKSk7Ci0gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFX0NVQkVfTUFQLCAvKiogQHR5cGUge1dlYkdMVGV4dHVyZX0gKi8gKFJlcGxheWFibGVS
ZXNvdXJjZS5yZXBsYXkoc3RhdGUuVEVYVFVSRV9DVUJFX01BUCwgY2FjaGUpKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZShnbFN0YXRlLkFDVElWRV9URVhUVVJFKTsKLQot
ICAgICAgICBDb250ZXh0UmVzb3VyY2UucHJvdG90eXBlLl9kb1JlcGxheUNhbGxzLmNhbGwodGhp
cywgZGF0YSwgY2FjaGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVj
dHxudW1iZXJ9IHRhcmdldAotICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQotICAgICAqLwotICAg
IGN1cnJlbnRCaW5kaW5nOiBmdW5jdGlvbih0YXJnZXQpCi0gICAgewotICAgICAgICB2YXIgcmVz
b3VyY2UgPSBSZXNvdXJjZS5mb3JPYmplY3QodGFyZ2V0KTsKLSAgICAgICAgaWYgKHJlc291cmNl
KQotICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgICAgICB2YXIgZ2wgPSB0aGlzLndy
YXBwZWRPYmplY3QoKTsKLSAgICAgICAgdmFyIGJpbmRpbmdQYXJhbWV0ZXI7Ci0gICAgICAgIHZh
ciBiaW5kTWV0aG9kTmFtZTsKLSAgICAgICAgdmFyIGJpbmRNZXRob2RUYXJnZXQgPSB0YXJnZXQ7
Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgZ2wuQVJSQVlfQlVGRkVS
OgotICAgICAgICAgICAgYmluZGluZ1BhcmFtZXRlciA9IGdsLkFSUkFZX0JVRkZFUl9CSU5ESU5H
OwotICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEJ1ZmZlciI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAg
ICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOwot
ICAgICAgICAgICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEJ1ZmZlciI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBnbC5URVhUVVJFXzJEOgotICAgICAgICAgICAgYmluZGluZ1Bh
cmFtZXRlciA9IGdsLlRFWFRVUkVfQklORElOR18yRDsKLSAgICAgICAgICAgIGJpbmRNZXRob2RO
YW1lID0gImJpbmRUZXh0dXJlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGds
LlRFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgIGNhc2UgZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgotICAgICAgICBjYXNlIGdsLlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAg
ICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgIGNhc2Ug
Z2wuVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBjYXNlIGdsLlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgY2FzZSBnbC5URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6Ci0gICAgICAgICAgICBiaW5kaW5nUGFyYW1ldGVyID0gZ2wuVEVYVFVSRV9CSU5E
SU5HX0NVQkVfTUFQOwotICAgICAgICAgICAgYmluZE1ldGhvZFRhcmdldCA9IGdsLlRFWFRVUkVf
Q1VCRV9NQVA7Ci0gICAgICAgICAgICBiaW5kTWV0aG9kTmFtZSA9ICJiaW5kVGV4dHVyZSI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBnbC5GUkFNRUJVRkZFUjoKLSAgICAgICAg
ICAgIGJpbmRpbmdQYXJhbWV0ZXIgPSBnbC5GUkFNRUJVRkZFUl9CSU5ESU5HOwotICAgICAgICAg
ICAgYmluZE1ldGhvZE5hbWUgPSAiYmluZEZyYW1lYnVmZmVyIjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGdsLlJFTkRFUkJVRkZFUjoKLSAgICAgICAgICAgIGJpbmRpbmdQYXJh
bWV0ZXIgPSBnbC5SRU5ERVJCVUZGRVJfQklORElORzsKLSAgICAgICAgICAgIGJpbmRNZXRob2RO
YW1lID0gImJpbmRSZW5kZXJidWZmZXIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJBU1NFUlRfTk9UX1JFQUNIRUQ6IHVu
a25vd24gYmluZGluZyB0YXJnZXQgIiArIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgfQotICAgICAgICByZXNvdXJjZSA9IFJlc291cmNlLmZvck9iamVjdChnbC5n
ZXRQYXJhbWV0ZXIoYmluZGluZ1BhcmFtZXRlcikpOwotICAgICAgICBpZiAocmVzb3VyY2UpCi0g
ICAgICAgICAgICByZXNvdXJjZS5wdXNoQmluZGluZyhiaW5kTWV0aG9kVGFyZ2V0LCBiaW5kTWV0
aG9kTmFtZSk7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHJldHVybiB7IU9iamVjdC48c3RyaW5nLCBGdW5jdGlv
bj59Ci0gICAgICovCi0gICAgX2N1c3RvbVdyYXBGdW5jdGlvbnM6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHZhciB3cmFwRnVuY3Rpb25zID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3Vy
Y2UuX3dyYXBGdW5jdGlvbnM7Ci0gICAgICAgIGlmICghd3JhcEZ1bmN0aW9ucykgewotICAgICAg
ICAgICAgd3JhcEZ1bmN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0KLSAgICAgICAgICAg
IHdyYXBGdW5jdGlvbnNbImNyZWF0ZUJ1ZmZlciJdID0gUmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnJl
c291cmNlRmFjdG9yeU1ldGhvZChXZWJHTEJ1ZmZlclJlc291cmNlLCAiV2ViR0xCdWZmZXIiKTsK
LSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImNyZWF0ZVNoYWRlciJdID0gUmVzb3VyY2UuV3Jh
cEZ1bmN0aW9uLnJlc291cmNlRmFjdG9yeU1ldGhvZChXZWJHTFNoYWRlclJlc291cmNlLCAiV2Vi
R0xTaGFkZXIiKTsKLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImNyZWF0ZVByb2dyYW0iXSA9
IFJlc291cmNlLldyYXBGdW5jdGlvbi5yZXNvdXJjZUZhY3RvcnlNZXRob2QoV2ViR0xQcm9ncmFt
UmVzb3VyY2UsICJXZWJHTFByb2dyYW0iKTsKLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImNy
ZWF0ZVRleHR1cmUiXSA9IFJlc291cmNlLldyYXBGdW5jdGlvbi5yZXNvdXJjZUZhY3RvcnlNZXRo
b2QoV2ViR0xUZXh0dXJlUmVzb3VyY2UsICJXZWJHTFRleHR1cmUiKTsKLSAgICAgICAgICAgIHdy
YXBGdW5jdGlvbnNbImNyZWF0ZUZyYW1lYnVmZmVyIl0gPSBSZXNvdXJjZS5XcmFwRnVuY3Rpb24u
cmVzb3VyY2VGYWN0b3J5TWV0aG9kKFdlYkdMRnJhbWVidWZmZXJSZXNvdXJjZSwgIldlYkdMRnJh
bWVidWZmZXIiKTsKLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImNyZWF0ZVJlbmRlcmJ1ZmZl
ciJdID0gUmVzb3VyY2UuV3JhcEZ1bmN0aW9uLnJlc291cmNlRmFjdG9yeU1ldGhvZChXZWJHTFJl
bmRlcmJ1ZmZlclJlc291cmNlLCAiV2ViR0xSZW5kZXJidWZmZXIiKTsKLSAgICAgICAgICAgIHdy
YXBGdW5jdGlvbnNbImdldFVuaWZvcm1Mb2NhdGlvbiJdID0gUmVzb3VyY2UuV3JhcEZ1bmN0aW9u
LnJlc291cmNlRmFjdG9yeU1ldGhvZChSZXNvdXJjZSwgIldlYkdMVW5pZm9ybUxvY2F0aW9uIik7
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhv
ZE5hbWUKLSAgICAgICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpSZXNvdXJjZSwgIUNh
bGwpPX0gcHVzaENhbGxGdW5jCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZ1bmN0aW9u
IHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUsIHB1c2hDYWxsRnVuYykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocHVzaENhbGxGdW5jKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdHxu
dW1iZXJ9IHRhcmdldAotICAgICAgICAgICAgICAgICAgICAgKiBAdGhpcyBSZXNvdXJjZS5XcmFw
RnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHdy
YXBGdW5jdGlvbnNbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbih0YXJnZXQpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jl
c291cmNlLmN1cnJlbnRCaW5kaW5nKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaENhbGxGdW5jLmNh
bGwocmVzb3VyY2UsIHRoaXMuY2FsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAg
ICAgICAgICAgKiBAcGFyYW0ge09iamVjdHxudW1iZXJ9IHRhcmdldAotICAgICAgICAgICAgICAg
ICAgICAgKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbbWV0aG9kTmFtZV0gPSBmdW5j
dGlvbih0YXJnZXQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciByZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlLmN1cnJlbnRCaW5kaW5nKHRhcmdldCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb3VyY2UucHVzaENhbGwodGhpcy5jYWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24oImJpbmRBdHRyaWJMb2NhdGlvbiIpOwotICAgICAg
ICAgICAgc3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24oImNvbXBpbGVTaGFkZXIiKTsKLSAgICAg
ICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJkZXRhY2hTaGFkZXIiKTsKLSAgICAg
ICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJsaW5rUHJvZ3JhbSIpOwotICAgICAg
ICAgICAgc3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24oInNoYWRlclNvdXJjZSIpOwotICAgICAg
ICAgICAgc3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24oImJ1ZmZlckRhdGEiKTsKLSAgICAgICAg
ICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJidWZmZXJTdWJEYXRhIik7Ci0gICAgICAg
ICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigiY29tcHJlc3NlZFRleEltYWdlMkQiKTsK
LSAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRCIpOwotICAgICAgICAgICAgc3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24oImNvcHlU
ZXhJbWFnZTJEIiwgV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX2NvcHlU
ZXhJbWFnZTJEKTsKLSAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIFdlYkdMVGV4dHVyZVJlc291cmNlLnByb3RvdHlwZS5wdXNoQ2FsbF9j
b3B5VGV4SW1hZ2UyRCk7Ci0gICAgICAgICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigi
Z2VuZXJhdGVNaXBtYXAiKTsKLSAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9u
KCJ0ZXhJbWFnZTJEIik7Ci0gICAgICAgICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigi
dGV4U3ViSW1hZ2UyRCIpOwotICAgICAgICAgICAgc3RhdGVNb2RpZnlpbmdXcmFwRnVuY3Rpb24o
InRleFBhcmFtZXRlcmYiLCBXZWJHTFRleHR1cmVSZXNvdXJjZS5wcm90b3R5cGUucHVzaENhbGxf
dGV4UGFyYW1ldGVyKTsKLSAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9uKCJ0
ZXhQYXJhbWV0ZXJpIiwgV2ViR0xUZXh0dXJlUmVzb3VyY2UucHJvdG90eXBlLnB1c2hDYWxsX3Rl
eFBhcmFtZXRlcik7Ci0gICAgICAgICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigicmVu
ZGVyYnVmZmVyU3RvcmFnZSIpOwotCi0gICAgICAgICAgICAvKiogQHRoaXMgUmVzb3VyY2UuV3Jh
cEZ1bmN0aW9uICovCi0gICAgICAgICAgICB3cmFwRnVuY3Rpb25zWyJnZXRFcnJvciJdID0gZnVu
Y3Rpb24oKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBnbCA9IC8qKiBAdHlw
ZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSAqLyAodGhpcy5fb3JpZ2luYWxPYmplY3QpOwotICAg
ICAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMucmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9PSBnbC5OT19FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVz
b3VyY2UuY2xlYXJFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGVycm9yID0gdGhpcy5fcmVzb3VyY2UubmV4dEVycm9yKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gZ2wuTk9fRVJST1IpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLm92ZXJyaWRlUmVzdWx0KGVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IG5hbWUKLSAgICAgICAgICAgICAqIEB0aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbgot
ICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3cmFwRnVuY3Rpb25zWyJnZXRFeHRlbnNpb24i
XSA9IGZ1bmN0aW9uKG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
cmVzb3VyY2UuYWRkRXh0ZW5zaW9uKG5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYm91bmQgV2ViR0wgcmVzb3VyY2VzLgotICAg
ICAgICAgICAgLy8KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBAcGFyYW0ge1dl
YkdMUHJvZ3JhbX0gcHJvZ3JhbQotICAgICAgICAgICAgICogQHBhcmFtIHtXZWJHTFNoYWRlcn0g
c2hhZGVyCi0gICAgICAgICAgICAgKiBAdGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24KLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgd3JhcEZ1bmN0aW9uc1siYXR0YWNoU2hhZGVyIl0gPSBm
dW5jdGlvbihwcm9ncmFtLCBzaGFkZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dmFyIHJlc291cmNlID0gdGhpcy5fcmVzb3VyY2UuY3VycmVudEJpbmRpbmcocHJvZ3JhbSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc291
cmNlLnB1c2hDYWxsKHRoaXMuY2FsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRl
clJlc291cmNlID0gLyoqIEB0eXBlIHtXZWJHTFNoYWRlclJlc291cmNlfSAqLyAoUmVzb3VyY2Uu
Zm9yT2JqZWN0KHNoYWRlcikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZGVyUmVzb3Vy
Y2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXJUeXBlID0gc2hhZGVyUmVz
b3VyY2UudHlwZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuX3JlZ2lzdGVy
Qm91bmRSZXNvdXJjZSgiX19hdHRhY2hTaGFkZXJfIiArIHNoYWRlclR5cGUsIHNoYWRlclJlc291
cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHRh
cmdldAotICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGF0dGFjaG1lbnQKLSAgICAgICAg
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmplY3RUYXJnZXQKLSAgICAgICAgICAgICAqIEBwYXJh
bSB7V2ViR0xSZW5kZXJidWZmZXJ8V2ViR0xUZXh0dXJlfSBvYmoKLSAgICAgICAgICAgICAqIEB0
aGlzIFJlc291cmNlLldyYXBGdW5jdGlvbgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3
cmFwRnVuY3Rpb25zWyJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciJdID0gd3JhcEZ1bmN0aW9uc1si
ZnJhbWVidWZmZXJUZXh0dXJlMkQiXSA9IGZ1bmN0aW9uKHRhcmdldCwgYXR0YWNobWVudCwgb2Jq
ZWN0VGFyZ2V0LCBvYmopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc291
cmNlID0gdGhpcy5fcmVzb3VyY2UuY3VycmVudEJpbmRpbmcodGFyZ2V0KTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UucHVzaENh
bGwodGhpcy5jYWxsKCkpOwotICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5fcmVnaXN0ZXJC
b3VuZFJlc291cmNlKCJfX2ZyYW1lYnVmZmVyQXR0YWNobWVudE9iamVjdE5hbWUiLCBvYmopOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldAotICAgICAgICAgICAgICogQHBhcmFtIHtP
YmplY3R9IG9iagotICAgICAgICAgICAgICogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uCi0g
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImJpbmRCdWZmZXIiXSA9
IHdyYXBGdW5jdGlvbnNbImJpbmRGcmFtZWJ1ZmZlciJdID0gd3JhcEZ1bmN0aW9uc1siYmluZFJl
bmRlcmJ1ZmZlciJdID0gZnVuY3Rpb24odGFyZ2V0LCBvYmopCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UuX3JlZ2lzdGVyQm91bmRSZXNvdXJjZSgiX19iaW5k
QnVmZmVyXyIgKyB0YXJnZXQsIG9iaik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQKLSAgICAgICAgICAgICAqIEBw
YXJhbSB7V2ViR0xUZXh0dXJlfSBvYmoKLSAgICAgICAgICAgICAqIEB0aGlzIFJlc291cmNlLldy
YXBGdW5jdGlvbgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3cmFwRnVuY3Rpb25zWyJi
aW5kVGV4dHVyZSJdID0gZnVuY3Rpb24odGFyZ2V0LCBvYmopCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGdsID0gLyoqIEB0eXBlIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9ICov
ICh0aGlzLl9vcmlnaW5hbE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0
dXJlQmluZGluZyA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoZ2wuZ2V0UGFyYW1ldGVyKGdsLkFD
VElWRV9URVhUVVJFKSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UuX3JlZ2lzdGVy
Qm91bmRSZXNvdXJjZSgiX19iaW5kVGV4dHVyZV8iICsgdGFyZ2V0ICsgIl8iICsgY3VycmVudFRl
eHR1cmVCaW5kaW5nLCBvYmopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gcHJvZ3JhbQotICAgICAgICAgICAgICog
QHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHdyYXBGdW5jdGlvbnNbInVzZVByb2dyYW0iXSA9IGZ1bmN0aW9uKHByb2dyYW0pCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UuX3JlZ2lzdGVyQm91bmRSZXNv
dXJjZSgiX191c2VQcm9ncmFtIiwgcHJvZ3JhbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvKioKLSAgICAgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAgICAgICAg
ICogQHRoaXMgUmVzb3VyY2UuV3JhcEZ1bmN0aW9uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgIHdyYXBGdW5jdGlvbnNbInZlcnRleEF0dHJpYlBvaW50ZXIiXSA9IGZ1bmN0aW9uKGluZGV4
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBnbCA9IC8qKiBAdHlwZSB7V2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSAqLyAodGhpcy5fb3JpZ2luYWxPYmplY3QpOwotICAgICAgICAg
ICAgICAgIHRoaXMuX3Jlc291cmNlLl9yZWdpc3RlckJvdW5kUmVzb3VyY2UoIl9fdmVydGV4QXR0
cmliUG9pbnRlcl8iICsgaW5kZXgsIGdsLmdldFBhcmFtZXRlcihnbC5BUlJBWV9CVUZGRVJfQklO
RElORykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRSZXNvdXJjZS5fd3JhcEZ1bmN0aW9ucyA9IHdyYXBGdW5jdGlvbnM7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbnM7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogQ29u
dGV4dFJlc291cmNlLnByb3RvdHlwZQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8g
MkQgQ2FudmFzCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGV4dGVuZHMge0NvbnRleHRSZXNvdXJjZX0KLSAqIEBwYXJhbSB7IUNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRH0gY29udGV4dAotICovCi1mdW5jdGlvbiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRSZXNvdXJjZShjb250ZXh0KQotewotICAgIENvbnRleHRSZXNvdXJjZS5jYWxsKHRoaXMs
IGNvbnRleHQsICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiKTsKLX0KLQotLyoqCi0gKiBAY29u
c3QKLSAqIEB0eXBlIHshQXJyYXkuPHN0cmluZz59Ci0gKi8KLUNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRFJlc291cmNlLkF0dHJpYnV0ZVByb3BlcnRpZXMgPSBbCi0gICAgInN0cm9rZVN0eWxlIiwK
LSAgICAiZmlsbFN0eWxlIiwKLSAgICAiZ2xvYmFsQWxwaGEiLAotICAgICJsaW5lV2lkdGgiLAot
ICAgICJsaW5lQ2FwIiwKLSAgICAibGluZUpvaW4iLAotICAgICJtaXRlckxpbWl0IiwKLSAgICAi
c2hhZG93T2Zmc2V0WCIsCi0gICAgInNoYWRvd09mZnNldFkiLAotICAgICJzaGFkb3dCbHVyIiwK
LSAgICAic2hhZG93Q29sb3IiLAotICAgICJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLAotICAg
ICJmb250IiwKLSAgICAidGV4dEFsaWduIiwKLSAgICAidGV4dEJhc2VsaW5lIiwKLSAgICAibGlu
ZURhc2hPZmZzZXQiLAotICAgICJ3ZWJraXRMaW5lRGFzaCIsCi0gICAgIndlYmtpdExpbmVEYXNo
T2Zmc2V0IgotXTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHshQXJyYXkuPHN0cmluZz59
Ci0gKi8KLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLlBhdGhNZXRob2RzID0gWwot
ICAgICJiZWdpblBhdGgiLAotICAgICJtb3ZlVG8iLAotICAgICJjbG9zZVBhdGgiLAotICAgICJs
aW5lVG8iLAotICAgICJxdWFkcmF0aWNDdXJ2ZVRvIiwKLSAgICAiYmV6aWVyQ3VydmVUbyIsCi0g
ICAgImFyY1RvIiwKLSAgICAiYXJjIiwKLSAgICAicmVjdCIKLV07Ci0KLS8qKgotICogQGNvbnN0
Ci0gKiBAdHlwZSB7IUFycmF5LjxzdHJpbmc+fQotICovCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRSZXNvdXJjZS5UcmFuc2Zvcm1hdGlvbk1hdHJpeE1ldGhvZHMgPSBbCi0gICAgInNjYWxlIiwK
LSAgICAicm90YXRlIiwKLSAgICAidHJhbnNsYXRlIiwKLSAgICAidHJhbnNmb3JtIiwKLSAgICAi
c2V0VHJhbnNmb3JtIgotXTsKLQotLyoqCi0gKiBAY29uc3QKLSAqIEB0eXBlIHshT2JqZWN0Ljxz
dHJpbmcsIGJvb2xlYW4+fQotICovCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNvdXJjZS5E
cmF3aW5nTWV0aG9kcyA9IFR5cGVVdGlscy5jcmVhdGVQcmVmaXhlZFByb3BlcnR5TmFtZXNTZXQo
WwotICAgICJjbGVhclJlY3QiLAotICAgICJkcmF3SW1hZ2UiLAotICAgICJkcmF3SW1hZ2VGcm9t
UmVjdCIsCi0gICAgImRyYXdDdXN0b21Gb2N1c1JpbmciLAotICAgICJkcmF3U3lzdGVtRm9jdXNS
aW5nIiwKLSAgICAiZmlsbCIsCi0gICAgImZpbGxSZWN0IiwKLSAgICAiZmlsbFRleHQiLAotICAg
ICJwdXRJbWFnZURhdGEiLAotICAgICJwdXRJbWFnZURhdGFIRCIsCi0gICAgInN0cm9rZSIsCi0g
ICAgInN0cm9rZVJlY3QiLAotICAgICJzdHJva2VUZXh0IgotXSk7Ci0KLUNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRFJlc291cmNlLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUgKG92ZXJyaWRlcyBAcmV0dXJuIHR5cGUpCi0gICAgICogQHJldHVybiB7Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEfQotICAgICAqLwotICAgIHdyYXBwZWRPYmplY3Q6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl93cmFwcGVkT2JqZWN0OwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9Ci0gICAgICovCi0g
ICAgdG9EYXRhVVJMOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy53cmFw
cGVkT2JqZWN0KCkuY2FudmFzLnRvRGF0YVVSTCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0g
eyFDYWNoZX0gY2FjaGUKLSAgICAgKi8KLSAgICBfcG9wdWxhdGVSZXBsYXlhYmxlRGF0YTogZnVu
Y3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewotICAgICAgICBkYXRhLmN1cnJlbnRBdHRyaWJ1dGVz
ID0gdGhpcy5fY3VycmVudEF0dHJpYnV0ZXNTdGF0ZSgpOwotICAgICAgICBkYXRhLm9yaWdpbmFs
Q2FudmFzQ2xvbmVkID0gVHlwZVV0aWxzLmNsb25lSW50b0NhbnZhcyh0aGlzLndyYXBwZWRPYmpl
Y3QoKS5jYW52YXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAg
KiBAcGFyYW0geyFPYmplY3R9IGRhdGEKLSAgICAgKiBAcGFyYW0geyFDYWNoZX0gY2FjaGUKLSAg
ICAgKi8KLSAgICBfZG9SZXBsYXlDYWxsczogZnVuY3Rpb24oZGF0YSwgY2FjaGUpCi0gICAgewot
ICAgICAgICB2YXIgY2FudmFzID0gVHlwZVV0aWxzLmNsb25lSW50b0NhbnZhcyhkYXRhLm9yaWdp
bmFsQ2FudmFzQ2xvbmVkKTsKLSAgICAgICAgdmFyIGN0eCA9IC8qKiBAdHlwZSB7IUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRH0gKi8gKFJlc291cmNlLndyYXBwZWRPYmplY3QoY2FudmFzLmdldENv
bnRleHQoIjJkIikpKTsKLSAgICAgICAgdGhpcy5zZXRXcmFwcGVkT2JqZWN0KGN0eCk7Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmNhbGxzLmxlbmd0aDsgaSA8IG47ICsraSkg
ewotICAgICAgICAgICAgdmFyIHJlcGxheWFibGVDYWxsID0gLyoqIEB0eXBlIHtSZXBsYXlhYmxl
Q2FsbH0gKi8gKGRhdGEuY2FsbHNbaV0pOwotICAgICAgICAgICAgaWYgKHJlcGxheWFibGVDYWxs
LmZ1bmN0aW9uTmFtZSgpID09PSAic2F2ZSIpCi0gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlB
dHRyaWJ1dGVzU3RhdGUocmVwbGF5YWJsZUNhbGwuYXR0YWNobWVudCgiY2FudmFzMmRBdHRyaWJ1
dGVzU3RhdGUiKSk7Ci0gICAgICAgICAgICB0aGlzLl9jYWxscy5wdXNoKHJlcGxheWFibGVDYWxs
LnJlcGxheShjYWNoZSkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2FwcGx5QXR0cmlidXRl
c1N0YXRlKGRhdGEuY3VycmVudEF0dHJpYnV0ZXMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyFDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGxfc2V0VHJhbnNmb3Jt
OiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgdmFyIHNhdmVDYWxsSW5kZXggPSB0aGlz
Ll9sYXN0SW5kZXhPZk1hdGNoaW5nU2F2ZUNhbGwoKTsKLSAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5fbGFzdEluZGV4T2ZBbnlDYWxsKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLlBh
dGhNZXRob2RzKTsKLSAgICAgICAgaW5kZXggPSBNYXRoLm1heChpbmRleCwgc2F2ZUNhbGxJbmRl
eCk7Ci0gICAgICAgIGlmICh0aGlzLl9yZW1vdmVDYWxsc0Zyb21Mb2coQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEUmVzb3VyY2UuVHJhbnNmb3JtYXRpb25NYXRyaXhNZXRob2RzLCBpbmRleCArIDEp
KQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsT2Jzb2xldGVDYWxsc0Zyb21Mb2coKTsKLSAg
ICAgICAgdGhpcy5wdXNoQ2FsbChjYWxsKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHshQ2FsbH0gY2FsbAotICAgICAqLwotICAgIHB1c2hDYWxsX2JlZ2luUGF0aDogZnVuY3Rp
b24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2xhc3RJbmRleE9mQW55
Q2FsbChbImNsaXAiXSk7Ci0gICAgICAgIGlmICh0aGlzLl9yZW1vdmVDYWxsc0Zyb21Mb2coQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEUmVzb3VyY2UuUGF0aE1ldGhvZHMsIGluZGV4ICsgMSkpCi0g
ICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxPYnNvbGV0ZUNhbGxzRnJvbUxvZygpOwotICAgICAg
ICB0aGlzLnB1c2hDYWxsKGNhbGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
eyFDYWxsfSBjYWxsCi0gICAgICovCi0gICAgcHVzaENhbGxfc2F2ZTogZnVuY3Rpb24oY2FsbCkK
LSAgICB7Ci0gICAgICAgIGNhbGwuc2V0QXR0YWNobWVudCgiY2FudmFzMmRBdHRyaWJ1dGVzU3Rh
dGUiLCB0aGlzLl9jdXJyZW50QXR0cmlidXRlc1N0YXRlKCkpOwotICAgICAgICB0aGlzLnB1c2hD
YWxsKGNhbGwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFDYWxsfSBjYWxs
Ci0gICAgICovCi0gICAgcHVzaENhbGxfcmVzdG9yZTogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0g
ICAgICAgIHZhciBsYXN0SW5kZXhPZlNhdmUgPSB0aGlzLl9sYXN0SW5kZXhPZk1hdGNoaW5nU2F2
ZUNhbGwoKTsKLSAgICAgICAgaWYgKGxhc3RJbmRleE9mU2F2ZSA9PT0gLTEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2NhbGxzW2xhc3RJbmRleE9mU2F2ZV0uc2V0QXR0YWNo
bWVudCgiY2FudmFzMmRBdHRyaWJ1dGVzU3RhdGUiLCBudWxsKTsgLy8gTm8gbG9uZ2VyIG5lZWRl
ZCwgZnJlZSBtZW1vcnkuCi0KLSAgICAgICAgdmFyIG1vZGlmaWVkID0gZmFsc2U7Ci0gICAgICAg
IGlmICh0aGlzLl9yZW1vdmVDYWxsc0Zyb21Mb2coWyJjbGlwIl0sIGxhc3RJbmRleE9mU2F2ZSAr
IDEpKQotICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlOwotCi0gICAgICAgIHZhciBsYXN0SW5k
ZXhPZkFueVBhdGhNZXRob2QgPSB0aGlzLl9sYXN0SW5kZXhPZkFueUNhbGwoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEUmVzb3VyY2UuUGF0aE1ldGhvZHMpOwotICAgICAgICB2YXIgaW5kZXggPSBN
YXRoLm1heChsYXN0SW5kZXhPZlNhdmUsIGxhc3RJbmRleE9mQW55UGF0aE1ldGhvZCk7Ci0gICAg
ICAgIGlmICh0aGlzLl9yZW1vdmVDYWxsc0Zyb21Mb2coQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
UmVzb3VyY2UuVHJhbnNmb3JtYXRpb25NYXRyaXhNZXRob2RzLCBpbmRleCArIDEpKQotICAgICAg
ICAgICAgbW9kaWZpZWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtb2RpZmllZCkKLSAgICAgICAg
ICAgIHRoaXMuX3JlbW92ZUFsbE9ic29sZXRlQ2FsbHNGcm9tTG9nKCk7Ci0KLSAgICAgICAgdmFy
IGxhc3RDYWxsID0gdGhpcy5fY2FsbHNbdGhpcy5fY2FsbHMubGVuZ3RoIC0gMV07Ci0gICAgICAg
IGlmIChsYXN0Q2FsbCAmJiBsYXN0Q2FsbC5mdW5jdGlvbk5hbWUoKSA9PT0gInNhdmUiKQotICAg
ICAgICAgICAgdGhpcy5fY2FsbHMucG9wKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
aXMucHVzaENhbGwoY2FsbCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyPX0gZnJvbUluZGV4Ci0gICAgICogQHJldHVybiB7bnVtYmVyfQotICAgICAqLwotICAgIF9s
YXN0SW5kZXhPZk1hdGNoaW5nU2F2ZUNhbGw6IGZ1bmN0aW9uKGZyb21JbmRleCkKLSAgICB7Ci0g
ICAgICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9PSAibnVtYmVyIikKLSAgICAgICAgICAgIGZy
b21JbmRleCA9IHRoaXMuX2NhbGxzLmxlbmd0aCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGZyb21JbmRleCA9IE1hdGgubWluKGZyb21JbmRleCwgdGhpcy5fY2FsbHMubGVuZ3RoIC0g
MSk7Ci0gICAgICAgIHZhciBzdGFja0RlcHRoID0gMTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZy
b21JbmRleDsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0
aGlzLl9jYWxsc1tpXS5mdW5jdGlvbk5hbWUoKTsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbk5h
bWUgPT09ICJyZXN0b3JlIikKLSAgICAgICAgICAgICAgICArK3N0YWNrRGVwdGg7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChmdW5jdGlvbk5hbWUgPT09ICJzYXZlIikgewotICAgICAgICAgICAgICAg
IC0tc3RhY2tEZXB0aDsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YWNrRGVwdGgpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAtMTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQXJyYXkuPHN0
cmluZz59IGZ1bmN0aW9uTmFtZXMKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IGZyb21JbmRleAot
ICAgICAqIEByZXR1cm4ge251bWJlcn0KLSAgICAgKi8KLSAgICBfbGFzdEluZGV4T2ZBbnlDYWxs
OiBmdW5jdGlvbihmdW5jdGlvbk5hbWVzLCBmcm9tSW5kZXgpCi0gICAgewotICAgICAgICBpZiAo
dHlwZW9mIGZyb21JbmRleCAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICBmcm9tSW5kZXggPSB0
aGlzLl9jYWxscy5sZW5ndGggLSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcm9tSW5k
ZXggPSBNYXRoLm1pbihmcm9tSW5kZXgsIHRoaXMuX2NhbGxzLmxlbmd0aCAtIDEpOwotICAgICAg
ICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uTmFtZXMuaW5kZXhPZih0aGlzLl9jYWxsc1tpXS5mdW5jdGlvbk5hbWUoKSkgIT09
IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAtMTsKLSAgICB9LAotCi0gICAgX3JlbW92ZUFsbE9ic29sZXRlQ2FsbHNGcm9tTG9nOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICAvLyBSZW1vdmUgYWxsIFBBVEggbWV0aG9kcyBiZXR3ZWVu
IGNsaXAoKSBhbmQgYmVnaW5QYXRoKCkgY2FsbHMuCi0gICAgICAgIHZhciBsYXN0SW5kZXhPZkJl
Z2luUGF0aCA9IHRoaXMuX2xhc3RJbmRleE9mQW55Q2FsbChbImJlZ2luUGF0aCJdKTsKLSAgICAg
ICAgd2hpbGUgKGxhc3RJbmRleE9mQmVnaW5QYXRoICE9PSAtMSkgewotICAgICAgICAgICAgdmFy
IGluZGV4ID0gdGhpcy5fbGFzdEluZGV4T2ZBbnlDYWxsKFsiY2xpcCJdLCBsYXN0SW5kZXhPZkJl
Z2luUGF0aCAtIDEpOwotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ2FsbHNGcm9tTG9nKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLlBhdGhNZXRob2RzLCBpbmRleCArIDEsIGxhc3RJ
bmRleE9mQmVnaW5QYXRoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleE9mQmVnaW5QYXRoID0gdGhp
cy5fbGFzdEluZGV4T2ZBbnlDYWxsKFsiYmVnaW5QYXRoIl0sIGluZGV4IC0gMSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBSZW1vdmUgYWxsIFRSQVNGT1JNQVRJT04gTUFUUklYIG1ldGhvZHMg
YmVmb3JlIHJlc3RvcmUoKSBvciBzZXRUcmFuc2Zvcm0oKSBidXQgYWZ0ZXIgYW55IFBBVEggb3Ig
Y29ycmVzcG9uZGluZyBzYXZlKCkgbWV0aG9kLgotICAgICAgICB2YXIgbGFzdFJlc3RvcmUgPSB0
aGlzLl9sYXN0SW5kZXhPZkFueUNhbGwoWyJyZXN0b3JlIiwgInNldFRyYW5zZm9ybSJdKTsKLSAg
ICAgICAgd2hpbGUgKGxhc3RSZXN0b3JlICE9PSAtMSkgewotICAgICAgICAgICAgdmFyIHNhdmVD
YWxsSW5kZXggPSB0aGlzLl9sYXN0SW5kZXhPZk1hdGNoaW5nU2F2ZUNhbGwobGFzdFJlc3RvcmUg
LSAxKTsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2xhc3RJbmRleE9mQW55Q2FsbChD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNvdXJjZS5QYXRoTWV0aG9kcywgbGFzdFJlc3RvcmUg
LSAxKTsKLSAgICAgICAgICAgIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIHNhdmVDYWxsSW5kZXgp
OwotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ2FsbHNGcm9tTG9nKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRFJlc291cmNlLlRyYW5zZm9ybWF0aW9uTWF0cml4TWV0aG9kcywgaW5kZXggKyAxLCBs
YXN0UmVzdG9yZSk7Ci0gICAgICAgICAgICBsYXN0UmVzdG9yZSA9IHRoaXMuX2xhc3RJbmRleE9m
QW55Q2FsbChbInJlc3RvcmUiLCAic2V0VHJhbnNmb3JtIl0sIGluZGV4IC0gMSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBSZW1vdmUgYWxsIHNhdmUtcmVzdG9yZSBjb25zZWN1dGl2ZSBwYWly
cy4KLSAgICAgICAgdmFyIHJlc3RvcmVDYWxscyA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0
aGlzLl9jYWxscy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgdmFyIGZ1
bmN0aW9uTmFtZSA9IHRoaXMuX2NhbGxzW2ldLmZ1bmN0aW9uTmFtZSgpOwotICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uTmFtZSA9PT0gInJlc3RvcmUiKSB7Ci0gICAgICAgICAgICAgICAgKytyZXN0
b3JlQ2FsbHM7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSAic2F2ZSIgJiYgcmVzdG9yZUNhbGxzID4gMCkg
ewotICAgICAgICAgICAgICAgIHZhciBzYXZlQ2FsbEluZGV4ID0gaTsKLSAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gaSAtIDE7IGogPj0gMCAmJiBpIC0gaiA8IHJlc3RvcmVDYWxsczsgLS1q
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWxsc1tqXS5mdW5jdGlvbk5hbWUo
KSA9PT0gInNhdmUiKQotICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUNhbGxJbmRleCA9IGo7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl9jYWxscy5zcGxpY2Uo
c2F2ZUNhbGxJbmRleCwgKGkgLSBzYXZlQ2FsbEluZGV4ICsgMSkgKiAyKTsKLSAgICAgICAgICAg
ICAgICBpID0gc2F2ZUNhbGxJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3Rv
cmVDYWxscyA9IDA7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHshQXJyYXkuPHN0cmluZz59IGZ1bmN0aW9uTmFtZXMKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
ZnJvbUluZGV4Ci0gICAgICogQHBhcmFtIHtudW1iZXI9fSB0b0luZGV4Ci0gICAgICogQHJldHVy
biB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBfcmVtb3ZlQ2FsbHNGcm9tTG9nOiBmdW5jdGlvbihm
dW5jdGlvbk5hbWVzLCBmcm9tSW5kZXgsIHRvSW5kZXgpCi0gICAgewotICAgICAgICB2YXIgb2xk
TGVuZ3RoID0gdGhpcy5fY2FsbHMubGVuZ3RoOwotICAgICAgICBpZiAodHlwZW9mIHRvSW5kZXgg
IT09ICJudW1iZXIiKQotICAgICAgICAgICAgdG9JbmRleCA9IG9sZExlbmd0aDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdG9JbmRleCA9IE1hdGgubWluKHRvSW5kZXgsIG9sZExlbmd0aCk7
Ci0gICAgICAgIHZhciBuZXdJbmRleCA9IE1hdGgubWluKGZyb21JbmRleCwgb2xkTGVuZ3RoKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IG5ld0luZGV4OyBpIDwgdG9JbmRleDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgY2FsbCA9IHRoaXMuX2NhbGxzW2ldOwotICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uTmFtZXMuaW5kZXhPZihjYWxsLmZ1bmN0aW9uTmFtZSgpKSA9PT0gLTEpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fY2FsbHNbbmV3SW5kZXgrK10gPSBjYWxsOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChuZXdJbmRleCA+PSB0b0luZGV4KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB0aGlzLl9jYWxscy5zcGxpY2UobmV3SW5kZXgsIHRvSW5kZXggLSBuZXdJbmRleCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHsh
T2JqZWN0LjxzdHJpbmcsIHN0cmluZz59Ci0gICAgICovCi0gICAgX2N1cnJlbnRBdHRyaWJ1dGVz
U3RhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjdHggPSB0aGlzLndyYXBwZWRP
YmplY3QoKTsKLSAgICAgICAgdmFyIHN0YXRlID0ge307Ci0gICAgICAgIHN0YXRlLmF0dHJpYnV0
ZXMgPSB7fTsKLSAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUmVzb3VyY2UuQXR0cmli
dXRlUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgewotICAgICAgICAgICAg
c3RhdGUuYXR0cmlidXRlc1thdHRyaWJ1dGVdID0gY3R4W2F0dHJpYnV0ZV07Ci0gICAgICAgIH0p
OwotICAgICAgICBpZiAoY3R4LmdldExpbmVEYXNoKQotICAgICAgICAgICAgc3RhdGUubGluZURh
c2ggPSBjdHguZ2V0TGluZURhc2goKTsKLSAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBzdHJpbmc+PX0gc3RhdGUK
LSAgICAgKi8KLSAgICBfYXBwbHlBdHRyaWJ1dGVzU3RhdGU6IGZ1bmN0aW9uKHN0YXRlKQotICAg
IHsKLSAgICAgICAgaWYgKCFzdGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFy
IGN0eCA9IHRoaXMud3JhcHBlZE9iamVjdCgpOwotICAgICAgICBpZiAoc3RhdGUuYXR0cmlidXRl
cykgewotICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUuYXR0cmlidXRlcykuZm9yRWFjaChm
dW5jdGlvbihhdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgICAgICBjdHhbYXR0cmlidXRlXSA9IHN0
YXRlLmF0dHJpYnV0ZXNbYXR0cmlidXRlXTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChjdHguc2V0TGluZURhc2gpCi0gICAgICAgICAgICBjdHguc2V0TGluZURhc2go
c3RhdGUubGluZURhc2gpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAg
ICAgKiBAcmV0dXJuIHshT2JqZWN0LjxzdHJpbmcsIEZ1bmN0aW9uPn0KLSAgICAgKi8KLSAgICBf
Y3VzdG9tV3JhcEZ1bmN0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHdyYXBG
dW5jdGlvbnMgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNvdXJjZS5fd3JhcEZ1bmN0aW9u
czsKLSAgICAgICAgaWYgKCF3cmFwRnVuY3Rpb25zKSB7Ci0gICAgICAgICAgICB3cmFwRnVuY3Rp
b25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLQotICAgICAgICAgICAgd3JhcEZ1bmN0aW9uc1si
Y3JlYXRlTGluZWFyR3JhZGllbnQiXSA9IFJlc291cmNlLldyYXBGdW5jdGlvbi5yZXNvdXJjZUZh
Y3RvcnlNZXRob2QoTG9nRXZlcnl0aGluZ1Jlc291cmNlLCAiQ2FudmFzR3JhZGllbnQiKTsKLSAg
ICAgICAgICAgIHdyYXBGdW5jdGlvbnNbImNyZWF0ZVJhZGlhbEdyYWRpZW50Il0gPSBSZXNvdXJj
ZS5XcmFwRnVuY3Rpb24ucmVzb3VyY2VGYWN0b3J5TWV0aG9kKExvZ0V2ZXJ5dGhpbmdSZXNvdXJj
ZSwgIkNhbnZhc0dyYWRpZW50Iik7Ci0gICAgICAgICAgICB3cmFwRnVuY3Rpb25zWyJjcmVhdGVQ
YXR0ZXJuIl0gPSBSZXNvdXJjZS5XcmFwRnVuY3Rpb24ucmVzb3VyY2VGYWN0b3J5TWV0aG9kKExv
Z0V2ZXJ5dGhpbmdSZXNvdXJjZSwgIkNhbnZhc1BhdHRlcm4iKTsKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZQotICAgICAgICAgICAg
ICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOlJlc291cmNlLCAhQ2FsbCk9fSBmdW5jCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0aW9u
KG1ldGhvZE5hbWUsIGZ1bmMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1
bmMpIHsKLSAgICAgICAgICAgICAgICAgICAgLyoqIEB0aGlzIFJlc291cmNlLldyYXBGdW5jdGlv
biAqLwotICAgICAgICAgICAgICAgICAgICB3cmFwRnVuY3Rpb25zW21ldGhvZE5hbWVdID0gZnVu
Y3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dW5jLmNhbGwodGhpcy5fcmVzb3VyY2UsIHRoaXMuY2FsbCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qKiBA
dGhpcyBSZXNvdXJjZS5XcmFwRnVuY3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgd3JhcEZ1
bmN0aW9uc1ttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2UucHVzaENhbGwodGhpcy5jYWxs
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbWV0aG9kTmFtZTsgbWV0aG9kTmFt
ZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFJlc291cmNlLlRyYW5zZm9ybWF0aW9uTWF0cml4
TWV0aG9kc1tpXTsgKytpKQotICAgICAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5nV3JhcEZ1bmN0
aW9uKG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUgPT09ICJzZXRUcmFuc2Zvcm0iID8gdGhpcy5wdXNo
Q2FsbF9zZXRUcmFuc2Zvcm0gOiB1bmRlZmluZWQpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIG1ldGhvZE5hbWU7IG1ldGhvZE5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNv
dXJjZS5QYXRoTWV0aG9kc1tpXTsgKytpKQotICAgICAgICAgICAgICAgIHN0YXRlTW9kaWZ5aW5n
V3JhcEZ1bmN0aW9uKG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUgPT09ICJiZWdpblBhdGgiID8gdGhp
cy5wdXNoQ2FsbF9iZWdpblBhdGggOiB1bmRlZmluZWQpOwotCi0gICAgICAgICAgICBzdGF0ZU1v
ZGlmeWluZ1dyYXBGdW5jdGlvbigic2F2ZSIsIHRoaXMucHVzaENhbGxfc2F2ZSk7Ci0gICAgICAg
ICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigicmVzdG9yZSIsIHRoaXMucHVzaENhbGxf
cmVzdG9yZSk7Ci0gICAgICAgICAgICBzdGF0ZU1vZGlmeWluZ1dyYXBGdW5jdGlvbigiY2xpcCIp
OwotCi0gICAgICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNvdXJjZS5fd3JhcEZ1
bmN0aW9ucyA9IHdyYXBGdW5jdGlvbnM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdyYXBG
dW5jdGlvbnM7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogQ29udGV4dFJlc291cmNlLnByb3Rv
dHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHshT2JqZWN0LjxzdHJp
bmcsIGJvb2xlYW4+PX0gZHJhd2luZ01ldGhvZE5hbWVzCi0gKi8KLWZ1bmN0aW9uIENhbGxGb3Jt
YXR0ZXIoZHJhd2luZ01ldGhvZE5hbWVzKQotewotICAgIHRoaXMuX2RyYXdpbmdNZXRob2ROYW1l
cyA9IGRyYXdpbmdNZXRob2ROYW1lcyB8fCBPYmplY3QuY3JlYXRlKG51bGwpOwotfQotCi1DYWxs
Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFSZXBsYXlh
YmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwKLSAgICAgKiBAcmV0dXJuIHshT2JqZWN0fQotICAgICAq
LwotICAgIGZvcm1hdENhbGw6IGZ1bmN0aW9uKHJlcGxheWFibGVDYWxsKQotICAgIHsKLSAgICAg
ICAgdmFyIHJlc3VsdCA9IHt9OwotICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gcmVwbGF5YWJs
ZUNhbGwuZnVuY3Rpb25OYW1lKCk7Ci0gICAgICAgIGlmIChmdW5jdGlvbk5hbWUpIHsKLSAgICAg
ICAgICAgIHJlc3VsdC5mdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXJndW1lbnRzID0gcmVwbGF5YWJsZUNhbGwuYXJncygpLm1hcCh0aGlzLmZvcm1hdFZh
bHVlLmJpbmQodGhpcykpOwotICAgICAgICAgICAgaWYgKHJlcGxheWFibGVDYWxsLnJlc3VsdCgp
ICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdCA9IHRoaXMuZm9y
bWF0VmFsdWUocmVwbGF5YWJsZUNhbGwucmVzdWx0KCkpOwotICAgICAgICAgICAgaWYgKHRoaXMu
X2RyYXdpbmdNZXRob2ROYW1lc1tmdW5jdGlvbk5hbWVdKQotICAgICAgICAgICAgICAgIHJlc3Vs
dC5pc0RyYXdpbmdDYWxsID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJl
c3VsdC5wcm9wZXJ0eSA9IHJlcGxheWFibGVDYWxsLmFyZ3MoKVswXTsKLSAgICAgICAgICAgIHJl
c3VsdC52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocmVwbGF5YWJsZUNhbGwuYXJncygpWzFdKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlCi0gICAgICogQHJldHVybiB7IU9iamVjdH0KLSAgICAgKi8K
LSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUgaW5zdGFuY2VvZiBSZXBsYXlhYmxlUmVzb3VyY2UpCi0gICAgICAgICAgICB2YXIgZGVzY3Jp
cHRpb24gPSB2YWx1ZS5kZXNjcmlwdGlvbigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2
YXIgZGVzY3JpcHRpb24gPSAiIiArIHZhbHVlOwotICAgICAgICByZXR1cm4geyBkZXNjcmlwdGlv
bjogZGVzY3JpcHRpb24gfTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7
IU9iamVjdC48c3RyaW5nLCAhQ2FsbEZvcm1hdHRlcj59Ci0gKi8KLUNhbGxGb3JtYXR0ZXIuX2Zv
cm1hdHRlcnMgPSB7fTsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VOYW1lCi0g
KiBAcGFyYW0geyFDYWxsRm9ybWF0dGVyfSBjYWxsRm9ybWF0dGVyCi0gKi8KLUNhbGxGb3JtYXR0
ZXIucmVnaXN0ZXIgPSBmdW5jdGlvbihyZXNvdXJjZU5hbWUsIGNhbGxGb3JtYXR0ZXIpCi17Ci0g
ICAgQ2FsbEZvcm1hdHRlci5fZm9ybWF0dGVyc1tyZXNvdXJjZU5hbWVdID0gY2FsbEZvcm1hdHRl
cjsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFSZXBsYXlhYmxlQ2FsbH0gcmVwbGF5YWJsZUNhbGwK
LSAqIEByZXR1cm4geyFPYmplY3R9Ci0gKi8KLUNhbGxGb3JtYXR0ZXIuZm9ybWF0Q2FsbCA9IGZ1
bmN0aW9uKHJlcGxheWFibGVDYWxsKQotewotICAgIHZhciByZXNvdXJjZSA9IHJlcGxheWFibGVD
YWxsLnJlcGxheWFibGVSZXNvdXJjZSgpOwotICAgIHZhciBmb3JtYXR0ZXIgPSBDYWxsRm9ybWF0
dGVyLl9mb3JtYXR0ZXJzW3Jlc291cmNlLm5hbWUoKV07Ci0gICAgaWYgKCFmb3JtYXR0ZXIpIHsK
LSAgICAgICAgdmFyIGNvbnRleHRSZXNvdXJjZSA9IHJlc291cmNlLnJlcGxheWFibGVDb250ZXh0
UmVzb3VyY2UoKTsKLSAgICAgICAgZm9ybWF0dGVyID0gQ2FsbEZvcm1hdHRlci5fZm9ybWF0dGVy
c1tjb250ZXh0UmVzb3VyY2UubmFtZSgpXSB8fCBuZXcgQ2FsbEZvcm1hdHRlcigpOwotICAgIH0K
LSAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdENhbGwocmVwbGF5YWJsZUNhbGwpOwotfQotCi1D
YWxsRm9ybWF0dGVyLnJlZ2lzdGVyKCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCBuZXcgQ2Fs
bEZvcm1hdHRlcihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNvdXJjZS5EcmF3aW5nTWV0aG9k
cykpOwotQ2FsbEZvcm1hdHRlci5yZWdpc3RlcigiV2ViR0xSZW5kZXJpbmdDb250ZXh0IiwgbmV3
IENhbGxGb3JtYXR0ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UuRHJhd2luZ01ldGhv
ZHMpKTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gVHJhY2VMb2coKQot
ewotICAgIC8qKiBAdHlwZSB7IUFycmF5LjxSZXBsYXlhYmxlQ2FsbD59ICovCi0gICAgdGhpcy5f
cmVwbGF5YWJsZUNhbGxzID0gW107Ci0gICAgLyoqIEB0eXBlIHshQ2FjaGV9ICovCi0gICAgdGhp
cy5fcmVwbGF5YWJsZXNDYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgIC8qKiBAdHlwZSB7IU9iamVj
dC48bnVtYmVyLCBib29sZWFuPn0gKi8KLSAgICB0aGlzLl9mcmFtZUVuZENhbGxJbmRleGVzID0g
e307Ci19Ci0KLVRyYWNlTG9nLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtudW1iZXJ9Ci0gICAgICovCi0gICAgc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3JlcGxheWFibGVDYWxscy5sZW5ndGg7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEByZXR1cm4geyFBcnJheS48UmVwbGF5YWJsZUNhbGw+fQotICAgICAqLwotICAgIHJl
cGxheWFibGVDYWxsczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
cGxheWFibGVDYWxsczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGlkCi0gICAgICogQHJldHVybiB7UmVwbGF5YWJsZVJlc291cmNlfQotICAgICAqLwotICAgIHJl
cGxheWFibGVSZXNvdXJjZTogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICByZXR1cm4gLyoq
IEB0eXBlIHtSZXBsYXlhYmxlUmVzb3VyY2V9ICovICh0aGlzLl9yZXBsYXlhYmxlc0NhY2hlLmdl
dChpZCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFSZXNvdXJjZX0gcmVz
b3VyY2UKLSAgICAgKi8KLSAgICBjYXB0dXJlUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQot
ICAgIHsKLSAgICAgICAgcmVzb3VyY2UudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2Fj
aGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFDYWxsfSBjYWxsCi0gICAg
ICovCi0gICAgYWRkQ2FsbDogZnVuY3Rpb24oY2FsbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jl
cGxheWFibGVDYWxscy5wdXNoKGNhbGwudG9SZXBsYXlhYmxlKHRoaXMuX3JlcGxheWFibGVzQ2Fj
aGUpKTsKLSAgICB9LAotCi0gICAgYWRkRnJhbWVFbmRNYXJrOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9yZXBsYXlhYmxlQ2FsbHMubGVuZ3RoIC0gMTsKLSAg
ICAgICAgaWYgKGluZGV4ID49IDApCi0gICAgICAgICAgICB0aGlzLl9mcmFtZUVuZENhbGxJbmRl
eGVzW2luZGV4XSA9IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBpbmRleAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgaXNGcmFt
ZUVuZENhbGxBdDogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gISF0aGlz
Ll9mcmFtZUVuZENhbGxJbmRleGVzW2luZGV4XTsKLSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0
cnVjdG9yCi0gKiBAcGFyYW0geyFUcmFjZUxvZ30gdHJhY2VMb2cKLSAqLwotZnVuY3Rpb24gVHJh
Y2VMb2dQbGF5ZXIodHJhY2VMb2cpCi17Ci0gICAgLyoqIEB0eXBlIHshVHJhY2VMb2d9ICovCi0g
ICAgdGhpcy5fdHJhY2VMb2cgPSB0cmFjZUxvZzsKLSAgICAvKiogQHR5cGUge251bWJlcn0gKi8K
LSAgICB0aGlzLl9uZXh0UmVwbGF5U3RlcCA9IDA7Ci0gICAgLyoqIEB0eXBlIHshQ2FjaGV9ICov
Ci0gICAgdGhpcy5fcmVwbGF5V29ybGRDYWNoZSA9IG5ldyBDYWNoZSgpOwotfQotCi1UcmFjZUxv
Z1BsYXllci5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7IVRyYWNlTG9n
fQotICAgICAqLwotICAgIHRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fdHJhY2VMb2c7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVt
YmVyfSBpZAotICAgICAqIEByZXR1cm4ge1Jlc291cmNlfQotICAgICAqLwotICAgIHJlcGxheVdv
cmxkUmVzb3VyY2U6IGZ1bmN0aW9uKGlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC8qKiBAdHlw
ZSB7UmVzb3VyY2V9ICovICh0aGlzLl9yZXBsYXlXb3JsZENhY2hlLmdldChpZCkpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9Ci0gICAgICovCi0gICAgbmV4dFJl
cGxheVN0ZXA6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9uZXh0UmVw
bGF5U3RlcDsKLSAgICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX25leHRSZXBsYXlTdGVwID0gMDsKLSAgICAgICAgdGhpcy5fcmVwbGF5V29ybGRDYWNo
ZS5yZXNldCgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtDYWxsfQotICAg
ICAqLwotICAgIHN0ZXA6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnN0
ZXBUbyh0aGlzLl9uZXh0UmVwbGF5U3RlcCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBzdGVwTnVtCi0gICAgICogQHJldHVybiB7Q2FsbH0KLSAgICAgKi8KLSAg
ICBzdGVwVG86IGZ1bmN0aW9uKHN0ZXBOdW0pCi0gICAgewotICAgICAgICBzdGVwTnVtID0gTWF0
aC5taW4oc3RlcE51bSwgdGhpcy5fdHJhY2VMb2cuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHN0ZXBOdW0gPj0gMCk7Ci0gICAgICAgIGlmICh0aGlzLl9uZXh0UmVwbGF5U3Rl
cCA+IHN0ZXBOdW0pCi0gICAgICAgICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZXBsYXkgYWxsIHRoZSBjYWNoZWQgcmVzb3VyY2VzIGZpcnN0IHRvIHdhcm0tdXAuCi0gICAg
ICAgIHZhciBsYXN0Q2FsbCA9IG51bGw7Ci0gICAgICAgIHZhciByZXBsYXlhYmxlQ2FsbHMgPSB0
aGlzLl90cmFjZUxvZy5yZXBsYXlhYmxlQ2FsbHMoKTsKLSAgICAgICAgd2hpbGUgKHRoaXMuX25l
eHRSZXBsYXlTdGVwIDw9IHN0ZXBOdW0pCi0gICAgICAgICAgICBsYXN0Q2FsbCA9IHJlcGxheWFi
bGVDYWxsc1t0aGlzLl9uZXh0UmVwbGF5U3RlcCsrXS5yZXBsYXkodGhpcy5fcmVwbGF5V29ybGRD
YWNoZSk7Ci0gICAgICAgIHJldHVybiBsYXN0Q2FsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHJldHVybiB7Q2FsbH0KLSAgICAgKi8KLSAgICByZXBsYXk6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnN0ZXBUbyh0aGlzLl90cmFjZUxvZy5zaXplKCkgLSAxKTsK
LSAgICB9Ci19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFJlc291cmNl
VHJhY2tpbmdNYW5hZ2VyKCkKLXsKLSAgICB0aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKLSAgICB0
aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAgIHRoaXMuX2xhc3RUcmFj
ZUxvZyA9IG51bGw7Ci19Ci0KLVJlc291cmNlVHJhY2tpbmdNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
LSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIGNhcHR1cmlu
ZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhcHR1cmluZzsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7VHJhY2VMb2d9Ci0gICAgICovCi0gICAg
bGFzdFRyYWNlTG9nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGFz
dFRyYWNlTG9nOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFSZXNvdXJjZX0g
cmVzb3VyY2UKLSAgICAgKi8KLSAgICByZWdpc3RlclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJj
ZSkKLSAgICB7Ci0gICAgICAgIHJlc291cmNlLnNldE1hbmFnZXIodGhpcyk7Ci0gICAgfSwKLQot
ICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X2NhcHR1cmluZykKLSAgICAgICAgICAgIHRoaXMuX2xhc3RUcmFjZUxvZyA9IG5ldyBUcmFjZUxv
ZygpOwotICAgICAgICB0aGlzLl9jYXB0dXJpbmcgPSB0cnVlOwotICAgICAgICB0aGlzLl9zdG9w
Q2FwdHVyaW5nT25GcmFtZUVuZCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1RyYWNlTG9nPX0gdHJhY2VMb2cKLSAgICAgKi8KLSAgICBzdG9wQ2FwdHVyaW5nOiBm
dW5jdGlvbih0cmFjZUxvZykKLSAgICB7Ci0gICAgICAgIGlmICh0cmFjZUxvZyAmJiB0aGlzLl9s
YXN0VHJhY2VMb2cgIT09IHRyYWNlTG9nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9jYXB0dXJpbmcgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJh
bWVFbmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHRoaXMuX2xhc3RUcmFjZUxvZykKLSAgICAgICAg
ICAgIHRoaXMuX2xhc3RUcmFjZUxvZy5hZGRGcmFtZUVuZE1hcmsoKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHshVHJhY2VMb2d9IHRyYWNlTG9nCi0gICAgICovCi0gICAgZHJv
cFRyYWNlTG9nOiBmdW5jdGlvbih0cmFjZUxvZykKLSAgICB7Ci0gICAgICAgIHRoaXMuc3RvcENh
cHR1cmluZyh0cmFjZUxvZyk7Ci0gICAgICAgIGlmICh0aGlzLl9sYXN0VHJhY2VMb2cgPT09IHRy
YWNlTG9nKQotICAgICAgICAgICAgdGhpcy5fbGFzdFRyYWNlTG9nID0gbnVsbDsKLSAgICB9LAot
Ci0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9sYXN0
VHJhY2VMb2cgPSBuZXcgVHJhY2VMb2coKTsKLSAgICAgICAgdGhpcy5fY2FwdHVyaW5nID0gdHJ1
ZTsKLSAgICAgICAgdGhpcy5fc3RvcENhcHR1cmluZ09uRnJhbWVFbmQgPSB0cnVlOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyFSZXNvdXJjZX0gcmVzb3VyY2UKLSAgICAgKiBA
cGFyYW0ge0FycmF5fEFyZ3VtZW50c30gYXJncwotICAgICAqLwotICAgIGNhcHR1cmVBcmd1bWVu
dHM6IGZ1bmN0aW9uKHJlc291cmNlLCBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9j
YXB0dXJpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2xhc3RUcmFjZUxv
Zy5jYXB0dXJlUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9
IGFyZ3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcmVzID0gUmVzb3Vy
Y2UuZm9yT2JqZWN0KGFyZ3NbaV0pOwotICAgICAgICAgICAgaWYgKHJlcykKLSAgICAgICAgICAg
ICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuY2FwdHVyZVJlc291cmNlKHJlcyk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHshQ2FsbH0gY2FsbAotICAgICAqLwot
ICAgIGNhcHR1cmVDYWxsOiBmdW5jdGlvbihjYWxsKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll9jYXB0dXJpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2xhc3RUcmFj
ZUxvZy5hZGRDYWxsKGNhbGwpOwotICAgIH0sCi0KLSAgICBtYXJrRnJhbWVFbmQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbGFzdFRyYWNlTG9nKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl9sYXN0VHJhY2VMb2cuYWRkRnJhbWVFbmRNYXJrKCk7Ci0g
ICAgICAgIGlmICh0aGlzLl9zdG9wQ2FwdHVyaW5nT25GcmFtZUVuZCAmJiB0aGlzLl9sYXN0VHJh
Y2VMb2cuc2l6ZSgpKQotICAgICAgICAgICAgdGhpcy5zdG9wQ2FwdHVyaW5nKHRoaXMuX2xhc3RU
cmFjZUxvZyk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi12YXIgSW5q
ZWN0ZWRDYW52YXNNb2R1bGUgPSBmdW5jdGlvbigpCi17Ci0gICAgLyoqIEB0eXBlIHshUmVzb3Vy
Y2VUcmFja2luZ01hbmFnZXJ9ICovCi0gICAgdGhpcy5fbWFuYWdlciA9IG5ldyBSZXNvdXJjZVRy
YWNraW5nTWFuYWdlcigpOwotICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLwotICAgIHRoaXMuX2xh
c3RUcmFjZUxvZ0lkID0gMDsKLSAgICAvKiogQHR5cGUgeyFPYmplY3QuPHN0cmluZywgVHJhY2VM
b2c+fSAqLwotICAgIHRoaXMuX3RyYWNlTG9ncyA9IHt9OwotICAgIC8qKiBAdHlwZSB7IU9iamVj
dC48c3RyaW5nLCBUcmFjZUxvZ1BsYXllcj59ICovCi0gICAgdGhpcy5fdHJhY2VMb2dQbGF5ZXJz
ID0ge307Ci19Ci0KLUluamVjdGVkQ2FudmFzTW9kdWxlLnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsQ29udGV4dAotICAgICAq
IEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICB3cmFwV2ViR0xDb250ZXh0OiBmdW5jdGlv
bihnbENvbnRleHQpCi0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2UgPSBSZXNvdXJjZS5mb3JP
YmplY3QoZ2xDb250ZXh0KSB8fCBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0UmVzb3VyY2UoZ2xD
b250ZXh0KTsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJlc291cmNl
KTsKLSAgICAgICAgcmV0dXJuIHJlc291cmNlLnByb3h5T2JqZWN0KCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7IUNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY29udGV4dAot
ICAgICAqIEByZXR1cm4ge09iamVjdH0KLSAgICAgKi8KLSAgICB3cmFwQ2FudmFzMkRDb250ZXh0
OiBmdW5jdGlvbihjb250ZXh0KQotICAgIHsKLSAgICAgICAgdmFyIHJlc291cmNlID0gUmVzb3Vy
Y2UuZm9yT2JqZWN0KGNvbnRleHQpIHx8IG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRSZXNv
dXJjZShjb250ZXh0KTsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5yZWdpc3RlclJlc291cmNlKHJl
c291cmNlKTsKLSAgICAgICAgcmV0dXJuIHJlc291cmNlLnByb3h5T2JqZWN0KCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge0NhbnZhc0FnZW50LlRyYWNlTG9nSWR9Ci0gICAg
ICovCi0gICAgY2FwdHVyZUZyYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fY2FsbFN0YXJ0Q2FwdHVyaW5nRnVuY3Rpb24odGhpcy5fbWFuYWdlci5jYXB0dXJlRnJh
bWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtDYW52YXNBZ2VudC5UcmFj
ZUxvZ0lkfQotICAgICAqLwotICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fY2FsbFN0YXJ0Q2FwdHVyaW5nRnVuY3Rpb24odGhpcy5fbWFu
YWdlci5zdGFydENhcHR1cmluZyk7Ci0gICAgfSwKLQotICAgIG1hcmtGcmFtZUVuZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5tYXJrRnJhbWVFbmQoKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOlJlc291cmNlVHJhY2tp
bmdNYW5hZ2VyKX0gZnVuYwotICAgICAqIEByZXR1cm4ge0NhbnZhc0FnZW50LlRyYWNlTG9nSWR9
Ci0gICAgICovCi0gICAgX2NhbGxTdGFydENhcHR1cmluZ0Z1bmN0aW9uOiBmdW5jdGlvbihmdW5j
KQotICAgIHsKLSAgICAgICAgdmFyIG9sZFRyYWNlTG9nID0gdGhpcy5fbWFuYWdlci5sYXN0VHJh
Y2VMb2coKTsKLSAgICAgICAgZnVuYy5jYWxsKHRoaXMuX21hbmFnZXIpOwotICAgICAgICB2YXIg
dHJhY2VMb2cgPSB0aGlzLl9tYW5hZ2VyLmxhc3RUcmFjZUxvZygpOwotICAgICAgICBpZiAodHJh
Y2VMb2cgPT09IG9sZFRyYWNlTG9nKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlz
Ll90cmFjZUxvZ3MpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2VMb2dzW2lkXSA9
PT0gdHJhY2VMb2cpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB2YXIgaWQgPSB0aGlzLl9tYWtlVHJhY2VMb2dJZCgpOwot
ICAgICAgICB0aGlzLl90cmFjZUxvZ3NbaWRdID0gdHJhY2VMb2c7Ci0gICAgICAgIHJldHVybiBp
ZDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxv
Z0lkfSBpZAotICAgICAqLwotICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKGlkKQotICAgIHsK
LSAgICAgICAgdmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VMb2dzW2lkXTsKLSAgICAgICAgaWYg
KHRyYWNlTG9nKQotICAgICAgICAgICAgdGhpcy5fbWFuYWdlci5zdG9wQ2FwdHVyaW5nKHRyYWNl
TG9nKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFj
ZUxvZ0lkfSBpZAotICAgICAqLwotICAgIGRyb3BUcmFjZUxvZzogZnVuY3Rpb24oaWQpCi0gICAg
ewotICAgICAgICB2YXIgdHJhY2VMb2cgPSB0aGlzLl90cmFjZUxvZ3NbaWRdOwotICAgICAgICBp
ZiAodHJhY2VMb2cpCi0gICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLmRyb3BUcmFjZUxvZyh0cmFj
ZUxvZyk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl90cmFjZUxvZ3NbaWRdOwotICAgICAgICBkZWxl
dGUgdGhpcy5fdHJhY2VMb2dQbGF5ZXJzW2lkXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lkfSBpZAotICAgICAqIEBwYXJhbSB7bnVtYmVy
PX0gc3RhcnRPZmZzZXQKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heExlbmd0aAotICAgICAq
IEByZXR1cm4geyFDYW52YXNBZ2VudC5UcmFjZUxvZ3xzdHJpbmd9Ci0gICAgICovCi0gICAgdHJh
Y2VMb2c6IGZ1bmN0aW9uKGlkLCBzdGFydE9mZnNldCwgbWF4TGVuZ3RoKQotICAgIHsKLSAgICAg
ICAgdmFyIHRyYWNlTG9nID0gdGhpcy5fdHJhY2VMb2dzW2lkXTsKLSAgICAgICAgaWYgKCF0cmFj
ZUxvZykKLSAgICAgICAgICAgIHJldHVybiAiRXJyb3I6IFRyYWNlIGxvZyB3aXRoIHRoZSBnaXZl
biBJRCBub3QgZm91bmQuIjsKLQotICAgICAgICAvLyBFbnN1cmUgbGFzdCBjYWxsIGVuZHMgYSBm
cmFtZS4KLSAgICAgICAgdHJhY2VMb2cuYWRkRnJhbWVFbmRNYXJrKCk7Ci0KLSAgICAgICAgdmFy
IHJlcGxheWFibGVDYWxscyA9IHRyYWNlTG9nLnJlcGxheWFibGVDYWxscygpOwotICAgICAgICBp
ZiAodHlwZW9mIHN0YXJ0T2Zmc2V0ICE9PSAibnVtYmVyIikKLSAgICAgICAgICAgIHN0YXJ0T2Zm
c2V0ID0gMDsKLSAgICAgICAgaWYgKHR5cGVvZiBtYXhMZW5ndGggIT09ICJudW1iZXIiKQotICAg
ICAgICAgICAgbWF4TGVuZ3RoID0gcmVwbGF5YWJsZUNhbGxzLmxlbmd0aDsKLQotICAgICAgICB2
YXIgZnJvbUluZGV4ID0gTWF0aC5tYXgoMCwgc3RhcnRPZmZzZXQpOwotICAgICAgICB2YXIgdG9J
bmRleCA9IE1hdGgubWluKHJlcGxheWFibGVDYWxscy5sZW5ndGggLSAxLCBmcm9tSW5kZXggKyBt
YXhMZW5ndGggLSAxKTsKLQotICAgICAgICB2YXIgYWxpdmUgPSB0aGlzLl9tYW5hZ2VyLmNhcHR1
cmluZygpICYmIHRoaXMuX21hbmFnZXIubGFzdFRyYWNlTG9nKCkgPT09IHRyYWNlTG9nOwotICAg
ICAgICB2YXIgcmVzdWx0ID0gewotICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgLyoq
IEB0eXBlIHtBcnJheS48Q2FudmFzQWdlbnQuQ2FsbD59ICovCi0gICAgICAgICAgICBjYWxsczog
W10sCi0gICAgICAgICAgICBhbGl2ZTogYWxpdmUsCi0gICAgICAgICAgICBzdGFydE9mZnNldDog
ZnJvbUluZGV4LAotICAgICAgICAgICAgdG90YWxBdmFpbGFibGVDYWxsczogcmVwbGF5YWJsZUNh
bGxzLmxlbmd0aAotICAgICAgICB9OwotICAgICAgICBmb3IgKHZhciBpID0gZnJvbUluZGV4OyBp
IDw9IHRvSW5kZXg7ICsraSkgewotICAgICAgICAgICAgdmFyIGNhbGwgPSByZXBsYXlhYmxlQ2Fs
bHNbaV07Ci0gICAgICAgICAgICB2YXIgY29udGV4dFJlc291cmNlID0gY2FsbC5yZXBsYXlhYmxl
UmVzb3VyY2UoKS5yZXBsYXlhYmxlQ29udGV4dFJlc291cmNlKCk7Ci0gICAgICAgICAgICB2YXIg
c3RhY2tUcmFjZSA9IGNhbGwuc3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdmFyIGNhbGxGcmFt
ZSA9IHN0YWNrVHJhY2UgPyBzdGFja1RyYWNlLmNhbGxGcmFtZSgwKSB8fCB7fSA6IHt9OwotICAg
ICAgICAgICAgdmFyIGl0ZW0gPSBDYWxsRm9ybWF0dGVyLmZvcm1hdENhbGwoY2FsbCk7Ci0gICAg
ICAgICAgICBpdGVtLmNvbnRleHRJZCA9IHRoaXMuX21ha2VTdHJpbmdSZXNvdXJjZUlkKGNvbnRl
eHRSZXNvdXJjZS5pZCgpKTsKLSAgICAgICAgICAgIGl0ZW0uc291cmNlVVJMID0gY2FsbEZyYW1l
LnNvdXJjZVVSTDsKLSAgICAgICAgICAgIGl0ZW0ubGluZU51bWJlciA9IGNhbGxGcmFtZS5saW5l
TnVtYmVyOwotICAgICAgICAgICAgaXRlbS5jb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUuY29sdW1u
TnVtYmVyOwotICAgICAgICAgICAgaXRlbS5pc0ZyYW1lRW5kQ2FsbCA9IHRyYWNlTG9nLmlzRnJh
bWVFbmRDYWxsQXQoaSk7Ci0gICAgICAgICAgICByZXN1bHQuY2FsbHMucHVzaChpdGVtKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0geyp9IG9iagotICAgICAqIEByZXR1cm4geyFDYW52YXNBZ2VudC5DYWxsQXJndW1l
bnR9Ci0gICAgICovCi0gICAgX21ha2VDYWxsQXJndW1lbnQ6IGZ1bmN0aW9uKG9iaikKLSAgICB7
Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBSZXBsYXlhYmxlUmVzb3VyY2UpCi0gICAgICAg
ICAgICB2YXIgZGVzY3JpcHRpb24gPSBvYmouZGVzY3JpcHRpb24oKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gIiIgKyBvYmo7Ci0gICAgICAgIHJldHVybiB7
IGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge0NhbnZhc0FnZW50LlRyYWNlTG9nSWR9IHRyYWNlTG9nSWQKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gc3RlcE5vCi0gICAgICogQHJldHVybiB7IUNhbnZhc0FnZW50LlJlc291cmNlU3Rh
dGV8c3RyaW5nfQotICAgICAqLwotICAgIHJlcGxheVRyYWNlTG9nOiBmdW5jdGlvbih0cmFjZUxv
Z0lkLCBzdGVwTm8pCi0gICAgewotICAgICAgICB2YXIgdHJhY2VMb2cgPSB0aGlzLl90cmFjZUxv
Z3NbdHJhY2VMb2dJZF07Ci0gICAgICAgIGlmICghdHJhY2VMb2cpCi0gICAgICAgICAgICByZXR1
cm4gIkVycm9yOiBUcmFjZSBsb2cgd2l0aCB0aGUgZ2l2ZW4gSUQgbm90IGZvdW5kLiI7Ci0gICAg
ICAgIHRoaXMuX3RyYWNlTG9nUGxheWVyc1t0cmFjZUxvZ0lkXSA9IHRoaXMuX3RyYWNlTG9nUGxh
eWVyc1t0cmFjZUxvZ0lkXSB8fCBuZXcgVHJhY2VMb2dQbGF5ZXIodHJhY2VMb2cpOwotICAgICAg
ICB2YXIgbGFzdENhbGwgPSB0aGlzLl90cmFjZUxvZ1BsYXllcnNbdHJhY2VMb2dJZF0uc3RlcFRv
KHN0ZXBObyk7Ci0gICAgICAgIHZhciByZXNvdXJjZSA9IGxhc3RDYWxsLnJlc291cmNlKCk7Ci0g
ICAgICAgIHZhciBkYXRhVVJMID0gcmVzb3VyY2UudG9EYXRhVVJMKCk7Ci0gICAgICAgIGlmICgh
ZGF0YVVSTCkgewotICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZS5jb250ZXh0UmVzb3Vy
Y2UoKTsKLSAgICAgICAgICAgIGRhdGFVUkwgPSByZXNvdXJjZS50b0RhdGFVUkwoKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fbWFrZVJlc291cmNlU3RhdGUodGhpcy5fbWFrZVN0
cmluZ1Jlc291cmNlSWQocmVzb3VyY2UuaWQoKSksIHRyYWNlTG9nSWQsIGRhdGFVUkwpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0NhbnZhc0FnZW50LlJlc291cmNlSWR9IHN0
cmluZ1Jlc291cmNlSWQKLSAgICAgKiBAcmV0dXJuIHshQ2FudmFzQWdlbnQuUmVzb3VyY2VJbmZv
fHN0cmluZ30KLSAgICAgKi8KLSAgICByZXNvdXJjZUluZm86IGZ1bmN0aW9uKHN0cmluZ1Jlc291
cmNlSWQpCi0gICAgewotICAgICAgICB2YXIgcmVzb3VyY2VJZCA9IHRoaXMuX3BhcnNlU3RyaW5n
SWQoc3RyaW5nUmVzb3VyY2VJZCkucmVzb3VyY2VJZDsKLSAgICAgICAgaWYgKCFyZXNvdXJjZUlk
KQotICAgICAgICAgICAgcmV0dXJuICJFcnJvcjogV3JvbmcgcmVzb3VyY2UgSUQ6ICIgKyBzdHJp
bmdSZXNvdXJjZUlkOwotCi0gICAgICAgIHZhciByZXBsYXlhYmxlUmVzb3VyY2UgPSBudWxsOwot
ICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl90cmFjZUxvZ3MpIHsKLSAgICAgICAgICAgIHJl
cGxheWFibGVSZXNvdXJjZSA9IHRoaXMuX3RyYWNlTG9nc1tpZF0ucmVwbGF5YWJsZVJlc291cmNl
KHJlc291cmNlSWQpOwotICAgICAgICAgICAgaWYgKHJlcGxheWFibGVSZXNvdXJjZSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJlcGxheWFibGVSZXNv
dXJjZSkKLSAgICAgICAgICAgIHJldHVybiAiRXJyb3I6IFJlc291cmNlIHdpdGggdGhlIGdpdmVu
IElEIG5vdCBmb3VuZC4iOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9tYWtlUmVzb3VyY2VJbmZv
KHN0cmluZ1Jlc291cmNlSWQsIHJlcGxheWFibGVSZXNvdXJjZS5kZXNjcmlwdGlvbigpKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lkfSB0
cmFjZUxvZ0lkCi0gICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5SZXNvdXJjZUlkfSBzdHJpbmdS
ZXNvdXJjZUlkCi0gICAgICogQHJldHVybiB7IUNhbnZhc0FnZW50LlJlc291cmNlU3RhdGV8c3Ry
aW5nfQotICAgICAqLwotICAgIHJlc291cmNlU3RhdGU6IGZ1bmN0aW9uKHRyYWNlTG9nSWQsIHN0
cmluZ1Jlc291cmNlSWQpCi0gICAgewotICAgICAgICB2YXIgdHJhY2VMb2cgPSB0aGlzLl90cmFj
ZUxvZ3NbdHJhY2VMb2dJZF07Ci0gICAgICAgIGlmICghdHJhY2VMb2cpCi0gICAgICAgICAgICBy
ZXR1cm4gIkVycm9yOiBUcmFjZSBsb2cgd2l0aCB0aGUgZ2l2ZW4gSUQgbm90IGZvdW5kLiI7Ci0K
LSAgICAgICAgdmFyIHRyYWNlTG9nUGxheWVyID0gdGhpcy5fdHJhY2VMb2dQbGF5ZXJzW3RyYWNl
TG9nSWRdOwotICAgICAgICBpZiAoIXRyYWNlTG9nUGxheWVyKQotICAgICAgICAgICAgcmV0dXJu
ICJFcnJvcjogVHJhY2UgbG9nIHJlcGxheSBoYXMgbm90IHN0YXJ0ZWQgeWV0LiI7Ci0KLSAgICAg
ICAgdmFyIHBhcnNlZFN0cmluZ0lkMSA9IHRoaXMuX3BhcnNlU3RyaW5nSWQodHJhY2VMb2dJZCk7
Ci0gICAgICAgIHZhciBwYXJzZWRTdHJpbmdJZDIgPSB0aGlzLl9wYXJzZVN0cmluZ0lkKHN0cmlu
Z1Jlc291cmNlSWQpOwotICAgICAgICBpZiAocGFyc2VkU3RyaW5nSWQxLmluamVjdGVkU2NyaXB0
SWQgIT09IHBhcnNlZFN0cmluZ0lkMi5pbmplY3RlZFNjcmlwdElkKQotICAgICAgICAgICAgcmV0
dXJuICJFcnJvcjogQm90aCBJRHMgbXVzdCBwb2ludCB0byB0aGUgc2FtZSBpbmplY3RlZCBzY3Jp
cHQuIjsKLQotICAgICAgICB2YXIgcmVzb3VyY2VJZCA9IHBhcnNlZFN0cmluZ0lkMi5yZXNvdXJj
ZUlkOwotICAgICAgICBpZiAoIXJlc291cmNlSWQpCi0gICAgICAgICAgICByZXR1cm4gIkVycm9y
OiBXcm9uZyByZXNvdXJjZSBJRDogIiArIHN0cmluZ1Jlc291cmNlSWQ7Ci0KLSAgICAgICAgdmFy
IHJlc291cmNlID0gdHJhY2VMb2dQbGF5ZXIucmVwbGF5V29ybGRSZXNvdXJjZShyZXNvdXJjZUlk
KTsKLSAgICAgICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiAiRXJyb3I6IFJl
c291cmNlIHdpdGggdGhlIGdpdmVuIElEIGhhcyBub3QgYmVlbiByZXBsYXllZCB5ZXQuIjsKLQot
ICAgICAgICByZXR1cm4gdGhpcy5fbWFrZVJlc291cmNlU3RhdGUoc3RyaW5nUmVzb3VyY2VJZCwg
dHJhY2VMb2dJZCwgcmVzb3VyY2UudG9EYXRhVVJMKCkpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcmV0dXJuIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lkfQotICAgICAqLwotICAgIF9tYWtl
VHJhY2VMb2dJZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJ7XCJpbmplY3Rl
ZFNjcmlwdElkXCI6IiArIGluamVjdGVkU2NyaXB0SWQgKyAiLFwidHJhY2VMb2dJZFwiOiIgKyAo
Kyt0aGlzLl9sYXN0VHJhY2VMb2dJZCkgKyAifSI7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSByZXNvdXJjZUlkCi0gICAgICogQHJldHVybiB7Q2FudmFzQWdlbnQu
UmVzb3VyY2VJZH0KLSAgICAgKi8KLSAgICBfbWFrZVN0cmluZ1Jlc291cmNlSWQ6IGZ1bmN0aW9u
KHJlc291cmNlSWQpCi0gICAgewotICAgICAgICByZXR1cm4gIntcImluamVjdGVkU2NyaXB0SWRc
IjoiICsgaW5qZWN0ZWRTY3JpcHRJZCArICIsXCJyZXNvdXJjZUlkXCI6IiArIHJlc291cmNlSWQg
KyAifSI7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2FudmFzQWdlbnQuUmVz
b3VyY2VJZH0gc3RyaW5nUmVzb3VyY2VJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlw
dGlvbgotICAgICAqIEByZXR1cm4geyFDYW52YXNBZ2VudC5SZXNvdXJjZUluZm99Ci0gICAgICov
Ci0gICAgX21ha2VSZXNvdXJjZUluZm86IGZ1bmN0aW9uKHN0cmluZ1Jlc291cmNlSWQsIGRlc2Ny
aXB0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIGlkOiBzdHJpbmdS
ZXNvdXJjZUlkLAotICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uCi0gICAgICAg
IH07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Q2FudmFzQWdlbnQuUmVzb3Vy
Y2VJZH0gc3RyaW5nUmVzb3VyY2VJZAotICAgICAqIEBwYXJhbSB7Q2FudmFzQWdlbnQuVHJhY2VM
b2dJZH0gdHJhY2VMb2dJZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbWFnZVVSTAotICAgICAq
IEByZXR1cm4geyFDYW52YXNBZ2VudC5SZXNvdXJjZVN0YXRlfQotICAgICAqLwotICAgIF9tYWtl
UmVzb3VyY2VTdGF0ZTogZnVuY3Rpb24oc3RyaW5nUmVzb3VyY2VJZCwgdHJhY2VMb2dJZCwgaW1h
Z2VVUkwpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgaWQ6IHN0cmluZ1Jl
c291cmNlSWQsCi0gICAgICAgICAgICB0cmFjZUxvZ0lkOiB0cmFjZUxvZ0lkLAotICAgICAgICAg
ICAgaW1hZ2VVUkw6IGltYWdlVVJMCi0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdJZAotICAgICAqIEByZXR1cm4ge3tpbmplY3RlZFNj
cmlwdElkOiBudW1iZXIsIHRyYWNlTG9nSWQ6ID9udW1iZXIsIHJlc291cmNlSWQ6ID9udW1iZXJ9
fQotICAgICAqLwotICAgIF9wYXJzZVN0cmluZ0lkOiBmdW5jdGlvbihzdHJpbmdJZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgc3RyaW5n
SWQgKyAiKSIpOwotICAgIH0KLX0KLQotdmFyIGluamVjdGVkQ2FudmFzTW9kdWxlID0gbmV3IElu
amVjdGVkQ2FudmFzTW9kdWxlKCk7Ci1yZXR1cm4gaW5qZWN0ZWRDYW52YXNNb2R1bGU7Ci0KLX0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpz
b24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMjNhM2I3NzQzOTU3MjA3ZTIxNTMwM2I0Yjc5OTMz
YjBmZGI3MzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTczICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkNhbnZhcyIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVzb3VyY2VJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSByZXNvdXJjZSBpZGVudGlmaWVyLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlJlc291cmNlSW5mbyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJpZCIsICIkcmVmIjogIlJlc291cmNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkZXNjcmlwdGlvbiIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVzb3VyY2VTdGF0ZSIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIlJlc291cmNlSWQiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmFjZUxvZ0lkIiwgIiRyZWYiOiAiVHJhY2VMb2dJ
ZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltYWdlVVJMIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNjcmVlbnNob3QgaW1hZ2Ug
ZGF0YSBVUkwuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJDYWxsQXJndW1lbnQiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGVzY3JpcHRpb24iLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNhbGwiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29udGV4dElkIiwgIiRyZWYiOiAiUmVzb3VyY2VJZCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImZ1bmN0aW9uTmFtZSIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFyZ3VtZW50
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJDYWxsQXJndW1lbnQiIH0s
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIs
ICIkcmVmIjogIkNhbGxBcmd1bWVudCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImlzRHJhd2luZ0NhbGwiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNGcmFtZUVuZENhbGwi
LCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJvcGVydHkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICIkcmVmIjogIkNhbGxBcmd1
bWVudCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNv
dXJjZVVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImxpbmVOdW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTnVtYmVyIiwg
InR5cGUiOiAiaW50ZWdlciIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHJhY2VMb2dJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSB0cmFjZSBsb2cgaWRlbnRpZmllci4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJUcmFjZUxvZyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAot
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
ZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
YWxscyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJDYWxsIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGFydE9mZnNldCIsICJ0eXBlIjogImludGVnZXIi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbGl2ZSIsICJ0eXBlIjogImJvb2xlYW4i
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0b3RhbEF2YWlsYWJsZUNhbGxzIiwgInR5
cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGVzIENhbnZhcyBpbnNwZWN0aW9uLiIKLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlzYWJsZSIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgQ2FudmFzIGluc3BlY3Rpb24uIgotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkcm9wVHJhY2VMb2ciLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
cmFjZUxvZ0lkIiwgIiRyZWYiOiAiVHJhY2VMb2dJZCIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJoYXNVbmluc3RydW1lbnRlZENh
bnZhc2VzIiwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmVzdWx0IiwgInR5cGUiOiAiYm9vbGVhbiIgfQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGVja3MgaWYgdGhlcmUgaXMgYW55IHVuaW5zdHJ1bWVu
dGVkIGNhbnZhcyBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuIgotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJjYXB0dXJlRnJhbWUiLAotICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZUlkIiwgIiRyZWYiOiAi
TmV0d29yay5GcmFtZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIklkZW50
aWZpZXIgb2YgdGhlIGZyYW1lIGNvbnRhaW5pbmcgZG9jdW1lbnQgd2hvc2UgY2FudmFzZXMgYXJl
IHRvIGJlIGNhcHR1cmVkLiBJZiBvbWl0dGVkLCBtYWluIGZyYW1lIGlzIGFzc3VtZWQuIiB9Ci0g
ICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0cmFjZUxvZ0lkIiwgIiRyZWYiOiAiVHJhY2VMb2dJZCIsICJkZXNjcmlwdGlv
biI6ICJJZGVudGlmaWVyIG9mIHRoZSB0cmFjZSBsb2cgY29udGFpbmluZyBjYXB0dXJlZCBjYW52
YXMgY2FsbHMuIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlN0YXJ0cyAob3IgY29udGludWVzKSBhIGNhbnZhcyBmcmFtZSBjYXB0dXJpbmcgd2hpY2ggd2ls
bCBiZSBzdG9wcGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG5leHQgZnJhbWUgaXMgcHJlcGFy
ZWQuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJzdGFydENh
cHR1cmluZyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0aGUgZnJhbWUgY29udGFpbmlu
ZyBkb2N1bWVudCB3aG9zZSBjYW52YXNlcyBhcmUgdG8gYmUgY2FwdHVyZWQuIElmIG9taXR0ZWQs
IG1haW4gZnJhbWUgaXMgYXNzdW1lZC4iIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAi
cmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNlTG9nSWQiLCAiJHJl
ZiI6ICJUcmFjZUxvZ0lkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIHRyYWNl
IGxvZyBjb250YWluaW5nIGNhcHR1cmVkIGNhbnZhcyBjYWxscy4iIH0KLSAgICAgICAgICAgIF0s
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RhcnRzIChvciBjb250aW51ZXMpIGNvbnNl
Y3V0aXZlIGNhbnZhcyBmcmFtZXMgY2FwdHVyaW5nLiBUaGUgY2FwdHVyaW5nIGlzIHN0b3BwZWQg
YnkgdGhlIGNvcnJlc3BvbmRpbmcgc3RvcENhcHR1cmluZyBjb21tYW5kLiIKLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAic3RvcENhcHR1cmluZyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNlTG9n
SWQiLCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImdldFRyYWNlTG9nIiwKLSAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIs
ICIkcmVmIjogIlRyYWNlTG9nSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGFy
dE9mZnNldCIsICJ0eXBlIjogImludGVnZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtYXhMZW5ndGgiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmFjZUxvZyIsICIkcmVmIjogIlRyYWNlTG9nIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogInJlcGxheVRyYWNlTG9nIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGVwTm8iLCAidHlwZSI6ICJpbnRlZ2VyIiB9
Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJyZXNvdXJjZVN0YXRlIiwgIiRyZWYiOiAiUmVzb3VyY2VTdGF0ZSIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJnZXRSZXNvdXJjZUluZm8iLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZUlkIiwgIiRyZWYiOiAiUmVzb3VyY2VJZCIgfQot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzb3VyY2VJbmZvIiwgIiRyZWYiOiAiUmVzb3VyY2VJbmZvIiB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImdl
dFJlc291cmNlU3RhdGUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0cmFjZUxvZ0lkIiwgIiRyZWYiOiAiVHJhY2VMb2dJZCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlSWQiLCAiJHJlZiI6ICJSZXNvdXJjZUlk
IiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZVN0YXRlIiwgIiRyZWYiOiAiUmVzb3VyY2VTdGF0ZSIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb250ZXh0Q3JlYXRlZCIsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1lSWQiLCAi
JHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0
aGUgZnJhbWUgY29udGFpbmluZyBhIGNhbnZhcyB3aXRoIGEgY29udGV4dC4iIH0KLSAgICAgICAg
ICAgIF0sCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBhIGNhbnZhcyBj
b250ZXh0IGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIGdpdmVuIGZyYW1lLiBUaGUgY29udGV4dCBt
YXkgbm90IGJlIGluc3RydW1lbnRlZCAoc2VlIGhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMgY29t
bWFuZCkuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJ0cmFj
ZUxvZ3NSZW1vdmVkIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICIkcmVmIjogIk5ldHdvcmsuRnJhbWVJZCIsICJvcHRp
b25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiBnaXZlbiwgdHJhY2UgbG9ncyBmcm9tIHRo
ZSBnaXZlbiBmcmFtZSB3ZXJlIHJlbW92ZWQuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiLCAib3B0aW9uYWwiOiB0cnVlLCAi
ZGVzY3JpcHRpb24iOiAiSWYgZ2l2ZW4sIHRyYWNlIGxvZyB3aXRoIHRoZSBnaXZlbiBJRCB3YXMg
cmVtb3ZlZC4iIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RmlyZWQgd2hlbiBhIHNldCBvZiB0cmFjZSBsb2dzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBiYWNr
ZW5kLiBJZiBubyBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgYWxsIHRyYWNlIGxvZ3Mgd2VyZSByZW1v
dmVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0xlZ2FjeS83LjAvSW5zcGVjdG9yV2ViQmFja2Vu
ZENvbW1hbmRzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9j
b2wvTGVnYWN5LzcuMC9JbnNwZWN0b3JXZWJCYWNrZW5kQ29tbWFuZHMuanMKaW5kZXggMzc0NmVm
YWJlNDhkMjdhYWE1M2I4NjhiMTg4NWVmNjdjMjk5M2MzNS4uYjk3YjViMGM3YTk4YWQwYzNmODNm
M2Q4ZTYzMTBiOTFjODc1MjFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvUHJvdG9jb2wvTGVnYWN5LzcuMC9JbnNwZWN0b3JXZWJCYWNrZW5kQ29tbWFu
ZHMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wv
TGVnYWN5LzcuMC9JbnNwZWN0b3JXZWJCYWNrZW5kQ29tbWFuZHMuanMKQEAgLTMzNiwyMiArMzM2
LDYgQEAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIldvcmtlci5jb25uZWN0VG9X
b3JrZXIiLCBbeyJuYW1lIjogIndvcmtlcklkIiwKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJXb3JrZXIuZGlzY29ubmVjdEZyb21Xb3JrZXIiLCBbeyJuYW1lIjogIndvcmtlcklk
IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgW10pOwogSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIldvcmtlci5zZXRBdXRvY29ubmVjdFRvV29ya2VycyIs
IFt7Im5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2V9
XSwgW10pOwogCi0vLyBDYW52YXMuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ2FudmFzRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIkNhbnZhcyIpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50KCJDYW52YXMuY29udGV4dENyZWF0ZWQiLCBbImZyYW1lSWQiXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIkNhbnZhcy50cmFjZUxvZ3NSZW1vdmVkIiwgWyJmcmFtZUlkIiwg
InRyYWNlTG9nSWQiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ2FudmFz
LmVuYWJsZSIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ2Fu
dmFzLmRpc2FibGUiLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkNhbnZhcy5kcm9wVHJhY2VMb2ciLCBbeyJuYW1lIjogInRyYWNlTG9nSWQiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiQ2FudmFzLmhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMiLCBbXSwgWyJyZXN1
bHQiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ2FudmFzLmNhcHR1cmVG
cmFtZSIsIFt7Im5hbWUiOiAiZnJhbWVJZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWV9XSwgWyJ0cmFjZUxvZ0lkIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkNhbnZhcy5zdGFydENhcHR1cmluZyIsIFt7Im5hbWUiOiAiZnJhbWVJZCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJ0cmFjZUxvZ0lkIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNhbnZhcy5zdG9wQ2FwdHVyaW5nIiwgW3sibmFtZSI6
ICJ0cmFjZUxvZ0lkIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNhbnZhcy5nZXRUcmFjZUxvZyIs
IFt7Im5hbWUiOiAidHJhY2VMb2dJZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZh
bHNlfSwgeyJuYW1lIjogInN0YXJ0T2Zmc2V0IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJtYXhMZW5ndGgiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlfV0sIFsidHJhY2VMb2ciXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiQ2FudmFzLnJlcGxheVRyYWNlTG9nIiwgW3sibmFtZSI6ICJ0cmFjZUxvZ0lkIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic3RlcE5vIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJyZXNvdXJjZVN0YXRlIl0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNhbnZhcy5nZXRSZXNvdXJjZUluZm8i
LCBbeyJuYW1lIjogInJlc291cmNlSWQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBm
YWxzZX1dLCBbInJlc291cmNlSW5mbyJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJDYW52YXMuZ2V0UmVzb3VyY2VTdGF0ZSIsIFt7Im5hbWUiOiAidHJhY2VMb2dJZCIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInJlc291cmNlSWQi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbInJlc291cmNlU3RhdGUi
XSk7Ci0KIC8vIElucHV0LgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlcklucHV0RGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIklucHV0Iik7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
SW5wdXQuZGlzcGF0Y2hLZXlFdmVudCIsIFt7Im5hbWUiOiAidHlwZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogIm1vZGlmaWVycyIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ1bm1vZGlmaWVkVGV4dCIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAia2V5SWRlbnRpZmllciIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAid2luZG93c1Zp
cnR1YWxLZXlDb2RlIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJuYXRpdmVWaXJ0dWFsS2V5Q29kZSIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAibWFjQ2hhckNvZGUiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogImF1dG9SZXBlYXQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJpc0tleXBhZCIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImlzU3lzdGVtS2V5IiwgInR5cGUiOiAiYm9vbGVh
biIsICJvcHRpb25hbCI6IHRydWV9XSwgW10pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb24gYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbgppbmRleCA3NzFmZWJjNmE3ZGE3
ODQyZGVkMGU2YWVhYzgzNzY3ZWJiMjNiNzg5Li40NjZkYmNhMGExYTNmMDEzMDEyMWM1ZjY4OWYx
ZTQwMjMwZWM4ZmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVmVyc2lvbnMv
SW5zcGVjdG9yLWlPUy03LjAuanNvbgorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVmVyc2lv
bnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbgpAQCAtMzAwNywxNzkgKzMwMDcsNiBAQAogICAgICAg
ICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAgICJkb21haW4iOiAiQ2FudmFzIiwKLSAgICAgICAg
InR5cGVzIjogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJpZCI6ICJSZXNvdXJj
ZUlkIiwKLSAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgcmVzb3VyY2UgaWRlbnRpZmllci4iCi0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJpZCI6ICJSZXNvdXJjZUluZm8i
LAotICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6
ICJSZXNvdXJjZUlkIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRlc2NyaXB0
aW9uIiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAiaWQiOiAiUmVzb3VyY2VTdGF0ZSIs
Ci0gICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjog
IlJlc291cmNlSWQiIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJ
ZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaW1hZ2VVUkwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiU2NyZWVuc2hvdCBpbWFnZSBkYXRhIFVSTC4iIH0KLSAgICAgICAgICAgICAgICBd
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJpZCI6ICJD
YWxsQXJndW1lbnQiLAotICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGVzY3JpcHRpb24iLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgICAgICBdCi0gICAg
ICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJpZCI6ICJDYWxsIiwK
LSAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnRleHRJZCIsICIk
cmVmIjogIlJlc291cmNlSWQiIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnVu
Y3Rpb25OYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFyZ3VtZW50cyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAiJHJlZiI6ICJDYWxsQXJndW1lbnQiIH0sICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAiJHJlZiI6ICJDYWxsQXJndW1l
bnQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
aXNEcmF3aW5nQ2FsbCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNGcmFtZUVuZENhbGwiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByb3BlcnR5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgIiRyZWYiOiAiQ2FsbEFyZ3VtZW50
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNv
dXJjZVVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJsaW5lTnVtYmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
dW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAg
ICAgICAgXQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAi
aWQiOiAiVHJhY2VMb2dJZCIsCi0gICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIHRyYWNlIGxvZyBpZGVudGlmaWVy
LiIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgImlkIjog
IlRyYWNlTG9nIiwKLSAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlk
IiwgIiRyZWYiOiAiVHJhY2VMb2dJZCIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjYWxscyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJDYWxsIiB9IH0s
Ci0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhcnRPZmZzZXQiLCAidHlwZSI6ICJp
bnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsaXZlIiwgInR5cGUi
OiAiYm9vbGVhbiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0b3RhbEF2YWls
YWJsZUNhbGxzIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICAgICAgXQotICAgICAg
ICAgICAgfQotICAgICAgICBdLAotICAgICAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIiwKLSAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRW5hYmxlcyBDYW52YXMgaW5zcGVjdGlvbi4iCi0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogImRpc2FibGUiLAotICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEaXNhYmxlcyBDYW52YXMgaW5zcGVjdGlvbi4iCi0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogImRy
b3BUcmFjZUxvZyIsCi0gICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0K
LSAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICJuYW1lIjogImhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMiLAotICAgICAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3Vs
dCIsICJ0eXBlIjogImJvb2xlYW4iIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJDaGVja3MgaWYgdGhlcmUgaXMgYW55IHVuaW5zdHJ1bWVudGVk
IGNhbnZhcyBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuIgotICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJjYXB0dXJlRnJhbWUiLAotICAgICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZy
YW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0aGUgZnJhbWUgY29udGFpbmluZyBkb2N1bWVudCB3
aG9zZSBjYW52YXNlcyBhcmUgdG8gYmUgY2FwdHVyZWQuIElmIG9taXR0ZWQsIG1haW4gZnJhbWUg
aXMgYXNzdW1lZC4iIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNlTG9nSWQiLCAiJHJl
ZiI6ICJUcmFjZUxvZ0lkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIHRyYWNl
IGxvZyBjb250YWluaW5nIGNhcHR1cmVkIGNhbnZhcyBjYWxscy4iIH0KLSAgICAgICAgICAgICAg
ICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMgKG9yIGNvbnRpbnVl
cykgYSBjYW52YXMgZnJhbWUgY2FwdHVyaW5nIHdoaWNoIHdpbGwgYmUgc3RvcHBlZCBhdXRvbWF0
aWNhbGx5IGFmdGVyIHRoZSBuZXh0IGZyYW1lIGlzIHByZXBhcmVkLiIKLSAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAic3RhcnRDYXB0dXJpbmci
LAotICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0aGUgZnJhbWUgY29udGFpbmlu
ZyBkb2N1bWVudCB3aG9zZSBjYW52YXNlcyBhcmUgdG8gYmUgY2FwdHVyZWQuIElmIG9taXR0ZWQs
IG1haW4gZnJhbWUgaXMgYXNzdW1lZC4iIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNl
TG9nSWQiLCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIg
b2YgdGhlIHRyYWNlIGxvZyBjb250YWluaW5nIGNhcHR1cmVkIGNhbnZhcyBjYWxscy4iIH0KLSAg
ICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMg
KG9yIGNvbnRpbnVlcykgY29uc2VjdXRpdmUgY2FudmFzIGZyYW1lcyBjYXB0dXJpbmcuIFRoZSBj
YXB0dXJpbmcgaXMgc3RvcHBlZCBieSB0aGUgY29ycmVzcG9uZGluZyBzdG9wQ2FwdHVyaW5nIGNv
bW1hbmQuIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAi
bmFtZSI6ICJzdG9wQ2FwdHVyaW5nIiwKLSAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmFjZUxvZ0lkIiwgIiRyZWYiOiAiVHJh
Y2VMb2dJZCIgfQotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAiZ2V0VHJhY2VMb2ciLAotICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNl
TG9nSWQiLCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInN0YXJ0T2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXhMZW5ndGgiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmFj
ZUxvZyIsICIkcmVmIjogIlRyYWNlTG9nIiB9Ci0gICAgICAgICAgICAgICAgXQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJyZXBsYXlUcmFj
ZUxvZyIsCi0gICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0sCi0gICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RlcE5vIiwgInR5cGUiOiAiaW50ZWdlciIgfQot
ICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VTdGF0ZSIsICIkcmVmIjogIlJlc291cmNl
U3RhdGUiIH0KLSAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICJuYW1lIjogImdldFJlc291cmNlSW5mbyIsCi0gICAgICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVz
b3VyY2VJZCIsICIkcmVmIjogIlJlc291cmNlSWQiIH0KLSAgICAgICAgICAgICAgICBdLAotICAg
ICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InJlc291cmNlSW5mbyIsICIkcmVmIjogIlJlc291cmNlSW5mbyIgfQotICAgICAgICAgICAgICAg
IF0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUi
OiAiZ2V0UmVzb3VyY2VTdGF0ZSIsCi0gICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0g
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNl
TG9nSWQiIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VJZCIsICIk
cmVmIjogIlJlc291cmNlSWQiIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAg
ICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlU3Rh
dGUiLCAiJHJlZiI6ICJSZXNvdXJjZVN0YXRlIiB9Ci0gICAgICAgICAgICAgICAgXQotICAgICAg
ICAgICAgfQotICAgICAgICBdLAotICAgICAgICAiZXZlbnRzIjogWwotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICJuYW1lIjogImNvbnRleHRDcmVhdGVkIiwKLSAgICAgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZUlk
IiwgIiRyZWYiOiAiTmV0d29yay5GcmFtZUlkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIg
b2YgdGhlIGZyYW1lIGNvbnRhaW5pbmcgYSBjYW52YXMgd2l0aCBhIGNvbnRleHQuIiB9Ci0gICAg
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hl
biBhIGNhbnZhcyBjb250ZXh0IGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIGdpdmVuIGZyYW1lLiBU
aGUgY29udGV4dCBtYXkgbm90IGJlIGluc3RydW1lbnRlZCAoc2VlIGhhc1VuaW5zdHJ1bWVudGVk
Q2FudmFzZXMgY29tbWFuZCkuIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAibmFtZSI6ICJ0cmFjZUxvZ3NSZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZUlkIiwg
IiRyZWYiOiAiTmV0d29yay5GcmFtZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIklmIGdpdmVuLCB0cmFjZSBsb2dzIGZyb20gdGhlIGdpdmVuIGZyYW1lIHdlcmUgcmVtb3Zl
ZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVm
IjogIlRyYWNlTG9nSWQiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgZ2l2
ZW4sIHRyYWNlIGxvZyB3aXRoIHRoZSBnaXZlbiBJRCB3YXMgcmVtb3ZlZC4iIH0KLSAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIGEg
c2V0IG9mIHRyYWNlIGxvZ3Mgd2VyZSByZW1vdmVkIGZyb20gdGhlIGJhY2tlbmQuIElmIG5vIHBh
cmFtZXRlcnMgYXJlIGdpdmVuLCBhbGwgdHJhY2UgbG9ncyB3ZXJlIHJlbW92ZWQuIgotICAgICAg
ICAgICAgfQotICAgICAgICBdCi0gICAgfSwKLSAgICB7CiAgICAgICAgICJkb21haW4iOiAiSW5w
dXQiLAogICAgICAgICAidHlwZXMiOiBbXSwKICAgICAgICAgImNvbW1hbmRzIjogWwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>